Wiki source code of ProjectsSheet

Version 2.1 by Zenna Elfen on 2025/11/20 21:31

Hide last authors
Zenna Elfen 1.1 1 {{velocity}}
2 #set ($object = $doc.getObject('Projects.Code.ProjectsClass'))
3 #if (!$object)
4 #set ($messageKey = 'projects.sheet.description')
5 #set ($messageType = 'info')
6 #if ($doc.documentReference.name != 'ProjectsSheet')
7 #set ($messageKey = 'projects.sheet.noObject')
8 #set ($messageType = 'warning')
9 #end
10 {{$messageType}}
11 $services.localization.render($messageKey)
12 {{/$messageType}}
13 #stop
14 #end
15 #set ($discard = $xwiki.jsfx.use('uicomponents/edit/editableProperty.js', {
16 'forceSkinAction': true,
17 'language': $xcontext.locale
18 }))
19 #set ($discard = $doc.use($object))
20 #set ($editing = $xcontext.action == 'edit')
21 {{html wiki="true" clean="false"}}
22 <div class="xform">
23 <dl>
24 <dt #if (!$editing && $hasEdit)
25 class="editableProperty"
26 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('shortText1')))"
27 data-property-type="object"#end>
28 <label#if ($editing) for="Projects.Code.ProjectsClass_0_shortText1"#end>
29 $escapetool.xml($doc.displayPrettyName('shortText1', false, false))
30 </label>
31 <span class="xHint">
32 $escapetool.xml($services.localization.render('What''s the name of the project?'))
33 </span>
34 </dt>
35 <dd>$doc.display('shortText1')</dd>
36 <dt #if (!$editing && $hasEdit)
37 class="editableProperty"
38 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('shortText2')))"
39 data-property-type="object"#end>
40 <label#if ($editing) for="Projects.Code.ProjectsClass_0_shortText2"#end>
41 $escapetool.xml($doc.displayPrettyName('shortText2', false, false))
42 </label>
43 <span class="xHint">
44 $escapetool.xml($services.localization.render('What''s the projects website?'))
45 </span>
46 </dt>
47 <dd>$doc.display('shortText2')</dd>
48 <dt #if (!$editing && $hasEdit)
49 class="editableProperty"
Zenna Elfen 2.1 50 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('data_synchronization')))"
Zenna Elfen 1.1 51 data-property-type="object"#end>
Zenna Elfen 2.1 52 <label#if ($editing) for="Projects.Code.ProjectsClass_0_data_synchronization"#end>
53 $escapetool.xml($doc.displayPrettyName('data_synchronization', false, false))
Zenna Elfen 1.1 54 </label>
55 <span class="xHint">
Zenna Elfen 2.1 56 $escapetool.xml($services.localization.render('Synchronization answers how updates flow between peers and how they determine what data to exchange. This layer is about diffing, reconciliation, order, causality tracking, and efficient exchange, not persistence or user-facing collaboration semantics. Examples: Range-Based Set Reconciliation, RIBLT, Gossip-based sync, State-based vs op-based sync, Lamport/Vector/HLC clocks, Braid Protocol'))
Zenna Elfen 1.1 57 </span>
58 </dt>
Zenna Elfen 2.1 59 <dd>$doc.display('data_synchronization')</dd>
Zenna Elfen 1.1 60 <dt #if (!$editing && $hasEdit)
61 class="editableProperty"
Zenna Elfen 2.1 62 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('longText1')))"
Zenna Elfen 1.1 63 data-property-type="object"#end>
Zenna Elfen 2.1 64 <label#if ($editing) for="Projects.Code.ProjectsClass_0_longText1"#end>
65 $escapetool.xml($doc.displayPrettyName('longText1', false, false))
Zenna Elfen 1.1 66 </label>
67 <span class="xHint">
Zenna Elfen 2.1 68 $escapetool.xml($services.localization.render('How do peers detect differences and synchronize state?'))
Zenna Elfen 1.1 69 </span>
70 </dt>
Zenna Elfen 2.1 71 <dd>$doc.display('longText1')</dd>
Zenna Elfen 1.1 72 <dt #if (!$editing && $hasEdit)
73 class="editableProperty"
Zenna Elfen 2.1 74 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('conf_res')))"
Zenna Elfen 1.1 75 data-property-type="object"#end>
Zenna Elfen 2.1 76 <label#if ($editing) for="Projects.Code.ProjectsClass_0_conf_res"#end>
77 $escapetool.xml($doc.displayPrettyName('conf_res', false, false))
Zenna Elfen 1.1 78 </label>
79 <span class="xHint">
Zenna Elfen 2.1 80 $escapetool.xml($services.localization.render('This layer defines how shared data evolves when multiple peers edit concurrently. It focuses on conflict-free merging, causality, and consistency of meaning, not transport or storage. CRDTs ensure deterministic convergence, while event-sourced or stream-driven models maintain a history of all changes and derive consistent state from it. Examples: CRDTs (Yjs, Automerge), OT, Event Sourcing, Stream Processing, Version Vectors, Peritext'))
Zenna Elfen 1.1 81 </span>
82 </dt>
Zenna Elfen 2.1 83 <dd>$doc.display('conf_res')</dd>
Zenna Elfen 1.1 84 <dt #if (!$editing && $hasEdit)
85 class="editableProperty"
Zenna Elfen 2.1 86 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('content1')))"
Zenna Elfen 1.1 87 data-property-type="object"#end>
Zenna Elfen 2.1 88 <label#if ($editing) for="Projects.Code.ProjectsClass_0_content1"#end>
89 $escapetool.xml($doc.displayPrettyName('content1', false, false))
Zenna Elfen 1.1 90 </label>
91 <span class="xHint">
Zenna Elfen 2.1 92 $escapetool.xml($services.localization.render('How is data persisted locally and replicated between peers?'))
Zenna Elfen 1.1 93 </span>
94 </dt>
Zenna Elfen 2.1 95 <dd>$doc.display('content1')</dd>
Zenna Elfen 1.1 96 </dl>
97 </div>
98 {{/html}}
99 {{/velocity}}