Browse Source

Merge branch 'master' of github.com:tracim/tracim into feature/replywithmail

Guénaël Muller 7 years ago
parent
commit
1906b95633
100 changed files with 21331 additions and 30 deletions
  1. 2 2
      README.md
  2. 3 3
      doc/database.md
  3. 2 2
      install/requirements.txt
  4. 0 3
      tracim/setup.py
  5. 5 5
      tracim/tracim/i18n/fr/LC_MESSAGES/tracim.po
  6. 2 2
      tracim/tracim/lib/daemons.py
  7. 4 3
      tracim/tracim/lib/email.py
  8. 2 6
      tracim/tracim/lib/notifications.py
  9. 6 4
      tracim/tracim/lib/webdav/design.py
  10. 56 0
      tracim/tracim/public/assets/candy/candy/CONTRIBUTING.md
  11. 9 0
      tracim/tracim/public/assets/candy/candy/CREDITS.md
  12. 9 0
      tracim/tracim/public/assets/candy/candy/LICENSE
  13. 28 0
      tracim/tracim/public/assets/candy/candy/README.md
  14. 41 0
      tracim/tracim/public/assets/candy/candy/bower.json
  15. 6680 0
      tracim/tracim/public/assets/candy/candy/candy.bundle.js
  16. 1 0
      tracim/tracim/public/assets/candy/candy/candy.bundle.map
  17. 5 0
      tracim/tracim/public/assets/candy/candy/candy.min.js
  18. 1 0
      tracim/tracim/public/assets/candy/candy/candy.min.map
  19. 4 0
      tracim/tracim/public/assets/candy/candy/example/htaccess
  20. 51 0
      tracim/tracim/public/assets/candy/candy/example/index.html
  21. 6760 0
      tracim/tracim/public/assets/candy/candy/libs.bundle.css
  22. 6782 0
      tracim/tracim/public/assets/candy/candy/libs.bundle.js
  23. 1 0
      tracim/tracim/public/assets/candy/candy/libs.bundle.map
  24. 5 0
      tracim/tracim/public/assets/candy/candy/libs.min.css
  25. 3 0
      tracim/tracim/public/assets/candy/candy/libs.min.js
  26. 65 0
      tracim/tracim/public/assets/candy/candy/package.json
  27. 802 0
      tracim/tracim/public/assets/candy/candy/res/default.css
  28. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/autoscroll-off.png
  29. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/autoscroll-on.png
  30. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/ban.png
  31. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/emoticons.png
  32. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/ignore.png
  33. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/kick.png
  34. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/menu.png
  35. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/private.png
  36. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/settings.png
  37. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/sound-off.png
  38. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/sound-on.png
  39. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/statusmessage-off.png
  40. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/statusmessage-on.png
  41. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/subject.png
  42. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/unignore.png
  43. BIN
      tracim/tracim/public/assets/candy/candy/res/img/action/usercount.png
  44. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Angel.png
  45. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Angry.png
  46. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Aww.png
  47. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Aww_2.png
  48. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Blushing.png
  49. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Childish.png
  50. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Confused.png
  51. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Creepy.png
  52. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Crying.png
  53. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Cthulhu.png
  54. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Cute.png
  55. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Cute_Winking.png
  56. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Devil.png
  57. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Gah.png
  58. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Gah_2.png
  59. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Gasping.png
  60. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Greedy.png
  61. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Grinning.png
  62. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Grinning_Winking.png
  63. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Happy.png
  64. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Happy_2.png
  65. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Happy_3.png
  66. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Heart.png
  67. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Huh.png
  68. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Huh_2.png
  69. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Laughing.png
  70. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Lips_Sealed.png
  71. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Madness.png
  72. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Malicious.png
  73. 2 0
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/README
  74. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Sick.png
  75. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Smiling.png
  76. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Speechless.png
  77. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Spiteful.png
  78. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Stupid.png
  79. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Sunglasses.png
  80. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Terrified.png
  81. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Thumb_Down.png
  82. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Thumb_Up.png
  83. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tired.png
  84. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out.png
  85. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Laughing.png
  86. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Left.png
  87. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Up.png
  88. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Up_Left.png
  89. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Winking.png
  90. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Uncertain.png
  91. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Uncertain_2.png
  92. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Unhappy.png
  93. BIN
      tracim/tracim/public/assets/candy/candy/res/img/emoticons/Winking.png
  94. BIN
      tracim/tracim/public/assets/candy/candy/res/img/favicon.png
  95. BIN
      tracim/tracim/public/assets/candy/candy/res/img/modal-spinner.gif
  96. BIN
      tracim/tracim/public/assets/candy/candy/res/img/overlay.png
  97. BIN
      tracim/tracim/public/assets/candy/candy/res/img/roster/affiliation-owner.png
  98. BIN
      tracim/tracim/public/assets/candy/candy/res/img/roster/ignore.png
  99. BIN
      tracim/tracim/public/assets/candy/candy/res/img/roster/role-moderator.png
  100. 0 0
      tracim/tracim/public/assets/candy/candy/res/img/tab-transitions.png

+ 2 - 2
README.md View File

102
 
102
 
103
 In case you prefer using Docker:
103
 In case you prefer using Docker:
104
 
104
 
105
-    docker run -e DATABASE_TYPE=sqlite \
105
+    sudo docker run -e DATABASE_TYPE=sqlite \
106
                -p 80:80 -p 3030:3030 -p 5232:5232 \
106
                -p 80:80 -p 3030:3030 -p 5232:5232 \
107
                -v /var/tracim/etc:/etc/tracim -v /var/tracim/var:/var/tracim algoo/tracim
107
                -v /var/tracim/etc:/etc/tracim -v /var/tracim/var:/var/tracim algoo/tracim
108
 
108
 
118
 
118
 
119
 You'll need to install the following packages :
119
 You'll need to install the following packages :
120
 
120
 
121
-    sudo apt install git realpath redis-server \
121
+    sudo apt install git curl realpath redis-server \
122
                      python3 python-virtualenv python3-dev python-pip  python-lxml \
122
                      python3 python-virtualenv python3-dev python-pip  python-lxml \
123
                      build-essential libxml2-dev libxslt1-dev zlib1g-dev libjpeg-dev \
123
                      build-essential libxml2-dev libxslt1-dev zlib1g-dev libjpeg-dev \
124
                      libmagickwand-6.q16-3
124
                      libmagickwand-6.q16-3

+ 3 - 3
doc/database.md View File

57
 In this case, delete the user and database and start over:
57
 In this case, delete the user and database and start over:
58
 
58
 
59
     sudo --user=postgres psql \
59
     sudo --user=postgres psql \
60
-         --command="DROP USER tracimuser;" \
61
-         --command="DROP DATABASE tracimdb;"
60
+         --command="DROP DATABASE tracimdb;" \
61
+         --command="DROP USER tracimuser;"
62
 
62
 
