1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#![allow(clippy::derive_partial_eq_without_eq)]
#![allow(clippy::get_first)]
extern crate self as ftd;
#[cfg(test)]
#[macro_use]
pub(crate) mod test;
pub mod code;
mod component;
mod condition;
mod dnode;
mod event;
mod execute_doc;
mod html;
pub mod main;
pub mod markup;
mod or_type;
pub mod p1;
pub mod p2;
pub(crate) mod rendered;
mod rt;
pub mod sorted_json;
mod ui;
mod value_with_default;
pub(crate) mod variable;
mod youtube_id;
pub use component::{ChildComponent, Component, Instruction};
pub use condition::Condition;
pub use event::{Action, Event};
pub use ftd::{
ftd::p2::interpreter::{interpret, Interpreter, InterpreterState, ParsedDocument},
value_with_default::ValueWithDefault,
};
pub use html::{anchor, color, length, overflow, Collector, Node, StyleSpec};
pub use or_type::OrType;
pub use rendered::Rendered;
pub use rt::RT;
pub use ui::{
Anchor, AttributeType, Code, Color, ColorValue, Column, Common, ConditionalAttribute,
ConditionalValue, Container, Element, FontDisplay, GradientDirection, Grid, IFrame, IText,
Image, ImageSrc, Input, Length, Loading, Markup, Markups, NamedFont, Overflow, Position,
Region, Row, Scene, Spacing, Style, Text, TextAlign, TextBlock, TextFormat, Type, Weight,
};
pub use variable::{PropertyValue, TextSource, Value, Variable, VariableFlags};
pub fn js() -> String {
include_str!("../ftd.js").replace("if (true) { // false", "if (false) { // false")
}
pub fn css() -> &'static str {
include_str!("../ftd.css")
}
pub fn html() -> &'static str {
include_str!("../ftd.html")
}
pub type Map<T> = std::collections::BTreeMap<String, T>;
#[derive(serde::Deserialize, Debug, PartialEq, Clone, serde::Serialize, Default)]
pub struct Document {
pub html: String,
pub data: ftd::DataDependenciesMap,
pub external_children: ExternalChildrenDependenciesMap,
pub body_events: String,
pub css_collector: String,
}
pub type DataDependenciesMap = ftd::Map<Data>;
#[derive(serde::Deserialize, Debug, PartialEq, Clone, serde::Serialize, Default)]
pub struct Data {
pub value: serde_json::Value,
pub dependencies: ftd::Map<serde_json::Value>,
}
pub type ExternalChildrenDependenciesMap = ftd::Map<Vec<ExternalChildrenCondition>>;
#[derive(serde::Deserialize, Debug, PartialEq, Clone, serde::Serialize, Default)]
pub struct ExternalChildrenCondition {
pub condition: Vec<String>,
pub set_at: String,
}
#[derive(serde::Deserialize, Debug, PartialEq, Clone, serde::Serialize)]
pub enum DependencyType {
Style,
Visible,
Value,
Variable,
}
#[derive(serde::Deserialize, Debug, PartialEq, Clone, serde::Serialize)]
pub struct Dependencies {
pub dependency_type: DependencyType,
pub condition: Option<serde_json::Value>,
pub parameters: ftd::Map<ConditionalValueWithDefault>,
pub remaining: Option<String>,
}
#[derive(serde::Deserialize, Debug, PartialEq, Clone, serde::Serialize, Default)]
pub struct ConditionalValueWithDefault {
pub value: ConditionalValue,
pub default: Option<ConditionalValue>,
}