Browse Source

Merge branch 'master' into fix/234/apache_documentation

Adrien Panay 7 years ago
parent
commit
c3b9328f67
100 changed files with 3581 additions and 3830 deletions
  1. 6 0
      .gitignore
  2. 2 1
      .travis.yml
  3. 19 32
      README.md
  4. 0 185
      bin/pgtool
  5. 24 35
      doc/database.md
  6. 2 2
      doc/setting.md
  7. 24 0
      doc/test.md
  8. 1 1
      install/requirements.txt
  9. 8 7
      tracim/development.ini.base
  10. 43 3
      tracim/migration/versions/f3852e1349c4_all_files_only_on_disk.py
  11. 44 48
      tracim/setup.py
  12. 2 0
      tracim/test.ini
  13. 0 2
      tracim/tracim/command/user.py
  14. 16 6
      tracim/tracim/config/app_cfg.py
  15. 58 67
      tracim/tracim/controllers/admin/user.py
  16. 27 12
      tracim/tracim/controllers/admin/workspace.py
  17. 7 1
      tracim/tracim/controllers/page.py
  18. 0 1
      tracim/tracim/controllers/user.py
  19. 3 0
      tracim/tracim/fixtures/users_and_groups.py
  20. 2068 0
      tracim/tracim/i18n/en/LC_MESSAGES/tracim.po
  21. BIN
      tracim/tracim/i18n/fr/LC_MESSAGES/tracim.mo
  22. 0 24
      tracim/tracim/i18n/ru/LC_MESSAGES/pboard.po
  23. 41 29
      tracim/tracim/lib/auth/internal.py
  24. 9 6
      tracim/tracim/lib/email.py
  25. 38 8
      tracim/tracim/lib/notifications.py
  26. 1 5
      tracim/tracim/lib/userworkspace.py
  27. 19 3
      tracim/tracim/lib/workspace.py
  28. 63 50
      tracim/tracim/model/auth.py
  29. 9 1
      tracim/tracim/model/data.py
  30. 6 6
      tracim/tracim/public/assets/tinymce/LICENSE.TXT
  31. 755 653
      tracim/tracim/public/assets/tinymce/changelog.txt
  32. 1 0
      tracim/tracim/public/assets/tinymce/js/tinymce/jquery.tinymce.min.js
  33. 6 6
      tracim/tracim/public/assets/tinymce/js/tinymce/license.txt
  34. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/advlist/plugin.min.js
  35. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/anchor/plugin.min.js
  36. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/autolink/plugin.min.js
  37. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/autoresize/plugin.min.js
  38. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/autosave/plugin.min.js
  39. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/bbcode/plugin.min.js
  40. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/charmap/plugin.min.js
  41. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/code/plugin.min.js
  42. 138 0
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/codesample/css/prism.css
  43. 1 0
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/codesample/plugin.min.js
  44. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js
  45. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js
  46. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/directionality/plugin.min.js
  47. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/emoticons/plugin.min.js
  48. 0 8
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/example/dialog.html
  49. 0 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/example/plugin.min.js
  50. 0 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js
  51. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/fullpage/plugin.min.js
  52. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js
  53. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/help/img/logo.png
  54. 1 0
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/help/plugin.min.js
  55. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/hr/plugin.min.js
  56. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/image/plugin.min.js
  57. 2 0
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/imagetools/plugin.min.js
  58. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/importcss/plugin.min.js
  59. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js
  60. 0 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/layer/plugin.min.js
  61. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js
  62. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/link/plugin.min.js
  63. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/lists/plugin.min.js
  64. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/media/moxieplayer.swf
  65. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/media/plugin.min.js
  66. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js
  67. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/noneditable/plugin.min.js
  68. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js
  69. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/paste/plugin.min.js
  70. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/preview/plugin.min.js
  71. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/print/plugin.min.js
  72. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/save/plugin.min.js
  73. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js
  74. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js
  75. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js
  76. 2 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/table/plugin.min.js
  77. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/template/plugin.min.js
  78. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/textcolor/plugin.min.js
  79. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/textpattern/plugin.min.js
  80. 1 0
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/toc/plugin.min.js
  81. 96 77
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css
  82. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js
  83. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/visualchars/plugin.min.js
  84. 1 1
      tracim/tracim/public/assets/tinymce/js/tinymce/plugins/wordcount/plugin.min.js
  85. 0 147
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/Variables.less
  86. 0 1
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/content.inline.min.css
  87. 0 1
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/content.min.css
  88. 0 1
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/readme.md
  89. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.eot
  90. 0 1043
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.json
  91. 0 62
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.svg
  92. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.ttf
  93. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.woff
  94. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.eot
  95. 0 1191
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.json
  96. 0 63
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.svg
  97. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.ttf
  98. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.woff
  99. BIN
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/img/anchor.gif
  100. 0 0
      tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/img/loader.gif

+ 6 - 0
.gitignore View File

60
 # file depot
60
 # file depot
61
 tracim/depot/
61
 tracim/depot/
62
 
62
 
63
+# radicale
64
+tracim/radicale/
65
+
63
 # Site-local config file
66
 # Site-local config file
64
 development.ini
67
 development.ini
65
 track.js
68
 track.js
74
 # builded files from gulp scripts
77
 # builded files from gulp scripts
75
 /tracim/tracim/public/assets/dist/
78
 /tracim/tracim/public/assets/dist/
76
 /tracim/tracim/public/assets/js/main_es5.js
79
 /tracim/tracim/public/assets/js/main_es5.js
80
+
81
+# binary translation files
82
+*.mo

+ 2 - 1
.travis.yml View File

15
   mysql: "5.5"
15
   mysql: "5.5"
16
 
16
 
17
 install:
17
 install:
18
-  - cd tracim && python setup.py develop; cd -
18
+  - cd tracim && python setup.py develop && cd -
19
   - echo coveralls >> install/requirements.txt; echo
19
   - echo coveralls >> install/requirements.txt; echo
20
   - cat install/requirements.postgresql.txt >> install/requirements.txt; echo
20
   - cat install/requirements.postgresql.txt >> install/requirements.txt; echo
21
   - cat install/requirements.mysql.txt >> install/requirements.txt; echo
21
   - cat install/requirements.mysql.txt >> install/requirements.txt; echo
22
   - pip install -r install/requirements.txt; echo
22
   - pip install -r install/requirements.txt; echo
23
+  - cd tracim && python setup.py compile_catalog && cd -
23
 
24
 
24
 before_script:
25
 before_script:
25
   - cp ${TRAVIS_BUILD_DIR}/tracim/development.ini.base ${TRAVIS_BUILD_DIR}/tracim/development.ini
26
   - cp ${TRAVIS_BUILD_DIR}/tracim/development.ini.base ${TRAVIS_BUILD_DIR}/tracim/development.ini

+ 19 - 32
README.md View File

60
 
60
 
61
 ## Licence ##
61
 ## Licence ##
62
 
62
 