63
 [//]: # (The following lines are only necessary to fix permissions on an existing database:)
63
 [//]: # (The following lines are only necessary to fix permissions on an existing database:)
64
 [//]: # (    sudo --user=postgres psql \)
64
 [//]: # (    sudo --user=postgres psql \)
88
 
88
 
89
 Create a database with following command:
89
 Create a database with following command:
90
 
90
 
91
-    CREATE DATABASE tracimdb;
91
+    CREATE DATABASE tracimdb CHARACTER SET = utf8;
92
 
92
 
93
 Create a user with following command:
93
 Create a user with following command:
94
 
94
 

+ 2 - 2
install/requirements.txt View File

17
 alembic==0.8.4
17
 alembic==0.8.4
18
 argparse==1.2.1
18
 argparse==1.2.1
19
 backlash==0.0.7
19
 backlash==0.0.7
20
-beautifulsoup4==4.4.0
20
+beautifulsoup4==4.6.0
21
 caldav==0.4.0
21
 caldav==0.4.0
22
 cliff==2.9.1
22
 cliff==2.9.1
23
 cmd2==0.6.9
23
 cmd2==0.6.9
57
 vobject==0.9.2
57
 vobject==0.9.2
58
 waitress==0.8.9
58
 waitress==0.8.9
59
 who_ldap==3.2.2
59
 who_ldap==3.2.2
60
--e git+https://github.com/algoo/wsgidav.git@py3#egg=wsgidav
60
+wsgidav==2.2.4
61
 zope.interface==4.1.3
61
 zope.interface==4.1.3
62
 zope.sqlalchemy==0.7.6
62
 zope.sqlalchemy==0.7.6
63
 PyYAML
63
 PyYAML

+ 0 - 3
tracim/setup.py View File

86
             'mail sender = tracim.command.mail:MailSenderCommend',
86
             'mail sender = tracim.command.mail:MailSenderCommend',
87
         ]
87
         ]
88
     },
88
     },
89
-    dependency_links=[
90
-        'http://github.com/algoo/preview-generator/tarball/master#egg=preview_generator-1.0',
91
-    ],
92
     zip_safe=False,
89
     zip_safe=False,
93
 )
90
 )

+ 5 - 5
tracim/tracim/i18n/fr/LC_MESSAGES/tracim.po View File

395
 #: tracim/lib/app_globals.py:26
395
 #: tracim/lib/app_globals.py:26
396
 #, python-format
396
 #, python-format
397
 msgid "%B %d at %I:%M%p"
397
 msgid "%B %d at %I:%M%p"
398
-msgstr "le %d %B à %H:%M"
398
+msgstr "%d %B à %H:%M"
399
 
399
 
400
 #: tracim/lib/calendar.py:45
400
 #: tracim/lib/calendar.py:45
401
 msgid "My personal calendar"
401
 msgid "My personal calendar"
1239
 msgstr "affiché"
1239
 msgstr "affiché"
1240
 
1240
 
1241
 #: tracim/templates/admin/user_getall.mak:20
1241
 #: tracim/templates/admin/user_getall.mak:20
1242
-msgid "manage users and associated workspaces"
1243
-msgstr "gestion des utilisateurs et espaces de travail associés"
1242
+msgid "Manage users and associated workspaces"
1243
+msgstr "Gestion des utilisateurs et espaces de travail associés"
1244
 
1244
 
1245
 #: tracim/templates/admin/user_getall.mak:32
1245
 #: tracim/templates/admin/user_getall.mak:32
1246
 msgid "Create a user account..."
1246
 msgid "Create a user account..."
1377
 msgstr "Notifications"
1377
 msgstr "Notifications"
1378
 
1378
 
1379
 #: tracim/templates/admin/workspace_getall.mak:17
1379
 #: tracim/templates/admin/workspace_getall.mak:17
1380
-msgid "manage workspaces and subscribed users"
1381
-msgstr "gestion des espaces de travail et utilisateurs abonnés"
1380
+msgid "Manage workspaces and subscribed users"
1381
+msgstr "Gestion des espaces de travail et utilisateurs abonnés"
1382
 
1382
 
1383
 #: tracim/templates/admin/workspace_getall.mak:27
1383
 #: tracim/templates/admin/workspace_getall.mak:27
1384
 msgid "Create a workspace..."
1384
 msgid "Create a workspace..."

+ 2 - 2
tracim/tracim/lib/daemons.py View File

351
 from inspect import isfunction
351
 from inspect import isfunction
352
 import traceback
352
 import traceback
353
 
353
 
354
-from wsgidav.server.cherrypy import wsgiserver
355
-from wsgidav.server.cherrypy.wsgiserver.wsgiserver3 import CherryPyWSGIServer
354
+from cherrypy import wsgiserver
355
+from cherrypy.wsgiserver import CherryPyWSGIServer
356
 
356
 
357
 DEFAULT_CONFIG_FILE = "wsgidav.conf"
357
 DEFAULT_CONFIG_FILE = "wsgidav.conf"
358
 PYTHON_VERSION = "%s.%s.%s" % (sys.version_info[0], sys.version_info[1], sys.version_info[2])
358
 PYTHON_VERSION = "%s.%s.%s" % (sys.version_info[0], sys.version_info[1], sys.version_info[2])

+ 4 - 3
tracim/tracim/lib/email.py View File

4
 from email.message import Message
4
 from email.message import Message
5
 from email.mime.multipart import MIMEMultipart
5
 from email.mime.multipart import MIMEMultipart
6
 from email.mime.text import MIMEText
6
 from email.mime.text import MIMEText
7
+from email.utils import formataddr
7
 
8
 
8
 from mako.template import Template
9
 from mako.template import Template
9
 from tg.i18n import ugettext as _
10
 from tg.i18n import ugettext as _
156
             )
157
             )
157
         message = MIMEMultipart('alternative')
158
         message = MIMEMultipart('alternative')
158
         message['Subject'] = subject
159
         message['Subject'] = subject
159
-        message['From'] = '{0} <{1}>'.format(
160
+        message['From'] = formataddr((
160
             self._global_config.EMAIL_NOTIFICATION_FROM_DEFAULT_LABEL,
161
             self._global_config.EMAIL_NOTIFICATION_FROM_DEFAULT_LABEL,
161
             self._global_config.EMAIL_NOTIFICATION_FROM_EMAIL,
162
             self._global_config.EMAIL_NOTIFICATION_FROM_EMAIL,
162
-        )
163
-        message['To'] = user.email
163
+        ))
164
+        message['To'] = formataddr((user.get_display_name(), user.email))
164
 
165
 
165
         text_template_file_path = self._global_config.EMAIL_NOTIFICATION_CREATED_ACCOUNT_TEMPLATE_TEXT  # nopep8
166
         text_template_file_path = self._global_config.EMAIL_NOTIFICATION_CREATED_ACCOUNT_TEMPLATE_TEXT  # nopep8
166
         html_template_file_path = self._global_config.EMAIL_NOTIFICATION_CREATED_ACCOUNT_TEMPLATE_HTML  # nopep8
