Compare commits

...

9 Commits

Author SHA1 Message Date
4fefa3340c patch default form values from loaded poll #105 2021-05-17 17:36:24 +02:00
a99290186c creation for simple date works 2021-05-17 16:15:54 +02:00
003f27ae82 split date choice 2021-05-17 15:25:22 +02:00
5c7aac3a53 move docs around 2021-05-17 13:39:52 +02:00
tykayn
52792ba647 0.6.0 2021-05-17 11:13:14 +02:00
08ab0482dd messing with package version 2021-05-17 11:13:11 +02:00
tykayn
3838894614 1.1.0 2021-05-17 11:11:35 +02:00
b3833ec830 add changelog script 2021-05-17 11:11:30 +02:00
6e0202a5a4 add mkdoc for all documentation 2021-05-17 10:57:09 +02:00
89 changed files with 3396 additions and 745 deletions

2
.gitignore vendored
View File

@ -52,3 +52,5 @@ Thumbs.db
# linter # linter
.eslintcache .eslintcache
.ztr-directory

View File

@ -60,6 +60,6 @@ build:
# artifacts: # artifacts:
# paths: # paths:
# - public # - public
# expire_in: 30 days # expire_in: 30 dateList
# only: # only:
# - master # - master

View File

@ -1 +1,542 @@
# Changelog ## v0.5.0 (2021-05-04)
* :zap: remove generated documentation from compodoc [View](https://bitbucket.org/projects/test/repos/my-project/commits/f358120516bbf027e53758c93a581f93bed3d10a)
* :book: merge documentation from the wiki in the folder doc [View](https://bitbucket.org/projects/test/repos/my-project/commits/c689a679e21e6e8fd4efff71ef95d555f9c59d82)
* :book: update contribute [View](https://bitbucket.org/projects/test/repos/my-project/commits/c4982267d2ae6980ef6f72694cb322ae8bec6092)
* :zap: ability to customize app title and app logo in header from environment vars. fixes #87 #88 #89. [View](https://bitbucket.org/projects/test/repos/my-project/commits/621101aa38e5732885aa184174cd1d97a157c49f)
* :book: move documentation to doc folder [View](https://bitbucket.org/projects/test/repos/my-project/commits/70acabb056c61da806f565927e063dba66e7592e)
* :book: DOC : desired feature added in doc [View](https://bitbucket.org/projects/test/repos/my-project/commits/14d2a109d30d29a1a83d616d3e543d0cdf4bc084)
* :alien: i18n header menu, :gears: splits routes, :fix: RED theme fix in switch [View](https://bitbucket.org/projects/test/repos/my-project/commits/b4f496b08dbd2bdea757b9f2feb1007a81d8b86e)
* hop [View](https://bitbucket.org/projects/test/repos/my-project/commits/6db96397ea4fc7735f4a921cd8a9a912dafa2221)
* remove some broken automation [View](https://bitbucket.org/projects/test/repos/my-project/commits/5f072fe3abee9c0b5cc5126a11188cd5b70a58c7)
* only send list of polls by email to user [View](https://bitbucket.org/projects/test/repos/my-project/commits/e5214fdd9757a207ee01a0e263c1ab63df1edc12)
* move dev menu slider and show it only in dev mode env [View](https://bitbucket.org/projects/test/repos/my-project/commits/6059533c3635684d8422c2bf1c12a975390af5b4)
* start form [View](https://bitbucket.org/projects/test/repos/my-project/commits/8cac3d18621c35f7f3d73fcc699017f04cefdc6b)
* add form array for choices [View](https://bitbucket.org/projects/test/repos/my-project/commits/d9301559ef99902c3901afd0ee4a6a5035e77b81)
* :hammer: test the build with gitlab CI [View](https://bitbucket.org/projects/test/repos/my-project/commits/41fd153991fb1e324664cd27b9c2d4aca8a4f408)
* add variables from env in footer [View](https://bitbucket.org/projects/test/repos/my-project/commits/b0026fabc471d34f718c8aff95fca2a33c0b3623)
* start combine choices array [View](https://bitbucket.org/projects/test/repos/my-project/commits/4bec5828b386b4be2d73837c97731997e1588106)
* dynamically add choices [View](https://bitbucket.org/projects/test/repos/my-project/commits/8c119739a72fc6767e46791c2341656f53e7fc04)
* add all config controls [View](https://bitbucket.org/projects/test/repos/my-project/commits/e5b8d5b65ec32f170610f0186ed08b6fc23a1568)
* multiple choices for creation [View](https://bitbucket.org/projects/test/repos/my-project/commits/fa534af3ab200835a16f38c2e7b5998cbadb45f6)
* :alien: i18n import po files from previous framadate version [View](https://bitbucket.org/projects/test/repos/my-project/commits/a5b0d2c2d45aa4b58fdd08669568dd7f22b5d795)
* :alien: i18n add extraction lib [View](https://bitbucket.org/projects/test/repos/my-project/commits/60eeddbf21a575e84f054afe5defe54e258bb54f)
* :bug: select lang wigthout lifecycle bug [View](https://bitbucket.org/projects/test/repos/my-project/commits/10c1930e4d5c4be1ec7d6af208dc939705020e89)
* reorder questions [View](https://bitbucket.org/projects/test/repos/my-project/commits/8df2b95c1e287ab7a3a4f0127b8ec616260126dc)
* translate homepage [View](https://bitbucket.org/projects/test/repos/my-project/commits/d07f51dd910ad243e030cfd1fdba041f8264d1e2)
* togglable advanced options [View](https://bitbucket.org/projects/test/repos/my-project/commits/d3042b3723839f6b4710b77024f0f0fb10a87455)
* add keybaord shortcuts on array for choices [View](https://bitbucket.org/projects/test/repos/my-project/commits/4769ecefc3b6b59887baec2625bd5e35f23f6554)
* :zap: more settings for admin form with time and answers groups [View](https://bitbucket.org/projects/test/repos/my-project/commits/82910a9aae0750c80b87a04bd1c6e6634e68f05b)
* add time to date func [View](https://bitbucket.org/projects/test/repos/my-project/commits/94162c796cf5016634eccdeb18fc132711055eb2)
* :alien: convert sentences from framadate1 to json files [View](https://bitbucket.org/projects/test/repos/my-project/commits/a4c2387e1257e9684147bb7af9184d4550fa2b8e)
* add sentences in fr and en from framadate 1 [View](https://bitbucket.org/projects/test/repos/my-project/commits/3700ede667e90a43eb39f301a396feacbe05d570)
* :art: add pictures from undraw, translate sentences on homepage [View](https://bitbucket.org/projects/test/repos/my-project/commits/04f04d622dea3f963273eb038bc1c99e2832f1ca)
* reuse automatic slug from poll config in form [View](https://bitbucket.org/projects/test/repos/my-project/commits/3306e7c29d4f811a6ba624595457768e8c237bcc)
* adding reodering of choices beginning [View](https://bitbucket.org/projects/test/repos/my-project/commits/1745762ba3125c7ad054284e4fd6b4020482d6f2)
* :zap: add api version config in env [View](https://bitbucket.org/projects/test/repos/my-project/commits/1167b692eaea2ffe711a7a56797ed3017624a184)
* add fields to config of poll [View](https://bitbucket.org/projects/test/repos/my-project/commits/4eef4c4220a4b8523e6f7a430afda12c563edaae)
* try to get the list of polls [View](https://bitbucket.org/projects/test/repos/my-project/commits/1b49231d924d0c3a69d43d5c02645b4d2621d50c)
* create success page and route [View](https://bitbucket.org/projects/test/repos/my-project/commits/03f7c49c519e2db062de3d64a1cfdd8c1f109e05)
* spacing buttons [View](https://bitbucket.org/projects/test/repos/my-project/commits/d4e5c614a9397fdd7feaa0dc6da1d1160ccd4c52)
* split of creation components [View](https://bitbucket.org/projects/test/repos/my-project/commits/84b69a1366dacb521d4295c99eb630f636429ac4)
* homepage texts [View](https://bitbucket.org/projects/test/repos/my-project/commits/2d9f1f7d40468d0b2ba3634e7cdd6cbf3f1a8118)
* home page reorder and statistics, todo component [View](https://bitbucket.org/projects/test/repos/my-project/commits/5bac37a7905ba1ccd16bab3568a366bf8b9d9090)
* link to static pages [View](https://bitbucket.org/projects/test/repos/my-project/commits/1717f738d19e65c22d91b1f429cde654fb677ad0)
* include advanced choices and toggle visibility of sub component [View](https://bitbucket.org/projects/test/repos/my-project/commits/feb0de8270204c31cbb92f6a6420644cc1a99e9e)
* ordering base fields [View](https://bitbucket.org/projects/test/repos/my-project/commits/f96dc1f3c44b413eef1b64b4ff9ea8abca9fc34a)
* link to base config [View](https://bitbucket.org/projects/test/repos/my-project/commits/2d49389d117b8060fd343e7815b0894e4413667d)
* add choices for the future [View](https://bitbucket.org/projects/test/repos/my-project/commits/237984c04073efa133ee2fd5ba18ee90a9e16a0e)
* harmonizing poll default properties with payload and advanced config [View](https://bitbucket.org/projects/test/repos/my-project/commits/2a4219e14941679da323d1fd066d6fb6ca62e6f9)
* testing ciphering page [View](https://bitbucket.org/projects/test/repos/my-project/commits/40c0c3888902b046c9ab9f65549c57abbff5a1c3)
* fill poll config default [View](https://bitbucket.org/projects/test/repos/my-project/commits/7140072ecc6d624e6e660cf694ea5d6b4b5c6376)
* patch kind of poll with patchvalue [View](https://bitbucket.org/projects/test/repos/my-project/commits/77cf4c6d04b5a7c7689e834dcc166dd5eca56b22)
* advanced button change color when active [View](https://bitbucket.org/projects/test/repos/my-project/commits/ce00a3ce695e7e6728bdeace31a66cc17359dcab)
* translate calendar contents, space options for days [View](https://bitbucket.org/projects/test/repos/my-project/commits/2edb828aa3a1e0d9e39f4abc6eefc0e0ef06c96b)
* visual sections for date selection [View](https://bitbucket.org/projects/test/repos/my-project/commits/de679721d1047d8ee7d780b23f0298b47af7bb21)
* drag and drop time interval [View](https://bitbucket.org/projects/test/repos/my-project/commits/7ca87e28b44887138b0b8b05bde47cca9024d990)
* display hour ranges [View](https://bitbucket.org/projects/test/repos/my-project/commits/5f4c2e04af08c896f3fb64d56157d007600f6f04)
* use crypto lib [View](https://bitbucket.org/projects/test/repos/my-project/commits/1ab5255bfa2aff83774132965842e357eb8494e4)
* add lib crypto [View](https://bitbucket.org/projects/test/repos/my-project/commits/4df2e00cbe228a19b10821be5025c0b11aeb27da)
* copy button [View](https://bitbucket.org/projects/test/repos/my-project/commits/760bde7e3069e6c2f84724b05c80c7260f7fc2a7)
* easy ciphering working with and without salt [View](https://bitbucket.org/projects/test/repos/my-project/commits/3e0c1ff3750a5f986dd850b6a6b765e19b8a1ad5)
* mixed salt for ciphering [View](https://bitbucket.org/projects/test/repos/my-project/commits/0885df23df39b20fa8ee16aa7c2b3fb1c13a8ec3)
* spacing dev menu button [View](https://bitbucket.org/projects/test/repos/my-project/commits/51de2b2e028305eabfdb9c6bb91a5758aa815344)
* add md5 lib to ciphering page [View](https://bitbucket.org/projects/test/repos/my-project/commits/d72e7763da7e60d551b3ee585555bfa83e6ddd11)
* listing char codes [View](https://bitbucket.org/projects/test/repos/my-project/commits/e5411ab425368ce6e3a7b024e8d9fb711e041018)
* compute entropy [View](https://bitbucket.org/projects/test/repos/my-project/commits/ddf5b40ef45290430f2c681ae0368ee2b98abecf)
* resize table for entropy [View](https://bitbucket.org/projects/test/repos/my-project/commits/e32db4983d014403c97e93a3faebb7ab2e318a59)
* compare entropy with generated pass [View](https://bitbucket.org/projects/test/repos/my-project/commits/e9a9d1a959b8141bdb56fe01d8d0ae7bcf2c8b06)
* chiffrement matrice ok [View](https://bitbucket.org/projects/test/repos/my-project/commits/73ad7426ee1f1b1b31f252ea30d16a810272d792)
* hop [View](https://bitbucket.org/projects/test/repos/my-project/commits/54ece76c7e916aa919d9e5abaca69efd7c12968d)
* fix types [View](https://bitbucket.org/projects/test/repos/my-project/commits/7b5cf59b9979f0da70af0f0ba7dd07c743ec851d)
* update env for prod [View](https://bitbucket.org/projects/test/repos/my-project/commits/3c3dddafa52f520658a70291b66fd42505aeee48)
* fix some production build warnings [View](https://bitbucket.org/projects/test/repos/my-project/commits/2993fc5cb5204bfd35ddc393b6805176e150461b)
* add stats [View](https://bitbucket.org/projects/test/repos/my-project/commits/2af45ae72708bec310febde7cbcf33020a1b83f0)
* using hash routes [View](https://bitbucket.org/projects/test/repos/my-project/commits/e63bbab75565370cdafe1c374bea97f5d777c71f)
* hide some components [View](https://bitbucket.org/projects/test/repos/my-project/commits/f3f2d6623bb1bc7aa8d36d2144ac46a47c98470a)
* choice template questions [View](https://bitbucket.org/projects/test/repos/my-project/commits/21040df287ccb46e9384273b6a352378a1d4ba76)
* date selector as question answers [View](https://bitbucket.org/projects/test/repos/my-project/commits/4a89b715a9e9a9f058c64f3384bd115a89170138)
* add theming in vars with blue variation [View](https://bitbucket.org/projects/test/repos/my-project/commits/b2806371585ba1d1810bfbb2edc977264fd6ba5d)
* default colors [View](https://bitbucket.org/projects/test/repos/my-project/commits/a744bf9931e472afd6a01bbb343c19a6fe095b03)
* setup theme comments [View](https://bitbucket.org/projects/test/repos/my-project/commits/2562b21d2ff9686d8a4cc35645f7ebed81093cd3)
* add fetching a poll with a pass hash [View](https://bitbucket.org/projects/test/repos/my-project/commits/3850f3811c135005131bdffef8cd760fa9cb9fb5)
* manage consultation path [View](https://bitbucket.org/projects/test/repos/my-project/commits/6cb32cb2e19276e28ee3d6c5bc7777a00edfc8ea)
* display de sondage de démo [View](https://bitbucket.org/projects/test/repos/my-project/commits/21aa634ce52beeab60bfc402178840f1f2eb0769)
* montrer consultation et préciser si aucun vote [View](https://bitbucket.org/projects/test/repos/my-project/commits/56273946c3f598e58df960a56756d877d443ece7)
* display title on poll page [View](https://bitbucket.org/projects/test/repos/my-project/commits/d84809d62a032dbe37d8da746fec12fc486a7fca)
* style on selected items in consultation page [View](https://bitbucket.org/projects/test/repos/my-project/commits/0c08e802c9a98d4182853092d615b4fd5f4994b1)
* scroll to top on route change [View](https://bitbucket.org/projects/test/repos/my-project/commits/74a928800edd8d67cfc428eb67d27aaddc33cffa)
* send form in dev mode, fill title demo [View](https://bitbucket.org/projects/test/repos/my-project/commits/215178efa9c6a3bc5e07d11b97dd0109ab356899)
* add comment on display [View](https://bitbucket.org/projects/test/repos/my-project/commits/078f63f742d29e5c1cb7426560047830f165ea97)
* export results added, models updates [View](https://bitbucket.org/projects/test/repos/my-project/commits/1e90d92ab9f6c25643600a254d032c486516a692)
* transmettre l'information d'expiration du sondage au front [View](https://bitbucket.org/projects/test/repos/my-project/commits/163b89b03ffc11c277f916379cb5631b0256d3af)
* fix models for backend update [View](https://bitbucket.org/projects/test/repos/my-project/commits/e45b490c2fdbdff37e5a252a478091b52b287612)
* key created_at for comment, format date [View](https://bitbucket.org/projects/test/repos/my-project/commits/2d3457cf6fa872fe277dcff3a43b93d8be5353a7)
* show counters on answers and favourite answer [View](https://bitbucket.org/projects/test/repos/my-project/commits/0abf924caedeebe008292c230dae3a2af40f028f)
* display details too [View](https://bitbucket.org/projects/test/repos/my-project/commits/9a4a72a24c781e24f773462c8978cf59ded6821b)
* info in modal [View](https://bitbucket.org/projects/test/repos/my-project/commits/729dac95993b4997eae4691bcfaec2630714a8aa)
* fixes for building in prod [View](https://bitbucket.org/projects/test/repos/my-project/commits/7a0061eeb1d2018857a78dcff9674df2076c0999)
* stack of vote relié au formulaire de commentaire [View](https://bitbucket.org/projects/test/repos/my-project/commits/620a7b99fac22a6809149d753410f5bf885c0570)
* set choices and toggle votes in votestack [View](https://bitbucket.org/projects/test/repos/my-project/commits/f1e6b5955ee16f4ec65828f6bd48930b606b879e)
* display stack answer and toggle fluently between answers to votes [View](https://bitbucket.org/projects/test/repos/my-project/commits/4464a0af2cae1c9c9c25c6b1762d28634c3b4207)
* default value of vote added [View](https://bitbucket.org/projects/test/repos/my-project/commits/cbc4bd8f5d85b0a6f1e3bc797c47564cee5c4e62)
* choice button refacto [View](https://bitbucket.org/projects/test/repos/my-project/commits/3abef619c8ce77cc1f9ba014a952fbb96456b01d)
* send stack of votes button linked to api [View](https://bitbucket.org/projects/test/repos/my-project/commits/7a83beae8e5ca64c21759b3337de0ecb30c06937)
* trying to send vot stack but getting CORS issue [View](https://bitbucket.org/projects/test/repos/my-project/commits/30d4adec373ae2714b25d46e704beef73785cfc0)
* use httpclient [View](https://bitbucket.org/projects/test/repos/my-project/commits/e61542b6521722eafafb989dd88fa482ae07caac)
* default backend to framadate demo api [View](https://bitbucket.org/projects/test/repos/my-project/commits/b2b8056b7eb35fef9de30adc7c897ee6c5d2d2a5)
* add good hash in route [View](https://bitbucket.org/projects/test/repos/my-project/commits/d5bc5777b787060dfaa84c1ed7599bff272b5507)
* move old stuff [View](https://bitbucket.org/projects/test/repos/my-project/commits/fdcb7327f0b65a4ce8c7ae6f8a5bec9f5592c026)
* rename utils services [View](https://bitbucket.org/projects/test/repos/my-project/commits/b9181b5b3fe6b7163ffefbb0bea3e70a186bee53)
* auto send vote in dev mode [View](https://bitbucket.org/projects/test/repos/my-project/commits/3a89645e66b9445e61bf67c50805b9682a538931)
* manage mobile menu, and add poll title to page title [View](https://bitbucket.org/projects/test/repos/my-project/commits/31f0f19a9ae2120ac3394414e79649a44ee2de14)
* nav disable default show [View](https://bitbucket.org/projects/test/repos/my-project/commits/78a88d3163f73a161649a0ed17d4038f458d5bcc)
* nav items for demos in mobile menu [View](https://bitbucket.org/projects/test/repos/my-project/commits/69f8eac147f413a1f7bbb9c2d2b12b6526e63419)
* change icons for answer [View](https://bitbucket.org/projects/test/repos/my-project/commits/9e4d5187b523891568387526e1a7cc749d6a5a44)
* toast message on error send vote stack [View](https://bitbucket.org/projects/test/repos/my-project/commits/765299e1c3ae69bebfbad281592d9460ef4f9aa4)
* creation poll style, fill DTO for creation [View](https://bitbucket.org/projects/test/repos/my-project/commits/585d3a215e62ee115d0bace3c5bc0c6f650c2b59)
* auto save on dev env [View](https://bitbucket.org/projects/test/repos/my-project/commits/12a41b502217ce8c2f0df9673ca7a21f80550409)
* flatten form fields [View](https://bitbucket.org/projects/test/repos/my-project/commits/d08bba4fcb4ffbb5b4b28cd948babc21059b8bfe)
* advanced fields flattened [View](https://bitbucket.org/projects/test/repos/my-project/commits/e405a09c78af01fdb02a0fa7b4f75fc92cee7c34)
* splitting date choices with a separator [View](https://bitbucket.org/projects/test/repos/my-project/commits/975997b7675876f5596e34533e50d76f1c6c8809)
* group display of days [View](https://bitbucket.org/projects/test/repos/my-project/commits/86c0ff815f824b9119d36482cd85fc668eccf7cb)
* ability to toggle answers on grouped choices [View](https://bitbucket.org/projects/test/repos/my-project/commits/16db2a69cf687e2f99b9faec96e87c4d89d06458)
* update url to copy after creation [View](https://bitbucket.org/projects/test/repos/my-project/commits/bfdb18b316ffaf614b58a33ebdb195d1e793cc0a)
* link function [View](https://bitbucket.org/projects/test/repos/my-project/commits/b2ee8ec668d252a23389780f977bba3c58a79512)
* hop [View](https://bitbucket.org/projects/test/repos/my-project/commits/dc382017a2ab64fddbe6ca6f31b8419f24e8c0b3)
* fix url public [View](https://bitbucket.org/projects/test/repos/my-project/commits/59cb917ea36ac9cb4b21fb2d93fe01bc067c8935)
* fix test kind [View](https://bitbucket.org/projects/test/repos/my-project/commits/ed13c98b99048078a9ff3bd23ff32ab34f68c349)
* hash routes re enabled [View](https://bitbucket.org/projects/test/repos/my-project/commits/d7a35e91edb3d6f75ddb0946d8d288b20627c925)
* fix get participation url [View](https://bitbucket.org/projects/test/repos/my-project/commits/9a013f6d2cd29832d98fa81352f39db0a12fe60c)
* better mix on creation of poll [View](https://bitbucket.org/projects/test/repos/my-project/commits/d40aa6a3ae0152f53da4f29379800ab146b8fc89)
* no auto send form [View](https://bitbucket.org/projects/test/repos/my-project/commits/c3026639948ce0b4adc5ef22704c076e79407fbd)
* fix deps to config prop [View](https://bitbucket.org/projects/test/repos/my-project/commits/e7343810d5612f5ce30d41536c5c9a1d77093d31)
* env message demo dans le header [View](https://bitbucket.org/projects/test/repos/my-project/commits/d222d88872012f4cf22c34da9370bb6d2cba5d71)
* home display stored polls [View](https://bitbucket.org/projects/test/repos/my-project/commits/1bfe747e4cd256a42bd4c17f9b25fc1c3175131a)
* more responsive menu header [View](https://bitbucket.org/projects/test/repos/my-project/commits/bf1df96dcdbdf15905a8db2d61716466c838cfd8)
* enable loading state in api creation, success page update [View](https://bitbucket.org/projects/test/repos/my-project/commits/a969b30a03bd6e2ab93d352b5fceccd8420b6983)
* add to local polls after creation, update poll [View](https://bitbucket.org/projects/test/repos/my-project/commits/10177d793bf0af056f96e4873b4bbfd12d7c0bee)
* fix icon [View](https://bitbucket.org/projects/test/repos/my-project/commits/f6b522748a3e78735926764580a08145def159de)
* display of success links [View](https://bitbucket.org/projects/test/repos/my-project/commits/1755f205ad41e6b10fa8b656746d65e578456bbc)
* update custom_url with title [View](https://bitbucket.org/projects/test/repos/my-project/commits/f1e5903d0aa2d444b9dd5dc1ecdf3f30e2b61f22)
* smaller uniq id in custom_url [View](https://bitbucket.org/projects/test/repos/my-project/commits/5d39b7aa3e5f045f4270729f6c6daa2cd9ea79a9)
* erasable button on first field [View](https://bitbucket.org/projects/test/repos/my-project/commits/6fdb56786aa1cbd33badb80d00184aefcf6b64bd)
* same time span for every day by default, clean config [View](https://bitbucket.org/projects/test/repos/my-project/commits/c0ca623885d923c873c7d5796f1f687dfa148f8e)
* display time slices [View](https://bitbucket.org/projects/test/repos/my-project/commits/af4dfacec9107678069b2dd909473ac68549a728)
* empty and reset time slices [View](https://bitbucket.org/projects/test/repos/my-project/commits/1d8aeb2f54711709cd6209fde3615c43e2d78598)
* display all on creation [View](https://bitbucket.org/projects/test/repos/my-project/commits/d7eac8d56c68923b74516d688eeea3d421201567)
* display fields errors [View](https://bitbucket.org/projects/test/repos/my-project/commits/9cd847be8f099509a55518b092b1d0645c1967ee)
* less logs for validation [View](https://bitbucket.org/projects/test/repos/my-project/commits/186e5e36da6f4b424df0e127d7f52980551ef787)
* separate choice from form [View](https://bitbucket.org/projects/test/repos/my-project/commits/f6ce22480cbd1fe1ed9e1bb0a038cc6df8fa2030)
## v0.4.0 (2020-06-26)
* Ajout du lien vers le rendu [View](https://bitbucket.org/projects/test/repos/my-project/commits/983c64a1b4f542d743ee8f1029a4ca8662a3df95)
* Pose les textes de la première page de la maquette [View](https://bitbucket.org/projects/test/repos/my-project/commits/e9a85fe44a505a0444d72ae43e0a6a2e8003da3e)
* Changement de la structure HTML de base, inspiré de https://github.com/DavidBruant/better-defaults [View](https://bitbucket.org/projects/test/repos/my-project/commits/57b023425107ff786381339dab09e0344e03eb26)
* Habillage minimum de l'accueil [View](https://bitbucket.org/projects/test/repos/my-project/commits/2ca0982f6ee7181e701680d9ee63108bc34028d3)
* Ajoute les pages statiques de la navigation [View](https://bitbucket.org/projects/test/repos/my-project/commits/fac4efab3c48c70a0527641f0504031878141502)
* Ajoute un script docker pour lancer un serveur localement pour développer sur la maquette [View](https://bitbucket.org/projects/test/repos/my-project/commits/e30135786a4f6c3d39588afa00d17491a9406d1d)
* Documente le processus pour lancer le projet localement [View](https://bitbucket.org/projects/test/repos/my-project/commits/caf4cf7d2c7dd4969929c6290ab311df44bf1eaf)
* Ajout du parcour vers le sondage classique [View](https://bitbucket.org/projects/test/repos/my-project/commits/a248b803079b2ae58d86e8fa1b3e2cdb57fd8f74)
* ajout des champs de formulaire dans la page notifications [View](https://bitbucket.org/projects/test/repos/my-project/commits/1cc8e6beb442d3b365b73f0be2f525ff9f1bcb0d)
* Création du fichier js [View](https://bitbucket.org/projects/test/repos/my-project/commits/cb07e90e63ae8ec4ab1f91fe01630f7cc0cd8770)
* Ajoute le lien vers les natural language form [View](https://bitbucket.org/projects/test/repos/my-project/commits/b3b9797e8cd437efefee1ae6028dba433d62874e)
* Bifurcation sur le sondate en fonction du choix [View](https://bitbucket.org/projects/test/repos/my-project/commits/0f6abfa7b9ceea6fdd0d17366e77ea3929b9beb0)
* Usage du localStorage [View](https://bitbucket.org/projects/test/repos/my-project/commits/affb5500e734c94aa6526d1e8106f3b849871160)
* Ajoute la ponctuation [View](https://bitbucket.org/projects/test/repos/my-project/commits/23902aca1fb69cd40556896be744bfbf053dd8b8)
* Affiche un texte par défaut, et propose une popup pour saisi [View](https://bitbucket.org/projects/test/repos/my-project/commits/053d24c158c6e55888f42262d481d6bfb30e8013)
* Changement du nom, sans javascript, ou avec [View](https://bitbucket.org/projects/test/repos/my-project/commits/bf23bee2827d9197b646168c1a6606c13f890ed4)
* Généralise l'usage du champs text [View](https://bitbucket.org/projects/test/repos/my-project/commits/105b98388573ba5d6a1abe91a9e5b67db51c9169)
* Embelli les deux champs texte de la fin de sondage [View](https://bitbucket.org/projects/test/repos/my-project/commits/3229d14993c61eeb595971191c6b86c76707bb9d)
* Embelli le champ texte de l'index [View](https://bitbucket.org/projects/test/repos/my-project/commits/44b60adba0ee9c5b6ac515a926d7f4960023ba32)
* Base de reflexion pour l'ajout d'option [View](https://bitbucket.org/projects/test/repos/my-project/commits/91b94e806f1572a096d655932f352c26540c312c)
* Deploy on funky [View](https://bitbucket.org/projects/test/repos/my-project/commits/0ec23c03d3d16bc5f0979f678e696bdfed4f63a0)
* Update .gitlab-ci.yml [View](https://bitbucket.org/projects/test/repos/my-project/commits/9a045b4608b87d85f3ace567042991dab7b85828)
* Update .gitlab-ci.yml [View](https://bitbucket.org/projects/test/repos/my-project/commits/8ecb77c322df2b3d331c8a60b3c61bd7ac797d9a)
* Update .gitlab-ci.yml [View](https://bitbucket.org/projects/test/repos/my-project/commits/5edd7c6cd5edfae997ec2e4cece9fc524e51cebe)
* give up on bash & alpine [View](https://bitbucket.org/projects/test/repos/my-project/commits/ee2dfb7002c1a553e123f58ff1b3a5b1df7f63f4)
* Recherche de sondate en deux temps [View](https://bitbucket.org/projects/test/repos/my-project/commits/55ca50890f7d132bb626811aa9e50cce24d5f996)
* Déplace la date plus haut dans la page des notif. [View](https://bitbucket.org/projects/test/repos/my-project/commits/4d8e493c7049fbb9299c2b93fe2e914518c88f4c)
* Selectionne les options d'un sondage dates [View](https://bitbucket.org/projects/test/repos/my-project/commits/d151724e87b20500d19c022fa3a8f90066dfa533)
* Ajoute des informations sur la page de validation [View](https://bitbucket.org/projects/test/repos/my-project/commits/23b43fe5345f9a8fe2b6e77531def3eabb8a8125)
* Ajoute une option image + lien [View](https://bitbucket.org/projects/test/repos/my-project/commits/cdbe0a12e16156ae2ab7a4a854fdb57dd806d644)
* Ajout d'un champ texte en cas de sondage classique [View](https://bitbucket.org/projects/test/repos/my-project/commits/45319fcfd65a784f8e312a621cf3d1faaccfac6b)
* changement de l'URL de demo [View](https://bitbucket.org/projects/test/repos/my-project/commits/d48879c8f651ac4cd288d9914903fcd9d34ab671)
* fix(#16): amélioration de l'affichage de la page dates [View](https://bitbucket.org/projects/test/repos/my-project/commits/d4ad832004e399a289c9fa960a30caf38e6b4570)
* fix(#3): amélioration du design des boutons [View](https://bitbucket.org/projects/test/repos/my-project/commits/7505340c037682cf2894079aed1177499a162542)
* fix(#4): proposition d'amélioration d'affichage des champs textes [View](https://bitbucket.org/projects/test/repos/my-project/commits/19905b208e224eb77127e664cbc6b54aeee2a5d1)
* fix(#5): amélioration de l'apparence du textarea [View](https://bitbucket.org/projects/test/repos/my-project/commits/b2c79980c3ef4047bf0a073fe73f5220e3ebf737)
* fix(#15): amélioration du design de la page validation [View](https://bitbucket.org/projects/test/repos/my-project/commits/08b4e8bed0123a363f4f7d4edc6f0a11fbce2074)
* changement de la taille de typo [View](https://bitbucket.org/projects/test/repos/my-project/commits/d99f3af9212c328a3b20d626ca542117dcc69e4a)
* amélioration de l'affichage de l'email [View](https://bitbucket.org/projects/test/repos/my-project/commits/f566c30ee129d736c48f7a7af404bf3e8b244d38)
* ajout du style de bouton primary [View](https://bitbucket.org/projects/test/repos/my-project/commits/0ffbdca9ad4495124c386ab84fd15c55214e6809)
* amélioration de récapitulatif [View](https://bitbucket.org/projects/test/repos/my-project/commits/925ad5a5575af5414457b50cc6944e41d6da2591)
* ajout d'une classe bold [View](https://bitbucket.org/projects/test/repos/my-project/commits/77329039772e1342c03d46431b3034757f919010)
* amélioration affichage champs email [View](https://bitbucket.org/projects/test/repos/my-project/commits/bf4ccd61643aea3bdfdf7502ab693569706e1edb)
* proposition affichage des dates [View](https://bitbucket.org/projects/test/repos/my-project/commits/e3be6ad85a8dcea0dde9c0621b253e96d2a46cb3)
* amélioration de l'affichage des icones [View](https://bitbucket.org/projects/test/repos/my-project/commits/de5e3604b7524952940dbc494f328f34737d1d94)
* amélioration de l'affichage des icones [View](https://bitbucket.org/projects/test/repos/my-project/commits/531fd91aef8a8852085bd55202192fab76aa8eda)
* Ajoute des dates, et les enregistres dans le localStorage [View](https://bitbucket.org/projects/test/repos/my-project/commits/8f309740c18e25586434e9095f51ab064c9a9587)
* Affiche le titre du sondage dans la page de validation [View](https://bitbucket.org/projects/test/repos/my-project/commits/b1ab16bd11195294e080ecbd7a903191be55cc6a)
* Récupère l'ancien framadate [View](https://bitbucket.org/projects/test/repos/my-project/commits/50e56a0396610ac4f970b7ecc1702222c1981421)
* propose un champe vide par défaut [View](https://bitbucket.org/projects/test/repos/my-project/commits/4a6b039fa974e2df5b7062ee3079873f33c3949a)
* Met à jour le readme [View](https://bitbucket.org/projects/test/repos/my-project/commits/e5a4cde537a40691fbe2ac5dd2bacd7ea59dba76)
* Utilise un sondage spécial date par défaut [View](https://bitbucket.org/projects/test/repos/my-project/commits/90c014222f5322ca34cdfeb5c8720cd30e69e966)
* revois la page suivante par defaut [View](https://bitbucket.org/projects/test/repos/my-project/commits/2c9d5fa912e2ceb2cb32e1ad573d898d88305a8f)
* affiche uniquement les options nécessaire pour les date [View](https://bitbucket.org/projects/test/repos/my-project/commits/18d649dab9201c33ce156f5450d2d68dba7d1a47)
* reformule le texte de la page des dates [View](https://bitbucket.org/projects/test/repos/my-project/commits/eb79e6161117d5155482249536f053e6e24c9589)
* affiche les horaires dans un sondage spécial dates [View](https://bitbucket.org/projects/test/repos/my-project/commits/a5f3e96ad190b6c19c6f84f57884cf3892c13a8f)
* ajoute un bouton pour ajouter des horaires [View](https://bitbucket.org/projects/test/repos/my-project/commits/9c27b43d3bbd17ece53edde92b4ea85334f66d1c)
* affiche le récapitulatif en fonction des dates qui ont été saisies [View](https://bitbucket.org/projects/test/repos/my-project/commits/f6ded6f5fa2df0eb957f6512b8772eb09e2f938b)
* passage à du plus joli [View](https://bitbucket.org/projects/test/repos/my-project/commits/b5581c7127d96ee75856242b076b1b4632dea8d4)
* Dossier screenshots pour voir l'avancement ! [View](https://bitbucket.org/projects/test/repos/my-project/commits/91460d407700f2e6feac19e97c8d9468aef83d23)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/d6c81848ea028fc10d746dbd31f2434cece8f137)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/f5cd418a5767dc70413be45285c34f5623c5117f)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/018987e6ae0dad4b878baa828ffa50ce7b82b531)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/3f80ba64ee15bd497699fafdd26e6b7a3c9540db)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/a46d24f267463b31a27a16967de7d1928c813f77)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/376f093a00f958979e09913cc708a69cca27fed2)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/18b984d478d974df5cd5db47d9306c3c95a02a2e)
* ajoute un lien vers l'exmple de natural language form [View](https://bitbucket.org/projects/test/repos/my-project/commits/e22559a6462240b69cfc74f522bb183542743f5f)
* Restart from scratch [View](https://bitbucket.org/projects/test/repos/my-project/commits/39242f22dbf321461d49bbf47f87274219210626)
* removed useless files [View](https://bitbucket.org/projects/test/repos/my-project/commits/61f69c926e879604936f73e3fe4726dbd8ee5dda)
* :tada: initialize Angular version of Framdate funky front end [View](https://bitbucket.org/projects/test/repos/my-project/commits/40b1a7bbf9c67f85d21c4212a7af51f9cb98d07b)
* hop [View](https://bitbucket.org/projects/test/repos/my-project/commits/512d569c54ce255f329a6883b1ba1c0bd86ffc18)
* :zap: make routing, link data with poll config. :art: style sheets [View](https://bitbucket.org/projects/test/repos/my-project/commits/d5f71504dc66c12a0ec9df91b5fb6a646aa098fc)
* real example of config [View](https://bitbucket.org/projects/test/repos/my-project/commits/c048c35b9d6aad8664ecd2fb208f047a1ab3eefc)
* :zap: example of navigation [View](https://bitbucket.org/projects/test/repos/my-project/commits/42f229f686bcf61ea4d8e3c877847937a12ae16e)
* :zap: example of navigation [View](https://bitbucket.org/projects/test/repos/my-project/commits/46cce96dab991af2de358e66daadbff9dda5079d)
* :zap: rename components [View](https://bitbucket.org/projects/test/repos/my-project/commits/e238b0aceb1fb2776242ef74cba46b5d27feebd7)
* :zap: make pages components, split config of poll from service [View](https://bitbucket.org/projects/test/repos/my-project/commits/56aa09df3bb71342aafd31ce95cba6e2733d1767)
* :zap: make pages components and nav [View](https://bitbucket.org/projects/test/repos/my-project/commits/49f4b4c13b555e0498d7bc2c8770e446d2ec2968)
* :zap: sync answers [View](https://bitbucket.org/projects/test/repos/my-project/commits/d413774d3b473c5355e2a52f1d0f73efa90b3ab8)
* :zap: ability to add a new answer and focus [View](https://bitbucket.org/projects/test/repos/my-project/commits/488b9f677ac9048062304a55f9ad6d6ff5630444)
* :zap: all steps and demo page [View](https://bitbucket.org/projects/test/repos/my-project/commits/54c7c6568d2cba66d0088b5bd0b8f3c401645445)
* focus via injected document [View](https://bitbucket.org/projects/test/repos/my-project/commits/d9b81d3d8ef5001fd7e199afcd05051263b21973)
* Correcting routing at the end of the form [View](https://bitbucket.org/projects/test/repos/my-project/commits/504d8faddf5ff608e63e2081bbbc2ab880860632)
* add fonts folder [View](https://bitbucket.org/projects/test/repos/my-project/commits/3fa61053a53518c57ba142ffee180f1cf9c9732d)
* fix(styles files): improve styles folders [View](https://bitbucket.org/projects/test/repos/my-project/commits/74b991362aa181ac64fa2882cd5ed3a1142d1536)
* Ajouter un nouveau dossier [View](https://bitbucket.org/projects/test/repos/my-project/commits/c77792b0575902f8b52b80483808a672fbc1cf8c)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/c0491a433b2556c917fcd0771b20bf0026ef07a4)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/9a9450dc0dcf23b8931fea51ae90455947a95e87)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/0c00813056699d552f5990f825dd9612fc5443ab)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/51540252844a8019cde41f4137effa10546127d8)
* Ajouter un nouveau dossier [View](https://bitbucket.org/projects/test/repos/my-project/commits/04d6a1b430214853e235fad96c5d8b9707114063)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/5cada8fc32beb844e0cd78a5bf3a084d10f2e05c)
* Téléverser un nouveau fichier [View](https://bitbucket.org/projects/test/repos/my-project/commits/c1bf0631571d25cb669288caab7c1a74f14fa9a8)
* :zap: change privacy of properties [View](https://bitbucket.org/projects/test/repos/my-project/commits/d5e5550c54102ca3e1ddf3988139f036a09bcd9a)
* :zap: page creation or retrieve start [#28] [View](https://bitbucket.org/projects/test/repos/my-project/commits/6532538da3dfc07b9fdd328a984b431868580a67)
* styling in mobile column [View](https://bitbucket.org/projects/test/repos/my-project/commits/56a7271325dde04724aa1648e4cb3433b56020d9)
* :zap: lien entre multiple dates et config [View](https://bitbucket.org/projects/test/repos/my-project/commits/d941d6bed86ed922667c9fd806709efc96e6c236)
* :art: style of cursor hovering buttons [View](https://bitbucket.org/projects/test/repos/my-project/commits/16e8ab4ec5d3fb2cd522ca890066a653f230939c)
* :zap: add my name input in first form [View](https://bitbucket.org/projects/test/repos/my-project/commits/8eecb506c3c448273a2d52fc7f28733b09e93717)
* Remove my editor config files [View](https://bitbucket.org/projects/test/repos/my-project/commits/4bb851640bba5054c282e97144d8916bc5aa1957)
* Add calendar component [View](https://bitbucket.org/projects/test/repos/my-project/commits/9dace55091d8f8d5cfe72764a2ac54d0fa1de2a8)
* added web fonts [View](https://bitbucket.org/projects/test/repos/my-project/commits/7fcd13f05a1d07be698cb40f6855c3181a2f169f)
* Modification de la page de création [View](https://bitbucket.org/projects/test/repos/my-project/commits/189f5915c17604a6ced866a98ee735fdf73dffe7)
* added bootstrap reboot as a CSS reset [View](https://bitbucket.org/projects/test/repos/my-project/commits/ce53ccf55f9370bc1da8202189497d9178a44c45)
* improved heading code [View](https://bitbucket.org/projects/test/repos/my-project/commits/918999178495e5541498a02a4b495bf3b324863f)
* Modification des liens [View](https://bitbucket.org/projects/test/repos/my-project/commits/13144d5b8c28986a450170f2421a34482b66da59)
* ordered links file + added sass [View](https://bitbucket.org/projects/test/repos/my-project/commits/5ae1aeabeb561bff94758b50b61e9d26c83480ad)
* improve markup, hide useless decortion for a and h1 in header [View](https://bitbucket.org/projects/test/repos/my-project/commits/c47e00a82481c8c0415b137b406623d0d63f9bd2)
* improve global display [View](https://bitbucket.org/projects/test/repos/my-project/commits/74285393d885870340ecb60a6d8b79f360abfaea)
* Adding basic date filling [View](https://bitbucket.org/projects/test/repos/my-project/commits/9031b60178bf2c4a25bc596161429fa6a24858c2)
* :art: organize fonts in folders [View](https://bitbucket.org/projects/test/repos/my-project/commits/2d03578a1d6fef9431a79950b1e24f13c71ce44c)
* :art: remove blue in links of the bootstrap lib, add strike line on create button [View](https://bitbucket.org/projects/test/repos/my-project/commits/07989e454fb4df951177831a0e3d793cbba54198)
* :art: striked button and icon style [View](https://bitbucket.org/projects/test/repos/my-project/commits/29bfe45acac4905a4f9df4f343993beebe9c6fee)
* :bug: remove page folder, refacto in pages folder for creation page [View](https://bitbucket.org/projects/test/repos/my-project/commits/8291f2d8de90b54f4bd6dac6d4384589f8eabdf8)
* fix(headings): moved h1 with border to component [View](https://bitbucket.org/projects/test/repos/my-project/commits/1753515797ddca6d20ee3464d73e0421332abdec)
* style(default): added font color [View](https://bitbucket.org/projects/test/repos/my-project/commits/e91c66eef42b7b614458e65cef9dd80660f0a836)
* worked on links [View](https://bitbucket.org/projects/test/repos/my-project/commits/f0da02371ddf0a46c3166ec9228a3f7a8e7603b6)
* style(hover): added hover color [View](https://bitbucket.org/projects/test/repos/my-project/commits/c3b9ddfb7221c5cba0ab9997fc715096d29df72d)
* Modify input's style [View](https://bitbucket.org/projects/test/repos/my-project/commits/7e4feb9350d39880d42505d6a80159d05a49f5f2)
* Fix password css object [View](https://bitbucket.org/projects/test/repos/my-project/commits/ecbf7878569c519c41b96001ca2198212f13a5c3)
* modifications sur les liens & les buttons [View](https://bitbucket.org/projects/test/repos/my-project/commits/435a1d58c90acdd6b373919387558de65bd922c3)
* Personalize p html balise [View](https://bitbucket.org/projects/test/repos/my-project/commits/b0ca964c7558c6589aa3cd9d4c4b543a07b9e48c)
* added list of elements [View](https://bitbucket.org/projects/test/repos/my-project/commits/8ac8b696aad5bf0358fdd06cbcdc8a6fea718979)
* worked a bit on display [View](https://bitbucket.org/projects/test/repos/my-project/commits/93b9908a407999324b50d85619cb185266fbebb0)
* worked on home [View](https://bitbucket.org/projects/test/repos/my-project/commits/807b6bc66020c279c4e7296d718579d6837bd671)
* added delete buttons [View](https://bitbucket.org/projects/test/repos/my-project/commits/c64f6b9ebe17554c500224784417471fb0f93ce5)
* added useful classes and comments [View](https://bitbucket.org/projects/test/repos/my-project/commits/58835864d32061c0d1e4c2da8cd00a98561f5b9f)
* corrected links background [View](https://bitbucket.org/projects/test/repos/my-project/commits/fcc770f82de0b47a81c8c74cdbd029e82f58005c)
* Add img [View](https://bitbucket.org/projects/test/repos/my-project/commits/00e3f00c9adecf6f93d8c3259b7cf71db3fe347a)
* select modify [View](https://bitbucket.org/projects/test/repos/my-project/commits/ccf37a85362d9f3a226d0a8e3721702a616ec2c0)
* minimal commit [View](https://bitbucket.org/projects/test/repos/my-project/commits/5f796b817a60eee9a7fc609cf00e73959e63209e)
* Add dropdown arrow [View](https://bitbucket.org/projects/test/repos/my-project/commits/2e1078c4e437372a8e5705709260cbb76e6264ac)
* :zap: format html, :alien: up translate file [View](https://bitbucket.org/projects/test/repos/my-project/commits/320c9504677d521a4011ec4f88c680b1b7177667)
* :zap: add pages [View](https://bitbucket.org/projects/test/repos/my-project/commits/018b1ce83eb84a74bafc35bc48fc3404338c384c)
* Change colors [View](https://bitbucket.org/projects/test/repos/my-project/commits/9996d954dd5adafd3951e2357ae35fad6f99784e)
* Add input borders [View](https://bitbucket.org/projects/test/repos/my-project/commits/1d6f1dc95580fb8432af93290b731c1e107ecea7)
* delete left border on textarea [View](https://bitbucket.org/projects/test/repos/my-project/commits/b763252d765360da96f29c827258b76e100be567)
* Change png to svg select image [View](https://bitbucket.org/projects/test/repos/my-project/commits/b091a190cf24785e78bce31086ce7f09aa527c64)
* change select padding [View](https://bitbucket.org/projects/test/repos/my-project/commits/bddc200cbdc44e0266eaa018c0d9f9a0dff5e8e0)
* change select padding [View](https://bitbucket.org/projects/test/repos/my-project/commits/e00dff4acb1a09f759779656af0a80e5d5e72718)
* remove placeholder [View](https://bitbucket.org/projects/test/repos/my-project/commits/ba4fad8a31660e5c0a761e7507d9ff7a6f858a0b)
* change home order text [View](https://bitbucket.org/projects/test/repos/my-project/commits/48e77024d54edfa950ed1cc89eab4110c830b8ff)
* added flex-line [View](https://bitbucket.org/projects/test/repos/my-project/commits/cb6979926d282129cee11c56b352e46a97c58f14)
* added wrap to flex-line [View](https://bitbucket.org/projects/test/repos/my-project/commits/ef9a0fe7704a18da5c5b4e75ee0839b53e6e70c3)
* changed content width [View](https://bitbucket.org/projects/test/repos/my-project/commits/53a550bdc1ce33f691bffa0cd40a579142dcea05)
* Change button style on home [View](https://bitbucket.org/projects/test/repos/my-project/commits/3be3bb44f1886e72a828662d267c090a477a0627)
* style answers page [View](https://bitbucket.org/projects/test/repos/my-project/commits/e0898ba3945b8617609bc1a1a24646e27d1713ee)
* add button [View](https://bitbucket.org/projects/test/repos/my-project/commits/132a7fabd3c089b84dd237d37c9902996d1f2427)
* Testing [View](https://bitbucket.org/projects/test/repos/my-project/commits/df859e02818f2ffe2b2e9340eae725d540fa0e23)
* :ambulance: change form-container to home component [View](https://bitbucket.org/projects/test/repos/my-project/commits/d2478c37a48bac56af35d0b91311a99bdd946913)
* :zap: all page components do extend basecomponent and its common config service [View](https://bitbucket.org/projects/test/repos/my-project/commits/8f8a258ecf65d8af5307acf5ed8d2b543c835aae)
* change link [View](https://bitbucket.org/projects/test/repos/my-project/commits/326f2731ff9caf811cab32062998cc62a6c116b6)
* merge with ng-init [View](https://bitbucket.org/projects/test/repos/my-project/commits/193468e66995309adf480db0c6cbbf4113c96bc2)
* Remove placeholder [View](https://bitbucket.org/projects/test/repos/my-project/commits/aab6ea801b81ee0aa8368483a2f15070ea574cf9)
* :alien: demo for i18n [View](https://bitbucket.org/projects/test/repos/my-project/commits/cc7b4661eefc6674e4e5b849b3b6cda2eb67bbe7)
* modify create or retrive page [View](https://bitbucket.org/projects/test/repos/my-project/commits/0c0dd7063dd7a47e1440366dd7b976e3e75e169d)
* stylise button [View](https://bitbucket.org/projects/test/repos/my-project/commits/128e4b628185bcb00fe0de15abe2c9277b25f52f)
* :alien: add ngx translate config [View](https://bitbucket.org/projects/test/repos/my-project/commits/d1ced70b1b81e2fa7cf8124bc9d6ee9cd76eeae5)
* :alien: json strings to translate things in en/fr [View](https://bitbucket.org/projects/test/repos/my-project/commits/90323c28c7e96d1d3c70e54b8818d34680fc5783)
* :alien: add missing translation support [View](https://bitbucket.org/projects/test/repos/my-project/commits/91101f2326413f9d63476c026c0207f93cb3e490)
* :alien: translate 2 first pages [View](https://bitbucket.org/projects/test/repos/my-project/commits/0f2a72f8720220fd17db37006b5361b425975006)
* Add html code for voting [View](https://bitbucket.org/projects/test/repos/my-project/commits/6cc09aebb5f175d09862228799735aeed1ac1c85)
* Add css on vote component : No works [View](https://bitbucket.org/projects/test/repos/my-project/commits/e059d45f73b5ee16925260139bdf066a3ac1b4d0)
* Minimal commit [View](https://bitbucket.org/projects/test/repos/my-project/commits/9c4fabb176e78f28b72439d6e4f5ee138f404069)
* :zap: choice component JS logic and type constraints. demo for dev environment [View](https://bitbucket.org/projects/test/repos/my-project/commits/f48d05b5188df06e3e4494510cb6f780d6b8c982)
* :bug: fix undefined choice [View](https://bitbucket.org/projects/test/repos/my-project/commits/1074d219dd9dc5c267976806270dd6a2c51ed4ea)
* :zap: date en français dans le choix de vote [View](https://bitbucket.org/projects/test/repos/my-project/commits/2d060f99055acb3d5251b1afde70abc786768f51)
* Add round to buttons on vote-choice [View](https://bitbucket.org/projects/test/repos/my-project/commits/1b9c669ae3d16d8fcaaa6977d558e420e7bdfc03)
* Corrige center alignement [View](https://bitbucket.org/projects/test/repos/my-project/commits/36192647c01c47f1d6782da6c69297449c1f2d8b)
* stylize the date [View](https://bitbucket.org/projects/test/repos/my-project/commits/8215dfab78f101bd15fcfaa0752afedc0b56842d)
* Add `npm i` command to README.md [View](https://bitbucket.org/projects/test/repos/my-project/commits/fd27382a9aeaff8a6735a85712d4142f0b795976)
* Modify vote component [View](https://bitbucket.org/projects/test/repos/my-project/commits/280783c56b699f72e736f31125cf4ab22c9d8c70)
* Translation fr->en [View](https://bitbucket.org/projects/test/repos/my-project/commits/5e2193e8aa0aa5cea1fa1d20127142d84518ede6)
* Correction of a typing mistake [View](https://bitbucket.org/projects/test/repos/my-project/commits/a63f76b45014c9dbb199406b30389b447bb09d60)
* Put the words in a more natural order [View](https://bitbucket.org/projects/test/repos/my-project/commits/fd6cce277775a271aaab702e836dd93104d7e1be)
* Add i18n in navigation [View](https://bitbucket.org/projects/test/repos/my-project/commits/0cb0813eb774c7aff4f96d71822dfa2d9e0cd089)
* Stick "Frama" and "date" together [View](https://bitbucket.org/projects/test/repos/my-project/commits/efe0b892186b203dca49939573966eee10d1d772)
* Minimal commit [View](https://bitbucket.org/projects/test/repos/my-project/commits/c671a8bdea289d1623502d5672069897556af3ab)
* Replaced text by i18n json keys and add i18n attribute [View](https://bitbucket.org/projects/test/repos/my-project/commits/c5021a2aa1ff176457852f5419aa76e58dff2fa6)
* Align elements [View](https://bitbucket.org/projects/test/repos/my-project/commits/69802a99ffa5e5a23e94f6b1f1d6931c9bfc62aa)
* [front] global : update button styles [View](https://bitbucket.org/projects/test/repos/my-project/commits/802f54b930125db6c8994f53c1389d3892e0b91a)
* [front] global : increase main wrap size [View](https://bitbucket.org/projects/test/repos/my-project/commits/a176405dd492ca9941d5b02011436db0e3f2076e)
* [front] component : vote choice [View](https://bitbucket.org/projects/test/repos/my-project/commits/3e29117ea62ee3025ed1e3ae8b328aa51197dc3e)
* ajout composant graphique sondage [View](https://bitbucket.org/projects/test/repos/my-project/commits/a006e4d42a0bd1bb85361952f47c27aa5ca3307d)
* #36 : ajout librairie chartjs [View](https://bitbucket.org/projects/test/repos/my-project/commits/46a02846bfd0a49066cb03fcce04c1f239df5a8a)
* issue 36 : select daltonien [View](https://bitbucket.org/projects/test/repos/my-project/commits/5f2a2b4461f6a4b8a33b6d64af4180f7e1ff85de)
* Issue-30: Markdown support [View](https://bitbucket.org/projects/test/repos/my-project/commits/be96384a8e5f42211303b5f9215512787e9bb7cd)
* [front] component : vote choice [View](https://bitbucket.org/projects/test/repos/my-project/commits/6ee9f742faa27b039785290660563bce998fe52b)
* Issue-30 : markdown - bouton retour [View](https://bitbucket.org/projects/test/repos/my-project/commits/ca3b76d0c82dffa5c4f8f4228ef0579da7642500)
* Format html templates with tabs [View](https://bitbucket.org/projects/test/repos/my-project/commits/bfa44534aa0ccc821a5d5f73d40a967dbc45ebab)
* [fix] vote choice : minor css fixes [View](https://bitbucket.org/projects/test/repos/my-project/commits/28b3334d3e258f3cef1a36c3247aa6f89b37e8a4)
* [front] vote choice : add image and text cases [View](https://bitbucket.org/projects/test/repos/my-project/commits/6f8b180d1fdb50f10804025e6232fbe512cf680f)
* suppression du code mort [View](https://bitbucket.org/projects/test/repos/my-project/commits/f9a8c1d8c3f92099b2d29723a5337402a0bc6d05)
* Resolution du conflit [View](https://bitbucket.org/projects/test/repos/my-project/commits/985be95b0d16529196891d4c855c46bfad53c575)
* Conflit resolved [View](https://bitbucket.org/projects/test/repos/my-project/commits/8b728d172f1558f603bc8f11df0d97f737020772)
* Traduction placeholder [View](https://bitbucket.org/projects/test/repos/my-project/commits/61d31dfd5a252f7e89ad464c51d675d78b0812d5)
* Err correction special dates [View](https://bitbucket.org/projects/test/repos/my-project/commits/22a560d82d40337bd66ab30062ca235a7e3e99ca)
* issue-36 : restitution des votes d'un sondage sous forme de graphiques. début [View](https://bitbucket.org/projects/test/repos/my-project/commits/00597410277aa3c387a8b33d9e31033adc853fc9)
* :zap: choices to add,clear and delete [View](https://bitbucket.org/projects/test/repos/my-project/commits/b7afca96db4b811fa02e1f4725dc6f5661f1db0e)
* Issue-36 : Graph sondage [View](https://bitbucket.org/projects/test/repos/my-project/commits/723a0f9527776f1de653464b979980c662a6e909)
* Fix bug [View](https://bitbucket.org/projects/test/repos/my-project/commits/497cf9e12ca5ef283391b9586d83f1ca2daf13dd)
* fix bug [View](https://bitbucket.org/projects/test/repos/my-project/commits/1055a0cdbe3f800acccc6a8f06c3669f47ef6de7)
* Une partie de html [View](https://bitbucket.org/projects/test/repos/my-project/commits/942649656df42aa23f0117ed8757bb3e176129b8)
* :bug: fix focus on date, extend the empty all button to timespans [View](https://bitbucket.org/projects/test/repos/my-project/commits/cf2a12507e053d9235d6a03f1e0569c90df82c27)
* Ajout formatage données [View](https://bitbucket.org/projects/test/repos/my-project/commits/c36a3b064cc1330628037c57ffff9cf5c41c183c)
* :bug: fix deletions in date buttons , input of type date [View](https://bitbucket.org/projects/test/repos/my-project/commits/933c32798cc26461ca5b62ec3eb89c18f29e4953)
* :zap: start call backend service to retrieve my polls by email [View](https://bitbucket.org/projects/test/repos/my-project/commits/026c7cfda2476e7a77cecfaff28c151e835b7a10)
* :alien: translate button to add [View](https://bitbucket.org/projects/test/repos/my-project/commits/6a40e041d0af462d9e776632168d033ab2d7eae2)
* :alien: translate button to add in template [View](https://bitbucket.org/projects/test/repos/my-project/commits/20876f9a8d927fadc083b193d671355f4bfd3423)
* :zap: add unique interval days [View](https://bitbucket.org/projects/test/repos/my-project/commits/572f0837cc93feba5ee76a6b112a14d333ba6121)
* :alien: translate buttons [View](https://bitbucket.org/projects/test/repos/my-project/commits/7b590840b2a8504db34114434fd2345141711f4d)
* :zap: fix function call in template [View](https://bitbucket.org/projects/test/repos/my-project/commits/e81389eae13b8709085710ce60bae6d3307ba7ae)
* :zap: link graphic in nav [View](https://bitbucket.org/projects/test/repos/my-project/commits/c0f800ff91822255a4d84e18106d238506dfaab4)
* Page crée et bien complétée (plus qu'a faire les alignements) [View](https://bitbucket.org/projects/test/repos/my-project/commits/84b87486ed57d14549f6a5bc5c00df508cad7ed1)
* Presque fini [View](https://bitbucket.org/projects/test/repos/my-project/commits/8f8a0d07d27a23f0871f1718ca5e0654bb1f38db)
* Dernier commit avant merge [View](https://bitbucket.org/projects/test/repos/my-project/commits/39d4213bded6915081dd42cd506c52ff20ac2659)
* Resolve a part of merge conflicts [View](https://bitbucket.org/projects/test/repos/my-project/commits/275a065d8ebde70d9556ad1c2e915daf6228578b)
* :zap: svg in assets [View](https://bitbucket.org/projects/test/repos/my-project/commits/d993111d34afa7f33a56c95823e2ca159a8350f1)
* :alien: translation keys for visibility page [View](https://bitbucket.org/projects/test/repos/my-project/commits/7a9c7b6dc3d5f63282fe48e8dd9b1979cca38463)
* start visibility [View](https://bitbucket.org/projects/test/repos/my-project/commits/8ff8cbc40838ac3ffb41643804ca3aa976adc4c8)
* :zap: selector custom component for ui, half the visibility page [View](https://bitbucket.org/projects/test/repos/my-project/commits/d107978f2c66dfa80abb47ddc2cce107f8a5eec1)
* end visibilty fields link with poll config [View](https://bitbucket.org/projects/test/repos/my-project/commits/f4108ee61b31fe555775a05dbebba49ed78d722f)
* :zap: link default values [View](https://bitbucket.org/projects/test/repos/my-project/commits/c1935dbb87b53b4750c798dee79506cc215ac1dd)
* :zap: linked things [View](https://bitbucket.org/projects/test/repos/my-project/commits/7da480f310359c4d29a030654582cbadf68d26ce)
* :art: style remove strange section sizes, h1 size greater [View](https://bitbucket.org/projects/test/repos/my-project/commits/93f3aa76bd7aced66d936967c7f7fb90b2d800cd)
* add default content to poll config [View](https://bitbucket.org/projects/test/repos/my-project/commits/e179be812eda262fb103c67b721f35f7c95010fa)
* :zap: enhance keyboard navigation with answers [View](https://bitbucket.org/projects/test/repos/my-project/commits/9c02b1ae2b16abd5ef43f41721a2657369fedc28)
* :alien: add english key to translate [View](https://bitbucket.org/projects/test/repos/my-project/commits/48586b847507e93f0c93c084364523d2bef94e73)
* changer la langue entre fr et en quand on clique sur l'icone de traduction [View](https://bitbucket.org/projects/test/repos/my-project/commits/b78ea6273eadfa9ea862952fdd4ed32b72a9191e)
* Translation work [View](https://bitbucket.org/projects/test/repos/my-project/commits/abe07bc9784cce5aa93ffa2831ca18abc8e8c046)
* HTML Part [View](https://bitbucket.org/projects/test/repos/my-project/commits/c581d7262500778c7fab1d63323f74437a6e0665)
* Complete HTML [View](https://bitbucket.org/projects/test/repos/my-project/commits/a53322b441be5cdf882777e92909205e91008445)
* CSS Part [View](https://bitbucket.org/projects/test/repos/my-project/commits/3e372d6f53b7dc8e06d26bc8295663505f958def)
* Other css part [View](https://bitbucket.org/projects/test/repos/my-project/commits/07f5d60b95e87c5393061a2c443a8d4f3b66e285)
* :zap: start backend calls [View](https://bitbucket.org/projects/test/repos/my-project/commits/f223b760fff0cfc769396891f5528fc97b55099d)
* organise calls, add headers [View](https://bitbucket.org/projects/test/repos/my-project/commits/cb6636f1557cdf4e33f0a2163245f6ab5ae63755)
* push [View](https://bitbucket.org/projects/test/repos/my-project/commits/d3a7a37d4db51e2aaddae9180c7c4d6dc8413444)
* Spelling corrections [View](https://bitbucket.org/projects/test/repos/my-project/commits/6f08fc3dd05203babedf7d15c8c9fe09b9b0eca7)
* 🎉🎉 Page terminée 🎉🎉 [View](https://bitbucket.org/projects/test/repos/my-project/commits/73b9d496e68db9c0bdb49e1f53fc3a25129c97eb)
* Plus qu'a aligner les labels aux inputs [View](https://bitbucket.org/projects/test/repos/my-project/commits/be66cc0a907fc1e947d5c02e85ff1e6388eec0a1)
* Terminé [View](https://bitbucket.org/projects/test/repos/my-project/commits/2b079f63a043e3bd2dda486ca8e1005b72535c6a)
* Add route and HTML [View](https://bitbucket.org/projects/test/repos/my-project/commits/adcdaf911f99567bb348accd1197a6f013939bca)
* Add css [View](https://bitbucket.org/projects/test/repos/my-project/commits/c727aa935e509e061b0dba669e41c82bc6791e63)
* :art: style on current page from the route data, and texts in the confirm page, step end [View](https://bitbucket.org/projects/test/repos/my-project/commits/809aa0f02fc0add44b497a4ba8ee55c6ee17fc6c)
* :zap: link to public [View](https://bitbucket.org/projects/test/repos/my-project/commits/112119194a1255b6c96e82476dc7e08123b1b835)
* :zap: remove debug step in nav [View](https://bitbucket.org/projects/test/repos/my-project/commits/daf7006bb8317b4ec6ed96e0a28ef93d8de9ba39)
* :zap: fix some deps [View](https://bitbucket.org/projects/test/repos/my-project/commits/cf4e9f45634b0eb8fa52bf77c52373876ce5eaef)
* :zap: update dependencies with yarn, add primefaces to make toasts [View](https://bitbucket.org/projects/test/repos/my-project/commits/ded5e71e73a037096d0497b615faf82d733a775b)
* :art: add font awesome [View](https://bitbucket.org/projects/test/repos/my-project/commits/4296c5c9f95c2dae7754c4a6ba1751444b9ff039)
* :zap: get poll data in vote choices [View](https://bitbucket.org/projects/test/repos/my-project/commits/5657f57fc75b05c055c63798032c8eae0514a0e0)
* :zap: reorganize poll display page [View](https://bitbucket.org/projects/test/repos/my-project/commits/79ef34e5af971db537f42cb0c4eacd6bd79f00e0)
* merge with dev [View](https://bitbucket.org/projects/test/repos/my-project/commits/c9b4ffe328ec283b2630406c788dab70b45c8505)
* :zap: enhance display poll page [View](https://bitbucket.org/projects/test/repos/my-project/commits/52587428ddcbe179c71892f9288a44202306fb0a)
* :zap: reorganize poll display page and urls in config [View](https://bitbucket.org/projects/test/repos/my-project/commits/051e4d8ee469370a7ae7b68cce6a1325394b9c12)
* :zap: change translation button way to be in sync with the model [View](https://bitbucket.org/projects/test/repos/my-project/commits/37904596fbc2f68e2fa6d80d44422b4230af71d8)
* :art: visual help on clickable elements [View](https://bitbucket.org/projects/test/repos/my-project/commits/5eba5d684b7c8b6194ac1676b4559d189792ec44)
* :zap: check for uniqueness of the slug, slug the title by default [View](https://bitbucket.org/projects/test/repos/my-project/commits/2720b6596241874df330373645952f6a53ebeb5c)
* :zap: add email to creation [View](https://bitbucket.org/projects/test/repos/my-project/commits/7c64f1f8f08b75fb34ddd7459d8e9580202e5298)
* :zap: copy to clipboard ok [View](https://bitbucket.org/projects/test/repos/my-project/commits/4098f7ec5c533d3b35e629278006d6134ff8ee38)
* :zap: toast messages when copied to clipboard and network errors [View](https://bitbucket.org/projects/test/repos/my-project/commits/b44f2719b44e4aba7476dc7952b4cc739b9d1d39)
* :book: clean console logs [View](https://bitbucket.org/projects/test/repos/my-project/commits/7df60e5a514783a5d393e9a3446a934e12e580ea)
* :bug: fix show and hide of password input [View](https://bitbucket.org/projects/test/repos/my-project/commits/fd4bbb5c712fb79204badae316d92fd17be7c9e5)
* :zap: calls in administration page to delete things [View](https://bitbucket.org/projects/test/repos/my-project/commits/bae3f19af223022c933fd622d3c8adf2bf6167db)
* :bug: remove duplicate text in end of admin page [View](https://bitbucket.org/projects/test/repos/my-project/commits/113609e945f5e09ae3c04119225eb6bd7fa670c8)
* :zap: toast todo things [View](https://bitbucket.org/projects/test/repos/my-project/commits/7b790e3cdc58ee296e16645abef0fc9ee0cad629)
* :zap: computations for the result graph [View](https://bitbucket.org/projects/test/repos/my-project/commits/1b65d58a6f52acfb0265c33de7c9779177b73ff1)
* toggle simple answer [View](https://bitbucket.org/projects/test/repos/my-project/commits/a3e243ed19bddc12e194a166ab38c3101835fcc2)
* :bug: fix build [View](https://bitbucket.org/projects/test/repos/my-project/commits/10497c9cb09873f3ede8b75729d2f444d12e5338)
* :zap: add update demo script, remove duplicate toast, try hash route [View](https://bitbucket.org/projects/test/repos/my-project/commits/6a3d2c3195303b5094f43102df78f7e4990e19c8)
* :zap: modal to display url [View](https://bitbucket.org/projects/test/repos/my-project/commits/255205696bcf8778088404348bdd0b748649f0b3)
* :zap: list mypolls on first page [View](https://bitbucket.org/projects/test/repos/my-project/commits/9ebd22536b1ed314e264757867d84bef1ee87d9f)
* buttons to nav [View](https://bitbucket.org/projects/test/repos/my-project/commits/3808f194258dd5cd93b03258ec2f2d90ee6b615b)
* :zap: erasable inputs on first config screen ok [View](https://bitbucket.org/projects/test/repos/my-project/commits/3ada66ac5f36c38502556f18982954d2526cce0e)
* launch creation from resume page [View](https://bitbucket.org/projects/test/repos/my-project/commits/f8568eb9102668521556b40eacc89ee8b639db09)
* :zap: lang input placement [View](https://bitbucket.org/projects/test/repos/my-project/commits/ff5c11e79c42926296516f27cc95aa660e34a50d)
* :zap: really fetch a poll by id [View](https://bitbucket.org/projects/test/repos/my-project/commits/123a0b1c809999306f131e6e0f9523d82944d38a)
* :zap: update vote list after vote creation [View](https://bitbucket.org/projects/test/repos/my-project/commits/06cf447529583f05789e17f9d9b9d196f0a56409)
* :zap: hop [View](https://bitbucket.org/projects/test/repos/my-project/commits/96709c9bc71980541497eb7f4387512948f3de08)
* :book: add mocks from updated backend [View](https://bitbucket.org/projects/test/repos/my-project/commits/a68cbdcc0a017e30490239ff9593c69b7b2f798f)
* :bug: fix recursion in input erase button [View](https://bitbucket.org/projects/test/repos/my-project/commits/195259bb722a4dd5260a05bbe5dd77cbc6d0577e)
* :zap: menu to nav on poll display - #64 [View](https://bitbucket.org/projects/test/repos/my-project/commits/d2c726012bbc4cf413b18f454fc9e859fdb50b49)
* :zap: build for production, :bug: fix publicy of vars in templates [View](https://bitbucket.org/projects/test/repos/my-project/commits/ea43430e1b7acf3f6250215fc9966cca5e6422a5)
* :zap: build for demo updated [View](https://bitbucket.org/projects/test/repos/my-project/commits/f96833d96e7c53dd855113ef9e3a7dd7b62c5021)
* :zap: use hash for internal routing in the frontend [View](https://bitbucket.org/projects/test/repos/my-project/commits/b06a44fb98ec9d0f3903b99f917aff7817742983)
* poll routing hints in the app, demo precision in header [View](https://bitbucket.org/projects/test/repos/my-project/commits/8322a9a83a799e67b90dd47e0aa4ff1c56b81e0b)
* :zap: other url to create a poll [View](https://bitbucket.org/projects/test/repos/my-project/commits/9900e1ec976dd98fcb63bc35ed6f286caa8c427c)
* sync fetch stuff [View](https://bitbucket.org/projects/test/repos/my-project/commits/02995c8b3d40eb7b05361c8ecf9e59a706a0fd51)
* :zap: mock for poll 1, fix new comment [View](https://bitbucket.org/projects/test/repos/my-project/commits/346bd9dc4f69296c51550f0da1b7e40a632051a7)
* stuff [View](https://bitbucket.org/projects/test/repos/my-project/commits/7e4e80f1ed3843eb8724e93d46c1d7fc598dcdd1)
* :bug: fix fetch of old params [View](https://bitbucket.org/projects/test/repos/my-project/commits/01bddc842db7b91ed2e5ebe4db036ba709dae3f4)
* :zap: add administration key after creation [View](https://bitbucket.org/projects/test/repos/my-project/commits/7bc53e198d8dc9fdae172bd596647a6b2ca1ad6f)
* :zap: choices lighter and work [View](https://bitbucket.org/projects/test/repos/my-project/commits/22bd836a16187607ee3be22cad867c7f7e2e729b)
* step to date form [View](https://bitbucket.org/projects/test/repos/my-project/commits/2e6723a1f1121c47bf9e6fb00cc043f987394940)
* fix buttons colours and manage a bit more the date form [View](https://bitbucket.org/projects/test/repos/my-project/commits/f056b0d79a2a5c894cc91d3723d16244c4abb58d)
* button to act on time [View](https://bitbucket.org/projects/test/repos/my-project/commits/a66933041f46dbaa2a15d373fd1809c82607dff3)
* change preview for dates type [View](https://bitbucket.org/projects/test/repos/my-project/commits/460e236d604beb1c24b4beaa5a1d992eb5b45dab)
* date accessor [View](https://bitbucket.org/projects/test/repos/my-project/commits/22736f709e36463e9e470e9a3385d246c85fd85f)
* :bug: handle no current poll [View](https://bitbucket.org/projects/test/repos/my-project/commits/f9d1cfff3a8f0f8d17ce622f21bc74fa9aa66aac)
* :bug: fix some config keys [View](https://bitbucket.org/projects/test/repos/my-project/commits/100569515328df6988c250f87e12124e9034227e)
* :zap: manage interval of date with date objects [View](https://bitbucket.org/projects/test/repos/my-project/commits/e227344647501e02bb3ed56da2e239e5c9e2a06a)
* :zap: disabled button when nothing is selected, detect counts [View](https://bitbucket.org/projects/test/repos/my-project/commits/0369d934bddc852e71d7a671ec41765b1a80990c)
* display a table of answers [View](https://bitbucket.org/projects/test/repos/my-project/commits/43ea524c2604891095940da3827ecd7c0003a10b)
* :bug: fix visibility of config in summary [View](https://bitbucket.org/projects/test/repos/my-project/commits/f976d65d204183c3c9f5d1d606edcf97bf6db311)
* :zap: update current answers with a previous vote [View](https://bitbucket.org/projects/test/repos/my-project/commits/9cf368f5504c1dcd28d34f9682888c65202bda6f)
* sort table of answers [View](https://bitbucket.org/projects/test/repos/my-project/commits/ca69160ea979c2995a2e5cdc2b825bb05e293fa2)
* :zap: show preferred texts in summary, icons for votes [View](https://bitbucket.org/projects/test/repos/my-project/commits/0e8d18cd8000b2b9a9fb3d74277bf24a26c8b380)
* :zap: add bulma framework, style table [View](https://bitbucket.org/projects/test/repos/my-project/commits/74ade7ac0fe52d48bec50522b648b5e0bac27d1e)
* fix select visibility [View](https://bitbucket.org/projects/test/repos/my-project/commits/bc67f26327186ef6ff9a476824eae987f3b83532)
* :zap: component to copy text to clipboard [View](https://bitbucket.org/projects/test/repos/my-project/commits/63e1a5e899cd6681ce819c53669a76b7987fb7a2)
* :zap: unify update config after fetching a poll config [View](https://bitbucket.org/projects/test/repos/my-project/commits/dd9e8950f4473dd39841ba3150bff23b8f172016)
* :fix: load vote of someone else ok [View](https://bitbucket.org/projects/test/repos/my-project/commits/b1adfaa8ea565cc6204ef975d5153ba99fc66e75)
* :zap: reset all answers before loading a stack [View](https://bitbucket.org/projects/test/repos/my-project/commits/4bcd3e475f9c7f31b5b4f8f5ffe700239929660c)
* export data in csv with rows and comments [View](https://bitbucket.org/projects/test/repos/my-project/commits/e3e5cf6638b2522c2bc7ac7181d63a6f3683e502)
* :zap: split poll display components [View](https://bitbucket.org/projects/test/repos/my-project/commits/ab23b9b2566cbd328bf9a510202c39fcd046634c)
* :gears: refacto date and poll utilities functions in a separate class [View](https://bitbucket.org/projects/test/repos/my-project/commits/c5b52764002149eff41dcd48cb876fa6ec79d562)
* :book: update refacto utilities as services [View](https://bitbucket.org/projects/test/repos/my-project/commits/44424d378aef95bb0bfc014104b5346c340ad5c7)
* :hammer: test voting choice, add ci pipeline config [View](https://bitbucket.org/projects/test/repos/my-project/commits/0a3ee9b6f0c145ed069eb07f554f20f4f294cff4)
* :zap: update package lock for CI [View](https://bitbucket.org/projects/test/repos/my-project/commits/91b1d64f0a6282fcbebd46aab328988e75be2620)
* :bug: run test in single run mode on CI [View](https://bitbucket.org/projects/test/repos/my-project/commits/a088daf4a3a1870a82c300e66d1463b0be909f5e)
* run build for prod on CI [View](https://bitbucket.org/projects/test/repos/my-project/commits/b360720e1504af9b220d579ee2b01668255c6b7d)
* :gears: update ng cli 8 [View](https://bitbucket.org/projects/test/repos/my-project/commits/8f59e654477a5b2ccea0748b59720ccb8137919e)
* :hammer: update to angular v 9 [View](https://bitbucket.org/projects/test/repos/my-project/commits/38d1d52633a3e0fb8d68433edb985754861aaf2b)
* :zap: custom date value accessor with renderer 2 [View](https://bitbucket.org/projects/test/repos/my-project/commits/1816150c6d06c51ab83cc77ebebff7ff70cc002f)
* :hammer: test with FirefoxHeadless for gitlab CI [View](https://bitbucket.org/projects/test/repos/my-project/commits/e089d19993613619c0585556f5cdc6265154a0cb)
* :zap: manage dates poll type display, fix typo in add button date [View](https://bitbucket.org/projects/test/repos/my-project/commits/15bbf0e375309a8e273c4a5b9aa0bc70cd5cdc6e)
* dates and recap side to side [View](https://bitbucket.org/projects/test/repos/my-project/commits/61bf6a289c44cac419d60e186f18594b21f1b4e8)
* :zap: ad storybook [View](https://bitbucket.org/projects/test/repos/my-project/commits/4ec9b174ad295f5cee76e515ed70b88313f6476e)
* :zap: add some types interfaces in the config [View](https://bitbucket.org/projects/test/repos/my-project/commits/49b79395644d792ac633a0df5d15da07e0c460a3)
* :book: add compodoc [View](https://bitbucket.org/projects/test/repos/my-project/commits/d7a2a8d6b78f7ea920fd794139f7f3d0d6dddd51)
* :bug: fix synced time slices [View](https://bitbucket.org/projects/test/repos/my-project/commits/ff8e02b2154d81a62a7f979dcfcc83c826a79295)
* :fix: remove puckage lock in profit of yarn [View](https://bitbucket.org/projects/test/repos/my-project/commits/ba7465fe8395c26e0d2bb6ae8fcab10d179a2497)
* :bug: add package only for CI [View](https://bitbucket.org/projects/test/repos/my-project/commits/e03359e8db170647a5534e376803a9d6e0a10ddd)
* :zap: component to select theme [View](https://bitbucket.org/projects/test/repos/my-project/commits/2d757c6726a942237c3bad27258e1820bce1e5d0)
* :art: better disposal for theme selector [View](https://bitbucket.org/projects/test/repos/my-project/commits/312b2d859943900a8784d0fbdc1cc03db0ab2be4)
* :hammer: fix for CI, bad option in npm run test [View](https://bitbucket.org/projects/test/repos/my-project/commits/a0138f84d3b01e276909a934d176a375e22529b1)
* :zap: add confirmation modal for admin user, issue #59 [View](https://bitbucket.org/projects/test/repos/my-project/commits/c0a4ec7a0c143263ed84b494ca30fcce3dc27e00)
* :bug: fix update after vote #65 [View](https://bitbucket.org/projects/test/repos/my-project/commits/75c26572fe0fcc9b305c51d10a39bd1d3fba6f43)
* :zap: can or can not modify votes issue #49 [View](https://bitbucket.org/projects/test/repos/my-project/commits/fff4e57378d9a49211a684f64433870fd67b3441)
* :zap: fix issue of selecting can or can not modify answers [View](https://bitbucket.org/projects/test/repos/my-project/commits/23dc45f1986fd8b3c06af7ba02a192737c04c3a4)
* :art: arrange create or retrieve page in two columns [View](https://bitbucket.org/projects/test/repos/my-project/commits/60c184c60ba389e8ebd1b40d6ac0d51488fe66b6)
* split many components, presentation with left nav [View](https://bitbucket.org/projects/test/repos/my-project/commits/9bdd4e0084d8c4fedf45453b947348cf55ad7416)
* :hammer: fix linting, add env default [View](https://bitbucket.org/projects/test/repos/my-project/commits/6e6b812d2d5271221d65b7d3d8c2705e134e2683)
* :zap: theme persisted in the localstorage, reload config on page reload - issue #75 [View](https://bitbucket.org/projects/test/repos/my-project/commits/936110846c4326d5772c89fbfad488b44aaa7651)
* :zap: :alien: Conserver le choix de langue au rechargement de la page - issue #54 [View](https://bitbucket.org/projects/test/repos/my-project/commits/acb091802c51ee7d1fad0b0ae08597da87cf3c52)
* :zap: export format json public [View](https://bitbucket.org/projects/test/repos/my-project/commits/e2c388da9e26e908ca278cde575ac9bff28926e4)
* :zap: add eslint [View](https://bitbucket.org/projects/test/repos/my-project/commits/e56d5cdcef59bba41e0d37711f047b6f799e45fa)
* - upgrade all packages - intall & configure linters (eslint, prettier, etc.) [View](https://bitbucket.org/projects/test/repos/my-project/commits/dd9bb8922f24cca7b33c34cb3bad1b190aebb91a)
* reformat all files + move routes.ts to AppRoutingModule [View](https://bitbucket.org/projects/test/repos/my-project/commits/18a7d4781ac44f820b870269f5134b305758e722)
* Jest tests [View](https://bitbucket.org/projects/test/repos/my-project/commits/ca5ffdc896864d47467b7562494c600b120f4d2b)
* routing for admin ith token parameter, add comments [View](https://bitbucket.org/projects/test/repos/my-project/commits/15b10f938149cc5fb8af087f773188be3c722bfe)
* :zap: admin route calling the backend [View](https://bitbucket.org/projects/test/repos/my-project/commits/8fa39250d5e5863c8987b3fc2e9464dc3bb61d7e)
* refacto : create entities, enums, services [View](https://bitbucket.org/projects/test/repos/my-project/commits/e5243204572e2dcba735335f4861f36d72fd98a5)
* :gears: move components to better semantic folders [View](https://bitbucket.org/projects/test/repos/my-project/commits/86ada008c505f6935e540023bb706cf9605588d9)
* :zap: change theme enum to correspond with themes classnames [View](https://bitbucket.org/projects/test/repos/my-project/commits/60b4bfb6197318ca5bb6e21d8dfc031da7c5d070)
* :zap: add component having a couple of configurable links, to navigate between pages [View](https://bitbucket.org/projects/test/repos/my-project/commits/da7e96526c3ed95b395b33bdaee5347ea9837f6f)
* Feature/simplify scss [View](https://bitbucket.org/projects/test/repos/my-project/commits/ba7a24708dd83cc99c81ebe064f5570fac369a38)
* gitignore add eslintcache file [View](https://bitbucket.org/projects/test/repos/my-project/commits/985b9fcdcf17b35790e341318b1a109b3e454a79)
* update env api endpoints [View](https://bitbucket.org/projects/test/repos/my-project/commits/23b8622a4f2b8d74e1b2d80319658ac70bcd2e21)
* rebase branch 'feature/refacto_1' of https://framagit.org/framasoft/framadate/funky-framadate-front into feature/refacto_1 [View](https://bitbucket.org/projects/test/repos/my-project/commits/7a4f16e4845f74894bcbfd7344205f005c243b5e)
* :bug: remove admin component request [View](https://bitbucket.org/projects/test/repos/my-project/commits/4ec9091233986af49d5c271b91bdbe33b18aaebe)
* :bug: fix window variable in html [View](https://bitbucket.org/projects/test/repos/my-project/commits/48636ad9478e002da705bd96c330333cb3bb3fc9)
* split config service & dispatch [View](https://bitbucket.org/projects/test/repos/my-project/commits/3997dd090e076bcd3f92562e231f118eb5cc731f)
* upgrade archi with modules [View](https://bitbucket.org/projects/test/repos/my-project/commits/7029368ab1fc7f4ebbddcaca3d7140f4441d2873)
* - replace date-fns by momentJS - install ng2-chart along with chart.js [View](https://bitbucket.org/projects/test/repos/my-project/commits/91be2a3048dbaa0179fa97f8cbc027d06b276f4a)
* 👷 — Build and deploy on Gitlab pages [View](https://bitbucket.org/projects/test/repos/my-project/commits/f6753822183d63a53c908017740b0908a600f3cc)
* 👷 — Try to deploy build on Gitlab page even if test fails [View](https://bitbucket.org/projects/test/repos/my-project/commits/f1cbf175a9c93681ffa0e438564cc76925e3c87a)
* 👷 — Deploy build on Gitlab page before tests [View](https://bitbucket.org/projects/test/repos/my-project/commits/96354f6202c0de8892a7516658ea1a5e65a28615)
* 👷 — Modify <base> tag in builds index.html [View](https://bitbucket.org/projects/test/repos/my-project/commits/da854454aaee8390e9430def4674577b747433cb)
* 👷 — Cleaner script for Gitlab page build [View](https://bitbucket.org/projects/test/repos/my-project/commits/645b25de790b43c19191545beecd4923a29b71eb)
* [feat] :zap: add a floating button to give feedback [View](https://bitbucket.org/projects/test/repos/my-project/commits/442530983b8015a291ae34be78d78c9e061adf7d)
* :style: style for feedback options, fixed floating button [View](https://bitbucket.org/projects/test/repos/my-project/commits/9057e890a408199eb96b6a6b7a92336a4b31582c)
* default to hide menu [View](https://bitbucket.org/projects/test/repos/my-project/commits/93ea16127475cd7611b70684ea6ff2f6d90ce96e)
* :zap: refacto feedback, :art: style for popup links, place icons before text [View](https://bitbucket.org/projects/test/repos/my-project/commits/cc27f31e0ecf08c5cae26068d19e1e715e921844)
* :zap: styling themes [View](https://bitbucket.org/projects/test/repos/my-project/commits/23c6b9400ee2d2917e3f5e8cf3d327fd2a537747)
* :book: add footer links, :art: set default theme to light, fix some details with black theme. [View](https://bitbucket.org/projects/test/repos/my-project/commits/a93a34a638ecca03dfc6466f0b347c9961cff18f)
* :art: primary button, section to find back my polls on home [View](https://bitbucket.org/projects/test/repos/my-project/commits/b2a739016fbc39b69138127fe60de621698aa904)
* add feedback button, load administration module from app module [View](https://bitbucket.org/projects/test/repos/my-project/commits/9c60f8a379fffea4574c86799c886aee37dd9968)
* :zap: change branch name in update demo script [View](https://bitbucket.org/projects/test/repos/my-project/commits/a1de41699e4aeeb6149f2a93f8c98696ff952a40)
* :zap: demo build script back to life [View](https://bitbucket.org/projects/test/repos/my-project/commits/4f0a29e806f9a87b97c7024487b195b3c90896eb)
* add user settings button & modal [View](https://bitbucket.org/projects/test/repos/my-project/commits/355fed53f3dc45fc27245e5b13dcefadac774b87)
* add json-server + refacto [View](https://bitbucket.org/projects/test/repos/my-project/commits/ae2974967048a6bbbba65df79591a1dcff970064)
* clean refacto [View](https://bitbucket.org/projects/test/repos/my-project/commits/3125e86f0bdc1ab74cec9baeb273588afe92ca90)
* replace primeng by material && improvments [View](https://bitbucket.org/projects/test/repos/my-project/commits/f9b847b305192506b2fc8109f187f6a45afeccd3)
* add route resolver for lazy-loading [View](https://bitbucket.org/projects/test/repos/my-project/commits/63600c759ebbdba5473789b6b030fe8e33a767ae)
* refacto routing [View](https://bitbucket.org/projects/test/repos/my-project/commits/a62e00c6adf4a0a62a617e0e5a9a054b6bfd6803)

View File

@ -0,0 +1,660 @@
### GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains
free software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing
under this license.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
#### 0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public
License.
"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
#### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
#### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
- a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
- b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".
- c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
#### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
- b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
- c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
- d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
- e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
#### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
- b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
- c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or
- e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
- f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
#### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
#### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
#### 13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your
version supports such interaction) an opportunity to receive the
Corresponding Source of your version by providing access to the
Corresponding Source from a network server at no charge, through some
standard or customary means of facilitating copying of software. This
Corresponding Source shall include the Corresponding Source for any
work covered by version 3 of the GNU General Public License that is
incorporated pursuant to the following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
#### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Affero General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever
published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
#### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
#### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for
the specific requirements.
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU AGPL, see <https://www.gnu.org/licenses/>.

View File

@ -4,18 +4,12 @@ EN: A libre polling software made by contributors around the French association
This version uses a brand new backend API. This version uses a brand new backend API.
## Pour débuter - getting started ## Pour débuter - getting started
[lire la doc pour débuter votre Funky Framadate](doc/GETTING_STARTED.md) [lire la doc pour débuter votre Funky Framadate](docs/GETTING_STARTED.md)
## Documentation ## Documentation
FR: Toute la documentation est disponible [dans le dossier "doc"](/doc), principalement en Français. FR: Toute la documentation est disponible [dans le dossier "doc"](/docs), principalement en Français.
EN: All documentation is available in the "doc" folder, mainly in French because reasons. EN: All documentation is available in the "doc" folder, mainly in French because reasons.
* Meeting notes
* Getting Started (yarn start / npm start)
* How to contribute
* Architecture
* Translation i18n
* Accesibility
* Licence GNU affero V3
# Version funky framadate # Version funky framadate
@ -35,7 +29,8 @@ EN: All documentation is available in the "doc" folder, mainly in French because
# Exemple de maquette de la nouvelle version # Exemple de maquette de la nouvelle version
![funky_framadate_maquette](uploads/535da7c3a5ce5fae67b2b497bdc4631d/funky_framadate_maquette.png) ![funky_framadate_maquette](docs/img/colors_framadate_funky.png)
![funky_framadate_maquette](docs/img/framdate_funky_design.png)
## LIBRARIES USED ## LIBRARIES USED
@ -68,25 +63,3 @@ EN: All documentation is available in the "doc" folder, mainly in French because
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.1. This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.1.
# Framadate # Framadate
## Code scaffolding
Run `ng generate component component-choice_label` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
Before using ng for the first time in this project, use `npm i` to install needed npm modules.
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

3
SUMMARY_CHANGELOG.md Normal file
View File

@ -0,0 +1,3 @@
# Résumé de Changelog
Le détail se trouve dans [CHANGELOG.md]

0
change.md Normal file
View File

View File

@ -1,5 +0,0 @@
# Todo - liste des choses à faire
# Choses faites
voir le [changelog.md]

View File

@ -1 +0,0 @@
# Change log

660
docs/LICENSE.en.md Normal file
View File

@ -0,0 +1,660 @@
### GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
### Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains
free software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing
under this license.
The precise terms and conditions for copying, distribution and
modification follow.
### TERMS AND CONDITIONS
#### 0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public
License.
"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
#### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
#### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
#### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
#### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
- a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
- b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".
- c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
#### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
- b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
- c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
- d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
- e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
#### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
- b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
- c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or
- e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
- f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
#### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
#### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
#### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
#### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
#### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
#### 13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your
version supports such interaction) an opportunity to receive the
Corresponding Source of your version by providing access to the
Corresponding Source from a network server at no charge, through some
standard or customary means of facilitating copying of software. This
Corresponding Source shall include the Corresponding Source for any
work covered by version 3 of the GNU General Public License that is
incorporated pursuant to the following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
#### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Affero General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever
published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
#### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
#### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
### How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for
the specific requirements.
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU AGPL, see <https://www.gnu.org/licenses/>.

28
docs/TODO.md Normal file
View File

@ -0,0 +1,28 @@
# Todo - liste des choses à faire
## Idées pour de futures améliorations (pertinence à vérifier)
* Gagner en vie privée en chiffrant certaines informations ? Stockage zéro knowledge avec un chiffrement robuste à courbe elliptique.
* À réfléchir : permettre à Framadate de faire entrer à des gens plusieurs plages de temps de disponibilité et le service déduit quelles sont les plages de temps favorables (calcul d'intersection sur des lignes discontinues). Cela pourrait être avec divers niveaux de détail. Comme https://omnipointment.com/ (qui est un logiciel privateur)
* SSO du fédiverse ?
# Tableau des avancements
https://framagit.org/framasoft/framadate/funky-framadate-front/-/boards
# Choses faites
voir le [changelog.md]
Les idées et rapports de bugs sont disponibles dans [le tableau des Issues](https://framagit.org/framasoft/framadate/funky-framadate-front/-/boards) sur la forge logicielle.
## principales
* Accessibilité renforcée.
* Adapté aussi bien sur mobile que grands écrans à haute ou faible densité de pixels.
* Tests unitaires et end-to-end.
* Couverture de test.
* Choix de réponses possibles. Proposer de ne répondre que « oui » ou rien, ou aller dans la nuance en proposant « oui », « peut-être », « non », « ? ». *# Redondance ou le choix de réponses possibles de la première phrase concerne un autre choix ?*
* Insertion d'images dans le sondage de type texte, avec des URL uniquement. Une seule image par title possible ou rien.
* Thème sombre.
* Duplication de sondage à partir d'un autre.
* Limiter le nombre de participants maximum

View File

@ -0,0 +1 @@
# Installation

View File

24
docs/angular.md Normal file
View File

@ -0,0 +1,24 @@
# Angular
All doc for Angular is available under https://www.angular.io
## Code scaffolding
Run `ng generate component component-choice_label` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
Before using ng for the first time in this project, use `npm i` to install needed npm modules.
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@ -1,4 +1,4 @@
// TODO: File to be deleted : just temporary documentation of backend API endpoints # temporary documentation of backend API endpoints
------------------------------------------ ---------- -------- ------ ------------------------------------------------ ------------------------------------------ ---------- -------- ------ ------------------------------------------------
Name Method Scheme Host Path Name Method Scheme Host Path

View File

@ -11,3 +11,6 @@ Chaque fichier de traduction est déclaré dans le [AppModule](../../src/app/app
Utilisez des sous groupes dans vos traductions afin de mieux segmenter les chaines de caractère par page et selon le sens qu'elles sous tendent. Utilisez des sous groupes dans vos traductions afin de mieux segmenter les chaines de caractère par page et selon le sens qu'elles sous tendent.
## Traduction de la documentation mkdocs
voir ici https://www.mkdocs.org/user-guide/configuration/#lang

View File

@ -2,10 +2,6 @@
[[_TOC_]] [[_TOC_]]
![Diagramme des cas d'utilisations décrits dans la suite du document](uploads/uml/diagramme_cas_utilisation.png)
# Glossaire # Glossaire
| Terme | Signification | | Terme | Signification |

4
docs/changelog.md Normal file
View File

@ -0,0 +1,4 @@
# Change log
## 2021-05-17
Documentation générée avec mkdocs

View File

@ -1,11 +1,11 @@
# Comment contribuer à Framadate funky ? # Comment contribuer à Framadate funky ?
Il existe des tas de façons de contribuer à un logiciel libre comme Framadate. Vous pouvez __discuter__ avec d'autres personnes de ce que vous souhaiteriez voir naître dans le logiciel, __essayer__ de l'utiliser dans sa version expérimentale, __mettre en place une démo__ ou un service publiquement utilisable, __écrire__ des modifications de code, proposer de l'aide de toute sorte, [traduire les textes](cadrage/i18n.md), vérifier l'accessibilité, lire la [documentation d'architecture](../doc/cadrage/architecture.md) etc... Il existe des tas de façons de contribuer à un logiciel libre comme Framadate. Vous pouvez __discuter__ avec d'autres personnes de ce que vous souhaiteriez voir naître dans le logiciel, __essayer__ de l'utiliser dans sa version expérimentale, __mettre en place une démo__ ou un service publiquement utilisable, __écrire__ des modifications de code, proposer de l'aide de toute sorte, [traduire les textes](../cadrage/i18n.md), vérifier l'accessibilité, lire la [documentation d'architecture](../cadrage/architecture.md) etc...
* Avoir un compte Framateam, et Framagit si vous souhaitez contribuer au code * Avoir un compte Framateam, et Framagit si vous souhaitez contribuer au code
* Examiner les tickets * Examiner les tickets
Discuter avec les autres membres participant, sur un ticket en particulier et aussi dans les canaux de framateam Discuter avec les autres membres participant, sur un ticket en particulier et aussi dans les canaux de framateam
* Nous avons créé deux canaux: un pour les discussions générales, et un autre pour les discussions techniques de dev. Prenez soin de bien cibler le canal dans lequel vous communiquez afin de ne pas faire peur aux gens qui ne codent pas et qui souhaitent contribuer de toutes les autres façons. * Nous avons créé deux canaux: un pour les discussions générales, et un autre pour les discussions techniques de dev. Prenez soin de bien cibler le canal dans lequel vous communiquez afin de ne pas faire peur aux gens qui ne codent pas et qui souhaitent contribuer de toutes les autres façons.
* Une fois d'accord avec les autres, mettre à jour votre dépot de travail local. Voir [la doc d'installation / getting started](GETTING_STARTED.md) à ce sujet. * Une fois d'accord avec les autres, mettre à jour votre dépot de travail local. Voir [la doc d'installation / getting started](../GETTING_STARTED.md) à ce sujet.
* Utiliser la branche `develop` * Utiliser la branche `develop`
``` ```
git checkout develop git checkout develop

View File

@ -0,0 +1,35 @@
## Résumé
(Summarize the bug encountered concisely)
## Steps to reproduce
(How one can reproduce the issue - this is very important)
## Example Project
(If possible, please create an example project here on GitLab.com that exhibits the problematic
behavior, and link to it here in the bug report.
If you are using an older version of GitLab, this will also determine whether the bug has been fixed
in a more recent version)
## What is the current bug behavior?
(What actually happens)
## What is the expected correct behavior?
(What you should see instead)
## Relevant logs and/or screenshots
(Paste any relevant logs - please use code blocks (```) to format console output, logs, and code, as
it's very hard to read otherwise.)
## Possible fixes
(If you can, link to the line of code that might be responsible for the problem)
/label ~bug ~reproduced ~needs-investigation
/cc @project-manager
/assign @qa-tester

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Diagram>
<ID>DATABASE</ID>
<OriginalElement>199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.choice</OriginalElement>
<nodes>
<node x="273.0" y="1219.0">199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.choice</node>
<node x="0.0" y="1238.0">199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.stack_of_votes</node>
<node x="230.453125" y="1535.0">199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.vote</node>
<node x="280.5" y="0.0">199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.owner</node>
<node x="226.453125" y="333.0">199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.poll</node>
<node x="570.75" y="1200.0">199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.comment</node>
</nodes>
<notes />
<edges>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.comment" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.poll" relationship="REFERENCES">
<point x="-65.0" y="-141.5" />
<point x="635.75" y="1174.0" />
<point x="468.953125" y="1174.0" />
<point x="0.0" y="407.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.stack_of_votes" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.poll" relationship="REFERENCES">
<point x="63.25" y="-103.5" />
<point x="189.75" y="1174.0" />
<point x="468.953125" y="1174.0" />
<point x="0.0" y="407.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.vote" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.poll" relationship="REFERENCES">
<point x="97.33333333333331" y="-141.5" />
<point x="473.7864583333333" y="1509.0" />
<point x="536.5" y="1509.0" />
<point x="536.5" y="1174.0" />
<point x="468.953125" y="1174.0" />
<point x="0.0" y="407.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.stack_of_votes" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.owner" relationship="REFERENCES">
<point x="-63.25" y="-103.5" />
<point x="63.25" y="308.0" />
<point x="468.0" y="308.0" />
<point x="0.0" y="141.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.choice" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.poll" relationship="REFERENCES">
<point x="0.0" y="-122.5" />
<point x="399.5" y="1174.0" />
<point x="468.953125" y="1174.0" />
<point x="0.0" y="407.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.vote" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.choice" relationship="REFERENCES">
<point x="0.0" y="-141.5" />
<point x="376.453125" y="1509.0" />
<point x="399.5" y="1509.0" />
<point x="0.0" y="122.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.vote" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.stack_of_votes" relationship="REFERENCES">
<point x="-97.33333333333331" y="-141.5" />
<point x="279.1197916666667" y="1509.0" />
<point x="126.5" y="1509.0" />
<point x="0.0" y="103.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.comment" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.owner" relationship="REFERENCES">
<point x="65.0" y="-141.5" />
<point x="765.75" y="308.0" />
<point x="468.0" y="308.0" />
<point x="0.0" y="141.5" />
</edge>
<edge source="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.poll" target="199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.owner" relationship="REFERENCES">
<point x="0.0" y="-407.5" />
<point x="0.0" y="141.5" />
</edge>
</edges>
<settings layout="Hierarchic" zoom="0.45266594124047876" showDependencies="false" x="415.5" y="909.0" />
<SelectedNodes>
<node>199d9e19-a935-452f-b6e5-37ffdb194d55.TABLE:framadate_api.poll</node>
</SelectedNodes>
<Categories>
<Category>Columns</Category>
<Category>Key columns</Category>
<Category>Virtual foreign keys</Category>
</Categories>
</Diagram>

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

4
docs/index.en.md Normal file
View File

@ -0,0 +1,4 @@
# Framadate - funky version
***
EN: A libre polling software made by contributors around the French association Framasoft.
This version uses a brand new backend API.ntributeurs de l'association Framasoft, avec une API backend.

66
docs/index.fr.md Normal file
View File

@ -0,0 +1,66 @@
# Framadate - funky version
FR: Un logiciel libre de sondage fait par les contributeurs de l'association Framasoft, avec une API backend.
## Index
* Meeting notes
* Getting Started (yarn start / npm start)
* How to contribute
* Architecture
* Translation i18n
* Accesibility
* Licence GNU affero V3
# Framadate - funky version
FR: Un logiciel libre de sondage fait par les contributeurs de l'association Framasoft, avec une API backend.
EN: A libre polling software made by contributors around the French association Framasoft.
This version uses a brand new backend API.
## Pour débuter - getting started
[lire la doc pour débuter votre Funky Framadate](GETTING_STARTED.md)
## Documentation
FR: Toute la documentation est disponible [dans le dossier "doc"](/), principalement en Français.
EN: All documentation is available in the "doc" folder, mainly in French because reasons.
# Version funky framadate
* [Spécifications](cadrage/specifications-fonctionnelles)
* maquettes par @maiwann : https://scene.zeplin.io/project/5d4d83d68866d6522ff2ff10
* vidéo de démo des maquettes par @maiwann : https://nuage.maiwann.net/s/JRRHTR9D2akMAa7
* discussions sur framateam canal général : https://framateam.org/ux-framatrucs/channaels/framadate
* discussions techniques côté développeurs : https://framateam.org/ux-framatrucs/channels/framadate-dev
* [notes de réunion](reunions/notes-de-reunion)
* [traductions](traductions)
# Documentations sur Angular
* `{- sur sass -}` (on va utiliser CSS, si angular permet d'avoir des variables CSS, @newick)
# Exemple de maquette de la nouvelle version
![schéma de données](img/date-poll-api-schema.png)
[voir le schéma UML](img/date-poll-api-schema-diagram.uml)
--
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.1.
For full documentation on mkdocs visit [mkdocs.org](https://www.mkdocs.org).
notes-de-reunion)
* [traductions](traductions)
# Documentations sur Angular
* `{- sur sass -}` (on va utiliser CSS, si angular permet d'avoir des variables CSS, @newick)
# Exemple de maquette de la nouvelle version
![funky_framadate_maquette](uploads/535da7c3a5ce5fae67b2b497bdc4631d/funky_framadate_maquette.png)
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.1.
For full documentation on mkdocs visit [mkdocs.org](https://www.mkdocs.org).

27
docs/index.md Normal file
View File

@ -0,0 +1,27 @@
# Framadate - funky version
FR: Un logiciel libre de sondage fait par les contributeurs de l'association Framasoft, avec une API backend.
***
EN: A libre polling software made by contributors around the French association Framasoft.
This version uses a brand new backend API.ntributeurs de l'association Framasoft, avec une API backend.
## Index
* Meeting notes
* Getting Started (yarn start / npm start)
* How to contribute
* Architecture
* Translation i18n
* Accesibility
* Licence GNU affero V3
# Framadate - funky version
FR: Un logiciel libre de sondage fait par les contributeurs de l'association Framasoft, avec une API backend.
EN: A libre polling software made by contributors around the French association Framasoft.
This version uses a brand new backend API.
## Pour débuter - getting started
[lire la doc pour débuter votre Funky Framadate](GETTING_STARTED.md)
## Documentation
voilà voilà

28
docs/libs.md Normal file
View File

@ -0,0 +1,28 @@
# LIBRARIES USED
| status | lib choice_label | usage |
| :-------------: | -------------------------------------------------------------- | --------------------------------------------------------- |
| | [axios](https://github.com/axios/axios) | http client |
| | [bulma](https://bulma.io/) | CSS framework |
| | [chart.js](https://www.chartjs.org/) | PrimeNG solution for graphs. (Chart.js installs MomentJS) |
| | [compodoc](https://compodoc.app/) | Generate technic documentation |
| | ESlint, Prettier, Lint-staged | Format & lint code |
| | [fork-awesome](https://forkaweso.me) | Icons collection |
| | [fullcalendar](https://fullcalendar.io/docs/initialize-es6) | PrimeNG solution to manage & display calendars |
| | [husky](https://www.npmjs.com/package/husky) | Hook actions on commit |
| | [jest](https://jestjs.io/) | test engine |
| | [json-server](https://www.npmjs.com/package/json-server) | local server for mocking data backend |
| removed | [locale-enum](https://www.npmjs.com/package/locale-enum) | enum of all locales |
| | [momentJS](https://momentjs.com/) | manipulate dates. (chartJSs dependency) |
| to be installed | [ng2-charts](https://valor-software.com/ng2-charts/) | Manipulate graphs along with chart.js |
| | [ngx-clipboard](https://www.npmjs.com/package/ngx-clipboard) | Handle clipboard |
| | [ngx-markdown](https://www.npmjs.com/package/ngx-markdown) | markdown parser |
| | [ngx-webstorage](https://www.npmjs.com/package/ngx-webstorage) | handle localStorage & webStorage |
| | [primeNG](https://www.primefaces.org/primeng/) | UI components collection |
| | [quill](https://www.npmjs.com/package/quill) | powerful rich text editor. WYSIWYG. |
| to be installed | [short-uuid](https://www.npmjs.com/package/short-uuid) | generate uuid |
| removed | [storybook](https://storybook.js.org/) | StyleGuide UI |
| | [ts-mockito](https://www.npmjs.com/package/ts-mockito) | Mocks for testing. |
| to be removed | [uuid](https://www.npmjs.com/package/uuid) | generate uuid |
---

View File

@ -31,9 +31,9 @@ https://framagit.org/framasoft/framadate/funky-framadate-front/-/boards
## Ressources ## Ressources
* Discussion : https://framateam.org/ux-framatrucs/channels/framadate * Discussion : [https://framateam.org/ux-framatrucs/channels/framadate]()
* Repo front/dev : https://framagit.org/framasoft/framadate/funky-framadate-front/tree/dev * Repo front/dev : [https://framagit.org/framasoft/framadate/funky-framadate-front/tree/dev]()
* Repo back : https://framagit.org/framasoft/framadate/framadate * Repo back : [https://framagit.org/framasoft/framadate/framadate ]()
* Maquettes Zeplin : demander l'accès à maiwann * Maquettes Zeplin : demander l'accès à maiwann
* La démo : https://framadate-api.cipherbliss.com/ * La démo : [https://framadate-api.cipherbliss.com/]()
* Vidéo de présentation : https://nuage.maiwann.net/s/JRRHTR9D2akMAa7 * Vidéo de présentation : [https://nuage.maiwann.net/s/JRRHTR9D2akMAa7]()

View File

@ -62,7 +62,7 @@ Il est difficile d'entrer dans le projet en absence de spécifications écrites.
* Discussion : https://framateam.org/ux-framatrucs/channels/framadate * Discussion : https://framateam.org/ux-framatrucs/channels/framadate
* Repo front/dev : https://framagit.org/framasoft/framadate/funky-framadate-front/tree/dev * Repo front/dev : https://framagit.org/framasoft/framadate/funky-framadate-front/tree/dev
* Repo back : https://framagit.org/framasoft/framadate/framadate * Repo back : https://framagit.org/tykayn/date-poll-api
* Maquettes Zeplin : https://scene.zeplin.io/project/5d4d83d68866d6522ff2ff10 * Maquettes Zeplin : https://scene.zeplin.io/project/5d4d83d68866d6522ff2ff10
* La démo : https://framadate-api.cipherbliss.com/ * La démo : https://framadate-api.cipherbliss.com/
* Vidéo de présentation : https://nuage.maiwann.net/s/JRRHTR9D2akMAa7 * Vidéo de présentation : https://nuage.maiwann.net/s/JRRHTR9D2akMAa7

View File

@ -0,0 +1,44 @@
# What about Framadate v1?
source: https://framagit.org/framasoft/framadate/framadate/-/issues/545
TL;DR: The project is now in maintenance mode. Follow https://framagit.org/framasoft/framadate/funky-framadate-front and https://framagit.org/tykayn/date-poll-api
So I'm going to give a quick update on the status of this project.
History
2009/2010: The university of Strasbourg develops STUdS
May 2011: a Framasoft member forks STUdS into "opensondage" and cleans the code. They installs it for our own internal usage.
June 2011: Framasoft works again on STUdS/Opensondage, make it more "sexy" (mostly frontend work), the service is accessible publicly at https://framadate.org
2014: the project is transferred to an employee of Framasoft
There was a lot of work on the a11y front https://framablog.org/2014/11/26/framadate-nouvelle-version-accessible/ (in french)
2015: the project is handed to volunteers
version 1.0 came out https://framablog.org/2016/10/17/framadate-passage-en-v1-happy-hour-pour-tout-le-monde/ (in french)
2016: these volunteers are no longer active
2018: It's the beginning of multiple tentatives to rethink Framadate, including some work by a volunteer designer who produced some mockups.
2019: A physical reunion with myself and some volunteers (https://www.codeursenliberté.fr/entreprise/contribution_au_libre/ in french) produces what's now the 1.2.0 alpha release, but without further work, it's left abandoned (this is now the develop branch).
Around the same time, the poll table gets a UI improvement, which is hotpatched on framadate.org but still not merged here: !412
2016-2021: small contributions from Framasoft/myself and from some volunteers, including some students, bring a few minor versions.
A few UX improvements are added, but mostly frontend stuff.
The one thing that seems to survive from the multiple tentatives to reboot Framadate is a rewrite in Angular and Symfony: https://framagit.org/framasoft/framadate/funky-framadate-front and https://framagit.org/tykayn/date-poll-api
2021: A french organization (not sure if I can say who) wants to support Framadate and seems to plan to work on the project I've just mentioned above.
Current status
What important here is that we lie on a huge pile of technical dept (more or less well written PHP from ten years ago), because no one - including Framasoft and myself - can find time for Framadate.
Framasoft has currently a lot of ongoing projects, and does not wish to try to maintain this one any longer (not that it was done).
I could give maintainer rights to some people like @sbernhard who seems to have sent a number of MRs and seems interested in Framadate, but given the state of the project, it's probably better to fork it (it would also remove the frama part in the project name, which we would like to get rid of anyway). If you do, please inform us so that we may link to your own project.
Or you can also follow and maybe contribute to this rewrite https://framagit.org/framasoft/framadate/funky-framadate-front and https://framagit.org/tykayn/date-poll-api :)
If it become usable and stable enough, we'll consider it to replace the service at https://framadate.org
I'm putting the project in maintenance mode for now, meaning we only commit to release security fixes in the foreseeable future.
I hope you can understand our position.
Thomas, for Framasoft.

111
docs/user-guide/index.md Normal file
View File

@ -0,0 +1,111 @@
# Guide utilisateur
## Principe
Framadate permet de créer et répondre à des sondages demandant des disponibilité dans le temps à plusieurs personnes afin de détermnier un consensus pour organiser des rendez-vous.
Il faut donc qu'une personne crée un sondage et publie un lien aux personnes qu'elle souhaite réunir.
## Glossaire
| Terme | Signification |
| :--- | :--- |
| Créateur | Personne ayant créé le sondage |
| Participant | Personne invitée à participer ou ayant participé |
| Archivage | Empêcher votes et commentaires mais conserver les résultats |
| _Slug_ | Partie le l'URL identifiant un sondage de manière unique |
## Fonctionnalités actuellement dans framadate legacy et à conserver
### Généralités
Il existe deux types de sondage. Le type «dates» est adapté à la proposition de dates (voir [§plages horaires](#plages-horaires)) et le type «texte», plus généraliste, ne contient que du texte. Ce choix est l'un des premiers choix effectués lors de la création d'un nouveau sondage.
Deux types d'acteurs sont distingués : la personne ayant créé le sondage et les personnes qui répondent au sondage. Ces deux types d'acteurs n'ont pas les mêmes droits sur le sondage : la personne ayant créé le sondage est la seule ayant des droits d'administration sur celui-ci, en plus des droits des participants. En particulier, les droits d'administration permettent d'ajuster les droits des participants.
### Création d'un sondage
Il est nécessaire de fournir un email lors de la création du sondage. Cela permet aux créateurs de sondages de pouvoir obtenir via email la liste des sondages qu'ils ont créés.
Il est possible de choisir le _slug_ dans l'URL du sondage, à condition que ce _slug_ soit disponible.
Le sondage reste modifiable après sa création.
### Plages horaires
Les sondages de type «dates» permettent de proposer des jours et des plages horaires pour chaque journée.
Pour faciliter la saisie des dates proposées, il est demandé si les plages horaires sont les mêmes chaque jour ou si elles sont différentes selon les jours. Dans le premier cas, les plages horaires sont demandées uniquement pour le premier jour et sont automatiquement reproduites sur les autres jours.
Toujours pour faciliter la saisie des propositions, il est possible d'ajouter plusieurs jours consécutifs en sélectionnant le premier et le dernier jour plutôt qu'en sélectionnant chaque jour un à un.
## Participation à un sondage
### Votes
Les participants n'ont pas besoin de créer un compte ou de fournir leur email pour participer à un sondage.
Le créateur du sondage peut protéger le sondage par un mot de passe. Sans ce mot de passe, il est impossible de voir le sondage, donc impossible d'y voter. Attention cependant, le sondage est stocké en clair dans la base de données et ne bénéficie donc d'aucun chiffrement. *# Le mot de passe, lui, est-il chiffré?*
Le créateur du sondage choisit de permettre ou non les modifications des votes sur le sondage. Il a le choix entre les trois formules suivantes :
* ne pas permettre de modifier de réponse;
* permettre de modifier uniquement sa propre réponse a un sondage (modalités d'identification encore non déterminées);
* permettre de modifier toute réponse à un sondage (y compris celles des autres).
### Commentaires
Les participants au sondage ont la possibilité de créer des commentaires sur le sondage. Seule la personne ayant les droits d'administration sur le sondage peut modifier les commentaires.
## Résultats
Selon la configuration du sondage, les résultats peuvent n'être accessibles qu'à la personne ayant un accès d'administration ou bien être publics. Les personnes pouvant accéder aux résultats du sondage peuvent exporter ces résultats au format CSV.
## Emails
Lorsqu'une personne crée un sondage, un email reprenant les informations du sondage ainsi que les URL uniques servant à le modifier (lien d'administration) et à y participer (lien à transmettre aux participants) lui est envoyé. De plus, elle peut choisir de recevoir des emails lors d'un nouveau vote ou commentaire sur le sondage.
Une personne ayant créé au moins un sondage peut demander à recevoir par email la liste des sondages qu'elle a créés en utilisant cette adresse email.
## Stockage et export de données
Les données sont stockées en clair sur le serveur. L'archivage (resp. suppression) automatique des sondages est effectué via cronjob 90 (resp. 120) jours après sa création. Il est possible pour l'administrateur d'un sondage de modifier la durée avant archivage et la suppression automatique suit toujours de 30 jours la date d'archivage.
L'export d'un sondage et des résultats d'un sondage est possible au format CSV ainsi que JSON.
# Nouveautés dans Framadate Funky
Plus de détails dans la section [Historique](../historique.md) pour connaître le cheminement des versions précédentes.
Les idées et rapports de bugs sont disponibles dans [le tableau des Issues](https://framagit.org/framasoft/framadate/funky-framadate-front/-/boards) sur la forge logicielle.
## principales
* Accessibilité renforcée.
* Traduction dynamique de toutes les phrases en choisissant la langue dans le menu.
* Adapté aussi bien sur mobile que grands écrans à haute ou faible densité de pixels.
* Anti-spam de commentaires.
* Anti-spam de vote.
* Tests unitaires et end-to-end.
* Couverture de test.
## Nouveautés secondaires
* Choix de réponses possibles. Proposer de ne répondre que «oui» ou rien, ou aller dans la nuance en proposant «oui», «peut-être», «non», « ? ». *# Redondance ou le choix de réponses possibles de la première phrase concerne un autre choix?*
* Insertion d'images dans le sondage de type texte, avec des URL uniquement. Une seule image par title possible ou rien.
* Thème sombre.
* Duplication de sondage à partir d'un autre.
* Boutons pour copier dans le presse-papier les liens publics et privés / admin des sondages.
* Limiter le nombre de participants maximum
# Idées pour de futures améliorations (pertinence à vérifier)
* Gagner en vie privée en chiffrant certaines informations? Stockage zéro knowledge avec un chiffrement robuste à courbe elliptique.
* À réfléchir : permettre à Framadate de faire entrer à des gens plusieurs plages de temps de disponibilité et le service déduit quelles sont les plages de temps favorables (calcul d'intersection sur des lignes discontinues). Cela pourrait être avec divers niveaux de détail. Comme https://omnipointment.com/ (qui est un logiciel privateur)
* SSO du fédiverse?

69
mkdocs.yml Normal file
View File

@ -0,0 +1,69 @@
site_name: Funky Framadate Front end
site_url: https://framagit.org/framasoft/framadate/funky-framadate-front
repo_name: Framagit
site_description:
docs_dir: docs
#docs/
# index.md
nav:
- Accueil:
- index.en.md
- index.fr.md
- en cours: TODO.md
- Guide utilisateur:
- user-guide/index.md
- LICENCE.md
- Guide administrateur:
- Changelog: changelog.md
- Guide développeur:
- Démarrer: GETTING_STARTED.md
- Personnaliser: customisation.md
- Accessibilité: cadrage/accessibility.md
- Architecture: cadrage/architecture.md
- Contribuer: dev-guide/CONTRIBUTE.md
- Angular: angular.md
- Traduction: cadrage/i18n.md
- Historique:
- Historique: history.md
- Spécifications: cadrage/specifications-fonctionnelles.md
- Réunions:
- Modèle vierge: reunions/0_blank_notes.md
- 2020_08_09: reunions/2020_08_09.md
- 2019_08_09: reunions/2019_08_09.md
plugins:
- search
- i18n:
languages:
fr: "Français"
en: "English"
default_language: 'fr'
no_translation:
en: "This page isn't translated to English."
fr: "Cette page n'est pas traduite en Français."
translate_nav:
en:
section title: "Section"
subsection: "Subsection"
page title: "Page with title translated"
fr:
section title: "Section"
subsection: "Sous section"
page title: "Page avec un titre traduite"
theme:
name: slate
nav_style: dark
extra:
# Default mkdocs-material alternate links for untranslated pages
# https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#site-language-selector
alternate:
- name: English
link: ""
lang: en
- name: Français
link: ""
lang: fr

View File

@ -63,7 +63,7 @@ export class PollConfig {
owner_modifier_token = ''; // key to change a vote stack owner_modifier_token = ''; // key to change a vote stack
canModifyAnswers = true; // bool for the frontend selector canModifyAnswers = true; // bool for the frontend selector
whoCanChangeAnswers = 'everybody'; // everybody, self, nobody (= just admin) whoCanChangeAnswers = 'everybody'; // everybody, self, nobody (= just admin)
dateList: any = otherDefaultDates; // sets of days as strings, config to set identical time for days in a special days poll dateList: any = otherDefaultDates; // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
timeList: DateChoice[] = otherDefaultDates; // ranges of time expressed as strings timeList: DateChoice[] = otherDefaultDates; // ranges of time expressed as strings
answers: PollAnswer[] = defaultAnswers; answers: PollAnswer[] = defaultAnswers;

View File

@ -8,7 +8,7 @@ export const mockGraphConfig = {
visibility: 'link_only', visibility: 'link_only',
// date specific poll // date specific poll
allowSeveralHours: 'true', allowSeveralHours: 'true',
dateLgfgfgfgist: ['jeudi', 'vendredi', 'samedi'], // sets of days as strings dateLgfgfgfgist: ['jeudi', 'vendredi', 'samedi'], // sets of dateList as strings
timeList: ['08:00', '08:30', '09:00'], // ranges of time expressed as strings timeList: ['08:00', '08:30', '09:00'], // ranges of time expressed as strings
answers: [ answers: [
{ {

View File

@ -95,20 +95,7 @@
</div> </div>
<div *ngIf="'false' === config.allowSeveralHours" class="identical-dates"> <div *ngIf="'false' === config.allowSeveralHours" class="identical-dates">
<div *ngFor="let time of config.timeList; index as id" class="time-choice">
<label for="timeChoices_{{ id }}">
<i class="fa fa-clock-o" aria-hidden="true"></i>
</label>
<input
[(ngModel)]="time.literal"
name="timeChoices_{{ id }}"
type="text"
id="timeChoices_{{ id }}"
/>
<button (click)="time.timeList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>
</div> </div>
<hr /> <hr />
<span class="count-dates title"> <span class="count-dates title">

View File

@ -30,7 +30,7 @@ export class DatesComponent extends BaseComponent implements OnInit {
} }
countDays() { countDays() {
// compute the number of days in the date interval // compute the number of dateList in the date interval
if (this.endDateInterval && this.startDateInterval) { if (this.endDateInterval && this.startDateInterval) {
this.intervalDays = this.dateUtilities.dayDiff(this.endDateInterval, this.startDateInterval).toFixed(0); this.intervalDays = this.dateUtilities.dayDiff(this.endDateInterval, this.startDateInterval).toFixed(0);
} }

View File

@ -48,7 +48,7 @@ export class ConfigService extends PollConfig {
} }
/** /**
* add some days to a date, to compute intervals * add some dateList to a date, to compute intervals
* @param days * @param days
* @param date * @param date
*/ */

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "framadate-funky-frontend", "name": "framadate-funky-frontend",
"version": "1.0.0", "version": "0.6.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@ -1,123 +1,126 @@
{ {
"name": "framadate-funky-frontend", "name": "framadate-funky-frontend",
"version": "1.0.0", "version": "0.6.0",
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
"build:prod": "ng build --prod", "build:prod": "ng build --prod",
"build:prod:stats": "ng build --prod --stats-json", "build:prod:stats": "ng build --prod --stats-json",
"build:prod:gitlabpage": "ng build --prod --baseHref=/framadate/funky-framadate-front/", "build:prod:gitlabpage": "ng build --prod --baseHref=/framadate/funky-framadate-front/",
"build:prod:demobliss": "ng build --prod --baseHref=https://framadate-api.cipherbliss.com --stats-json ", "build:prod:demobliss": "ng build --prod --baseHref=https://framadate-api.cipherbliss.com --stats-json ",
"test": "jest", "test": "jest",
"test:watch": "jest --watch", "test:watch": "jest --watch",
"test:ci": "jest --ci", "test:ci": "jest --ci",
"lint": "prettier --write \"src/**/*.{js,jsx,ts,tsx,md,html,css,scss}\"", "lint": "prettier --write \"src/**/*.{js,jsx,ts,tsx,md,html,css,scss}\"",
"e2e": "ng e2e", "e2e": "ng e2e",
"format:check": "prettier --list-different \"src/{app,environments,assets}/**/*{.ts,.js,.json,.css,.scss}\"", "release:major": "changelog -M && git add CHANGELOG.md && git commit -m 'updated CHANGELOG.md' && npm version major && git push origin && git push origin --tags",
"format:all": "prettier --write \"src/**/*.{js,jsx,ts,tsx,md,html,css,scss}\"", "release:minor": "changelog -m && git add CHANGELOG.md && git commit -m 'updated CHANGELOG.md' && npm version minor && git push origin && git push origin --tags",
"trans": "ng xi18n --output-path=src/locale --i18n-locale=fr", "release:patch": "changelog -p && git add CHANGELOG.md && git commit -m 'updated CHANGELOG.md' && npm version patch && git push origin && git push origin --tags",
"compodoc": "compodoc -p tsconfig.app.json", "format:check": "prettier --list-different \"src/{app,environments,assets}/**/*{.ts,.js,.json,.css,.scss}\"",
"mock:server": "json-server --port 8000 --watch ./mocks/db.json --routes ./mocks/routes.json", "format:all": "prettier --write \"src/**/*.{js,jsx,ts,tsx,md,html,css,scss}\"",
"start:proxy": "ng serve --proxy-config proxy.conf.json", "trans": "ng xi18n --output-path=src/locale --i18n-locale=fr",
"start:proxymock": "concurrently --kill-others \"yarn mock:server\" \"yarn start:proxy\"", "compodoc": "compodoc -p tsconfig.app.json",
"i18n:init": "ngx-translate-extract --input ./src --output ./src/assets/i18n/template.json --key-as-default-value --replace --format json", "mock:server": "json-server --port 8000 --watch ./mocks/db.json --routes ./mocks/routes.json",
"i18n:extract": "ngx-translate-extract --input ./src --output ./src/assets/i18n/{en,da,de,fi,nb,nl,sv}.json --clean --format json" "start:proxy": "ng serve --proxy-config proxy.conf.json",
}, "start:proxymock": "concurrently --kill-others \"yarn mock:server\" \"yarn start:proxy\"",
"private": false, "i18n:init": "ngx-translate-extract --input ./src --output ./src/assets/i18n/template.json --key-as-default-value --replace --format json",
"dependencies": { "i18n:extract": "ngx-translate-extract --input ./src --output ./src/assets/i18n/{en,da,de,fi,nb,nl,sv}.json --clean --format json"
"@angular/animations": "^9.1.1", },
"@angular/cdk": "^9.2.2", "private": false,
"@angular/common": "^9.0.7", "dependencies": {
"@angular/compiler": "^9.0.7", "@angular/animations": "^9.1.1",
"@angular/core": "^9.0.7", "@angular/cdk": "^9.2.2",
"@angular/forms": "^9.0.7", "@angular/common": "^9.0.7",
"@angular/localize": "^9.1.1", "@angular/compiler": "^9.0.7",
"@angular/material": "^9.2.4", "@angular/core": "^9.0.7",
"@angular/platform-browser": "^9.0.7", "@angular/forms": "^9.0.7",
"@angular/platform-browser-dynamic": "^9.0.7", "@angular/localize": "^9.1.1",
"@angular/router": "^9.0.7", "@angular/material": "^9.2.4",
"@biesbjerg/ngx-translate-extract": "^7.0.3", "@angular/platform-browser": "^9.0.7",
"@biesbjerg/ngx-translate-po-http-loader": "^3.1.0", "@angular/platform-browser-dynamic": "^9.0.7",
"@fullcalendar/core": "^4.4.0", "@angular/router": "^9.0.7",
"@ngx-translate/core": "^12.1.2", "@biesbjerg/ngx-translate-extract": "^7.0.3",
"@ngx-translate/http-loader": "^5.0.0", "@biesbjerg/ngx-translate-po-http-loader": "^3.1.0",
"angular-date-value-accessor": "^1.0.2", "@fullcalendar/core": "^4.4.0",
"axios": "^0.19.2", "@ngx-translate/core": "^12.1.2",
"bulma": "^0.9.0", "@ngx-translate/http-loader": "^5.0.0",
"bulma-switch": "^2.0.0", "angular-date-value-accessor": "^1.0.2",
"chart.js": "^2.9.3", "axios": "^0.19.2",
"crypto": "^1.0.1", "bulma": "^0.9.0",
"fork-awesome": "^1.1.7", "bulma-switch": "^2.0.0",
"ng2-charts": "^2.3.0", "chart.js": "^2.9.3",
"ngx-clipboard": "^13.0.0", "crypto": "^1.0.1",
"ngx-markdown": "^9.0.0", "fork-awesome": "^1.1.7",
"ngx-webstorage": "^5.0.0", "ng2-charts": "^2.3.0",
"node-forge": "^0.10.0", "ngx-clipboard": "^13.0.0",
"primeng": "^9.0.6", "ngx-markdown": "^9.0.0",
"quill": "^1.3.7", "ngx-webstorage": "^5.0.0",
"rxjs": "^6.5.5", "node-forge": "^0.10.0",
"rxjs-compat": "^6.5.5", "primeng": "^9.0.6",
"short-unique-id": "^3.0.3", "quill": "^1.3.7",
"stream": "^0.0.2", "rxjs": "^6.5.5",
"tslib": "<2.0.0", "rxjs-compat": "^6.5.5",
"zone.js": "^0.10.3" "short-unique-id": "^3.0.3",
}, "stream": "^0.0.2",
"devDependencies": { "tslib": "<2.0.0",
"@angular-builders/jest": "^9.0.1", "zone.js": "^0.10.3"
"@angular-devkit/build-angular": "^0.901.2", },
"@angular/cli": "^9.1.2", "devDependencies": {
"@angular/compiler-cli": "^9.1.1", "@angular-builders/jest": "^9.0.1",
"@angular/language-service": "^9.0.7", "@angular-devkit/build-angular": "^0.901.2",
"@babel/core": "^7.9.0", "@angular/cli": "^9.1.2",
"@babel/preset-env": "^7.9.5", "@angular/compiler-cli": "^9.1.1",
"@babel/preset-typescript": "^7.9.0", "@angular/language-service": "^9.0.7",
"@compodoc/compodoc": "^1.1.11", "@babel/core": "^7.9.0",
"@types/jest": "^26.0.0", "@babel/preset-env": "^7.9.5",
"@types/node": "^14.0.1", "@babel/preset-typescript": "^7.9.0",
"@typescript-eslint/eslint-plugin": "^3.0.0", "@compodoc/compodoc": "^1.1.11",
"@typescript-eslint/parser": "^3.0.0", "@types/jest": "^26.0.0",
"babel-jest": "^26.0.0", "@types/node": "^14.0.1",
"concurrently": "^5.2.0", "@typescript-eslint/eslint-plugin": "^3.0.0",
"eslint": "^7.0.0", "@typescript-eslint/parser": "^3.0.0",
"eslint-config-prettier": "^6.11.0", "babel-jest": "^26.0.0",
"eslint-plugin-prettier": "^3.1.3", "concurrently": "^5.2.0",
"husky": "^4.2.5", "eslint": "^7.0.0",
"jest": "^26.0.0", "eslint-config-prettier": "^6.11.0",
"jest-environment-jsdom-sixteen": "^1.0.3", "eslint-plugin-prettier": "^3.1.3",
"jest-preset-angular": "^8.1.3", "husky": "^4.2.5",
"json-server": "^0.16.1", "jest": "^26.0.0",
"lint-staged": "^10.1.7", "jest-environment-jsdom-sixteen": "^1.0.3",
"prettier": "^2.0.5", "jest-preset-angular": "^8.1.3",
"protractor": "~7.0.0", "json-server": "^0.16.1",
"ts-jest": "^26.0.0", "lint-staged": "^10.1.7",
"ts-mockito": "^2.5.0", "prettier": "^2.0.5",
"ts-node": "^8.10.1", "protractor": "~7.0.0",
"typescript": "<3.9.0" "ts-jest": "^26.0.0",
}, "ts-mockito": "^2.5.0",
"husky": { "ts-node": "^8.10.1",
"hooks": { "typescript": "<3.9.0"
"pre-commit": "lint-staged" },
} "husky": {
}, "hooks": {
"lint-staged": { "pre-commit": "lint-staged"
"src/**/*.{js,jsx,ts,tsx,md,html,css,scss}": [ }
"prettier --write", },
"git add" "lint-staged": {
], "src/**/*.{js,jsx,ts,tsx,md,html,css,scss}": [
"*.js": [ "prettier --write",
"prettier --write" "git add"
] ],
}, "*.js": [
"jest": { "prettier --write"
"preset": "jest-preset-angular", ]
"setupFilesAfterEnv": [ },
"<rootDir>/src/jest.setup.ts" "jest": {
], "preset": "jest-preset-angular",
"testEnvironment": "jest-environment-jsdom-sixteen", "setupFilesAfterEnv": [
"transform": { "<rootDir>/src/jest.setup.ts"
"^.+\\.(ts|html)$": "ts-jest", ],
"^.+\\.jsx?$": "babel-jest" "testEnvironment": "jest-environment-jsdom-sixteen",
} "transform": {
} "^.+\\.(ts|html)$": "ts-jest",
"^.+\\.jsx?$": "babel-jest"
}
}
} }

View File

@ -68,7 +68,7 @@ export class Poll {
public modification_policy = 'everybody'; public modification_policy = 'everybody';
public dateChoices: DateChoice[] = []; public dateChoices: DateChoice[] = [];
// sets of days as strings, config to set identical time for days in a special days poll // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
public timeSlices: TimeSlices[] = []; // ranges of time expressed as strings public timeSlices: TimeSlices[] = []; // ranges of time expressed as strings
constructor(public owner: Owner = new Owner(), public title = 'mon titre', public custom_url: string = '') {} constructor(public owner: Owner = new Owner(), public title = 'mon titre', public custom_url: string = '') {}

View File

@ -1,11 +1,12 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { DateChoice } from '../../../../mocks/old-stuff/config/defaultConfigs';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class DateUtilitiesService { export class DateUtilitiesService {
/** /**
* add some days to a date, to compute intervals * add some dateList to a date, to compute intervals
* @param days * @param days
* @param date * @param date
*/ */
@ -27,7 +28,7 @@ export class DateUtilitiesService {
const dates = []; const dates = [];
while (+d1 < +d2) { while (+d1 < +d2) {
dates.push({ dates.push({
literal: this.formateDate(d1), literal: this.formateDateToInputStringNg(d1),
date_object: d1, date_object: d1,
}); });
d1.setDate(d1.getDate() + interval); d1.setDate(d1.getDate() + interval);
@ -36,7 +37,7 @@ export class DateUtilitiesService {
} }
/** /**
* get the number of days between two dates * get the number of dateList between two dates
* @param d1 * @param d1
* @param d2 * @param d2
*/ */
@ -50,7 +51,7 @@ export class DateUtilitiesService {
* YYYY-MM-DD * YYYY-MM-DD
* @param date * @param date
*/ */
formateDate(date) { formateDateToInputStringNg(date: Date): string {
return [ return [
date.getFullYear(), date.getFullYear(),
this.getDoubleDigits(date.getMonth() + 1), this.getDoubleDigits(date.getMonth() + 1),
@ -58,24 +59,69 @@ export class DateUtilitiesService {
].join('-'); ].join('-');
} }
parseInputDateToDateObject(inputDateString: string) { /**
const boom = inputDateString.split('-'); * transform a date object to a short date string
* @param inputDate
*/
parseInputDateToDateObject(inputDate: Date): Date {
const boom = inputDate.toISOString().substring(0, 10).split('-');
const converted = new Date(boom['0'], boom['1'] - 1, boom['2']); const converted = new Date(boom['0'], boom['1'] - 1, boom['2']);
console.log('converted', converted); console.log('converted', converted);
return converted; return converted;
} }
/**
* get double in string
* @param str
*/
getDoubleDigits(str) { getDoubleDigits(str) {
return ('00' + str).slice(-2); return ('00' + str).slice(-2);
} }
/**
* compute the number of dateList in the date interval
* @param startDateInterval
* @param endDateInterval
*/
countDays(startDateInterval: Date, endDateInterval: Date): number { countDays(startDateInterval: Date, endDateInterval: Date): number {
// compute the number of days in the date interval
if (endDateInterval && startDateInterval) { if (endDateInterval && startDateInterval) {
return this.dayDiff(endDateInterval, startDateInterval); return this.dayDiff(endDateInterval, startDateInterval);
} }
return 0; return 0;
} }
/**
* fill default dates for today + the next 3 dateList
*/
makeDefaultDateChoices(): DateChoice[] {
const today = new Date();
const ladate = this.addDaysToDate(1, today);
const ladate2 = this.addDaysToDate(2, today);
const ladate3 = this.addDaysToDate(3, today);
const ladate4 = this.addDaysToDate(4, today);
return [
{
literal: this.formateDateToInputStringNg(ladate),
timeList: [],
date_object: ladate,
},
{
literal: this.formateDateToInputStringNg(ladate2),
timeList: [],
date_object: ladate2,
},
{
literal: this.formateDateToInputStringNg(ladate3),
timeList: [],
date_object: ladate3,
},
{
literal: this.formateDateToInputStringNg(ladate4),
timeList: [],
date_object: ladate4,
},
];
}
} }

View File

@ -212,6 +212,8 @@ export class PollService implements Resolve<Poll> {
newpoll.password = form.value.password; newpoll.password = form.value.password;
newpoll.kind = form.value.kind; newpoll.kind = form.value.kind;
newpoll.allow_comments = form.value.allowComments; newpoll.allow_comments = form.value.allowComments;
// merge choices from storage
newpoll.choices = this.storageService.choices;
newpoll.dateChoices = this.storageService.dateList; newpoll.dateChoices = this.storageService.dateList;
newpoll.timeSlices = this.storageService.timeSlices; newpoll.timeSlices = this.storageService.timeSlices;

View File

@ -16,6 +16,7 @@ import {
} from '../../../../mocks/old-stuff/config/defaultConfigs'; } from '../../../../mocks/old-stuff/config/defaultConfigs';
import { Poll } from '../models/poll.model'; import { Poll } from '../models/poll.model';
import { Owner } from '../models/owner.model'; import { Owner } from '../models/owner.model';
import { DateUtilitiesService } from './date.utilities.service';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
@ -31,7 +32,7 @@ export class StorageService {
public userPolls: Poll[] = []; public userPolls: Poll[] = [];
@LocalStorage() @LocalStorage()
public dateList: DateChoice[] = otherDefaultDates; public dateList: DateChoice[] = [];
@LocalStorage() @LocalStorage()
public timeSlices: TimeSlices[]; public timeSlices: TimeSlices[];
@ -39,14 +40,20 @@ export class StorageService {
@LocalStorage() @LocalStorage()
public vote_stack: Stack = new Stack(); public vote_stack: Stack = new Stack();
constructor() { @LocalStorage()
public choices: Choice[];
constructor(public dateUtilities: DateUtilitiesService) {
if (environment.autofill) { if (environment.autofill) {
this.userPolls.push(new Poll(new Owner(), 'Démo: Anniversaire de tonton Patrick', 'aujourdhui-ou-demain')); this.userPolls.push(new Poll(new Owner(), 'Démo: Anniversaire de tonton Patrick', 'aujourdhui-ou-demain'));
this.userPolls.push(new Poll(new Owner(), 'Démo: Atelier cuisine du quartier', 'aujourdhui-ou-demain')); this.userPolls.push(new Poll(new Owner(), 'Démo: Atelier cuisine du quartier', 'aujourdhui-ou-demain'));
this.userPolls.push( this.userPolls.push(
new Poll(new Owner(), 'Démo: Réunion du département des chatons', 'aujourdhui-ou-demain') new Poll(new Owner(), 'Démo: Réunion du département des chatons', 'aujourdhui-ou-demain')
); );
// this.timeSlices = basicSlicesOfDay; }
if (!this.dateList.length) {
this.dateList = this.dateUtilities.makeDefaultDateChoices();
} }
} }

View File

@ -16,9 +16,13 @@ import { TextSelectComponent } from './form/text-select/text-select.component';
import { KindSelectComponent } from './form/kind-select/kind-select.component'; import { KindSelectComponent } from './form/kind-select/kind-select.component';
import { BaseConfigComponent } from './form/base-config/base-config.component'; import { BaseConfigComponent } from './form/base-config/base-config.component';
import { AdvancedConfigComponent } from './form/advanced-config/advanced-config.component'; import { AdvancedConfigComponent } from './form/advanced-config/advanced-config.component';
import { CalendarModule } from 'primeng'; import { CalendarModule, DialogModule } from 'primeng';
import { DragDropModule } from '@angular/cdk/drag-drop'; import { DragDropModule } from '@angular/cdk/drag-drop';
import { AppModule } from '../../app.module'; import { AppModule } from '../../app.module';
import { IntervalComponent } from './form/date/interval/interval.component';
import { DayListComponent } from './form/date/list/day/day-list.component';
import { PickerComponent } from './form/date/picker/picker.component';
import { TimeListComponent } from './form/date/list/time/time-list.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -32,6 +36,10 @@ import { AppModule } from '../../app.module';
KindSelectComponent, KindSelectComponent,
BaseConfigComponent, BaseConfigComponent,
AdvancedConfigComponent, AdvancedConfigComponent,
IntervalComponent,
DayListComponent,
PickerComponent,
TimeListComponent,
], ],
imports: [ imports: [
CalendarModule, CalendarModule,
@ -43,6 +51,7 @@ import { AppModule } from '../../app.module';
TranslateModule.forChild({ extend: true }), TranslateModule.forChild({ extend: true }),
DateValueAccessorModule, DateValueAccessorModule,
DragDropModule, DragDropModule,
DialogModule,
], ],
}) })
export class AdministrationModule {} export class AdministrationModule {}

View File

@ -6,65 +6,29 @@
{{ 'dates.add' | translate }} {{ 'dates.add' | translate }}
<!-- interval--> <!-- interval-->
<button <!-- <app-date-interval></app-date-interval>-->
(click)="showDateInterval = !showDateInterval"
[ngClass]="{ active: showDateInterval }"
class="btn btn--primary"
id="toggle_interval_button"
>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<span>
{{ 'dates.add_interval' | translate }}
</span>
</button>
<fieldset *ngIf="showDateInterval" class="date-interval form-row is-boxed">
<h2>{{ 'dates.add_interval' | translate }}</h2>
<div class="columns">
<div class="column">
{{ 'dates.interval_propose' | translate }}
</div>
<div class="column">
<label for="start_interval" class="hidden">start</label>
<input id="start_interval" (change)="countDays()" formControlName="startDateInterval" type="date" />
</div>
</div>
<div class="columns">
<div class="column">
{{ 'dates.interval_span' | translate }}
</div>
<div class="column">
<label for="end_interval" class="hidden">end</label>
<input id="end_interval" formControlName="endDateInterval" type="date" />
</div>
</div>
<button (click)="addIntervalOfDates()" class="btn btn-block btn--primary">
<i class="fa fa-plus" aria-hidden="true"></i>
{{ 'dates.interval_button' | translate }}
{{ intervalDays }}
{{ 'dates.interval_button_dates' | translate }}
</button>
</fieldset>
</form> </form>
<div class="dates-list"> <div class="dates-list">
<button <!-- différentes horaires-->
class="btn" <div class="different-hours" *ngIf="displaySeveralHoursChoice">
[class.is-primary]="form.value.hasSeveralHours" <button
(click)="form.patchValue({ hasSeveralHours: !form.value.hasSeveralHours })" class="btn"
> [class.is-primary]="form.value.hasSeveralHours"
<i class="fa fa-check-square-o" *ngIf="form.value.hasSeveralHours"></i> (click)="form.patchValue({ hasSeveralHours: !form.value.hasSeveralHours })"
<i class="fa fa-square-o" *ngIf="!form.value.hasSeveralHours"></i> >
<span> horaires avancées</span> <i class="fa fa-check-square-o" *ngIf="form.value.hasSeveralHours"></i>
<i class="fa fa-clock-o"></i> <i class="fa fa-square-o" *ngIf="!form.value.hasSeveralHours"></i>
</button> <span> horaires avancées</span>
<div class="is-info notification"> <i class="fa fa-clock-o"></i>
<span *ngIf="form.value.hasSeveralHours"> </button>
Chaque jour aura ses plages de temps personnalisées <div class="is-info notification">
</span> <span *ngIf="form.value.hasSeveralHours">
<span *ngIf="!form.value.hasSeveralHours"> Chaque jour aura ses plages de temps personnalisées
Tous les jours auront les mêmes plages de temps </span>
</span> <span *ngIf="!form.value.hasSeveralHours">
</div> Tous les jours auront les mêmes plages de temps
<fieldset class="range-container is-boxed"> </span>
</div>
<div class="actions columns"> <div class="actions columns">
<div class="column"></div> <div class="column"></div>
<div class="column has-text-right"> <div class="column has-text-right">
@ -102,150 +66,37 @@
</span> </span>
</button> </button>
</div> </div>
</div> <fieldset class="range-container is-boxed">
<div class="range-time" *ngIf="!form.value.hasSeveralHours">
<div class="range-time" *ngIf="!form.value.hasSeveralHours"> <h2>
<h2> <span class="count-dates-txt">
<span class="count-dates-txt"> {{ 'dates.count_time' | translate }}
{{ 'dates.count_time' | translate }} (identique pour chaque jour)
(identique pour chaque jour) </span>
</span> </h2>
</h2> <div class="title">
<div class="title"> <span class="count-dates">
<span class="count-dates"> {{ timeList.length }}
{{ timeList.length }} </span>
</span> <button class="button is-warning" (click)="removeAllTimes()">
<button class="button is-warning" (click)="removeAllTimes()"> <i class="fa fa-trash"></i>
<i class="fa fa-trash"></i> </button>
</button> <button class="button is-info" (click)="resetTimes()">
<button class="button is-info" (click)="resetTimes()"> <i class="fa fa-refresh"></i>
<i class="fa fa-refresh"></i> </button>
</button>
</div>
<div class="identical-dates" cdkDropListGroup>
<div
class="time-list"
cdkDropList
[cdkDropListData]="timeList"
(cdkDropListDropped)="dropTimeItem($event)"
>
<div *ngFor="let time of timeList; index as time_id" class="time-choice movable" cdkDrag>
<div class="columns">
<div class="column">
<label class="button pull-left" [for]="'timeChoices_' + time_id">
<i class="icon fa fa-arrows-v" aria-hidden="true"></i>
</label>
<input
class="pull-left"
[(ngModel)]="time.literal"
name="timeChoices_{{ time_id }}"
type="text"
id="timeChoices_{{ time_id }}"
/>
<button (click)="timeList.splice(time_id, 1)" class="button is-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>
</div>
</div> </div>
</div> </div>
</div> </fieldset>
</div> </div>
</fieldset> </div>
<hr /> <hr />
<div class="main-box is-boxed"> <div class="main-box is-boxed">
<div class="columns"> <app-day-list
<div class="column"> [form]="form"
<!-- ajouter une date--> [dateList]="dateList"
<button class="btn btn--primary" (click)="addChoice()"> [hasSeveralHours]="form.value.hasSeveralHours"
{{ 'dates.add' | translate }} ></app-day-list>
</button>
</div>
<div class="column">
<span class="count-dates title">
{{ dateList.length }}
</span>
<span>
{{ 'dates.count_dates' | translate }}
</span>
</div>
</div>
<div
class="columns days-list"
cdkDropList
[cdkDropListData]="dateList"
(cdkDropListDropped)="dropDayItem($event)"
>
<div class="column">
<!-- TODO lier au formulaire les valeurs des dates-->
<h2>Dates</h2>
<div *ngFor="let choice of dateList; index as id" class="date-choice" cdkDrag>
<input
[(ngModel)]="choice.date_object"
name="dateChoices_{{ id }}"
id="dateChoices_{{ id }}"
useValueAsDate
type="date"
/>
<button (click)="dateList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
<button
(click)="addTimeToDate(choice, id)"
*ngIf="form.value.hasSeveralHours"
class="btn btn--primary"
>
{{ 'dates.add_time' | translate }}
</button>
<div *ngIf="form.value.hasSeveralHours" class="several-times">
plage horaire distincte
<br />
<div *ngFor="let timeItem of choice.timeList; index as idTime" class="time-choice">
<input
[(ngModel)]="timeItem.literal"
name="dateTime_{{ id }}_Choices_{{ idTime }}"
id="dateTime_{{ id }}_Choices_{{ idTime }}"
type="text"
/>
<button (click)="choice.timeList.splice(idTime, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>
</div>
</div>
</div>
<!-- date picker calendrier-->
<!-- <div class="column calendar-column">-->
<!-- <button class="btn" (click)="selectionKind = 'range'" [class.is-primary]="selectionKind == 'range'">-->
<!-- plage de jours-->
<!-- </button>-->
<!-- <button-->
<!-- class="btn"-->
<!-- (click)="selectionKind = 'multiple'"-->
<!-- [class.is-primary]="selectionKind == 'multiple'"-->
<!-- >-->
<!-- jours séparés-->
<!-- </button>-->
<!-- <button class="btn" (click)="setDefaultDatesForInterval()">-->
<!-- réinitialiser</button-->
<!-- ><button class="btn" (click)="dateCalendarEnum = [today]">-->
<!-- vider-->
<!-- </button>-->
<!-- <div class="text-center">-->
<!-- <br />-->
<!-- <p-calendar-->
<!-- [(ngModel)]="dateCalendarEnum"-->
<!-- [locale]="'calendar_widget' | translate"-->
<!-- [inline]="true"-->
<!-- [monthNavigator]="true"-->
<!-- [selectionMode]="selectionKind"-->
<!-- ></p-calendar>-->
<!-- </div>-->
<!-- </div>-->
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -24,18 +24,17 @@ import { StorageService } from '../../../../core/services/storage.service';
}) })
export class DateSelectComponent implements OnInit { export class DateSelectComponent implements OnInit {
@Input() @Input()
public form: FormGroup; form: FormGroup;
public showDateInterval = false; displaySeveralHoursChoice = false;
public allowSeveralHours = false; allowSeveralHours = false;
today = new Date(); today = new Date();
startDateInterval: string;
endDateInterval: string; endDateInterval: string;
intervalDays: any;
intervalDaysDefault = 7; intervalDaysDefault = 7;
dateList: DateChoice[]; // sets of days as strings, config to set identical time for days in a special days poll dateList: DateChoice[] = []; // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
timeList: TimeSlices[]; // ranges of time expressed as strings timeList: TimeSlices[] = []; // ranges of time expressed as strings
dateCalendarEnum: Date[] = [new Date('02/09/2021')];
selectionKind = 'range'; selectionKind = 'range';
constructor( constructor(
@ -44,7 +43,6 @@ export class DateSelectComponent implements OnInit {
private uuidService: UuidService, private uuidService: UuidService,
private toastService: ToastService, private toastService: ToastService,
private pollService: PollService, private pollService: PollService,
public dateUtilities: DateUtilitiesService,
private apiService: ApiService, private apiService: ApiService,
private storageService: StorageService, private storageService: StorageService,
private router: Router, private router: Router,
@ -55,80 +53,7 @@ export class DateSelectComponent implements OnInit {
this.timeList = this.storageService.timeSlices; this.timeList = this.storageService.timeSlices;
} }
get choices(): FormArray { ngOnInit(): void {}
return this.form.get('choices') as FormArray;
}
get dateChoices() {
return this.form.get('dateChoices') as FormArray;
}
ngOnInit(): void {
// this.setDefaultDatesForInterval();
}
/**
* default interval of dates proposed is from today to 7 days more
*/
setDefaultDatesForInterval(): void {
const dateCurrent = new Date();
const dateJson = dateCurrent.toISOString();
this.startDateInterval = dateJson.substring(0, 10);
this.endDateInterval = this.dateUtilities
.addDaysToDate(this.intervalDaysDefault, dateCurrent)
.toISOString()
.substring(0, 10);
this.form.patchValue({
startDateInterval: this.startDateInterval,
endDateInterval: this.endDateInterval,
});
this.dateCalendarEnum = [dateCurrent, this.dateUtilities.addDaysToDate(this.intervalDaysDefault, dateCurrent)];
this.countDays();
}
countDays(): void {
this.intervalDays = this.dateUtilities.countDays(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval)
);
// this.cd.detectChanges();
}
/**
* add all the dates between the start and end dates in the interval section
*/
addIntervalOfDates(): void {
const newIntervalArray = this.dateUtilities.getDatesInRange(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval),
1
);
const converted = [];
newIntervalArray.forEach((element) => {
converted.push({
literal: element.literal,
date_object: element.date_object,
timeList: [],
});
});
this.dateList = [...new Set(converted)];
// add only dates that are not already present with a Set of unique items
console.log('this.dateList', this.dateList);
this.showDateInterval = false;
this.form.patchValue({ choices: this.dateList });
// this.dateList.forEach(elem=>{
// const newControlGroup = this.fb.group({
// label: this.fb.control('', [Validators.required]),
// url: ['', [Validators.required]],
// });
//
// this.choices.push(newControlGroup);
// })
this.toastService.display(`les dates ont été ajoutées aux réponses possibles.`);
}
/** /**
* change time spans * change time spans
@ -141,145 +66,14 @@ export class DateSelectComponent implements OnInit {
removeAllTimes() { removeAllTimes() {
this.timeList = []; this.timeList = [];
this.dateList.map((elem) => (elem.timeList = []));
this.toastService.display('périodes horaires vidées'); this.toastService.display('périodes horaires vidées');
} }
resetTimes() { resetTimes() {
this.timeList = defaultTimeOfDay; this.timeList = defaultTimeOfDay;
this.dateList.map((elem) => (elem.timeList = Object.create(defaultTimeOfDay)));
this.toastService.display('périodes horaires réinitialisées'); this.toastService.display('périodes horaires réinitialisées');
} }
/**
* add a time period to a specific date choice,
* focus on the new input
* @param config
* @param id
*/
addTimeToDate(config: any, id: number) {
this.timeList.push({
literal: '',
});
const selector = '[ng-reflect-choice_label="dateTime_' + id + '_Choices_' + (this.timeList.length - 1) + '"]';
// this.cd.detectChanges();
const elem = this.document.querySelector(selector);
if (elem) {
elem.focus();
}
}
addChoice(optionalLabel = ''): void {
const newControlGroup = this.fb.group({
label: this.fb.control('', [Validators.required]),
imageUrl: ['', [Validators.required]],
});
if (optionalLabel) {
newControlGroup.patchValue({
label: optionalLabel,
imageUrl: 'mon url',
});
}
this.dateChoices.push(newControlGroup);
// this.cd.detectChanges();
console.log('this.choices.length', this.choices.length);
this.focusOnChoice(this.choices.length - 1);
}
focusOnChoice(index): void {
const selector = '#choice_label_' + index;
const elem = this.document.querySelector(selector);
if (elem) {
elem.focus();
}
}
deleteChoiceField(index: number): void {
if (this.choices.length !== 1) {
this.choices.removeAt(index);
}
}
reinitChoices(): void {
this.choices.setValue([]);
}
/**
* handle keyboard shortcuts
* @param $event
* @param choice_number
*/
keyOnChoice($event: KeyboardEvent, choice_number: number): void {
$event.preventDefault();
console.log('this.choices.length', this.choices.length);
console.log('choice_number', choice_number);
const lastChoice = this.choices.length - 1 === choice_number;
// TODO handle shortcuts
// reset field with Ctrl + D
// add a field with Ctrl + N
// go to previous choice with arrow up
// go to next choice with arrow down
console.log('$event', $event);
if ($event.key == 'ArrowUp' && choice_number > 0) {
this.focusOnChoice(choice_number - 1);
}
if ($event.key == 'ArrowDown') {
// add a field if we are on the last choice
if (lastChoice) {
this.addChoice();
this.toastService.display('choix ajouté par raccourci "flèche bas"');
} else {
this.focusOnChoice(choice_number + 1);
}
}
if ($event.ctrlKey && $event.key == 'Backspace') {
this.deleteChoiceField(choice_number);
this.toastService.display('choix supprimé par raccourci "Ctrl + retour"');
// this.cd.detectChanges();
this.focusOnChoice(Math.min(choice_number - 1, 0));
}
if ($event.ctrlKey && $event.key == 'Enter') {
// go to other fields
const elem = this.document.querySelector('#creatorEmail');
if (elem) {
elem.focus();
}
}
}
setDemoValues(): void {
this.addChoice('orange');
this.addChoice('raisin');
this.addChoice('abricot');
}
dropTimeItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
dropDayItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
} }

View File

@ -0,0 +1,43 @@
<div class="interval" [formGroup]="form">
<button
(click)="showDateInterval = !showDateInterval"
[ngClass]="{ active: showDateInterval }"
class="btn btn--primary"
id="toggle_interval_button"
>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<span>
{{ 'dates.add_interval' | translate }}
</span>
</button>
<fieldset *ngIf="showDateInterval" class="date-interval form-row is-boxed">
<div class="columns">
<div class="column">
{{ 'dates.interval_propose' | translate }}
</div>
<div class="column">
<label for="start_interval" class="hidden">start</label>
<input id="start_interval" (change)="countDays()" formControlName="startDateInterval" type="date" />
</div>
</div>
<div class="columns">
<div class="column">
{{ 'dates.interval_span' | translate }}
</div>
<div class="column">
<label for="end_interval" class="hidden">end</label>
<input id="end_interval" formControlName="endDateInterval" type="date" />
<div class="well">
{{ form.value.endDateInterval }}
</div>
</div>
</div>
<div class="span resume">soit {{ intervalDays }} jours.</div>
<button (click)="addIntervalOfDates()" class="btn btn-block btn--primary">
<i class="fa fa-plus" aria-hidden="true"></i>
{{ 'dates.interval_button' | translate }}
{{ intervalDays }}
{{ 'dates.interval_button_dates' | translate }}
</button>
</fieldset>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IntervalComponent } from './interval.component';
describe('IntervalComponent', () => {
let component: IntervalComponent;
let fixture: ComponentFixture<IntervalComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [IntervalComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(IntervalComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,93 @@
import { Component, Input, OnInit } from '@angular/core';
import { environment } from '../../../../../../environments/environment';
import { DateUtilitiesService } from '../../../../../core/services/date.utilities.service';
import { FormArray, FormGroup } from '@angular/forms';
import { ToastService } from '../../../../../core/services/toast.service';
import { DateChoice } from '../../../../../../../mocks/old-stuff/config/defaultConfigs';
@Component({
selector: 'app-date-interval',
templateUrl: './interval.component.html',
styleUrls: ['./interval.component.scss'],
})
export class IntervalComponent implements OnInit {
@Input()
public form: FormGroup;
showDateInterval = true;
intervalDays: any;
intervalDaysDefault = environment.interval_days_default;
startDateInterval: Date;
startDateIntervalString: string;
endDateInterval: Date;
endDateIntervalString: string;
dateList: DateChoice[]; // sets of dateList as strings, config to set identical time for dateList in a special dateList poll
dateCalendarEnum: Date[] = [new Date('02/09/2021')];
constructor(public dateUtilities: DateUtilitiesService, private toastService: ToastService) {}
ngOnInit(): void {
this.setDefaultDatesForInterval();
}
countDays(): void {
this.intervalDays = this.dateUtilities.countDays(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval)
);
// this.cd.detectChanges();
}
/**
* add all the dates between the start and end dates in the interval section
*/
addIntervalOfDates(): void {
const newIntervalArray = this.dateUtilities.getDatesInRange(
this.dateUtilities.parseInputDateToDateObject(this.startDateInterval),
this.dateUtilities.parseInputDateToDateObject(this.endDateInterval),
1
);
const converted = [];
newIntervalArray.forEach((element) => {
converted.push({
literal: element.literal,
date_object: element.date_object,
timeList: [],
});
});
this.dateList = [...new Set(converted)];
// add only dates that are not already present with a Set of unique items
console.log('this.dateList', this.dateList);
this.showDateInterval = false;
this.form.patchValue({ choices: this.dateList });
this.toastService.display(`les dates ont été ajoutées aux réponses possibles.`);
}
get dateChoices() {
return this.form.get('dateChoices') as FormArray;
}
/**
* default interval of dates proposed is from today to 7 dateList more
*/
setDefaultDatesForInterval(): void {
if (this.form) {
const dateCurrent = new Date();
// const dateJson = dateCurrent.toISOString();
this.startDateInterval = dateCurrent;
this.endDateInterval = this.dateUtilities.addDaysToDate(this.intervalDaysDefault, dateCurrent);
this.form.patchValue({
startDateInterval: this.startDateInterval,
endDateInterval: this.endDateInterval,
});
this.dateCalendarEnum = [
dateCurrent,
this.dateUtilities.addDaysToDate(this.intervalDaysDefault, dateCurrent),
];
this.countDays();
}
}
}

View File

@ -0,0 +1,120 @@
<div class="day-list-container">
<div class="columns">
<div class="column">
<!-- ajouter une date-->
<button class="btn btn--primary" (click)="addChoice()">
{{ 'dates.add' | translate }}
</button>
</div>
<div class="column">
<span class="count-dates title">
{{ dateList.length }}
</span>
<span>
{{ 'dates.count_dates' | translate }}
</span>
</div>
</div>
<div class="columns days-list" cdkDropList [cdkDropListData]="dateList" (cdkDropListDropped)="dropDayItem($event)">
<div class="column">
<h2>Dates</h2>
<button class="btn button-help" (click)="openKeyboardShortcutsModal()">
💁 Raccourcis
</button>
<br />
<br />
<div *ngFor="let choice of dateList; index as id" class="date-choice" cdkDrag>
<input
[(ngModel)]="choice.date_object"
(keyup)="keyOnChoice($event, id)"
name="dateChoices_{{ id }}"
id="dateChoices_{{ id }}"
useValueAsDate
type="date"
/>
<button (click)="dateList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
<button (click)="addTimeToDate(choice, id)" *ngIf="hasSeveralHours" class="btn btn--primary">
{{ 'dates.add_time' | translate }}
</button>
<div *ngIf="hasSeveralHours" class="several-times">
plage horaire distincte
<br />
<app-time-list [timeSlices]="choice.timeList"></app-time-list>
</div>
</div>
</div>
</div>
<p-dialog class="url-dialog" [(visible)]="display" [modal]="true" [closable]="true">
<p-header>
💁 Aide, Raccourcis clavier
<button class="btn button-help pull-right" (click)="display = false">
<i class="fa fa-times"></i>
</button>
</p-header>
Vous pouvez naviguer d'un champ de date à un autre avec les flèches du clavier.
<app-wip-todo></app-wip-todo>
<br />
<br />
<table>
<thead>
<tr>
<th>
Fonction
</th>
<th>
Raccourci
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
Créer un nouveau choix
</td>
<td>
Ctrl + N
</td>
</tr>
<tr>
<td>
Naviguer vers le champ suivant. Créée un nouveau champ si effectué sur le dernier champ.
</td>
<td>
Ctrl + flèche bas
</td>
</tr>
<tr>
<td>
réinitialiser le champ actuel
</td>
<td>
Ctrl + effacer
<br />
ou
<br />
Ctrl + supprimer
</td>
</tr>
<tr>
<td>
Alterner entre un sondage de type Date et un sondage texte
</td>
<td>
Alt + D
</td>
</tr>
<td>
Tout envoyer
</td>
<td>
Ctrl + entrée
</td>
</tbody>
</table>
</p-dialog>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DayListComponent } from './day-list.component';
describe('ListComponent', () => {
let component: DayListComponent;
let fixture: ComponentFixture<DayListComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [DayListComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DayListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,149 @@
import { Component, Inject, Input, OnInit } from '@angular/core';
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
import { DateChoice } from '../../../../../../../../mocks/old-stuff/config/defaultConfigs';
import { DOCUMENT } from '@angular/common';
import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { LocalStorageService } from 'ngx-webstorage';
import { ToastService } from '../../../../../../core/services/toast.service';
import { StorageService } from '../../../../../../core/services/storage.service';
@Component({
selector: 'app-day-list',
templateUrl: './day-list.component.html',
styleUrls: ['./day-list.component.scss'],
})
export class DayListComponent {
@Input()
form: FormGroup;
@Input()
public dateList: Array<any> = [];
@Input()
public hasSeveralHours: boolean;
timeList: any;
display = false;
constructor(
private toastService: ToastService,
@Inject(DOCUMENT) private document: any,
private storageService: StorageService
) {
this.setDemoValues();
}
reinitChoices(): void {
this.dateList = [];
}
setDemoValues(): void {
this.addChoice('orange');
this.addChoice('raisin');
this.addChoice('abricot');
}
dropDayItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
/**
* add a time period to a specific date choice,
* focus on the new input
* @param config
* @param id
*/
addTimeToDate(config: any, id: number) {
this.timeList.push({
literal: '',
});
const selector = '[ng-reflect-choice_label="dateTime_' + id + '_ dateList_' + (this.timeList.length - 1) + '"]';
// this.cd.detectChanges();
const elem = this.document.querySelector(selector);
if (elem) {
elem.focus();
}
}
/**
* handle keyboard shortcuts
* @param $event
* @param choice_number
*/
keyOnChoice($event: KeyboardEvent, choice_number: number): void {
$event.preventDefault();
console.log('this. dateList.length', this.dateList.length);
console.log('choice_number', choice_number);
const lastChoice = this.dateList.length - 1 === choice_number;
// TODO handle shortcuts
// reset field with Ctrl + D
// add a field with Ctrl + N
// go to previous choice with arrow up
// go to next choice with arrow down
console.log('$event', $event);
if ($event.ctrlKey && $event.key == 'ArrowUp' && choice_number > 0) {
this.focusOnChoice(choice_number - 1);
}
if ($event.ctrlKey && ($event.key == 'ArrowDown' || $event.key == 'ArrowRight')) {
// add a field if we are on the last choice
if (lastChoice) {
this.addChoice();
this.toastService.display('choix ajouté par raccourci "flèche bas"');
} else {
this.focusOnChoice(choice_number + 1);
}
}
if ($event.ctrlKey && $event.key == 'Backspace') {
this.deleteChoiceField(choice_number);
this.toastService.display('choix supprimé par raccourci "Ctrl + retour"');
// this.cd.detectChanges();
this.focusOnChoice(Math.min(choice_number - 1, 0));
}
if ($event.ctrlKey && $event.key == 'Enter') {
// go to other fields
const elem = this.document.querySelector('#creatorEmail');
if (elem) {
elem.focus();
}
}
}
addChoice(optionalLabel = ''): void {
this.storageService.dateList.push({
literal: '',
timeList: [],
date_object: new Date(),
});
// this.cd.detectChanges();
console.log('this.choices.length', this.storageService.dateList.length);
this.focusOnChoice(this.storageService.dateList.length - 1);
}
focusOnChoice(index): void {
const selector = '#choice_label_' + index;
const elem = this.document.querySelector(selector);
if (elem) {
elem.focus();
}
}
deleteChoiceField(index: number): void {
if (this.dateList.length !== 1) {
this.dateList.splice(index, 1);
}
}
openKeyboardShortcutsModal() {
this.display = true;
}
}

View File

@ -0,0 +1,10 @@
<p>time-list works!</p>
<div *ngFor="let time of timeList; index as id" class="time-choice">
<label for="timeChoices_{{ id }}">
<i class="fa fa-clock-o" aria-hidden="true"></i>
</label>
<input [(ngModel)]="time.literal" name="timeChoices_{{ id }}" type="text" id="timeChoices_{{ id }}" />
<button (click)="time.timeList.splice(id, 1)" class="btn btn-warning">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TimeListComponent } from './time-list.component';
describe('TimeListComponent', () => {
let component: TimeListComponent;
let fixture: ComponentFixture<TimeListComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [TimeListComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TimeListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,31 @@
import { Component, Input, OnInit } from '@angular/core';
import { TimeSlices } from '../../../../../../../../mocks/old-stuff/config/defaultConfigs';
import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
@Component({
selector: 'app-time-list',
templateUrl: './time-list.component.html',
styleUrls: ['./time-list.component.scss'],
})
export class TimeListComponent implements OnInit {
@Input()
public timeSlices: TimeSlices[];
timeList: any;
constructor() {}
ngOnInit(): void {}
dropTimeItem(event: any): void {
// moveItemInArray(this.timeSlices, event.previousIndex, event.currentIndex);
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}
}

View File

@ -0,0 +1,28 @@
<!-- date picker calendrier-->
<div class="picker" [formGroup]="form">
<div class="column calendar-column">
<button class="btn" (click)="selectionKind = 'range'" [class.is-primary]="selectionKind == 'range'">
plage de jours
</button>
<button class="btn" (click)="selectionKind = 'multiple'" [class.is-primary]="selectionKind == 'multiple'">
jours séparés
</button>
<button class="btn" (click)="setDefaultDatesForInterval()">
réinitialiser
</button>
<button class="btn" (click)="dateCalendarEnum = [today]">
vider
</button>
<div class="text-center">
<br />
<p-calendar
[(ngModel)]="dateCalendarEnum"
[locale]="'calendar_widget' | translate"
[inline]="true"
[monthNavigator]="true"
[selectionMode]="selectionKind"
></p-calendar>
</div>
</div>
</div>

View File

@ -0,0 +1,24 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PickerComponent } from './picker.component';
describe('PickerComponent', () => {
let component: PickerComponent;
let fixture: ComponentFixture<PickerComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [PickerComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PickerComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,21 @@
import { Component, Input, OnInit } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'app-picker',
templateUrl: './picker.component.html',
styleUrls: ['./picker.component.scss'],
})
export class PickerComponent implements OnInit {
@Input()
public form: FormGroup;
selectionKind = 'multiple';
dateCalendarEnum: any[];
today: Date = new Date();
constructor() {}
ngOnInit(): void {}
setDefaultDatesForInterval() {}
}

View File

@ -1,7 +1,6 @@
<div class="admin-form padded"> <div class="admin-form padded">
<div class="container is-max-widescreen"> <div class="container is-max-widescreen">
<form [formGroup]="form"> <form [formGroup]="form">
<app-errors-list [form]="form"></app-errors-list>
<header class="columns"> <header class="columns">
<div class="column"> <div class="column">
<h1 class="title is-2"> <h1 class="title is-2">
@ -40,27 +39,28 @@
*ngIf="advancedDisplayEnabled" *ngIf="advancedDisplayEnabled"
></app-advanced-config> ></app-advanced-config>
<div class="bar-nav-admin"> <!-- <div class="bar-nav-admin">-->
<div class="columns"> <!-- <div class="columns">-->
<div class="column"> <!-- <div class="column">-->
<p class="control"> <!-- <p class="control">-->
<a class="button is-light" (click)="goPreviousStep()"> <!-- <a class="button is-light" (click)="goPreviousStep()">-->
Précédent <!-- Précédent-->
</a> <!-- </a>-->
</p> <!-- </p>-->
</div> <!-- </div>-->
<div class="column"> <!-- <div class="column">-->
<p class="control text-right"> <!-- <p class="control text-right">-->
<a class="button is-primary" (click)="goNextStep()"> <!-- <a class="button is-primary" (click)="goNextStep()">-->
Suivant <!-- Suivant-->
</a> <!-- </a>-->
</p> <!-- </p>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> <!-- </div>-->
</div> </div>
</main> </main>
<app-picker [form]="form" *ngIf="displayDatePicker"></app-picker>
<app-errors-list [form]="form"></app-errors-list>
<p> <p>
<i> <i>
{{ 'choices.helper' | translate }} {{ 'choices.helper' | translate }}
@ -108,6 +108,4 @@
</div> </div>
</form> </form>
</div> </div>
<!-- <app-success [poll]="poll"></app-success>-->
</div> </div>

View File

@ -9,7 +9,6 @@ import { Router } from '@angular/router';
import { environment } from '../../../../environments/environment'; import { environment } from '../../../../environments/environment';
import { PollUtilitiesService } from '../../../core/services/poll.utilities.service'; import { PollUtilitiesService } from '../../../core/services/poll.utilities.service';
import { StorageService } from '../../../core/services/storage.service'; import { StorageService } from '../../../core/services/storage.service';
import { defaultDates, defaultTimeOfDay } from '../../../../../mocks/old-stuff/config/defaultConfigs';
@Component({ @Component({
selector: 'app-admin-form', selector: 'app-admin-form',
@ -21,7 +20,8 @@ export class FormComponent implements OnInit {
public poll?: Poll; public poll?: Poll;
public form: FormGroup; public form: FormGroup;
public advancedDisplayEnabled = true; public displayDatePicker = false;
public advancedDisplayEnabled = false;
public show_debug_data = false; public show_debug_data = false;
public currentStep = 'base'; public currentStep = 'base';
public steps = ['base', 'choices', 'advanced']; public steps = ['base', 'choices', 'advanced'];
@ -101,6 +101,10 @@ export class FormComponent implements OnInit {
}); });
console.log('this.form ', this.form); console.log('this.form ', this.form);
// take back values from pollservice
this.form.patchValue(this.pollService.poll);
this.form.patchValue({ creatorPseudo: 'Chuck Norris', creatorEmail: 'chucknorris@example.com' });
if (showDemoValues) { if (showDemoValues) {
this.setDemoValues(); this.setDemoValues();
this.toastService.display('default values filled for demo'); this.toastService.display('default values filled for demo');
@ -116,6 +120,10 @@ export class FormComponent implements OnInit {
*/ */
setDemoValues(): void { setDemoValues(): void {
const title = 'le titre de démo oh oh ' + new Date().getTime(); const title = 'le titre de démo oh oh ' + new Date().getTime();
// this.form.patchValue(this.pollService.poll);
// this.form.patchValue({ creatorPseudo: 'Chuck Norris', creatorEmail: 'chucknorris@example.com' });
this.form.patchValue({ this.form.patchValue({
title: title, title: title,
custom_url: this.pollUtilitiesService.makeSlugFromString(title), custom_url: this.pollUtilitiesService.makeSlugFromString(title),
@ -142,14 +150,6 @@ export class FormComponent implements OnInit {
startDateInterval: new Date(), startDateInterval: new Date(),
endDateInterval: new Date(), endDateInterval: new Date(),
comments: [], comments: [],
// choices: [
// {
// name: 'un choix',
// url: 'https://placekitten.com/120/150',
// },
// ],
// dateChoices: defaultDates,
// timeChoices: defaultTimeOfDay,
}); });
} }

View File

@ -17,7 +17,6 @@ export class LanguageSelectorComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.availableLanguages = this.languageService.getAvailableLanguages(); this.availableLanguages = this.languageService.getAvailableLanguages();
console.log('this.availableLanguages', this.availableLanguages);
this.currentLang = this.languageService.getLangage(); this.currentLang = this.languageService.getLangage();
this.nextLang(); this.nextLang();
@ -29,10 +28,6 @@ export class LanguageSelectorComponent implements OnInit {
nextLang(): void { nextLang(): void {
console.log('this.currentLang ', this.currentLang); console.log('this.currentLang ', this.currentLang);
console.log('this.storageService.language ', this.storageService.language);
console.log("this.availableLanguages['FR']", this.availableLanguages['FR']);
console.log('this.availableLanguages', this.availableLanguages);
console.log('TODO'); console.log('TODO');
} }
} }

View File

@ -82,7 +82,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"eo diazezet Framadate. Ur meziant diorroet gant Skol-Veur Straßburg an hini " "eo diazezet Framadate. Ur meziant diorroet gant Skol-Veur Straßburg an hini "
@ -916,7 +916,7 @@ msgid "Your name"
msgstr "Hoc'h anv" msgstr "Hoc'h anv"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "a zevezhioù" msgstr "a zevezhioù"
#: .Generic.for #: .Generic.for
@ -1632,7 +1632,7 @@ msgid "Remove a time slot"
msgstr "Dileml an eur diwezhañ" msgstr "Dileml an eur diwezhañ"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Dilemel an holl zevezhioù" msgstr "Dilemel an holl zevezhioù"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1647,13 +1647,13 @@ msgstr "Dilemel an devezh-mañ"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Evit krouiñ ur sontadeg deiziadoù eo ret deoc'h kinnig daou zibab d'an " "Evit krouiñ ur sontadeg deiziadoù eo ret deoc'h kinnig daou zibab d'an "
"nebeutañ (div eur evit an hevelep devezh pe daou zevezh)." "nebeutañ (div eur evit an hevelep devezh pe daou zevezh)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Gallout a rit ouzhpennañ pe dilemel devezhioù hag eurioù ouzhpenn gant an " "Gallout a rit ouzhpennañ pe dilemel devezhioù hag eurioù ouzhpenn gant an "
"afelloù" "afelloù"
@ -1711,7 +1711,7 @@ msgid "Your poll will automatically be archived"
msgstr "Diellaouet e vo ho sontadeg ent emgefreek" msgstr "Diellaouet e vo ho sontadeg ent emgefreek"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Diellaouet e vo ho sontadeg a-benn %d a zevezhioù ent emgefreek." msgstr "Diellaouet e vo ho sontadeg a-benn %d a zevezhioù ent emgefreek."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -84,7 +84,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"programari desenvolupat per la Universitat d'Estrasburg. Actualment " "programari desenvolupat per la Universitat d'Estrasburg. Actualment "
@ -933,7 +933,7 @@ msgid "Your name"
msgstr "El vostre nom" msgstr "El vostre nom"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "dies" msgstr "dies"
#: .Generic.for #: .Generic.for
@ -1650,7 +1650,7 @@ msgid "Remove a time slot"
msgstr "Elimina un espai horari" msgstr "Elimina un espai horari"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Elimina tots els dies" msgstr "Elimina tots els dies"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1665,13 +1665,13 @@ msgstr "Elimina aquest dia"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Per a programar un esdeveniment, cal que proporcioneu almenys dues opcions (" "Per a programar un esdeveniment, cal que proporcioneu almenys dues opcions ("
"per exemple, dos espais horaris en un o dos dies)." "per exemple, dos espais horaris en un o dos dies)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Podeu afegir o treure dies i hores addicionals amb els botons" msgstr "Podeu afegir o treure dies i hores addicionals amb els botons"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1727,7 +1727,7 @@ msgid "Your poll will automatically be archived"
msgstr "L'enquesta s'arxivarà automàticament" msgstr "L'enquesta s'arxivarà automàticament"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "L'enquesta s'arxivarà automàticament d'aquí a %d dies." msgstr "L'enquesta s'arxivarà automàticament d'aquí a %d dies."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -85,7 +85,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
", einer von der Universität von Straßburg entwickelten Software. Heute wird " ", einer von der Universität von Straßburg entwickelten Software. Heute wird "
@ -942,7 +942,7 @@ msgid "Your name"
msgstr "Ihr Name" msgstr "Ihr Name"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "Tage" msgstr "Tage"
#: .Generic.for #: .Generic.for
@ -1662,7 +1662,7 @@ msgid "Remove a time slot"
msgstr "Eine Uhrzeit entfernen" msgstr "Eine Uhrzeit entfernen"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Alle Tage entfernen" msgstr "Alle Tage entfernen"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1677,14 +1677,14 @@ msgstr "Diesen Tag entfernen"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Um eine Terminabsprache zu konfigurieren, müssen Sie mindestens zwei " "Um eine Terminabsprache zu konfigurieren, müssen Sie mindestens zwei "
"alternative Zeitpunkte vorschlagen (zwei Uhrzeiten am gleichen Tag oder " "alternative Zeitpunkte vorschlagen (zwei Uhrzeiten am gleichen Tag oder "
"verschiedene Tage)." "verschiedene Tage)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Sie können weitere Tage und Uhrzeiten über die Buttons hinzufügen oder " "Sie können weitere Tage und Uhrzeiten über die Buttons hinzufügen oder "
"entfernen" "entfernen"
@ -1742,7 +1742,7 @@ msgid "Your poll will automatically be archived"
msgstr "Ihre Umfrage wird automatisch archiviert" msgstr "Ihre Umfrage wird automatisch archiviert"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Ihre Umfrage wird automatisch in %d Tagen archiviert werden." msgstr "Ihre Umfrage wird automatisch in %d Tagen archiviert werden."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -83,7 +83,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"λογισμικό αναπτυγμένο από το Πανεπιστήμιο του Στρασβούργου. Σήμερα, " "λογισμικό αναπτυγμένο από το Πανεπιστήμιο του Στρασβούργου. Σήμερα, "
@ -926,7 +926,7 @@ msgid "Your name"
msgstr "Το όνομά σας" msgstr "Το όνομά σας"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "ημέρες" msgstr "ημέρες"
#: .Generic.for #: .Generic.for
@ -1640,7 +1640,7 @@ msgid "Remove a time slot"
msgstr "Αφαίρεση ενός πεδίου ώρας" msgstr "Αφαίρεση ενός πεδίου ώρας"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Αφαίρεση όλων των ημερών" msgstr "Αφαίρεση όλων των ημερών"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1654,13 +1654,13 @@ msgstr "Αφαίρεση αυτής της ημέρας"
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Για τον προγραμματισμό μιας δραστηριότητας πρέπει να παρέχετε τουλάχιστον " "Για τον προγραμματισμό μιας δραστηριότητας πρέπει να παρέχετε τουλάχιστον "
"δύο επιλογές (π.χ, δύο πεδία ώρας σε μία ημέρα, ή δύο ημέρες)." "δύο επιλογές (π.χ, δύο πεδία ώρας σε μία ημέρα, ή δύο ημέρες)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Μπορείτε να προσθέσετε ή να αφαιρέσετε ημέρες και ώρες με τα κουμπιά" msgstr "Μπορείτε να προσθέσετε ή να αφαιρέσετε ημέρες και ώρες με τα κουμπιά"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1714,7 +1714,7 @@ msgid "Your poll will automatically be archived"
msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα" msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα σε %d ημέρες." msgstr "Η ψηφοφορία σας θα αρχειοθετηθεί αυτόματα σε %d ημέρες."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -84,10 +84,10 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
#: .3rd+section.Grow+your+own #: .3rd+section.Grow+your+own
@ -931,8 +931,8 @@ msgid "Your name"
msgstr "Your name" msgstr "Your name"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "days" msgstr "dateList"
#: .Generic.for #: .Generic.for
msgid "for" msgid "for"
@ -1635,8 +1635,8 @@ msgid "Remove a time slot"
msgstr "Remove a time slot" msgstr "Remove a time slot"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Remove all days" msgstr "Remove all dateList"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
msgid "Remove all times" msgid "Remove all times"
@ -1650,14 +1650,14 @@ msgstr "Remove this day"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "You can add or remove additional days and times with the buttons" msgstr "You can add or remove additional dateList and times with the buttons"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
msgid "Back to step 2" msgid "Back to step 2"
@ -1712,8 +1712,8 @@ msgid "Your poll will automatically be archived"
msgstr "Your poll will automatically be archived" msgstr "Your poll will automatically be archived"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Your poll will be automatically archived in %d days." msgstr "Your poll will be automatically archived in %d dateList."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.
msgid "after the last date of your poll." msgid "after the last date of your poll."

View File

@ -88,7 +88,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un software desarrollado por la Universidad de Estrasburgo. Ahora, su " "un software desarrollado por la Universidad de Estrasburgo. Ahora, su "
@ -945,7 +945,7 @@ msgid "Your name"
msgstr "Su nombre" msgstr "Su nombre"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "días" msgstr "días"
#: .Generic.for #: .Generic.for
@ -1664,7 +1664,7 @@ msgid "Remove a time slot"
msgstr "Eliminar una franja horaria" msgstr "Eliminar una franja horaria"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Borrar todos los días" msgstr "Borrar todos los días"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1679,13 +1679,13 @@ msgstr "Eliminar este dia"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Para programar un evento, tiene que proponer por lo menos dos opciones (dos " "Para programar un evento, tiene que proponer por lo menos dos opciones (dos "
"horarios para un día, o dos días)." "horarios para un día, o dos días)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Puede agregar o borrar días y horarios con los botones" msgstr "Puede agregar o borrar días y horarios con los botones"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1741,7 +1741,7 @@ msgid "Your poll will automatically be archived"
msgstr "Su encuesta estará archivada de manera automática" msgstr "Su encuesta estará archivada de manera automática"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Su encuesta estará archivada de manera automática en %d días." msgstr "Su encuesta estará archivada de manera automática en %d días."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -87,7 +87,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un logiciel développé par l'Université de Strasbourg. Aujourd'hui, son " "un logiciel développé par l'Université de Strasbourg. Aujourd'hui, son "
@ -949,7 +949,7 @@ msgid "Your name"
msgstr "Votre nom" msgstr "Votre nom"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "jours" msgstr "jours"
#: .Generic.for #: .Generic.for
@ -1675,7 +1675,7 @@ msgid "Remove a time slot"
msgstr "Supprimer le dernier horaire" msgstr "Supprimer le dernier horaire"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Effacer tous les jours" msgstr "Effacer tous les jours"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1690,13 +1690,13 @@ msgstr "Supprimer ce jour"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Pour créer un sondage spécial dates vous devez proposer au moins deux choix " "Pour créer un sondage spécial dates vous devez proposer au moins deux choix "
"(deux horaires pour une même journée ou deux jours)." "(deux horaires pour une même journée ou deux jours)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Vous pouvez ajouter ou supprimer des jours et horaires supplémentaires avec " "Vous pouvez ajouter ou supprimer des jours et horaires supplémentaires avec "
"les boutons" "les boutons"
@ -1754,7 +1754,7 @@ msgid "Your poll will automatically be archived"
msgstr "Votre sondage sera automatiquement archivé" msgstr "Votre sondage sera automatiquement archivé"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Votre sondage sera automatiquement archivé dans %d jours." msgstr "Votre sondage sera automatiquement archivé dans %d jours."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -75,7 +75,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
@ -861,7 +861,7 @@ msgid "Your name"
msgstr "" msgstr ""
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "" msgstr ""
#: .Generic.for #: .Generic.for
@ -1538,7 +1538,7 @@ msgid "Remove a time slot"
msgstr "" msgstr ""
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "" msgstr ""
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1552,11 +1552,11 @@ msgstr ""
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1605,7 +1605,7 @@ msgid "Your poll will automatically be archived"
msgstr "" msgstr ""
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "" msgstr ""
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -81,7 +81,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un software desenvolvido pola Universidade de Estrasburgo. Agora, o seu " "un software desenvolvido pola Universidade de Estrasburgo. Agora, o seu "
@ -918,7 +918,7 @@ msgid "Your name"
msgstr "Seu nome" msgstr "Seu nome"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "días" msgstr "días"
#: .Generic.for #: .Generic.for
@ -1618,7 +1618,7 @@ msgid "Remove a time slot"
msgstr "Borrar unha hora" msgstr "Borrar unha hora"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Borrar todos os días" msgstr "Borrar todos os días"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1632,13 +1632,13 @@ msgstr "Borrar este día"
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Para programar unha enquisa, precisa fornecer polo menos dúas opcións (por " "Para programar unha enquisa, precisa fornecer polo menos dúas opcións (por "
"exemplo, dúas horas nun día ou dous días)." "exemplo, dúas horas nun día ou dous días)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Cos botóns pode engadir ou borrar días e horas adicionais" msgstr "Cos botóns pode engadir ou borrar días e horas adicionais"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1692,7 +1692,7 @@ msgid "Your poll will automatically be archived"
msgstr "A súa enquisa será arquivada de xeito automático" msgstr "A súa enquisa será arquivada de xeito automático"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "A súa enquisa será arquivada de xeito automático en %d días." msgstr "A súa enquisa será arquivada de xeito automático en %d días."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -83,7 +83,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"szoftveren alapul, melyet a Strasbourg-i Egyetem fejlesztett. Manapság a " "szoftveren alapul, melyet a Strasbourg-i Egyetem fejlesztett. Manapság a "
@ -926,7 +926,7 @@ msgid "Your name"
msgstr "Neve" msgstr "Neve"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "nap" msgstr "nap"
#: .Generic.for #: .Generic.for
@ -1636,7 +1636,7 @@ msgid "Remove a time slot"
msgstr "Idősáv eltávolítása" msgstr "Idősáv eltávolítása"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Összes nap eltávolítása" msgstr "Összes nap eltávolítása"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1651,13 +1651,13 @@ msgstr "Nap eltávolítása"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Egy esemény ütemezéséhez legalább két lehetőséget kell megadni (azaz két " "Egy esemény ütemezéséhez legalább két lehetőséget kell megadni (azaz két "
"idősávot egy nap, vagy két napot)." "idősávot egy nap, vagy két napot)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "A gombokkal további napokat és idősávokat adhat hozzá" msgstr "A gombokkal további napokat és idősávokat adhat hozzá"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1713,7 +1713,7 @@ msgid "Your poll will automatically be archived"
msgstr "A szavazása automatikusan archiválva lesz" msgstr "A szavazása automatikusan archiválva lesz"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "A szavazása %d nap után automatikusan archiválva lesz." msgstr "A szavazása %d nap után automatikusan archiválva lesz."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -87,7 +87,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un software sviluppato dall'Università di Strasburgo. Oggi il suo sviluppo è " "un software sviluppato dall'Università di Strasburgo. Oggi il suo sviluppo è "
@ -941,7 +941,7 @@ msgid "Your name"
msgstr "Il tuo nome" msgstr "Il tuo nome"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "giorni" msgstr "giorni"
#: .Generic.for #: .Generic.for
@ -1653,7 +1653,7 @@ msgid "Remove a time slot"
msgstr "Eliminare l'ultimo orario" msgstr "Eliminare l'ultimo orario"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Cancellare tutti i giorni" msgstr "Cancellare tutti i giorni"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1668,13 +1668,13 @@ msgstr "Eliminare questo giorno"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Per creare un evento, è meglio proporre almeno 2 scelte (2 orari per lo " "Per creare un evento, è meglio proporre almeno 2 scelte (2 orari per lo "
"stesso giorno o 2 giorni)." "stesso giorno o 2 giorni)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Puoi aggiungere o eliminare dei giorni et orari ulteriori con i pulsanti" "Puoi aggiungere o eliminare dei giorni et orari ulteriori con i pulsanti"
@ -1731,7 +1731,7 @@ msgid "Your poll will automatically be archived"
msgstr "Il tuo sondaggio sarà archiviato automaticamente" msgstr "Il tuo sondaggio sarà archiviato automaticamente"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Il tuo sondaggio verrà archiviata automaticamente in %d giorni." msgstr "Il tuo sondaggio verrà archiviata automaticamente in %d giorni."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -82,7 +82,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"software ontwikkeld door de Universiteit van Straatsburg. Het wordt " "software ontwikkeld door de Universiteit van Straatsburg. Het wordt "
@ -922,7 +922,7 @@ msgid "Your name"
msgstr "Je naam" msgstr "Je naam"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "dagen" msgstr "dagen"
#: .Generic.for #: .Generic.for
@ -1628,7 +1628,7 @@ msgid "Remove a time slot"
msgstr "Verwijder een tijd" msgstr "Verwijder een tijd"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Verwijder alle dagen" msgstr "Verwijder alle dagen"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1643,13 +1643,13 @@ msgstr "Verwijder deze dag"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Om een datum te prikken, moet je tenminste twee keuzes geven. (Bijvoorbeeld " "Om een datum te prikken, moet je tenminste twee keuzes geven. (Bijvoorbeeld "
"twee tijden op één dag of twee verschillende dagen)." "twee tijden op één dag of twee verschillende dagen)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Je kan extra dagen of tijden toevoegen en verwijderen met deze knoppen" msgstr "Je kan extra dagen of tijden toevoegen en verwijderen met deze knoppen"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1704,7 +1704,7 @@ msgid "Your poll will automatically be archived"
msgstr "Je poll wordt automatisch gearchiveerd" msgstr "Je poll wordt automatisch gearchiveerd"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Je poll wordt over %d dagen automatisch gearchiveerd." msgstr "Je poll wordt over %d dagen automatisch gearchiveerd."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -87,7 +87,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days
#: +it+is+developed+by+the+Framasoft+association. #: +it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"un logicial desvolopat per lUniversitat dEstrasborg. Uèi son desvolopament " "un logicial desvolopat per lUniversitat dEstrasborg. Uèi son desvolopament "
@ -942,7 +942,7 @@ msgid "Your name"
msgstr "Vòstre nom" msgstr "Vòstre nom"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "jorns" msgstr "jorns"
#: .Generic.for #: .Generic.for
@ -1660,7 +1660,7 @@ msgid "Remove a time slot"
msgstr "Suprimir lo darrièr orari" msgstr "Suprimir lo darrièr orari"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Suprimir totes los jorns" msgstr "Suprimir totes los jorns"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1675,13 +1675,13 @@ msgstr "Suprimir aqueste jorn"
#: +two+time+slots+on+one+day+or+two+days). #: +two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"Per crear un sondatge especial datas vos cal prepausar almens doas causidas " "Per crear un sondatge especial datas vos cal prepausar almens doas causidas "
"(dos oraris per la meteissa jornada o dos jorns)." "(dos oraris per la meteissa jornada o dos jorns)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "" msgstr ""
"Podètz apondre o suprimir de jorns e oraris suplementaris amb los botons" "Podètz apondre o suprimir de jorns e oraris suplementaris amb los botons"
@ -1738,7 +1738,7 @@ msgid "Your poll will automatically be archived"
msgstr "Vòstre sondatge serà archivat automaticament" msgstr "Vòstre sondatge serà archivat automaticament"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Vòstre sondatge serà archivat automaticament dins %d jorns." msgstr "Vòstre sondatge serà archivat automaticament dins %d jorns."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -81,7 +81,7 @@ msgstr ""
#: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association. #: .2nd+section.software+developed+by+the+University+of+Strasbourg.+These+days,+it+is+developed+by+the+Framasoft+association.
msgid "" msgid ""
"software developed by the University of Strasbourg. These days, it is " "software developed by the University of Strasbourg. These dateList, it is "
"developed by the Framasoft association." "developed by the Framasoft association."
msgstr "" msgstr ""
"mjukvara utvecklad av Strasbourgs universitet. Idag utvecklas den av " "mjukvara utvecklad av Strasbourgs universitet. Idag utvecklas den av "
@ -917,7 +917,7 @@ msgid "Your name"
msgstr "Ditt namn" msgstr "Ditt namn"
#: .Generic.days #: .Generic.days
msgid "days" msgid "dateList"
msgstr "dagar" msgstr "dagar"
#: .Generic.for #: .Generic.for
@ -1607,7 +1607,7 @@ msgid "Remove a time slot"
msgstr "Ta bort en tid" msgstr "Ta bort en tid"
#: .Step+2+date.Remove+all+days #: .Step+2+date.Remove+all+days
msgid "Remove all days" msgid "Remove all dateList"
msgstr "Ta bort alla dagar" msgstr "Ta bort alla dagar"
#: .Step+2+date.Remove+all+times #: .Step+2+date.Remove+all+times
@ -1621,13 +1621,13 @@ msgstr "Ta bort den här dagen"
#: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days). #: .Step+2+date.To+schedule+an+event+you+need+to+provide+at+least+two+choices+(e.g.,+two+time+slots+on+one+day+or+two+days).
msgid "" msgid ""
"To schedule an event you need to provide at least two choices (e.g., two " "To schedule an event you need to provide at least two choices (e.g., two "
"time slots on one day or two days)." "time slots on one day or two dateList)."
msgstr "" msgstr ""
"För att schemalägga ett evenemang måste du ange minst två val (alltså minst " "För att schemalägga ett evenemang måste du ange minst två val (alltså minst "
"två tider samma dag eller två dagar)." "två tider samma dag eller två dagar)."
#: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons #: .Step+2+date.You+can+add+or+remove+additional+days+and+times+with+the+buttons
msgid "You can add or remove additional days and times with the buttons" msgid "You can add or remove additional dateList and times with the buttons"
msgstr "Du kan lägga till och ta bort dagar och tider med knapparna" msgstr "Du kan lägga till och ta bort dagar och tider med knapparna"
#: .Step+3.Back+to+step+2 #: .Step+3.Back+to+step+2
@ -1680,7 +1680,7 @@ msgid "Your poll will automatically be archived"
msgstr "Din undersökning kommer arkiveras automatiskt" msgstr "Din undersökning kommer arkiveras automatiskt"
#: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days. #: .Step+3.Your+poll+will+be+automatically+archived+in+%25d+days.
msgid "Your poll will be automatically archived in %d days." msgid "Your poll will be automatically archived in %d dateList."
msgstr "Din undersökning kommer arkiveras automatiskt om %d dagar." msgstr "Din undersökning kommer arkiveras automatiskt om %d dagar."
#: .Step+3.after+the+last+date+of+your+poll. #: .Step+3.after+the+last+date+of+your+poll.

View File

@ -17,6 +17,7 @@ export const environment = {
showDemoWarning: true, showDemoWarning: true,
autofill: false, autofill: false,
autoSendNewPoll: false, autoSendNewPoll: false,
interval_days_default: 7,
appTitle: 'FramaDate Funky', appTitle: 'FramaDate Funky',
appVersion: '2.1.0', appVersion: '2.1.0',
appLogo: 'assets/img/logo.png', appLogo: 'assets/img/logo.png',

View File

@ -24,6 +24,7 @@ export const environment = {
autofill: true, autofill: true,
showDemoWarning: false, showDemoWarning: false,
autoSendNewPoll: false, autoSendNewPoll: false,
interval_days_default: 7,
appTitle: 'FramaDate Funky', appTitle: 'FramaDate Funky',
appVersion: '2.1.0', appVersion: '2.1.0',
appLogo: 'assets/img/logo.png', appLogo: 'assets/img/logo.png',

12
up_change.sh Normal file
View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
previous_tag=0
for current_tag in $(git tag --sort=-creatordate)
do
if [ "$previous_tag" != 0 ];then
tag_date=$(git log -1 --pretty=format:'%ad' --date=short ${previous_tag})
printf "## ${previous_tag} (${tag_date})\n\n"
git log ${current_tag}...${previous_tag} --pretty=format:'* %s [View](https://bitbucket.org/projects/test/repos/my-project/commits/%H)' --reverse | grep -v Merge
printf "\n\n"
fi
previous_tag=${current_tag}
done

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
# this script is used on cipherbliss.com to show a demo, customize it to make your own demo # this script is used on cipherbliss.com to show a demo, customize it to make your own demo
sh up_change.sh > CHANGELOG.md
git pull origin develop git pull origin develop
yarn install --pure-lockfile yarn install --pure-lockfile