63
-Tracim is licensed under the terms of the
64
-[GNU Affero General Public License](http://www.gnu.org/licenses/agpl.txt) as published by the [Free Software Foundation](http://www.fsf.org/).
63
+Tracim is licensed under the terms of the [MIT License](https://opensource.org/licenses/mit-license.php)
65
 
64
 
66
 ## Technical information ##
65
 ## Technical information ##
67
 
66
 
122
     git clone https://github.com/tracim/tracim.git
121
     git clone https://github.com/tracim/tracim.git
123
     cd tracim/
122
     cd tracim/
124
 
123
 
125
-*Note: Now everything is documented to be executed from the tracim directory newly created.*
126
-
127
 ## Frontend dependencies ##
124
 ## Frontend dependencies ##
128
 
125
 
129
 [//]: # ( from https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)
126
 [//]: # ( from https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)
150
 
147
 
151
 Create a python virtual environment:
148
 Create a python virtual environment:
152
 
149
 
153
-    virtualenv -p /usr/bin/python3.4 tg2env
150
+    virtualenv -p /usr/bin/python3 tg2env
154
 
151
 
155
 Activate it in your terminal session (**all tracim command execution must be executed under this virtual environment**):
152
 Activate it in your terminal session (**all tracim command execution must be executed under this virtual environment**):
156
 
153
 
158
 
155
 
159
 Install Tracim and its dependencies:
156
 Install Tracim and its dependencies:
160
 
157
 
161
-    cd tracim && python setup.py develop && cd -
162
-    pip install -r install/requirements.txt
158
+    cd tracim/
159
+    python setup.py develop
160
+    pip install -r ../install/requirements.txt
163
 
161
 
164
 ## Configuration files ##
162
 ## Configuration files ##
165
 
163
 
166
 Create configuration files for a development environment and for `WsgiDAV`:
164
 Create configuration files for a development environment and for `WsgiDAV`:
167
 
165
 
168
-    cp tracim/development.ini.base tracim/development.ini
169
-    cp tracim/wsgidav.conf.sample tracim/wsgidav.conf
166
+    cp development.ini.base development.ini
167
+    cp wsgidav.conf.sample wsgidav.conf
168
+
169
+## Translation ##
170
+
171
+Compile translation binary files from available catalogs:
172
+
173
+    python setup.py compile_catalog
170
 
174
 
171
 ## Database schema ##
175
 ## Database schema ##
172
 
176
 
173
 The last step before running the application is to initialize the database
177
 The last step before running the application is to initialize the database
174
 schema. This is done through the following command:
178
 schema. This is done through the following command:
175
 
179
 
176
-    cd tracim && gearbox setup-app && cd -
177
-
178
-## Running the paste http server ##
180
+    gearbox setup-app
179
 
181
 
180
-    gearbox serve
182
+## Running Tracim ##
181
 
183
 
182
-While developing, the following command may be more convenient:
184
+The two parameters are optional but useful to reload the server upon code changes and to get debug data:
183
 
185
 
184
     gearbox serve --reload --debug
186
     gearbox serve --reload --debug
185
 
187
 
186
-## Running the standalone server ##
187
-
188
-Now you can run the standalone server:
189
-
190
-    ./bin/run.sh
191
-
192
-Which should result in something like this:
193
-
194
-    13:53:49,982 INFO  [gearbox] Starting subprocess with file monitor
195
-    13:53:50,646 WARNI [py.warnings] /tmp/tracim/protov1/tg2env/lib/python3.2/site-packages/tw2/core/validation.py:12: ImportWarning: Not importing directory '/tmp/tracim/protov1/tg2env/lib/python3.2/site-packages/tw2/core/i18n': missing __init__.py
196
-      from .i18n import _
197
-
198
-    13:53:50,862 INFO  [gearbox] Starting server in PID 11174.
199
-    Starting HTTP server on http://0.0.0.0:8080
200
-
201
 You can now enter the application at
188
 You can now enter the application at
202
-[http://localhost:8080](http://localhost:8080) and login with admin user.
189
+[http://127.0.0.1:8080](http://127.0.0.1:8080) and login with admin user:
203
 
190
 
204
- * user : admin@admin.admin
205
- * password : admin@admin.admin
191
+ * user : `admin@admin.admin`
192
+ * password : `admin@admin.admin`
206
 
193
 
207
 If admin user not created yet, execute following command:
194
 If admin user not created yet, execute following command:
208
 
195
 

+ 0 - 185
bin/pgtool View File

1
-#!/usr/bin/python
2
-
3
-import os
4
-import sys
5
-
6
-# print 'Number of arguments:', len(sys.argv), 'arguments.'
7
-# print 'Argument List:', str(sys.argv)
8
-
9
-actions = [
10
-    'help',
11
-    'create_database',
12
-    'create_user',
13
-    'delete_database',
14
-    'delete_user',
15
-    'grant_all_privileges',
16
-    'test_connection'
17
-]
18
-
19
-def usage():
20
-    print('')
21
-    print('USAGE: '+__file__+' ['+'|'.join(action for action in actions)+'] [parameters]')
22
-    print('')
23
-    print('    Role management')
24
-    print('')
25
-    print('        '+__file__+' create_user <user_name> <password>')
26
-    print('        '+__file__+' delete_user <user_name>')
27
-    print('')
28
-    print('    Database management')
29
-    print('')
30
-    print('        '+__file__+' create_database <database_name>')
31
-    print('        '+__file__+' delete_database <database_name> --force')
32
-    print('        '+__file__+' grant_all_privileges <database_name> <user_name>')
33
-    print('')
34
-    print('    Other')
35
-    print('')
36
-    print('        '+__file__+' test_connection <database_name> <user_name> <password> [<hostname>]')
37
-    print('')
38
-    print('')
39
-    print('NOTES:')
40
-    print('    - this tool is intended to be used as \'postgres\' system user')
41
-    print('    - default hostname is 127.0.0.1')
42
-    print('')
43
-    print('')
44
-
45
-
46
-def show_help_and_exit():
47
-    usage()
48
-    exit()
49
-
50
-def on_result_and_exit(error_code):
51
-    if error_code==0:
52
-        print('')
53
-        print('')
54
-        exit(0)
55
-    
56
-    print('ERRROR')
57
-    print('')
58
-    print('')
59
-    exit(error_code)
60
-
61
-#######
62
-
63
-
64
-if len(sys.argv)<=1:
65
-    show_help_and_exit()
66
-    
67
-if sys.argv[1] not in actions:
68
-    print('Unknown command %s'%sys.argv[1])
69
-    show_help_and_exit()
70
-    
71
-if sys.argv[1]=='help':
72
-    show_help_and_exit()
73
-
74
-########################################
75
-#
76
-# BELOW ARE STANDARD ACTIONS
77
-#
78
-########################################
79
-
80
-print('')
81
-if sys.argv[1]=='create_user':
82
-    if len(sys.argv)!=4:
83
-        show_help_and_exit()
84
-    user_name = sys.argv[2]
85
-    user_pass = sys.argv[3]
86
-    
87
-    print('PG # CREATE USER')
88
-    print('----------------')
89
-    print('name:       '+user_name)
90
-    print('password:   XXX')
91
-
92
-    sql = '"CREATE USER %s WITH PASSWORD \'%s\';"' %(user_name, user_pass)
93
-    result = os.system('echo %s|psql' % (sql))
94
-    on_result_and_exit(result)
95
-
96
-
97
-if sys.argv[1]=='delete_user':
98
-    if len(sys.argv)!=3:
99
-        show_help_and_exit()
100
-
101
-    user_name = sys.argv[2]
102
-    
103
-    print('PG # DELETE USER')
104
-    print('------------------')
105
-    print('name:       '+user_name)
106
-    print('')
107
-
108
-    sql = '"DROP ROLE %s;"' %(user_name)
109
-    result = os.system('echo %s|psql' % (sql))
110
-    on_result_and_exit(result)
111
-
112
-
113
-if sys.argv[1]=='create_database':
114
-    if len(sys.argv)!=3:
115
-        show_help_and_exit()
116
-    name = sys.argv[2]
117
-
118
-    print('PG # CREATE DATABASE')
119
-    print('--------------------')
120
-    print('name:       '+name)
121
-    print('')
122
-    
123
-    sql = '"CREATE DATABASE %s;"' %(name)
124
-    result = os.system('echo %s|psql' % (sql))
125
-    on_result_and_exit(result)
126
-
127
-if sys.argv[1]=='delete_database':
128
-    if len(sys.argv)!=4:
129
-        show_help_and_exit()
130
-    name = sys.argv[2]
131
-    force = sys.argv[3]
132
-    
133
-    print('PG # DROP DATABASE')
134
-    print('------------------')
135
-    print('name:       '+name)
136
-    print('')
137
-    
138
-    if force!='--force':
139
-        print('Add --force option in order to drop a database')
140
-        on_result_and_exit(-1)
141
-        
142
-    sql = '"DROP DATABASE %s;"' %(name)
143
-    result = os.system('echo %s|psql' % (sql))
144
-    on_result_and_exit(result)
145
-
146
-
147
-if sys.argv[1]=='grant_all_privileges':
148
-    if len(sys.argv)!=4:
149
-        show_help_and_exit()
150
-    database_name = sys.argv[2]
151
-    user_name = sys.argv[3]
152
-    
153
-    print('PG # GRANT ALL PRIVILEGES ON DATABASE')
154
-    print('-------------------------------------')
155
-    print('database:   '+database_name)
156
-    print('user:       '+user_name)
157
-    print('')
158
-    
159
-    sql = '"GRANT ALL PRIVILEGES ON DATABASE %s to %s;"' % (database_name, user_name)
160
-    result = os.system('echo %s|psql' % (sql))
161
-    on_result_and_exit(result)
162
-
163
-if sys.argv[1]=='test_connection':
164
-    if len(sys.argv)<5:
165
-        show_help_and_exit()
166
-    
167
-    hostname = '127.0.0.1'
168
-    database_name = sys.argv[2]
169
-    user_name = sys.argv[3]
170
-    password = sys.argv[4]
171
-    
172
-    if len(sys.argv)>=6:
173
-        hostname = sys.argv[5]
174
-    
175
-    print('PG # CONNECT TO DATABASE')
176
-    print('------------------------')
177
-    print('server:     '+hostname)
178
-    print('database:   '+database_name)
179
-    print('username:   '+user_name)
180
-    print('')
181
-    
182
-    result = os.system('export PGPASSWORD=%s; echo "SELECT NOW();"|psql -h %s -U %s %s' % (password, hostname, user_name, database_name))
183
-    on_result_and_exit(result)
184
-
185
-

+ 24 - 35
doc/database.md View File

1
 
1
 
2
+
2
 # Database #
3
 # Database #
3
 
4
 
4
 *Note: This page helps you setting up a **development** environment for `Tracim` and its ORM `SQLAlchemy` with `PostgreSQL` and `MySQL`. To set up a **production** environment, changing default database name, database user name and moreover its password is mandatory.*
5
 *Note: This page helps you setting up a **development** environment for `Tracim` and its ORM `SQLAlchemy` with `PostgreSQL` and `MySQL`. To set up a **production** environment, changing default database name, database user name and moreover its password is mandatory.*
11
 
12
 
12
 ### Minimalist introduction to PostgreSQL ###
13
 ### Minimalist introduction to PostgreSQL ###
13
 
14
 
14
-If you already use/know `PostgreSQL`, you can directly go to *Test the database access*.
15
-
16
 #### Driver ####
15
 #### Driver ####
17
 
16
 
18
 Tracim uses the `psycopg2` driver between the `SQLAlchemy` ORM and the `PostgreSQL` RDBMS. Run the following command to install the right version:
17
 Tracim uses the `psycopg2` driver between the `SQLAlchemy` ORM and the `PostgreSQL` RDBMS. Run the following command to install the right version:
32
 
31
 
33
 #### Creating a user and associated database ####
32
 #### Creating a user and associated database ####
34
 
33
 
35
-You need a database and associated user/password. Tracim comes with `pgtool`, tool that will make this step easy:
36
-
37
-    ./bin/pgtool help
38
-
39
-Run the following self explanatory commands:
34
+Create user and database:
40
 
35
 
41
-    sudo su postgres
42
-    ./bin/pgtool create_user tracimuser tracimpassword
43
-    ./bin/pgtool create_database tracimdb
44
-    ./bin/pgtool grant_all_privileges tracimdb tracimuser
45
-    exit
36
+    sudo --user=postgres psql \
37
+         --command="CREATE USER tracimuser WITH PASSWORD 'tracimpassword';" \
38
+         --command="CREATE DATABASE tracimdb OWNER tracimuser;"
46
 
39
 
47
-#### Test the database access ####
40
+Test the database access:
48
 
41
 
49
-So, now you have a database and an associated user/password. A good habit is to test things before to use them, that's why we want to test the database access. This is easily done with Tracim `pgtool`:
42
+    psql --username=tracimuser --password --host=localhost --dbname=tracimdb \
43
+         --command="SELECT NOW();"
50
 
44
 
51
-    ./bin/pgtool test_connection tracimdb tracimuser tracimpassword 127.0.0.1
52
-
53
-The result is similar to the following :
54
-
55
-    PG # CONNECT TO DATABASE
56
-    ------------------------
57
-    server:     127.0.0.1
58
-    database:   tracimdb
59
-    username:   bibi
45
+Success output:
60
 
46
 
61
                   now
47
                   now
62
     -------------------------------
48
     -------------------------------
63
-     2014-11-10 09:40:23.306199+01
64
-    (1 row)
49
+    2017-08-25 15:46:41.105865+02
50
+    (1 ligne)
51
+
52
+Failure output:
65
 
53
 
66
-In case of failure, you would get something like this:
54
+    psql: FATAL:  password authentication failed for user "tracimuser"
55
+    FATAL:  password authentication failed for user "tracimuser"
67
 
56
 
68
-    PG # CONNECT TO DATABASE
69
-    ------------------------
70
-    server:     127.0.0.1
71
-    database:   tracimdb
72
-    username:   bibi
57
+In this case, delete the user and database and start over:
73
 
58
 
74
-    psql: FATAL:  password authentication failed for user "bibi"
75
-    FATAL:  password authentication failed for user "bibi"
76
-    ERRROR
59
+    sudo --user=postgres psql \
60
+         --command="DROP USER tracimuser;" \
61
+         --command="DROP DATABASE tracimdb;"
77
 
62
 
78
-In this case, delete the user and database you previously created, using `pgtool`, and do it again. Do not forget to run the `grant_all_rights` command!
63
+[//]: # (The following lines are only necessary to fix permissions on an existing database:)
64
+[//]: # (    sudo --user=postgres psql \)
65
+[//]: # (         --dbname=tracimdb \)
66
+[//]: # (         --command="GRANT ALL PRIVILEGES ON DATABASE tracimdb TO tracimuser;" \)
67
+[//]: # (         --command="GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO tracimuser;")
79
 
68
 
80
 ## MySQL ##
69
 ## MySQL ##
81
 
70
 

+ 2 - 2
doc/setting.md View File

45
 
45
 
46
 ## LDAP ##
46
 ## LDAP ##
47
 
47
 
48
-To use LDAP authentication, set `auth_type` parameter to `ldap`:
48
+`Tracim` is able to authenticate users via `LDAP`. To enable this feature, start by setting the authentication type as follow:
49
 
49
 
50
     auth_type = ldap
50
     auth_type = ldap
51
 
51
 
52
-Then add LDAP parameters
52
+Then add these `LDAP` parameters:
53
 
53
 
54
     # LDAP server address
54
     # LDAP server address
55
     ldap_url = ldap://localhost:389
55
     ldap_url = ldap://localhost:389

+ 24 - 0
doc/test.md View File

1
+# Running tests #
2
+
3
+## Intro ##
4
+
5
+Tests on `Tracim` lays on:
6
+- [`TurboGears` tests](http://turbogears.readthedocs.io/en/tg2.3.7/turbogears/testing.html)
7
+- [`nose` test tool](http://nose.readthedocs.io/en/latest/).
8
+
9
+In order to use the `nosetests [...]` commands, change your current directory to be `tracim/` from the root of the project, also usually named `tracim/` :
10
+
11
+    (tg2env) user@host:~/tracim$ cd tracim/
12
+    (tg2env) user@host:~/tracim/tracim$
13
+
14
+## All tests ##
15
+
16
+    nosetests
17
+
18
+## One test ##
19
+
20
+    nosetests tracim/tests/models/test_content.py:TestContent.test_query
21
+
22
+## Allow debugger ##
23
+
24
+    nosetests -s

+ 1 - 1
install/requirements.txt View File

38
 python-dateutil==2.5.3
38
 python-dateutil==2.5.3
39
 python-editor==1.0.1
39
 python-editor==1.0.1
40
 python-ldap-test==0.2.1
40
 python-ldap-test==0.2.1
41
-repoze.lru==0.6
41
+repoze.lru==0.7
42
 repoze.who==2.3
42
 repoze.who==2.3
43
 requests==2.10.0
43
 requests==2.10.0
44
 six==1.8.0
44
 six==1.8.0

+ 8 - 7
tracim/development.ini.base View File

32
 [app:main]
32
 [app:main]
33
 use = egg:tracim
33
 use = egg:tracim
34
 full_stack = true
34
 full_stack = true
35
-# You can set french as default language by uncommenting next line
36
-# i18n.lang = fr
35
+# Fallback language if browser and tracim can't find one they agree on.
36
+i18n.lang = en
37
 
37
 
38
 cache_dir = %(here)s/data
38
 cache_dir = %(here)s/data
39
 # preview generator cache directory
39
 # preview generator cache directory
184
 website.server_name = 127.0.0.1
184
 website.server_name = 127.0.0.1
185
 
185
 
186
 email.notification.activated = False
186
 email.notification.activated = False
187
+# email.notification.log_file_path = /tmp/mail-notifications.log
187
 # email notifications can be sent with the user_id added as an identifier
188
 # email notifications can be sent with the user_id added as an identifier
188
 # this way email clients like Thunderbird will be able to distinguish
189
 # this way email clients like Thunderbird will be able to distinguish
189
 # notifications generated by a user or another one
190
 # notifications generated by a user or another one
190
 email.notification.from.email = noreply+{user_id}@trac.im
191
 email.notification.from.email = noreply+{user_id}@trac.im
191
 email.notification.from.default_label = Tracim Notifications
192
 email.notification.from.default_label = Tracim Notifications
192
-email.notification.content_update.template.html = ./tracim/templates/mail/content_update_body_html.mak
193
-email.notification.content_update.template.text = ./tracim/templates/mail/content_update_body_text.mak
194
-email.notification.created_account.template.html = ./tracim/templates/mail/created_account_body_html.mak
195
-email.notification.created_account.template.text = ./tracim/templates/mail/created_account_body_text.mak
193
+email.notification.content_update.template.html = %(here)s/tracim/templates/mail/content_update_body_html.mak
194
+email.notification.content_update.template.text = %(here)s/tracim/templates/mail/content_update_body_text.mak
195
+email.notification.created_account.template.html = %(here)s/tracim/templates/mail/created_account_body_html.mak
196
+email.notification.created_account.template.text = %(here)s/tracim/templates/mail/created_account_body_text.mak
196
 # Note: items between { and } are variable names. Do not remove / rename them
197
 # Note: items between { and } are variable names. Do not remove / rename them
197
 email.notification.content_update.subject = [{website_title}] [{workspace_label}] {content_label} ({content_status_label})
198
 email.notification.content_update.subject = [{website_title}] [{workspace_label}] {content_label} ({content_status_label})
198
 email.notification.created_account.subject = [{website_title}] Created account
199
 email.notification.created_account.subject = [{website_title}] Created account
215
 # radicale.server.host = 0.0.0.0
216
 # radicale.server.host = 0.0.0.0
216
 # radicale.server.port = 5232
217
 # radicale.server.port = 5232
217
 # radicale.server.ssl = false
218
 # radicale.server.ssl = false
218
-# radicale.server.filesystem.folder = ./radicale/collections
219
+radicale.server.filesystem.folder = %(here)s/radicale/collections/
219
 # radicale.server.allow_origin = *
220
 # radicale.server.allow_origin = *
220
 # radicale.server.realm_message = Tracim Calendar - Password Required
221
 # radicale.server.realm_message = Tracim Calendar - Password Required
221
 ## url can be extended like http://127.0.0.1:5232/calendar
222
 ## url can be extended like http://127.0.0.1:5232/calendar

+ 43 - 3
tracim/migration/versions/f3852e1349c4_all_files_only_on_disk.py View File

1
-"""all files only on disk
1
+"""all files only on disk.
2
 
2
 
3
 Revision ID: f3852e1349c4
3
 Revision ID: f3852e1349c4
4
 Revises: 913efdf409e5
4
 Revises: 913efdf409e5
6
 
6
 
7
 """
7
 """
8
 
8
 
9
+from alembic import context
9
 from alembic import op
10
 from alembic import op
11
+
12
+from depot.fields.sqlalchemy import UploadedFileField
13
+from depot.manager import DepotManager
14
+
10
 import sqlalchemy as sa
15
 import sqlalchemy as sa
11
 
16
 
12
 # revision identifiers, used by Alembic.
17
 # revision identifiers, used by Alembic.
14
 down_revision = '913efdf409e5'
19
 down_revision = '913efdf409e5'
15
 
20
 
16
 
21
 
22
+def configure_depot():
23
+    """Configure Depot."""
24
+    depot_storage_name = context.config.get_main_option('depot_storage_name')
25
+    depot_storage_path = context.config.get_main_option('depot_storage_dir')
26
+    depot_storage_settings = {'depot.storage_path': depot_storage_path}
27
+    DepotManager.configure(
28
+        depot_storage_name,
29
+        depot_storage_settings,
30
+    )
31
+
32
+
33
+revision_helper = sa.Table(
34
+    'content_revisions',
35
+    sa.MetaData(),
36
+    sa.Column('revision_id', sa.Integer, primary_key=True),
37
+    sa.Column('file_content', sa.LargeBinary),
38
+    sa.Column('depot_file', UploadedFileField, nullable=True),
39
+    sa.Column('type', sa.String(32), nullable=False),
40
+)
41
+
42
+
17
 def upgrade():
43
 def upgrade():
18
-    """Drops the file content from revision."""
44
+    """Drop the file content from revision."""
19
     with op.batch_alter_table('content_revisions') as batch_op:
45
     with op.batch_alter_table('content_revisions') as batch_op:
20
         batch_op.drop_column('file_content')
46
         batch_op.drop_column('file_content')
21
 
47
 
22
 
48
 
23
 def downgrade():
49
 def downgrade():
24
-    """Adds the file content in revision."""
50
+    """Add the file content in revision."""
25
     with op.batch_alter_table('content_revisions') as batch_op:
51
     with op.batch_alter_table('content_revisions') as batch_op:
26
         batch_op.add_column(sa.Column('file_content', sa.LargeBinary))
52
         batch_op.add_column(sa.Column('file_content', sa.LargeBinary))
53
+
54
+    configure_depot()
55
+    depot = DepotManager.get()
56
+    connection = op.get_bind()
57
+    select_query = revision_helper.select() \
58
+        .where(revision_helper.c.type == 'file') \
59
+        .where(revision_helper.c.depot_file.isnot(None))
60
+    files = connection.execute(select_query).fetchall()
61
+    for file in files:
62
+        depot_file_content = depot.get(file.depot_file).read()
63
+        update_query = revision_helper.update() \
64
+            .where(revision_helper.c.revision_id == file.revision_id) \
65
+            .values(file_content=depot_file_content)
66
+        connection.execute(update_query)

+ 44 - 48
tracim/setup.py View File

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
-#quickstarted Options:
3
-#
4
-# sqlalchemy: True
5
-# auth:       sqlalchemy
6
-# mako:       True
7
-#
8
-#
9
-
10
-#This is just a work-around for a Python2.7 issue causing
11
-#interpreter crash at exit when trying to log an info message.
12
-try:
13
-    import logging
14
-    import multiprocessing
15
-except:
16
-    pass
17
-
18
-import sys
19
-py_version = sys.version_info[:2]
20
-
2
+# quickstarted Options:
3
+#  sqlalchemy: True
4
+#  auth:       sqlalchemy
5
+#  mako:       True
21
 try:
6
 try:
22
     from setuptools import setup, find_packages
7
     from setuptools import setup, find_packages
23
 except ImportError:
8
 except ImportError:
25
     use_setuptools()
10
     use_setuptools()
26
     from setuptools import setup, find_packages
11
     from setuptools import setup, find_packages
27
 
12
 
13
+
28
 classifiers = [
14
 classifiers = [
29
-    "License :: OSI Approved :: GNU Affero General Public License v3",
15
+    "License :: OSI Approved :: MIT License",
30
     "Programming Language :: Python",
16
     "Programming Language :: Python",
31
     "Programming Language :: Python :: 3.4",
17
     "Programming Language :: Python :: 3.4",
32
     "Programming Language :: Python :: 3.5",
18
     "Programming Language :: Python :: 3.5",
33
     "Programming Language :: Python :: 3.6",
19
     "Programming Language :: Python :: 3.6",
34
 ]
20
 ]
35
 
21
 
36
-testpkgs=['WebTest >= 1.2.3',
37
-               'nose',
38
-               'coverage',
39
-               'gearbox'
40
-               ]
22
+testpkgs = [
23
+    'WebTest >= 1.2.3',
24
+    'nose',
25
+    'coverage',
26
+    'gearbox',
27
+]
41
 
28
 
42
-install_requires=[
43
-    "TurboGears2==2.3.7",
44
-    "Genshi",
45
-    "Mako",
46
-    "zope.sqlalchemy >= 0.4",
47
-    "sqlalchemy",
48
-    "alembic",
49
-    "repoze.who",
50
-    "who_ldap>=3.2.1",
51
-    "python-ldap-test==0.2.1",
52
-    "unicode-slugify==0.1.3",
53
-    "pytz==2014.7",
29
+install_requires = [
30
+    'TurboGears2==2.3.7',
31
+    'Genshi',
32
+    'Mako',
33
+    'zope.sqlalchemy >= 0.4',
34
+    'sqlalchemy',
35
+    'alembic',
36
+    'repoze.who',
37
+    'who_ldap>=3.2.1',
38
+    'python-ldap-test==0.2.1',
39
+    'unicode-slugify==0.1.3',
40
+    'pytz==2014.7',
54
     'rq==0.7.1',
41
     'rq==0.7.1',
55
     'filedepot>=0.5.0',
42
     'filedepot>=0.5.0',
56
-    'preview-generator'
57
-    ]
43
+    'preview-generator',
44
+]
58
 
45
 
59
 setup(
46
 setup(
60
     name='tracim',
47
     name='tracim',
61
     version='1.0.0',
48
     version='1.0.0',
62
-    description='Tracim is plateform software designed to improve traceability and productivity in collaborative work.',
49
+    description=(
50
+        'Tracim is a plateform software designed to improve '
51
+        'traceability and productivity in collaborative work.'
52
+    ),
63
     author='Damien ACCORSI',
53
     author='Damien ACCORSI',
64
     author_email='damien.accorsi@free.fr',
54
     author_email='damien.accorsi@free.fr',
65
     url='https://github.com/tracim/tracim',
55
     url='https://github.com/tracim/tracim',
68
     include_package_data=True,
58
     include_package_data=True,
69
     test_suite='nose.collector',
59
     test_suite='nose.collector',
70
     tests_require=testpkgs,
60
     tests_require=testpkgs,
71
-    package_data={'tracim': ['i18n/*/LC_MESSAGES/*.mo',
72
-                                 'templates/*/*',
73
-                                 'public/*/*']},
74
-    message_extractors={'tracim': [
61
+    package_data={
62
+        'tracim': [
63
+            'i18n/*/LC_MESSAGES/*.mo',
64
+            'templates/*/*',
65
+            'public/*/*',
66
+        ]
67
+    },
68
+    message_extractors={
69
+        'tracim': [
75
             ('**.py', 'python', None),
70
             ('**.py', 'python', None),
76
             ('templates/**.mak', 'mako', {'input_encoding': 'utf-8'}),
71
             ('templates/**.mak', 'mako', {'input_encoding': 'utf-8'}),
77
-            ('public/**', 'ignore', None)]},
78
-
72
+            ('public/**', 'ignore', None)
73
+        ]
74
+    },
79
     entry_points={
75
     entry_points={
80
         'paste.app_factory': [
76
         'paste.app_factory': [
81
             'main = tracim.config.middleware:make_app'
77
             'main = tracim.config.middleware:make_app'
92
     },
88
     },
93
     dependency_links=[
89
     dependency_links=[
94
         'http://github.com/algoo/preview-generator/tarball/master#egg=preview_generator-1.0',
90
         'http://github.com/algoo/preview-generator/tarball/master#egg=preview_generator-1.0',
95
-        ],
96
-    zip_safe=False
91
+    ],
92
+    zip_safe=False,
97
 )
93
 )

+ 2 - 0
tracim/test.ini View File

15
 radicale.client.base_url.host = http://localhost:15232
15
 radicale.client.base_url.host = http://localhost:15232
16
 radicale.client.base_url.prefix = /
16
 radicale.client.base_url.prefix = /
17
 email.notification.activated = false
17
 email.notification.activated = false
18
+email.notification.log_file_path = /tmp/mail-notifications-test.log
18
 
19
 
19
 [server:main]
20
 [server:main]
20
 use = egg:gearbox#wsgiref
21
 use = egg:gearbox#wsgiref
22
 port = 8080
23
 port = 8080
23
 
24
 
24
 [app:main]
25
 [app:main]
26
+depot_storage_dir = /tmp/tracim_tests_depot/
25
 # sqlalchemy.url = postgresql://tracimuser:tracimpassword@127.0.0.1:5432/tracimdb_test?client_encoding=utf8
27
 # sqlalchemy.url = postgresql://tracimuser:tracimpassword@127.0.0.1:5432/tracimdb_test?client_encoding=utf8
26
 # sqlalchemy.url = mysql+pymysql://tracimuser:tracimpassword@127.0.0.1/tracimdb_test
28
 # sqlalchemy.url = mysql+pymysql://tracimuser:tracimpassword@127.0.0.1/tracimdb_test
27
 sqlalchemy.url = sqlite:///tracimdb_test.sqlite
29
 sqlalchemy.url = sqlite:///tracimdb_test.sqlite

+ 0 - 2
tracim/tracim/command/user.py View File

111
 
111
 
112
         try:
112
         try:
113
             user = User(email=login, password=password, **kwargs)
113
             user = User(email=login, password=password, **kwargs)
114
-            user.update_webdav_digest_auth(password)
115
             self._session.add(user)
114
             self._session.add(user)
116
             self._session.flush()
115
             self._session.flush()
117
 
116
 
130
     def _update_password_for_login(self, login, password):
129
     def _update_password_for_login(self, login, password):
131
         user = self._user_api.get_one_by_email(login)
130
         user = self._user_api.get_one_by_email(login)
132
         user.password = password
131
         user.password = password
133
-        user.update_webdav_digest_auth(password)
134
         self._session.flush()
132
         self._session.flush()
135
         transaction.commit()
133
         transaction.commit()
136
 
134
 

+ 16 - 6
tracim/tracim/config/app_cfg.py View File

211
 
211
 
212
     def __init__(self):
212
     def __init__(self):
213
         """Parse configuration file."""
213
         """Parse configuration file."""
214
+        mandatory_msg = \
215
+            'ERROR: {} configuration is mandatory. Set it before continuing.'
214
         self.DEPOT_STORAGE_DIR = tg.config.get(
216
         self.DEPOT_STORAGE_DIR = tg.config.get(
215
             'depot_storage_dir',
217
             'depot_storage_dir',
216
         )
218
         )
217
         if not self.DEPOT_STORAGE_DIR:
219
         if not self.DEPOT_STORAGE_DIR:
218
             raise Exception(
220
             raise Exception(
219
-                'ERROR: depot_storage_dir configuration is mandatory. '
220
-                'Set it before continuing.'
221
+                mandatory_msg.format('depot_storage_dir')
221
             )
222
             )
222
         self.DEPOT_STORAGE_NAME = tg.config.get(
223
         self.DEPOT_STORAGE_NAME = tg.config.get(
223
             'depot_storage_name',
224
             'depot_storage_name',
224
         )
225
         )
225
         if not self.DEPOT_STORAGE_NAME:
226
         if not self.DEPOT_STORAGE_NAME:
226
             raise Exception(
227
             raise Exception(
227
-                'ERROR: depot_storage_name configuration is mandatory. '
228
-                'Set it before continuing.'
228
+                mandatory_msg.format('depot_storage_name')
229
             )
229
             )
230
         self.PREVIEW_CACHE_DIR = tg.config.get(
230
         self.PREVIEW_CACHE_DIR = tg.config.get(
231
             'preview_cache_dir',
231
             'preview_cache_dir',
339
         self.EMAIL_NOTIFICATION_SMTP_PASSWORD = tg.config.get(
339
         self.EMAIL_NOTIFICATION_SMTP_PASSWORD = tg.config.get(
340
             'email.notification.smtp.password',
340
             'email.notification.smtp.password',
341
         )
341
         )
342
+        self.EMAIL_NOTIFICATION_LOG_FILE_PATH = tg.config.get(
343
+            'email.notification.log_file_path',
344
+            None,
345
+        )
342
 
346
 
343
         self.TRACKER_JS_PATH = tg.config.get(
347
         self.TRACKER_JS_PATH = tg.config.get(
344
             'js_tracker_path',
348
             'js_tracker_path',
382
         ))
386
         ))
383
         self.RADICALE_SERVER_FILE_SYSTEM_FOLDER = tg.config.get(
387
         self.RADICALE_SERVER_FILE_SYSTEM_FOLDER = tg.config.get(
384
             'radicale.server.filesystem.folder',
388
             'radicale.server.filesystem.folder',
385
-            './radicale/collections',
386
         )
389
         )
390
+        if not self.RADICALE_SERVER_FILE_SYSTEM_FOLDER:
391
+            raise Exception(
392
+                mandatory_msg.format('radicale.server.filesystem.folder')
393
+            )
387
         self.RADICALE_SERVER_ALLOW_ORIGIN = tg.config.get(
394
         self.RADICALE_SERVER_ALLOW_ORIGIN = tg.config.get(
388
             'radicale.server.allow_origin',
395
             'radicale.server.allow_origin',
389
             None,
396
             None,
404
 
411
 
405
         self.RADICALE_CLIENT_BASE_URL_HOST = tg.config.get(
412
         self.RADICALE_CLIENT_BASE_URL_HOST = tg.config.get(
406
             'radicale.client.base_url.host',
413
             'radicale.client.base_url.host',
407
-            None,
414
+            'http://{}:{}'.format(
415
+                self.RADICALE_SERVER_HOST,
416
+                self.RADICALE_SERVER_PORT,
417
+            ),
408
         )
418
         )
409
 
419
 
410
         self.RADICALE_CLIENT_BASE_URL_PREFIX = tg.config.get(
420
         self.RADICALE_CLIENT_BASE_URL_PREFIX = tg.config.get(

+ 58 - 67
tracim/tracim/controllers/admin/user.py View File

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
-import uuid
3
 import random
2
 import random
4
 
3
 
5
 import pytz
4
 import pytz
6
-from tracim import model  as pm
5
+from tracim import model as pm
7
 
6
 
8
-from sprox.tablebase import TableBase
9
-from sprox.formbase import EditableForm, AddRecordForm
10
-from sprox.fillerbase import TableFiller, EditFormFiller
11
-from tracim.config.app_cfg import CFG
12
-from tw2 import forms as tw2f
13
 import tg
7
 import tg
14
 from tg import predicates
8
 from tg import predicates
15
 from tg import tmpl_context
9
 from tg import tmpl_context
16
 from tg.i18n import ugettext as _
10
 from tg.i18n import ugettext as _
17
 
11
 
18
-from sprox.widgets import PropertyMultipleSelectField
19
-from sprox._compat import unicode_text
20
-
21
-from formencode import Schema
22
-from formencode.validators import FieldsMatch
23
-
24
 from tracim.controllers import TIMRestController
12
 from tracim.controllers import TIMRestController
25
 from tracim.controllers.user import UserWorkspaceRestController
13
 from tracim.controllers.user import UserWorkspaceRestController
26
 
14
 
28
 from tracim.lib import helpers as h
16
 from tracim.lib import helpers as h
29
 from tracim.lib.base import logger
17
 from tracim.lib.base import logger
30
 from tracim.lib.email import get_email_manager
18
 from tracim.lib.email import get_email_manager
31
-from tracim.lib.user import UserApi
32
 from tracim.lib.group import GroupApi
19
 from tracim.lib.group import GroupApi
20
+from tracim.lib.user import UserApi
33
 from tracim.lib.userworkspace import RoleApi
21
 from tracim.lib.userworkspace import RoleApi
34
 from tracim.lib.workspace import WorkspaceApi
22
 from tracim.lib.workspace import WorkspaceApi
35
 
23
 
36
 from tracim.model import DBSession
24
 from tracim.model import DBSession
37
-from tracim.model.auth import Group, User
38
-from tracim.model.serializers import Context, CTX, DictLikeClass
25
+from tracim.model.auth import Group
26
+from tracim.model.serializers import CTX
27
+from tracim.model.serializers import Context
28
+from tracim.model.serializers import DictLikeClass
29
+
39
 
30
 
40
 class UserProfileAdminRestController(TIMRestController):
31
 class UserProfileAdminRestController(TIMRestController):
41
-    """
42
-     CRUD Controller allowing to manage groups of a user
43
-    """
32
+    """CRUD Controller allowing to manage groups of a user."""
44
 
33
 
45
     allow_only = predicates.in_group(Group.TIM_ADMIN_GROUPNAME)
34
     allow_only = predicates.in_group(Group.TIM_ADMIN_GROUPNAME)
46
 
35
 
51
     @property
40
     @property
52
     def allowed_profiles(self):
41
     def allowed_profiles(self):
53
         return [
42
         return [
54
-        UserProfileAdminRestController._ALLOWED_PROFILE_USER,
55
-        UserProfileAdminRestController._ALLOWED_PROFILE_MANAGER,
56
-        UserProfileAdminRestController._ALLOWED_PROFILE_ADMIN
57
-    ]
43
+            UserProfileAdminRestController._ALLOWED_PROFILE_USER,
44
+            UserProfileAdminRestController._ALLOWED_PROFILE_MANAGER,
45
+            UserProfileAdminRestController._ALLOWED_PROFILE_ADMIN,
46
+        ]
58
 
47
 
59
     def _before(self, *args, **kw):
48
     def _before(self, *args, **kw):
60
         """
49
         """
61
-        Instantiate the current workspace in tg.tmpl_context
50
+        Instantiate the current workspace in tg.tmpl_context.
51
+
62
         :param args:
52
         :param args:
63
         :param kw:
53
         :param kw:
64
         :return:
54
         :return:
72
         tg.tmpl_context.user = user
62
         tg.tmpl_context.user = user
73
 
63
 
74
     @tg.expose()
64
     @tg.expose()
75
-    def switch(self, new_role):
65
+    def switch(self, new_role) -> None:
76
         """
66
         """
77
-        :param new_role: value should be 'tracim-user', 'tracim-manager' (allowed to create workspaces) or 'tracim-admin' (admin the whole system)
78
-        :return:
67
+        Switch to the given new role.
68
+
69
+        :param new_role: value should be:
70
+            'tracim-user',
71
+            'tracim-manager' (allowed to create workspaces) or
72
+            'tracim-admin' (admin the whole system)
79
         """
73
         """
80
         return self.put(new_role)
74
         return self.put(new_role)
81
 
75
 
87
 
81
 
88
         group_api = GroupApi(current_user)
82
         group_api = GroupApi(current_user)
89
 
83
 
90
-        if current_user.user_id==user.user_id:
84
+        if current_user.user_id == user.user_id:
91
             tg.flash(_('You can\'t change your own profile'), CST.STATUS_ERROR)
85
             tg.flash(_('You can\'t change your own profile'), CST.STATUS_ERROR)
92
             tg.redirect(self.parent_controller.url())
86
             tg.redirect(self.parent_controller.url())
93
 
87
 
94
-
95
         redirect_url = self.parent_controller.url(skip_id=True)
88
         redirect_url = self.parent_controller.url(skip_id=True)
96
 
89
 
97
         if new_profile not in self.allowed_profiles:
90
         if new_profile not in self.allowed_profiles:
102
         pod_manager_group = group_api.get_one(Group.TIM_MANAGER)
95
         pod_manager_group = group_api.get_one(Group.TIM_MANAGER)
103
         pod_admin_group = group_api.get_one(Group.TIM_ADMIN)
96
         pod_admin_group = group_api.get_one(Group.TIM_ADMIN)
104
 
97
 
105
-        flash_message = _('User updated.') # this is the default value ; should never appear
98
+        # this is the default value ; should never appear
99
+        flash_message = _('User updated.')
106
 
100
 
107
-        if new_profile==UserProfileAdminRestController._ALLOWED_PROFILE_USER:
101
+        if new_profile == UserProfileAdminRestController._ALLOWED_PROFILE_USER:
108
             if pod_user_group not in user.groups:
102
             if pod_user_group not in user.groups:
109
                 user.groups.append(pod_user_group)
103
                 user.groups.append(pod_user_group)
110
 
104
 
120
 
114
 
121
             flash_message = _('User {} is now a basic user').format(user.get_display_name())
115
             flash_message = _('User {} is now a basic user').format(user.get_display_name())
122
 
116
 
123
-        elif new_profile==UserProfileAdminRestController._ALLOWED_PROFILE_MANAGER:
117
+        elif new_profile == UserProfileAdminRestController._ALLOWED_PROFILE_MANAGER:
124
             if pod_user_group not in user.groups:
118
             if pod_user_group not in user.groups:
125
                 user.groups.append(pod_user_group)
119
                 user.groups.append(pod_user_group)
126
             if pod_manager_group not in user.groups:
120
             if pod_manager_group not in user.groups:
133
 
127
 
134
             flash_message = _('User {} can now workspaces').format(user.get_display_name())
128
             flash_message = _('User {} can now workspaces').format(user.get_display_name())
135
 
129
 
136
-
137
-        elif new_profile==UserProfileAdminRestController._ALLOWED_PROFILE_ADMIN:
130
+        elif new_profile == UserProfileAdminRestController._ALLOWED_PROFILE_ADMIN:
138
             if pod_user_group not in user.groups:
131
             if pod_user_group not in user.groups:
139
                 user.groups.append(pod_user_group)
132
                 user.groups.append(pod_user_group)
140
             if pod_manager_group not in user.groups:
133
             if pod_manager_group not in user.groups:
145
             flash_message = _('User {} is now an administrator').format(user.get_display_name())
138
             flash_message = _('User {} is now an administrator').format(user.get_display_name())
146
 
139
 
147
         else:
140
         else:
148
-            logger.error(self, 'Trying to change user {} profile with unexpected profile {}'.format(user.user_id, new_profile))
141
+            error_msg = \
142
+                'Trying to change user {} profile with unexpected profile {}'
143
+            logger.error(self, error_msg.format(user.user_id, new_profile))
149
             tg.flash(_('Unknown profile'), CST.STATUS_ERROR)
144
             tg.flash(_('Unknown profile'), CST.STATUS_ERROR)
150
             tg.redirect(redirect_url)
145
             tg.redirect(redirect_url)
151
 
146
 
163
         pass
158
         pass
164
 
159
 
165
 
160
 
166
-
167
 class UserPasswordAdminRestController(TIMRestController):
161
 class UserPasswordAdminRestController(TIMRestController):
168
-    """
169
-     CRUD Controller allowing to manage password of a given user
170
-    """
162
+    """CRUD Controller allowing to manage password of a given user."""
171
 
163
 
172
-    allow_only = predicates.in_any_group(Group.TIM_MANAGER_GROUPNAME, Group.TIM_ADMIN_GROUPNAME)
164
+    allow_only = predicates.in_any_group(
165
+            Group.TIM_MANAGER_GROUPNAME,
166
+            Group.TIM_ADMIN_GROUPNAME,
167
+        )
173
 
168
 
174
     def _before(self, *args, **kw):
169
     def _before(self, *args, **kw):
175
         """
170
         """
176
-        Instantiate the current workspace in tg.tmpl_context
171
+        Instantiate the current workspace in tg.tmpl_context.
172
+
177
         :param args:
173
         :param args:
178
         :param kw:
174
         :param kw:
179
         :return:
175
         :return:
186
         tg.tmpl_context.user_id = user_id
182
         tg.tmpl_context.user_id = user_id
187
         tg.tmpl_context.user = user
183
         tg.tmpl_context.user = user
188
 
184
 
189
-
190
     @tg.expose('tracim.templates.admin.user_password_edit')
185
     @tg.expose('tracim.templates.admin.user_password_edit')
191
     def edit(self):
186
     def edit(self):
192
         current_user = tmpl_context.current_user
187
         current_user = tmpl_context.current_user
193
         api = UserApi(current_user)
188
         api = UserApi(current_user)
194
         dictified_user = Context(CTX.USER).toDict(tmpl_context.user, 'user')
189
         dictified_user = Context(CTX.USER).toDict(tmpl_context.user, 'user')
195
-        return DictLikeClass(result = dictified_user)
190
+        return DictLikeClass(result=dictified_user)
196
 
191
 
197
     @tg.expose()
192
     @tg.expose()
198
     def put(self, new_password1, new_password2, next_url=''):
193
     def put(self, new_password1, new_password2, next_url=''):
207
             tg.flash(_('Empty password is not allowed.'), CST.STATUS_ERROR)
202
             tg.flash(_('Empty password is not allowed.'), CST.STATUS_ERROR)
208
             tg.redirect(next_url)
203
             tg.redirect(next_url)
209
 
204
 
210
-        if new_password1!=new_password2:
205
+        if new_password1 != new_password2:
211
             tg.flash(_('New passwords do not match.'), CST.STATUS_ERROR)
206
             tg.flash(_('New passwords do not match.'), CST.STATUS_ERROR)
212
             tg.redirect(next_url)
207
             tg.redirect(next_url)
213
 
208
 
214
         user.password = new_password1
209
         user.password = new_password1
215
-        user.update_webdav_digest_auth(new_password1)
216
         pm.DBSession.flush()
210
         pm.DBSession.flush()
217
 
211
 
218
         tg.flash(_('The password has been changed'), CST.STATUS_OK)
212
         tg.flash(_('The password has been changed'), CST.STATUS_OK)
223
 
217
 
224
     def _before(self, *args, **kw):
218
     def _before(self, *args, **kw):
225
         """
219
         """
226
-        Instantiate the current workspace in tg.tmpl_context
220
+        Instantiate the current workspace in tg.tmpl_context.
221
+
227
         :param args:
222
         :param args:
228
         :param kw:
223
         :param kw:
229
         :return:
224
         :return:
266
 
261
 
267
 
262
 
268
 class UserRestController(TIMRestController):
263
 class UserRestController(TIMRestController):
269
-    """
270
-     CRUD Controller allowing to manage Users
271
-    """
272
-    allow_only = predicates.in_any_group(Group.TIM_MANAGER_GROUPNAME, Group.TIM_ADMIN_GROUPNAME)
264
+    """CRUD Controller allowing to manage Users."""
265
+
266
+    allow_only = predicates.in_any_group(
267
+            Group.TIM_MANAGER_GROUPNAME,
268
+            Group.TIM_ADMIN_GROUPNAME,
269
+        )
273
 
270
 
274
     password = UserPasswordAdminRestController()
271
     password = UserPasswordAdminRestController()
275
     profile = UserProfileAdminRestController()
272
     profile = UserProfileAdminRestController()
284
     def current_item_id_key_in_context(cls):
281
     def current_item_id_key_in_context(cls):
285
         return 'user_id'
282
         return 'user_id'
286
 
283
 
287
-
288
     @tg.require(predicates.in_group(Group.TIM_MANAGER_GROUPNAME))
284
     @tg.require(predicates.in_group(Group.TIM_MANAGER_GROUPNAME))
289
     @tg.expose('tracim.templates.admin.user_getall')
285
     @tg.expose('tracim.templates.admin.user_getall')
290
     def get_all(self, *args, **kw):
286
     def get_all(self, *args, **kw):
297
         fake_api = Context(CTX.USERS).toDict({'current_user': current_user_content})
293
         fake_api = Context(CTX.USERS).toDict({'current_user': current_user_content})
298
 
294
 
299
         dictified_users = Context(CTX.USERS).toDict(users, 'users', 'user_nb')
295
         dictified_users = Context(CTX.USERS).toDict(users, 'users', 'user_nb')
300
-        return DictLikeClass(result = dictified_users, fake_api=fake_api)
296
+        return DictLikeClass(result=dictified_users, fake_api=fake_api)
301
 
297
 
302
     @tg.require(predicates.in_group(Group.TIM_MANAGER_GROUPNAME))
298
     @tg.require(predicates.in_group(Group.TIM_MANAGER_GROUPNAME))
303
     @tg.expose()
299
     @tg.expose()
336
             password = self.generate_password()
332
             password = self.generate_password()
337
             user.password = password
333
             user.password = password
338
 
334
 
339
-        user.webdav_left_digest_response_hash = '%s:/:%s' % (email, password)
340
-
341
         api.save(user)
335
         api.save(user)
342
 
336
 
343
         # Now add the user to related groups
337
         # Now add the user to related groups
361
     @classmethod
355
     @classmethod
362
     def generate_password(
356
     def generate_password(
363
             cls,
357
             cls,
364
-            password_length = PASSWORD_LENGTH,
365
-            password_chars = PASSWORD_CHARACTERS
366
-            ):
367
-
358
+            password_length=PASSWORD_LENGTH,
359
+            password_chars=PASSWORD_CHARACTERS,
360
+    ):
368
         # character list that will be contained into the password
361
         # character list that will be contained into the password
369
         char_list = []
362
         char_list = []
370
 
363
 
371
-        for j in range(0, password_length):
364
+        for _unused in range(password_length):
372
             # This puts a random char from the list above inside
365
             # This puts a random char from the list above inside
373
             # the list of chars and then merges them into a String
366
             # the list of chars and then merges them into a String
374
             char_list.append(random.choice(password_chars))
367
             char_list.append(random.choice(password_chars))
378
     @tg.expose('tracim.templates.admin.user_getone')
371
     @tg.expose('tracim.templates.admin.user_getone')
379
     def get_one(self, user_id):
372
     def get_one(self, user_id):
380
         current_user = tmpl_context.current_user
373
         current_user = tmpl_context.current_user
381
-        api = UserApi(current_user )
374
+        api = UserApi(current_user)
382
         # role_api = RoleApi(tg.tmpl_context.current_user)
375
         # role_api = RoleApi(tg.tmpl_context.current_user)
383
         # user_api = UserApi(tg.tmpl_context.current_user)
376
         # user_api = UserApi(tg.tmpl_context.current_user)
384
 
377
 
385
-        user = api.get_one(user_id) # FIXME
378
+        user = api.get_one(user_id)  # FIXME
386
 
379
 
387
         role_api = RoleApi(tg.tmpl_context.current_user)
380
         role_api = RoleApi(tg.tmpl_context.current_user)
388
         role_list = role_api.get_roles_for_select_field()
381
         role_list = role_api.get_roles_for_select_field()
393
                                          role_types=role_list)
386
                                          role_types=role_list)
394
         fake_api = Context(CTX.ADMIN_USER).toDict(fake_api_content)
387
         fake_api = Context(CTX.ADMIN_USER).toDict(fake_api_content)
395
 
388
 
396
-        return DictLikeClass(result = dictified_user, fake_api=fake_api)
397
-
389
+        return DictLikeClass(result=dictified_user, fake_api=fake_api)
398
 
390
 
399
     @tg.expose('tracim.templates.admin.user_edit')
391
     @tg.expose('tracim.templates.admin.user_edit')
400
     def edit(self, id):
392
     def edit(self, id):
422
             tg.redirect(next_url)
414
             tg.redirect(next_url)
423
         tg.redirect(self.url())
415
         tg.redirect(self.url())
424
 
416
 
425
-
426
     @tg.require(predicates.in_group(Group.TIM_ADMIN_GROUPNAME))
417
     @tg.require(predicates.in_group(Group.TIM_ADMIN_GROUPNAME))
427
     @tg.expose()
418
     @tg.expose()
428
     def enable(self, id, next_url=None):
419
     def enable(self, id, next_url=None):
434
         api.save(user)
425
         api.save(user)
435
 
426
 
436
         tg.flash(_('User {} enabled.').format(user.get_display_name()), CST.STATUS_OK)
427
         tg.flash(_('User {} enabled.').format(user.get_display_name()), CST.STATUS_OK)
437
-        if next_url=='user':
428
+        if next_url == 'user':
438
             tg.redirect(self.url(id=user.user_id))
429
             tg.redirect(self.url(id=user.user_id))
439
         tg.redirect(self.url())
430
         tg.redirect(self.url())
440
 
431
 
445
         current_user = tmpl_context.current_user
436
         current_user = tmpl_context.current_user
446
         api = UserApi(current_user)
437
         api = UserApi(current_user)
447
 
438
 
448
-        if current_user.user_id==id:
439
+        if current_user.user_id == id:
449
             tg.flash(_('You can\'t de-activate your own account'), CST.STATUS_ERROR)
440
             tg.flash(_('You can\'t de-activate your own account'), CST.STATUS_ERROR)
450
         else:
441
         else:
451
             user = api.get_one(id)
442
             user = api.get_one(id)
453
             api.save(user)
444
             api.save(user)
454
             tg.flash(_('User {} disabled').format(user.get_display_name()), CST.STATUS_OK)
445
             tg.flash(_('User {} disabled').format(user.get_display_name()), CST.STATUS_OK)
455
 
446
 
456
-        if next_url=='user':
447
+        if next_url == 'user':
457
             tg.redirect(self.url(id=user.user_id))
448
             tg.redirect(self.url(id=user.user_id))
458
         tg.redirect(self.url())
449
         tg.redirect(self.url())

+ 27 - 12
tracim/tracim/controllers/admin/workspace.py View File

82
     def undelete(self, user_id, old_role):
82
     def undelete(self, user_id, old_role):
83
         user_id = int(user_id)
83
         user_id = int(user_id)
84
         role_id = int(old_role)
84
         role_id = int(old_role)
85
-        self._add_user_with_role(user_id, role_id, None, _('User {} restored in workspace {} as {}'))
85
+        self._add_user_with_role(user_id, role_id, False, _('User {} restored in workspace {} as {}'))
86
         tg.redirect(self.parent_controller.url(tg.tmpl_context.workspace_id))
86
         tg.redirect(self.parent_controller.url(tg.tmpl_context.workspace_id))
87
 
87
 
88
     @tg.expose()
88
     @tg.expose()
89
-    def post(self, user_id, role_id, with_notif=False):
89
+    def post(self, user_id: str, role_id: str, with_notif: str='off'):
90
         user_id = int(user_id)
90
         user_id = int(user_id)
91
         role_id = int(role_id)
91
         role_id = int(role_id)
92
-        self._add_user_with_role(user_id, role_id, with_notif, _('User {} added to workspace {} as {}'))
92
+        self._add_user_with_role(
93
+            user_id,
94
+            role_id,
95
+            on_off_to_boolean(with_notif),
96
+            _('User {} added to workspace {} as {}')
97
+        )
93
         tg.redirect(self.parent_controller.url(tg.tmpl_context.workspace_id))
98
         tg.redirect(self.parent_controller.url(tg.tmpl_context.workspace_id))
94
 
99
 
95
-    def _add_user_with_role(self, user_id: int, role_id: int, with_notif: bool, flash_msg_template)-> UserRoleInWorkspace:
100
+    def _add_user_with_role(
101
+            self,
102
+            user_id: int,
103
+            role_id: int,
104
+            with_notif: bool,
105
+            flash_msg_template: str
106
+    )-> UserRoleInWorkspace:
96
         user_api = UserApi(tg.tmpl_context.current_user)
107
         user_api = UserApi(tg.tmpl_context.current_user)
97
         user = user_api.get_one(user_id)
108
         user = user_api.get_one(user_id)
98
 
109
 
157
 
168
 
158
     @tg.expose('tracim.templates.admin.workspace_getall')
169
     @tg.expose('tracim.templates.admin.workspace_getall')
159
     def get_all(self, *args, **kw):
170
     def get_all(self, *args, **kw):
160
-
161
         user = tmpl_context.current_user
171
         user = tmpl_context.current_user
162
         workspace_api_controller = WorkspaceApi(user)
172
         workspace_api_controller = WorkspaceApi(user)
163
-
164
-        workspaces = workspace_api_controller.get_all()
165
-
173
+        workspaces = workspace_api_controller.get_all_manageable()
166
         current_user_content = Context(CTX.CURRENT_USER).toDict(user)
174
         current_user_content = Context(CTX.CURRENT_USER).toDict(user)
167
-        fake_api = Context(CTX.ADMIN_WORKSPACE).toDict({'current_user': current_user_content})
168
-
169
-        dictified_workspaces = Context(CTX.ADMIN_WORKSPACES).toDict(workspaces, 'workspaces', 'workspace_nb')
170
-        return DictLikeClass(result = dictified_workspaces, fake_api=fake_api)
175
+        fake_api = Context(CTX.ADMIN_WORKSPACE) \
176
+            .toDict(
177
+                {'current_user': current_user_content}
178
+            )
179
+        dictified_workspaces = Context(CTX.ADMIN_WORKSPACES) \
180
+            .toDict(
181
+                workspaces,
182
+                'workspaces',
183
+                'workspace_nb',
184
+            )
185
+        return DictLikeClass(result=dictified_workspaces, fake_api=fake_api)
171
 
186
 
172
     @tg.expose('tracim.templates.admin.workspace_getone')
187
     @tg.expose('tracim.templates.admin.workspace_getone')
173
     def get_one(self, workspace_id):
188
     def get_one(self, workspace_id):

+ 7 - 1
tracim/tracim/controllers/page.py View File

100
             file_path = content_api.get_one_revision_filepath(file.revision_id)
100
             file_path = content_api.get_one_revision_filepath(file.revision_id)
101
         path = preview_manager.get_pdf_preview(file_path=file_path,
101
         path = preview_manager.get_pdf_preview(file_path=file_path,
102
                                                page=page)
102
                                                page=page)
103
+        file_suffix = ''
104
+        if page > -1:
105
+            file_suffix = '.page-{}'.format(page + 1)
103
         tg.response.headers['Content-Disposition'] = \
106
         tg.response.headers['Content-Disposition'] = \
104
-            'attachment; filename="{}"'.format(file.file_name)
107
+            'attachment; filename="{}{}.pdf"'.format(
108
+                file.label,
109
+                file_suffix,
110
+            )
105
         with open(path, 'rb') as pdf:
111
         with open(path, 'rb') as pdf:
106
             return pdf.read()
112
             return pdf.read()
107
 
113
 

+ 0 - 1
tracim/tracim/controllers/user.py View File

109
             tg.redirect(redirect_url)
109
             tg.redirect(redirect_url)
110
 
110
 
111
         current_user.password = new_password1
111
         current_user.password = new_password1
112
-        current_user.update_webdav_digest_auth(new_password1)
113
         pm.DBSession.flush()
112
         pm.DBSession.flush()
114
 
113
 
115
         tg.flash(_('Your password has been changed'))
114
         tg.flash(_('Your password has been changed'))

+ 3 - 0
tracim/tracim/fixtures/users_and_groups.py View File

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
 from tracim import model
2
 from tracim import model
3
 from tracim.fixtures import Fixture
3
 from tracim.fixtures import Fixture
4
+from tracim.lib.user import UserApi
4
 
5
 
5
 
6
 
6
 class Base(Fixture):
7
 class Base(Fixture):
12
         u.email = 'admin@admin.admin'
13
         u.email = 'admin@admin.admin'
13
         u.password = 'admin@admin.admin'
14
         u.password = 'admin@admin.admin'
14
         self._session.add(u)
15
         self._session.add(u)
16
+        uapi = UserApi(u)
17
+        uapi.execute_created_user_actions(u)
15
 
18
 
16
         g1 = model.Group()
19
         g1 = model.Group()
17
         g1.group_id = 1
20
         g1.group_id = 1

File diff suppressed because it is too large
+ 2068 - 0
tracim/tracim/i18n/en/LC_MESSAGES/tracim.po


BIN
tracim/tracim/i18n/fr/LC_MESSAGES/tracim.mo View File


+ 0 - 24
tracim/tracim/i18n/ru/LC_MESSAGES/pboard.po View File

1
-# Russian translations for ${package}.
2
-# Copyright (C) 2008 ORGANIZATION
3
-# This file is distributed under the same license as the ${package} project.
4
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2008.
5
-#
6
-msgid ""
7
-msgstr ""
8
-"Project-Id-Version: ${package} 0.0.0\n"
9
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10
-"POT-Creation-Date: 2008-01-13 14:00+0200\n"
11
-"PO-Revision-Date: 2008-01-13 14:00+0200\n"
12
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
-"Language-Team: ru <LL@li.org>\n"
14
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
15
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
16
-"MIME-Version: 1.0\n"
17
-"Content-Type: text/plain; charset=utf-8\n"
18
-"Content-Transfer-Encoding: 8bit\n"
19
-"Generated-By: Babel 0.9.1\n"
20
-
21
-#: ${package}/controllers/root.py:13
22
-msgid "Your application is now running"
23
-msgstr "Ваши приложение успешно запущено"
24
-

+ 41 - 29
tracim/tracim/lib/auth/internal.py View File

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
-from sqlalchemy import and_
2
+from typing import Dict
3
+
3
 from tg.configuration.auth import TGAuthMetadata
4
 from tg.configuration.auth import TGAuthMetadata
4
 
5
 
5
 from tracim.lib.auth.base import Auth
6
 from tracim.lib.auth.base import Auth
6
 from tracim.model import DBSession, User
7
 from tracim.model import DBSession, User
7
 
8
 
8
-# TODO : temporary fix to update DB, to remove
9
-import transaction
10
 
9
 
11
 class InternalAuth(Auth):
10
 class InternalAuth(Auth):
12
 
11
 
13
     name = 'internal'
12
     name = 'internal'
14
     _internal = True
13
     _internal = True
15
 
14
 
16
-    def feed_config(self):
17
-        """
18
-        Fill config with internal (database) auth information.
19
-        :return:
20
-        """
15
+    def feed_config(self) -> None:
16
+        """Fill config with internal (database) auth information."""
21
         super().feed_config()
17
         super().feed_config()
22
         self._config['sa_auth'].user_class = User
18
         self._config['sa_auth'].user_class = User
23
         self._config['auth_backend'] = 'sqlalchemy'
19
         self._config['auth_backend'] = 'sqlalchemy'
24
         self._config['sa_auth'].dbsession = DBSession
20
         self._config['sa_auth'].dbsession = DBSession
25
-        self._config['sa_auth'].authmetadata = InternalApplicationAuthMetadata(self._config.get('sa_auth'))
21
+        self._config['sa_auth'].authmetadata = \
22
+            InternalApplicationAuthMetadata(self._config.get('sa_auth'))
26
 
23
 
27
 
24
 
28
 class InternalApplicationAuthMetadata(TGAuthMetadata):
25
 class InternalApplicationAuthMetadata(TGAuthMetadata):
26
+
29
     def __init__(self, sa_auth):
27
     def __init__(self, sa_auth):
30
         self.sa_auth = sa_auth
28
         self.sa_auth = sa_auth
31
 
29
 
32
-    def authenticate(self, environ, identity, allow_auth_token: bool=False):
33
-        user = self.sa_auth.dbsession.query(self.sa_auth.user_class).filter(and_(
34
-            self.sa_auth.user_class.is_active == True,
35
-            self.sa_auth.user_class.email == identity['login']
36
-        )).first()
37
-
38
-        if user and user.validate_password(identity['password']):
39
-            if not user.webdav_left_digest_response_hash:
40
-                user.webdav_left_digest_response_hash = '%s:/:%s' % (identity['login'], identity['password'])
41
-                DBSession.flush()
42
-                # TODO : temporary fix to update DB, to remove
43
-                transaction.commit()
44
-            return identity['login']
45
-
46
-        if user and allow_auth_token:
47
-            user.ensure_auth_token()
48
-            if user.auth_token == identity['password']:
49
-                return identity['login']
30
+    def authenticate(
31
+            self,
32
+            environ: Dict[str, str],
33
+            identity: Dict[str, str],
34
+            allow_auth_token: bool = False,
35
+    ) -> str:
36
+        """
37
+        Authenticate using given credentials.
38
+
39
+        Checks password first then auth token if allowed.
40
+        :param environ:
41
+        :param identity: The given credentials to authenticate.
42
+        :param allow_auth_token: The indicator of auth token use.
43
+        :return: The given login or an empty string if auth failed.
44
+        """
45
+        result = ''
46
+        user = self.sa_auth.dbsession \
47
+            .query(self.sa_auth.user_class) \
48
+            .filter(self.sa_auth.user_class.is_active.is_(True)) \
49
+            .filter(self.sa_auth.user_class.email == identity['login']) \
50
+            .first()
51
+        if user:
52
+            if user.validate_password(identity['password']):
53
+                result = identity['login']
54
+            if allow_auth_token:
55
+                user.ensure_auth_token()
56
+                if user.auth_token == identity['password']:
57
+                    result = identity['login']
58
+        return result
50
 
59
 
51
     def get_user(self, identity, userid):
60
     def get_user(self, identity, userid):
52
-        return self.sa_auth.dbsession.query(self.sa_auth.user_class).filter(
53
-            and_(self.sa_auth.user_class.is_active == True, self.sa_auth.user_class.email == userid)).first()
61
+        return self.sa_auth.dbsession \
62
+            .query(self.sa_auth.user_class) \
63
+            .filter(self.sa_auth.user_class.is_active.is_(True)) \
64
+            .filter(self.sa_auth.user_class.email == userid) \
65
+            .first()
54
 
66
 
55
     def get_groups(self, identity, userid):
67
     def get_groups(self, identity, userid):
56
         return [g.group_name for g in identity['user'].groups]
68
         return [g.group_name for g in identity['user'].groups]

+ 9 - 6
tracim/tracim/lib/email.py View File

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
 import smtplib
2
 import smtplib
3
+import typing
3
 from email.message import Message
4
 from email.message import Message
4
 from email.mime.multipart import MIMEMultipart
5
 from email.mime.multipart import MIMEMultipart
5
 from email.mime.text import MIMEText
6
 from email.mime.text import MIMEText
6
 
7
 
7
-import typing
8
 from mako.template import Template
8
 from mako.template import Template
9
 from tg.i18n import ugettext as _
9
 from tg.i18n import ugettext as _
10
 
10
 
11
 from tracim.lib.base import logger
11
 from tracim.lib.base import logger
12
-from tracim.model import User
13
-
14
 from tracim.lib.utils import get_rq_queue
12
 from tracim.lib.utils import get_rq_queue
13
+from tracim.model import User
15
 
14
 
16
 
15
 
17
 def send_email_through(
16
 def send_email_through(
53
         self.password = password
52
         self.password = password
54
 
53
 
55
 
54
 
56
-
57
 class EmailSender(object):
55
 class EmailSender(object):
58
     """
56
     """
59
     this class allow to send emails and has no relations with SQLAlchemy and other tg HTTP request environment
57
     this class allow to send emails and has no relations with SQLAlchemy and other tg HTTP request environment
86
             self._smtp_connection.quit()
84
             self._smtp_connection.quit()
87
             logger.info(self, 'Connection closed.')
85
             logger.info(self, 'Connection closed.')
88
 
86
 
89
-
90
     def send_mail(self, message: MIMEMultipart):
87
     def send_mail(self, message: MIMEMultipart):
91
         if not self._is_active:
88
         if not self._is_active:
92
             logger.info(self, 'Not sending email to {} (service desactivated)'.format(message['To']))
89
             logger.info(self, 'Not sending email to {} (service desactivated)'.format(message['To']))
93
         else:
90
         else:
94
-            self.connect() # Acutally, this connects to SMTP only if required
91
+            self.connect()  # Acutally, this connects to SMTP only if required
95
             logger.info(self, 'Sending email to {}'.format(message['To']))
92
             logger.info(self, 'Sending email to {}'.format(message['To']))
96
             self._smtp_connection.send_message(message)
93
             self._smtp_connection.send_message(message)
94
+            from tracim.lib.notifications import EmailNotifier
95
+            EmailNotifier.log_notification(
96
+                action='   SENT',
97
+                recipient=message['To'],
98
+                subject=message['Subject'],
99
+            )
97
 
100
 
98
 
101
 
99
 class EmailManager(object):
102
 class EmailManager(object):

+ 38 - 8
tracim/tracim/lib/notifications.py View File

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
+import datetime
3
+import typing
2
 
4
 
3
 from email.header import Header
5
 from email.header import Header
4
 from email.mime.multipart import MIMEMultipart
6
 from email.mime.multipart import MIMEMultipart
5
 from email.mime.text import MIMEText
7
 from email.mime.text import MIMEText
6
 
8
 
7
-import lxml
8
 from lxml.html.diff import htmldiff
9
 from lxml.html.diff import htmldiff
9
 
10
 
10
 from mako.template import Template
11
 from mako.template import Template
11
 
12
 
12
 from tracim.lib.base import logger
13
 from tracim.lib.base import logger
14
+from tracim.lib.email import EmailSender
13
 from tracim.lib.email import SmtpConfiguration
15
 from tracim.lib.email import SmtpConfiguration
14
 from tracim.lib.email import send_email_through
16
 from tracim.lib.email import send_email_through
15
-from tracim.lib.email import EmailSender
16
 from tracim.lib.user import UserApi
17
 from tracim.lib.user import UserApi
17
-from tracim.lib.workspace import WorkspaceApi
18
 from tracim.lib.utils import lazy_ugettext as l_
18
 from tracim.lib.utils import lazy_ugettext as l_
19
-from tracim.model.serializers import Context
19
+from tracim.lib.workspace import WorkspaceApi
20
+from tracim.model.auth import User
21
+from tracim.model.data import ActionDescription
22
+from tracim.model.data import Content
23
+from tracim.model.data import ContentType
24
+from tracim.model.data import UserRoleInWorkspace
20
 from tracim.model.serializers import CTX
25
 from tracim.model.serializers import CTX
26
+from tracim.model.serializers import Context
21
 from tracim.model.serializers import DictLikeClass
27
 from tracim.model.serializers import DictLikeClass
22
 
28
 
23
-from tracim.model.data import Content, UserRoleInWorkspace, ContentType, \
24
-    ActionDescription
25
-from tracim.model.auth import User
26
-
27
 
29
 
28
 class INotifier(object):
30
 class INotifier(object):
29
     """
31
     """
210
             email_address = email_address
212
             email_address = email_address
211
         )
213
         )
212
 
214
 
215
+    @staticmethod
216
+    def log_notification(
217
+            action: str,
218
+            recipient: typing.Optional[str],
219
+            subject: typing.Optional[str],
220
+    ) -> None:
221
+        """Log notification metadata."""
222
+        from tracim.config.app_cfg import CFG
223
+        log_path = CFG.get_instance().EMAIL_NOTIFICATION_LOG_FILE_PATH
224
+        if log_path:
225
+            # TODO - A.P - 2017-09-06 - file logging inefficiency
226
+            # Updating a document with 100 users to notify will leads to open
227
+            # and close the file 100 times.
228
+            with open(log_path, 'a') as log_file:
229
+                print(
230
+                    datetime.datetime.now(),
231
+                    action,
232
+                    recipient,
233
+                    subject,
234
+                    sep='|',
235
+                    file=log_file,
236
+                )
237
+
213
     def notify_content_update(self, event_actor_id: int, event_content_id: int):
238
     def notify_content_update(self, event_actor_id: int, event_content_id: int):
214
         """
239
         """
215
         Look for all users to be notified about the new content and send them an individual email
240
         Look for all users to be notified about the new content and send them an individual email
277
             message.attach(part1)
302
             message.attach(part1)
278
             message.attach(part2)
303
             message.attach(part2)
279
 
304
 
305
+            self.log_notification(
306
+                action='CREATED',
307
+                recipient=message['To'],
308
+                subject=message['Subject'],
309
+            )
280
             send_email_through(async_email_sender.send_mail, message)
310
             send_email_through(async_email_sender.send_mail, message)
281
 
311
 
282
     def _build_email_body(self, mako_template_filepath: str, role: UserRoleInWorkspace, content: Content, actor: User) -> str:
312
     def _build_email_body(self, mako_template_filepath: str, role: UserRoleInWorkspace, content: Content, actor: User) -> str:

+ 1 - 5
tracim/tracim/lib/userworkspace.py View File

86
     def get_one(self, user_id, workspace_id):
86
     def get_one(self, user_id, workspace_id):
87
         return self._get_one_rsc(user_id, workspace_id).one()
87
         return self._get_one_rsc(user_id, workspace_id).one()
88
 
88
 
89
-    # TODO - A.P - fix with_notif: bool vs with_notif: str
90
-    # https://github.com/tracim/tracim/issues/302
91
     def create_one(self, user: User, workspace: Workspace, role_level: int, with_notif: bool, flush: bool=True) -> UserRoleInWorkspace:
89
     def create_one(self, user: User, workspace: Workspace, role_level: int, with_notif: bool, flush: bool=True) -> UserRoleInWorkspace:
92
         role = self.create_role()
90
         role = self.create_role()
93
         role.user_id = user.user_id
91
         role.user_id = user.user_id
94
         role.workspace = workspace
92
         role.workspace = workspace
95
         role.role = role_level
93
         role.role = role_level
96
-        if with_notif is not None:
97
-            from tracim.lib.helpers import on_off_to_boolean
98
-            role.do_notify = on_off_to_boolean(with_notif)
94
+        role.do_notify = with_notif
99
         if flush:
95
         if flush:
100
             DBSession.flush()
96
             DBSession.flush()
101
         return role
97
         return role

+ 19 - 3
tracim/tracim/lib/workspace.py View File

1
 # -*- coding: utf-8 -*-
1
 # -*- coding: utf-8 -*-
2
-import transaction
2
+import typing
3
 
3
 
4
 from sqlalchemy.orm import Query
4
 from sqlalchemy.orm import Query
5
 from tg.i18n import ugettext as _
5
 from tg.i18n import ugettext as _
6
+import transaction
6
 
7
 
7
 from tracim.lib.userworkspace import RoleApi
8
 from tracim.lib.userworkspace import RoleApi
9
+from tracim.model import DBSession
8
 from tracim.model.auth import Group
10
 from tracim.model.auth import Group
9
 from tracim.model.auth import User
11
 from tracim.model.auth import User
10
-from tracim.model.data import Workspace
11
 from tracim.model.data import UserRoleInWorkspace
12
 from tracim.model.data import UserRoleInWorkspace
12
-from tracim.model import DBSession
13
+from tracim.model.data import Workspace
13
 
14
 
14
 __author__ = 'damien'
15
 __author__ = 'damien'
15
 
16
 
101
         workspaces.sort(key=lambda workspace: workspace.label.lower())
102
         workspaces.sort(key=lambda workspace: workspace.label.lower())
102
         return workspaces
103
         return workspaces
103
 
104
 
105
+    def get_all_manageable(self) -> typing.List[Workspace]:
106
+        """Get all workspaces the current user has manager rights on."""
107
+        workspaces = []  # type: typing.List[Workspace]
108
+        if self._user.profile.id == Group.TIM_ADMIN:
109
+            workspaces = self._base_query().order_by(Workspace.label).all()
110
+        elif self._user.profile.id == Group.TIM_MANAGER:
111
+            workspaces = self._base_query() \
112
+                .filter(
113
+                    UserRoleInWorkspace.role ==
114
+                    UserRoleInWorkspace.WORKSPACE_MANAGER
115
+                ) \
116
+                .order_by(Workspace.label) \
117
+                .all()
118
+        return workspaces
119
+
104
     def disable_notifications(self, user: User, workspace: Workspace):
120
     def disable_notifications(self, user: User, workspace: Workspace):
105
         for role in user.roles:
121
         for role in user.roles:
106
             if role.workspace==workspace:
122
             if role.workspace==workspace:

+ 63 - 50
tracim/tracim/model/auth.py View File

6
 
6
 
7
 It's perfectly fine to re-use this definition in the tracim application,
7
 It's perfectly fine to re-use this definition in the tracim application,
8
 though.
8
 though.
9
-
10
 """
9
 """
10
+import os
11
+import time
11
 import uuid
12
 import uuid
12
 
13
 
13
-import os
14
 from datetime import datetime
14
 from datetime import datetime
15
-import time
16
-from hashlib import sha256
17
-from sqlalchemy.ext.hybrid import hybrid_property
18
-from tracim.lib.utils import lazy_ugettext as l_
19
 from hashlib import md5
15
 from hashlib import md5
20
-
21
-__all__ = ['User', 'Group', 'Permission']
16
+from hashlib import sha256
17
+from typing import TYPE_CHECKING
22
 
18
 
23
 from sqlalchemy import Column
19
 from sqlalchemy import Column
24
 from sqlalchemy import ForeignKey
20
 from sqlalchemy import ForeignKey
25
 from sqlalchemy import Sequence
21
 from sqlalchemy import Sequence
26
 from sqlalchemy import Table
22
 from sqlalchemy import Table
27
-
28
-from sqlalchemy.types import Unicode
29
-from sqlalchemy.types import Integer
30
-from sqlalchemy.types import DateTime
23
+from sqlalchemy.ext.hybrid import hybrid_property
24
+from sqlalchemy.orm import relation
25
+from sqlalchemy.orm import relationship
26
+from sqlalchemy.orm import synonym
31
 from sqlalchemy.types import Boolean
27
 from sqlalchemy.types import Boolean
32
-from sqlalchemy.orm import relation, relationship, synonym
33
-from tg import request
34
-from tracim.model import DeclarativeBase, metadata, DBSession
28
+from sqlalchemy.types import DateTime
29
+from sqlalchemy.types import Integer
30
+from sqlalchemy.types import Unicode
31
+
32
+from tracim.lib.utils import lazy_ugettext as l_
33
+from tracim.model import DBSession
34
+from tracim.model import DeclarativeBase
35
+from tracim.model import metadata
36
+if TYPE_CHECKING:
37
+    from tracim.model.data import Workspace
38
+
39
+__all__ = ['User', 'Group', 'Permission']
35
 
40
 
36
 # This is the association table for the many-to-many relationship between
41
 # This is the association table for the many-to-many relationship between
37
 # groups and permissions.
42
 # groups and permissions.
51
         onupdate="CASCADE", ondelete="CASCADE"), primary_key=True)
56
         onupdate="CASCADE", ondelete="CASCADE"), primary_key=True)
52
 )
57
 )
53
 
58
 
59
+
54
 class Group(DeclarativeBase):
60
 class Group(DeclarativeBase):
55
 
61
 
56
     TIM_NOBODY = 0
62
     TIM_NOBODY = 0
84
         return DBSession.query(cls).filter_by(group_name=group_name).first()
90
         return DBSession.query(cls).filter_by(group_name=group_name).first()
85
 
91
 
86
 
92
 
87
-
88
 class Profile(object):
93
 class Profile(object):
89
-    """ This model is the "max" group associated to a given user
90
-    """
94
+    """This model is the "max" group associated to a given user."""
91
 
95
 
92
     _NAME = [Group.TIM_NOBODY_GROUPNAME,
96
     _NAME = [Group.TIM_NOBODY_GROUPNAME,
93
              Group.TIM_USER_GROUPNAME,
97
              Group.TIM_USER_GROUPNAME,
106
         self.label = Profile._LABEL[profile_id]
110
         self.label = Profile._LABEL[profile_id]
107
 
111
 
108
 
112
 
109
-
110
 class User(DeclarativeBase):
113
 class User(DeclarativeBase):
111
     """
114
     """
112
     User definition.
115
     User definition.
113
 
116
 
114
     This is the user definition used by :mod:`repoze.who`, which requires at
117
     This is the user definition used by :mod:`repoze.who`, which requires at
115
     least the ``email`` column.
118
     least the ``email`` column.
116
-
117
     """
119
     """
120
+
118
     __tablename__ = 'users'
121
     __tablename__ = 'users'
119
 
122
 
120
     user_id = Column(Integer, Sequence('seq__users__user_id'), autoincrement=True, primary_key=True)
123
     user_id = Column(Integer, Sequence('seq__users__user_id'), autoincrement=True, primary_key=True)
151
     @property
154
     @property
152
     def profile(self) -> Profile:
155
     def profile(self) -> Profile:
153
         profile_id = 0
156
         profile_id = 0
154
-        if len(self.groups)>0:
157
+        if len(self.groups) > 0:
155
             profile_id = max(group.group_id for group in self.groups)
158
             profile_id = max(group.group_id for group in self.groups)
156
         return Profile(profile_id)
159
         return Profile(profile_id)
157
 
160
 
174
         return DBSession.query(cls).filter_by(email=username).first()
177
         return DBSession.query(cls).filter_by(email=username).first()
175
 
178
 
176
     @classmethod
179
     @classmethod
177
-    def _hash_password(cls, password):
180
+    def _hash_password(cls, cleartext_password: str) -> str:
178
         salt = sha256()
181
         salt = sha256()
179
         salt.update(os.urandom(60))
182
         salt.update(os.urandom(60))
180
         salt = salt.hexdigest()
183
         salt = salt.hexdigest()
181
 
184
 
182
         hash = sha256()
185
         hash = sha256()
183
         # Make sure password is a str because we cannot hash unicode objects
186
         # Make sure password is a str because we cannot hash unicode objects
184
-        hash.update((password + salt).encode('utf-8'))
187
+        hash.update((cleartext_password + salt).encode('utf-8'))
185
         hash = hash.hexdigest()
188
         hash = hash.hexdigest()
186
 
189
 
187
-        password = salt + hash
190
+        ciphertext_password = salt + hash
188
 
191
 
189
         # Make sure the hashed password is a unicode object at the end of the
192
         # Make sure the hashed password is a unicode object at the end of the
190
         # process because SQLAlchemy _wants_ unicode objects for Unicode cols
193
         # process because SQLAlchemy _wants_ unicode objects for Unicode cols
191
         # FIXME - D.A. - 2013-11-20 - The following line has been removed since using python3. Is this normal ?!
194
         # FIXME - D.A. - 2013-11-20 - The following line has been removed since using python3. Is this normal ?!
192
         # password = password.decode('utf-8')
195
         # password = password.decode('utf-8')
193
 
196
 
194
-        return password
197
+        return ciphertext_password
195
 
198
 
196
-    def _set_password(self, password):
197
-        """Hash ``password`` on the fly and store its hashed version."""
198
-        self._password = self._hash_password(password)
199
+    def _set_password(self, cleartext_password: str) -> None:
200
+        """
201
+        Set ciphertext password from cleartext password.
199
 
202
 
200
-    def _get_password(self):
203
+        Hash cleartext password on the fly,
204
+        Store its ciphertext version,
205
+        Update the WebDAV hash as well.
206
+        """
207
+        self._password = self._hash_password(cleartext_password)
208
+        self.update_webdav_digest_auth(cleartext_password)
209
+
210
+    def _get_password(self) -> str:
201
         """Return the hashed version of the password."""
211
         """Return the hashed version of the password."""
202
         return self._password
212
         return self._password
203
 
213
 
216
 
226
 
217
     webdav_left_digest_response_hash = synonym('_webdav_left_digest_response_hash',
227
     webdav_left_digest_response_hash = synonym('_webdav_left_digest_response_hash',
218
                                                descriptor=property(_get_hash_digest,
228
                                                descriptor=property(_get_hash_digest,
219
-                                                                    _set_hash_digest))
229
+                                                                   _set_hash_digest))
220
 
230
 
221
-    def update_webdav_digest_auth(self, password) -> None:
231
+    def update_webdav_digest_auth(self, cleartext_password: str) -> None:
222
         self.webdav_left_digest_response_hash \
232
         self.webdav_left_digest_response_hash \
223
-            = '{username}:/:{password}'.format(
233
+            = '{username}:/:{cleartext_password}'.format(
224
                 username=self.email,
234
                 username=self.email,
225
-                password=password,
235
+                cleartext_password=cleartext_password,
226
             )
236
             )
227
 
237
 
228
-
229
-    def validate_password(self, password):
238
+    def validate_password(self, cleartext_password: str) -> bool:
230
         """
239
         """
231
         Check the password against existing credentials.
240
         Check the password against existing credentials.
232
 
241
 
233
-        :param password: the password that was provided by the user to
234
-            try and authenticate. This is the clear text version that we will
235
-            need to match against the hashed one in the database.
236
-        :type password: unicode object.
242
+        :param cleartext_password: the password that was provided by the user
243
+            to try and authenticate. This is the clear text version that we
244
+            will need to match against the hashed one in the database.
245
+        :type cleartext_password: unicode object.
237
         :return: Whether the password is valid.
246
         :return: Whether the password is valid.
238
         :rtype: bool
247
         :rtype: bool
239
 
248
 
240
         """
249
         """
241
-        if not self.password:
242
-            return False
243
-        hash = sha256()
244
-        hash.update((password + self.password[:64]).encode('utf-8'))
245
-        return self.password[64:] == hash.hexdigest()
246
-
247
-    def get_display_name(self, remove_email_part=False):
250
+        result = False
251
+        if self.password:
252
+            hash = sha256()
253
+            hash.update((cleartext_password + self.password[:64]).encode('utf-8'))
254
+            result = self.password[64:] == hash.hexdigest()
255
+            if result and not self.webdav_left_digest_response_hash:
256
+                self.update_webdav_digest_auth(cleartext_password)
257
+        return result
258
+
259
+    def get_display_name(self, remove_email_part: bool=False) -> str:
248
         """
260
         """
261
+        Get a name to display from corresponding member or email.
262
+
249
         :param remove_email_part: If True and display name based on email,
263
         :param remove_email_part: If True and display name based on email,
250
-         remove @xxx.xxx part of email in returned value
264
+            remove @xxx.xxx part of email in returned value
251
         :return: display name based on user name or email.
265
         :return: display name based on user name or email.
252
         """
266
         """
253
-        if self.display_name != None and self.display_name != '':
267
+        if self.display_name:
254
             return self.display_name
268
             return self.display_name
255
         else:
269
         else:
256
             if remove_email_part:
270
             if remove_email_part:
269
     def ensure_auth_token(self) -> None:
283
     def ensure_auth_token(self) -> None:
270
         """
284
         """
271
         Create auth_token if None, regenerate auth_token if too much old.
285
         Create auth_token if None, regenerate auth_token if too much old.
286
+
272
         auth_token validity is set in
287
         auth_token validity is set in
273
         :return:
288
         :return:
274
         """
289
         """
301
 
316
 
302
     __tablename__ = 'permissions'
317
     __tablename__ = 'permissions'
303
 
318
 
304
-
305
     permission_id = Column(Integer, Sequence('seq__permissions__permission_id'), autoincrement=True, primary_key=True)
319
     permission_id = Column(Integer, Sequence('seq__permissions__permission_id'), autoincrement=True, primary_key=True)
306
     permission_name = Column(Unicode(63), unique=True, nullable=False)
320
     permission_name = Column(Unicode(63), unique=True, nullable=False)
307
     description = Column(Unicode(255))
321
     description = Column(Unicode(255))
314
 
328
 
315
     def __unicode__(self):
329
     def __unicode__(self):
316
         return self.permission_name
330
         return self.permission_name
317
-

+ 9 - 1
tracim/tracim/model/data.py View File

735
     revision_to_serialize = -0  # This flag allow to serialize a given revision if required by the user
735
     revision_to_serialize = -0  # This flag allow to serialize a given revision if required by the user
736
 
736
 
737
     id = Column(Integer, primary_key=True)
737
     id = Column(Integer, primary_key=True)
738
+    # TODO - A.P - 2017-09-05 - revisions default sorting
739
+    # The only sorting that makes sens is ordering by "updated" field. But:
740
+    # - its content will soon replace the one of "created",
741
+    # - this "updated" field will then be dropped.
742
+    # So for now, we order by "revision_id" explicitly, but remember to switch
743
+    # to "created" once "updated" removed.
744
+    # https://github.com/tracim/tracim/issues/336
738
     revisions = relationship("ContentRevisionRO",
745
     revisions = relationship("ContentRevisionRO",
739
                              foreign_keys=[ContentRevisionRO.content_id],
746
                              foreign_keys=[ContentRevisionRO.content_id],
740
-                             back_populates="node")
747
+                             back_populates="node",
748
+                             order_by="ContentRevisionRO.revision_id")
741
     children_revisions = relationship("ContentRevisionRO",
749
     children_revisions = relationship("ContentRevisionRO",
742
                                       foreign_keys=[ContentRevisionRO.parent_id],
750
                                       foreign_keys=[ContentRevisionRO.parent_id],
743
                                       back_populates="parent")
751
                                       back_populates="parent")

+ 6 - 6
tracim/tracim/public/assets/tinymce/LICENSE.TXT View File

1
-		  GNU LESSER GENERAL PUBLIC LICENSE
2
-		       Version 2.1, February 1999
1
+      GNU LESSER GENERAL PUBLIC LICENSE
2
+           Version 2.1, February 1999
3
 
3
 
4
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
4
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
5
  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
10
  as the successor of the GNU Library Public License, version 2, hence
10
  as the successor of the GNU Library Public License, version 2, hence
11
  the version number 2.1.]
11
  the version number 2.1.]
12
 
12
 
13
-			    Preamble
13
+          Preamble
14
 
14
 
15
   The licenses for most software are designed to take away your
15
   The licenses for most software are designed to take away your
16
 freedom to share and change it.  By contrast, the GNU General Public
16
 freedom to share and change it.  By contrast, the GNU General Public
112
 former contains code derived from the library, whereas the latter must
112
 former contains code derived from the library, whereas the latter must
113
 be combined with the library in order to run.
113
 be combined with the library in order to run.
114
 
114
 
115
-		  GNU LESSER GENERAL PUBLIC LICENSE
115
+      GNU LESSER GENERAL PUBLIC LICENSE
116
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
116
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
 
117
 
118
   0. This License Agreement applies to any software library or other
118
   0. This License Agreement applies to any software library or other
432
 of all derivatives of our free software and of promoting the sharing
432
 of all derivatives of our free software and of promoting the sharing
433
 and reuse of software generally.
433
 and reuse of software generally.
434
 
434
 
435
-			    NO WARRANTY
435
+          NO WARRANTY
436
 
436
 
437
   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
437
   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
438
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
455
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
455
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
 DAMAGES.
456
 DAMAGES.
457
 
457
 
458
-		     END OF TERMS AND CONDITIONS
458
+         END OF TERMS AND CONDITIONS
459
 
459
 
460
            How to Apply These Terms to Your New Libraries
460
            How to Apply These Terms to Your New Libraries
461
 
461
 

File diff suppressed because it is too large
+ 755 - 653
tracim/tracim/public/assets/tinymce/changelog.txt


+ 1 - 0
tracim/tracim/public/assets/tinymce/js/tinymce/jquery.tinymce.min.js View File

1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c;g("0",[],function(){return function(a){function b(){function a(a){"remove"===a&&this.each(function(a,b){var c=d(b);c&&c.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(a,b){var c=i().get(b.id.replace(/_parent$/,""));c&&c.remove()})}function b(b){var c,d=this;if(null!=b)a.call(d),d.each(function(a,c){var d;(d=i().get(c.id))&&d.setContent(b)});else if(d.length>0&&(c=i().get(d[0].id)))return c.getContent()}function d(a){var b=null;return a&&a.id&&g.tinymce&&(b=i().get(a.id)),b}function e(a){return!!(a&&a.length&&g.tinymce&&a.is(":tinymce"))}var h={};f.each(["text","html","val"],function(a,g){var i=h[g]=f.fn[g],j="text"===g;f.fn[g]=function(a){var g=this;if(!e(g))return i.apply(g,arguments);if(a!==c)return b.call(g.filter(":tinymce"),a),i.apply(g.not(":tinymce"),arguments),g;var h="",k=arguments;return(j?g:g.eq(0)).each(function(a,b){var c=d(b);h+=c?j?c.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):c.getContent({save:!0}):i.apply(f(b),k)}),h}}),f.each(["append","prepend"],function(a,b){var g=h[b]=f.fn[b],i="prepend"===b;f.fn[b]=function(a){var b=this;return e(b)?a!==c?("string"==typeof a&&b.filter(":tinymce").each(function(b,c){var e=d(c);e&&e.setContent(i?a+e.getContent():e.getContent()+a)}),g.apply(b.not(":tinymce"),arguments),b):void 0:g.apply(b,arguments)}}),f.each(["remove","replaceWith","replaceAll","empty"],function(b,c){var d=h[c]=f.fn[c];f.fn[c]=function(){return a.call(this,c),d.apply(this,arguments)}}),h.attr=f.fn.attr,f.fn.attr=function(a,g){var i=this,j=arguments;if(!a||"value"!==a||!e(i))return g!==c?h.attr.apply(i,j):h.attr.apply(i,j);if(g!==c)return b.call(i.filter(":tinymce"),g),h.attr.apply(i.not(":tinymce"),j),i;var k=i[0],l=d(k);return l?l.getContent({save:!0}):h.attr.apply(f(k),j)}}var c,d,e,f,g,h=[];g=a?a:window,f=g.jQuery;var i=function(){return g.tinymce};f.fn.tinymce=function(a){function c(){var c=[],d=0;e||(b(),e=!0),m.each(function(b,e){var f,g=e.id,h=a.oninit;g||(e.id=g=i().DOM.uniqueId()),i().get(g)||(f=i().createEditor(g,a),c.push(f),f.on("init",function(){var a,b=h;m.css("visibility",""),h&&++d==c.length&&("string"==typeof b&&(a=b.indexOf(".")===-1?null:i().resolve(b.replace(/\.\w+$/,"")),b=i().resolve(b)),b.apply(a||i(),c))}))}),f.each(c,function(a,b){b.render()})}var j,k,l,m=this,n="";if(!m.length)return m;if(!a)return i()?i().get(m[0].id):null;if(m.css("visibility","hidden"),g.tinymce||d||!(j=a.script_url))1===d?h.push(c):c();else{d=1,k=j.substring(0,j.lastIndexOf("/")),j.indexOf(".min")!=-1&&(n=".min"),g.tinymce=g.tinyMCEPreInit||{base:k,suffix:n},j.indexOf("gzip")!=-1&&(l=a.language||"en",j=j+(/\?/.test(j)?"&":"?")+"js=true&core=true&suffix="+escape(n)+"&themes="+escape(a.theme||"modern")+"&plugins="+escape(a.plugins||"")+"&languages="+(l||""),g.tinyMCE_GZ||(g.tinyMCE_GZ={start:function(){function b(a){i().ScriptLoader.markDone(i().baseURI.toAbsolute(a))}b("langs/"+l+".js"),b("themes/"+a.theme+"/theme"+n+".js"),b("themes/"+a.theme+"/langs/"+l+".js"),f.each(a.plugins.split(","),function(a,c){c&&(b("plugins/"+c+"/plugin"+n+".js"),b("plugins/"+c+"/langs/"+l+".js"))})},end:function(){}}));var o=document.createElement("script");o.type="text/javascript",o.onload=o.onreadystatechange=function(b){b=b||window.event,2===d||"load"!=b.type&&!/complete|loaded/.test(o.readyState)||(i().dom.Event.domLoaded=1,d=2,a.script_loaded&&a.script_loaded(),c(),f.each(h,function(a,b){b()}))},o.src=j,document.body.appendChild(o)}return m},f.extend(f.expr[":"],{tinymce:function(a){var b;return!!(a.id&&"tinymce"in g&&(b=i().get(a.id),b&&b.editorManager===i()))}})}}),d("0")()}();

+ 6 - 6
tracim/tracim/public/assets/tinymce/js/tinymce/license.txt View File

1
-		  GNU LESSER GENERAL PUBLIC LICENSE
2
-		       Version 2.1, February 1999
1
+      GNU LESSER GENERAL PUBLIC LICENSE
2
+           Version 2.1, February 1999
3
 
3
 
4
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
4
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
5
  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
10
  as the successor of the GNU Library Public License, version 2, hence
10
  as the successor of the GNU Library Public License, version 2, hence
11
  the version number 2.1.]
11
  the version number 2.1.]
12
 
12
 
13
-			    Preamble
13
+          Preamble
14
 
14
 
15
   The licenses for most software are designed to take away your
15
   The licenses for most software are designed to take away your
16
 freedom to share and change it.  By contrast, the GNU General Public
16
 freedom to share and change it.  By contrast, the GNU General Public
112
 former contains code derived from the library, whereas the latter must
112
 former contains code derived from the library, whereas the latter must
113
 be combined with the library in order to run.
113
 be combined with the library in order to run.
114
 
114
 
115
-		  GNU LESSER GENERAL PUBLIC LICENSE
115
+      GNU LESSER GENERAL PUBLIC LICENSE
116
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
116
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
 
117
 
118
   0. This License Agreement applies to any software library or other
118
   0. This License Agreement applies to any software library or other
432
 of all derivatives of our free software and of promoting the sharing
432
 of all derivatives of our free software and of promoting the sharing
433
 and reuse of software generally.
433
 and reuse of software generally.
434
 
434
 
435
-			    NO WARRANTY
435
+          NO WARRANTY
436
 
436
 
437
   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
437
   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
438
 WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
455
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
455
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
 DAMAGES.
456
 DAMAGES.
457
 
457
 
458
-		     END OF TERMS AND CONDITIONS
458
+         END OF TERMS AND CONDITIONS
459
 
459
 
460
            How to Apply These Terms to Your New Libraries
460
            How to Apply These Terms to Your New Libraries
461
 
461
 

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/advlist/plugin.min.js View File

1
-tinymce.PluginManager.add("advlist",function(t){function e(t,e){var n=[];return tinymce.each(e.split(/[ ,]/),function(t){n.push({text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()}),data:"default"==t?"":t})}),n}function n(e,n){var o,l=t.dom,a=t.selection;o=l.getParent(a.getNode(),"ol,ul"),o&&o.nodeName==e&&n!==!1||t.execCommand("UL"==e?"InsertUnorderedList":"InsertOrderedList"),n=n===!1?i[e]:n,i[e]=n,o=l.getParent(a.getNode(),"ol,ul"),o&&n&&(l.setStyle(o,"listStyleType",n),o.removeAttribute("data-mce-style")),t.focus()}function o(e){var n=t.dom.getStyle(t.dom.getParent(t.selection.getNode(),"ol,ul"),"listStyleType")||"";e.control.items().each(function(t){t.active(t.settings.data===n)})}var l,a,i={};l=e("OL",t.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),a=e("UL",t.getParam("advlist_bullet_styles","default,circle,disc,square")),t.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:l,onshow:o,onselect:function(t){n("OL",t.control.settings.data)},onclick:function(){n("OL",!1)}}),t.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:a,onshow:o,onselect:function(t){n("UL",t.control.settings.data)},onclick:function(){n("UL",!1)}})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("advlist",function(a){function c(b){return a.$.contains(a.getBody(),b)}function d(a){return a&&/^(OL|UL|DL)$/.test(a.nodeName)&&c(a)}function e(a,c){var d=[];return c&&b.each(c.split(/[ ,]/),function(a){d.push({text:a.replace(/\-/g," ").replace(/\b\w/g,function(a){return a.toUpperCase()}),data:"default"==a?"":a})}),d}function f(b,c){var d="UL"==b?"InsertUnorderedList":"InsertOrderedList";a.execCommand(d,!1,c===!1?null:{"list-style-type":c})}function g(b){var c=a.dom.getStyle(a.dom.getParent(a.selection.getNode(),"ol,ul"),"listStyleType")||"";b.control.items().each(function(a){a.active(a.settings.data===c)})}var h,i,j=function(a,c){var d=a.settings.plugins?a.settings.plugins:"";return b.inArray(d.split(/[ ,]/),c)!==-1};h=e("OL",a.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),i=e("UL",a.getParam("advlist_bullet_styles","default,circle,disc,square"));var k=function(c){return function(){var e=this;a.on("NodeChange",function(a){var f=b.grep(a.parents,d);e.active(f.length>0&&f[0].nodeName===c)})}};j(a,"lists")&&(a.addCommand("ApplyUnorderedListStyle",function(a,b){f("UL",b["list-style-type"])}),a.addCommand("ApplyOrderedListStyle",function(a,b){f("OL",b["list-style-type"])}),a.addButton("numlist",{type:h.length>0?"splitbutton":"button",tooltip:"Numbered list",menu:h,onPostRender:k("OL"),onshow:g,onselect:function(a){f("OL",a.control.settings.data)},onclick:function(){a.execCommand("InsertOrderedList")}}),a.addButton("bullist",{type:i.length>0?"splitbutton":"button",tooltip:"Bullet list",onPostRender:k("UL"),menu:i,onshow:g,onselect:function(a){f("UL",a.control.settings.data)},onclick:function(){a.execCommand("InsertUnorderedList")}}))}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/anchor/plugin.min.js View File

1
-tinymce.PluginManager.add("anchor",function(n){function e(){var e=n.selection.getNode(),t="";"A"==e.tagName&&(t=e.name||e.id||""),n.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:t},onsubmit:function(e){n.execCommand("mceInsertContent",!1,n.dom.createHTML("a",{id:e.data.name}))}})}n.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:e,stateSelector:"a:not([href])"}),n.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:e})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.Env")}),g("2",["3"],function(a){return a("tinymce.PluginManager")}),g("0",["1","2"],function(a,b){return b.add("anchor",function(b){var c=function(a){return!a.attr("href")&&(a.attr("id")||a.attr("name"))&&!a.firstChild},d=function(a){return function(b){for(var d=0;d<b.length;d++)c(b[d])&&b[d].attr("contenteditable",a)}},e=function(a){return/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(a)},f=function(){var a=b.selection.getNode(),c="A"==a.tagName&&""===b.dom.getAttrib(a,"href"),d="";c&&(d=a.id||a.name||""),b.windowManager.open({title:"Anchor",body:{type:"textbox",name:"id",size:40,label:"Id",value:d},onsubmit:function(d){var f=d.data.id;return e(f)?void(c?(a.removeAttribute("name"),a.id=f):(b.selection.collapse(!0),b.execCommand("mceInsertContent",!1,b.dom.createHTML("a",{id:f})))):(d.preventDefault(),void b.windowManager.alert("Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."))}})};a.ceFalse&&b.on("PreInit",function(){b.parser.addNodeFilter("a",d("false")),b.serializer.addNodeFilter("a",d(null))}),b.addCommand("mceAnchor",f),b.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:f,stateSelector:"a:not([href])"}),b.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:f})}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/autolink/plugin.min.js View File