167
         html_template_file_path = self._global_config.EMAIL_NOTIFICATION_CREATED_ACCOUNT_TEMPLATE_HTML  # nopep8

+ 2 - 6
tracim/tracim/lib/notifications.py View File

208
         else:
208
         else:
209
             email_address = email_template.replace('{user_id}', '0')
209
             email_address = email_template.replace('{user_id}', '0')
210
 
210
 
211
-        return '{label} <{email_address}>'.format(
212
-            label = Header(mail_sender_name).encode(),
213
-            email_address = email_address
214
-        )
211
+        return formataddr((mail_sender_name, email_address))
215
 
212
 
216
     @staticmethod
213
     @staticmethod
217
     def log_notification(
214
     def log_notification(
270
 
267
 
271
         for role in notifiable_roles:
268
         for role in notifiable_roles:
272
             logger.info(self, 'Sending email to {}'.format(role.user.email))
269
             logger.info(self, 'Sending email to {}'.format(role.user.email))
273
-            to_addr = '{name} <{email}>'.format(name=role.user.display_name, email=role.user.email)
270
+            to_addr = formataddr((role.user.display_name, role.user.email))
274
             #
271
             #
275
             # INFO - G.M - 2017-11-15 - set content_id in header to permit reply
272
             # INFO - G.M - 2017-11-15 - set content_id in header to permit reply
276
             # references can have multiple values, but only one in this case.
273
             # references can have multiple values, but only one in this case.
304
             # To link this email to a content we create a virtual parent
301
             # To link this email to a content we create a virtual parent
305
             # in reference who contain the content_id.
302
             # in reference who contain the content_id.
306
             message['References'] = formataddr(('',reference_addr))
303
             message['References'] = formataddr(('',reference_addr))
307
-            # TODO: add correct header to allow reply
308
             body_text = self._build_email_body(self._global_config.EMAIL_NOTIFICATION_CONTENT_UPDATE_TEMPLATE_TEXT, role, content, user)
304
             body_text = self._build_email_body(self._global_config.EMAIL_NOTIFICATION_CONTENT_UPDATE_TEMPLATE_TEXT, role, content, user)
309
 
305
 
310
 
306
 

+ 6 - 4
tracim/tracim/lib/webdav/design.py View File

173
                    )
173
                    )
174
     histHTML += '</table>'
174
     histHTML += '</table>'
175
 
175
 
176
-    file = '''
176
+    page = '''
177
 <html>
177
 <html>
178
 <head>
178
 <head>
179
+	<meta charset="utf-8" />
179
 	<title>%s</title>
180
 	<title>%s</title>
180
 	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
181
 	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
181
 	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">
182
 	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">
233
                content_revision.description,
234
                content_revision.description,
234
                histHTML)
235
                histHTML)
235
 
236
 
236
-    return file
237
+    return page
237
 
238
 
238
 def designThread(content: data.Content, content_revision: data.ContentRevisionRO, comments) -> str:
239
 def designThread(content: data.Content, content_revision: data.ContentRevisionRO, comments) -> str:
239
         hist = content.get_history()
240
         hist = content.get_history()
291
                                # t.ref_object.label) if t.type.id in ['revision', 'creation', 'edition'] else '')
292
                                # t.ref_object.label) if t.type.id in ['revision', 'creation', 'edition'] else '')
292
                            )
293
                            )
293
 
294
 
294
-        page = '''
295
+        thread = '''
295
 <html>
296
 <html>
296
 <head>
297
 <head>
298
+	<meta charset="utf-8" />
297
 	<title>%s</title>
299
 	<title>%s</title>
298
 	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
300
 	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
299
 	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
301
 	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
379
                content_revision.description,
381
                content_revision.description,
380
                disc)
382
                disc)
381
 
383
 
382
-        return page
384
+        return thread

+ 56 - 0
tracim/tracim/public/assets/candy/candy/CONTRIBUTING.md View File

