lino 24.10.3__py3-none-any.whl → 24.11.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lino/__init__.py +1 -1
- lino/api/doctest.py +11 -10
- lino/api/rt.py +2 -3
- lino/config/admin_main_base.html +2 -2
- lino/core/actions.py +2 -4
- lino/core/actors.py +70 -35
- lino/core/choicelists.py +2 -2
- lino/core/dashboard.py +2 -1
- lino/core/dbtables.py +15 -15
- lino/core/elems.py +8 -4
- lino/core/fields.py +12 -3
- lino/core/inject.py +9 -2
- lino/core/kernel.py +11 -11
- lino/core/layouts.py +1 -1
- lino/core/model.py +25 -36
- lino/core/plugin.py +1 -0
- lino/core/renderer.py +21 -21
- lino/core/requests.py +94 -83
- lino/core/site.py +9 -90
- lino/core/store.py +16 -19
- lino/core/tables.py +0 -17
- lino/core/utils.py +32 -2
- lino/core/views.py +2 -1
- lino/help_texts.py +10 -5
- lino/locale/bn/LC_MESSAGES/django.po +1210 -907
- lino/locale/de/LC_MESSAGES/django.po +1760 -1375
- lino/locale/django.pot +1136 -906
- lino/locale/es/LC_MESSAGES/django.po +1709 -1347
- lino/locale/et/LC_MESSAGES/django.po +1206 -906
- lino/locale/fr/LC_MESSAGES/django.mo +0 -0
- lino/locale/fr/LC_MESSAGES/django.po +1193 -923
- lino/locale/nl/LC_MESSAGES/django.po +1247 -942
- lino/locale/pt_BR/LC_MESSAGES/django.po +1190 -903
- lino/locale/zh_Hant/LC_MESSAGES/django.po +1190 -903
- lino/management/commands/show.py +2 -4
- lino/mixins/periods.py +15 -7
- lino/mixins/polymorphic.py +3 -3
- lino/mixins/ref.py +6 -3
- lino/modlib/checkdata/__init__.py +3 -3
- lino/modlib/comments/choicelists.py +1 -1
- lino/modlib/comments/fixtures/demo2.py +4 -1
- lino/modlib/comments/mixins.py +9 -10
- lino/modlib/comments/models.py +4 -4
- lino/modlib/comments/ui.py +5 -0
- lino/modlib/extjs/ext_renderer.py +1 -1
- lino/modlib/linod/consumers.py +2 -3
- lino/modlib/linod/mixins.py +3 -2
- lino/modlib/memo/mixins.py +11 -209
- lino/modlib/notify/mixins.py +33 -32
- lino/modlib/periods/__init__.py +12 -1
- lino/modlib/periods/fixtures/std.py +2 -1
- lino/modlib/periods/mixins.py +0 -1
- lino/modlib/periods/models.py +79 -75
- lino/modlib/printing/actions.py +2 -0
- lino/modlib/printing/choicelists.py +3 -3
- lino/modlib/publisher/ui.py +2 -2
- lino/modlib/search/models.py +17 -11
- lino/modlib/system/__init__.py +0 -2
- lino/modlib/system/choicelists.py +55 -1
- lino/modlib/system/fixtures/__init__.py +0 -0
- lino/modlib/system/fixtures/std.py +5 -0
- lino/modlib/system/models.py +4 -2
- lino/modlib/uploads/__init__.py +10 -1
- lino/modlib/uploads/choicelists.py +3 -3
- lino/modlib/uploads/mixins.py +30 -32
- lino/modlib/uploads/models.py +89 -56
- lino/modlib/uploads/ui.py +12 -6
- lino/modlib/uploads/utils.py +107 -0
- lino/modlib/users/models.py +2 -2
- lino/modlib/weasyprint/__init__.py +2 -0
- lino/utils/__init__.py +14 -9
- lino/utils/djangotest.py +2 -1
- lino/utils/html.py +32 -1
- lino/utils/media.py +2 -3
- lino/utils/soup.py +311 -0
- {lino-24.10.3.dist-info → lino-24.11.1.dist-info}/METADATA +1 -3
- {lino-24.10.3.dist-info → lino-24.11.1.dist-info}/RECORD +80 -76
- {lino-24.10.3.dist-info → lino-24.11.1.dist-info}/WHEEL +1 -1
- {lino-24.10.3.dist-info → lino-24.11.1.dist-info}/licenses/AUTHORS.rst +0 -0
- {lino-24.10.3.dist-info → lino-24.11.1.dist-info}/licenses/COPYING +0 -0
lino/management/commands/show.py
CHANGED
@@ -3,11 +3,9 @@
|
|
3
3
|
# License: GNU Affero General Public License v3 (see file COPYING for details)
|
4
4
|
|
5
5
|
import argparse
|
6
|
-
|
7
|
-
from django.conf import settings
|
6
|
+
from lino.api import rt
|
8
7
|
from django.core.management.base import BaseCommand, CommandError
|
9
8
|
|
10
|
-
|
11
9
|
class Command(BaseCommand):
|
12
10
|
help = "Show the content of a specified table to standard output."
|
13
11
|
|
@@ -43,6 +41,6 @@ class Command(BaseCommand):
|
|
43
41
|
spec = args[0]
|
44
42
|
|
45
43
|
username = options["username"]
|
46
|
-
ses =
|
44
|
+
ses = rt.login(username)
|
47
45
|
|
48
46
|
ses.show(spec, language=options["language"])
|
lino/mixins/periods.py
CHANGED
@@ -204,6 +204,7 @@ class Ended(CombinedDateTime):
|
|
204
204
|
|
205
205
|
|
206
206
|
class DateRangeObservable(Model):
|
207
|
+
|
207
208
|
class Meta(object):
|
208
209
|
abstract = True
|
209
210
|
|
@@ -214,11 +215,11 @@ class DateRangeObservable(Model):
|
|
214
215
|
def setup_parameters(cls, fields):
|
215
216
|
fields.update(
|
216
217
|
start_date=models.DateField(
|
217
|
-
_("
|
218
|
+
_("Date range from"),
|
218
219
|
blank=True,
|
219
220
|
null=True,
|
220
221
|
default=cls.get_default_start_date,
|
221
|
-
help_text=_("Start date of observed
|
222
|
+
help_text=_("Start date of observed date range."),
|
222
223
|
)
|
223
224
|
)
|
224
225
|
fields.update(
|
@@ -227,7 +228,7 @@ class DateRangeObservable(Model):
|
|
227
228
|
blank=True,
|
228
229
|
null=True,
|
229
230
|
default=cls.get_default_end_date,
|
230
|
-
help_text=_("End date of observed
|
231
|
+
help_text=_("End date of observed date range."),
|
231
232
|
)
|
232
233
|
)
|
233
234
|
super().setup_parameters(fields)
|
@@ -235,8 +236,9 @@ class DateRangeObservable(Model):
|
|
235
236
|
|
236
237
|
class DateRange(DateRangeObservable):
|
237
238
|
"""
|
238
|
-
|
239
|
-
|
239
|
+
|
240
|
+
A model mixin that adds two fields `start_date` and `end_date`.
|
241
|
+
:class:`DateRangeObservable`
|
240
242
|
|
241
243
|
Designed for usage with
|
242
244
|
:class:`lino.modlib.system.PeriodEvents`.
|
@@ -267,6 +269,12 @@ class DateRange(DateRangeObservable):
|
|
267
269
|
def get_period_text(self):
|
268
270
|
return rangetext(self, fdl, self.empty_period_text)
|
269
271
|
|
272
|
+
def covers_date(self, d):
|
273
|
+
if self.start_date and self.start_date > d:
|
274
|
+
return False
|
275
|
+
if self.end_date and self.end_date < d:
|
276
|
+
return False
|
277
|
+
return True
|
270
278
|
|
271
279
|
DateRange.set_widget_options("start_date", width=10)
|
272
280
|
DateRange.set_widget_options("end_date", width=10)
|
@@ -274,9 +282,9 @@ DateRange.set_widget_options("end_date", width=10)
|
|
274
282
|
|
275
283
|
class ObservedDateRange(ParameterPanel):
|
276
284
|
""":class:`lino.core.param_panel.ParameterPanel` with two fields
|
277
|
-
`start_date` and `end_date
|
285
|
+
`start_date` and `end_date`.
|
278
286
|
|
279
|
-
|
287
|
+
You must define yourself a :meth:`get_request_queryset` method in order to
|
280
288
|
actually use these two parameter fields.
|
281
289
|
|
282
290
|
"""
|
lino/mixins/polymorphic.py
CHANGED
@@ -247,16 +247,16 @@ class Polymorphic(model.Model):
|
|
247
247
|
buttons = self.get_mti_buttons(ar)
|
248
248
|
return E.span(*buttons)
|
249
249
|
|
250
|
-
def as_summary_item(self, ar,
|
250
|
+
def as_summary_item(self, ar, text=None, **kwargs):
|
251
251
|
# a = super(Polymorphic, self).get_detail_action(ar)
|
252
252
|
a = self.get_detail_action(ar)
|
253
253
|
if a is not None:
|
254
|
-
return super().as_summary_item(ar,
|
254
|
+
return super().as_summary_item(ar, text, **kwargs)
|
255
255
|
for m in self._mtinav_models:
|
256
256
|
if m is not self.__class__:
|
257
257
|
obj = mti.get_child(self, m)
|
258
258
|
if obj is not None:
|
259
259
|
if obj.get_detail_action(ar) is not None:
|
260
|
-
return obj.as_summary_item(ar,
|
260
|
+
return obj.as_summary_item(ar, text, **kwargs)
|
261
261
|
return str(self)
|
262
262
|
# return "?!? {} has no detail_action for {}".format(self, ar)
|
lino/mixins/ref.py
CHANGED
@@ -47,7 +47,7 @@ class Referrable(model.Model):
|
|
47
47
|
@classmethod
|
48
48
|
def on_analyze(cls, site):
|
49
49
|
cls.set_widget_options("ref", width=cls.ref_max_length)
|
50
|
-
super(
|
50
|
+
super().on_analyze(site)
|
51
51
|
|
52
52
|
def on_duplicate(self, ar, master):
|
53
53
|
"""
|
@@ -56,7 +56,10 @@ class Referrable(model.Model):
|
|
56
56
|
"""
|
57
57
|
if self.ref:
|
58
58
|
self.ref += " (DUP)"
|
59
|
-
super(
|
59
|
+
super().on_duplicate(ar, master)
|
60
|
+
|
61
|
+
def __str__(self):
|
62
|
+
return self.ref or super().__str__()
|
60
63
|
|
61
64
|
@staticmethod
|
62
65
|
def ref_prefix(obj, ar=None):
|
@@ -96,7 +99,7 @@ class Referrable(model.Model):
|
|
96
99
|
# if search_text.isdigit():
|
97
100
|
if search_text.startswith("*"):
|
98
101
|
return models.Q(**{prefix + "ref__icontains": search_text[1:]})
|
99
|
-
return super(
|
102
|
+
return super().quick_search_filter(search_text, prefix)
|
100
103
|
|
101
104
|
|
102
105
|
class StructuredReferrable(Referrable):
|
@@ -20,7 +20,8 @@ class Plugin(ad.Plugin):
|
|
20
20
|
"The config descriptor for this plugin."
|
21
21
|
|
22
22
|
verbose_name = _("Checkdata")
|
23
|
-
needs_plugins = ["lino.modlib.users", "lino.modlib.gfks",
|
23
|
+
needs_plugins = ["lino.modlib.users", "lino.modlib.gfks",
|
24
|
+
"lino.modlib.office", "lino.modlib.linod"]
|
24
25
|
|
25
26
|
# plugin settings
|
26
27
|
responsible_user = None # the username (a string)
|
@@ -50,8 +51,7 @@ class Plugin(ad.Plugin):
|
|
50
51
|
User = self.site.models.users.User
|
51
52
|
try:
|
52
53
|
self._responsible_user = User.objects.get(
|
53
|
-
username=self.responsible_user
|
54
|
-
)
|
54
|
+
username=self.responsible_user)
|
55
55
|
except User.DoesNotExist:
|
56
56
|
msg = "Invalid username '{0}' in `responsible_user` "
|
57
57
|
msg = msg.format(self.responsible_user)
|
@@ -33,7 +33,7 @@ elif emotion_range == "social":
|
|
33
33
|
|
34
34
|
class ObservedTime(ObservedEvent):
|
35
35
|
def __init__(self, value, name, text):
|
36
|
-
super(
|
36
|
+
super().__init__(value, text=text, name=name)
|
37
37
|
|
38
38
|
def add_filter(self, qs, pv):
|
39
39
|
if pv.start_date:
|
@@ -14,6 +14,7 @@ from django.utils.timezone import make_aware
|
|
14
14
|
from lino.modlib.comments.mixins import Commentable
|
15
15
|
|
16
16
|
styled = """<h1 style="color: #5e9ca0;">Styled comment <span style="color: #2b2301;">pasted from word!</span> </h1>"""
|
17
|
+
|
17
18
|
table = """<table class="editorDemoTable"><thead>
|
18
19
|
<tr><td>Who</td><td>What</td><td>Done?</td></tr></thead><tbody><tr><td>Him</td><td>Bar</td><td> </td></tr><tr><td>Her</td><td>Foo the Bar</td><td><strong style="font-size: 17px; color: #2b2301;">x</strong></td></tr><tr><td>Them</td><td><span id="demoId">Floop the pig<br /></span></td><td>x</td></tr></tbody></table>"""
|
19
20
|
lorem = """<p>Lorem ipsum <strong> dolor sit amet</strong>, consectetur adipiscing elit. Nunc cursus felis nisi, eu pellentesque lorem lobortis non. Aenean non sodales neque, vitae venenatis lectus. In eros dui, gravida et dolor at, pellentesque hendrerit magna. Quisque vel lectus dictum, rhoncus massa feugiat, condimentum sem. Donec elit nisl, placerat vitae imperdiet eget, hendrerit nec quam. Ut elementum ligula vitae odio efficitur rhoncus. Duis in blandit neque. Sed dictum mollis volutpat. Morbi at est et nisi euismod viverra. Nulla quis lacus vitae ante sollicitudin tincidunt. Donec nec enim in leo vulputate ultrices. Suspendisse potenti. Ut elit nibh, porta ut enim ac, convallis molestie risus. Praesent consectetur lacus lacus, in faucibus justo fringilla vel.</p>
|
@@ -22,7 +23,8 @@ short_lorem = """<p>Lorem ipsum <strong> dolor sit amet</strong>, consectetur ad
|
|
22
23
|
<p>Phasellus gravida ullamcorper eros, sit amet blandit sapien laoreet quis.</p>
|
23
24
|
<p>Donec accumsan mauris at risus lobortis, nec pretium tortor aliquam. Nulla vel enim vel eros venenatis congue.</p>"""
|
24
25
|
|
25
|
-
breaking = '<p>breaking <!--[if gte mso 9]><xml>\n <o:OfficeDocumentSettings>\n <o:AllowPNG/>\n </o:OfficeDocumentSettings>\n</xml><![endif]--></p>\n<p><!--[if gte mso 9]><xml>\n <w:WordDocument>\n <w:View>Normal</w:View>\n <w:Zoom>0</w:Zoom>\n <w:TrackMoves/>\n <w:TrackFormatting/>\n <w:HyphenationZone>21</w:HyphenationZone>\n <w:PunctuationKerning/>\n <w:ValidateAgainstSchemas/>\n <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>\n <w:IgnoreMixedContent>false</w:IgnoreMixedContent>\n <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>\n <w:DoNotPromoteQF/>\n <w:LidThemeOther>FR-BE</w:LidThemeOther>\n <w:LidThemeAsian>X-NONE</w:LidThemeAsian>\n <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>\n <w:Compatibility>\n <w:BreakWrappedTables/>\n <w:SnapToGridInCell/>\n <w:WrapTextWithPunct/>\n <w:UseAsianBreakRules/>\n <w:DontGrowAutofit/>\n <w:SplitPgBreakAndParaMark/>\n <w:EnableOpenTypeKerning/>\n <w:DontFlipMirrorIndents/>\n <w:OverrideTableStyleHps/>\n </w:Compatibility>\n <m:mathPr>\n <m:mathFont m:val="Cambria Math"/>\n <m:brkBin m:val="before"/>\n <m:brkBinSub m:val="--"/>\n <m:smallFrac m:val="off"/>\n <m:dispDef/>\n <m:lMargin m:val="0"/>\n <m:rMargin m:val="0"/>\n <m:defJc m:val="centerGroup"/>\n <m:wrapIndent m:val="1440"/>\n <m:intLim m:val="subSup"/>\n <m:naryLim m:val="undOvr"/>\n </m:mathPr></w:WordDocument>\n</xml><![endif]--><!--[if gte mso 9]><xml>\n <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"\n DefSemiHidden="true" DefQFormat="false" DefPriority="99"\n LatentStyleCount="267">\n <w:LsdException Locked="false" Priority="0" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Normal"/>\n <w:LsdException Locked="false" Priority="9" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 1"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 2"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 3"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 4"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 5"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 6"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 7"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 8"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 9"/>\n <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>\n <w:LsdException Locked="false" Priority="10" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Title"/>\n <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>\n <w:LsdException Locked="false" Priority="11" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>\n <w:LsdException Locked="false" Priority="22" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Strong"/>\n <w:LsdException Locked="false" Priority="20" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>\n <w:LsdException Locked="false" Priority="59" SemiHidden="false"\n UnhideWhenUsed="false" Name="Table Grid"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>\n <w:LsdException Locked="false" Priority="1" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 1"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>\n <w:LsdException Locked="false" Priority="34" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>\n <w:LsdException Locked="false" Priority="29" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Quote"/>\n <w:LsdException Locked="false" Priority="30" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 1"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 1"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 2"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 2"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 2"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 3"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 3"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 3"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 4"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 4"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 4"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 5"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 5"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 5"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 6"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 6"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 6"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="19" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>\n <w:LsdException Locked="false" Priority="21" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>\n <w:LsdException Locked="false" Priority="31" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>\n <w:LsdException Locked="false" Priority="32" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>\n <w:LsdException Locked="false" Priority="33" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>\n <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>\n <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>\n </w:LatentStyles>\n</xml><![endif]--><!--[if gte mso 10]>\n<style>\n /* Style Definitions */\n table.MsoNormalTable\n\t{mso-style-name:"Tableau Normal";\n\tmso-tstyle-rowband-size:0;\n\tmso-tstyle-colband-size:0;\n\tmso-style-noshow:yes;\n\tmso-style-priority:99;\n\tmso-style-parent:"";\n\tmso-padding-alt:0cm 5.4pt 0cm 5.4pt;\n\tmso-para-margin:0cm;\n\tmso-para-margin-bottom:.0001pt;\n\tmso-pagination:widow-orphan;\n\tfont-size:10.0pt;\n\tfont-family:"Times New Roman","serif";}\n</style>\n<![endif]--></p>\n<p class="MsoNormal" style="mso-outline-level: 1;"><strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR">De :</span></strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR"> <a href="mailto:lino@foo.net">lino@foo.net</a> [<a href="mailto:foo@bar.com">mailto:foo@bar.com</a>] <br /> <strong>Envoyé :</strong> mardi 18 octobre 2016 08:52<br /> <strong>À :</strong> <a href="mailto:Far@baz.net">eexample@foo.com</a><br /> <strong>Objet :</strong> [welcht] YOU modified FOO BAR</span></p>\n<p class="MsoNormal"> </p>\n<p>Dear Aurélie ,</p>\n<p>this is to notify / BAR</p>\n<p>BAR modified </p>\n<p>TODO: include a summary of the modifications.</p>\n<p>Any subsequent notifications about foo/ until you view this notification in the Lino web interface. Please visit</p>\n<p class="MsoNormal"><a href="None">None</a></p>\n<p>and follow your welcome messages.</p>'
|
26
|
+
breaking = """<p>breaking <!--[if gte mso 9]><xml>\n <o:OfficeDocumentSettings>\n <o:AllowPNG/>\n </o:OfficeDocumentSettings>\n</xml><![endif]--></p>\n<p><!--[if gte mso 9]><xml>\n <w:WordDocument>\n <w:View>Normal</w:View>\n <w:Zoom>0</w:Zoom>\n <w:TrackMoves/>\n <w:TrackFormatting/>\n <w:HyphenationZone>21</w:HyphenationZone>\n <w:PunctuationKerning/>\n <w:ValidateAgainstSchemas/>\n <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>\n <w:IgnoreMixedContent>false</w:IgnoreMixedContent>\n <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>\n <w:DoNotPromoteQF/>\n <w:LidThemeOther>FR-BE</w:LidThemeOther>\n <w:LidThemeAsian>X-NONE</w:LidThemeAsian>\n <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>\n <w:Compatibility>\n <w:BreakWrappedTables/>\n <w:SnapToGridInCell/>\n <w:WrapTextWithPunct/>\n <w:UseAsianBreakRules/>\n <w:DontGrowAutofit/>\n <w:SplitPgBreakAndParaMark/>\n <w:EnableOpenTypeKerning/>\n <w:DontFlipMirrorIndents/>\n <w:OverrideTableStyleHps/>\n </w:Compatibility>\n <m:mathPr>\n <m:mathFont m:val="Cambria Math"/>\n <m:brkBin m:val="before"/>\n <m:brkBinSub m:val="--"/>\n <m:smallFrac m:val="off"/>\n <m:dispDef/>\n <m:lMargin m:val="0"/>\n <m:rMargin m:val="0"/>\n <m:defJc m:val="centerGroup"/>\n <m:wrapIndent m:val="1440"/>\n <m:intLim m:val="subSup"/>\n <m:naryLim m:val="undOvr"/>\n </m:mathPr></w:WordDocument>\n</xml><![endif]--><!--[if gte mso 9]><xml>\n <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"\n DefSemiHidden="true" DefQFormat="false" DefPriority="99"\n LatentStyleCount="267">\n <w:LsdException Locked="false" Priority="0" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Normal"/>\n <w:LsdException Locked="false" Priority="9" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>\n <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 1"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 2"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 3"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 4"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 5"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 6"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 7"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 8"/>\n <w:LsdException Locked="false" Priority="39" Name="toc 9"/>\n <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>\n <w:LsdException Locked="false" Priority="10" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Title"/>\n <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>\n <w:LsdException Locked="false" Priority="11" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>\n <w:LsdException Locked="false" Priority="22" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Strong"/>\n <w:LsdException Locked="false" Priority="20" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>\n <w:LsdException Locked="false" Priority="59" SemiHidden="false"\n UnhideWhenUsed="false" Name="Table Grid"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>\n <w:LsdException Locked="false" Priority="1" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 1"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>\n <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>\n <w:LsdException Locked="false" Priority="34" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>\n <w:LsdException Locked="false" Priority="29" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Quote"/>\n <w:LsdException Locked="false" Priority="30" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 1"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 1"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 2"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 2"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 2"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 3"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 3"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 3"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 4"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 4"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 4"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 5"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 5"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 5"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>\n <w:LsdException Locked="false" Priority="60" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="61" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light List Accent 6"/>\n <w:LsdException Locked="false" Priority="62" SemiHidden="false"\n UnhideWhenUsed="false" Name="Light Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="63" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="64" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="65" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="66" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="67" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>\n <w:LsdException Locked="false" Priority="68" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>\n <w:LsdException Locked="false" Priority="69" SemiHidden="false"\n UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>\n <w:LsdException Locked="false" Priority="70" SemiHidden="false"\n UnhideWhenUsed="false" Name="Dark List Accent 6"/>\n <w:LsdException Locked="false" Priority="71" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>\n <w:LsdException Locked="false" Priority="72" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful List Accent 6"/>\n <w:LsdException Locked="false" Priority="73" SemiHidden="false"\n UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>\n <w:LsdException Locked="false" Priority="19" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>\n <w:LsdException Locked="false" Priority="21" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>\n <w:LsdException Locked="false" Priority="31" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>\n <w:LsdException Locked="false" Priority="32" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>\n <w:LsdException Locked="false" Priority="33" SemiHidden="false"\n UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>\n <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>\n <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>\n </w:LatentStyles>\n</xml><![endif]--><!--[if gte mso 10]>\n<style>\n /* Style Definitions */\n table.MsoNormalTable\n\t{mso-style-name:"Tableau Normal";\n\tmso-tstyle-rowband-size:0;\n\tmso-tstyle-colband-size:0;\n\tmso-style-noshow:yes;\n\tmso-style-priority:99;\n\tmso-style-parent:"";\n\tmso-padding-alt:0cm 5.4pt 0cm 5.4pt;\n\tmso-para-margin:0cm;\n\tmso-para-margin-bottom:.0001pt;\n\tmso-pagination:widow-orphan;\n\tfont-size:10.0pt;\n\tfont-family:"Times New Roman","serif";}\n</style>\n<![endif]--></p>\n<p class="MsoNormal" style="mso-outline-level: 1;"><strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR">De :</span></strong><span style="font-size: 11.0pt; font-family: \'Calibri\',\'sans-serif\'; mso-ansi-language: FR;" lang="FR"> <a href="mailto:lino@foo.net">lino@foo.net</a> [<a href="mailto:foo@bar.com">mailto:foo@bar.com</a>] <br /> <strong>Envoyé :</strong> mardi 18 octobre 2016 08:52<br /> <strong>À :</strong> <a href="mailto:Far@baz.net">eexample@foo.com</a><br /> <strong>Objet :</strong> [welcht] YOU modified FOO BAR</span></p>\n<p class="MsoNormal"> </p>\n<p>Dear Aurélie ,</p>\n<p>this is to notify / BAR</p>\n<p>BAR modified </p>\n<p>TODO: include a summary of the modifications.</p>\n<p>Any subsequent notifications about foo/ until you view this notification in the Lino web interface. Please visit</p>\n<p class="MsoNormal"><a href="None">None</a></p>\n<p>and follow your welcome messages.</p>"""
|
27
|
+
|
26
28
|
cond_comment = (
|
27
29
|
"<p><!--[if gte foo 123]>A conditional comment<![endif]--></p>\n<p>Hello</p>"
|
28
30
|
)
|
@@ -67,6 +69,7 @@ def objects():
|
|
67
69
|
obj.after_ui_create(ses)
|
68
70
|
obj.before_ui_save(ses, None)
|
69
71
|
# obj.full_clean()
|
72
|
+
obj.created = now
|
70
73
|
obj.modified = now
|
71
74
|
yield obj
|
72
75
|
obj.after_ui_save(ses, None)
|
lino/modlib/comments/mixins.py
CHANGED
@@ -89,10 +89,9 @@ class AddCommentField(dd.VirtualField):
|
|
89
89
|
|
90
90
|
|
91
91
|
class Commentable(MemoReferrable):
|
92
|
-
class Meta(object):
|
93
|
-
abstract = True
|
94
92
|
|
95
|
-
|
93
|
+
class Meta:
|
94
|
+
abstract = True
|
96
95
|
|
97
96
|
# add_comment = AddCommentField("comments.CommentsByRFC")
|
98
97
|
|
@@ -102,8 +101,8 @@ class Commentable(MemoReferrable):
|
|
102
101
|
def get_rfc_description(self, ar):
|
103
102
|
return ""
|
104
103
|
|
105
|
-
def get_comment_group(self):
|
106
|
-
|
104
|
+
# def get_comment_group(self):
|
105
|
+
# return None
|
107
106
|
|
108
107
|
if dd.is_installed("comments"):
|
109
108
|
|
@@ -112,17 +111,17 @@ class Commentable(MemoReferrable):
|
|
112
111
|
if rt.settings.SITE.loading_from_dump:
|
113
112
|
return
|
114
113
|
|
115
|
-
if self.
|
116
|
-
txt = self.create_comment_template.format(
|
117
|
-
model=self.__class__._meta.verbose_name, obj=self
|
118
|
-
)
|
119
|
-
# txt = self.get_create_comment(ar)
|
114
|
+
if (txt := self.get_create_comment_text(ar)) is not None:
|
120
115
|
comment = rt.models.comments.Comment(body=txt, owner=self)
|
121
116
|
comment.on_create(ar)
|
122
117
|
comment.full_clean()
|
123
118
|
comment.save_new_instance(ar)
|
124
119
|
# print("20220916 save_new_instance() created", comment, txt)
|
125
120
|
|
121
|
+
def get_create_comment_text(self, ar):
|
122
|
+
return _("Created new {model} {obj}.").format(
|
123
|
+
model=self.__class__._meta.verbose_name, obj=self)
|
124
|
+
|
126
125
|
@classmethod
|
127
126
|
def add_comments_filter(cls, qs, ar):
|
128
127
|
return qs
|
lino/modlib/comments/models.py
CHANGED
@@ -213,10 +213,10 @@ class Comment(
|
|
213
213
|
# s += ar.row_as_paragraph(o.owner)
|
214
214
|
s += ar.obj2htmls(o.owner)
|
215
215
|
# s += ar.obj2htmls(o.owner)
|
216
|
-
if False: # tickets show themselves their group in __str__()
|
217
|
-
|
218
|
-
|
219
|
-
|
216
|
+
# if False: # tickets show themselves their group in __str__()
|
217
|
+
# group = o.owner.get_comment_group()
|
218
|
+
# if group and group.ref:
|
219
|
+
# s += "@" + group.ref
|
220
220
|
|
221
221
|
if False and o.num_reactions:
|
222
222
|
txt = ngettext("{} reaction", "{} reactions", o.num_reactions).format(
|
lino/modlib/comments/ui.py
CHANGED
@@ -118,6 +118,11 @@ class Comments(dd.Table):
|
|
118
118
|
yield p
|
119
119
|
yield "reply_to"
|
120
120
|
|
121
|
+
@classmethod
|
122
|
+
def comments_created(cls, user, sd, ed):
|
123
|
+
pv = dict(start_date=sd, end_date=ed, observed_event=CommentEvents.created)
|
124
|
+
return cls.request(user=user, param_values=pv)
|
125
|
+
|
121
126
|
# @classmethod
|
122
127
|
# def get_card_title(cls, ar, obj):
|
123
128
|
# """Overrides the default behaviour"""
|
@@ -986,7 +986,7 @@ class ExtRenderer(JsCacheRenderer):
|
|
986
986
|
tbl = dh.layout._datasource
|
987
987
|
yield ""
|
988
988
|
yield "Lino.%s = Ext.extend(Lino.ActionFormPanel,{" % dh.layout._formpanel_name
|
989
|
-
for k, v in
|
989
|
+
for k, v in dh.main.ext_options().items():
|
990
990
|
if k != "items":
|
991
991
|
yield " %s: %s," % (k, py2js(v))
|
992
992
|
assert tbl.action_name is not None
|
lino/modlib/linod/consumers.py
CHANGED
@@ -57,9 +57,8 @@ class LinodConsumer(AsyncConsumer):
|
|
57
57
|
async def run_background_tasks(self, event: dict):
|
58
58
|
# 'run.background.tasks' in `pm linod`
|
59
59
|
from lino.modlib.linod.mixins import start_task_runner
|
60
|
-
|
61
|
-
|
62
|
-
ar = settings.SITE.login()
|
60
|
+
from lino.core.requests import BaseRequest
|
61
|
+
ar = BaseRequest()
|
63
62
|
asyncio.ensure_future(start_task_runner(ar))
|
64
63
|
|
65
64
|
async def send_push(self, event):
|
lino/modlib/linod/mixins.py
CHANGED
@@ -69,7 +69,7 @@ class Runnable(Sequenced, RecurrenceSet):
|
|
69
69
|
message = dd.RichTextField(_("Logged messages"), format="plain", editable=False)
|
70
70
|
|
71
71
|
# procedure = Procedures.field(strict=False, unique=True, editable=False)
|
72
|
-
procedure = Procedures.field(strict=False
|
72
|
+
procedure = Procedures.field(strict=False)
|
73
73
|
name = models.CharField(_("Name"), max_length=200, blank=True)
|
74
74
|
|
75
75
|
run_now = RunNow()
|
@@ -203,7 +203,8 @@ async def start_task_runner(ar, max_count=None):
|
|
203
203
|
nst = await sync_to_async(self.get_next_suggested_date)(
|
204
204
|
self.last_end_time, ar.logger
|
205
205
|
)
|
206
|
-
|
206
|
+
if nst is not None:
|
207
|
+
next_time = min(next_time, nst)
|
207
208
|
|
208
209
|
count += 1
|
209
210
|
if max_count is not None and count >= max_count:
|