1
-tinymce.PluginManager.add("autolink",function(n){function t(n){o(n,-1,"(",!0)}function e(n){o(n,0,"",!0)}function i(n){o(n,-1,"",!1)}function o(n,t,e){function i(n,t){if(0>t&&(t=0),3==n.nodeType){var e=n.data.length;t>e&&(t=e)}return t}function o(n,t){f.setStart(n,i(n,t))}function r(n,t){f.setEnd(n,i(n,t))}var f,d,a,s,c,l,u,g,h,C;if(f=n.selection.getRng(!0).cloneRange(),f.startOffset<5){if(g=f.endContainer.previousSibling,!g){if(!f.endContainer.firstChild||!f.endContainer.firstChild.nextSibling)return;g=f.endContainer.firstChild.nextSibling}if(h=g.length,o(g,h),r(g,h),f.endOffset<5)return;d=f.endOffset,s=g}else{if(s=f.endContainer,3!=s.nodeType&&s.firstChild){for(;3!=s.nodeType&&s.firstChild;)s=s.firstChild;3==s.nodeType&&(o(s,0),r(s,s.nodeValue.length))}d=1==f.endOffset?2:f.endOffset-1-t}a=d;do o(s,d>=2?d-2:0),r(s,d>=1?d-1:0),d-=1,C=f.toString();while(" "!=C&&""!==C&&160!=C.charCodeAt(0)&&d-2>=0&&C!=e);f.toString()==e||160==f.toString().charCodeAt(0)?(o(s,d),r(s,a),d+=1):0===f.startOffset?(o(s,0),r(s,a)):(o(s,d),r(s,a)),l=f.toString(),"."==l.charAt(l.length-1)&&r(s,a-1),l=f.toString(),u=l.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),u&&("www."==u[1]?u[1]="http://www.":/@$/.test(u[1])&&!/^mailto:/.test(u[1])&&(u[1]="mailto:"+u[1]),c=n.selection.getBookmark(),n.selection.setRng(f),n.execCommand("createlink",!1,u[1]+u[2]),n.selection.moveToBookmark(c),n.nodeChanged())}var r;return n.on("keydown",function(t){return 13==t.keyCode?i(n):void 0}),tinymce.Env.ie?void n.on("focus",function(){if(!r){r=!0;try{n.execCommand("AutoUrlDetect",!1,!0)}catch(t){}}}):(n.on("keypress",function(e){return 41==e.keyCode?t(n):void 0}),void n.on("keyup",function(t){return 32==t.keyCode?e(n):void 0}))});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.Env")}),g("2",["3"],function(a){return a("tinymce.PluginManager")}),g("0",["1","2"],function(a,b){var c=function(a,b){return a===b||" "===a||160===a.charCodeAt(0)};return b.add("autolink",function(b){function d(a){g(a,-1,"(",!0)}function e(a){g(a,0,"",!0)}function f(a){g(a,-1,"",!1)}function g(a,b,d){function e(a,b){if(b<0&&(b=0),3==a.nodeType){var c=a.data.length;b>c&&(b=c)}return b}function f(a,b){1!=a.nodeType||a.hasChildNodes()?h.setStart(a,e(a,b)):h.setStartBefore(a)}function g(a,b){1!=a.nodeType||a.hasChildNodes()?h.setEnd(a,e(a,b)):h.setEndAfter(a)}var h,j,k,l,m,n,o,p,q,r;if("A"!=a.selection.getNode().tagName){if(h=a.selection.getRng(!0).cloneRange(),h.startOffset<5){if(p=h.endContainer.previousSibling,!p){if(!h.endContainer.firstChild||!h.endContainer.firstChild.nextSibling)return;p=h.endContainer.firstChild.nextSibling}if(q=p.length,f(p,q),g(p,q),h.endOffset<5)return;j=h.endOffset,l=p}else{if(l=h.endContainer,3!=l.nodeType&&l.firstChild){for(;3!=l.nodeType&&l.firstChild;)l=l.firstChild;3==l.nodeType&&(f(l,0),g(l,l.nodeValue.length))}j=1==h.endOffset?2:h.endOffset-1-b}k=j;do f(l,j>=2?j-2:0),g(l,j>=1?j-1:0),j-=1,r=h.toString();while(" "!=r&&""!==r&&160!=r.charCodeAt(0)&&j-2>=0&&r!=d);c(h.toString(),d)?(f(l,j),g(l,k),j+=1):0===h.startOffset?(f(l,0),g(l,k)):(f(l,j),g(l,k)),n=h.toString(),"."==n.charAt(n.length-1)&&g(l,k-1),n=h.toString(),o=n.match(i),o&&("www."==o[1]?o[1]="http://www.":/@$/.test(o[1])&&!/^mailto:/.test(o[1])&&(o[1]="mailto:"+o[1]),m=a.selection.getBookmark(),a.selection.setRng(h),a.execCommand("createlink",!1,o[1]+o[2]),a.settings.default_link_target&&a.dom.setAttrib(a.selection.getNode(),"target",a.settings.default_link_target),a.selection.moveToBookmark(m),a.nodeChanged())}}var h,i=/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i;return b.settings.autolink_pattern&&(i=b.settings.autolink_pattern),b.on("keydown",function(a){if(13==a.keyCode)return f(b)}),a.ie?void b.on("focus",function(){if(!h){h=!0;try{b.execCommand("AutoUrlDetect",!1,!0)}catch(a){}}}):(b.on("keypress",function(a){if(41==a.keyCode)return d(b)}),void b.on("keyup",function(a){if(32==a.keyCode)return e(b)}))}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/autoresize/plugin.min.js View File

1
-tinymce.PluginManager.add("autoresize",function(e){function t(){return e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()}function i(o){var r,s,g,m,l,d,u,h,f,c,_,p,y=tinymce.DOM;if(s=e.getDoc()){if(g=s.body,m=s.documentElement,l=n.autoresize_min_height,!g||o&&"setcontent"===o.type&&o.initial||t())return void(g&&m&&(g.style.overflowY="auto",m.style.overflowY="auto"));u=e.dom.getStyle(g,"margin-top",!0),h=e.dom.getStyle(g,"margin-bottom",!0),f=e.dom.getStyle(g,"padding-top",!0),c=e.dom.getStyle(g,"padding-bottom",!0),_=e.dom.getStyle(g,"border-top-width",!0),p=e.dom.getStyle(g,"border-bottom-width",!0),d=g.offsetHeight+parseInt(u,10)+parseInt(h,10)+parseInt(f,10)+parseInt(c,10)+parseInt(_,10)+parseInt(p,10),(isNaN(d)||0>=d)&&(d=tinymce.Env.ie?g.scrollHeight:tinymce.Env.webkit&&0===g.clientHeight?0:g.offsetHeight),d>n.autoresize_min_height&&(l=d),n.autoresize_max_height&&d>n.autoresize_max_height?(l=n.autoresize_max_height,g.style.overflowY="auto",m.style.overflowY="auto"):(g.style.overflowY="hidden",m.style.overflowY="hidden",g.scrollTop=0),l!==a&&(r=l-a,y.setStyle(e.iframeElement,"height",l+"px"),a=l,tinymce.isWebKit&&0>r&&i(o))}}function o(e,t,n){setTimeout(function(){i({}),e--?o(e,t,n):n&&n()},t)}var n=e.settings,a=0;e.settings.inline||(n.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),n.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t=e.getParam("autoresize_overflow_padding",1);e.dom.setStyles(e.getBody(),{paddingBottom:e.getParam("autoresize_bottom_margin",50),paddingLeft:t,paddingRight:t})}),e.on("nodechange setcontent keyup FullscreenStateChanged",i),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){o(20,100,function(){o(5,1e3)})}),e.addCommand("mceAutoResize",i))});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("5",tinymce.util.Tools.resolve),g("1",["5"],function(a){return a("tinymce.dom.DOMUtils")}),g("2",["5"],function(a){return a("tinymce.Env")}),g("3",["5"],function(a){return a("tinymce.PluginManager")}),g("4",["5"],function(a){return a("tinymce.util.Delay")}),g("0",["1","2","3","4"],function(a,b,c,d){var e=a.DOM;return c.add("autoresize",function(a){function c(){return a.plugins.fullscreen&&a.plugins.fullscreen.isFullscreen()}function f(d){var g,j,k,l,m,n,o,p,q,r,s,t;if(j=a.getDoc()){if(k=j.body,l=j.documentElement,m=h.autoresize_min_height,!k||d&&"setcontent"===d.type&&d.initial||c())return void(k&&l&&(k.style.overflowY="auto",l.style.overflowY="auto"));o=a.dom.getStyle(k,"margin-top",!0),p=a.dom.getStyle(k,"margin-bottom",!0),q=a.dom.getStyle(k,"padding-top",!0),r=a.dom.getStyle(k,"padding-bottom",!0),s=a.dom.getStyle(k,"border-top-width",!0),t=a.dom.getStyle(k,"border-bottom-width",!0),n=k.offsetHeight+parseInt(o,10)+parseInt(p,10)+parseInt(q,10)+parseInt(r,10)+parseInt(s,10)+parseInt(t,10),(isNaN(n)||n<=0)&&(n=b.ie?k.scrollHeight:b.webkit&&0===k.clientHeight?0:k.offsetHeight),n>h.autoresize_min_height&&(m=n),h.autoresize_max_height&&n>h.autoresize_max_height?(m=h.autoresize_max_height,k.style.overflowY="auto",l.style.overflowY="auto"):(k.style.overflowY="hidden",l.style.overflowY="hidden",k.scrollTop=0),m!==i&&(g=m-i,e.setStyle(a.iframeElement,"height",m+"px"),i=m,b.webKit&&g<0&&f(d))}}function g(b,c,e){d.setEditorTimeout(a,function(){f({}),b--?g(b,c,e):e&&e()},c)}var h=a.settings,i=0;a.settings.inline||(h.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight),10),h.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0),10),a.on("init",function(){var b,c;b=a.getParam("autoresize_overflow_padding",1),c=a.getParam("autoresize_bottom_margin",50),b!==!1&&a.dom.setStyles(a.getBody(),{paddingLeft:b,paddingRight:b}),c!==!1&&a.dom.setStyles(a.getBody(),{paddingBottom:c})}),a.on("nodechange setcontent keyup FullscreenStateChanged",f),a.getParam("autoresize_on_init",!0)&&a.on("init",function(){g(20,100,function(){g(5,1e3)})}),a.addCommand("mceAutoResize",f))}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/autosave/plugin.min.js View File

