Module: sdw/templates/inline/textvorlageEditormanager

Diese Klasse definiert das Modul textvorlageEditormanager, ein InlineEditormanager für kleine editierbare Schnipsel die in einem Fließtext eingebettet sind. Das sind typischerweise Zahlen oder einzelne Wörter.

Dieses Mdul KANN abweichend von der normalen Vorgehensweise bei der Vaterklasse inlineEditormanager Editormetadaten laden ODER AUCH NICHT. Die Metadaten werden zwar für diesen Editormanager nicht gebraucht, enthalten aber Informationen für das Sortieren der Items im Tree, und falls die TextvorlagenInstanzen, die dieser Editormanager verwaltet, sortierbar sind, müssen Editormetadaten zur Verfügung gestellt werden. Hintergrund: Bei DND-Operaitonen versucht der DND-Controller über this (treeController).delegate.editormanager.emdklasse auf das sortItem zuzugreifen. Außerdem werden die Item umbenannt, die führende Positions-Id ändert sich ja, und dann müssen LabelItems, LabelItemSeparator und items mit datatype vorhanden sein. Außerdem kann man dadurch die Funktionalität des Kontextmenüs nutzen. Hier ein Beispiel für einen minimalen Satz Editormetadaten für einen TextvorlagenInlineeditor dessen Vorlagen sortierbar sind durch DND und die über Rechtsklick im tree gelöscht werden können

                {
                    klasse:AVConst.classKorrespondenzText,
                    sortItem:"sort",
                    opcStore: opcStoreKorrespondenzVorlage,
                    contextMenueDrop:{opcode: opcDropKorrespondenzVorlage, mustBeEmpty:[]},
                    labelItems: ["sort", SDWConst.classTextworkerVorlage],
                    labelItemSeparators: [" "],
                    groups: [{
                        items: [
                            {item:"sort", datatype:this.datatypeInteger},
                            {item:SDWConst.classTextworkerVorlage, datatype:this.datatypeListobject}
                            ]
                    }]
                }

Das Layout ist eine Tabelle. Die Anzahl Spalten ist die maximale Spaltenanzahl aller Zeilen, diese wird durch Traversieren über alle Zeilen ermittelt. Zeilen mit weniger Spalten müssen mti ColSpans eingepasst werden. FIXME: Das muss noch ausprogrammiert werden. Der Inhalt der Zellen wird durch die Methode textRenderer gebaut, die Fließtext und Platzhalter aufsplittet und als Spans mit innerHTML bzw. Controls zusammenbaut, zusammengefasst in einem div.

Author:
  • sdw.systems
Source:
See:

Extends

Requires

Members

domaeneStores

Properties:
Name Type Description
domaeneStores Array.<Object>

Assoziativer Array, mapt OIDs von Domänen auf dojo/store/Memory-Objekte

Source:

moduleName

Properties:
Name Type Description
moduleName String

Name des Moduls aus lokaler Konstante

Source:

Methods

createControl(platzhalter) → {dijit/form/control}

Baut ein Control und gibt dieses zurück. Dabei sind sowohl Metadaten als auch Instanzdaten in übergebenen Parameter Platzhalter verfügbar. Somit kann sowohl der Typ des Controls als auch dessen Vorbelegung mit dem ggf. schon vorhandenen Wert hier gemacht werden. Das Control bekommt einen Zeiger auf den Parameter Platzhalter.

Parameters:
Name Type Description
platzhalter Object

Einen Zeiger auf ein Platzhalterobjekt, also ein Schnipsel des treeItems

Source:
Returns:

Ein dijit Control

Type
dijit/form/control

createGUI()

Wird von initialize augereufen wenn alle Domänenlisten für die DropDoenEditoren da sind. Die Initialisierung der Toolbarbuttons wird hier auch gemacht, dazu wird die überschriebene Methode this.getEditorcount aufgerufen.

Source:

dispose()

Überschreibt die Implementierung der Basisklasse Löscht die lokalen Objekte, insbesondere alle dijit/form/controls und ruft dann die Implementierung der Basisklasse auf.

Source:

getEditorCount()

Überschreibt die Methode der Basisklasse. Gibt die Anzahl der Editoren zurück, das ist die Länge des Arrays this.editors. Da this.editors ein assoziativer Array ist kann nicht mit length gearbeitet werden, sondern der Array muss für alle keys durchgenudelt werden und dabei einen Zähler inkrementieren.

Source:

initialize()

Wird vom Konstruktor aufgerufen und überschreibt die Implementierung der Basisklasse.