1
+# Contributing
2
+
3
+## Team members
4
+
5
+* Patrick Stadler &middot; [@pstadler](http://twitter.com/pstadler) &middot; <patrick.stadler@gmail.com>
6
+* Michael Weibel &middot; [@weibelm](htps://twitter.com/weibelm) &middot; <michael.weibel@gmail.com>
7
+
8
+## Learn & listen
9
+
10
+[![Gitter chat](https://badges.gitter.im/candy-chat.png)](https://gitter.im/candy-chat)
11
+
12
+* [Mailing list](http://groups.google.com/group/candy-chat)
13
+	* yes, non-gmail users can signup as well
14
+* [FAQ](https://github.com/candy-chat/candy/wiki/Frequently-Asked-Questions)
15
+
16
+## Contributing
17
+
18
+You want to help us? **Awesome!**
19
+
20
+### How to contribute
21
+A few hopefully helpful hints to contributing to Candy
22
+
23
+#### Using vagrant
24
+1. [Fork](https://help.github.com/articles/fork-a-repo) Candy
25
+2. [Install Vagrant](http://vagrantup.com/)
26
+3. Run `vagrant up`.
27
+5. Create a branch based on the `master` branch (`git checkout -B my-awesome-feature`)
28
+6. Run `grunt watch` to automatically run jshint (syntax checker) and the build of `candy.bundle.js` and `candy.min.js` while developing.
29
+7. Make your changes, fix eventual *jshint* errors & push them back to your fork
30
+8. Create a [pull request](https://help.github.com/articles/using-pull-requests)
31
+
32
+
33
+#### On your own machine
34
+Please note that you should have a working XMPP server to test your changes (the vagrant way does already have a working XMPP server).
35
+
36
+1. [Fork](https://help.github.com/articles/fork-a-repo) Candy
37
+2. Clone your fork
38
+3. Checkout out `master` branch (`git checkout master`)
39
+4. Install [Node.js](http://nodejs.org/)
40
+5. Install [Grunt](http://gruntjs.com/) (`npm install -g grunt-cli`)
41
+6. Install [Bower](http://bower.io/) (`npm install -g bower`)
42
+7. Install npm dependencies (`npm install` in candy root directory)
43
+8. Install bower dependencies (`bower install` in candy root directory)
44
+9. Create a branch based on the `master` branch (`git checkout -B my-awesome-feature`)
45
+10. Run `grunt watch` to automatically run jshint (syntax checker) and the build of `candy.bundle.js` and `candy.min.js` while developing.
46
+11. Make your changes, fix eventual *jshint* errors & push them back to your fork
47
+12. Create a [pull request](https://help.github.com/articles/using-pull-requests)
48
+
49
+In case you have any questions, don't hesitate to ask on the [Mailing list](http://groups.google.com/group/candy-chat).
50
+
51
+### Running tests
52
+
53
+* Tests are run using [Intern](http://theintern.io).
54
+* `grunt` and `grunt watch` will each run unit tests in Chrome on Linux (for fast feedback).
55
+* `grunt test` will run both unit and integration tests in a variety of environments. Tests are run using Selenium Standalone and Phantom.JS while developing, and on Sauce Labs in CI or using `grunt test`.
56
+* If you don't want to use the Vagrant box to run Selenium/PhantomJS, set `CANDY_VAGRANT='false'` to run tests.

+ 9 - 0
tracim/tracim/public/assets/candy/candy/CREDITS.md View File

1
+Credits
2
+=======
3
+- [Special thanks to our contributors](https://github.com/candy-chat/candy/graphs/contributors)
4
+- [famfamfam silk icons](http://www.famfamfam.com/lab/icons/silk/) is a smooth, free icon set, containing over 700 16-by-16 pixel icons.
5
+- [Simple Smileys](http://simplesmileys.org) are beautifully simple emoticons.
6
+- [Flash MP3 Player](http://flash-mp3-player.net/players/js) is a very simple flash audio player used by Candy for audio notifications.
7
+- [Colin Snover](http://zetafleet.com/blog/javascript-dateparse-for-iso-8601) provides a fix for browsers not supporting latest Date.parse().
8
+- [Ben Cherry](http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth) wrote a great article about the JS module pattern.
9
+- [Amiado Group](http://www.amiadogroup.com) allowed us to make Candy freely available for everyone :)

+ 9 - 0
tracim/tracim/public/assets/candy/candy/LICENSE View File

1
+Copyright (c) 2011 Amiado Group AG
2
+Copyright (c) 2012-2014 Patrick Stadler & Michael Weibel
3
+Copyright (c) 2015 Adhearsion Foundation Inc <info@adhearsion.com>
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 28 - 0
tracim/tracim/public/assets/candy/candy/README.md View File

1
+Candy — a JavaScript-based multi-user chat client
2
+==================================================
3
+
4
+[![Build Status](https://travis-ci.org/candy-chat/candy.png?branch=dev)](https://travis-ci.org/candy-chat/candy)
5
+[![Coverage Status](https://coveralls.io/repos/candy-chat/candy/badge.png?branch=dev)](https://coveralls.io/r/candy-chat/candy)
6
+
7
+Visit the official project page: http://candy-chat.github.io/candy
8
+
9
+Features
10
+--------
11
+- Focused on real-time multi-user chatting
12
+- Easy to configure, easy to run, easy to use
13
+- Highly customizable
14
+- 100% well-documented JavaScript source code
15
+- Built for Jabber (XMPP), using famous technologies
16
+- Used and approved in a productive environment with up to 400 concurrent users
17
+- Works with all major web browsers including IE9
18
+
19
+Plugins
20
+-------
21
+If you wish to add new functionality (to your candy installation) or contribute plugins, take a look at our [plugin repository](http://github.com/candy-chat/candy-plugins).
22
+
23
+Support & Community
24
+-------------------
25
+Take a look at our [FAQ](https://github.com/candy-chat/candy/wiki/Frequently-Asked-Questions). If it doesn't solve your questions, you're welcome to join our [Mailinglist on Google Groups](http://groups.google.com/group/candy-chat).
26
+You don't need to have a Gmail account for it.
27
+
28
+[![githalytics.com alpha](https://cruel-carlota.pagodabox.com/a41a8075608abeaf99db685d7ef29cf6 "githalytics.com")](http://githalytics.com/candy-chat/candy)

+ 41 - 0
tracim/tracim/public/assets/candy/candy/bower.json View File

1
+{
2
+  "name": "candy",
3
+  "version": "2.2.0",
4
+  "homepage": "http://candy-chat.github.io/candy/",
5
+  "authors": [
6
+    "Michael Weibel <michael.weibel@gmail.com>",
7
+    "Patrick Stadler <patrick.stadler@gmail.com>"
8
+  ],
9
+  "description": "Multi-user XMPP web client",
10
+  "main": [
11
+    "candy.min.js"
12
+  ],
13
+  "keywords": [
14
+    "xmpp",
15
+    "muc",
16
+    "multi-user",
17
+    "websocket",
18
+    "bosh",
19
+    "chat"
20
+  ],
21
+  "license": "MIT",
22
+  "repository": {
23
+    "type": "git",
24
+    "url": "git://github.com/candy-chat/candy.git"
25
+  },
26
+  "ignore": [
27
+    "**/.*",
28
+    "node_modules",
29
+    "bower_components",
30
+    "test",
31
+    "tests"
32
+  ],
33
+  "dependencies": {
34
+    "jquery": "~1.10.2",
35
+    "strophe": "1.1.3",
36
+    "strophejs-plugins": "benlangfeld/strophejs-plugins#30fb089457addc37e01d69c3536dee868a90a9ad",
37
+    "mustache": "0.3.0",
38
+    "jquery-i18n": "1.1.1",
39
+    "bootstrap": "~3.3.6"
40
+  }
41
+}

File diff suppressed because it is too large
+ 6680 - 0
tracim/tracim/public/assets/candy/candy/candy.bundle.js


File diff suppressed because it is too large
+ 1 - 0
tracim/tracim/public/assets/candy/candy/candy.bundle.map


File diff suppressed because it is too large
+ 5 - 0
tracim/tracim/public/assets/candy/candy/candy.min.js


File diff suppressed because it is too large
+ 1 - 0
tracim/tracim/public/assets/candy/candy/candy.min.map


+ 4 - 0
tracim/tracim/public/assets/candy/candy/example/htaccess View File

1
+AddDefaultCharset UTF-8
2
+Options +MultiViews
3
+RewriteEngine On
4
+RewriteRule http-bind/ http://localhost:5280/http-bind/ [P]

+ 51 - 0
tracim/tracim/public/assets/candy/candy/example/index.html View File

1
+<!DOCTYPE html>
2
+<html lang="en">
3
+<head>
4
+	<meta charset="utf-8">
5
+	<meta name="viewport" content="width=device-width, initial-scale=1">
6
+	<title>Candy - Chats are not dead yet</title>
7
+	<link rel="shortcut icon" href="../res/img/favicon.png" type="image/gif" />
8
+	<link rel="stylesheet" type="text/css" href="../libs.min.css" />
9
+	<link rel="stylesheet" type="text/css" href="../res/default.css" />
10
+
11
+	<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
12
+	<script type="text/javascript" src="../libs.min.js"></script>
13
+	<script type="text/javascript" src="../candy.min.js"></script>
14
+	<script type="text/javascript">
15
+		$(document).ready(function() {
16
+			Candy.init('http-bind/', {
17
+				core: {
18
+					// only set this to true if developing / debugging errors
19
+					debug: false,
20
+					// autojoin is a *required* parameter if you don't have a plugin (e.g. roomPanel) for it
21
+					//   true
22
+					//     -> fetch info from server (NOTE: does only work with openfire server)
23
+					//   ['test@conference.example.com']
24
+					//     -> array of rooms to join after connecting
25
+					autojoin: true
26
+				},
27
+				view: { assets: '../res/' }
28
+			});
29
+
30
+			Candy.Core.connect();
31
+
32
+			/**
33
+			 * Thanks for trying Candy!
34
+			 *
35
+			 * If you need more information, please see here:
36
+			 *   - Setup instructions & config params: http://candy-chat.github.io/candy/#setup
37
+			 *   - FAQ & more: https://github.com/candy-chat/candy/wiki
38
+			 *
39
+			 * Mailinglist for questions:
40
+			 *   - http://groups.google.com/group/candy-chat
41
+			 *
42
+			 * Github issues for bugs:
43
+			 *   - https://github.com/candy-chat/candy/issues
44
+			 */
45
+		});
46
+	</script>
47
+</head>
48
+<body>
49
+	<div id="candy"></div>
50
+</body>
51
+</html>

File diff suppressed because it is too large
+ 6760 - 0
tracim/tracim/public/assets/candy/candy/libs.bundle.css


File diff suppressed because it is too large
+ 6782 - 0
tracim/tracim/public/assets/candy/candy/libs.bundle.js


File diff suppressed because it is too large
+ 1 - 0
tracim/tracim/public/assets/candy/candy/libs.bundle.map


File diff suppressed because it is too large
+ 5 - 0
tracim/tracim/public/assets/candy/candy/libs.min.css


File diff suppressed because it is too large
+ 3 - 0
tracim/tracim/public/assets/candy/candy/libs.min.js


+ 65 - 0
tracim/tracim/public/assets/candy/candy/package.json View File

1
+{
2
+  "name": "candy",
3
+  "version": "2.2.0",
4
+  "description": "Multi-user XMPP web client",
5
+  "main": "candy.min.js",
6
+  "directories": {
7
+    "doc": "docs",
8
+    "example": "example"
9
+  },
10
+  "scripts": {
11
+    "test": "echo \"Error: no test specified\" && exit 1"
12
+  },
13
+  "repository": {
14
+    "type": "git",
15
+    "url": "git://github.com/candy-chat/candy.git"
16
+  },
17
+  "keywords": [
18
+    "xmpp",
19
+    "muc",
20
+    "multi-user",
21
+    "websocket",
22
+    "bosh",
23
+    "chat"
24
+  ],
25
+  "contributors": [
26
+    {
27
+      "name": "Michael Weibel",
28
+      "email": "michael.weibel@gmail.com"
29
+    },
30
+    {
31
+      "name": "Patrick Stadler",
32
+      "email": "patrick.stadler@gmail.com",
33
+      "url": "http://pstadler.sh"
34
+    }
35
+  ],
36
+  "license": "MIT",
37
+  "bugs": {
38
+    "url": "https://github.com/candy-chat/candy/issues"
39
+  },
40
+  "homepage": "http://candy-chat.github.io/candy/",
41
+  "devDependencies": {
42
+    "grunt": "^0.4.5",
43
+    "grunt-clear": "^0.2.1",
44
+    "grunt-contrib-clean": "^0.5.0",
45
+    "grunt-contrib-compress": "^0.13.0",
46
+    "grunt-contrib-concat": "^0.5.1",
47
+    "grunt-contrib-cssmin": "^0.14.0",
48
+    "grunt-contrib-jshint": "^0.10.0",
49
+    "grunt-contrib-uglify": "^0.4.0",
50
+    "grunt-contrib-watch": "^0.6.1",
51
+    "grunt-coveralls": "^0.3.0",
52
+    "grunt-github-releaser": "^0.1.17",
53
+    "grunt-mkdir": "^0.1.1",
54
+    "grunt-natural-docs": "^0.1.1",
55
+    "grunt-notify": "^0.3.0",
56
+    "grunt-prompt": "^1.3.0",
57
+    "grunt-sync-pkg": "^0.1.2",
58
+    "grunt-todo": "~0.4.0",
59
+    "intern": "^2.0.1",
60
+    "jshint-stylish": "^0.2.0",
61
+    "lolex": "^1.2.0",
62
+    "sinon": "^1.10.3",
63
+    "sinon-chai": "^2.5.0"
64
+  }
65
+}

+ 802 - 0
tracim/tracim/public/assets/candy/candy/res/default.css View File

1
+/** File: default.css
2
+ * Candy - Chats are not dead yet.
3
+ *
4
+ * Legal: See the LICENSE file at the top-level directory of this distribution and at https://github.com/candy-chat/candy/blob/master/LICENSE
5
+ */
6
+html, body {
7
+	margin: 0;
8
+	padding: 0;
9
+	font-family: 'Helvetica Neue', Helvetica, sans-serif;
10
+}
11
+
12
+#candy {
13
+	top: 0;
14
+	bottom: 0;
15
+	right: 0;
16
+	left: 0;
17
+	background-color: #444;
18
+	color: #333;
19
+	overflow: hidden;
20
+}
21
+
22
+a {
23
+	color: #333;
24
+	text-decoration: none;
25
+}
26
+
27
+ul {
28
+	list-style: none;
29
+	padding: 0;
30
+	margin: 0;
31
+}
32
+
33
+#chat-tabs {
34
+	list-style: none;
35
+	margin: 0 200px 0 0;
36
+	padding: 0;
37
+	overflow: auto;
38
+	overflow-y: hidden;
39
+}
40
+
41
+#chat-tabs li {
42
+	margin: 0;
43
+	float: left;
44
+	position: relative;
45
+	white-space: nowrap;
46
+	margin: 3px 0 0 3px;
47
+}
48
+
49
+#chat-tabs a {
50
+	padding: 4px 50px 4px 10px;
51
+	display: inline-block;
52
+	color: #ccc;
53
+	height: 20px;
54
+	background-color: #666;
55
+	border-radius: 3px 3px 0 0;
56
+}
57
+
58
+#chat-tabs .active a {
59
+	background-color: #eee;
60
+	color: black;
61
+}
62
+
63
+#chat-tabs .transition {
64
+	position: absolute;
65
+	top: 0;
66
+	right: 0;
67
+	padding: 0;
68
+	width: 30px;
69
+	height: 30px;
70
+	background: url(img/tab-transitions.png) repeat-y left;
71
+	border-radius: 0 3px 0 0;
72
+}
73
+
74
+#chat-tabs a.close {
75
+	background-color: transparent;
76
+	position: absolute;
77
+	right: -2px;
78
+	top: -3px;
79
+	height: auto;
80
+	padding: 5px;
81
+	margin: 0 5px 0 2px;
82
+	color: #999;
83
+}
84
+
85
+#chat-tabs .active .transition {
86
+	background: url(img/tab-transitions.png) repeat-y -50px;
87
+}
88
+
89
+#chat-tabs .close:hover {
90
+	color: black;
91
+}
92
+
93
+#chat-tabs .unread {
94
+	color: white;
95
+	background-color: #9b1414;
96
+	padding: 2px 4px;
97
+	font-weight: bold;
98
+	font-size: 10px;
99
+	position: absolute;
100
+	top: 5px;
101
+	right: 22px;
102
+	border-radius: 3px;
103
+}
104
+
105
+#chat-tabs .offline .label {
106
+	text-decoration: line-through;
107
+}
108
+
109
+#chat-toolbar {
110
+	position: fixed;
111
+	bottom: 0;
112
+	right: 0;
113
+	font-size: 11px;
114
+	color: #666;
115
+	width: 200px;
116
+	height: 24px;
117
+	padding-top: 7px;
118
+	background-color: #444;
119
+	display: none;
120
+	border-top: 1px solid black;
121
+	box-shadow: 0 1px 0 0 #555 inset;
122
+}
123
+
124
+#chat-toolbar li {
125
+	width: 16px;
126
+	height: 16px;
127
+	margin-left: 5px;
128
+	float: left;
129
+	display: inline-block;
130
+	cursor: pointer;
131
+	background-position: top left;
132
+	background-repeat: no-repeat;
133
+}
134
+
135
+#chat-toolbar #emoticons-icon {
136
+	background-image: url(img/action/emoticons.png);
137
+}
138
+
139
+#chat-toolbar .context {
140
+	background-image: url(img/action/settings.png);
141
+	display: none;
142
+}
143
+
144
+.role-moderator #chat-toolbar .context, .affiliation-owner #chat-toolbar .context {
145
+	display: inline-block;
146
+}
147
+
148
+#chat-sound-control {
149
+	background-image: url(img/action/sound-off.png);
150
+}
151
+
152
+#chat-sound-control.checked {
153
+	background-image: url(img/action/sound-on.png);
154
+}
155
+
156
+#chat-autoscroll-control {
157
+	background-image: url(img/action/autoscroll-off.png);
158
+}
159
+
160
+#chat-autoscroll-control.checked {
161
+	background-image: url(img/action/autoscroll-on.png);
162
+}
163
+
164
+#chat-statusmessage-control {
165
+	background-image: url(img/action/statusmessage-off.png);
166
+}
167
+
168
+#chat-statusmessage-control.checked {
169
+	background-image: url(img/action/statusmessage-on.png);
170
+}
171
+
172
+#chat-toolbar .usercount {
173
+	background-image: url(img/action/usercount.png);
174
+	cursor: default;
175
+	padding-left: 20px;
176
+	width: auto;
177
+	margin-right: 5px;
178
+	float: right;
179
+}
180
+
181
+.usercount span {
182
+	display: inline-block;
183
+	padding: 1px 3px;
184
+	background-color: #666;
185
+	font-weight: bold;
186
+	border-radius: 3px;
187
+	color: #ccc;
188
+}
189
+
190
+.room-pane {
191
+	display: none;
192
+}
193
+
194
+.roster-pane {
195
+	position: absolute;
196
+	overflow: auto;
197
+	top: 0;
198
+	right: 0;
199
+	bottom: 0;
200
+	width: 200px;
201
+	margin: 30px 0 31px 0;
202
+	background-color: #333;
203
+	border-top: 1px solid black;
204
+	box-shadow: inset 0 1px 0 0 #555;
205
+}
206
+
207
+.roster-pane .user {
208
+	cursor: pointer;
209
+	padding: 7px 10px;
210
+	font-size: 12px;
211
+	opacity: 0;
212
+	display: none;
213
+	color: #ccc;
214
+	clear: both;
215
+	height: 14px;
216
+	border-bottom: 1px solid black;
217
+	box-shadow: 0 1px 0 0 #555;
218
+}
219
+
220
+.roster-pane .user:hover {
221
+	background-color: #222;
222
+}
223
+
224
+.roster-pane .user.status-ignored {
225
+	cursor: default;
226
+}
227
+
228
+.roster-pane .user.me {
229
+	font-weight: bold;
230
+	cursor: default;
231
+}
232
+
233
+.roster-pane .user.me:hover {
234
+	background-color: transparent;
235
+}
236
+
237
+.roster-pane .label {
238
+	float: left;
239
+	width: 110px;
240
+	overflow: hidden;
241
+	white-space: nowrap;
242
+	text-shadow: 1px 1px black;
243
+}
244
+
245
+.roster-pane li {
246
+	width: 16px;
247
+	height: 16px;
248
+	float: right;
249
+	display: block;
250
+	margin-left: 3px;
251
+	background-repeat: no-repeat;
252
+	background-position: center;
253
+}
254
+
255
+.roster-pane li.role {
256
+	cursor: default;
257
+	display: none;
258
+}
259
+
260
+.roster-pane li.role-moderator {
261
+	background-image: url(img/roster/role-moderator.png);
262
+	display: block;
263
+}
264
+
265
+.roster-pane li.affiliation-owner {
266
+	background-image: url(img/roster/affiliation-owner.png);
267
+	display: block;
268
+}
269
+
270
+.roster-pane li.ignore {
271
+	background-image: url(img/roster/ignore.png);
272
+	display: none;
273
+}
274
+
275
+.roster-pane .status-ignored li.ignore {
276
+	display: block;
277
+}
278
+
279
+.roster-pane li.context {
280
+	color: #999;
281
+	text-align: center;
282
+	cursor: pointer;
283
+}
284
+
285
+.roster-pane li.context:hover {
286
+	background-color: #666;
287
+	border-radius: 4px;
288
+}
289
+
290
+.roster-pane .me li.context {
291
+	display: none;
292
+}
293
+
294
+.message-pane-wrapper {
295
+	clear: both;
296
+	overflow: auto;
297
+	position: absolute;
298
+	top: 0;
299
+	right: 0;
300
+	bottom: 0;
301
+	left: 0;
302
+	height: auto;
303
+	width: auto;
304
+	margin: 30px 200px 31px 0;
305
+	background-color: #eee;
306
+	font-size: 13px;
307
+	padding: 0 5px;
308
+}
309
+
310
+.message-pane {
311
+	padding-top: 1px;
312
+}
313
+
314
+.message-pane li {
315
+	cursor: default;
316
+	border-bottom: 1px solid #ccc;
317
+	box-shadow: 0 1px 0 0 white;
318
+}
319
+
320
+.message-pane small {
321
+	display: none;
322
+	color: #a00;
323
+	font-size: 10px;
324
+	position: absolute;
325
+	background-color: #f7f7f7;
326
+	text-align: center;
327
+	line-height: 20px;
328
+	margin: 4px 0;
329
+	padding: 0 5px;
330
+	right: 5px;
331
+}
332
+
333
+.message-pane li:hover {
334
+	background-color: #f7f7f7;
335
+}
336
+
337
+.message-pane li:hover small {
338
+	display: block;
339
+}
340
+
341
+.message-pane li>div {
342
+	overflow: auto;
343
+	padding: 2px 0 2px 130px;
344
+	line-height: 24px;
345
+	white-space: -o-pre-wrap; /* Opera */
346
+	word-wrap: break-word; /* Internet Explorer 5.5+ */
347
+}
348
+
349
+.message-pane li>div p {
350
+	margin: 0;
351
+}
352
+
353
+.message-pane .label {
354
+	font-weight: bold;
355
+	white-space: nowrap;
356
+	display: block;
357
+	margin-left: -130px;
358
+	width: 110px;
359
+	float: left;
360
+	overflow: hidden;
361
+	text-align: right;
362
+	color: black;
363
+}
364
+
365
+.message-pane .label:hover,
366
+.message-pane .label:focus {
367
+	color: inherit;
368
+}
369
+
370
+.message-pane .spacer {
371
+	color: #aaa;
372
+	font-weight: bold;
373
+	margin-left: -14px;
374
+	float: left;
375
+}
376
+
377
+.message-pane .subject, .message-pane .subject .label {
378
+	color: #a00;
379
+	font-weight: bold;
380
+}
381
+
382
+.message-pane .adminmessage {
383
+	color: #a00;
384
+	font-weight: bold;
385
+}
386
+
387
+.message-pane .infomessage {
388
+	color: #888;
389
+	font-style: italic;
390
+}
391
+
392
+.message-pane div>a {
393
+	color: #a00;
394
+}
395
+
396
+.message-pane a:hover {
397
+	text-decoration: underline;
398
+}
399
+
400
+.message-pane .emoticon {
401
+	vertical-align: text-bottom;
402
+	height: 15px;
403
+	width: 15px;
404
+}
405
+
406
+.message-form-wrapper {
407
+	position: fixed;
408
+	bottom: 0;
409
+	left: 0;
410
+	right: 0;
411
+	width: auto;
412
+	margin-right: 200px;
413
+	border-top: 1px solid #ccc;
414
+	background-color: white;
415
+	height: 31px;
416
+}
417
+
418
+.message-form {
419
+	position: fixed;
420
+	bottom: 0;
421
+	left: 0;
422
+	right: 0;
423
+	margin-right: 320px;
424
+	padding: 0;
425
+}
426
+
427
+.message-form input {
428
+	border: 0 none;
429
+	padding: 5px 10px;
430
+	font-size: 14px;
431
+	width: 100%;
432
+	display: block;
433
+	outline-width: 0;
434
+	background-color: white;
435
+}
436
+
437
+.message-form input.submit {
438
+	cursor: pointer;
439
+	background-color: #ccc;
440
+	color: #666;
441
+	position: fixed;
442
+	bottom: 0;
443
+	right: 0;
444
+	margin: 3px 203px 3px 3px;
445
+	padding: 0 10px;
446
+	width: auto;
447
+	font-size: 12px;
448
+	line-height: 12px;
449
+	height: 25px;
450
+	font-weight: bold;
451
+	border-radius: 3px;
452
+}
453
+
454
+#tooltip {
455
+	position: absolute;
456
+	z-index: 10;
457
+	display: none;
458
+	margin: 13px -18px -3px -2px;
459
+	color: #333;
460
+	font-size: 11px;
461
+	padding: 5px 0;
462
+}
463
+
464
+#tooltip div {
465
+	background-color: #f7f7f7;
466
+	padding: 2px 5px;
467
+	zoom: 1;
468
+	box-shadow: 0 1px 2px rgba(0, 0, 0, .75);
469
+}
470
+
471
+.arrow {
472
+	background: url(img/tooltip-arrows.gif) no-repeat left bottom;
473
+	height: 5px;
474
+	display: block;
475
+	position: relative;
476
+	z-index: 11;
477
+}
478
+
479
+.right-bottom .arrow-bottom {
480
+	background-position: right bottom;
481
+}
482
+
483
+.arrow-top {
484
+	display: none;
485
+	background-position: left top;
486
+}
487
+
488
+.right-top .arrow-top {
489
+	display: block;
490
+	background-position: right top;
491
+}
492
+
493
+.left-top .arrow-top {
494
+	display: block;
495
+}
496
+
497
+
498
+.left-top .arrow-bottom,
499
+.right-top .arrow-bottom {
500
+	display: none;
501
+}
502
+
503
+#context-menu {
504
+	position: absolute;
505
+	z-index: 10;
506
+	display: none;
507
+	padding: 5px 10px;
508
+	margin: 13px -28px -3px -12px;
509
+}
510
+
511
+#context-menu ul {
512
+	background-color: #f7f7f7;
513
+	color: #333;
514
+	font-size: 12px;
515
+	padding: 2px;
516
+	zoom: 1;
517
+	box-shadow: 0 1px 2px rgba(0, 0, 0, .75);
518
+}
519
+
520
+#context-menu li {
521
+	padding: 3px 5px 3px 20px;
522
+	line-height: 12px;
523
+	cursor: pointer;
524
+	margin-bottom: 2px;
525
+	background: 1px no-repeat;
526
+	white-space: nowrap;
527
+}
528
+
529
+#context-menu li:hover {
530
+	background-color: #ccc;
531
+}
532
+
533
+#context-menu li:last-child {
534
+	margin-bottom: 0;
535
+}
536
+
537
+#context-menu .private {
538
+	background-image: url(img/action/private.png);
539
+}
540
+
541
+#context-menu .ignore {
542
+	background-image: url(img/action/ignore.png);
543
+}
544
+
545
+#context-menu .unignore {
546
+	background-image: url(img/action/unignore.png);
547
+}
548
+
549
+#context-menu .kick {
550
+	background-image: url(img/action/kick.png);
551
+}
552
+
553
+#context-menu .ban {
554
+	background-image: url(img/action/ban.png);
555
+}
556
+
557
+#context-menu .subject {
558
+	background-image: url(img/action/subject.png);
559
+}
560
+
561
+#context-menu .emoticons {
562
+	padding-left: 5px;
563
+	width: 85px;
564
+	white-space: normal;
565
+}
566
+
567
+#context-menu .emoticons:hover {
568
+	background-color: transparent;
569
+}
570
+
571
+#context-menu .emoticons img {
572
+	cursor: pointer;
573
+	margin: 3px;
574
+	height: 15px;
575
+	width: 15px;
576
+}
577
+
578
+#chat-modal.modal-common {
579
+	background: #eee;
580
+	width: 300px;
581
+	padding: 20px 5px;
582
+	color: #333;
583
+	font-size: 16px;
584
+	position: fixed;
585
+	left: 50%;
586
+	top: 50%;
587
+	margin-left: -160px;
588
+	margin-top: -45px;
589
+	text-align: center;
590
+	display: none;
591
+	z-index: 100;
592
+	border: 5px solid #888;
593
+	border-radius: 5px;
594
+	box-shadow: 0 0 5px black;
595
+}
596
+
597
+#chat-modal-overlay {
598
+	position: absolute;
599
+	left: 0;
600
+	top: 0;
601
+	right: 0;
602
+	bottom: 0;
603
+	z-index: 90;
604
+	background-image: url(img/overlay.png);
605
+}
606
+
607
+#chat-modal.modal-login {
608
+	display: block;
609
+	margin-top: -100px;
610
+}
611
+
612
+#chat-modal-spinner {
613
+	display: none;
614
+	margin-left: 15px;
615
+}
616
+
617
+#chat-modal form {
618
+	margin: 15px 0;
619
+}
620
+
621
+#chat-modal label, #chat-modal input, #chat-modal select {
622
+	display: block;
623
+	float: left;
624
+	line-height: 26px;
625
+	font-size: 16px;
626
+	margin: 5px 0;
627
+}
628
+
629
+#chat-modal input, #chat-modal select {
630
+	padding: 2px;
631
+	line-height: 16px;
632
+	width: 150px;
633
+}
634
+
635
+#chat-modal input[type='text'],
636
+#chat-modal input[type='password'] {
637
+	background-color: white;
638
+	border: 1px solid #ccc;
639
+	padding: 4px;
640
+	font-size: 14px;
641
+	color: #333;
642
+}
643
+
644
+#chat-modal.login-with-domains {
645
+	width: 650px;
646
+	margin-left: -330px;
647
+}
648
+
649
+#chat-modal span.at-symbol {
650
+	float: left;
651
+	padding: 6px;
652
+	font-size: 14px;
653
+}
654
+
655
+#chat-modal select[name=domain] {
656
+	width: 320px;
657
+}
658
+
659
+#chat-modal label {
660
+	 text-align: right;
661
+	 padding-right: 1em;
662
+	 clear: both;
663
+	 width: 100px;
664
+}
665
+
666
+#chat-modal input.button {
667
+	float: none;
668
+	display: block;
669
+	margin: 5px auto;
670
+	clear: both;
671
+	position: relative;
672
+	top: 10px;
673
+	width: 200px;
674
+}
675
+
676
+#chat-modal .close {
677
+	position: absolute;
678
+	right: 0;
679
+	display: none;
680
+	padding: 0 5px;
681
+	margin: -17px 3px 0 0;
682
+	color: #999;
683
+	border-radius: 3px;
684
+}
685
+
686
+#chat-modal .close:hover {
687
+	color: #333;
688
+	background-color: #aaa;
689
+}
690
+
691
+/**
692
+ * Bootstrap Responsive Design styles
693
+ * It add styles to every element so we need to override some to keep the look of Candy
694
+ */
695
+*, :after, :before {
696
+	-webkit-box-sizing: content-box;
697
+	-moz-box-sizing: content-box;
698
+	box-sizing: content-box;
699
+}
700
+
701
+label {
702
+	font-weight: normal;
703
+}
704
+
705
+.label {
706
+	font-size: 100%;
707
+	font-weight: normal;
708
+	text-align: left;
709
+	line-height: inherit;
710
+	padding: 0;
711
+	color: inherit;
712
+}
713
+
714
+.close {
715
+	font-size: inherit;
716
+	line-height: inherit;
717
+	opacity: 1;
718
+	text-shadow: none;
719
+}
720
+
721
+#mobile-roster-icon {
722
+	display: none;
723
+}
724
+
725
+/*
726
+ * Responsive specific styles for devices under 600px
727
+ * Mainly changing the size of room, roster and message panes when opened / closed
728
+ */
729
+@media (max-width: 599px) {
730
+	.room-pane .message-pane-wrapper {
731
+		margin-right: 50px;
732
+	}
733
+
734
+	.room-pane:not(.open) .roster-pane {
735
+		right: -150px;
736
+	}
737
+
738
+	.roster-pane {
739
+		z-index: 10;
740
+	}
741
+
742
+	.message-pane li>div {
743
+		padding-left: 10px;
744
+	}
745
+
746
+	.message-pane li>div.infomessage {
747
+		padding-left: 30px;
748
+	}
749
+
750
+	.message-pane .label {
751
+		width: auto;
752
+		margin-left: 0;
753
+	}
754
+
755
+	.message-pane .spacer {
756
+		margin: 0 5px;
757
+	}
758
+
759
+	.room-pane:not(.open) .message-form-wrapper {
760
+		margin-right: 50px;
761
+	}
762
+
763
+	.room-pane:not(.open) .message-form {
764
+		margin-right: 150px;
765
+	}
766
+
767
+	.room-pane:not(.open) .message-form input.submit {
768
+		margin-right: 53px;
769
+	}
770
+
771
+	#mobile-roster-icon {
772
+		position: fixed;
773
+		top: 0;
774
+		right: 0;
775
+	}
776
+
777
+/*
778
+ * These are for the hamburger icon. The box-shadow adds the extra lines
779
+ */
780
+	.box-shadow-icon {
781
+		position: relative;
782
+		display: block;
783
+		width: 50px;
784
+		height: 30px;
785
+		cursor: pointer;
786
+	}
787
+
788
+	.box-shadow-icon:before {
789
+		content: "";
790
+		position: absolute;
791
+		left: 15px;
792
+		top: 9px;
793
+		width: 20px;
794
+		height: 2px;
795
+		background: #aaa;
796
+		box-shadow: 0 5px 0 0 #aaa, 0 10px 0 0 #aaa;
797
+	}
798
+
799
+	.box-shadow-icon:hover {
800
+		background: #222;
801
+	}
802
+}