1
-tinymce._beforeUnloadHandler=function(){var e;return tinymce.each(tinymce.editors,function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e},tinymce.PluginManager.add("autosave",function(e){function t(e,t){var n={s:1e3,m:6e4};return e=/^(\d+)([ms]?)$/.exec(""+(e||t)),(e[2]?n[e[2]]:1)*parseInt(e,10)}function n(){var e=parseInt(v.getItem(c+"time"),10)||0;return(new Date).getTime()-e>m.autosave_retention?(a(!1),!1):!0}function a(t){v.removeItem(c+"draft"),v.removeItem(c+"time"),t!==!1&&e.fire("RemoveDraft")}function r(){!f()&&e.isDirty()&&(v.setItem(c+"draft",e.getContent({format:"raw",no_events:!0})),v.setItem(c+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(v.getItem(c+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function i(){d||(setInterval(function(){e.removed||r()},m.autosave_interval),d=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),i()}function u(){e.undoManager.beforeChange(),o(),a(),e.undoManager.add()}function f(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>(( |&nbsp;|[ 	]|<br[^>]*>)+?|)</"+n+">|<br>$","i").test(t)}var c,d,m=e.settings,v=tinymce.util.LocalStorage;c=m.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",c=c.replace(/\{path\}/g,document.location.pathname),c=c.replace(/\{query\}/g,document.location.search),c=c.replace(/\{id\}/g,e.id),m.autosave_interval=t(m.autosave_interval,"30s"),m.autosave_retention=t(m.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:u,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:u,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&f()&&o()}),e.on("saveContent",function(){a()})),window.onbeforeunload=tinymce._beforeUnloadHandler,this.hasDraft=n,this.storeDraft=r,this.restoreDraft=o,this.removeDraft=a,this.isEmpty=f});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("6",tinymce.util.Tools.resolve),g("1",["6"],function(a){return a("tinymce.EditorManager")}),g("2",["6"],function(a){return a("tinymce.PluginManager")}),g("3",["6"],function(a){return a("tinymce.util.LocalStorage")}),g("4",["6"],function(a){return a("tinymce.util.Tools")}),h("5",window),g("0",["1","2","3","4","5"],function(a,b,c,d,e){return a._beforeUnloadHandler=function(){var b;return d.each(a.get(),function(a){a.plugins.autosave&&a.plugins.autosave.storeDraft(),!b&&a.isDirty()&&a.getParam("autosave_ask_before_unload",!0)&&(b=a.translate("You have unsaved changes are you sure you want to navigate away?"))}),b},b.add("autosave",function(b){function f(a,b){var c={s:1e3,m:6e4};return a=/^(\d+)([ms]?)$/.exec(""+(a||b)),(a[2]?c[a[2]]:1)*parseInt(a,10)}function g(){var a=parseInt(c.getItem(o+"time"),10)||0;return!((new Date).getTime()-a>q.autosave_retention)||(h(!1),!1)}function h(a){c.removeItem(o+"draft"),c.removeItem(o+"time"),a!==!1&&b.fire("RemoveDraft")}function i(){!n()&&b.isDirty()&&(c.setItem(o+"draft",b.getContent({format:"raw",no_events:!0})),c.setItem(o+"time",(new Date).getTime()),b.fire("StoreDraft"))}function j(){g()&&(b.setContent(c.getItem(o+"draft"),{format:"raw"}),b.fire("RestoreDraft"))}function k(){p||(setInterval(function(){b.removed||i()},q.autosave_interval),p=!0)}function l(){var a=this;a.disabled(!g()),b.on("StoreDraft RestoreDraft RemoveDraft",function(){a.disabled(!g())}),k()}function m(){b.undoManager.beforeChange(),j(),h(),b.undoManager.add()}function n(a){var c=b.settings.forced_root_block;return a=d.trim("undefined"==typeof a?b.getBody().innerHTML:a),""===a||new RegExp("^<"+c+"[^>]*>((\xa0|&nbsp;|[ \t]|<br[^>]*>)+?|)</"+c+">|<br>$","i").test(a)}var o,p,q=b.settings;o=q.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",o=o.replace(/\{path\}/g,document.location.pathname),o=o.replace(/\{query\}/g,document.location.search),o=o.replace(/\{id\}/g,b.id),q.autosave_interval=f(q.autosave_interval,"30s"),q.autosave_retention=f(q.autosave_retention,"20m"),b.addButton("restoredraft",{title:"Restore last draft",onclick:m,onPostRender:l}),b.addMenuItem("restoredraft",{text:"Restore last draft",onclick:m,onPostRender:l,context:"file"}),b.settings.autosave_restore_when_empty!==!1&&(b.on("init",function(){g()&&n()&&j()}),b.on("saveContent",function(){h()})),e.onbeforeunload=a._beforeUnloadHandler,this.hasDraft=g,this.storeDraft=i,this.restoreDraft=j,this.removeDraft=h,this.isEmpty=n}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/bbcode/plugin.min.js View File

1
-!function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(o){var e=this,t=o.getParam("bbcode_dialect","punbb").toLowerCase();o.on("beforeSetContent",function(o){o.content=e["_"+t+"_bbcode2html"](o.content)}),o.on("postProcess",function(o){o.set&&(o.content=e["_"+t+"_bbcode2html"](o.content)),o.get&&(o.content=e["_"+t+"_html2bbcode"](o.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"),e(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]"),e(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]"),e(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]"),e(/<font>(.*?)<\/font>/gi,"$1"),e(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"),e(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]"),e(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]"),e(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),e(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),e(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),e(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),e(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),e(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),e(/<\/(strong|b)>/gi,"[/b]"),e(/<(strong|b)>/gi,"[b]"),e(/<\/(em|i)>/gi,"[/i]"),e(/<(em|i)>/gi,"[i]"),e(/<\/u>/gi,"[/u]"),e(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]"),e(/<u>/gi,"[u]"),e(/<blockquote[^>]*>/gi,"[quote]"),e(/<\/blockquote>/gi,"[/quote]"),e(/<br \/>/gi,"\n"),e(/<br\/>/gi,"\n"),e(/<br>/gi,"\n"),e(/<p>/gi,""),e(/<\/p>/gi,"\n"),e(/&nbsp;|\u00a0/gi," "),e(/&quot;/gi,'"'),e(/&lt;/gi,"<"),e(/&gt;/gi,">"),e(/&amp;/gi,"&"),o},_punbb_bbcode2html:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/\n/gi,"<br />"),e(/\[b\]/gi,"<strong>"),e(/\[\/b\]/gi,"</strong>"),e(/\[i\]/gi,"<em>"),e(/\[\/i\]/gi,"</em>"),e(/\[u\]/gi,"<u>"),e(/\[\/u\]/gi,"</u>"),e(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>'),e(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>'),e(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />'),e(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>'),e(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;'),e(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;'),o}}),tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)}();
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("bbcode",function(){return{init:function(a){var b=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.on("beforeSetContent",function(a){a.content=b["_"+c+"_bbcode2html"](a.content)}),a.on("postProcess",function(a){a.set&&(a.content=b["_"+c+"_bbcode2html"](a.content)),a.get&&(a.content=b["_"+c+"_html2bbcode"](a.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Ephox Corp",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(a){function c(b,c){a=a.replace(b,c)}return a=b.trim(a),c(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"),c(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),c(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),c(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),c(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),c(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]"),c(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]"),c(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]"),c(/<font>(.*?)<\/font>/gi,"$1"),c(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]"),c(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]"),c(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]"),c(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),c(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),c(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),c(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),c(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),c(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),c(/<\/(strong|b)>/gi,"[/b]"),c(/<(strong|b)>/gi,"[b]"),c(/<\/(em|i)>/gi,"[/i]"),c(/<(em|i)>/gi,"[i]"),c(/<\/u>/gi,"[/u]"),c(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]"),c(/<u>/gi,"[u]"),c(/<blockquote[^>]*>/gi,"[quote]"),c(/<\/blockquote>/gi,"[/quote]"),c(/<br \/>/gi,"\n"),c(/<br\/>/gi,"\n"),c(/<br>/gi,"\n"),c(/<p>/gi,""),c(/<\/p>/gi,"\n"),c(/&nbsp;|\u00a0/gi," "),c(/&quot;/gi,'"'),c(/&lt;/gi,"<"),c(/&gt;/gi,">"),c(/&amp;/gi,"&"),a},_punbb_bbcode2html:function(a){function c(b,c){a=a.replace(b,c)}return a=b.trim(a),c(/\n/gi,"<br />"),c(/\[b\]/gi,"<strong>"),c(/\[\/b\]/gi,"</strong>"),c(/\[i\]/gi,"<em>"),c(/\[\/i\]/gi,"</em>"),c(/\[u\]/gi,"<u>"),c(/\[\/u\]/gi,"</u>"),c(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>'),c(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>'),c(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />'),c(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>'),c(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;'),c(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;'),a}}}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/charmap/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/code/plugin.min.js View File

1
-tinymce.PluginManager.add("code",function(e){function o(){var o=e.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:e.getParam("code_dialog_width",600),minHeight:e.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(o){e.focus(),e.undoManager.transact(function(){e.setContent(o.data.code)}),e.selection.setCursorLocation(),e.nodeChanged()}});o.find("#code").value(e.getContent({source_view:!0}))}e.addCommand("mceCodeEditor",o),e.addButton("code",{icon:"code",tooltip:"Source code",onclick:o}),e.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:o})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.dom.DOMUtils")}),g("2",["3"],function(a){return a("tinymce.PluginManager")}),g("0",["1","2"],function(a,b){return b.add("code",function(b){function c(){var c=b.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:b.getParam("code_dialog_width",600),minHeight:b.getParam("code_dialog_height",Math.min(a.DOM.getViewPort().h-200,500)),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(a){b.focus(),b.undoManager.transact(function(){b.setContent(a.data.code)}),b.selection.setCursorLocation(),b.nodeChanged()}});c.find("#code").value(b.getContent({source_view:!0}))}b.addCommand("mceCodeEditor",c),b.addButton("code",{icon:"code",tooltip:"Source code",onclick:c}),b.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:c})}),function(){}}),d("0")()}();

+ 138 - 0
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/codesample/css/prism.css View File

1
+/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */
2
+/**
3
+ * prism.js default theme for JavaScript, CSS and HTML
4
+ * Based on dabblet (http://dabblet.com)
5
+ * @author Lea Verou
6
+ */
7
+
8
+code[class*="language-"],
9
+pre[class*="language-"] {
10
+  color: black;
11
+  text-shadow: 0 1px white;
12
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
13
+  direction: ltr;
14
+  text-align: left;
15
+  white-space: pre;
16
+  word-spacing: normal;
17
+  word-break: normal;
18
+  word-wrap: normal;
19
+  line-height: 1.5;
20
+
21
+  -moz-tab-size: 4;
22
+  -o-tab-size: 4;
23
+  tab-size: 4;
24
+
25
+  -webkit-hyphens: none;
26
+  -moz-hyphens: none;
27
+  -ms-hyphens: none;
28
+  hyphens: none;
29
+}
30
+
31
+pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
32
+code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
33
+  text-shadow: none;
34
+  background: #b3d4fc;
35
+}
36
+
37
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
38
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
39
+  text-shadow: none;
40
+  background: #b3d4fc;
41
+}
42
+
43
+@media print {
44
+  code[class*="language-"],
45
+  pre[class*="language-"] {
46
+    text-shadow: none;
47
+  }
48
+}
49
+
50
+/* Code blocks */
51
+pre[class*="language-"] {
52
+  padding: 1em;
53
+  margin: .5em 0;
54
+  overflow: auto;
55
+}
56
+
57
+:not(pre) > code[class*="language-"],
58
+pre[class*="language-"] {
59
+  background: #f5f2f0;
60
+}
61
+
62
+/* Inline code */
63
+:not(pre) > code[class*="language-"] {
64
+  padding: .1em;
65
+  border-radius: .3em;
66
+}
67
+
68
+.token.comment,
69
+.token.prolog,
70
+.token.doctype,
71
+.token.cdata {
72
+  color: slategray;
73
+}
74
+
75
+.token.punctuation {
76
+  color: #999;
77
+}
78
+
79
+.namespace {
80
+  opacity: .7;
81
+}
82
+
83
+.token.property,
84
+.token.tag,
85
+.token.boolean,
86
+.token.number,
87
+.token.constant,
88
+.token.symbol,
89
+.token.deleted {
90
+  color: #905;
91
+}
92
+
93
+.token.selector,
94
+.token.attr-name,
95
+.token.string,
96
+.token.char,
97
+.token.builtin,
98
+.token.inserted {
99
+  color: #690;
100
+}
101
+
102
+.token.operator,
103
+.token.entity,
104
+.token.url,
105
+.language-css .token.string,
106
+.style .token.string {
107
+  color: #a67f59;
108
+  background: hsla(0, 0%, 100%, .5);
109
+}
110
+
111
+.token.atrule,
112
+.token.attr-value,
113
+.token.keyword {
114
+  color: #07a;
115
+}
116
+
117
+.token.function {
118
+  color: #DD4A68;
119
+}
120
+
121
+.token.regex,
122
+.token.important,
123
+.token.variable {
124
+  color: #e90;
125
+}
126
+
127
+.token.important,
128
+.token.bold {
129
+  font-weight: bold;
130
+}
131
+.token.italic {
132
+  font-style: italic;
133
+}
134
+
135
+.token.entity {
136
+  cursor: help;
137
+}
138
+

File diff suppressed because it is too large
+ 1 - 0
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/codesample/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js View File

1
-tinymce.PluginManager.add("colorpicker",function(e){function n(n,a){function i(e){var n=new tinymce.util.Color(e),a=n.toRgb();l.fromJSON({r:a.r,g:a.g,b:a.b,hex:n.toHex().substr(1)}),t(n.toHex())}function t(e){l.find("#preview")[0].getEl().style.background=e}var l=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:a,onchange:function(){var e=this.rgb();l&&(l.find("#r").value(e.r),l.find("#g").value(e.g),l.find("#b").value(e.b),l.find("#hex").value(this.value().substr(1)),t(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,n,a=l.find("colorpicker")[0];return e=this.name(),n=this.value(),"hex"==e?(n="#"+n,i(n),void a.value(n)):(n={r:l.find("#r").value(),g:l.find("#g").value(),b:l.find("#b").value()},a.value(n),void i(n))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){n("#"+this.toJSON().hex)}});i(a)}e.settings.color_picker_callback||(e.settings.color_picker_callback=n)});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Color")}),g("0",["1","2"],function(a,b){return a.add("colorpicker",function(a){function c(c,d){function e(a){var c=new b(a),d=c.toRgb();g.fromJSON({r:d.r,g:d.g,b:d.b,hex:c.toHex().substr(1)}),f(c.toHex())}function f(a){g.find("#preview")[0].getEl().style.background=a}var g=a.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:d,onchange:function(){var a=this.rgb();g&&(g.find("#r").value(a.r),g.find("#g").value(a.g),g.find("#b").value(a.b),g.find("#hex").value(this.value().substr(1)),f(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var a,b,c=g.find("colorpicker")[0];return a=this.name(),b=this.value(),"hex"==a?(b="#"+b,e(b),void c.value(b)):(b={r:g.find("#r").value(),g:g.find("#g").value(),b:g.find("#b").value()},c.value(b),void e(b))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){c("#"+this.toJSON().hex)}});e(d)}a.settings.color_picker_callback||(a.settings.color_picker_callback=c)}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/directionality/plugin.min.js View File

1
-tinymce.PluginManager.add("directionality",function(t){function e(e){var i,n=t.dom,r=t.selection.getSelectedBlocks();r.length&&(i=n.getAttrib(r[0],"dir"),tinymce.each(r,function(t){n.getParent(t.parentNode,"*[dir='"+e+"']",n.getRoot())||(i!=e?n.setAttrib(t,"dir",e):n.setAttrib(t,"dir",null))}),t.nodeChanged())}function i(t){var e=[];return tinymce.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(i){e.push(i+"[dir="+t+"]")}),e.join(",")}t.addCommand("mceDirectionLTR",function(){e("ltr")}),t.addCommand("mceDirectionRTL",function(){e("rtl")}),t.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:i("ltr")}),t.addButton("rtl",{title:"Right to left",cmd:"mceDirectionRTL",stateSelector:i("rtl")})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("directionality",function(a){function c(c){var d,e=a.dom,f=a.selection.getSelectedBlocks();f.length&&(d=e.getAttrib(f[0],"dir"),b.each(f,function(a){e.getParent(a.parentNode,"*[dir='"+c+"']",e.getRoot())||(d!=c?e.setAttrib(a,"dir",c):e.setAttrib(a,"dir",null))}),a.nodeChanged())}function d(a){var c=[];return b.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(b){c.push(b+"[dir="+a+"]")}),c.join(",")}a.addCommand("mceDirectionLTR",function(){c("ltr")}),a.addCommand("mceDirectionRTL",function(){c("rtl")}),a.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:d("ltr")}),a.addButton("rtl",{title:"Right to left",cmd:"mceDirectionRTL",stateSelector:d("rtl")})}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/emoticons/plugin.min.js View File

1
-tinymce.PluginManager.add("emoticons",function(t,e){function a(){var t;return t='<table role="list" class="mce-grid">',tinymce.each(i,function(a){t+="<tr>",tinymce.each(a,function(a){var i=e+"/img/smiley-"+a+".gif";t+='<td><a href="#" data-mce-url="'+i+'" data-mce-alt="'+a+'" tabindex="-1" role="option" aria-label="'+a+'"><img src="'+i+'" style="width: 18px; height: 18px" role="presentation" /></a></td>'}),t+="</tr>"}),t+="</table>"}var i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];t.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:a,onclick:function(e){var a=t.dom.getParent(e.target,"a");a&&(t.insertContent('<img src="'+a.getAttribute("data-mce-url")+'" alt="'+a.getAttribute("data-mce-alt")+'" />'),this.hide())}},tooltip:"Emoticons"})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("emoticons",function(a,c){function d(){var a;return a='<table role="list" class="mce-grid">',b.each(e,function(d){a+="<tr>",b.each(d,function(b){var d=c+"/img/smiley-"+b+".gif";a+='<td><a href="#" data-mce-url="'+d+'" data-mce-alt="'+b+'" tabindex="-1" role="option" aria-label="'+b+'"><img src="'+d+'" style="width: 18px; height: 18px" role="presentation" /></a></td>'}),a+="</tr>"}),a+="</table>"}var e=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];a.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:d,onclick:function(b){var c=a.dom.getParent(b.target,"a");c&&(a.insertContent('<img src="'+c.getAttribute("data-mce-url")+'" alt="'+c.getAttribute("data-mce-alt")+'" />'),this.hide())}},tooltip:"Emoticons"})}),function(){}}),d("0")()}();