Source:

invokeEditor(Die, hasOkAndCancelButtons, hasFocus, newObject)

Wird entweder für einen Editor durch die Implementierung von invokeEditorFromButton der Vaterklasse oder für alle Editoren durch die lokale Implementierung von startEditmodeForAllEditableControls aufgerufen.

Parameters:
Name Type Description
Die UUID

domid des Editors

hasOkAndCancelButtons Boolean

Hier immer false, die Miniinlineeditoren haben sowas nicht

hasFocus Boolean

true falls der Aufruf über invokeEditorFromButton kommt, sonst false. In diesem Falll sorgt startEditmodeForAllEditableControls dafür das der 1. editor den Focus bekommt.

newObject Boolean

Wird hier nicht gebraucht, immer false.

Source:

startEditmodeForAllEditableControls((Boolean))

Überschreibt die Implementierung der Basisklasse. Wird von der Toolbar aufgerufen. Diese Implementierung ruft für alle Editoren die Methode this.invokeEditor auf und enabled/disabled danach die ToolbarButtons. Der 1. Editor bekomt den Focus.

Parameters:
Name Type Description
(Boolean)

newObject Macht in dieser Implementierung keinen Sinn, wird ignoriert.

Source:

stopEditmodeForAllEditableControls(save)

Überschreibt die Implementierung der Basisklasse. Entspricht ok für save==true bzw. cancel für save==false für alle offenen Editoren (oder besser Controls). Wird über die Tollbarbuttons mit korrektem Parameter aufgerufen. Ruft für jedes Control afterImage=this.stopEditmodeForControl(key, save) auf, samelt die nicht-Null-Werte in einem JSON-Array und schickt dieses in einem XHR an den Server.

Parameters:
Name Type Description
save Boolean

Entscheidet über ok vs. cancel

Source:

stopEditmodeForControl(key, save) → {afterImage}

Beendet den Edtormodus für das Control mit dem übergebenen Key (entspricht der domId). Wird aufgerufen von this.stopEditmodeForAllEditableControls für alle Controls über die Toolbar und direkt für ein einzelnes Control. In ersterem Fall sammelt this.stopEditmodeForAllEditableControls die afterImages, die hier zurückgegeben werden, und sendet sie gesammelt in einem XHR an den Server falls sie nicht null sind. Falls save==false wird immer nur null zurückgegeben. In letzterem Fall ist save immer true, denn die Controls kennen keinen Cancel-Button. Auf Cancel wird immer dann umgeschaltet wenn das Control isValid kennt und isValid()==false ist, sonst immer ok. Für numerische Datentypen wird noch aus isNaN geprüft, denn die Controls zeigen trotzdem isValid==true an.

Parameters:
Name Type Description
key DomID

Die DomId des Controls

save Boolean

true für ok, false für cancel

Source:
Returns:

Das afterImage, falls save==true und isValid()==true oder null falls es aus irgendeinem Grund zu Cancel gekommen ist.

Type
afterImage

textRenderer(vorlagetext, Array, domNodeParent)

Rendert den Text in eine Liste von spans die in einem div eingehängt sind. Dafür gibt es die interne Meethode iterator

  • fallses keine Platzhalter gibt wird der Text in ein span gepackt und in den Ergebnis-Div eingehängt (Abbruch der Rekusion))
  • Ansonsten: Sucht das 1. Vorkommen eines Platzhalters
  • packt den Text bis zu dem Platzhalter in ein span und dieses in das Rückgabe-Div
  • sucht das passende Platzhalterobjekt aus der Liste platzhalterListe raus
  • macht über this.createControl das passende Control, wieder in ein span und wieder ins div
  • ruft sich selber rekursiv mit dem Rest des Textes, also alles nach dem gefundenen Platzhalter-Tag, auf
Parameters:
Name Type Description
vorlagetext String

Der zu rendernde Text

Array Array.<Object>

von Platzhalterobjekten, die sowohl Meta- als auch Instanzdaten für die Platzhaltertgas im Vorlagetext berietstellen

domNodeParent Dom-Objekt

DomNode in dem die resultierenden Spans eingehängt sind

Source:

togglePositionAktiv(oid, checked)

Wird von den Checkboxen im RowHeader aufgerufen und sendet einen Update-XHR um das aktix-Attribut zu toggeln.

Parameters:
Name Type Description
oid OID

Die oid der Korrspondenzposition

checked Boolean

true oder false für aktiv bzw. inaktiv

Source: