Mercurial > libervia-web
annotate src/browser/sat_browser/richtext.py @ 754:d3fa1e8904cf
browser_side: display the number of alerts for each contact and not only a symbol (*) + favicon displays the total number of waiting messages
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 24 Nov 2015 13:33:19 +0100 |
parents | d123e27fc386 |
children | 34f066ed3b23 |
rev | line source |
---|---|
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
4 # Libervia: a Salut à Toi frontend |
685 | 5 # Copyright (C) 2013, 2014, 2015 Adrien Cossa <souliane@mailoo.org> |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
6 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
10 # (at your option) any later version. |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
15 # GNU Affero General Public License for more details. |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 |
339
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
2067d6241927
fixed docstrings wrong usage for licence informations
Goffi <goffi@goffi.org>
parents:
327
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
433
diff
changeset
|
20 from sat_frontends.tools import composition |
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
433
diff
changeset
|
21 from sat.core.i18n import _ |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
685
diff
changeset
|
22 from sat.core.log import getLogger |
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
685
diff
changeset
|
23 log = getLogger(__name__) |
449
981ed669d3b3
/!\ reorganize all the file hierarchy, move the code and launching script to src:
souliane <souliane@mailoo.org>
parents:
433
diff
changeset
|
24 |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 from pyjamas.ui.TextArea import TextArea |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 from pyjamas.ui.Button import Button |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
27 from pyjamas.ui.CheckBox import CheckBox |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 from pyjamas.ui.Label import Label |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
29 from pyjamas.ui.FlexTable import FlexTable |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
30 from pyjamas.ui.HorizontalPanel import HorizontalPanel |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
31 from pyjamas.ui.KeyboardListener import KeyboardHandler |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
32 from pyjamas import Window |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
33 from __pyjamas__ import doc |
323
0b7934e75e76
misc: reorganization of the file panels.py + clean the modules import:
souliane <souliane@mailoo.org>
parents:
319
diff
changeset
|
34 |
433
bbdbee25123a
import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents:
432
diff
changeset
|
35 from constants import Const as C |
467 | 36 import dialog |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
37 import base_panel |
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
38 import editor_widget |
467 | 39 import html_tools |
740
b6510fd9ae15
browser_side: implements tags UI
souliane <souliane@mailoo.org>
parents:
738
diff
changeset
|
40 import list_manager |
b6510fd9ae15
browser_side: implements tags UI
souliane <souliane@mailoo.org>
parents:
738
diff
changeset
|
41 |
742
d123e27fc386
browser_side: use methods defined in quick_frontend to retrieve and set the tags from/to microblog data
souliane <souliane@mailoo.org>
parents:
741
diff
changeset
|
42 from sat_frontends.quick_frontend import quick_blog |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
45 class RichTextEditor(editor_widget.BaseTextEditor, FlexTable): |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 """Panel for the rich text editor.""" |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
48 STYLE = {'main': 'richTextEditor', |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
49 'title': 'richTextTitle', |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
50 'toolbar': 'richTextToolbar', |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
51 'textarea': 'richTextArea' |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
52 } |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
53 |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
54 def __init__(self, host, content=None, modifiedCb=None, afterEditCb=None, options=None): |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
55 """ |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
56 |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
57 @param host (SatWebFrontend): host instance |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
58 @param content (dict): dict with at least a 'text' key |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
59 @param modifiedCb (callable): to be called when the text has been modified |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
60 @param afterEditCb (callable): to be called when the edition is done |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
61 @param options (list[unicode]): UI options ("read_only", "update_msg") |
281
36ce989c73a5
browser_side: more customizable rich text editor
souliane <souliane@mailoo.org>
parents:
280
diff
changeset
|
62 """ |
593
b97c85b8a47e
browser side: fixed bad FlexTable __init__ call, need to be checked
Goffi <goffi@goffi.org>
parents:
574
diff
changeset
|
63 FlexTable.__init__(self) # FIXME |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
64 self.host = host |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
65 self.wysiwyg = False |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
66 self.read_only = 'read_only' in options |
281
36ce989c73a5
browser_side: more customizable rich text editor
souliane <souliane@mailoo.org>
parents:
280
diff
changeset
|
67 self.update_msg = 'update_msg' in options |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
68 |
740
b6510fd9ae15
browser_side: implements tags UI
souliane <souliane@mailoo.org>
parents:
738
diff
changeset
|
69 indices = (-1, -1, 0, -1, -1) if self.read_only else (0, 1, 2, 3, 4) |
b6510fd9ae15
browser_side: implements tags UI
souliane <souliane@mailoo.org>
parents:
738
diff
changeset
|
70 self.title_offset, self.toolbar_offset, self.content_offset, self.tags_offset, self.command_offset = indices |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
71 self.addStyleName(self.STYLE['main']) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
72 |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
73 editor_widget.BaseTextEditor.__init__(self, content, None, modifiedCb, afterEditCb) |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
74 |
362
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
75 def addEditListener(self, listener): |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
76 """Add a method to be called whenever the text is edited. |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
77 |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
78 @param listener: method taking two arguments: sender, keycode |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
79 """ |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
80 editor_widget.BaseTextEditor.addEditListener(self, listener) |
362
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
81 if hasattr(self, 'display'): |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
82 self.display.addEditListener(listener) |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
83 |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
84 def refresh(self, edit=None): |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
85 """Refresh the UI for edition/display mode. |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
86 |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
87 @param edit: set to True to display the edition mode |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
88 """ |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
89 if edit is None: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
90 edit = hasattr(self, 'textarea') and self.textarea.getVisible() |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
91 |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
92 for widget in ['title_panel', 'tags_panel', 'command']: |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
93 if hasattr(self, widget): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
94 getattr(self, widget).setVisible(edit) |
324
8131d0ccf21b
browser_side: prepare user input for microblog titles
souliane <souliane@mailoo.org>
parents:
323
diff
changeset
|
95 |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
96 if hasattr(self, 'toolbar'): |
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
97 self.toolbar.setVisible(False) |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
98 |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
99 if not hasattr(self, 'display'): |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
100 self.display = editor_widget.HTMLTextEditor(options={'enhance_display': False, 'listen_keyboard': False}) # for display mode |
362
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
101 for listener in self.edit_listeners: |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
102 self.display.addEditListener(listener) |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
103 |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
104 if not self.read_only and not hasattr(self, 'textarea'): |
362
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
105 self.textarea = EditTextArea(self) # for edition mode |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
106 self.textarea.addStyleName(self.STYLE['textarea']) |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
107 |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
108 self.getFlexCellFormatter().setColSpan(self.content_offset, 0, 2) |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
109 if edit and not self.wysiwyg: |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
110 self.textarea.setWidth('100%') # CSS width doesn't do it, don't know why |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
111 self.setWidget(self.content_offset, 0, self.textarea) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
112 else: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
113 self.setWidget(self.content_offset, 0, self.display) |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
114 if not edit: |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
115 return |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
116 |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
117 if not self.read_only and not hasattr(self, 'title_panel'): |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
118 self.title_panel = base_panel.TitlePanel() |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
119 self.title_panel.addStyleName(self.STYLE['title']) |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
120 self.getFlexCellFormatter().setColSpan(self.title_offset, 0, 2) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
121 self.setWidget(self.title_offset, 0, self.title_panel) |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
122 |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
123 if not self.read_only and not hasattr(self, 'tags_panel'): |
740
b6510fd9ae15
browser_side: implements tags UI
souliane <souliane@mailoo.org>
parents:
738
diff
changeset
|
124 suggested_tags = [] # TODO: feed this list with tags suggestion |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
125 self.tags_panel = list_manager.TagsPanel(suggested_tags) |
740
b6510fd9ae15
browser_side: implements tags UI
souliane <souliane@mailoo.org>
parents:
738
diff
changeset
|
126 self.getFlexCellFormatter().setColSpan(self.tags_offset, 0, 2) |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
127 self.setWidget(self.tags_offset, 0, self.tags_panel) |
740
b6510fd9ae15
browser_side: implements tags UI
souliane <souliane@mailoo.org>
parents:
738
diff
changeset
|
128 |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
129 if not self.read_only and not hasattr(self, 'command'): |
281
36ce989c73a5
browser_side: more customizable rich text editor
souliane <souliane@mailoo.org>
parents:
280
diff
changeset
|
130 self.command = HorizontalPanel() |
36ce989c73a5
browser_side: more customizable rich text editor
souliane <souliane@mailoo.org>
parents:
280
diff
changeset
|
131 self.command.addStyleName("marginAuto") |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
132 self.command.add(Button("Cancel", lambda: self.edit(True, True))) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
133 self.command.add(Button("Update" if self.update_msg else "Send message", lambda: self.edit(False))) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
134 self.getFlexCellFormatter().setColSpan(self.command_offset, 0, 2) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
135 self.setWidget(self.command_offset, 0, self.command) |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
136 |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
137 def setToolBar(self, syntax): |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
138 """This method is called asynchronously after the parameter |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
139 holding the rich text syntax is retrieved. It is called at |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
140 each call of self.edit(True) because the user may |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
141 have change his setting since the last time.""" |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
142 if syntax is None or syntax not in composition.RICH_SYNTAXES.keys(): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
143 syntax = composition.RICH_SYNTAXES.keys()[0] |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
144 if hasattr(self, "toolbar") and self.toolbar.syntax == syntax: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
145 self.toolbar.setVisible(True) |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
146 return |
738
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
147 self.toolbar = HorizontalPanel() |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
148 self.toolbar.syntax = syntax |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
149 self.toolbar.addStyleName(self.STYLE['toolbar']) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
150 for key in composition.RICH_SYNTAXES[syntax].keys(): |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
151 self.addToolbarButton(syntax, key) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
152 self.wysiwyg_button = CheckBox(_('preview')) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
153 wysiywgCb = lambda sender: self.setWysiwyg(sender.getChecked()) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
154 self.wysiwyg_button.addClickListener(wysiywgCb) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
155 self.toolbar.add(self.wysiwyg_button) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
156 self.syntax_label = Label(_("Syntax: %s") % syntax) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
157 self.syntax_label.addStyleName("richTextSyntaxLabel") |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
158 self.toolbar.add(self.syntax_label) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
159 self.toolbar.setCellWidth(self.syntax_label, "100%") |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
160 self.getFlexCellFormatter().setColSpan(self.toolbar_offset, 0, 2) |
caad07bdb659
browser_side: simplify RichTextEditor initialization
souliane <souliane@mailoo.org>
parents:
737
diff
changeset
|
161 self.setWidget(self.toolbar_offset, 0, self.toolbar) |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
162 |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
163 def setWysiwyg(self, wysiwyg, init=False): |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
164 """Toggle the edition mode between rich content syntax and wysiwyg. |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
165 @param wysiwyg: boolean value |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
166 @param init: set to True to re-init without switching the widgets.""" |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
167 def setWysiwyg(): |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
168 self.wysiwyg = wysiwyg |
364
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
169 try: |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
170 self.wysiwyg_button.setChecked(wysiwyg) |
593
b97c85b8a47e
browser side: fixed bad FlexTable __init__ call, need to be checked
Goffi <goffi@goffi.org>
parents:
574
diff
changeset
|
171 except (AttributeError, TypeError): |
364
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
172 pass |
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
173 try: |
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
174 if wysiwyg: |
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
175 self.syntax_label.addStyleName('transparent') |
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
176 else: |
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
177 self.syntax_label.removeStyleName('transparent') |
593
b97c85b8a47e
browser side: fixed bad FlexTable __init__ call, need to be checked
Goffi <goffi@goffi.org>
parents:
574
diff
changeset
|
178 except (AttributeError, TypeError): |
364
4cf735b40304
browser_side: hide the syntax label when wysiwyg edtion is active
souliane <souliane@mailoo.org>
parents:
362
diff
changeset
|
179 pass |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
180 if not wysiwyg: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
181 self.display.removeStyleName('richTextWysiwyg') |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
182 |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
183 if init: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
184 setWysiwyg() |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
185 return |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
186 |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
187 self.getFlexCellFormatter().setColSpan(self.content_offset, 0, 2) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
188 if wysiwyg: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
189 def syntaxConvertCb(text): |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
190 self.display.setContent({'text': text}) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
191 self.textarea.removeFromParent() # XXX: force as it is not always done... |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
192 self.setWidget(self.content_offset, 0, self.display) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
193 self.display.addStyleName('richTextWysiwyg') |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
194 self.display.edit(True) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
195 content = self.getContent() |
433
bbdbee25123a
import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents:
432
diff
changeset
|
196 if content['text'] and content['syntax'] != C.SYNTAX_XHTML: |
bbdbee25123a
import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents:
432
diff
changeset
|
197 self.host.bridge.call('syntaxConvert', syntaxConvertCb, content['text'], content['syntax'], C.SYNTAX_XHTML) |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
198 else: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
199 syntaxConvertCb(content['text']) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
200 else: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
201 syntaxConvertCb = lambda text: self.textarea.setText(text) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
202 text = self.display.getContent()['text'] |
433
bbdbee25123a
import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents:
432
diff
changeset
|
203 if text and self.toolbar.syntax != C.SYNTAX_XHTML: |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
204 self.host.bridge.call('syntaxConvert', syntaxConvertCb, text) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
205 else: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
206 syntaxConvertCb(text) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
207 self.setWidget(self.content_offset, 0, self.textarea) |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
208 self.textarea.setWidth('100%') # CSS width doesn't do it, don't know why |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
209 |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
210 setWysiwyg() # do it in the end because it affects self.getContent |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
211 |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
212 def addToolbarButton(self, syntax, key): |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
213 """Add a button with the defined parameters.""" |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
214 button = Button('<img src="%s" class="richTextIcon" />' % |
254
28d3315a8003
browser_side: isolate the basic stuff of RecipientManager in a new class ListManager:
souliane <souliane@mailoo.org>
parents:
234
diff
changeset
|
215 composition.RICH_BUTTONS[key]["icon"]) |
28d3315a8003
browser_side: isolate the basic stuff of RecipientManager in a new class ListManager:
souliane <souliane@mailoo.org>
parents:
234
diff
changeset
|
216 button.setTitle(composition.RICH_BUTTONS[key]["tip"]) |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
217 button.addStyleName('richTextToolButton') |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
218 self.toolbar.add(button) |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
219 |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
220 def buttonCb(): |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
221 """Generic callback for a toolbar button.""" |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
222 text = self.textarea.getText() |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
223 cursor_pos = self.textarea.getCursorPos() |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
224 selection_length = self.textarea.getSelectionLength() |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
225 data = composition.RICH_SYNTAXES[syntax][key] |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
226 if selection_length == 0: |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
227 middle_text = data[1] |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
228 else: |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
229 middle_text = text[cursor_pos:cursor_pos + selection_length] |
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
230 self.textarea.setText(text[:cursor_pos] |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
231 + data[0] |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
232 + middle_text |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
233 + data[2] |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
234 + text[cursor_pos + selection_length:]) |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
235 self.textarea.setCursorPos(cursor_pos + len(data[0]) + len(middle_text)) |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
236 self.textarea.setFocus(True) |
362
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
237 self.textarea.onKeyDown() |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
238 |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
239 def wysiwygCb(): |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
240 """Callback for a toolbar button while wysiwyg mode is enabled.""" |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
241 data = composition.COMMANDS[key] |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
242 |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
243 def execCommand(command, arg): |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
244 self.display.setFocus(True) |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
245 doc().execCommand(command, False, arg.strip() if arg else '') |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
246 # use Window.prompt instead of dialog.PromptDialog to not loose the focus |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
247 prompt = lambda command, text: execCommand(command, Window.prompt(text)) |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
248 if isinstance(data, tuple) or isinstance(data, list): |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
249 if data[1]: |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
250 prompt(data[0], data[1]) |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
251 else: |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
252 execCommand(data[0], data[2]) |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
253 else: |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
254 execCommand(data, False, '') |
362
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
255 self.textarea.onKeyDown() |
355
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
256 |
9bb78c09e9fc
browser_side: wysiwyg edition handles the toolbar buttons
souliane <souliane@mailoo.org>
parents:
353
diff
changeset
|
257 button.addClickListener(lambda: wysiwygCb() if self.wysiwyg else buttonCb()) |
232
0ed09cc0566f
browser_side: added UIs for rich text editor and addressing to multiple recipients
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
258 |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
259 def getContent(self): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
260 assert(hasattr(self, 'textarea')) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
261 assert(hasattr(self, 'toolbar')) |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
262 if self.wysiwyg: |
433
bbdbee25123a
import constants.Const as C (according to the coding rules)
souliane <souliane@mailoo.org>
parents:
432
diff
changeset
|
263 content = {'text': self.display.getContent()['text'], 'syntax': C.SYNTAX_XHTML} |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
264 else: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
265 content = {'text': self.strproc(self.textarea.getText()), 'syntax': self.toolbar.syntax} |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
266 if hasattr(self, 'title_panel'): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
267 content.update({'title': self.strproc(self.title_panel.getText())}) |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
268 if hasattr(self, 'tags_panel'): |
742
d123e27fc386
browser_side: use methods defined in quick_frontend to retrieve and set the tags from/to microblog data
souliane <souliane@mailoo.org>
parents:
741
diff
changeset
|
269 content.update(quick_blog.tags2mbdata(self.tags_panel.getTags())) |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
270 return content |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
271 |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
272 def edit(self, edit=False, abort=False, sync=False): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
273 """ |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
274 Remark: the editor must be visible before you call this method. |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
275 @param edit: set to True to edit the content or False to only display it |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
276 @param abort: set to True to cancel the edition and loose the changes. |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
277 If edit and abort are both True, self.abortEdition can be used to ask for a |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
278 confirmation. When edit is False and abort is True, abortion is actually done. |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
279 @param sync: set to True to cancel the edition after the content has been saved somewhere else |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
280 """ |
357
2b5503392fbd
browser_side: small fixes for RichTextEditor
souliane <souliane@mailoo.org>
parents:
356
diff
changeset
|
281 if not (edit and abort): |
2b5503392fbd
browser_side: small fixes for RichTextEditor
souliane <souliane@mailoo.org>
parents:
356
diff
changeset
|
282 self.refresh(edit) # not when we are asking for a confirmation |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
283 editor_widget.BaseTextEditor.edit(self, edit, abort, sync) # after the UI has been refreshed |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
284 if (edit and abort): |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
285 return # self.abortEdition is called by editor_widget.BaseTextEditor.edit |
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
286 self.setWysiwyg(False, init=True) # after editor_widget.BaseTextEditor (it affects self.getContent) |
353
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
287 if sync: |
ddb909ab5cbc
browser_side: wysiwyg edtion, first steps (do not use the buttons yet)
souliane <souliane@mailoo.org>
parents:
352
diff
changeset
|
288 return |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
289 # the following must NOT be done at each UI refresh! |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
290 content = self._original_content |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
291 if edit: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
292 def getParamCb(syntax): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
293 # set the editable text in the current user-selected syntax |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
294 def syntaxConvertCb(text=None): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
295 if text is not None: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
296 # Important: this also update self._original_content |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
297 content.update({'text': text}) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
298 content.update({'syntax': syntax}) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
299 self.textarea.setText(content['text']) |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
300 |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
301 if hasattr(self, 'title_panel') and 'title' in content: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
302 self.title_panel.setText(content['title']) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
303 self.title_panel.setStackVisible(0, content['title'] != '') |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
304 |
742
d123e27fc386
browser_side: use methods defined in quick_frontend to retrieve and set the tags from/to microblog data
souliane <souliane@mailoo.org>
parents:
741
diff
changeset
|
305 if hasattr(self, 'tags_panel'): |
d123e27fc386
browser_side: use methods defined in quick_frontend to retrieve and set the tags from/to microblog data
souliane <souliane@mailoo.org>
parents:
741
diff
changeset
|
306 tags = quick_blog.mbdata2tags(content) |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
307 self.tags_panel.setTags(tags) |
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
308 self.tags_panel.setStackVisible(0, len(tags) > 0) |
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
309 |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
310 self.setToolBar(syntax) |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
311 if content['text'] and content['syntax'] != syntax: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
312 self.host.bridge.call('syntaxConvert', syntaxConvertCb, content['text'], content['syntax']) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
313 else: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
314 syntaxConvertCb() |
352
2610443b05a2
browser_side: misc improvements for RichTextEditor to prepare Wysiwyg edition
souliane <souliane@mailoo.org>
parents:
351
diff
changeset
|
315 self.host.bridge.call('asyncGetParamA', getParamCb, composition.PARAM_NAME_SYNTAX, composition.PARAM_KEY_COMPOSITION) |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
316 else: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
317 if not self.initialized: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
318 # set the display text in XHTML only during init because a new MicroblogEntry instance is created after each modification |
400
487dd238ab88
browser_side: bug fixes for microblog raw/rich edition toggle
souliane <souliane@mailoo.org>
parents:
395
diff
changeset
|
319 self.setDisplayContent() |
357
2b5503392fbd
browser_side: small fixes for RichTextEditor
souliane <souliane@mailoo.org>
parents:
356
diff
changeset
|
320 self.display.edit(False) |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
321 |
400
487dd238ab88
browser_side: bug fixes for microblog raw/rich edition toggle
souliane <souliane@mailoo.org>
parents:
395
diff
changeset
|
322 def setDisplayContent(self): |
648
6d3142b782c3
browser_side: classes reorganisation:
Goffi <goffi@goffi.org>
parents:
624
diff
changeset
|
323 """Set the content of the editor_widget.HTMLTextEditor which is used for display/wysiwyg""" |
400
487dd238ab88
browser_side: bug fixes for microblog raw/rich edition toggle
souliane <souliane@mailoo.org>
parents:
395
diff
changeset
|
324 content = self._original_content |
487dd238ab88
browser_side: bug fixes for microblog raw/rich edition toggle
souliane <souliane@mailoo.org>
parents:
395
diff
changeset
|
325 text = content['text'] |
487dd238ab88
browser_side: bug fixes for microblog raw/rich edition toggle
souliane <souliane@mailoo.org>
parents:
395
diff
changeset
|
326 if 'title' in content and content['title']: |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
327 text = '<h1>%s</h1>%s' % (html_tools.html_sanitize(content['title']), text) |
742
d123e27fc386
browser_side: use methods defined in quick_frontend to retrieve and set the tags from/to microblog data
souliane <souliane@mailoo.org>
parents:
741
diff
changeset
|
328 tags = quick_blog.mbdata2tags(content) |
d123e27fc386
browser_side: use methods defined in quick_frontend to retrieve and set the tags from/to microblog data
souliane <souliane@mailoo.org>
parents:
741
diff
changeset
|
329 if tags: # FIXME: display it more beautiful |
741
c3cb68227cca
browser_side: read and write tags from microblog data:
souliane <souliane@mailoo.org>
parents:
740
diff
changeset
|
330 text = '%s<h3>%s %s</h3>' % (text, _("Tags:"), html_tools.html_sanitize(", ".join(tags))) |
400
487dd238ab88
browser_side: bug fixes for microblog raw/rich edition toggle
souliane <souliane@mailoo.org>
parents:
395
diff
changeset
|
331 self.display.setContent({'text': text}) |
487dd238ab88
browser_side: bug fixes for microblog raw/rich edition toggle
souliane <souliane@mailoo.org>
parents:
395
diff
changeset
|
332 |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
333 def setFocus(self, focus): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
334 self.textarea.setFocus(focus) |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
335 |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
336 def abortEdition(self, content): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
337 """Ask for confirmation before closing the dialog.""" |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
338 def confirm_cb(answer): |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
339 if answer: |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
340 self.edit(False, True) |
467 | 341 _dialog = dialog.ConfirmDialog(confirm_cb, text="Do you really want to %s?" % ("cancel your changes" if self.update_msg else "cancel this message")) |
357
2b5503392fbd
browser_side: small fixes for RichTextEditor
souliane <souliane@mailoo.org>
parents:
356
diff
changeset
|
342 _dialog.cancel_button.setText(_("No")) |
351
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
343 _dialog.show() |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
344 |
c943fd54c90e
browser_side: heavy refactorisation for microblogs:
souliane <souliane@mailoo.org>
parents:
346
diff
changeset
|
345 |
362
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
346 class EditTextArea(TextArea, KeyboardHandler): |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
347 def __init__(self, _parent): |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
348 TextArea.__init__(self) |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
349 self._parent = _parent |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
350 KeyboardHandler.__init__(self) |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
351 self.addKeyboardListener(self) |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
352 |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
353 def onKeyDown(self, sender=None, keycode=None, modifiers=None): |
019e1e706e74
browser_side: display the popup notifying the message's recipient when you edit the blog entry's bubble.
souliane <souliane@mailoo.org>
parents:
359
diff
changeset
|
354 for listener in self._parent.edit_listeners: |
716
3b91225b457a
server + browser side: blogging refactoring (draft), huge commit sorry:
Goffi <goffi@goffi.org>
parents:
685
diff
changeset
|
355 listener(self, keycode, modifiers) # FIXME: edit_listeners must either be removed, or send an action instead of keycode/modifiers |