Sync
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²Π½ΡΡΡΠΈ ΡΠ΅ΡΡΠΈΠΈ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠ°Π»ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
- ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ°ΡΡΠΈΠ½Ρ
ΡΠΎΠ½Π°.
ΠΠΎΠΌΠ°Π½Π΄Ρ
ΠΠΎΠΌΠ°Π½Π΄Π° - ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ Π½Π°Π΄ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠΌ.
ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
- ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°ΡΠ΅Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
- Π±ΡΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ(cmd+z)
ΠΠ΄Π΅Ρ Server Side Model
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» - ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Ρ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ, Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈ Ρ.Π΄., ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΈΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΠΎΡΡ Π² Π±Π΄:
- ΠΊΠΎΠΌΠ°Π½Π΄Π° "ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ»Π΅"/"Π£Π΄Π°Π»ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ" ΠΈ ΠΏΡ. ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΡΠ΅ΡΠ½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
- Ρ.ΠΊ. Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ real-time ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠΈ, ΡΠΈΡΠ»ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌ.
- Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π±Π΄ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ 1-2 ΡΠ΅ΠΊ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ - Π·Π°ΠΏΡΡΠΊ ΠΆΠΈΠ²ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ ΠΌΠ΅Π½ΡΡΡ Π΅Π΅ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡ Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ ΡΠ΅ΡΡΠΈΡΠΌΠΈ.
ΠΠΎΠΏΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ.
Π Π±Π°Π·Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅ΡΠΆΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°
- Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΠΈΡΡΠΎΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΎΡΠΊΠ°ΡΠΈΡΡ
- ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π΅ ΡΠ°ΠΊ Π²Π°ΠΆΠ΅Π½
ΠΠ°ΡΠΈΠ°Π½Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ: base + cmd1 + cmd2 + ...
Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°
- Π½Π΅Π»ΡΠ·Ρ ΠΎΡΠΊΠ°ΡΠΈΡΡ(Π½Π΅Ρ ΠΈΡΡΠΎΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ)
- ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π²Π°ΠΆΠ½Ρ
Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄
Slide
createSlide
{
"id": String,
"index": Number
}
removeSlide
{
"id": String
}
moveSlide
{
"id": String,
"index": Number
}
SlideObject
createObject
{
"id": String,
"slideId": String,
"index": Number
}
removeObject
{
"id": String
}
moveObject
{
"id": String,
"index": Number
}
changeParent
//TODO ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ Ρ changeObjectField?
{
"id": String,
"newParentId": Optional<String>,
"newIndex": Optional<Number>,
}
changeObjectField
type ValueType = 'string' | 'number' | 'objLink' | 'compLink';
{
"id": String,
"field": String,
"data": {
"type": ValueType,
"val": any
}
}
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: data ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠΈΡΠΈΠ², ΡΠ°ΠΊ ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ/ΠΎΠ±ΡΠ΅ΠΊΡ.
createComponent
{
"id": String,
"type": String
}
removeComponent
{
"id": String
}
changeComponentField
{
"id": String,
"field": String,
"data": {
"type": ValueType,
"val": any
}
}
ΠΡΠΈΠΌΠ΅ΡΡ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΡΠ»ΠΎΠΆΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°)
ΠΠ°Π΄ΠΎ ΠΎΡΡΡΠ»Π°ΡΡ ΡΡΠ°Π·Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠΏΠ°ΠΌΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.
ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ½ΠΊΡΡ Π²ΡΡΠ΅, ΡΡΠ°Π·Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π°ΠΉΠ΄Π°
ΠΠ»Π΅ΡΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ΠΠ»Π΅ΡΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ.
ΠΡΠΈ ΡΡΠΎΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΈΡΠ°ΡΡ ΡΡΡΠ»ΠΊΠΈ, ΡΡΠΎ Π²Π»Π΅ΡΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΊΠ°ΠΊΠΈΡ
-ΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
.
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ:
ΡΠ»ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ
ΠΠ°ΠΆΠ΄Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠΏΠΈΡ ΡΠ°ΠΌΠ° ΠΎΡΠΈΡΡΠΈΡ ΡΡΡΠ»ΠΊΠΈ ΠΈ ΡΠ΄Π°Π»ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
- Π½Π°Π΄ΡΠΆΠ½Π΅Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΡΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎ Π²ΡΠ΅ΠΉ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠ΅ΠΉ;
- ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π°Π½Π½ΡΡ
Π³ΠΎΠ½ΡΠ΅ΠΌ ΠΏΠΎ ΡΠ΅ΡΠΈ;
- Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ: ΡΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΠΏΠ°ΡΡΠΈΡΡ Π²ΡΡ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡ;
ΡΠ»ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ + ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ
ΠΠ°ΠΆΠ΄Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΡΠΈΡΠ°Π» ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΎΡ.
Π’ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΡΠΎ-ΡΠΎ Π½Π°ΡΠ°Π»ΠΈ Π΄Π΅Π»Π°ΡΡ Π²Π½ΡΡΡΠΈ ΡΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΡΠΈΡΠ»Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π£Π΄Π°Π»ΠΈΡΡ, ΠΈ Π½Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΎΡΠ°.
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ°ΡΡΠΈΠ½Ρ
ΡΠΎΠ½
- Π±ΠΎΠ»ΡΡΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΏΠΎ ΡΠ΅ΡΠΈ
ΠΠΎΠΏΡΠΎΡΡ
ΠΡΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ = Π±ΡΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄?
ΠΠ΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π±ΡΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π±ΡΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°.
ΠΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
ΡΠΈΠΏΠΎΠ²
TBD