+ 0 - 8
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/example/dialog.html View File

1
-<!DOCTYPE html>
2
-<html>
3
-<body>
4
-	<h3>Custom dialog</h3>
5
-	Input some text: <input id="content">
6
-	<button onclick="top.tinymce.activeEditor.windowManager.getWindows()[0].close();">Close window</button>
7
-</body>
8
-</html>

+ 0 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/example/plugin.min.js View File

1
-tinymce.PluginManager.add("example",function(t,e){t.addButton("example",{text:"My button",icon:!1,onclick:function(){t.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(e){t.insertContent("Title: "+e.data.title)}})}}),t.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){t.windowManager.open({title:"TinyMCE site",url:e+"/dialog.html",width:600,height:400,buttons:[{text:"Insert",onclick:function(){var e=t.windowManager.getWindows()[0];t.insertContent(e.getContentWindow().document.getElementById("content").value),e.close()}},{text:"Close",onclick:"close"}]})}})});

+ 0 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js View File

1
-tinymce.PluginManager.add("example_dependency",function(){},["example"]);

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/fullpage/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js View File

1
-tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,l=i.body;return l.offsetWidth&&(e=l.offsetWidth,t=l.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){d.setStyle(a,"height",t().h-(h.clientHeight-a.clientHeight))}var u,h,a,f,m=document.body,g=document.documentElement;s=!s,h=e.getContainer(),u=h.style,a=e.getContentAreaContainer().firstChild,f=a.style,s?(i=f.width,l=f.height,f.width=f.height="100%",c=u.width,o=u.height,u.width=u.height="",d.addClass(m,"mce-fullscreen"),d.addClass(g,"mce-fullscreen"),d.addClass(h,"mce-fullscreen"),d.bind(window,"resize",n),n(),r=n):(f.width=i,f.height=l,c&&(u.width=c),o&&(u.height=o),d.removeClass(m,"mce-fullscreen"),d.removeClass(g,"mce-fullscreen"),d.removeClass(h,"mce-fullscreen"),d.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:s})}var i,l,r,c,o,s=!1,d=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&d.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return s}})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.dom.DOMUtils")}),g("2",["3"],function(a){return a("tinymce.PluginManager")}),g("0",["1","2"],function(a,b){var c=a.DOM;return b.add("fullscreen",function(a){function b(){var a,b,c=window,d=document,e=d.body;return e.offsetWidth&&(a=e.offsetWidth,b=e.offsetHeight),c.innerWidth&&c.innerHeight&&(a=c.innerWidth,b=c.innerHeight),{w:a,h:b}}function d(){var a=c.getViewPort();return{x:a.x,y:a.y}}function e(a){window.scrollTo(a.x,a.y)}function f(){function f(){c.setStyle(p,"height",b().h-(o.clientHeight-p.clientHeight))}var n,o,p,q,r=document.body,s=document.documentElement;m=!m,o=a.getContainer(),n=o.style,p=a.getContentAreaContainer().firstChild,q=p.style,m?(l=d(),g=q.width,h=q.height,q.width=q.height="100%",j=n.width,k=n.height,n.width=n.height="",c.addClass(r,"mce-fullscreen"),c.addClass(s,"mce-fullscreen"),c.addClass(o,"mce-fullscreen"),c.bind(window,"resize",f),f(),i=f):(q.width=g,q.height=h,j&&(n.width=j),k&&(n.height=k),c.removeClass(r,"mce-fullscreen"),c.removeClass(s,"mce-fullscreen"),c.removeClass(o,"mce-fullscreen"),c.unbind(window,"resize",i),e(l)),a.fire("FullscreenStateChanged",{state:m})}var g,h,i,j,k,l,m=!1;if(!a.settings.inline)return a.on("init",function(){a.addShortcut("Ctrl+Shift+F","",f)}),a.on("remove",function(){i&&c.unbind(window,"resize",i)}),a.addCommand("mceFullScreen",f),a.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,onClick:function(){f(),a.focus()},onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})},context:"view"}),a.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Shift+F",onClick:f,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})}}),{isFullscreen:function(){return m}}}),function(){}}),d("0")()}();

BIN
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/help/img/logo.png View File


File diff suppressed because it is too large
+ 1 - 0
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/help/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/hr/plugin.min.js View File

1
-tinymce.PluginManager.add("hr",function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"<hr />")}),n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("2",tinymce.util.Tools.resolve),g("1",["2"],function(a){return a("tinymce.PluginManager")}),g("0",["1"],function(a){return a.add("hr",function(a){a.addCommand("InsertHorizontalRule",function(){a.execCommand("mceInsertContent",!1,"<hr />")}),a.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),a.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/image/plugin.min.js


File diff suppressed because it is too large
+ 2 - 0
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/imagetools/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/importcss/plugin.min.js View File

1
-tinymce.PluginManager.add("importcss",function(t){function e(t){return"string"==typeof t?function(e){return-1!==e.indexOf(t)}:t instanceof RegExp?function(e){return t.test(e)}:t}function n(e,n){function i(t,e){var c,o=t.href;if(o&&n(o,e)){s(t.imports,function(t){i(t,!0)});try{c=t.cssRules||t.rules}catch(a){}s(c,function(t){t.styleSheet?i(t.styleSheet,!0):t.selectorText&&s(t.selectorText.split(","),function(t){r.push(tinymce.trim(t))})})}}var r=[],c={};s(t.contentCSS,function(t){c[t]=!0}),n||(n=function(t,e){return e||c[t]});try{s(e.styleSheets,function(t){i(t)})}catch(o){}return r}function i(e){var n,i=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(e);if(i){var r=i[1],s=i[2].substr(1).split(".").join(" "),c=tinymce.makeMap("a,img");return i[1]?(n={title:e},t.schema.getTextBlockElements()[r]?n.block=r:t.schema.getBlockElements()[r]||c[r.toLowerCase()]?n.selector=r:n.inline=r):i[2]&&(n={inline:"span",title:e.substr(1),classes:s}),t.settings.importcss_merge_classes!==!1?n.classes=s:n.attributes={"class":s},n}}var r=this,s=tinymce.each;t.on("renderFormatsMenu",function(c){var o=t.settings,a={},l=o.importcss_selector_converter||i,f=e(o.importcss_selector_filter),m=c.control;t.settings.importcss_append||m.items().remove();var u=[];tinymce.each(o.importcss_groups,function(t){t=tinymce.extend({},t),t.filter=e(t.filter),u.push(t)}),s(n(c.doc||t.getDoc(),e(o.importcss_file_filter)),function(e){if(-1===e.indexOf(".mce-")&&!a[e]&&(!f||f(e))){var n,i=l.call(r,e);if(i){var s=i.name||tinymce.DOM.uniqueId();if(u)for(var c=0;c<u.length;c++)if(!u[c].filter||u[c].filter(e)){u[c].item||(u[c].item={text:u[c].title,menu:[]}),n=u[c].item.menu;break}t.formatter.register(s,i);var o=tinymce.extend({},m.settings.itemDefaults,{text:i.title,format:s});n?n.push(o):m.add(o)}a[e]=!0}}),s(u,function(t){m.add(t.item)}),c.control.renderNew()}),r.convertSelectorToFormat=i});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("6",tinymce.util.Tools.resolve),g("1",["6"],function(a){return a("tinymce.EditorManager")}),g("2",["6"],function(a){return a("tinymce.dom.DOMUtils")}),g("3",["6"],function(a){return a("tinymce.Env")}),g("4",["6"],function(a){return a("tinymce.PluginManager")}),g("5",["6"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2","3","4","5"],function(a,b,c,d,e){return d.add("importcss",function(d){function f(a){var b=c.cacheSuffix;return"string"==typeof a&&(a=a.replace("?"+b,"").replace("&"+b,"")),a}function g(b){var c=d.settings,e=c.skin!==!1&&(c.skin||"lightgray");if(e){var f=c.skin_url;return f=f?d.documentBaseURI.toAbsolute(f):a.baseURL+"/skins/"+e,b===f+"/content"+(d.inline?".inline":"")+".min.css"}return!1}function h(a){return"string"==typeof a?function(b){return b.indexOf(a)!==-1}:a instanceof RegExp?function(b){return a.test(b)}:a}function i(a,b){function c(a,d){var i,j=a.href;if(j=f(j),j&&b(j,d)&&!g(j)){r(a.imports,function(a){c(a,!0)});try{i=a.cssRules||a.rules}catch(a){}r(i,function(a){a.styleSheet?c(a.styleSheet,!0):a.selectorText&&r(a.selectorText.split(","),function(a){h.push(e.trim(a))})})}}var h=[],i={};r(d.contentCSS,function(a){i[a]=!0}),b||(b=function(a,b){return b||i[a]});try{r(a.styleSheets,function(a){c(a)})}catch(a){}return h}function j(a){var b,c=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(a);if(c){var f=c[1],g=c[2].substr(1).split(".").join(" "),h=e.makeMap("a,img");return c[1]?(b={title:a},d.schema.getTextBlockElements()[f]?b.block=f:d.schema.getBlockElements()[f]||h[f.toLowerCase()]?b.selector=f:b.inline=f):c[2]&&(b={inline:"span",title:a.substr(1),classes:g}),d.settings.importcss_merge_classes!==!1?b.classes=g:b.attributes={"class":g},b}}function k(a,b){return e.grep(a,function(a){return!a.filter||a.filter(b)})}function l(a){return e.map(a,function(a){return e.extend({},a,{original:a,selectors:{},filter:h(a.filter),item:{text:a.title,menu:[]}})})}function m(a,b){return null===b||a.settings.importcss_exclusive!==!1}function n(a,b,c){return!(m(d,b)?a in c:a in b.selectors)}function o(a,b,c){m(d,b)?c[a]=!0:b.selectors[a]=!0}function p(a,b,c){var e,f=d.settings;return e=c&&c.selector_converter?c.selector_converter:f.importcss_selector_converter?f.importcss_selector_converter:j,e.call(a,b,c)}var q=this,r=e.each;d.on("renderFormatsMenu",function(a){var c=d.settings,f={},g=h(c.importcss_selector_filter),j=a.control,m=l(c.importcss_groups),s=function(a,c){if(n(a,c,f)){o(a,c,f);var g=p(q,a,c);if(g){var h=g.name||b.DOM.uniqueId();return d.formatter.register(h,g),e.extend({},j.settings.itemDefaults,{text:g.title,format:h})}}return null};d.settings.importcss_append||j.items().remove(),r(i(a.doc||d.getDoc(),h(c.importcss_file_filter)),function(a){if(a.indexOf(".mce-")===-1&&(!g||g(a))){var b=k(m,a);if(b.length>0)e.each(b,function(b){var c=s(a,b);c&&b.item.menu.push(c)});else{var c=s(a,null);c&&j.add(c)}}}),r(m,function(a){a.item.menu.length>0&&j.add(a.item)}),a.control.renderNew()}),q.convertSelectorToFormat=j}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js View File

1
-tinymce.PluginManager.add("insertdatetime",function(e){function t(t,a){function n(e,t){if(e=""+e,e.length<t)for(var a=0;a<t-e.length;a++)e="0"+e;return e}return a=a||new Date,t=t.replace("%D","%m/%d/%Y"),t=t.replace("%r","%I:%M:%S %p"),t=t.replace("%Y",""+a.getFullYear()),t=t.replace("%y",""+a.getYear()),t=t.replace("%m",n(a.getMonth()+1,2)),t=t.replace("%d",n(a.getDate(),2)),t=t.replace("%H",""+n(a.getHours(),2)),t=t.replace("%M",""+n(a.getMinutes(),2)),t=t.replace("%S",""+n(a.getSeconds(),2)),t=t.replace("%I",""+((a.getHours()+11)%12+1)),t=t.replace("%p",""+(a.getHours()<12?"AM":"PM")),t=t.replace("%B",""+e.translate(m[a.getMonth()])),t=t.replace("%b",""+e.translate(c[a.getMonth()])),t=t.replace("%A",""+e.translate(d[a.getDay()])),t=t.replace("%a",""+e.translate(i[a.getDay()])),t=t.replace("%%","%")}function a(a){var n=t(a);if(e.settings.insertdatetime_element){var r;r=t(/%[HMSIp]/.test(a)?"%Y-%m-%dT%H:%M":"%Y-%m-%d"),n='<time datetime="'+r+'">'+n+"</time>";var i=e.dom.getParent(e.selection.getStart(),"time");if(i)return void e.dom.setOuterHTML(i,n)}e.insertContent(n)}var n,r,i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),d="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),c="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),u=[];e.addCommand("mceInsertDate",function(){a(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){a(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){a(n||r)},menu:u}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){r||(r=e),u.push({text:t(e),onclick:function(){n=e,a(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:u,context:"insert"})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("insertdatetime",function(a){function c(b,c){function d(a,b){if(a=""+a,a.length<b)for(var c=0;c<b-a.length;c++)a="0"+a;return a}return c=c||new Date,b=b.replace("%D","%m/%d/%Y"),b=b.replace("%r","%I:%M:%S %p"),b=b.replace("%Y",""+c.getFullYear()),b=b.replace("%y",""+c.getYear()),b=b.replace("%m",d(c.getMonth()+1,2)),b=b.replace("%d",d(c.getDate(),2)),b=b.replace("%H",""+d(c.getHours(),2)),b=b.replace("%M",""+d(c.getMinutes(),2)),b=b.replace("%S",""+d(c.getSeconds(),2)),b=b.replace("%I",""+((c.getHours()+11)%12+1)),b=b.replace("%p",""+(c.getHours()<12?"AM":"PM")),b=b.replace("%B",""+a.translate(j[c.getMonth()])),b=b.replace("%b",""+a.translate(i[c.getMonth()])),b=b.replace("%A",""+a.translate(h[c.getDay()])),b=b.replace("%a",""+a.translate(g[c.getDay()])),b=b.replace("%%","%")}function d(b){var d=c(b);if(a.settings.insertdatetime_element){var e;e=c(/%[HMSIp]/.test(b)?"%Y-%m-%dT%H:%M":"%Y-%m-%d"),d='<time datetime="'+e+'">'+d+"</time>";var f=a.dom.getParent(a.selection.getStart(),"time");if(f)return void a.dom.setOuterHTML(f,d)}a.insertContent(d)}var e,f,g="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),h="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),i="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),j="January February March April May June July August September October November December".split(" "),k=[];a.addCommand("mceInsertDate",function(){d(a.getParam("insertdatetime_dateformat",a.translate("%Y-%m-%d")))}),a.addCommand("mceInsertTime",function(){d(a.getParam("insertdatetime_timeformat",a.translate("%H:%M:%S")))}),a.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){d(e||f)},menu:k}),b.each(a.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(a){f||(f=a),k.push({text:c(a),onclick:function(){e=a,d(a)}})}),a.addMenuItem("insertdatetime",{icon:"date",text:"Date/time",menu:k,context:"insert"})}),function(){}}),d("0")()}();

+ 0 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/layer/plugin.min.js View File

1
-tinymce.PluginManager.add("layer",function(e){function t(e){do if(e.className&&-1!=e.className.indexOf("mceItemLayer"))return e;while(e=e.parentNode)}function o(t){var o=e.dom;tinymce.each(o.select("div,p",t),function(e){/^(absolute|relative|fixed)$/i.test(e.style.position)&&(e.hasVisual?o.addClass(e,"mceItemVisualAid"):o.removeClass(e,"mceItemVisualAid"),o.addClass(e,"mceItemLayer"))})}function d(o){var d,n,a=[],i=t(e.selection.getNode()),s=-1,l=-1;for(n=[],tinymce.walk(e.getBody(),function(e){1==e.nodeType&&/^(absolute|relative|static)$/i.test(e.style.position)&&n.push(e)},"childNodes"),d=0;d<n.length;d++)a[d]=n[d].style.zIndex?parseInt(n[d].style.zIndex,10):0,0>s&&n[d]==i&&(s=d);if(0>o){for(d=0;d<a.length;d++)if(a[d]<a[s]){l=d;break}l>-1?(n[s].style.zIndex=a[l],n[l].style.zIndex=a[s]):a[s]>0&&(n[s].style.zIndex=a[s]-1)}else{for(d=0;d<a.length;d++)if(a[d]>a[s]){l=d;break}l>-1?(n[s].style.zIndex=a[l],n[l].style.zIndex=a[s]):n[s].style.zIndex=a[s]+1}e.execCommand("mceRepaint")}function n(){var t=e.dom,o=t.getPos(t.getParent(e.selection.getNode(),"*")),d=e.getBody();e.dom.add(d,"div",{style:{position:"absolute",left:o.x,top:o.y>20?o.y:20,width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},e.selection.getContent()||e.getLang("layer.content")),tinymce.Env.ie&&t.setHTML(d,d.innerHTML)}function a(){var o=t(e.selection.getNode());o||(o=e.dom.getParent(e.selection.getNode(),"DIV,P,IMG")),o&&("absolute"==o.style.position.toLowerCase()?(e.dom.setStyles(o,{position:"",left:"",top:"",width:"",height:""}),e.dom.removeClass(o,"mceItemVisualAid"),e.dom.removeClass(o,"mceItemLayer")):(o.style.left||(o.style.left="20px"),o.style.top||(o.style.top="20px"),o.style.width||(o.style.width=o.width?o.width+"px":"100px"),o.style.height||(o.style.height=o.height?o.height+"px":"100px"),o.style.position="absolute",e.dom.setAttrib(o,"data-mce-style",""),e.addVisual(e.getBody())),e.execCommand("mceRepaint"),e.nodeChanged())}e.addCommand("mceInsertLayer",n),e.addCommand("mceMoveForward",function(){d(1)}),e.addCommand("mceMoveBackward",function(){d(-1)}),e.addCommand("mceMakeAbsolute",function(){a()}),e.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"}),e.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"}),e.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"}),e.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"}),e.on("init",function(){tinymce.Env.ie&&e.getDoc().execCommand("2D-Position",!1,!0)}),e.on("mouseup",function(o){var d=t(o.target);d&&e.dom.setAttrib(d,"data-mce-style","")}),e.on("mousedown",function(o){var d,n=o.target,a=e.getDoc();tinymce.Env.gecko&&(t(n)?"on"!==a.designMode&&(a.designMode="on",n=a.body,d=n.parentNode,d.removeChild(n),d.appendChild(n)):"on"==a.designMode&&(a.designMode="off"))}),e.on("NodeChange",o)});

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js View File

1
-!function(e){e.on("AddEditor",function(e){e.editor.settings.inline_styles=!1}),e.PluginManager.add("legacyoutput",function(t,n,i){t.on("init",function(){var n="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",i=e.explode(t.settings.font_size_style_values),a=t.schema;t.formatter.register({alignleft:{selector:n,attributes:{align:"left"}},aligncenter:{selector:n,attributes:{align:"center"}},alignright:{selector:n,attributes:{align:"right"}},alignjustify:{selector:n,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(i,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){a.addValidElements(e+"[*]")}),a.getElementRule("font")||a.addValidElements("font[face|size|color|style]"),e.each(n.split(","),function(e){var t=a.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})}),t.addButton("fontsizeselect",function(){var e=[],n="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7",i=t.settings.fontsize_formats||n;return t.$.each(i.split(" "),function(t,n){var i=n,a=n,o=n.split("=");o.length>1&&(i=o[0],a=o[1]),e.push({text:i,value:a})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:e,fixedWidth:!0,onPostRender:function(){var e=this;t.on("NodeChange",function(){var n;n=t.dom.getParent(t.selection.getNode(),"font"),e.value(n?n.size:"")})},onclick:function(e){e.control.settings.value&&t.execCommand("FontSize",!1,e.control.settings.value)}}}),t.addButton("fontselect",function(){function e(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}var n="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",a=[],o=e(t.settings.font_formats||n);return i.each(o,function(e,t){a.push({text:{raw:t[0]},value:t[1],textStyle:-1==t[1].indexOf("dings")?"font-family:"+t[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:a,fixedWidth:!0,onPostRender:function(){var e=this;t.on("NodeChange",function(){var n;n=t.dom.getParent(t.selection.getNode(),"font"),e.value(n?n.face:"")})},onselect:function(e){e.control.settings.value&&t.execCommand("FontName",!1,e.control.settings.value)}}})})}(tinymce);
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("legacyoutput",function(a,c,d){a.settings.inline_styles=!1,a.on("init",function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",d=b.explode(a.settings.font_size_style_values),e=a.schema;a.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignjustify:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(a){return b.inArray(d,a.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),b.each("b,i,u,strike".split(","),function(a){e.addValidElements(a+"[*]")}),e.getElementRule("font")||e.addValidElements("font[face|size|color|style]"),b.each(c.split(","),function(a){var b=e.getElementRule(a);b&&(b.attributes.align||(b.attributes.align={},b.attributesOrder.push("align")))})}),a.addButton("fontsizeselect",function(){var b=[],c="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7",d=a.settings.fontsizeFormats||c;return a.$.each(d.split(" "),function(a,c){var d=c,e=c,f=c.split("=");f.length>1&&(d=f[0],e=f[1]),b.push({text:d,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:b,fixedWidth:!0,onPostRender:function(){var b=this;a.on("NodeChange",function(){var c;c=a.dom.getParent(a.selection.getNode(),"font"),c?b.value(c.size):b.value("")})},onclick:function(b){b.control.settings.value&&a.execCommand("FontSize",!1,b.control.settings.value)}}}),a.addButton("fontselect",function(){function b(a){a=a.replace(/;$/,"").split(";");for(var b=a.length;b--;)a[b]=a[b].split("=");return a}var c="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",e=[],f=b(a.settings.font_formats||c);return d.each(f,function(a,b){e.push({text:{raw:b[0]},value:b[1],textStyle:b[1].indexOf("dings")==-1?"font-family:"+b[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:e,fixedWidth:!0,onPostRender:function(){var b=this;a.on("NodeChange",function(){var c;c=a.dom.getParent(a.selection.getNode(),"font"),c?b.value(c.face):b.value("")})},onselect:function(b){b.control.settings.value&&a.execCommand("FontName",!1,b.control.settings.value)}}})}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/link/plugin.min.js


File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/lists/plugin.min.js


BIN
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/media/moxieplayer.swf View File


File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/media/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js View File

1
-tinymce.PluginManager.add("nonbreaking",function(n){var e=n.getParam("nonbreaking_force_tab");if(n.addCommand("mceNonBreaking",function(){n.insertContent(n.plugins.visualchars&&n.plugins.visualchars.state?'<span class="mce-nbsp">&nbsp;</span>':"&nbsp;"),n.dom.setAttrib(n.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),n.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),n.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),e){var a=+e>1?+e:3;n.on("keydown",function(e){if(9==e.keyCode){if(e.shiftKey)return;e.preventDefault();for(var t=0;a>t;t++)n.execCommand("mceNonBreaking")}})}});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("2",tinymce.util.Tools.resolve),g("1",["2"],function(a){return a("tinymce.PluginManager")}),g("0",["1"],function(a){return a.add("nonbreaking",function(a){var b=a.getParam("nonbreaking_force_tab"),c=function(a,b){for(var c="",d=0;d<b;d++)c+=a;return c},d=function(b){var d=a.plugins.visualchars&&a.plugins.visualchars.state?'<span class="mce-nbsp">&nbsp;</span>':"&nbsp;";a.insertContent(c(d,b)),a.dom.setAttrib(a.dom.select("span.mce-nbsp"),"data-mce-bogus","1")};if(a.addCommand("mceNonBreaking",function(){d(1)}),a.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),a.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),b){var e=+b>1?+b:3;a.on("keydown",function(a){if(9==a.keyCode){if(a.shiftKey)return;a.preventDefault(),d(e)}})}}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/noneditable/plugin.min.js View File

1
-tinymce.PluginManager.add("noneditable",function(e){function t(e){var t;if(1===e.nodeType){if(t=e.getAttribute(u),t&&"inherit"!==t)return t;if(t=e.contentEditable,"inherit"!==t)return t}return null}function n(e){for(var n;e;){if(n=t(e))return"false"===n?e:null;e=e.parentNode}}function r(){function r(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function a(e){var t;if(e)for(t=new f(e,e),e=t.current();e;e=t.next())if(3===e.nodeType)return e}function i(n,r){var a,i;return"false"===t(n)&&u.isBlock(n)?void s.select(n):(i=u.createRng(),"true"===t(n)&&(n.firstChild||n.appendChild(e.getDoc().createTextNode(" ")),n=n.firstChild,r=!0),a=u.create("span",{id:g,"data-mce-bogus":!0},m),r?n.parentNode.insertBefore(a,n):u.insertAfter(a,n),i.setStart(a.firstChild,1),i.collapse(!0),s.setRng(i),a)}function o(e){var t,n,i,o;if(e)t=s.getRng(!0),t.setStartBefore(e),t.setEndBefore(e),n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0),s.setRng(t);else for(i=r(s.getStart());(e=u.get(g))&&e!==o;)i!==e&&(n=a(e),n&&n.nodeValue.charAt(0)==m&&(n=n.deleteData(0,1)),u.remove(e,!0)),o=e}function l(){function e(e,n){var r,a,i,o,l;if(r=d.startContainer,a=d.startOffset,3==r.nodeType){if(l=r.nodeValue.length,a>0&&l>a||(n?a==l:0===a))return}else{if(!(a<r.childNodes.length))return n?null:e;var u=!n&&a>0?a-1:a;r=r.childNodes[u],r.hasChildNodes()&&(r=r.firstChild)}for(i=new f(r,e);o=i[n?"prev":"next"]();){if(3===o.nodeType&&o.nodeValue.length>0)return;if("true"===t(o))return o}return e}var r,a,l,d,u;o(),l=s.isCollapsed(),r=n(s.getStart()),a=n(s.getEnd()),(r||a)&&(d=s.getRng(!0),l?(r=r||a,(u=e(r,!0))?i(u,!0):(u=e(r,!1))?i(u,!1):s.select(r)):(d=s.getRng(!0),r&&d.setStartBefore(r),a&&d.setEndAfter(a),s.setRng(d)))}function d(a){function i(e,t){for(;e=e[t?"previousSibling":"nextSibling"];)if(3!==e.nodeType||e.nodeValue.length>0)return e}function d(e,t){s.select(e),s.collapse(t)}function g(a){function i(e){for(var t=d;t;){if(t===e)return;t=t.parentNode}u.remove(e),l()}function o(){var r,o,l=e.schema.getNonEmptyElements();for(o=new tinymce.dom.TreeWalker(d,e.getBody());(r=a?o.prev():o.next())&&!l[r.nodeName.toLowerCase()]&&!(3===r.nodeType&&tinymce.trim(r.nodeValue).length>0);)if("false"===t(r))return i(r),!0;return n(r)?!0:!1}var f,d,c,g;if(s.isCollapsed()){if(f=s.getRng(!0),d=f.startContainer,c=f.startOffset,d=r(d)||d,g=n(d))return i(g),!1;if(3==d.nodeType&&(a?c>0:c<d.nodeValue.length))return!0;if(1==d.nodeType&&(d=d.childNodes[c]||d),o())return!1}return!0}var m,p,v,E,h=a.keyCode;if(v=s.getStart(),E=s.getEnd(),m=n(v)||n(E),m&&(112>h||h>124)&&h!=c.DELETE&&h!=c.BACKSPACE){if((tinymce.isMac?a.metaKey:a.ctrlKey)&&(67==h||88==h||86==h))return;if(a.preventDefault(),h==c.LEFT||h==c.RIGHT){var y=h==c.LEFT;if(e.dom.isBlock(m)){var T=y?m.previousSibling:m.nextSibling,C=new f(T,T),b=y?C.prev():C.next();d(b,!y)}else d(m,y)}}else if(h==c.LEFT||h==c.RIGHT||h==c.BACKSPACE||h==c.DELETE){if(p=r(v)){if(h==c.LEFT||h==c.BACKSPACE)if(m=i(p,!0),m&&"false"===t(m)){if(a.preventDefault(),h!=c.LEFT)return void u.remove(m);d(m,!0)}else o(p);if(h==c.RIGHT||h==c.DELETE)if(m=i(p),m&&"false"===t(m)){if(a.preventDefault(),h!=c.RIGHT)return void u.remove(m);d(m,!1)}else o(p)}if((h==c.BACKSPACE||h==c.DELETE)&&!g(h==c.BACKSPACE))return a.preventDefault(),!1}}var u=e.dom,s=e.selection,g="mce_noneditablecaret",m="";e.on("mousedown",function(n){var r=e.selection.getNode();"false"===t(r)&&r==n.target&&l()}),e.on("mouseup keyup",l),e.on("keydown",d)}function a(t){var n=l.length,r=t.content,a=tinymce.trim(o);if("raw"!=t.format){for(;n--;)r=r.replace(l[n],function(t){var n=arguments,i=n[n.length-2];return i>0&&'"'==r.charAt(i-1)?t:'<span class="'+a+'" data-mce-content="'+e.dom.encode(n[0])+'">'+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+"</span>"});t.content=r}}var i,o,l,f=tinymce.dom.TreeWalker,d="contenteditable",u="data-mce-"+d,c=tinymce.util.VK;i=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",o=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ",l=e.getParam("noneditable_regexp"),l&&!l.length&&(l=[l]),e.on("PreInit",function(){r(),l&&e.on("BeforeSetContent",a),e.parser.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=e[r],t=" "+n.attr("class")+" ",-1!==t.indexOf(i)?n.attr(u,"true"):-1!==t.indexOf(o)&&n.attr(u,"false")}),e.serializer.addAttributeFilter(u,function(e){for(var t,n=e.length;n--;)t=e[n],l&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):(t.attr(d,null),t.attr(u,null))}),e.parser.addAttributeFilter(d,function(e){for(var t,n=e.length;n--;)t=e[n],t.attr(u,t.attr(d)),t.attr(d,null)})}),e.on("drop",function(e){n(e.target)&&e.preventDefault()})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("noneditable",function(a){function c(a){return function(b){return(" "+b.attr("class")+" ").indexOf(a)!==-1}}function d(c){function d(b){var c=arguments,d=c[c.length-2],e=d>0?h.charAt(d-1):"";if('"'===e)return b;if(">"===e){var f=h.lastIndexOf("<",d);if(f!==-1){var g=h.substring(f,d);if(g.indexOf('contenteditable="false"')!==-1)return b}}return'<span class="'+i+'" data-mce-content="'+a.dom.encode(c[0])+'">'+a.dom.encode("string"==typeof c[1]?c[1]:c[0])+"</span>"}var e=g.length,h=c.content,i=b.trim(f);if("raw"!=c.format){for(;e--;)h=h.replace(g[e],d);c.content=h}}var e,f,g,h="contenteditable";e=" "+b.trim(a.getParam("noneditable_editable_class","mceEditable"))+" ",f=" "+b.trim(a.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var i=c(e),j=c(f);g=a.getParam("noneditable_regexp"),g&&!g.length&&(g=[g]),a.on("PreInit",function(){g&&a.on("BeforeSetContent",d),a.parser.addAttributeFilter("class",function(a){for(var b,c=a.length;c--;)b=a[c],i(b)?b.attr(h,"true"):j(b)&&b.attr(h,"false")}),a.serializer.addAttributeFilter(h,function(a){for(var b,c=a.length;c--;)b=a[c],(i(b)||j(b))&&(g&&b.attr("data-mce-content")?(b.name="#text",b.type=3,b.raw=!0,b.value=b.attr("data-mce-content")):b.attr(h,null))})})}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js View File

1
-tinymce.PluginManager.add("pagebreak",function(e){var a="mce-pagebreak",t=e.getParam("pagebreak_separator","<!-- pagebreak -->"),n=new RegExp(t.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),r='<img src="'+tinymce.Env.transparentSrc+'" class="'+a+'" data-mce-resize="false" />';e.addCommand("mcePageBreak",function(){e.insertContent(e.settings.pagebreak_split_block?"<p>"+r+"</p>":r)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(t){"IMG"==t.target.nodeName&&e.dom.hasClass(t.target,a)&&(t.name="pagebreak")}),e.on("click",function(t){t=t.target,"IMG"===t.nodeName&&e.dom.hasClass(t,a)&&e.selection.select(t)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(n,r)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(a){for(var n,r,c=a.length;c--;)if(n=a[c],r=n.attr("class"),r&&-1!==r.indexOf("mce-pagebreak")){var o=n.parent;if(e.schema.getBlockElements()[o.name]&&e.settings.pagebreak_split_block){o.type=3,o.value=t,o.raw=!0,n.remove();continue}n.type=3,n.value=t,n.raw=!0}})})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.Env")}),g("0",["1","2"],function(a,b){return a.add("pagebreak",function(a){var c="mce-pagebreak",d=a.getParam("pagebreak_separator","<!-- pagebreak -->"),e=new RegExp(d.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(a){return"\\"+a}),"gi"),f='<img src="'+b.transparentSrc+'" class="'+c+'" data-mce-resize="false" data-mce-placeholder />';a.addCommand("mcePageBreak",function(){a.settings.pagebreak_split_block?a.insertContent("<p>"+f+"</p>"):a.insertContent(f)}),a.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),a.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),a.on("ResolveName",function(b){"IMG"==b.target.nodeName&&a.dom.hasClass(b.target,c)&&(b.name="pagebreak")}),a.on("click",function(b){b=b.target,"IMG"===b.nodeName&&a.dom.hasClass(b,c)&&a.selection.select(b)}),a.on("BeforeSetContent",function(a){a.content=a.content.replace(e,f)}),a.on("PreInit",function(){a.serializer.addNodeFilter("img",function(b){for(var c,e,f=b.length;f--;)if(c=b[f],e=c.attr("class"),e&&e.indexOf("mce-pagebreak")!==-1){var g=c.parent;if(a.schema.getBlockElements()[g.name]&&a.settings.pagebreak_split_block){g.type=3,g.value=d,g.raw=!0,c.remove();continue}c.type=3,c.value=d,c.raw=!0}})})}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/paste/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/preview/plugin.min.js View File

1
-tinymce.PluginManager.add("preview",function(e){var t=e.settings,i=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'<iframe src="javascript:\'\'" frameborder="0"'+(i?' sandbox="allow-scripts"':"")+"></iframe>",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var n,a="";a+='<base href="'+e.documentBaseURI.getURI()+'">',tinymce.each(e.contentCSS,function(t){a+='<link type="text/css" rel="stylesheet" href="'+e.documentBaseURI.toAbsolute(t)+'">'});var r=t.body_id||"tinymce";-1!=r.indexOf("=")&&(r=e.getParam("body_id","","hash"),r=r[e.id]||r);var d=t.body_class||"";-1!=d.indexOf("=")&&(d=e.getParam("body_class","","hash"),d=d[e.id]||"");var o=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(n="<!DOCTYPE html><html><head>"+a+'</head><body id="'+r+'" class="mce-content-body '+d+'"'+o+">"+e.getContent()+"</body></html>",i)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(n);else{var s=this.getEl("body").firstChild.contentWindow.document;s.open(),s.write(n),s.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("4",tinymce.util.Tools.resolve),g("1",["4"],function(a){return a("tinymce.PluginManager")}),g("2",["4"],function(a){return a("tinymce.Env")}),g("3",["4"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2","3"],function(a,b,c){return a.add("preview",function(a){var d=a.settings,e=!b.ie;a.addCommand("mcePreview",function(){a.windowManager.open({title:"Preview",width:parseInt(a.getParam("plugin_preview_width","650"),10),height:parseInt(a.getParam("plugin_preview_height","500"),10),html:'<iframe src="javascript:\'\'" frameborder="0"'+(e?' sandbox="allow-scripts"':"")+"></iframe>",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var b,f="",g=a.dom.encode;f+='<base href="'+g(a.documentBaseURI.getURI())+'">',c.each(a.contentCSS,function(b){f+='<link type="text/css" rel="stylesheet" href="'+g(a.documentBaseURI.toAbsolute(b))+'">'});var h=d.body_id||"tinymce";h.indexOf("=")!=-1&&(h=a.getParam("body_id","","hash"),h=h[a.id]||h);var i=d.body_class||"";i.indexOf("=")!=-1&&(i=a.getParam("body_class","","hash"),i=i[a.id]||"");var j='<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A") {e.preventDefault();}}}, false);</script> ',k=a.settings.directionality?' dir="'+a.settings.directionality+'"':"";if(b="<!DOCTYPE html><html><head>"+f+'</head><body id="'+g(h)+'" class="mce-content-body '+g(i)+'"'+g(k)+">"+a.getContent()+j+"</body></html>",e)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(b);else{var l=this.getEl("body").firstChild.contentWindow.document;l.open(),l.write(b),l.close()}}})}),a.addButton("preview",{title:"Preview",cmd:"mcePreview"}),a.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/print/plugin.min.js View File

1
-tinymce.PluginManager.add("print",function(t){t.addCommand("mcePrint",function(){t.getWin().print()}),t.addButton("print",{title:"Print",cmd:"mcePrint"}),t.addShortcut("Ctrl+P","","mcePrint"),t.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Ctrl+P",context:"file"})});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("2",tinymce.util.Tools.resolve),g("1",["2"],function(a){return a("tinymce.PluginManager")}),g("0",["1"],function(a){return a.add("print",function(a){a.addCommand("mcePrint",function(){a.getWin().print()}),a.addButton("print",{title:"Print",cmd:"mcePrint"}),a.addShortcut("Meta+P","","mcePrint"),a.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}),function(){}}),d("0")()}();

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/save/plugin.min.js View File

1
-tinymce.PluginManager.add("save",function(e){function a(){var a;return a=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty()?(tinymce.triggerSave(),e.getParam("save_onsavecallback")?void(e.execCallback("save_onsavecallback",e)&&(e.startContent=tinymce.trim(e.getContent({format:"raw"})),e.nodeChanged())):void(a?(e.isNotDirty=!0,(!a.onsubmit||a.onsubmit())&&("function"==typeof a.submit?a.submit():e.windowManager.alert("Error: Form submit field collision.")),e.nodeChanged()):e.windowManager.alert("Error: No form element found."))):void 0}function n(){var a=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(a),e.undoManager.clear(),void e.nodeChanged())}function t(){var a=this;e.on("nodeChange",function(){a.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",a),e.addCommand("mceCancel",n),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:t}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:t}),e.addShortcut("ctrl+s","","mceSave")});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("5",tinymce.util.Tools.resolve),g("1",["5"],function(a){return a("tinymce.PluginManager")}),g("2",["5"],function(a){return a("tinymce.dom.DOMUtils")}),g("3",["5"],function(a){return a("tinymce.EditorManager")}),g("4",["5"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2","3","4"],function(a,b,c,d){return a.add("save",function(a){function e(){var d;if(d=b.DOM.getParent(a.id,"form"),!a.getParam("save_enablewhendirty",!0)||a.isDirty())return c.triggerSave(),a.getParam("save_onsavecallback")?(a.execCallback("save_onsavecallback",a),void a.nodeChanged()):void(d?(a.setDirty(!1),d.onsubmit&&!d.onsubmit()||("function"==typeof d.submit?d.submit():f(a.translate("Error: Form submit field collision."))),a.nodeChanged()):f(a.translate("Error: No form element found.")))}function f(b){a.notificationManager.open({text:b,type:"error"})}function g(){var b=d.trim(a.startContent);return a.getParam("save_oncancelcallback")?void a.execCallback("save_oncancelcallback",a):(a.setContent(b),a.undoManager.clear(),void a.nodeChanged())}function h(){var b=this;a.on("nodeChange dirty",function(){b.disabled(a.getParam("save_enablewhendirty",!0)&&!a.isDirty())})}a.addCommand("mceSave",e),a.addCommand("mceCancel",g),a.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:h}),a.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:h}),a.addShortcut("Meta+S","","mceSave")}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js


File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js View File

1
-tinymce.PluginManager.add("tabfocus",function(e){function n(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function t(n){function t(n){function t(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&t(e.parentNode)}function r(e){return e.tabIndex||"INPUT"==e.nodeName||"TEXTAREA"==e.nodeName}function c(e){return!r(e)&&"-1"!=e.getAttribute("tabindex")&&t(e)}if(u=i.select(":input:enabled,*[tabindex]:not(iframe)"),o(u,function(n,t){return n.id==e.id?(a=t,!1):void 0}),n>0){for(d=a+1;d<u.length;d++)if(c(u[d]))return u[d]}else for(d=a-1;d>=0;d--)if(c(u[d]))return u[d];return null}var a,u,c,d;if(!(9!==n.keyCode||n.ctrlKey||n.altKey||n.metaKey)&&(c=r(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==c.length&&(c[1]=c[0],c[0]=":prev"),u=n.shiftKey?":prev"==c[0]?t(-1):i.get(c[0]):":next"==c[1]?t(1):i.get(c[1]))){var y=tinymce.get(u.id||u.name);u.id&&y?y.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),u.focus()},10),n.preventDefault()}}var i=tinymce.DOM,o=tinymce.each,r=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null)}),e.on("keyup",n),tinymce.Env.gecko?e.on("keypress keydown",t):e.on("keydown",t)});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("7",tinymce.util.Tools.resolve),g("1",["7"],function(a){return a("tinymce.PluginManager")}),g("2",["7"],function(a){return a("tinymce.dom.DOMUtils")}),g("3",["7"],function(a){return a("tinymce.util.Tools")}),g("4",["7"],function(a){return a("tinymce.EditorManager")}),g("5",["7"],function(a){return a("tinymce.util.Delay")}),g("6",["7"],function(a){return a("tinymce.Env")}),g("0",["1","2","3","4","5","6"],function(a,b,c,d,e,f){return a.add("tabfocus",function(a){function g(a){9!==a.keyCode||a.ctrlKey||a.altKey||a.metaKey||a.preventDefault()}function h(b){function g(e){function f(a){return"BODY"===a.nodeName||"hidden"!=a.type&&"none"!=a.style.display&&"hidden"!=a.style.visibility&&f(a.parentNode)}function g(a){return/INPUT|TEXTAREA|BUTTON/.test(a.tagName)&&d.get(b.id)&&a.tabIndex!=-1&&f(a)}if(j=i.select(":input:enabled,*[tabindex]:not(iframe)"),c.each(j,function(b,c){if(b.id==a.id)return h=c,!1}),e>0){for(l=h+1;l<j.length;l++)if(g(j[l]))return j[l]}else for(l=h-1;l>=0;l--)if(g(j[l]))return j[l];return null}var h,j,k,l;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(k=c.explode(a.getParam("tab_focus",a.getParam("tabfocus_elements",":prev,:next"))),1==k.length&&(k[1]=k[0],k[0]=":prev"),j=b.shiftKey?":prev"==k[0]?g(-1):i.get(k[0]):":next"==k[1]?g(1):i.get(k[1]))){var m=d.get(j.id||j.name);j.id&&m?m.focus():e.setTimeout(function(){f.webkit||window.focus(),j.focus()},10),b.preventDefault()}}var i=b.DOM;a.on("init",function(){a.inline&&i.setAttrib(a.getBody(),"tabIndex",null),a.on("keyup",g),f.gecko?a.on("keypress keydown",h):a.on("keydown",h)})}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 2 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/table/plugin.min.js


File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/template/plugin.min.js


File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/textcolor/plugin.min.js


+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/textpattern/plugin.min.js View File

1
-tinymce.PluginManager.add("textpattern",function(t){function e(){return l&&(i.sort(function(t,e){return t.start.length>e.start.length?-1:t.start.length<e.start.length?1:0}),l=!1),i}function n(t){for(var n=e(),a=0;a<n.length;a++)if(0===t.indexOf(n[a].start)&&(!n[a].end||t.lastIndexOf(n[a].end)==t.length-n[a].end.length))return n[a]}function a(t,n,a){var r,s,d;for(r=e(),d=0;d<r.length;d++)if(s=r[d],s.end&&t.substr(n-s.end.length-a,s.end.length)==s.end)return s}function r(e){function r(){i=i.splitText(f),i.splitText(l-f-h),i.deleteData(0,m.start.length),i.deleteData(i.data.length-m.end.length,m.end.length)}var s,d,o,i,l,f,g,c,m,h,u;return s=t.selection,d=t.dom,s.isCollapsed()&&(o=s.getRng(!0),i=o.startContainer,l=o.startOffset,g=i.data,h=e?1:0,3==i.nodeType&&(m=a(g,l,h),m&&(f=Math.max(0,l-h),f=g.lastIndexOf(m.start,f-m.end.length-1),-1!==f&&(c=d.createRng(),c.setStart(i,f),c.setEnd(i,l-h),m=n(c.toString()),m&&m.end&&!(i.data.length<=m.start.length+m.end.length)))))?(u=t.formatter.get(m.format),u&&u[0].inline?(r(),t.formatter.apply(m.format,{},i),i):void 0):void 0}function s(){var e,a,r,s,d,o,i,l,f,g,c;if(e=t.selection,a=t.dom,e.isCollapsed()&&(i=a.getParent(e.getStart(),"p"))){for(f=new tinymce.dom.TreeWalker(i,i);d=f.next();)if(3==d.nodeType){s=d;break}if(s){if(l=n(s.data),!l)return;if(g=e.getRng(!0),r=g.startContainer,c=g.startOffset,s==r&&(c=Math.max(0,c-l.start.length)),tinymce.trim(s.data).length==l.start.length)return;l.format&&(o=t.formatter.get(l.format),o&&o[0].block&&(s.deleteData(0,l.start.length),t.formatter.apply(l.format,{},s),g.setStart(r,c),g.collapse(!0),e.setRng(g))),l.cmd&&t.undoManager.transact(function(){s.deleteData(0,l.start.length),t.execCommand(l.cmd)})}}}function d(){var e,n;n=r(),n&&(e=t.dom.createRng(),e.setStart(n,n.data.length),e.setEnd(n,n.data.length),t.selection.setRng(e)),s()}function o(){var e,n,a,s,d;e=r(!0),e&&(d=t.dom,n=e.data.slice(-1),/[\u00a0 ]/.test(n)&&(e.deleteData(e.data.length-1,1),a=d.doc.createTextNode(n),e.nextSibling?d.insertAfter(a,e.nextSibling):e.parentNode.appendChild(a),s=d.createRng(),s.setStart(a,1),s.setEnd(a,1),t.selection.setRng(s)))}var i,l=!0;i=t.settings.textpattern_patterns||[{start:"*",end:"*",format:"italic"},{start:"**",end:"**",format:"bold"},{start:"#",format:"h1"},{start:"##",format:"h2"},{start:"###",format:"h3"},{start:"####",format:"h4"},{start:"#####",format:"h5"},{start:"######",format:"h6"},{start:"1. ",cmd:"InsertOrderedList"},{start:"* ",cmd:"InsertUnorderedList"},{start:"- ",cmd:"InsertUnorderedList"}],t.on("keydown",function(t){13!=t.keyCode||tinymce.util.VK.modifierPressed(t)||d()},!0),t.on("keyup",function(t){32!=t.keyCode||tinymce.util.VK.modifierPressed(t)||o()}),this.getPatterns=e,this.setPatterns=function(t){i=t,l=!0}});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("7",tinymce.util.Tools.resolve),g("1",["7"],function(a){return a("tinymce.PluginManager")}),g("2",["7"],function(a){return a("tinymce.util.Delay")}),g("3",["7"],function(a){return a("tinymce.util.VK")}),g("8",["7"],function(a){return a("tinymce.dom.TreeWalker")}),g("9",["7"],function(a){return a("tinymce.util.Tools")}),g("a",[],function(){var a=function(a){return a.sort(function(a,b){return a.start.length>b.start.length?-1:a.start.length<b.start.length?1:0})},b=function(a,b){for(var c=0;c<a.length;c++)if(0===b.indexOf(a[c].start)&&(!a[c].end||b.lastIndexOf(a[c].end)===b.length-a[c].end.length))return a[c]},c=function(a,b,c,d){var e=b.substr(c-a.end.length-d,a.end.length);return e===a.end},d=function(a,b,c){return a-b-c.end.length-c.start.length>0},e=function(b,e,f,g){var h,i,j=a(b);for(i=0;i<j.length;i++)if(h=j[i],void 0!==h.end&&c(h,e,f,g)&&d(f,g,h))return h};return{findPattern:b,findEndPattern:e}}),g("4",["8","9","a"],function(a,b,c){var d=function(a,b,c,d,e){return a=d>0?a.splitText(d):a,a.splitText(c-d-e),a.deleteData(0,b.start.length),a.deleteData(a.data.length-b.end.length,b.end.length),a},e=function(a,b,e){var f,g,h,i,j,k,l,m,n,o,p;if(f=a.selection,g=a.dom,f.isCollapsed()&&(h=f.getRng(!0),i=h.startContainer,j=h.startOffset,l=i.data,o=e===!0?1:0,3==i.nodeType&&(n=c.findEndPattern(b,l,j,o),void 0!==n&&(k=Math.max(0,j-o),k=l.lastIndexOf(n.start,k-n.end.length-1),k!==-1&&(m=g.createRng(),m.setStart(i,k),m.setEnd(i,j-o),n=c.findPattern(b,m.toString()),n&&n.end&&!(i.data.length<=n.start.length+n.end.length))))))return p=a.formatter.get(n.format),p&&p[0].inline?(a.undoManager.transact(function(){i=d(i,n,j,k,o),a.formatter.apply(n.format,{},i)}),i):void 0},f=function(d,e){var f,g,h,i,j,k,l,m,n,o,p;if(f=d.selection,g=d.dom,f.isCollapsed()&&(l=g.getParent(f.getStart(),"p"))){for(n=new a(l,l);j=n.next();)if(3==j.nodeType){i=j;break}if(i){if(m=c.findPattern(e,i.data),!m)return;if(o=f.getRng(!0),h=o.startContainer,p=o.startOffset,i==h&&(p=Math.max(0,p-m.start.length)),b.trim(i.data).length==m.start.length)return;m.format&&(k=d.formatter.get(m.format),k&&k[0].block&&(i.deleteData(0,m.start.length),d.formatter.apply(m.format,{},i),o.setStart(h,p),o.collapse(!0),f.setRng(o))),m.cmd&&d.undoManager.transact(function(){i.deleteData(0,m.start.length),d.execCommand(m.cmd)})}}};return{applyInlineFormat:e,applyBlockFormat:f}}),g("5",["3","4"],function(a,b){function c(a,c){var d,e;e=b.applyInlineFormat(a,c,!1),e&&(d=a.dom.createRng(),d.setStart(e,e.data.length),d.setEnd(e,e.data.length),a.selection.setRng(d)),b.applyBlockFormat(a,c)}function d(a,c){var d,e,f,g,h;d=b.applyInlineFormat(a,c,!0),d&&(h=a.dom,e=d.data.slice(-1),/[\u00a0 ]/.test(e)&&(d.deleteData(d.data.length-1,1),f=h.doc.createTextNode(e),d.nextSibling?h.insertAfter(f,d.nextSibling):d.parentNode.appendChild(f),g=h.createRng(),g.setStart(f,1),g.setEnd(f,1),a.selection.setRng(g)))}var e=function(a,b,c){for(var d=0;d<a.length;d++)if(c(a[d],b))return!0},f=function(b,c){return e(b,c,function(b,c){return b===c.keyCode&&a.modifierPressed(c)===!1})},g=function(a,b){return e(a,b,function(a,b){return a.charCodeAt(0)===b.charCode})};return{handleEnter:c,handleInlineKey:d,checkCharCode:g,checkKeyCode:f}}),g("6",[],function(){var a=[{start:"*",end:"*",format:"italic"},{start:"**",end:"**",format:"bold"},{start:"#",format:"h1"},{start:"##",format:"h2"},{start:"###",format:"h3"},{start:"####",format:"h4"},{start:"#####",format:"h5"},{start:"######",format:"h6"},{start:"1. ",cmd:"InsertOrderedList"},{start:"* ",cmd:"InsertUnorderedList"},{start:"- ",cmd:"InsertUnorderedList"}],b=function(b){return void 0!==b.textpattern_patterns?b.textpattern_patterns:a};return{getPatterns:b}}),g("0",["1","2","3","4","5","6"],function(a,b,c,d,e,f){return a.add("textpattern",function(a){var d=f.getPatterns(a.settings),g=[",",".",";",":","!","?"],h=[32];a.on("keydown",function(b){13!==b.keyCode||c.modifierPressed(b)||e.handleEnter(a,d)},!0),a.on("keyup",function(b){e.checkKeyCode(h,b)&&e.handleInlineKey(a,d)}),a.on("keypress",function(c){e.checkCharCode(g,c)&&b.setEditorTimeout(a,function(){e.handleInlineKey(a,d)})}),this.setPatterns=function(a){d=a},this.getPatterns=function(){return d}}),function(){}}),d("0")()}();

+ 1 - 0
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/toc/plugin.min.js View File

1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("4",tinymce.util.Tools.resolve),g("1",["4"],function(a){return a("tinymce.PluginManager")}),g("2",["4"],function(a){return a("tinymce.util.I18n")}),g("3",["4"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2","3"],function(a,b,c){return a.add("toc",function(a){function d(b){return!!b&&a.schema.isValidChild("div",b)}function e(b){return b&&a.dom.is(b,"."+n.className)&&a.getBody().contains(b)}function f(){var b=this;b.disabled(a.readonly||!h()),a.on("LoadContent SetContent change",function(){b.disabled(a.readonly||!h())})}function g(a){var b,c=[];for(b=1;b<=a;b++)c.push("h"+b);return c.join(",")}function h(){return!(!n||!i(n).length)}function i(b){var d=g(b.depth),e=o(d);return e.length&&/^h[1-9]$/i.test(b.headerTag)&&(e=e.filter(function(c,d){return!a.dom.hasClass(d.parentNode,b.className)})),c.map(e,function(a){return a.id||(a.id=r()),{id:a.id,level:parseInt(a.nodeName.replace(/^H/i,""),10),title:o.text(a)}})}function j(a){var b,c=9;for(b=0;b<a.length;b++)if(a[b].level<c&&(c=a[b].level),1==c)return c;return c}function k(b,c){var d="<"+b+' contenteditable="true">',e="</"+b+">";return d+a.dom.encode(c)+e}function l(a){var b=m(a);return'<div class="'+a.className+'" contenteditable="false">'+b+"</div>"}function m(a){var c,d,e,f,g="",h=i(a),l=j(h)-1;if(!h.length)return"";for(g+=k(a.headerTag,b.translate("Table of Contents")),c=0;c<h.length;c++){if(e=h[c],f=h[c+1]&&h[c+1].level,l===e.level)g+="<li>";else for(d=l;d<e.level;d++)g+="<ul><li>";if(g+='<a href="#'+e.id+'">'+e.title+"</a>",f!==e.level&&f)for(d=e.level;d>f;d--)g+="</li></ul><li>";else g+="</li>",f||(g+="</ul>");l=e.level}return g}var n,o=a.$,p={depth:3,headerTag:"h2",className:"mce-toc"},q=function(a){var b=0;return function(){var c=(new Date).getTime().toString(32);return a+c+(b++).toString(32)}},r=q("mcetoc_");a.on("PreInit",function(){var b=a.settings,c=parseInt(b.toc_depth,10)||0;n={depth:c>=1&&c<=9?c:p.depth,headerTag:d(b.toc_header)?b.toc_header:p.headerTag,className:b.toc_class?a.dom.encode(b.toc_class):p.className}}),a.on("PreProcess",function(a){var b=o("."+n.className,a.node);b.length&&(b.removeAttr("contentEditable"),b.find("[contenteditable]").removeAttr("contentEditable"))}),a.on("SetContent",function(){var a=o("."+n.className);a.length&&(a.attr("contentEditable",!1),a.children(":first-child").attr("contentEditable",!0))});var s=function(b){return!b.length||a.dom.getParents(b[0],".mce-offscreen-selection").length>0};a.addCommand("mceInsertToc",function(){var b=o("."+n.className);s(b)?a.insertContent(l(n)):a.execCommand("mceUpdateToc")}),a.addCommand("mceUpdateToc",function(){var b=o("."+n.className);b.length&&a.undoManager.transact(function(){b.html(m(n))})}),a.addButton("toc",{tooltip:"Table of Contents",cmd:"mceInsertToc",icon:"toc",onPostRender:f}),a.addButton("tocupdate",{tooltip:"Update",cmd:"mceUpdateToc",icon:"reload"}),a.addContextToolbar(e,"tocupdate"),a.addMenuItem("toc",{text:"Table of Contents",context:"insert",cmd:"mceInsertToc",onPostRender:f})}),function(){}}),d("0")()}();

+ 96 - 77
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css View File

1
 .mce-visualblocks p {
1
 .mce-visualblocks p {
2
-	padding-top: 10px;
3
-	border: 1px dashed #BBB;
4
-	margin-left: 3px;
5
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
2
+  padding-top: 10px;
3
+  border: 1px dashed #BBB;
4
+  margin-left: 3px;
5
+  background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
6
+  background-repeat: no-repeat;
6
 }
7
 }
7
 
8
 
8
 .mce-visualblocks h1 {
9
 .mce-visualblocks h1 {
9
-	padding-top: 10px;
10
-	border: 1px dashed #BBB;
11
-	margin-left: 3px;
12
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
10
+  padding-top: 10px;
11
+  border: 1px dashed #BBB;
12
+  margin-left: 3px;
13
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
14
+  background-repeat: no-repeat;
13
 }
15
 }
14
 
16
 
15
 .mce-visualblocks h2 {
17
 .mce-visualblocks h2 {
16
-	padding-top: 10px;
17
-	border: 1px dashed #BBB;
18
-	margin-left: 3px;
19
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
18
+  padding-top: 10px;
19
+  border: 1px dashed #BBB;
20
+  margin-left: 3px;
21
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
22
+  background-repeat: no-repeat;
20
 }
23
 }
21
 
24
 
22
 .mce-visualblocks h3 {
25
 .mce-visualblocks h3 {
23
-	padding-top: 10px;
24
-	border: 1px dashed #BBB;
25
-	margin-left: 3px;
26
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
26
+  padding-top: 10px;
27
+  border: 1px dashed #BBB;
28
+  margin-left: 3px;
29
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
30
+  background-repeat: no-repeat;
27
 }
31
 }
28
 
32
 
29
 .mce-visualblocks h4 {
33
 .mce-visualblocks h4 {
30
-	padding-top: 10px;
31
-	border: 1px dashed #BBB;
32
-	margin-left: 3px;
33
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
34
+  padding-top: 10px;
35
+  border: 1px dashed #BBB;
36
+  margin-left: 3px;
37
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
38
+  background-repeat: no-repeat;
34
 }
39
 }
35
 
40
 
36
 .mce-visualblocks h5 {
41
 .mce-visualblocks h5 {
37
-	padding-top: 10px;
38
-	border: 1px dashed #BBB;
39
-	margin-left: 3px;
40
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
42
+  padding-top: 10px;
43
+  border: 1px dashed #BBB;
44
+  margin-left: 3px;
45
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
46
+  background-repeat: no-repeat;
41
 }
47
 }
42
 
48
 
43
 .mce-visualblocks h6 {
49
 .mce-visualblocks h6 {
44
-	padding-top: 10px;
45
-	border: 1px dashed #BBB;
46
-	margin-left: 3px;
47
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
50
+  padding-top: 10px;
51
+  border: 1px dashed #BBB;
52
+  margin-left: 3px;
53
+  background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
54
+  background-repeat: no-repeat;
48
 }
55
 }
49
 
56
 
50
-.mce-visualblocks div {
51
-	padding-top: 10px;
52
-	border: 1px dashed #BBB;
53
-	margin-left: 3px;
54
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
57
+.mce-visualblocks div:not([data-mce-bogus]) {
58
+  padding-top: 10px;
59
+  border: 1px dashed #BBB;
60
+  margin-left: 3px;
61
+  background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
62
+  background-repeat: no-repeat;
55
 }
63
 }
56
 
64
 
57
 .mce-visualblocks section {
65
 .mce-visualblocks section {
58
-	padding-top: 10px;
59
-	border: 1px dashed #BBB;
60
-	margin: 0 0 1em 3px;
61
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
66
+  padding-top: 10px;
67
+  border: 1px dashed #BBB;
68
+  margin: 0 0 1em 3px;
69
+  background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
70
+  background-repeat: no-repeat;
62
 }
71
 }
63
 
72
 
64
 .mce-visualblocks article {
73
 .mce-visualblocks article {
65
-	padding-top: 10px;
66
-	border: 1px dashed #BBB;
67
-	margin: 0 0 1em 3px;
68
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
74
+  padding-top: 10px;
75
+  border: 1px dashed #BBB;
76
+  margin: 0 0 1em 3px;
77
+  background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
78
+  background-repeat: no-repeat;
69
 }
79
 }
70
 
80
 
71
 .mce-visualblocks blockquote {
81
 .mce-visualblocks blockquote {
72
-	padding-top: 10px;
73
-	border: 1px dashed #BBB;
74
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
82
+  padding-top: 10px;
83
+  border: 1px dashed #BBB;
84
+  background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
85
+  background-repeat: no-repeat;
75
 }
86
 }
76
 
87
 
77
 .mce-visualblocks address {
88
 .mce-visualblocks address {
78
-	padding-top: 10px;
79
-	border: 1px dashed #BBB;
80
-	margin: 0 0 1em 3px;
81
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
89
+  padding-top: 10px;
90
+  border: 1px dashed #BBB;
91
+  margin: 0 0 1em 3px;
92
+  background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
93
+  background-repeat: no-repeat;
82
 }
94
 }
83
 
95
 
84
 .mce-visualblocks pre {
96
 .mce-visualblocks pre {
85
-	padding-top: 10px;
86
-	border: 1px dashed #BBB;
87
-	margin-left: 3px;
88
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
97
+  padding-top: 10px;
98
+  border: 1px dashed #BBB;
99
+  margin-left: 3px;
100
+  background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
101
+  background-repeat: no-repeat;
89
 }
102
 }
90
 
103
 
91
 .mce-visualblocks figure {
104
 .mce-visualblocks figure {
92
-	padding-top: 10px;
93
-	border: 1px dashed #BBB;
94
-	margin: 0 0 1em 3px;
95
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
105
+  padding-top: 10px;
106
+  border: 1px dashed #BBB;
107
+  margin: 0 0 1em 3px;
108
+  background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
109
+  background-repeat: no-repeat;
96
 }
110
 }
97
 
111
 
98
 .mce-visualblocks hgroup {
112
 .mce-visualblocks hgroup {
99
-	padding-top: 10px;
100
-	border: 1px dashed #BBB;
101
-	margin: 0 0 1em 3px;
102
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
113
+  padding-top: 10px;
114
+  border: 1px dashed #BBB;
115
+  margin: 0 0 1em 3px;
116
+  background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
117
+  background-repeat: no-repeat;
103
 }
118
 }
104
 
119
 
105
 .mce-visualblocks aside {
120
 .mce-visualblocks aside {
106
-	padding-top: 10px;
107
-	border: 1px dashed #BBB;
108
-	margin: 0 0 1em 3px;
109
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
121
+  padding-top: 10px;
122
+  border: 1px dashed #BBB;
123
+  margin: 0 0 1em 3px;
124
+  background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
125
+  background-repeat: no-repeat;
110
 }
126
 }
111
 
127
 
112
 .mce-visualblocks figcaption {
128
 .mce-visualblocks figcaption {
113
-	border: 1px dashed #BBB;
129
+  border: 1px dashed #BBB;
114
 }
130
 }
115
 
131
 
116
 .mce-visualblocks ul {
132
 .mce-visualblocks ul {
117
-	padding-top: 10px;
118
-	border: 1px dashed #BBB;
119
-	margin: 0 0 1em 3px;
120
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)
133
+  padding-top: 10px;
134
+  border: 1px dashed #BBB;
135
+  margin: 0 0 1em 3px;
136
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
137
+  background-repeat: no-repeat;
121
 }
138
 }
122
 
139
 
123
 .mce-visualblocks ol {
140
 .mce-visualblocks ol {
124
-	padding-top: 10px;
125
-	border: 1px dashed #BBB;
126
-	margin: 0 0 1em 3px;
127
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
141
+  padding-top: 10px;
142
+  border: 1px dashed #BBB;
143
+  margin: 0 0 1em 3px;
144
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
145
+  background-repeat: no-repeat;
128
 }
146
 }
129
 
147
 
130
 .mce-visualblocks dl {
148
 .mce-visualblocks dl {
131
-	padding-top: 10px;
132
-	border: 1px dashed #BBB;
133
-	margin: 0 0 1em 3px;
134
-	background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
149
+  padding-top: 10px;
150
+  border: 1px dashed #BBB;
151
+  margin: 0 0 1em 3px;
152
+  background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
153
+  background-repeat: no-repeat;
135
 }
154
 }

+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js View File

1
-tinymce.PluginManager.add("visualblocks",function(e,s){function o(){var s=this;s.active(a),e.on("VisualBlocks",function(){s.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var l,t,a;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var o,c=e.dom;l||(l=c.uniqueId(),o=c.create("link",{id:l,rel:"stylesheet",href:s+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(o)),e.on("PreviewFormats AfterPreviewFormats",function(s){a&&c.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==s.type)}),c.toggleClass(e.getBody(),"mce-visualblocks"),a=e.dom.hasClass(e.getBody(),"mce-visualblocks"),t&&t.active(c.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:o}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:o,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))});
1
+!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("2",tinymce.util.Tools.resolve),g("1",["2"],function(a){return a("tinymce.PluginManager")}),g("0",["1"],function(a){return a.add("visualblocks",function(a,b){function c(){var b=this;b.active(f),a.on("VisualBlocks",function(){b.active(a.dom.hasClass(a.getBody(),"mce-visualblocks"))})}var d,e,f;window.NodeList&&(a.addCommand("mceVisualBlocks",function(){var c,g=a.dom;d||(d=g.uniqueId(),c=g.create("link",{id:d,rel:"stylesheet",href:b+"/css/visualblocks.css"}),a.getDoc().getElementsByTagName("head")[0].appendChild(c)),a.on("PreviewFormats AfterPreviewFormats",function(b){f&&g.toggleClass(a.getBody(),"mce-visualblocks","afterpreviewformats"==b.type)}),g.toggleClass(a.getBody(),"mce-visualblocks"),f=a.dom.hasClass(a.getBody(),"mce-visualblocks"),e&&e.active(g.hasClass(a.getBody(),"mce-visualblocks")),a.fire("VisualBlocks")}),a.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:c}),a.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:c,selectable:!0,context:"view",prependToContext:!0}),a.on("init",function(){a.settings.visualblocks_default_state&&a.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),a.on("remove",function(){a.dom.removeClass(a.getBody(),"mce-visualblocks")}))}),function(){}}),d("0")()}();

File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/visualchars/plugin.min.js


File diff suppressed because it is too large
+ 1 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/plugins/wordcount/plugin.min.js


+ 0 - 147
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/Variables.less View File

1
-// Variables
2
-// Syntax: <control>-(<sub control>)-<bg|border|text>-(<state>)-(<extra>);
3
-// Example: @btn-primary-bg-hover-hlight;
4
-
5
-@prefix:                         mce;
6
-
7
-// Default font
8
-@font-family:                    "Helvetica Neue", Helvetica, Arial, sans-serif;
9
-@font-size:                      14px;
10
-@line-height:                    20px;
11
-@has-gradients:                  false;
12
-@has-radius:                     true;
13
-@has-boxshadow:                  false;
14
-
15
-// Text colors
16
-@text:                           #333333;
17
-@text-inverse:                   #ffffff;
18
-@text-disabled:                  #aaaaaa;
19
-@text-shadow:                    0 1px 1px hsla(hue(@text-inverse), saturation(@text-inverse), lightness(@text-inverse), 0.75);
20
-@text-error:                     #aa0000;
21
-
22
-// Button
23
-@btn-text:                       #333333;
24
-@btn-text-shadow:                #ffffff;
25
-@btn-border-top:                 rgba(0,0,0,0.1);
26
-@btn-border-right:               rgba(0,0,0,0.1);
27
-@btn-border-bottom:              rgba(0,0,0,0.25);
28
-@btn-border-left:                rgba(0,0,0,0.25);
29
-@btn-split-border:               #bdbdbd;
30
-@btn-caret-border:               @btn-text;
31
-@btn-text-disabled:              @text-disabled;
32
-@btn-box-shadow:                 inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05);
33
-@btn-box-shadow-active:          inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0, .05);
34
-@btn-box-disabled-opacity:       0.4;
35
-@btn-bg:                         #ffffff;
36
-@btn-bg-hlight:                  #f5f5f5;
37
-@btn-bg-hover:                   darken(@btn-bg, 5%);
38
-@btn-bg-hlight-hover:            darken(@btn-bg-hlight, 5%);
39
-
40
-@btn-primary-bg:                 #0088cc;
41
-@btn-primary-bg-hlight:          #0044cc;
42
-@btn-primary-bg-hover:           darken(@btn-primary-bg, 5%);
43
-@btn-primary-bg-hover-hlight:    darken(@btn-primary-bg-hlight, 5%);
44
-@btn-primary-text:               #ffffff;
45
-@btn-primary-text-shadow:        #333333;
46
-@btn-primary-border-top:         mix(@btn-border-top, @btn-primary-bg, 50%);
47
-@btn-primary-border-right:       mix(@btn-border-right, @btn-primary-bg, 50%);
48
-@btn-primary-border-bottom:      mix(@btn-border-bottom, @btn-primary-bg, 50%);
49
-@btn-primary-border-left:        mix(@btn-border-left, @btn-primary-bg, 50%);
50
-
51
-// Menu
52
-@menuitem-text:                  #333333;
53
-@menu-bg:                        #FFF;
54
-@menu-border:                    #333;
55
-@menubar-border:                 mix(@panel-border, @panel-bg, 60%);
56
-@menuitem-text-inverse:          #ffffff;
57
-@menubar-bg-active:              darken(@btn-bg, 10%);
58
-@menuitem-bg-hover:              #0081C2;
59
-@menuitem-bg-selected:           #0088cc;
60
-@menuitem-bg-selected-hlight:    #0077b3;
61
-@menuitem-bg-disabled:           #CCC;
62
-@menuitem-caret:                 @menuitem-text;
63
-@menuitem-caret-selected:        @menuitem-text-inverse;
64
-@menuitem-separator-top:         #cbcbcb;
65
-@menuitem-separator-bottom:      #ffffff;
66
-@menuitem-bg-active:             #c8def4;
67
-@menuitem-text-active:           #333333;
68
-@menuitem-preview-border-active: #aaaaaa;
69
-
70
-// Panel
71
-@panel-border:                   #52bef0;
72
-@panel-bg:                       #ffffff;
73
-@panel-bg-hlight:                #FFF;
74
-
75
-// Tabs
76
-@tab-border:                     #c5c5c5;
77
-@tab-bg:                         #e3e3e3;
78
-@tab-bg-hover:                   #fdfdfd;
79
-@tab-bg-active:                  #fdfdfd;
80
-
81
-// Tooltip
82
-@tooltip-bg:                     #000;
83
-@tooltip-text:                   white;
84
-@tooltip-font-size:              11px;
85
-
86
-// Window
87
-@window-border:                  #ffffff;
88
-@window-head-border:             @window-border;
89
-@window-head-close:              mix(@text, @window-bg, 60%);
90
-@window-head-close-hover:        mix(@text, @window-bg, 40%);
91
-@window-foot-border:             @window-border;
92
-@window-foot-bg:                 @window-bg;
93
-@window-fullscreen-bg:           #FFF;
94
-@window-modalblock-bg:           #000;
95
-@window-modalblock-opacity:      0.3;
96
-@window-box-shadow:              0 3px 7px rgba(0, 0, 0, 0.3);
97
-@window-bg:                      #ffffff;
98
-@window-title-font-size:         20px;
99
-
100
-// Popover
101
-@popover-bg:                     @window-bg;
102
-@popover-arrow-width:            10px;
103
-@popover-arrow:                  @window-bg;
104
-@popover-arrow-outer-width:      @popover-arrow-width + 1;
105
-@popover-arrow-outer:            rgba(0, 0, 0, 0.25);
106
-
107
-// Floatpanel
108
-@floatpanel-box-shadow:          0 5px 10px rgba(0, 0, 0, .2);
109
-
110
-// Checkbox
111
-@checkbox-bg:                    @btn-bg;
112
-@checkbox-bg-hlight:             @btn-bg-hlight;
113
-@checkbox-box-shadow:            inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05);
114
-@checkbox-border:                #c5c5c5;
115
-@checkbox-border-focus:          #59a5e1;
116
-
117
-// Path
118
-@path-text:                      @text;
119
-@path-bg-focus:                  #666;
120
-@path-text-focus:                #fff;
121
-
122
-// Textbox
123
-@textbox-text-placeholder:       #aaa;
124
-@textbox-box-shadow:             inset 0 1px 1px rgba(0, 0, 0, 0.075);
125
-@textbox-bg:                     #ffffff;
126
-@textbox-border:                 #b3e7ff;
127
-@textbox-border-focus:           #59a5e1;
128
-
129
-// Throbber
130
-@throbber-bg:                    #fff url('img/loader.gif') no-repeat center center;
131
-
132
-// Combobox
133
-@combobox-border:                @textbox-border;
134
-
135
-// Colorpicker
136
-@colorpicker-border:             @textbox-border;
137
-@colorpicker-hue-bg:             #fff;
138
-@colorpicker-hue-border:         #333;
139
-
140
-// Grid
141
-@grid-bg-active:                 @menuitem-bg-active;
142
-@grid-border-active:             #a1a1a1;
143
-@grid-border:                    #d6d6d6;
144
-
145
-// Misc
146
-@colorbtn-backcolor-bg:          #bbbbbb;
147
-@iframe-border:                  @panel-border;

+ 0 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/content.inline.min.css View File

1
-.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}

+ 0 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/content.min.css View File

1
-body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}

+ 0 - 1
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/readme.md View File

1
-Icons are generated and provided by the http://icomoon.io service.

BIN
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.eot View File


File diff suppressed because it is too large
+ 0 - 1043
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.json


+ 0 - 62
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.svg View File

1
-<?xml version="1.0" standalone="no"?>
2
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
-<svg xmlns="http://www.w3.org/2000/svg">
4
-<metadata>Generated by IcoMoon</metadata>
5
-<defs>
6
-<font id="tinymce-small" horiz-adv-x="512">
7
-<font-face units-per-em="512" ascent="480" descent="-32" />
8
-<missing-glyph horiz-adv-x="512" />
9
-<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
10
-<glyph unicode="&#xe000;" d="M480 40v295.969l-111.969 112.031h-296.031c-22.091 0-40-17.908-40-40v-368c0-22.092 17.909-40 40-40h368c22.092 0 40 17.908 40 40zM288 384h32v-96h-32v96zM352 64h-192v127.941c0.017 0.021 0.038 0.041 0.058 0.059h191.885c0.020-0.018 0.041-0.038 0.058-0.059l-0.001-127.941zM416 64h-32v128c0 17.6-14.4 32-32 32h-192c-17.6 0-32-14.4-32-32v-128h-32v320h32v-96c0-17.6 14.4-32 32-32h160c17.6 0 32 14.4 32 32v85.505l64-64.036v-245.469z" />
11
-<glyph unicode="&#xe001;" d="M425.373 358.627l-66.746 66.745c-12.444 12.446-37.027 22.628-54.627 22.628h-208c-17.6 0-32-14.4-32-32v-384c0-17.6 14.4-32 32-32h320c17.6 0 32 14.4 32 32v272c0 17.6-10.183 42.182-22.627 54.627zM402.745 336.001c3.396-3.398 6.896-9.581 9.447-16.001h-92.192v92.193c6.42-2.55 12.602-6.050 16-9.448l66.745-66.744zM415.942 32h-319.885c-0.020 0.017-0.041 0.038-0.057 0.058v383.885c0.017 0.020 0.038 0.041 0.057 0.057h191.943v-128h128v-255.942c-0.017-0.020-0.038-0.041-0.058-0.058z" />
12
-<glyph unicode="&#xe002;" d="M512 183.771v80.458l-79.572 7.957c-4.093 15.021-10.044 29.274-17.605 42.49l52.298 63.919-56.526 56.525-63.918-52.298c-13.217 7.562-27.471 13.513-42.491 17.604l-7.957 79.574h-80.458l-7.957-79.573c-15.021-4.093-29.274-10.043-42.49-17.604l-63.919 52.297-56.525-56.525 52.298-63.918c-7.562-13.216-13.513-27.47-17.605-42.49l-79.573-7.958v-80.458l79.573-7.957c4.093-15.021 10.043-29.274 17.605-42.491l-52.298-63.918 56.524-56.524 63.919 52.298c13.216-7.562 27.47-13.514 42.49-17.605l7.958-79.574h80.458l7.957 79.572c15.021 4.093 29.274 10.044 42.491 17.605l63.918-52.298 56.524 56.524-52.298 63.918c7.562 13.217 13.514 27.471 17.605 42.49l79.574 7.96zM352 192l-64-64h-64l-64 64v64l64 64h64l64-64v-64z" />
13
-<glyph unicode="&#xe003;" d="M32 384h448v-64h-448zM32 192h448v-64h-448zM32 288h288v-64h-288zM32 96h288v-64h-288z" />
14
-<glyph unicode="&#xe004;" d="M32 384h448v-64h-448zM32 192h448v-64h-448zM128 288h256v-64h-256zM128 96h256v-64h-256z" />
15
-<glyph unicode="&#xe005;" d="M32 384h448v-64h-448zM32 192h448v-64h-448zM192 288h288v-64h-288zM192 96h288v-64h-288z" />
16
-<glyph unicode="&#xe006;" d="M32 384h448v-64h-448zM32 192h448v-64h-448zM32 288h448v-64h-448zM32 96h448v-64h-448z" />
17
-<glyph unicode="&#xe007;" d="M432.204 144.934c-23.235 23.235-53.469 34.002-80.541 31.403l-31.663 31.663 96 96c0 0 64 64 0 128l-160-160-160 160c-64-64 0-128 0-128l96-96-31.663-31.663c-27.072 2.599-57.305-8.169-80.54-31.403-37.49-37.49-42.556-93.209-11.313-124.45 31.241-31.241 86.96-26.177 124.45 11.313 23.235 23.234 34.001 53.469 31.403 80.54l31.663 31.663 31.664-31.664c-2.598-27.072 8.168-57.305 31.403-80.539 37.489-37.49 93.209-42.556 124.449-11.313 31.244 31.241 26.178 86.959-11.312 124.45zM176.562 100.711c-1.106-12.166-7.51-24.913-17.57-34.973-11.106-11.107-25.54-17.738-38.609-17.738-5.262 0-12.649 1.114-17.958 6.424-10.703 10.702-8.688 36.566 11.313 56.568 11.106 11.107 25.54 17.738 38.609 17.738 5.262 0 12.649-1.114 17.958-6.424 6.556-6.555 6.735-16.344 6.257-21.595zM256 176c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM409.576 54.424c-5.31-5.31-12.696-6.424-17.958-6.424-13.069 0-27.503 6.631-38.609 17.738-10.061 10.060-16.464 22.807-17.569 34.973-0.479 5.251-0.3 15.040 6.257 21.596 5.309 5.311 12.695 6.424 17.958 6.424 13.068 0 27.503-6.631 38.608-17.737 20.002-20.004 22.016-45.868 11.313-56.57z" />
18
-<glyph unicode="&#xe008;" d="M352 288v80c0 8.8-7.2 16-16 16h-80v32c0 17.6-14.4 32-32 32h-64c-17.602 0-32-14.4-32-32v-32h-80c-8.801 0-16-7.2-16-16v-256c0-8.8 7.199-16 16-16h112v-96h192l96 96v192h-96zM160 415.943c0.017 0.019 0.036 0.039 0.057 0.057h63.884c0.021-0.018 0.041-0.038 0.059-0.057v-31.943h-64v31.943zM96 320v32h192v-32h-192zM352 45.255v50.745h50.745l-50.745-50.745zM416 128h-96v-96h-128v224h224v-128z" />
19
-<glyph unicode="&#xe009;" d="M444 288h-28v128h32v32h-160v-32h32v-128h-128v128h32v32h-160v-32h32v-128h-28c-19.8 0-36-16.2-36-36v-216c0-19.8 16.2-36 36-36h120c19.8 0 36 16.2 36 36v156h64v-156c0-19.8 16.2-36 36-36h120c19.8 0 36 16.2 36 36v216c0 19.8-16.2 36-36 36zM174 32h-92c-9.9 0-18 7.2-18 16s8.1 16 18 16h92c9.9 0 18-7.2 18-16s-8.1-16-18-16zM272 224h-32c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16zM430 32h-92c-9.9 0-18 7.2-18 16s8.1 16 18 16h92c9.9 0 18-7.2 18-16s-8.1-16-18-16z" />
20
-<glyph unicode="&#xe00a;" d="M192 416h288v-64h-288zM192 256h288v-64h-288zM192 96h288v-64h-288zM64 384c0-17.673 14.327-32 32-32s32 14.327 32 32c0 17.673-14.327 32-32 32-17.673 0-32-14.327-32-32zM64 224c0-17.673 14.327-32 32-32s32 14.327 32 32c0 17.673-14.327 32-32 32-17.673 0-32-14.327-32-32zM64 64c0-17.673 14.327-32 32-32s32 14.327 32 32c0 17.673-14.327 32-32 32-17.673 0-32-14.327-32-32z" />
21
-<glyph unicode="&#xe00b;" d="M192 416h288v-64h-288zM192 256h288v-64h-288zM192 96h288v-64h-288zM160 215v73h-32v160h-64v-32h32v-128h-32v-32h64v-25l-64-30v-73h64v-32h-64v-32h64v-32h-64v-32h96v160h-64v25z" />
22
-<glyph unicode="&#xe00c;" d="M32 384h448v-64h-448zM192 192h288v-64h-288zM192 288h288v-64h-288zM32 96h448v-64h-448zM32 288l112-80-112-80z" />
23
-<glyph unicode="&#xe00d;" d="M32 384h448v-64h-448zM32 192h288v-64h-288zM32 288h288v-64h-288zM32 96h448v-64h-448zM480 288l-112-80 112-80z" />
24
-<glyph unicode="&#xe00e;" d="M128.214 267.637c52.9 0 95.786-45.585 95.786-101.819 0-56.232-42.886-101.818-95.786-101.818-52.901 0-95.786 45.585-95.786 101.818l-0.428 14.546c0 112.465 85.77 203.636 191.572 203.636v-58.182c-36.55 0-70.913-15.13-96.758-42.602-4.977-5.289-9.517-10.917-13.612-16.828 4.892 0.82 9.903 1.249 15.012 1.249zM384.214 267.637c52.9 0 95.786-45.585 95.786-101.819 0-56.232-42.886-101.818-95.786-101.818-52.901 0-95.786 45.585-95.786 101.818l-0.428 14.546c0 112.465 85.77 203.636 191.572 203.636v-58.182c-36.55 0-70.913-15.13-96.758-42.602-4.978-5.289-9.518-10.917-13.612-16.828 4.892 0.82 9.903 1.249 15.012 1.249z" />
25
-<glyph unicode="&#xe00f;" d="M352 0c29.5 99.5 67.453 227.633-128 223.048v-111.048l-168.001 168 168.001 168v-108.663c234.046 6.1 272-179.337 128-339.337z" />
26
-<glyph unicode="&#xe010;" d="M288 339.337v108.663l168.001-168-168.001-168v111.048c-195.453 4.585-157.5-123.548-128-223.048-144 160-106.046 345.437 128 339.337z" />
27
-<glyph unicode="&#xe011;" d="M463.637 364.892l-66.745 66.744c-10.552 10.552-24.616 16.364-39.599 16.364s-29.047-5.812-39.598-16.363l-82.746-82.745c-21.834-21.834-21.834-57.362 0-79.196l1.373-1.373 33.941 33.941-1.373 1.373c-3.066 3.066-3.066 8.247 0 11.313l82.746 82.746c2.005 2.004 4.404 2.304 5.656 2.304s3.651-0.299 5.656-2.305l66.745-66.744c3.066-3.067 3.066-8.249 0.001-11.314l-82.747-82.747c-2.004-2.004-4.403-2.304-5.655-2.304s-3.651 0.3-5.656 2.306l-1.373 1.373-33.94-33.942 1.371-1.371c10.553-10.554 24.615-16.364 39.6-16.364s29.047 5.812 39.598 16.363l82.747 82.746c21.831 21.833 21.831 57.36-0.002 79.195zM275.678 179.678l-33.941-33.941 1.373-1.373c2.004-2.004 2.305-4.403 2.305-5.655 0-1.253-0.299-3.651-2.303-5.657l-82.747-82.745c-2.005-2.005-4.405-2.305-5.657-2.305s-3.652 0.3-5.657 2.305l-66.746 66.743c-2.005 2.005-2.305 4.405-2.305 5.657s0.299 3.65 2.305 5.656l82.745 82.744c2.005 2.006 4.405 2.306 5.657 2.306s3.652-0.3 5.657-2.306l1.373-1.371 33.941 33.94-1.373 1.373c-10.552 10.552-24.615 16.363-39.598 16.363s-29.046-5.812-39.598-16.363l-82.744-82.743c-10.553-10.552-16.365-24.617-16.365-39.599s5.812-29.047 16.363-39.599l66.745-66.745c10.553-10.551 24.616-16.363 39.599-16.363s29.046 5.812 39.598 16.363l82.747 82.746c10.552 10.552 16.361 24.615 16.361 39.598s-5.812 29.047-16.363 39.598l-1.372 1.373zM176 125c-4.862 0-9.725 1.855-13.435 5.564-7.42 7.42-7.42 19.449 0 26.869l160 160c7.42 7.42 19.448 7.42 26.868 0 7.422-7.42 7.422-19.45 0-26.87l-160-160c-3.708-3.708-8.571-5.563-13.433-5.563z" />
28
-<glyph unicode="&#xe012;" d="M463.637 364.892l-66.745 66.744c-10.552 10.552-24.616 16.364-39.599 16.364s-29.047-5.812-39.598-16.363l-82.746-82.745c-21.834-21.834-21.834-57.362 0-79.196l1.373-1.373 33.941 33.941-1.373 1.373c-3.066 3.066-3.066 8.247 0 11.313l82.746 82.746c2.005 2.004 4.404 2.304 5.656 2.304s3.651-0.299 5.656-2.305l66.745-66.744c3.066-3.067 3.066-8.249 0.001-11.314l-82.747-82.747c-2.004-2.004-4.403-2.304-5.655-2.304s-3.651 0.3-5.656 2.306l-1.373 1.373-33.94-33.942 1.371-1.371c10.553-10.554 24.615-16.364 39.6-16.364s29.047 5.812 39.598 16.363l82.747 82.746c21.831 21.833 21.831 57.36-0.002 79.195zM275.678 179.678l-33.941-33.941 1.373-1.373c2.004-2.004 2.305-4.403 2.305-5.655 0-1.253-0.299-3.651-2.303-5.657l-82.747-82.745c-2.005-2.005-4.405-2.305-5.657-2.305s-3.652 0.3-5.657 2.305l-66.746 66.743c-2.005 2.005-2.305 4.405-2.305 5.657s0.299 3.65 2.305 5.656l82.745 82.744c2.005 2.006 4.405 2.306 5.657 2.306s3.652-0.3 5.657-2.306l1.373-1.371 33.941 33.94-1.373 1.373c-10.552 10.552-24.615 16.363-39.598 16.363s-29.046-5.812-39.598-16.363l-82.744-82.743c-10.553-10.552-16.365-24.617-16.365-39.599s5.812-29.047 16.363-39.599l66.745-66.745c10.553-10.551 24.616-16.363 39.599-16.363s29.046 5.812 39.598 16.363l82.747 82.746c10.552 10.552 16.361 24.615 16.361 39.598s-5.812 29.047-16.363 39.598l-1.372 1.373zM400 61c-4.862 0-9.725 1.854-13.435 5.565l-64 63.999c-7.422 7.42-7.422 19.449 0 26.869 7.42 7.422 19.448 7.422 26.868 0l64-64c7.422-7.42 7.422-19.448 0-26.868-3.708-3.711-8.571-5.565-13.433-5.565zM304 0c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16s16-7.163 16-16v-64c0-8.837-7.163-16-16-16zM464 160h-64c-8.837 0-16 7.163-16 16s7.163 16 16 16h64c8.837 0 16-7.163 16-16s-7.163-16-16-16zM112 387c4.862 0 9.725-1.854 13.435-5.565l64-64c7.421-7.42 7.421-19.449 0-26.869-7.42-7.422-19.449-7.422-26.869 0l-64 64c-7.421 7.42-7.421 19.449 0 26.869 3.709 3.711 8.572 5.565 13.434 5.565zM208 448c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16s-16 7.163-16 16v64c0 8.837 7.163 16 16 16zM48 288h64c8.837 0 16-7.163 16-16s-7.163-16-16-16h-64c-8.837 0-16 7.163-16 16s7.163 16 16 16z" />
29
-<glyph unicode="&#xe013;" d="M128 448v-448l128 128 128-128v448h-256zM352 85.255l-96 96-96-96v330.745h192v-330.745z" />
30
-<glyph unicode="&#xe014;" d="M448 416h-384c-17.6 0-32-14.4-32-32v-320c0-17.6 14.4-32 32-32h384c17.6 0 32 14.4 32 32v320c0 17.6-14.4 32-32 32zM448 64.058c-0.006-0.007-0.015-0.014-0.021-0.021l-95.979 159.963-80-64-112 144-95.984-239.958c-0.005 0.005-0.011 0.011-0.016 0.016v319.885c0.017 0.020 0.038 0.041 0.057 0.057h383.885c0.020-0.017 0.041-0.038 0.058-0.058v-319.884zM320 304c0-26.51 21.49-48 48-48s48 21.49 48 48c0 26.51-21.49 48-48 48-26.51 0-48-21.49-48-48z" />
31
-<glyph unicode="&#xe015;" d="M448 416h-384c-17.6 0-32-14.4-32-32v-320c0-17.6 14.4-32 32-32h384c17.6 0 32 14.4 32 32v320c0 17.6-14.4 32-32 32zM128 64h-64v64h64v-64zM128 192h-64v64h64v-64zM128 320h-64v64h64v-64zM352 64h-192v320h192v-320zM448 64h-64v64h64v-64zM448 192h-64v64h64v-64zM448 320h-64v64h64v-64zM192 320v-192l144 96z" />
32
-<glyph unicode="&#xe016;" d="M224 128h64v-64h-64v64zM352 352c17.673 0 32-14.327 32-32v-83l-114-77h-46v32l96 64v32h-160v64h192zM256 448c-59.833 0-116.083-23.3-158.392-65.608-42.307-42.309-65.608-98.559-65.608-158.392 0-59.832 23.301-116.084 65.608-158.392 42.309-42.308 98.559-65.608 158.392-65.608 59.832 0 116.084 23.3 158.392 65.608 42.308 42.308 65.608 98.56 65.608 158.392 0 59.833-23.3 116.083-65.608 158.392-42.308 42.308-98.56 65.608-158.392 65.608z" />
33
-<glyph unicode="&#xe017;" d="M208 128l-96 96 96 96-32 32-128-128 128-128zM336 352l-32-32 96-96-96-96 32-32 128 128z" />
34
-<glyph unicode="&#xe018;" d="M38.899 327.688l40.707-25.441c25.401 40.557 64.394 71.727 110.604 87.123l-15.183 45.547c-56.874-18.949-104.864-57.313-136.128-107.229zM336.973 434.917l-15.183-45.547c46.211-15.396 85.202-46.566 110.604-87.124l40.706 25.441c-31.263 49.917-79.253 88.281-136.127 107.23zM303.987 127.996c-2.404 0-4.846 0.545-7.143 1.693l-72.844 36.422v105.889c0 8.836 7.164 16 16 16s16-7.164 16-16v-86.111l55.155-27.578c7.903-3.951 11.107-13.562 7.155-21.466-2.802-5.607-8.454-8.848-14.323-8.849zM256 384c-106.039 0-192-85.961-192-192s85.961-192 192-192c106.039 0 192 85.961 192 192 0 106.039-85.961 192-192 192zM256 48c-79.529 0-144 64.471-144 144s64.471 144 144 144c79.529 0 144-64.471 144-144 0-79.529-64.471-144-144-144z" />
35
-<glyph unicode="&#xe019;" d="M32 252.127c22.659 24.96 48.581 46.18 76.636 62.562 45.166 26.372 96.123 40.311 147.364 40.311 51.24 0 102.198-13.939 147.363-40.312 28.056-16.382 53.978-37.602 76.637-62.562v58.716c-16.505 14.059-34.062 26.57-52.434 37.297-52.503 30.657-111.829 46.861-171.566 46.861s-119.064-16.204-171.567-46.86c-18.371-10.727-35.928-23.239-52.433-37.298v-58.715zM256 320c-91.598 0-172.919-50.278-224-128 51.081-77.724 132.402-128 224-128 91.598 0 172.919 50.276 224 128-51.081 77.722-132.402 128-224 128zM256 224c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 17.674 14.327 32 32 32s32-14.326 32-32zM364.033 131.669c-33.717-19.687-70.064-29.669-108.033-29.669s-74.316 9.982-108.033 29.669c-25.777 15.052-49.308 35.655-69.057 60.331 19.749 24.675 43.28 45.279 69.058 60.33 6.638 3.876 13.379 7.37 20.213 10.491-5.256-11.871-8.181-25.004-8.181-38.821 0-53.020 42.981-96 96-96 53.020 0 96 42.98 96 96 0 13.817-2.925 26.95-8.18 38.821 6.834-3.122 13.575-6.615 20.213-10.491 25.777-15.051 49.308-35.655 69.058-60.33-19.749-24.676-43.28-45.279-69.058-60.331z" />
36
-<glyph unicode="&#xe01a;" d="M325.584 338.083c-12.306 40.981-14.438 45.917-53.584 45.917h-32c-39.809 0-41.332-5.076-54.209-48 0-0.001 0-0.001-0.001-0.002l-71.999-239.998h56.818l28.8 96h113.183l28.8-96h56.815l-72.623 242.083zM218.609 256l19.2 68c5.043 16.809 18.19 15 18.19 15s13.147 1.809 18.19-15h0.002l19.2-68h-74.782z" />
37
-<glyph unicode="&#xe01b;" d="M32 384v-352h448v352h-448zM192 160v64h128v-64h-128zM320 128v-64h-128v64h128zM320 320v-64h-128v64h128zM160 320v-64h-96v64h96zM64 224h96v-64h-96v64zM352 224h96v-64h-96v64zM352 256v64h96v-64h-96zM64 128h96v-64h-96v64zM352 64v64h96v-64h-96z" />
38
-<glyph unicode="&#xe01c;" d="M32 256h448v-64h-448z" />
39
-<glyph unicode="&#xe01d;" d="M32 96h256v-64h-256v64zM384 384h-110.279l-91.883-256h-66.144l91.881 256h-111.575v64h288v-64zM464.887 32l-64.887 64.887-64.887-64.887-31.113 31.113 64.887 64.887-64.887 64.887 31.113 31.113 64.887-64.887 64.887 64.887 31.113-31.113-64.887-64.887 64.887-64.887-31.113-31.113z" />
40
-<glyph unicode="&#xe01e;" d="M384 25v-25h64v-32h-96v73l64 30v25h-64v32h96v-73zM338 352h-68l-94-94-94 94h-68l128-128-128-128h68l94 94 94-94h68l-128 128z" />
41
-<glyph unicode="&#xe01f;" d="M384 377v-25h64v-32h-96v73l64 30v25h-64v32h96v-73zM338 352h-68l-94-94-94 94h-68l128-128-128-128h68l94 94 94-94h68l-128 128z" />
42
-<glyph unicode="&#xe020;" d="M352 64v18.502c75.674 30.814 128 96.91 128 173.498 0 106.039-100.288 192-224 192s-224-85.961-224-192c0-76.588 52.327-142.684 128-173.498v-18.502h-96l-32 48v-112h160v111.406c-50.45 25.681-85.333 80.77-85.333 144.594 0 88.366 66.859 160 149.333 160 82.474 0 149.333-71.634 149.333-160 0-63.824-34.883-118.913-85.333-144.594v-111.406h160v112l-32-48h-96z" />
43
-<glyph unicode="&#xe021;" d="M256 410c49.683 0 96.391-19.347 131.521-54.478s54.479-81.839 54.479-131.522-19.348-96.391-54.479-131.521-81.838-54.479-131.521-54.479-96.391 19.348-131.522 54.479-54.478 81.838-54.478 131.521 19.347 96.391 54.478 131.522 81.839 54.478 131.522 54.478zM256 448c-123.712 0-224-100.288-224-224s100.288-224 224-224 224 100.288 224 224-100.288 224-224 224v0zM160 288c0-17.673 14.327-32 32-32s32 14.327 32 32c0 17.673-14.327 32-32 32-17.673 0-32-14.327-32-32zM288 288c0-17.673 14.327-32 32-32s32 14.327 32 32c0 17.673-14.327 32-32 32-17.673 0-32-14.327-32-32zM256 152c-50.92 0-96.28 18.437-125.583 47.164 11.563-58.804 63.389-103.164 125.583-103.164 62.194 0 114.020 44.36 125.584 103.164-29.304-28.727-74.664-47.164-125.584-47.164z" />
44
-<glyph unicode="&#xe022;" d="M128 416h256v-64h-256v64zM448 320h-384c-17.6 0-32-14.4-32-32v-128c0-17.6 14.398-32 32-32h64v-96h256v96h64c17.6 0 32 14.4 32 32v128c0 17.6-14.4 32-32 32zM352 64h-192v128h192v-128zM455.2 272c0-12.813-10.387-23.2-23.199-23.2s-23.201 10.387-23.201 23.2 10.389 23.2 23.201 23.2c12.813 0 23.199-10.387 23.199-23.2z" />
45
-<glyph unicode="&#xe023;" d="M240 288l-96 96 64 64h-176v-176l64 64 96-96zM320 240l96 96 64-64v176h-176l64-64-96-96zM272 160l96-96-64-64h176v176l-64-64-96 96zM192 208l-96-96-64 64v-176h176l-64 64 96 96z" />
46
-<glyph unicode="&#xe024;" d="M480 416v32h-96c-17.601 0-32-14.4-32-32v-160c0-7.928 2.929-15.201 7.748-20.807l-151.748-130.193-71 74-41-35 112-144 208 224h64v32h-96v160h96zM128 224h32v192c0 17.6-14.4 32-32 32h-64c-17.6 0-32-14.4-32-32v-192h32v96h64v-96zM64 352v64h64v-64h-64zM320 256v48c0 17.6-4.4 32-22 32 17.6 0 22 14.4 22 32v48c0 17.6-14.4 32-32 32h-96v-224h96c17.6 0 32 14.4 32 32zM224 416h64v-64h-64v64zM224 320h64v-64h-64v64z" />
47
-<glyph unicode="&#xe025;" d="M224 224h-64v64h64v64h64v-64h64v-64h-64v-64h-64v64zM480 192v-160h-448v160h64v-96h320v96h64z" />
48
-<glyph unicode="&#xe026;" d="M256 288h64v-32h-64zM256 96h64v-32h-64zM288 192h64v-32h-64zM384 192v-96h-32v-32h64v128zM192 192h64v-32h-64zM160 96h64v-32h-64zM160 288h64v-32h-64zM96 384v-128h32v96h32v32zM352 256h64v128h-32v-96h-32zM32 448v-448h448v448h-448zM448 32h-384v384h384v-384zM96 192v-128h32v96h32v32zM288 384h64v-32h-64zM192 384h64v-32h-64z" />
49
-<glyph unicode="&#xe027;" d="M408 448l8-192h-320l8 192h16l8-160h256l8 160h16zM104 0l-8 160h320l-8-160h-16l-8 128h-256l-8-128h-16zM32 224h64v-32h-64zM128 224h64v-32h-64zM224 224h64v-32h-64zM320 224h64v-32h-64zM416 224h64v-32h-64z" />
50
-<glyph unicode="&#xe028;" d="M288 448c123.712 0 224-100.288 224-224s-100.288-224-224-224v48c47.012 0 91.209 18.307 124.451 51.549 33.242 33.242 51.549 77.439 51.549 124.451 0 47.011-18.307 91.209-51.549 124.451-33.242 33.242-77.439 51.549-124.451 51.549-47.011 0-91.209-18.307-124.451-51.549-25.57-25.569-42.291-57.623-48.653-92.451h93.104l-112-128-112 128h82.285c15.53 108.551 108.869 192 221.715 192zM384 256v-64h-128v160h64v-96z" />
51
-<glyph unicode="&#xe02a;" d="M312.721 232.909c24.037 19.075 39.279 47.428 39.279 79.091 0 57.438-50.145 104-112 104h-112v-384h144c61.856 0 112 46.562 112 104 0 44.098-29.559 81.781-71.279 96.909zM192 328c0 13.255 10.745 24 24 24h33.602c21.207 0 38.398-21.49 38.398-48s-17.191-48-38.398-48h-57.602v72zM273.6 96h-57.6c-13.255 0-24 10.745-24 24v72h81.6c21.209 0 38.4-21.49 38.4-48s-17.191-48-38.4-48z" />
52
-<glyph unicode="&#xe02b;" d="M416 416v-32h-72l-128-320h72v-32h-224v32h72l128 320h-72v32h224z" />
53
-<glyph unicode="&#xe02c;" d="M96 64h288v-32h-288v32zM320 416v-192c0-15.656-7.35-30.812-20.695-42.676-15.471-13.751-36.534-21.324-59.305-21.324-22.772 0-43.834 7.573-59.304 21.324-13.346 11.864-20.696 27.020-20.696 42.676v192h-64v-192c0-70.691 64.471-128 144-128s144 57.309 144 128v192h-64z" />
54
-<glyph unicode="&#xe02d;" d="M480 224h-132.938c-25.039 17.71-57.215 27.43-91.062 27.43-44.603 0-82.286 25.121-82.286 54.856 0 29.735 37.683 54.857 82.286 54.857 37.529 0 70.154-17.788 79.56-41.143h56.508c-3.965 25.322-18.79 48.984-42.029 66.413-25.44 19.080-58.838 29.587-94.039 29.587-35.202 0-68.598-10.507-94.037-29.587-27.394-20.545-43.106-49.751-43.106-80.127s15.712-59.582 43.106-80.127c0.978-0.733 1.971-1.449 2.973-2.158h-132.936v-32h256.266c29.104-8.553 50.021-28.135 50.021-50.286 0-29.734-37.684-54.855-82.286-54.855-37.53 0-70.154 17.787-79.559 41.143h-56.508c3.965-25.32 18.791-48.984 42.030-66.413 25.438-19.082 58.834-29.59 94.036-29.59 35.201 0 68.599 10.508 94.037 29.587 27.395 20.545 43.104 49.751 43.104 80.127 0 17.649-5.327 34.896-15.147 50.286h102.006v32z" />
55
-<glyph unicode="&#xe02e;" d="M192 416c-61.856 0-112-50.144-112-112s50.144-112 112-112v-160h64v320h32v-320h64v320h64v64h-224z" />
56
-<glyph unicode="&#xe02f;" d="M224 416c-61.856 0-112-50.144-112-112s50.144-112 112-112v-160h64v320h32v-320h64v320h64v64h-224zM32 32l112 96-112 96z" />
57
-<glyph unicode="&#xe030;" d="M160 416c-61.856 0-112-50.144-112-112s50.144-112 112-112v-160h64v320h32v-320h64v320h64v64h-224zM480 224l-112-96 112-96z" />
58
-<glyph unicode="&#xe031;" d="M416 320h-96v32l-96 96h-192v-352h192v-96h288v224l-96 96zM416 274.745l50.745-50.745h-50.745v50.745zM224 402.745l50.745-50.745h-50.745v50.745zM64 416h128v-96h96v-192h-224v288zM480 32h-224v64h64v192h64v-96h96v-160z" />
59
-<glyph unicode="&#xe032;" d="M384 352h32v-32h-32zM320 288h32v-32h-32zM320 224h32v-32h-32zM320 160h32v-32h-32zM256 224h32v-32h-32zM256 160h32v-32h-32zM192 160h32v-32h-32zM384 288h32v-32h-32zM384 224h32v-32h-32zM384 160h32v-32h-32zM384 96h32v-32h-32zM320 96h32v-32h-32zM256 96h32v-32h-32zM192 96h32v-32h-32zM128 96h32v-32h-32z" />
60
-<glyph unicode="&#xe034;" d="M464 416h-208l-16 32h-176l-32-64h448zM420.17 128h43.83l16 224h-448l32-320h178.040c-52.441 18.888-90.040 69.133-90.040 128 0 74.991 61.009 136 136 136 74.99 0 136-61.009 136-136 0-10.839-1.311-21.575-3.83-32zM437.498 55.125l-67.248 55.346c8.727 14.461 13.75 31.407 13.75 49.529 0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96c18.122 0 35.069 5.023 49.529 13.75l55.346-67.248c11.481-13.339 31.059-14.070 43.503-1.626l2.746 2.746c12.444 12.444 11.713 32.022-1.626 43.503zM288 98c-34.242 0-62 27.758-62 62s27.758 62 62 62 62-27.758 62-62-27.758-62-62-62z" />
61
-<glyph unicode="&#xe035;" d="M352 288v80c0 8.8-7.2 16-16 16h-80v32c0 17.6-14.4 32-32 32h-64c-17.602 0-32-14.4-32-32v-32h-80c-8.801 0-16-7.2-16-16v-256c0-8.8 7.199-16 16-16h112v-96h288v288h-96zM160 415.943c0.017 0.019 0.036 0.039 0.057 0.057h63.884c0.021-0.018 0.041-0.038 0.059-0.057v-31.943h-64v31.943zM96 320v32h192v-32h-192zM416 32h-224v224h224v-224zM224 224v-64h16l16 32h32v-96h-24v-32h80v32h-24v96h32l16-32h16v64z" />
62
-</font></defs></svg>

BIN
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.ttf View File


BIN
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce-small.woff View File


BIN
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.eot View File


File diff suppressed because it is too large
+ 0 - 1191
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.json


+ 0 - 63
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.svg View File

1
-<?xml version="1.0" standalone="no"?>
2
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
-<svg xmlns="http://www.w3.org/2000/svg">
4
-<metadata>Generated by IcoMoon</metadata>
5
-<defs>
6
-<font id="tinymce" horiz-adv-x="512">
7
-<font-face units-per-em="512" ascent="480" descent="-32" />
8
-<missing-glyph horiz-adv-x="512" />
9
-<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
10
-<glyph unicode="&#xe000;" d="M448 480h-448v-512h512v448l-64 64zM256 416h64v-128h-64v128zM448 32h-384v384h32v-160h288v160h37.489l26.511-26.509v-357.491z" />
11
-<glyph unicode="&#xe001;" d="M451.716 380.285l-71.432 71.431c-15.556 15.556-46.284 28.284-68.284 28.284h-240c-22 0-40-18-40-40v-432c0-22 18-40 40-40h368c22 0 40 18 40 40v304c0 22-12.728 52.729-28.284 68.285zM429.089 357.657c1.565-1.565 3.125-3.487 4.64-5.657h-81.729v81.728c2.17-1.515 4.092-3.075 5.657-4.64l71.432-71.431zM448 8c0-4.336-3.664-8-8-8h-368c-4.336 0-8 3.664-8 8v432c0 4.336 3.664 8 8 8h240c2.416 0 5.127-0.305 8-0.852v-127.148h127.148c0.547-2.873 0.852-5.583 0.852-8v-304z" />
12
-<glyph unicode="&#xe002;" d="M512 183.771v80.458l-79.572 7.957c-4.093 15.021-10.044 29.274-17.605 42.49l52.298 63.919-56.526 56.525-63.918-52.298c-13.217 7.562-27.471 13.513-42.491 17.604l-7.957 79.574h-80.458l-7.957-79.573c-15.021-4.093-29.274-10.043-42.49-17.604l-63.919 52.297-56.525-56.525 52.298-63.918c-7.562-13.216-13.513-27.47-17.605-42.49l-79.573-7.958v-80.458l79.573-7.957c4.093-15.021 10.043-29.274 17.605-42.491l-52.298-63.918 56.524-56.524 63.919 52.298c13.216-7.562 27.47-13.514 42.49-17.605l7.958-79.574h80.458l7.957 79.572c15.021 4.093 29.274 10.044 42.491 17.605l63.918-52.298 56.524 56.524-52.298 63.918c7.562 13.217 13.514 27.471 17.605 42.49l79.574 7.96zM352 192l-64-64h-64l-64 64v64l64 64h64l64-64v-64z" />
13
-<glyph unicode="&#xe003;" d="M0 448h512v-64h-512zM0 352h320v-64h-320zM0 160h320v-64h-320zM0 256h512v-64h-512zM0 64h512v-64h-512z" />
14
-<glyph unicode="&#xe004;" d="M0 448h512v-64h-512zM96 352h320v-64h-320zM96 160h320v-64h-320zM0 256h512v-64h-512zM0 64h512v-64h-512z" />
15
-<glyph unicode="&#xe005;" d="M0 448h512v-64h-512zM192 352h320v-64h-320zM192 160h320v-64h-320zM0 256h512v-64h-512zM0 64h512v-64h-512z" />
16
-<glyph unicode="&#xe006;" d="M0 448h512v-64h-512zM0 352h512v-64h-512zM0 256h512v-64h-512zM0 160h512v-64h-512zM0 64h512v-64h-512z" />
17
-<glyph unicode="&#xe007;" d="M445.387 125.423c-22.827 22.778-51.864 34.536-78.973 34.536h-14.556l-31.952 32.004 127.81 128.019c31.952 32.005 31.952 96.014 0 128.019l-191.715-192.028-191.716 192.027c-31.952-32.004-31.952-96.014 0-128.019l127.811-128.017-31.953-32.004h-14.557c-27.11 0-56.146-11.759-78.974-34.538-40.811-40.721-46.325-101.242-12.315-135.175 14.985-14.951 35.144-22.247 56.498-22.247 27.108 0 56.145 11.757 78.973 34.536 26.792 26.732 38.371 62 33.542 92.674l32.692 32.744 32.688-32.744c-4.828-30.674 6.753-65.941 33.542-92.674 22.831-22.779 51.866-34.536 78.974-34.536 21.354 0 41.512 7.296 56.497 22.248 34.010 33.933 28.494 94.454-12.316 135.175zM176.512 57.231c-3.849-8.941-9.505-17.173-16.813-24.463-7.318-7.302-15.586-12.959-24.574-16.812-8.066-3.458-16.48-5.284-24.331-5.284-7.573 0-18.306 1.701-26.431 9.806-8.068 8.052-9.76 18.659-9.76 26.144 0 7.771 1.821 16.105 5.263 24.106 3.85 8.942 9.507 17.173 16.813 24.463 7.317 7.303 15.586 12.957 24.575 16.812 8.067 3.457 16.48 5.284 24.332 5.284 7.573 0 18.306-1.7 26.429-9.807 8.067-8.049 9.761-18.658 9.761-26.142 0.001-7.771-1.819-16.108-5.264-24.107zM256.002 146.702c-24.957 0-45.188 20.266-45.188 45.263 0 24.996 20.231 45.26 45.188 45.26s45.186-20.264 45.186-45.26c0-24.999-20.23-45.263-45.186-45.263zM427.636 20.479c-8.124-8.104-18.856-9.806-26.43-9.806-7.852 0-16.265 1.826-24.333 5.284-8.986 3.853-17.254 9.51-24.571 16.812-7.307 7.29-12.963 15.521-16.813 24.463-3.443 7.999-5.263 16.336-5.263 24.106 0 7.483 1.692 18.094 9.76 26.143 8.123 8.104 18.856 9.807 26.43 9.807 7.85 0 16.265-1.827 24.33-5.284 8.989-3.854 17.258-9.509 24.575-16.812 7.305-7.29 12.962-15.521 16.813-24.463 3.442-7.999 5.263-16.335 5.263-24.106-0.001-7.485-1.695-18.093-9.761-26.144z" />
18
-<glyph unicode="&#xe008;" d="M416 320v80c0 8.8-7.2 16-16 16h-112v32c0 17.6-14.4 32-32 32h-64c-17.602 0-32-14.4-32-32v-32h-112c-8.801 0-16-7.2-16-16v-320c0-8.8 7.199-16 16-16h144v-96h224l96 96v256h-96zM192 447.943c0.017 0.019 0.036 0.039 0.057 0.057h63.884c0.021-0.018 0.041-0.038 0.059-0.057v-31.943h-64v31.943zM96 352v32h256v-32h-256zM416 13.255v50.745h50.745l-50.745-50.745zM480 96h-96v-96h-160v288h256v-192z" />
19
-<glyph unicode="&#xe009;" d="M32 480h192v-32h-192zM288 480h192v-32h-192zM476 320h-28v128h-128v-128h-128v128h-128v-128h-28c-19.8 0-36-16.2-36-36v-280c0-19.8 16.2-36 36-36h152c19.8 0 36 16.2 36 36v188h64v-188c0-19.8 16.2-36 36-36h152c19.8 0 36 16.2 36 36v280c0 19.8-16.2 36-36 36zM174 0h-124c-9.9 0-18 7.2-18 16s8.1 16 18 16h124c9.9 0 18-7.2 18-16s-8.1-16-18-16zM272 224h-32c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16zM462 0h-124c-9.9 0-18 7.2-18 16s8.1 16 18 16h124c9.9 0 18-7.2 18-16s-8.1-16-18-16z" />
20
-<glyph unicode="&#xe00a;" d="M192 448h320v-64h-320v64zM192 256h320v-64h-320v64zM192 64h320v-64h-320v64zM0 416c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM0 224c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM0 32c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64z" />
21
-<glyph unicode="&#xe00b;" d="M192 64h320v-64h-320zM192 256h320v-64h-320zM192 448h320v-64h-320zM96 480v-128h-32v96h-32v32zM64 217v-25h64v-32h-96v73l64 30v25h-64v32h96v-73zM128 128v-160h-96v32h64v32h-64v32h64v32h-64v32z" />
22
-<glyph unicode="&#xe00c;" d="M0 448h512v-64h-512zM192 352h320v-64h-320zM192 256h320v-64h-320zM192 160h320v-64h-320zM0 64h512v-64h-512zM0 128v192l128-96z" />
23
-<glyph unicode="&#xe00d;" d="M0 448h512v-64h-512zM192 352h320v-64h-320zM192 256h320v-64h-320zM192 160h320v-64h-320zM0 64h512v-64h-512zM128 320v-192l-128 96z" />
24
-<glyph unicode="&#xe00e;" d="M112.5 256c61.856 0 112-50.145 112-112 0-61.856-50.144-112-112-112-61.856 0-112 50.144-112 112l-0.5 16c0 123.712 100.288 224 224 224v-64c-42.737 0-82.917-16.643-113.137-46.863-5.817-5.818-11.126-12.008-15.915-18.51 5.719 0.9 11.58 1.373 17.552 1.373zM400.5 256c61.855 0 112-50.145 112-112 0-61.856-50.145-112-112-112-61.855 0-112 50.144-112 112l-0.5 16c0 123.712 100.288 224 224 224v-64c-42.737 0-82.917-16.643-113.137-46.863-5.818-5.818-11.127-12.008-15.916-18.51 5.72 0.9 11.58 1.373 17.553 1.373z" />
25
-<glyph unicode="&#xe00f;" d="M380.931-32c56.863 103.016 66.444 260.153-156.931 254.912v-126.912l-192 192 192 192v-124.186c267.481 6.971 297.285-236.107 156.931-387.814z" />
26
-<glyph unicode="&#xe010;" d="M288 355.814v124.186l192-192-192-192v126.912c-223.375 5.241-213.794-151.896-156.93-254.912-140.356 151.707-110.55 394.785 156.93 387.814z" />
27
-<glyph unicode="&#xe011;" d="M160 128c8.8-8.8 23.637-8.363 32.971 0.971l158.059 158.058c9.334 9.334 9.77 24.171 0.97 32.971s-23.637 8.363-32.971-0.971l-158.058-158.058c-9.334-9.334-9.771-24.171-0.971-32.971zM238.444 142.444c2.28-4.525 3.495-9.58 3.495-14.848 0-8.808-3.372-17.030-9.496-23.154l-81.691-81.691c-6.124-6.124-14.347-9.496-23.154-9.496s-17.030 3.372-23.154 9.496l-49.691 49.691c-6.124 6.124-9.496 14.347-9.496 23.154s3.372 17.030 9.496 23.154l81.691 81.691c6.124 6.124 14.347 9.497 23.154 9.497 5.268 0 10.322-1.215 14.848-3.495l32.669 32.669c-13.935 10.705-30.72 16.080-47.517 16.080-19.993 0-39.986-7.583-55.154-22.751l-81.691-81.691c-30.335-30.335-30.335-79.974 0-110.309l49.691-49.691c15.167-15.166 35.16-22.75 55.153-22.75 19.994 0 39.987 7.584 55.154 22.751l81.691 81.691c27.91 27.91 30.119 72.149 6.672 102.672l-32.67-32.67zM489.249 407.558l-49.691 49.691c-15.167 15.168-35.16 22.751-55.154 22.751-19.993 0-39.986-7.583-55.154-22.751l-81.691-81.691c-27.91-27.91-30.119-72.149-6.671-102.671l32.669 32.67c-2.279 4.525-3.494 9.58-3.494 14.847 0 8.808 3.372 17.030 9.496 23.154l81.691 81.691c6.124 6.124 14.347 9.497 23.154 9.497s17.030-3.373 23.154-9.497l49.691-49.691c6.124-6.124 9.496-14.347 9.496-23.154s-3.372-17.030-9.496-23.154l-81.691-81.691c-6.124-6.124-14.347-9.496-23.154-9.496-5.268 0-10.322 1.215-14.848 3.495l-32.669-32.669c13.936-10.705 30.72-16.080 47.517-16.080 19.994 0 39.987 7.584 55.154 22.751l81.691 81.691c30.335 30.333 30.335 79.972 0 110.307z" />
28
-<glyph unicode="&#xe012;" d="M238.444 142.443c2.28-4.524 3.495-9.579 3.495-14.848 0-8.808-3.372-17.029-9.496-23.154l-81.69-81.69c-6.124-6.124-14.348-9.496-23.154-9.496s-17.030 3.372-23.154 9.496l-49.69 49.69c-6.124 6.125-9.496 14.348-9.496 23.154s3.372 17.030 9.496 23.154l81.69 81.691c6.124 6.123 14.348 9.496 23.154 9.496 5.269 0 10.322-1.215 14.848-3.494l32.669 32.668c-13.935 10.705-30.72 16.080-47.517 16.080-19.993 0-39.986-7.583-55.154-22.751l-81.69-81.691c-30.335-30.335-30.335-79.975 0-110.309l49.69-49.691c15.167-15.166 35.16-22.75 55.153-22.75 19.994 0 39.987 7.584 55.154 22.751l81.69 81.69c27.91 27.91 30.119 72.149 6.672 102.673l-32.67-32.669zM489.248 407.558l-49.69 49.691c-15.167 15.168-35.16 22.751-55.154 22.751-19.993 0-39.985-7.583-55.153-22.751l-81.691-81.691c-27.91-27.91-30.119-72.149-6.671-102.671l32.669 32.67c-2.279 4.525-3.494 9.58-3.494 14.847 0 8.808 3.372 17.030 9.496 23.154l81.691 81.691c6.123 6.124 14.347 9.497 23.153 9.497 8.808 0 17.030-3.373 23.154-9.497l49.69-49.691c6.124-6.124 9.496-14.347 9.496-23.154s-3.372-17.030-9.496-23.154l-81.69-81.691c-6.124-6.124-14.347-9.496-23.154-9.496-5.268 0-10.322 1.215-14.848 3.495l-32.669-32.669c13.936-10.705 30.72-16.080 47.517-16.080 19.994 0 39.987 7.584 55.154 22.752l81.69 81.69c30.336 30.333 30.336 79.972 0 110.307zM116.684 340.688l-95.997 95.997 22.628 22.628 95.997-95.997zM192 480h32v-96h-32zM0 288h96v-32h-96zM395.316 107.312l95.998-95.998-22.628-22.628-95.998 95.998zM288 64h32v-96h-32zM416 192h96v-32h-96z" />
29
-<glyph unicode="&#xe013;" d="M96 480v-512l160 160 160-160v512h-320zM384 45.255l-128 128-128-128v402.745h256v-402.745z" />
30
-<glyph unicode="&#xe014;" d="M0 416v-416h512v416h-512zM480 32h-448v352h448v-352zM352 304c0 26.51 21.49 48 48 48s48-21.49 48-48c0-26.51-21.49-48-48-48-26.51 0-48 21.49-48 48zM448 64h-384l96 256 128-160 64 48z" />
31
-<glyph unicode="&#xe015;" d="M0 416v-384h512v384h-512zM96 64h-64v64h64v-64zM96 192h-64v64h64v-64zM96 320h-64v64h64v-64zM384 64h-256v320h256v-320zM480 64h-64v64h64v-64zM480 192h-64v64h64v-64zM480 320h-64v64h64v-64zM192 320v-192l128 96z" />
32
-<glyph unicode="&#xe016;" d="M224 128h64v-64h-64zM352 352c17.673 0 32-14.327 32-32v-96l-96-64h-64v32l96 64v32h-160v64h192zM256 432c-55.559 0-107.792-21.636-147.078-60.922s-60.922-91.519-60.922-147.078c0-55.559 21.636-107.792 60.922-147.078 39.286-39.286 91.519-60.922 147.078-60.922 55.559 0 107.792 21.636 147.078 60.922 39.286 39.286 60.922 91.519 60.922 147.078 0 55.559-21.636 107.792-60.922 147.078-39.286 39.286-91.519 60.922-147.078 60.922zM256 480v0c141.385 0 256-114.615 256-256s-114.615-256-256-256c-141.385 0-256 114.615-256 256 0 141.385 114.615 256 256 256z" />
33
-<glyph unicode="&#xe017;" d="M160 352l-128-128 128-128h64l-128 128 128 128zM352 352h-64l128-128-128-128h64l128 128z" />
34
-<glyph unicode="&#xe018;" d="M256 384c-106.038 0-192-85.961-192-192s85.961-192 192-192c106.037 0 192 85.961 192 192s-85.963 192-192 192zM357.822 90.177c-27.196-27.198-63.358-42.177-101.822-42.177s-74.625 14.979-101.823 42.177c-27.198 27.197-42.177 63.359-42.177 101.823s14.979 74.625 42.177 101.823c27.198 27.198 63.359 42.177 101.823 42.177s74.626-14.979 101.821-42.177c27.201-27.198 42.179-63.359 42.179-101.823s-14.979-74.626-42.178-101.823zM162.965 378.069l-21.47 42.939c-49.437-24.768-89.735-65.066-114.503-114.504l42.938-21.47c20.124 40.168 52.866 72.911 93.035 93.035zM442.067 285.035l42.939 21.469c-24.766 49.438-65.063 89.736-114.502 114.504l-21.472-42.939c40.169-20.124 72.912-52.866 93.035-93.034zM256 288h-32v-96c0-5.055 2.35-9.555 6.011-12.486l-0.006-0.008 80-64 19.988 24.988-73.993 59.195v88.311z" />
35
-<glyph unicode="&#xe019;" d="M256 320c-104.684 0-197.622-50.278-256-128 58.378-77.723 151.316-128 256-128 104.684 0 197.622 50.277 256 128-58.378 77.722-151.316 128-256 128zM224 256c17.673 0 32-14.327 32-32s-14.327-32-32-32-32 14.327-32 32 14.327 32 32 32zM386.808 127.352c-19.824-10.129-40.826-17.931-62.423-23.188-22.244-5.418-45.251-8.164-68.385-8.164-23.133 0-46.141 2.746-68.384 8.162-21.597 5.259-42.599 13.061-62.423 23.188-31.51 16.101-60.111 38.205-83.82 64.649 23.709 26.444 52.31 48.55 83.82 64.649 16.168 8.261 33.121 14.973 50.541 20.020-9.944-15.121-15.734-33.217-15.734-52.668 0-53.020 42.981-96 96-96 53.019 0 96 42.98 96 96 0 19.451-5.791 37.547-15.733 52.67 17.419-5.048 34.372-11.76 50.541-20.021 31.511-16.099 60.109-38.204 83.819-64.649-23.71-26.443-52.309-48.55-83.819-64.648zM430.459 358.139c-54.36 27.777-113.056 41.861-174.459 41.861-61.403 0-120.099-14.084-174.459-41.861-29.386-15.016-56.866-33.952-81.541-56.038v-54.603c27.669 29.283 60.347 53.877 96.097 72.145 49.81 25.452 103.609 38.357 159.903 38.357s110.093-12.905 159.902-38.358c35.751-18.268 68.429-42.862 96.098-72.145v54.603c-24.675 22.087-52.154 41.023-81.541 56.039z" />
36
-<glyph unicode="&#xe01a;" d="M161.009 64l28.8 96h132.382l28.8-96h56.816l-95.998 320h-111.618l-96-320h56.818zM237.809 320h36.382l28.8-96h-93.982l28.8 96z" />
37
-<glyph unicode="&#xe01b;" d="M0 448v-448h512v448h-512zM192 160v96h128v-96h-128zM320 128v-96h-128v96h128zM320 384v-96h-128v96h128zM160 384v-96h-128v96h128zM32 256h128v-96h-128v96zM352 256h128v-96h-128v96zM352 288v96h128v-96h-128zM32 128h128v-96h-128v96zM352 32v96h128v-96h-128z" />
38
-<glyph unicode="&#xe01c;" d="M0 256h512v-64h-512z" />
39
-<glyph unicode="&#xe01d;" d="M0 32h288v-64h-288zM96 480h352v-64h-352zM138.694 64l102.344 392.082 61.925-16.164-98.125-375.918zM464.887-32l-64.887 64.887-64.887-64.887-31.113 31.113 64.887 64.887-64.887 64.887 31.113 31.113 64.887-64.887 64.887 64.887 31.113-31.113-64.887-64.887 64.887-64.887z" />
40
-<glyph unicode="&#xe01e;" d="M384 25v-25h64v-32h-96v73l64 30v25h-64v32h96v-73zM338 352h-68l-94-94-94 94h-68l128-128-128-128h68l94 94 94-94h68l-128 128z" />
41
-<glyph unicode="&#xe01f;" d="M384 377v-25h64v-32h-96v73l64 30v25h-64v32h96v-73zM338 352h-68l-94-94-94 94h-68l128-128-128-128h68l94 94 94-94h68l-128 128z" />
42
-<glyph unicode="&#xe020;" d="M352 32h128l32 64v-128h-192v107.107c65.556 28.242 112 98.581 112 180.893 0 107.216-78.799 191.133-176 191.133-97.203 0-176-83.916-176-191.133 0-82.312 46.443-152.651 112-180.893v-107.107h-192v128l32-64h128v16.295c-93.815 33.23-160 113.701-160 207.705 0 123.712 114.615 224 256 224 141.385 0 256-100.288 256-224 0-94.004-66.185-174.475-160-207.705v-16.295z" />
43
-<glyph unicode="&#xe021;" d="M256 480c-141.385 0-256-114.614-256-256 0-141.385 114.614-256 256-256 141.385 0 256 114.615 256 256 0 141.386-114.615 256-256 256zM256 8c-119.293 0-216 96.706-216 216 0 119.293 96.707 216 216 216 119.295 0 216-96.707 216-216 0-119.294-96.705-216-216-216zM192 320c0-17.673-14.327-32-32-32s-32 14.327-32 32 14.327 32 32 32 32-14.327 32-32zM384 320c0-17.673-14.326-32-32-32s-32 14.327-32 32 14.326 32 32 32 32-14.327 32-32zM256 154c70.537 0 131.344 28.766 159.231 61.596-10.436-85.61-78.144-151.596-159.231-151.596-81.059 0-148.749 66.013-159.222 151.584 27.893-32.823 88.693-61.584 159.222-61.584z" />
44
-<glyph unicode="&#xe022;" d="M128 448h256v-64h-256zM480 352h-448c-17.6 0-32-14.4-32-32v-160c0-17.6 14.398-32 32-32h96v-128h256v128h96c17.6 0 32 14.4 32 32v160c0 17.6-14.4 32-32 32zM352 32h-192v160h192v-160zM487.2 304c0-12.813-10.387-23.2-23.199-23.2-12.813 0-23.201 10.387-23.201 23.2s10.388 23.2 23.201 23.2c12.813 0 23.199-10.387 23.199-23.2z" />
45
-<glyph unicode="&#xe023;" d="M512 480v-192l-69.13 69.13-106-106-53.74 53.74 106 106-69.13 69.13zM122.87 410.87l106-106-53.74-53.74-106 106-69.13-69.13v192h192zM442.87 90.87l69.13 69.13v-192h-192l69.13 69.13-106 106 53.74 53.74zM228.87 143.13l-106-106 69.13-69.13h-192v192l69.13-69.13 106 106z" />
46
-<glyph unicode="&#xe024;" d="M64 352h64v-96h32v192c0 17.6-14.4 32-32 32h-64c-17.6 0-32-14.4-32-32v-192h32v96zM64 448h64v-64h-64v64zM480 448v32h-96c-17.601 0-32-14.4-32-32v-160c0-17.6 14.399-32 32-32h96v32h-96v160h96zM320 400v48c0 17.6-14.4 32-32 32h-96v-224h96c17.6 0 32 14.4 32 32v48c0 17.6-4.4 32-22 32 17.6 0 22 14.4 22 32zM288 288h-64v64h64v-64zM288 384h-64v64h64v-64zM416 192l-208-224-112 144 41 35 71-74 176 151z" />
47
-<glyph unicode="&#xe025;" d="M224 192h-96v64h96v96h64v-96h96v-64h-96v-96h-64zM512 160v-192h-512v192h64v-128h384v128z" />
48
-<glyph unicode="&#xe026;" d="M192 384h64v-32h-64zM288 384h64v-32h-64zM448 384v-128h-96v32h64v64h-32v32zM160 288h64v-32h-64zM256 288h64v-32h-64zM96 352v-64h32v-32h-64v128h96v-32zM192 192h64v-32h-64zM288 192h64v-32h-64zM448 192v-128h-96v32h64v64h-32v32zM160 96h64v-32h-64zM256 96h64v-32h-64zM96 160v-64h32v-32h-64v128h96v-32zM480 448h-448v-448h448v448zM512 480v0-512h-512v512h512z" />
49
-<glyph unicode="&#xe027;" d="M0 224h64v-32h-64zM96 224h96v-32h-96zM224 224h64v-32h-64zM320 224h96v-32h-96zM448 224h64v-32h-64zM440 480l8-224h-384l8 224h16l8-192h320l8 192zM72-32l-8 192h384l-8-192h-16l-8 160h-320l-8-160z" />
50
-<glyph unicode="&#xe028;" d="M288 448c123.712 0 224-100.288 224-224s-100.288-224-224-224v48c47.012 0 91.209 18.307 124.451 51.549 33.242 33.242 51.549 77.439 51.549 124.451 0 47.011-18.307 91.209-51.549 124.451-33.242 33.242-77.439 51.549-124.451 51.549-47.011 0-91.209-18.307-124.451-51.549-25.57-25.569-42.291-57.623-48.653-92.451h93.104l-112-128-112 128h82.285c15.53 108.551 108.869 192 221.715 192zM384 256v-64h-128v160h64v-96z" />
51
-<glyph unicode="&#xe02a;" d="M353.94 237.674c18.749 22.271 30.060 51.004 30.060 82.326 0 70.58-57.421 128-128 128h-160v-448h192c70.579 0 128 57.421 128 128 0 46.478-24.899 87.248-62.060 109.674zM192 384h50.75c27.984 0 50.75-28.71 50.75-64s-22.766-64-50.75-64h-50.75v128zM271.5 64h-79.5v128h79.5c29.225 0 53-28.71 53-64s-23.775-64-53-64z" />
52
-<glyph unicode="&#xe02b;" d="M448 448v-32h-64l-160-384h64v-32h-224v32h64l160 384h-64v32z" />
53
-<glyph unicode="&#xe02c;" d="M352 448h64v-208c0-79.529-71.634-144-160-144-88.365 0-160 64.471-160 144v208h64v-208c0-20.083 9.119-39.352 25.677-54.253 18.448-16.602 43.423-25.747 70.323-25.747 26.9 0 51.875 9.145 70.323 25.747 16.558 14.901 25.677 34.17 25.677 54.253v208zM96 64h320v-64h-320z" />
54
-<glyph unicode="&#xe02d;" d="M365.71 221.482c31.96-23.969 50.29-58.043 50.29-93.482s-18.33-69.513-50.29-93.482c-29.679-22.259-68.642-34.518-109.71-34.518-41.069 0-80.031 12.259-109.71 34.518-31.96 23.969-50.29 58.043-50.29 93.482h64c0-34.691 43.963-64 96-64s96 29.309 96 64c0 34.691-43.963 64-96 64-41.069 0-80.031 12.259-109.71 34.518-31.96 23.97-50.29 58.043-50.29 93.482 0 35.439 18.33 69.512 50.29 93.482 29.679 22.259 68.641 34.518 109.71 34.518 41.068 0 80.031-12.259 109.71-34.518 31.96-23.97 50.29-58.043 50.29-93.482h-64c0 34.691-43.963 64-96 64-52.037 0-96-29.309-96-64 0-34.691 43.963-64 96-64 41.068 0 80.031-12.259 109.71-34.518zM0 224h512v-32h-512z" />
55
-<glyph unicode="&#xe02e;" d="M192 448h256v-64h-64v-384h-64v384h-64v-384h-64v224c-61.856 0-112 50.144-112 112s50.144 112 112 112z" />
56
-<glyph unicode="&#xe02f;" d="M224 448h256v-64h-64v-384h-64v384h-64v-384h-64v224c-61.856 0-112 50.144-112 112s50.144 112 112 112zM32 256l128-112-128-112z" />
57
-<glyph unicode="&#xe030;" d="M128 448h256v-64h-64v-384h-64v384h-64v-384h-64v224c-61.856 0-112 50.144-112 112s50.144 112 112 112zM480 32l-128 112 128 112z" />
58
-<glyph unicode="&#xe031;" d="M416 352h-96v32l-96 96h-224v-384h192v-128h320v288l-96 96zM416 306.745l50.745-50.745h-50.745v50.745zM224 434.745l50.745-50.745h-50.745v50.745zM32 448h160v-96h96v-224h-256v320zM480 0h-256v96h96v224h64v-96h96v-224z" />
59
-<glyph unicode="&#xe032;" d="M384 352h32v-32h-32zM320 288h32v-32h-32zM320 224h32v-32h-32zM320 160h32v-32h-32zM256 224h32v-32h-32zM256 160h32v-32h-32zM192 160h32v-32h-32zM384 288h32v-32h-32zM384 224h32v-32h-32zM384 160h32v-32h-32zM384 96h32v-32h-32zM320 96h32v-32h-32zM256 96h32v-32h-32zM192 96h32v-32h-32zM128 96h32v-32h-32z" />
60
-<glyph unicode="&#xe033;" d="M64 208l144-144 240 240-64 64-176-176-80 80z" />
61
-<glyph unicode="&#xe034;" d="M464 416h-208l-16 32h-176l-32-64h448zM452.17 128h37.43l22.4 224h-512l32-320h242.040c-52.441 18.888-90.040 69.133-90.040 128 0 74.991 61.009 136 136 136 74.99 0 136-61.009 136-136 0-10.839-1.311-21.575-3.83-32zM501.498 23.125l-99.248 87.346c8.727 14.46 13.75 31.407 13.75 49.529 0 53.020-42.98 96-96 96s-96-42.98-96-96 42.98-96 96-96c18.122 0 35.069 5.023 49.529 13.75l87.346-99.248c11.481-13.339 31.059-14.070 43.503-1.626l2.746 2.746c12.444 12.444 11.713 32.022-1.626 43.503zM320 98c-34.242 0-62 27.758-62 62s27.758 62 62 62 62-27.758 62-62-27.758-62-62-62z" />
62
-<glyph unicode="&#xe035;" d="M256 224v-64h16l16 32h32v-128h-24v-32h112v32h-24v128h32l16-32h16v64zM416 320v80c0 8.8-7.2 16-16 16h-112v32c0 17.6-14.4 32-32 32h-64c-17.602 0-32-14.4-32-32v-32h-112c-8.801 0-16-7.2-16-16v-320c0-8.8 7.199-16 16-16h144v-96h320v352h-96zM192 447.943c0.017 0.019 0.036 0.039 0.057 0.057h63.884c0.021-0.018 0.041-0.038 0.059-0.057v-31.943h-64v31.943zM96 352v32h256v-32h-256zM480 0h-256v288h256v-288z" />
63
-</font></defs></svg>

BIN
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.ttf View File


BIN
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/fonts/tinymce.woff View File


BIN
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/img/anchor.gif View File


+ 0 - 0
tracim/tracim/public/assets/tinymce/js/tinymce/skins/custom/img/loader.gif View File


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