BIN
tracim/tracim/public/assets/candy/candy/res/img/action/autoscroll-off.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/autoscroll-on.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/ban.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/emoticons.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/ignore.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/kick.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/menu.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/private.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/settings.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/sound-off.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/sound-on.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/statusmessage-off.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/statusmessage-on.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/subject.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/unignore.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/action/usercount.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Angel.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Angry.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Aww.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Aww_2.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Blushing.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Childish.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Confused.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Creepy.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Crying.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Cthulhu.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Cute.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Cute_Winking.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Devil.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Gah.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Gah_2.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Gasping.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Greedy.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Grinning.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Grinning_Winking.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Happy.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Happy_2.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Happy_3.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Heart.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Huh.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Huh_2.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Laughing.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Lips_Sealed.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Madness.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Malicious.png View File


+ 2 - 0
tracim/tracim/public/assets/candy/candy/res/img/emoticons/README View File

1
+Simple Smileys is a set of 49 clean, free as in freedom, Public Domain smileys.
2
+For more packages or older versions, visit http://simplesmileys.org

BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Sick.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Smiling.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Speechless.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Spiteful.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Stupid.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Sunglasses.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Terrified.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Thumb_Down.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Thumb_Up.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tired.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Laughing.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Left.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Up.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Up_Left.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Tongue_Out_Winking.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Uncertain.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Uncertain_2.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Unhappy.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/emoticons/Winking.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/favicon.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/modal-spinner.gif View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/overlay.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/roster/affiliation-owner.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/roster/ignore.png View File


BIN
tracim/tracim/public/assets/candy/candy/res/img/roster/role-moderator.png View File


+ 0 - 0
tracim/tracim/public/assets/candy/candy/res/img/tab-transitions.png View File


Some files were not shown because too many files changed in this diff