1- import { loadLevel } from "./index" ;
2- import { block } from "../domUtils" ;
1+ import { loadLevel , updateGrid } from "./index" ;
2+ import { block , getDummyForm , detach } from "../domUtils" ;
33import { enableItem } from "./card/item" ;
4+ import { addChange } from "./changes" ;
5+ import { Toast } from "../toast/index" ;
46
57function getPropertyBlock ( classData , classBlockName , classBlockPropName ) {
6- let prop = classData [ classBlockName ] [ classBlockPropName ] ,
8+ let div = block ( `div` , `item` ) ,
9+ prop = classData [ classBlockName ] [ classBlockPropName ] ,
710 item = block ( `div` , `header` ) ,
811 iconBlock = block ( `div` , `icons` ) ,
912 icon = block ( `div` , `icon ${ prop [ "Private" ] ? "private" : "public" } ` ) ,
@@ -24,7 +27,37 @@ function getPropertyBlock (classData, classBlockName, classBlockPropName) {
2427 }
2528 item . appendChild ( text ) ;
2629 enableItem ( { headerElement : item , classData, classBlockName, classBlockPropName} ) ;
27- return item ;
30+ div . appendChild ( item ) ;
31+ return div ;
32+ }
33+
34+ function getControls ( body , classData , classBlockName ) {
35+ let controls = block ( `div` , `controls` ) ,
36+ add = block ( `div` , `interactive normal icon add` ) ,
37+ nameInput = block ( `input` ) ;
38+ nameInput . type = "text" ;
39+ controls . appendChild ( add ) ;
40+ add . addEventListener ( `click` , ( ) => {
41+ let form = getDummyForm ( ) ;
42+ nameInput . style . width = "0" ;
43+ nameInput . value = "TestProperty" ;
44+ form . appendChild ( nameInput ) ;
45+ setTimeout ( ( ) => nameInput . style . width = "150px" , 1 ) ;
46+ controls . removeChild ( add ) ;
47+ controls . appendChild ( form ) ;
48+ form . addEventListener ( `submit` , ( ) => {
49+ let newProp = nameInput . value ,
50+ path = [ classData [ `Name` ] , classBlockName , newProp ] ;
51+ addChange ( path . concat ( `$add` ) , true ) ;
52+ addChange ( path . concat ( `Name` ) , newProp ) ;
53+ classData [ classBlockName ] [ newProp ] = { Name : newProp } ;
54+ body . appendChild ( getPropertyBlock ( classData , classBlockName , newProp ) ) ;
55+ detach ( form ) ;
56+ controls . appendChild ( add ) ;
57+ } ) ;
58+ } ) ;
59+
60+ return controls ;
2861}
2962
3063/**
@@ -35,19 +68,20 @@ function getPropertyBlock (classData, classBlockName, classBlockPropName) {
3568 */
3669function getBlock ( classBlockName , classData ) {
3770
38- let section = block ( `div` , `section` ) , body , header ;
71+ let section = block ( `div` , `section` ) , body ;
72+ //for (let classBlockPropName in classData[classBlockName]) {
73+ let header = block ( `div` , `header` ) ,
74+ span = block ( `span` , `title` ) ;
75+ body = block ( `div` , `body` ) ;
76+ header . appendChild ( getControls ( body , classData , classBlockName ) ) ;
77+ header . appendChild ( span ) ;
78+ span . textContent = classBlockName ;
79+ section . appendChild ( header ) ;
80+ section . appendChild ( body ) ;
81+ //break;
82+ //}
3983 for ( let classBlockPropName in classData [ classBlockName ] ) {
40- header = block ( `div` , `header` ) ;
41- header . textContent = classBlockName ;
42- body = block ( `div` , `body` ) ;
43- section . appendChild ( header ) ;
44- section . appendChild ( body ) ;
45- break ;
46- }
47- for ( let classBlockPropName in classData [ classBlockName ] ) {
48- let div = block ( `div` , `item` ) ;
49- div . appendChild ( getPropertyBlock ( classData , classBlockName , classBlockPropName ) ) ;
50- body . appendChild ( div ) ;
84+ body . appendChild ( getPropertyBlock ( classData , classBlockName , classBlockPropName ) ) ;
5185 }
5286 return section ;
5387
@@ -59,30 +93,48 @@ function getBlock (classBlockName, classData) {
5993 * @returns {HTMLElement }
6094 */
6195export function getCardElement ( data ) {
62- let card = block ( `div` , `card ${ data [ "_type" ] } ` ) ,
96+ let type = data [ "_type" ] ,
97+ card = block ( `div` , `card ${ type } ` ) ,
6398 head = block ( `div` , `head` ) ,
99+ controls = block ( `div` , `controls` ) ,
100+ del = block ( `div` , `interactive medium icon delete` ) ,
64101 headIcon = block ( `div` , `cardIcon ${ data [ "ClassType" ] || "" } ` ) ,
65102 header = block ( `div` , `header` ) ;
66103
67104 header . textContent = data [ "name" ] ;
105+ controls . appendChild ( del ) ;
106+ if ( type === "class" )
107+ head . appendChild ( controls ) ;
68108 head . appendChild ( headIcon ) ;
69109 head . appendChild ( header ) ;
70110 card . appendChild ( head ) ;
71- //enableItem(head, data);
72111
73- card . appendChild ( getBlock ( "Parameters" , data ) ) ;
74- card . appendChild ( getBlock ( "Properties " , data ) ) ;
75- card . appendChild ( getBlock ( "Indices " , data ) ) ;
76- card . appendChild ( getBlock ( "Methods " , data ) ) ;
77- card . appendChild ( getBlock ( "Queries " , data ) ) ;
78- card . appendChild ( getBlock ( "XDatas " , data ) ) ;
79-
80- if ( data [ "_type" ] === "package" ) {
112+ if ( type === "class" ) {
113+ card . appendChild ( getBlock ( "Parameters " , data ) ) ;
114+ card . appendChild ( getBlock ( "Properties " , data ) ) ;
115+ card . appendChild ( getBlock ( "Indices " , data ) ) ;
116+ card . appendChild ( getBlock ( "Methods " , data ) ) ;
117+ card . appendChild ( getBlock ( "Queries " , data ) ) ;
118+ card . appendChild ( getBlock ( "XDatas" , data ) ) ;
119+ } else if ( type === "package" ) {
81120 card . addEventListener ( "click" , ( ) => {
82121 loadLevel ( data [ "fullName" ] ) ;
83122 } ) ;
84123 return card ;
85124 }
86125
126+ let lastTimeDelClicked = 0 ;
127+ del . addEventListener ( `click` , e => e . stopPropagation ( ) ) ;
128+ del . addEventListener ( `click` , ( ) => {
129+ let delta = ( - lastTimeDelClicked + ( lastTimeDelClicked = ( new Date ( ) ) . getTime ( ) ) ) ;
130+ if ( delta > 5000 ) { // > 5 sec - show message "click again to delete"
131+ new Toast ( Toast . TYPE_INFO , `Click again to delete` ) ;
132+ } else { // delete
133+ addChange ( [ data [ "Name" ] ] . concat ( `$delete` ) , true ) ;
134+ detach ( card ) ;
135+ updateGrid ( ) ;
136+ }
137+ } ) ;
138+
87139 return card ;
88140}
0 commit comments