Commit f2a60acb authored by Amirjanyan's avatar Amirjanyan
Browse files

MemriDictionary

parent 29a4e197
Showing with 195 additions and 163 deletions
+195 -163
...@@ -33,6 +33,7 @@ import {Renderers} from "../cvu/views/Renderers"; ...@@ -33,6 +33,7 @@ import {Renderers} from "../cvu/views/Renderers";
import {CacheMemri} from "../model/Cache"; import {CacheMemri} from "../model/Cache";
import {Realm} from "../model/RealmLocal"; import {Realm} from "../model/RealmLocal";
import {ViewArguments} from "../cvu/views/CascadableDict"; import {ViewArguments} from "../cvu/views/CascadableDict";
import {MemriDictionary} from "../model/MemriDictionary";
export var globalCache export var globalCache
...@@ -149,7 +150,7 @@ export class MemriContext { ...@@ -149,7 +150,7 @@ export class MemriContext {
//this.uiUpdateSubject.send() TODO //this.uiUpdateSubject.send() TODO
} }
scheduleCascadableViewUpdate(immediate = false) { scheduleCascadableViewUpdate(immediate = true) {
if (immediate) { if (immediate) {
// Do this straight away, usually for the sake of correct animation // Do this straight away, usually for the sake of correct animation
try { this.currentSession?.setCurrentView() } try { this.currentSession?.setCurrentView() }
...@@ -474,7 +475,7 @@ export class MemriContext { ...@@ -474,7 +475,7 @@ export class MemriContext {
.merge(viewArguments) .merge(viewArguments)
.resolve(item) .resolve(item)
var args = {} var args = new MemriDictionary()
for (let [argName, inputValue] of Object.entries(action.values)) { for (let [argName, inputValue] of Object.entries(action.values)) {
if (action.argumentTypes[argName] == undefined) { continue } if (action.argumentTypes[argName] == undefined) { continue }
...@@ -491,7 +492,7 @@ export class MemriContext { ...@@ -491,7 +492,7 @@ export class MemriContext {
let dataItem = argValue; let dataItem = argValue;
if (dataItem?.constructor?.name == "Item") { if (dataItem?.constructor?.name == "Item") {
finalValue = dataItem finalValue = dataItem
} else if (typeof argValue.isCVUObject === "function") { } else if (argValue?.constructor?.name === "MemriDictionary") {
let dict = argValue; let dict = argValue;
if (action.argumentTypes[argName] == "ViewArguments") { if (action.argumentTypes[argName] == "ViewArguments") {
finalValue = new ViewArguments(dict).resolve(item, viewArgs) finalValue = new ViewArguments(dict).resolve(item, viewArgs)
......
This diff is collapsed.
...@@ -6,21 +6,22 @@ import {ActionMultiAction} from "./Action"; ...@@ -6,21 +6,22 @@ import {ActionMultiAction} from "./Action";
import {debugHistory} from "./ViewDebugger"; import {debugHistory} from "./ViewDebugger";
import {CVUParsedDefinition} from "../../parsers/cvu-parser/CVUParsedDefinition"; import {CVUParsedDefinition} from "../../parsers/cvu-parser/CVUParsedDefinition";
import {CVUSerializer} from "../../parsers/cvu-parser/CVUToString"; import {CVUSerializer} from "../../parsers/cvu-parser/CVUToString";
import {MemriDictionary} from "../../model/MemriDictionary";
export class Cascadable/* extends CustomStringConvertible*/{ export class Cascadable/* extends CustomStringConvertible*/{
host?: Cascadable host?: Cascadable
cascadeStack: CVUParsedDefinition[] cascadeStack: CVUParsedDefinition[]
tail: CVUParsedDefinition[] tail: CVUParsedDefinition[]
head: CVUParsedDefinition head: CVUParsedDefinition
localCache = {} localCache = new MemriDictionary()
get viewArguments() { return this.host?.viewArguments } get viewArguments() { return this.host?.viewArguments }
set viewArguments(value) { this.host?.viewArguments = value } set viewArguments(value) { this.host?.viewArguments = value }
get toString() { get toString() {
var merged = {} var merged = new MemriDictionary()
function recur(dict: {}) { function recur(dict: MemriDictionary) {
if (!dict) { return } if (!dict) { return }
for (let [key, value] of Object.entries(dict)) { for (let [key, value] of Object.entries(dict)) {
...@@ -200,7 +201,7 @@ export class Cascadable/* extends CustomStringConvertible*/{ ...@@ -200,7 +201,7 @@ export class Cascadable/* extends CustomStringConvertible*/{
if (forceArray) { if (forceArray) {
for (var def of this.cascadeStack) { for (var def of this.cascadeStack) {
let x = def[name] let x = def[name]
if (typeof x.isCVUObject === "function") { if (x.constructor.name === "MemriDictionary") {
for (let [key, value] of Object.entries(x)) { for (let [key, value] of Object.entries(x)) {
if (value) { if (value) {
result[key] = value result[key] = value
......
...@@ -7,6 +7,7 @@ import {Cascadable} from "./Cascadable"; ...@@ -7,6 +7,7 @@ import {Cascadable} from "./Cascadable";
import {ItemReference} from "../../model/DatabaseController"; import {ItemReference} from "../../model/DatabaseController";
import {CVUParsedDefinition, CVUParsedObjectDefinition} from "../../parsers/cvu-parser/CVUParsedDefinition"; import {CVUParsedDefinition, CVUParsedObjectDefinition} from "../../parsers/cvu-parser/CVUParsedDefinition";
import {Item} from "../../model/items/Item"; import {Item} from "../../model/items/Item";
import {MemriDictionary} from "../../model/MemriDictionary";
export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptable*/ { export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptable*/ {
subscript() { subscript() {
...@@ -49,9 +50,6 @@ export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptabl ...@@ -49,9 +50,6 @@ export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptabl
} }
} }
getSubscript(name) { return this.get(name) }//TODO get with param
setSubscript(name, value) { this.set(name, value) }
constructor(head?, tail?: CVUParsedDefinition[]|Item, host?:Cascadable) {//TODO constructor(head?, tail?: CVUParsedDefinition[]|Item, host?:Cascadable) {//TODO
if (head instanceof CascadableDict || tail instanceof Item) { if (head instanceof CascadableDict || tail instanceof Item) {
super(new CVUParsedObjectDefinition(), head?.cascadeStack) super(new CVUParsedObjectDefinition(), head?.cascadeStack)
...@@ -59,9 +57,9 @@ export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptabl ...@@ -59,9 +57,9 @@ export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptabl
} else if (head instanceof CVUParsedDefinition) { } else if (head instanceof CVUParsedDefinition) {
super(head, tail, host) super(head, tail, host)
} else { } else {
var result = {} var result = new MemriDictionary()
if (head) { if (head && head.constructor.name === "MemriDictionary") {
for (let [key, value] of Object.entries(head)) { for (let [key, value] of Object.entries(head)) {
if (value instanceof Item) { if (value instanceof Item) {
result[key] = new ItemReference(value) result[key] = new ItemReference(value)
...@@ -103,7 +101,7 @@ export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptabl ...@@ -103,7 +101,7 @@ export class CascadableDict extends Cascadable/*extends Cascadable, Subscriptabl
deepMerge(other?: CascadableDict) { deepMerge(other?: CascadableDict) {
if (!other) { return this } if (!other) { return this }
let merge = (parsed?) => { let merge = (parsed?: MemriDictionary) => {
if (!parsed) { return } if (!parsed) { return }
for (let [key, value] of Object.entries(parsed)) { for (let [key, value] of Object.entries(parsed)) {
this.head.set(key, value) this.head.set(key, value)
......
...@@ -20,6 +20,9 @@ import {registerThumbGridRenderer} from "../../gui/renderers/GridRenderers/Thumb ...@@ -20,6 +20,9 @@ import {registerThumbGridRenderer} from "../../gui/renderers/GridRenderers/Thumb
import {registerMessageRenderer} from "../../gui/renderers/MessageRenderer"; import {registerMessageRenderer} from "../../gui/renderers/MessageRenderer";
import {registerPhotoViewerRenderer} from "../../gui/renderers/PhotoViewerRenderer/PhotoViewerRenderer"; import {registerPhotoViewerRenderer} from "../../gui/renderers/PhotoViewerRenderer/PhotoViewerRenderer";
import {GeneralEditorLayoutItem, registerGeneralEditorRenderer} from "../../gui/renderers/GeneralEditorView"; import {GeneralEditorLayoutItem, registerGeneralEditorRenderer} from "../../gui/renderers/GeneralEditorView";
//import {registerThumbHorizontalGridRenderer} from "../../gui/renderers/GridRenderers/ThumbHorizontalGridRendererView";
//import {registerThumbWaterfallRenderer} from "../../gui/renderers/GridRenderers/ThumbWaterfallRendererView";
import {MemriDictionary} from "../../model/MemriDictionary";
export class Renderers { export class Renderers {
all = {} all = {}
...@@ -68,10 +71,10 @@ export var allRenderers = new Renderers(); ...@@ -68,10 +71,10 @@ export var allRenderers = new Renderers();
//FilterPanelRendererButton moved to Action.ts //FilterPanelRendererButton moved to Action.ts
class RenderGroup { class RenderGroup {
options = {} options = new MemriDictionary()
body: UIElement = null body: UIElement = null
constructor(dict) { constructor(dict: MemriDictionary) {
if (Array.isArray(dict["children"]) && dict["children"][0]?.constructor?.name == "UIElement") this.body = dict["children"][0] if (Array.isArray(dict["children"]) && dict["children"][0]?.constructor?.name == "UIElement") this.body = dict["children"][0]
delete dict["children"] delete dict["children"]
this.options = dict this.options = dict
...@@ -117,7 +120,7 @@ export class CascadingRenderConfig extends Cascadable { ...@@ -117,7 +120,7 @@ export class CascadingRenderConfig extends Cascadable {
if (renderGroup) { if (renderGroup) {
return renderGroup.options return renderGroup.options
} }
return {} return new MemriDictionary()
} }
getRenderGroup(group) { getRenderGroup(group) {
...@@ -128,14 +131,14 @@ export class CascadingRenderConfig extends Cascadable { ...@@ -128,14 +131,14 @@ export class CascadingRenderConfig extends Cascadable {
else if (group == "*" && this.cascadeProperty("*") == null) { else if (group == "*" && this.cascadeProperty("*") == null) {
let list = this.cascadeProperty("children") let list = this.cascadeProperty("children")
if (list) { if (list) {
var dict = {"children": list} var dict = new MemriDictionary({"children": list})
let renderGroup = new RenderGroup(dict) let renderGroup = new RenderGroup(dict)
this.localCache[group] = renderGroup this.localCache[group] = renderGroup
return renderGroup return renderGroup
} }
} }
else { else {
var dict = this.cascadeProperty(group) var dict: MemriDictionary = this.cascadeProperty(group)
if (dict) { if (dict) {
let renderGroup = new RenderGroup(dict) let renderGroup = new RenderGroup(dict)
this.localCache[group] = renderGroup this.localCache[group] = renderGroup
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
import {realmWriteIfAvailable} from "../../gui/util"; import {realmWriteIfAvailable} from "../../gui/util";
import {Datasource} from "../../api/Datasource"; import {Datasource} from "../../api/Datasource";
import {CVUStoredDefinition} from "../../model/items/Item";
import {MemriDictionary} from "../../model/MemriDictionary";
export class SessionView /*extends DataItem */{ export class SessionView /*extends DataItem */{
...@@ -76,16 +78,16 @@ export class SessionView /*extends DataItem */{ ...@@ -76,16 +78,16 @@ export class SessionView /*extends DataItem */{
args = parsed["viewArguments"].clone(); args = parsed["viewArguments"].clone();
} }
var values = {//TODO var values = new MemriDictionary({//TODO
selector: parsed?.selector ?? stored?.selector ?? "[view]", selector: parsed?.selector ?? stored?.selector ?? "[view]",
name: typeof parsed["name"] === 'string' ? parsed["name"] : stored?.name || "", name: typeof parsed["name"] === 'string' ? parsed["name"] : stored?.name || "",
viewDefinition: stored ?? new CVUStoredDefinition({ //TODO viewDefinition: stored ?? new CVUStoredDefinition(new MemriDictionary({ //TODO
type: "view", type: "view",
selector: parsed?.selector, selector: parsed?.selector,
domain: parsed?.domain, domain: parsed?.domain,
definition: parsed?.toCVUString(0, " ") definition: parsed?.toCVUString(0, " ")
}) }))
} })
if (args) { values["viewArguments"] = args } if (args) { values["viewArguments"] = args }
if (us) { values["userState"] = us } if (us) { values["userState"] = us }
......
...@@ -16,18 +16,19 @@ import { ...@@ -16,18 +16,19 @@ import {
import {debugHistory} from "./ViewDebugger"; import {debugHistory} from "./ViewDebugger";
import {dataItemListToArray, UUID} from "../../model/items/Item"; import {dataItemListToArray, UUID} from "../../model/items/Item";
import {ViewArguments} from "./CascadableDict"; import {ViewArguments} from "./CascadableDict";
import {MemriDictionary} from "../../model/MemriDictionary";
export class UIElement /*extends CVUToString */{ export class UIElement /*extends CVUToString */{
id = UUID() id = UUID()
type: UIElementFamily type: UIElementFamily
children = [] children = []
properties = {} // TODO: ViewParserDefinitionContext properties: MemriDictionary // TODO: ViewParserDefinitionContext
constructor(type, children?, properties = {}) { constructor(type, children?, properties?) {
//super() //super()
this.type = type this.type = type
this.children = children ?? this.children this.children = children ?? this.children
this.properties = properties this.properties = properties ?? new MemriDictionary()
} }
has(propName) { has(propName) {
...@@ -290,8 +291,8 @@ export var validateUIElementProperties = function (key, value) { ...@@ -290,8 +291,8 @@ export var validateUIElementProperties = function (key, value) {
case UIElementProperties.image: return value?.constructor?.name == "File" || typeof value == "string"; case UIElementProperties.image: return value?.constructor?.name == "File" || typeof value == "string";
case UIElementProperties.press: return value?.constructor?.name == "Action" || Array.isArray(value) && value[0]?.constructor?.name == "Action" case UIElementProperties.press: return value?.constructor?.name == "Action" || Array.isArray(value) && value[0]?.constructor?.name == "Action"
case UIElementProperties.list: return Array.isArray(value) && value[0]?.constructor?.name == "Item" case UIElementProperties.list: return Array.isArray(value) && value[0]?.constructor?.name == "Item"
case UIElementProperties.view: return value?.constructor?.name == "CVUParsedDefinition" || typeof value.isCVUObject === "function" case UIElementProperties.view: return value?.constructor?.name == "CVUParsedDefinition" || value.constructor.name === "MemriDictionary"
case UIElementProperties.arguments: return typeof value.isCVUObject === "function" case UIElementProperties.arguments: return value.constructor.name === "MemriDictionary"
case UIElementProperties.location: return value?.constructor?.name == "Location" case UIElementProperties.location: return value?.constructor?.name == "Location"
case UIElementProperties.address: return value?.constructor?.name == "Address" case UIElementProperties.address: return value?.constructor?.name == "Address"
case UIElementProperties.value: return true case UIElementProperties.value: return true
......
...@@ -17,6 +17,7 @@ import {CacheMemri} from "../../model/Cache"; ...@@ -17,6 +17,7 @@ import {CacheMemri} from "../../model/Cache";
import {CVUStateDefinition, dataItemListToArray, Item} from "../../model/items/Item"; import {CVUStateDefinition, dataItemListToArray, Item} from "../../model/items/Item";
import {ViewArguments} from "./CascadableDict"; import {ViewArguments} from "./CascadableDict";
import {CascadingRenderConfig} from "./Renderers"; import {CascadingRenderConfig} from "./Renderers";
import {MemriDictionary} from "../../model/MemriDictionary";
export class Views { export class Views {
/// ///
...@@ -103,10 +104,10 @@ export class Views { ...@@ -103,10 +104,10 @@ export class Views {
DatabaseController.tryWriteSync(() => { // Start write transaction outside loop for performance reasons DatabaseController.tryWriteSync(() => { // Start write transaction outside loop for performance reasons
// Loop over lookup table with named views // Loop over lookup table with named views
for (let def of parsedDefinitions) { for (let def of parsedDefinitions) {
var values = { var values = new MemriDictionary({
"domain": "defaults", "domain": "defaults",
"definition": def.toString(),//TODO "definition": def.toString(),//TODO
} })
if (def.selector != undefined) { values["selector"] = def.selector } if (def.selector != undefined) { values["selector"] = def.selector }
if (def.name != undefined) { values["name"] = def.name } if (def.name != undefined) { values["name"] = def.name }
......
...@@ -35,6 +35,7 @@ import {RichTextEditor} from "../MemriTextEditor/RichTextEditor"; ...@@ -35,6 +35,7 @@ import {RichTextEditor} from "../MemriTextEditor/RichTextEditor";
import {MessageBubbleView} from "../renderers/MessageRenderer"; import {MessageBubbleView} from "../renderers/MessageRenderer";
import {SubView} from "./SubView"; import {SubView} from "./SubView";
import {MemriDictionary} from "../../model/MemriDictionary";
export class UIElementView extends MainUI { export class UIElementView extends MainUI {
context: MemriContext context: MemriContext
...@@ -110,10 +111,10 @@ export class UIElementView extends MainUI { ...@@ -110,10 +111,10 @@ export class UIElementView extends MainUI {
this.context = this.props.context; this.context = this.props.context;
this.init(this.props.gui, this.props.dataItem, this.props.viewArguments); this.init(this.props.gui, this.props.dataItem, this.props.viewArguments);
let editorLabelAction = () => { let editorLabelAction = () => {
let args = { let args = new MemriDictionary({
"subject": this.context.item, // self.item, "subject": this.context.item, // self.item,
"edgeType": this.viewArguments.get("name") "edgeType": this.viewArguments.get("name")
} })
let action = new ActionUnlink(this.context, args) let action = new ActionUnlink(this.context, args)
this.context.executeAction(action, this.item, this.viewArguments this.context.executeAction(action, this.item, this.viewArguments
) )
......
...@@ -43,7 +43,7 @@ export var registerGeneralEditorRenderer = function () { ...@@ -43,7 +43,7 @@ export var registerGeneralEditorRenderer = function () {
export class GeneralEditorLayoutItem { export class GeneralEditorLayoutItem {
id = UUID() id = UUID()
dict //future Dictionary dict: MemriDictionary
viewArguments viewArguments
constructor(dict, viewArguments?) { constructor(dict, viewArguments?) {
......
...@@ -14,6 +14,7 @@ import {ResultSet} from "./ResultSet"; ...@@ -14,6 +14,7 @@ import {ResultSet} from "./ResultSet";
import {DatabaseController} from "./DatabaseController"; import {DatabaseController} from "./DatabaseController";
import {Realm} from "./RealmLocal"; import {Realm} from "./RealmLocal";
import {Sync} from "./Sync"; import {Sync} from "./Sync";
import {MemriDictionary} from "./MemriDictionary";
export var cacheUIDCounter: number = -1 export var cacheUIDCounter: number = -1
export class CacheMemri { export class CacheMemri {
...@@ -61,7 +62,7 @@ export class CacheMemri { ...@@ -61,7 +62,7 @@ export class CacheMemri {
var lut = {} var lut = {}
function recur(dict) { function recur(dict) {
var values = {} var values = new MemriDictionary()
let type = dict["_type"]; let type = dict["_type"];
let itemType = getItemType(type); let itemType = getItemType(type);
if (typeof type != "string" || !itemType) { if (typeof type != "string" || !itemType) {
...@@ -411,7 +412,7 @@ export class CacheMemri { ...@@ -411,7 +412,7 @@ export class CacheMemri {
let itemType = item.getType() let itemType = item.getType()
if (itemType) { if (itemType) {
var dict= {}; var dict= new MemriDictionary();
for (var prop in item) { for (var prop in item) {
if (item.hasOwnProperty(prop)) { if (item.hasOwnProperty(prop)) {
...@@ -490,7 +491,7 @@ export class CacheMemri { ...@@ -490,7 +491,7 @@ export class CacheMemri {
} }
//#warning("This doesnt trigger syncToPod()") //#warning("This doesnt trigger syncToPod()")
static createItem(type, values = {}, unique?: string) { static createItem(type, values = new MemriDictionary(), unique?: string) {
var item var item
DatabaseController.tryWriteSync((realm: Realm) => { DatabaseController.tryWriteSync((realm: Realm) => {
var dict = values var dict = values
...@@ -594,7 +595,7 @@ export class CacheMemri { ...@@ -594,7 +595,7 @@ export class CacheMemri {
// TODO: find item in DB & merge // TODO: find item in DB & merge
// Uniqueness based on also not primary key // Uniqueness based on also not primary key
let values = { let values = new MemriDictionary({
"targetItemType": target[0], "targetItemType": target[0],
"targetItemID": target[1], "targetItemID": target[1],
"sourceItemType": source.genericType, "sourceItemType": source.genericType,
...@@ -604,7 +605,7 @@ export class CacheMemri { ...@@ -604,7 +605,7 @@ export class CacheMemri {
"sequence": sequence, "sequence": sequence,
"dateCreated": new Date(), "dateCreated": new Date(),
"_action": "create" "_action": "create"
} })
edge = realm.create("Edge", values) edge = realm.create("Edge", values)
}); });
......
export class MemriDictionary {
constructor(properties = {}) {
for (let key in properties) {
this[key] = properties[key];
}
}
}
\ No newline at end of file
...@@ -84,9 +84,17 @@ export class RealmObjects extends Array { ...@@ -84,9 +84,17 @@ export class RealmObjects extends Array {
sorted(descriptor: string, reverse?: boolean) { sorted(descriptor: string, reverse?: boolean) {
//TODO: //TODO:
return this;/*.sort((a, b) => { return this.sort((a, b) => {
let res
}) */ if (a[descriptor] > b[descriptor]) {
res = 1
} else if (a[descriptor] < b[descriptor]) {
res = -1
} else {
res = 0
}
return reverse ? res : -res
})
} }
} }
......
import {CVUSerializer} from "./CVUToString"; import {CVUSerializer} from "./CVUToString";
import {MemriDictionary} from "../../model/MemriDictionary";
export enum CompileScope { export enum CompileScope {
all="all", all="all",
...@@ -37,7 +38,7 @@ export class CVUParsedDefinition { ...@@ -37,7 +38,7 @@ export class CVUParsedDefinition {
} }
parsed: {}; parsed = new MemriDictionary();
get description(): string { get description(): string {
return this.toCVUString(0, " ") return this.toCVUString(0, " ")
...@@ -85,7 +86,7 @@ export class CVUParsedDefinition { ...@@ -85,7 +86,7 @@ export class CVUParsedDefinition {
return scope == CompileScope.all return scope == CompileScope.all
? notnil.execute(viewArguments) ? notnil.execute(viewArguments)
: notnil.compile(viewArguments) : notnil.compile(viewArguments)
} else if (typeof notnil.isCVUObject == "function") { } else if (notnil.constructor.name == "MemriDictionary") {
for (let [key, value] of Object.entries(notnil)) { for (let [key, value] of Object.entries(notnil)) {
notnil[key] = recur(value) notnil[key] = recur(value)
} }
...@@ -200,7 +201,7 @@ export class CVUParsedViewDefinition extends CVUParsedDefinition { ...@@ -200,7 +201,7 @@ export class CVUParsedViewDefinition extends CVUParsedDefinition {
query?: ExprNode query?: ExprNode
get definitionType() {return "view" } get definitionType() {return "view" }
constructor(selector, name, type?, query?, domain: string = "user", parsed?) {//TODO constructor(selector, name, type?, query?, domain: string = "user", parsed?: MemriDictionary) {//TODO
super(selector, name, domain, parsed) super(selector, name, domain, parsed)
this.type = type this.type = type
......
...@@ -21,6 +21,7 @@ import { ...@@ -21,6 +21,7 @@ import {
} from "./CVUParsedDefinition" } from "./CVUParsedDefinition"
import {ActionFamily, getActionType} from "../../cvu/views/Action"; import {ActionFamily, getActionType} from "../../cvu/views/Action";
import {UIElement, UIElementFamily} from "../../cvu/views/UIElement"; import {UIElement, UIElementFamily} from "../../cvu/views/UIElement";
import {MemriDictionary} from "../../model/MemriDictionary";
export class Color { export class Color {
value; value;
...@@ -315,7 +316,7 @@ export class CVUParser { ...@@ -315,7 +316,7 @@ export class CVUParser {
} }
parseDict(uiElementName?) { parseDict(uiElementName?) {
var dict = {}; var dict = new MemriDictionary();
var stack = []; var stack = [];
let forUIElement = this.knownUIElements[uiElementName?.toLowerCase() ?? ""] != undefined;//TODO: let forUIElement = this.knownUIElements[uiElementName?.toLowerCase() ?? ""] != undefined;//TODO:
...@@ -343,7 +344,7 @@ export class CVUParser { ...@@ -343,7 +344,7 @@ export class CVUParser {
} }
} }
function addUIElement(type, properties) {//TODO: function addUIElement(type, properties: MemriDictionary) {//TODO:
var children = dict["children"] || []; var children = dict["children"] || [];
let subChildren = Object.assign([], properties.children); let subChildren = Object.assign([], properties.children);
delete properties.children; delete properties.children;
...@@ -447,7 +448,7 @@ export class CVUParser { ...@@ -447,7 +448,7 @@ export class CVUParser {
let lvalue = v.toLowerCase(); let lvalue = v.toLowerCase();
let type = this.knownUIElements[lvalue]; let type = this.knownUIElements[lvalue];
if (lastKey == null && type) { if (lastKey == null && type) {
var properties = {}; var properties = new MemriDictionary();
if (CVUToken.CurlyBracketOpen == this.peekCurrentToken().constructor) { if (CVUToken.CurlyBracketOpen == this.peekCurrentToken().constructor) {
this.popCurrentToken(); this.popCurrentToken();
properties = this.parseDict(v); properties = this.parseDict(v);
...@@ -456,7 +457,7 @@ export class CVUParser { ...@@ -456,7 +457,7 @@ export class CVUParser {
addUIElement(type, properties);//TODO addUIElement(type, properties);//TODO
continue; continue;
} else if (lvalue == "userstate" || lvalue == "viewarguments" || lvalue == "contextpane") { } else if (lvalue == "userstate" || lvalue == "viewarguments" || lvalue == "contextpane") {
var properties = {}; var properties = new MemriDictionary();
if (CVUToken.CurlyBracketOpen == this.peekCurrentToken().constructor) { if (CVUToken.CurlyBracketOpen == this.peekCurrentToken().constructor) {
this.popCurrentToken(); this.popCurrentToken();
properties = this.parseDict(); properties = this.parseDict();
...@@ -472,7 +473,7 @@ export class CVUParser { ...@@ -472,7 +473,7 @@ export class CVUParser {
} else { } else {
let name = this.knownActions[v.toLowerCase()]; let name = this.knownActions[v.toLowerCase()];
if (name) { if (name) {
var options = {}; var options = new MemriDictionary();
outerLoop: while (true) { outerLoop: while (true) {
switch (this.peekCurrentToken().constructor) { switch (this.peekCurrentToken().constructor) {
case CVUToken.Comma: case CVUToken.Comma:
...@@ -702,7 +703,7 @@ export class CVUParser { ...@@ -702,7 +703,7 @@ export class CVUParser {
} }
}; };
processCompoundProperties(dict) { processCompoundProperties(dict: MemriDictionary) {
for (let name in this.frameProperties) { for (let name in this.frameProperties) {
if (dict[name]) { if (dict[name]) {
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
// Copyright © 2020 memri. All rights reserved. // Copyright © 2020 memri. All rights reserved.
// //
import {HorizontalAlignment, Alignment, Color, VerticalAlignment, TextAlignment, Font, CGFloat} from "./CVUParser"; import {HorizontalAlignment, Alignment, Color, VerticalAlignment, TextAlignment, Font, CGFloat} from "./CVUParser";
import {MemriDictionary} from "../../model/MemriDictionary";
//function UIElement() {} //function UIElement() {}
...@@ -46,7 +47,7 @@ export class CVUSerializer { ...@@ -46,7 +47,7 @@ export class CVUSerializer {
return `"${p.replace("\"", "\\\"")}"`; return `"${p.replace("\"", "\\\"")}"`;
} else if (Array.isArray(p)) { } else if (Array.isArray(p)) {
return this.arrayToString(p, depth + 1, tab) return this.arrayToString(p, depth + 1, tab)
} else if (typeof p.isCVUObject === "function") {//TODO: } else if (p.constructor.name === "MemriDictionary") {//TODO:
return this.dictToString(p, depth + 1, tab) return this.dictToString(p, depth + 1, tab)
} else if (typeof p.toCVUString === "function") {//TODO: } else if (typeof p.toCVUString === "function") {//TODO:
return p.toCVUString(depth, tab) return p.toCVUString(depth, tab)
...@@ -97,7 +98,7 @@ export class CVUSerializer { ...@@ -97,7 +98,7 @@ export class CVUSerializer {
: str.join((extraNewLine ? "\n" : "") + `\n${tabs}`) : str.join((extraNewLine ? "\n" : "") + `\n${tabs}`)
} }
static dictToString(dict, depth: number = 0, tab: string = " ", static dictToString(dict: MemriDictionary, depth: number = 0, tab: string = " ",
withDef: boolean = true, extraNewLine: boolean = false, withDef: boolean = true, extraNewLine: boolean = false,
sortFunc?): string { sortFunc?): string {
var keys: string[]; var keys: string[];
...@@ -140,7 +141,7 @@ export class CVUSerializer { ...@@ -140,7 +141,7 @@ export class CVUSerializer {
if (!isDef || dict1 != undefined && Object.entries(dict1)?.length > 0) { if (!isDef || dict1 != undefined && Object.entries(dict1)?.length > 0) {
let p = value; let p = value;
if (p && typeof p.isCVUObject === "function") { if (p && p.constructor.name === "MemriDictionary") {
str.push((extraNewLine ? "\n" + (withDef ? tabs : tabsEnd) : "") str.push((extraNewLine ? "\n" + (withDef ? tabs : tabsEnd) : "")
+ `${key}: ${this.valueToString(p, depth, tab)}`); + `${key}: ${this.valueToString(p, depth, tab)}`);
} else if (value !== undefined) { } else if (value !== undefined) {
......
...@@ -10,6 +10,7 @@ const {ExprLexer} = require("./ExprLexer"); ...@@ -10,6 +10,7 @@ const {ExprLexer} = require("./ExprLexer");
const {ExprParser} = require("./ExprParser"); const {ExprParser} = require("./ExprParser");
import {ExprInterpreter} from "./ExprInterpreter"; import {ExprInterpreter} from "./ExprInterpreter";
import {DatabaseController, ItemReference} from "../../model/DatabaseController"; import {DatabaseController, ItemReference} from "../../model/DatabaseController";
import {MemriDictionary} from "../../model/MemriDictionary";
export class Expression { export class Expression {
code: string; code: string;
...@@ -170,7 +171,7 @@ export class Expression { ...@@ -170,7 +171,7 @@ export class Expression {
static resolve(object?, viewArguments?: ViewArguments, dontResolveItems: boolean = false) { //TODO: static resolve(object?, viewArguments?: ViewArguments, dontResolveItems: boolean = false) { //TODO:
var dict = object; var dict = object;
if (typeof dict?.isCVUObject == "function") { if (dict?.constructor.name === "MemriDictionary") {
for (let [key, value] of Object.entries(dict)) { for (let [key, value] of Object.entries(dict)) {
dict[key] = this.resolve(value, viewArguments, dontResolveItems) dict[key] = this.resolve(value, viewArguments, dontResolveItems)
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment