Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qiaqia_qx
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
邱旭
qiaqia_qx
Commits
2c7a7b8c
Commit
2c7a7b8c
authored
Jun 05, 2020
by
haiyoucuv
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
panel
parent
15fc1da5
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
124 additions
and
37 deletions
+124
-37
workspace.xml
.idea/workspace.xml
+30
-29
ExRecordPanel.ts
src/panels/ExRecordPanel.ts
+49
-2
ShopPanel.ts
src/panels/ShopPanel.ts
+20
-2
WareHousePanel.ts
src/panels/WareHousePanel.ts
+22
-3
UILayer.ts
src/parts/UI/UILayer.ts
+3
-1
No files found.
.idea/workspace.xml
View file @
2c7a7b8c
...
...
@@ -2,17 +2,10 @@
<project
version=
"4"
>
<component
name=
"ChangeListManager"
>
<list
default=
"true"
id=
"31be0130-d27d-4740-b668-956a8050e1bf"
name=
"Default Changelist"
comment=
""
>
<change
afterPath=
"$PROJECT_DIR$/resource/taskPanel/task_buy_icon.png"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/.idea/workspace.xml"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/.idea/workspace.xml"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/index.html"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/index.html"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/module/views/Panel.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/module/views/Panel.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/released/resource/res.json"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/released/resource/res.json"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/resource/panel/comm_bg.png"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/resource/panel/comm_bg.png"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/resource/res.json"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/resource/res.json"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/ResJson.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/ResJson.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/const/staticData.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/const/staticData.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/panels/ExSuccessPanel.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/panels/ExSuccessPanel.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/parts/Game/Land.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/parts/Game/Land.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/panels/ExRecordPanel.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/panels/ExRecordPanel.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/panels/ShopPanel.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/panels/ShopPanel.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/panels/WareHousePanel.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/panels/WareHousePanel.ts"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/parts/UI/UILayer.ts"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/parts/UI/UILayer.ts"
afterDir=
"false"
/>
</list>
<option
name=
"SHOW_DIALOG"
value=
"false"
/>
...
...
@@ -120,7 +113,7 @@
<workItem
from=
"1591166639510"
duration=
"12991000"
/>
<workItem
from=
"1591234777751"
duration=
"4647000"
/>
<workItem
from=
"1591239841506"
duration=
"24292000"
/>
<workItem
from=
"1591321317628"
duration=
"1
0825
000"
/>
<workItem
from=
"1591321317628"
duration=
"1
2729
000"
/>
</task>
<task
id=
"LOCAL-00001"
summary=
"1"
>
<created>
1591003912929
</created>
...
...
@@ -185,7 +178,14 @@
<option
name=
"project"
value=
"LOCAL"
/>
<updated>
1591269327197
</updated>
</task>
<option
name=
"localTasksCounter"
value=
"10"
/>
<task
id=
"LOCAL-00010"
summary=
"task"
>
<created>
1591339285033
</created>
<option
name=
"number"
value=
"00010"
/>
<option
name=
"presentableId"
value=
"LOCAL-00010"
/>
<option
name=
"project"
value=
"LOCAL"
/>
<updated>
1591339285033
</updated>
</task>
<option
name=
"localTasksCounter"
value=
"11"
/>
<servers
/>
</component>
<component
name=
"TypeScriptGeneratedFilesManager"
>
...
...
@@ -195,43 +195,44 @@
<MESSAGE
value=
"1"
/>
<MESSAGE
value=
"11"
/>
<MESSAGE
value=
"111"
/>
<option
name=
"LAST_COMMIT_MESSAGE"
value=
"111"
/>
<MESSAGE
value=
"task"
/>
<option
name=
"LAST_COMMIT_MESSAGE"
value=
"task"
/>
</component>
<component
name=
"WindowStateProjectService"
>
<state
x=
"671"
y=
"259"
key=
"#com.intellij.ide.util.MemberChooser"
timestamp=
"15913
2577961
7"
>
<state
x=
"671"
y=
"259"
key=
"#com.intellij.ide.util.MemberChooser"
timestamp=
"15913
4073749
7"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
x=
"671"
y=
"259"
key=
"#com.intellij.ide.util.MemberChooser/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
2577961
7"
/>
<state
x=
"467"
y=
"108"
key=
"CommitChangelistDialog2"
timestamp=
"1591
269326506
"
>
<state
x=
"671"
y=
"259"
key=
"#com.intellij.ide.util.MemberChooser/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
4073749
7"
/>
<state
x=
"467"
y=
"108"
key=
"CommitChangelistDialog2"
timestamp=
"1591
339284264
"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
x=
"466"
y=
"108"
key=
"CommitChangelistDialog2/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1591003912498"
/>
<state
x=
"2182"
y=
"-102"
key=
"CommitChangelistDialog2/37.23.1643.1027/1680.-199.1920.1177@1680.-199.1920.1177"
timestamp=
"1591189619717"
/>
<state
x=
"467"
y=
"108"
key=
"CommitChangelistDialog2/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"1591
269326506
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.bottom"
timestamp=
"15913
38480781
"
>
<state
x=
"467"
y=
"108"
key=
"CommitChangelistDialog2/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"1591
339284264
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.bottom"
timestamp=
"15913
40937796
"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
width=
"499"
height=
"907"
key=
"GridCell.Tab.0.bottom/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1591065953118"
/>
<state
width=
"257"
height=
"1057"
key=
"GridCell.Tab.0.bottom/37.23.1643.1027/1680.-199.1920.1177@1680.-199.1920.1177"
timestamp=
"1591189627828"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.bottom/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
38480781
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.center"
timestamp=
"15913
38480780
"
>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.bottom/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
40937796
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.center"
timestamp=
"15913
40937781
"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
width=
"499"
height=
"907"
key=
"GridCell.Tab.0.center/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1591065953116"
/>
<state
width=
"257"
height=
"1057"
key=
"GridCell.Tab.0.center/37.23.1643.1027/1680.-199.1920.1177@1680.-199.1920.1177"
timestamp=
"1591189627827"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.center/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
38480780
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.left"
timestamp=
"15913
38480780
"
>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.center/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
40937781
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.left"
timestamp=
"15913
40937777
"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
width=
"499"
height=
"907"
key=
"GridCell.Tab.0.left/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1591065953114"
/>
<state
width=
"257"
height=
"1057"
key=
"GridCell.Tab.0.left/37.23.1643.1027/1680.-199.1920.1177@1680.-199.1920.1177"
timestamp=
"1591189627825"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.left/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
38480780
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.right"
timestamp=
"15913
38480780
"
>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.left/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
40937777
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.right"
timestamp=
"15913
40937792
"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
width=
"499"
height=
"907"
key=
"GridCell.Tab.0.right/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1591065953118"
/>
<state
width=
"257"
height=
"1057"
key=
"GridCell.Tab.0.right/37.23.1643.1027/1680.-199.1920.1177@1680.-199.1920.1177"
timestamp=
"1591189627828"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.right/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
38480780
"
/>
<state
width=
"293"
height=
"907"
key=
"GridCell.Tab.0.right/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
40937792
"
/>
<state
x=
"446"
y=
"278"
key=
"IDE.errors.dialog"
timestamp=
"1591150813027"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
...
...
@@ -241,11 +242,11 @@
</state>
<state
x=
"614"
y=
"245"
key=
"RollbackChangesDialog/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1590993046653"
/>
<state
x=
"615"
y=
"245"
key=
"RollbackChangesDialog/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"1591077661188"
/>
<state
x=
"457"
y=
"276"
key=
"Vcs.Push.Dialog.v2"
timestamp=
"1591
26932952
4"
>
<state
x=
"457"
y=
"276"
key=
"Vcs.Push.Dialog.v2"
timestamp=
"1591
33928811
4"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
x=
"2171"
y=
"91"
key=
"Vcs.Push.Dialog.v2/37.23.1643.1027/1680.-199.1920.1177@1680.-199.1920.1177"
timestamp=
"1591189622538"
/>
<state
x=
"457"
y=
"276"
key=
"Vcs.Push.Dialog.v2/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"1591
26932952
4"
/>
<state
x=
"457"
y=
"276"
key=
"Vcs.Push.Dialog.v2/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"1591
33928811
4"
/>
<state
x=
"417"
y=
"141"
key=
"com.intellij.openapi.editor.actions.MultiplePasteAction$ClipboardContentChooser"
timestamp=
"1591269112575"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
...
...
@@ -258,11 +259,11 @@
<screen
x=
"35"
y=
"23"
width=
"1645"
height=
"1027"
/>
</state>
<state
x=
"586"
y=
"314"
key=
"refactoring.ChangeSignatureDialog/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1590980819551"
/>
<state
x=
"523"
y=
"250"
width=
"670"
height=
"676"
key=
"search.everywhere.popup"
timestamp=
"15913
36423130
"
>
<state
x=
"523"
y=
"250"
width=
"670"
height=
"676"
key=
"search.everywhere.popup"
timestamp=
"15913
40914153
"
>
<screen
x=
"37"
y=
"23"
width=
"1643"
height=
"1027"
/>
</state>
<state
x=
"522"
y=
"250"
width=
"670"
height=
"676"
key=
"search.everywhere.popup/35.23.1645.1027/1680.-199.1920.1177@35.23.1645.1027"
timestamp=
"1591066027960"
/>
<state
x=
"2248"
y=
"61"
width=
"783"
height=
"775"
key=
"search.everywhere.popup/37.23.1643.1027/1680.-199.1920.1177@1680.-199.1920.1177"
timestamp=
"1591271608415"
/>
<state
x=
"523"
y=
"250"
width=
"670"
height=
"676"
key=
"search.everywhere.popup/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
36423130
"
/>
<state
x=
"523"
y=
"250"
width=
"670"
height=
"676"
key=
"search.everywhere.popup/37.23.1643.1027/1680.-199.1920.1177@37.23.1643.1027"
timestamp=
"15913
40914153
"
/>
</component>
</project>
\ No newline at end of file
src/panels/ExRecordPanel.ts
View file @
2c7a7b8c
import
{
Panel
}
from
"../../module/views/Panel"
;
import
{
Tool
}
from
"../Tools"
;
import
Sprite
=
FYGE
.
Sprite
;
import
{
layers
}
from
"../../module/views/layers"
;
import
Tween
=
FYGE
.
Tween
;
import
ScrollList
=
FYGE
.
ScrollList
;
import
Container
=
FYGE
.
Container
;
import
IScrollListItem
=
FYGE
.
IScrollListItem
;
export
default
class
ExRecordPanel
extends
Panel
{
get
groupNames
()
{
...
...
@@ -8,15 +13,40 @@ export default class ExRecordPanel extends Panel {
}
closeBtn
:
Sprite
;
scroll
:
ScrollList
;
initUi
()
{
this
.
addChild
(
Tool
.
getSprite
(
"rule_bg.png"
));
this
.
addChild
(
Tool
.
getSprite
(
"comm_bg.png"
))
.
position
.
set
(
0
,
65
);
let
title
=
this
.
addChild
(
Tool
.
getSprite
(
"record_icon.png"
));
title
.
position
.
set
((
this
.
width
-
title
.
width
)
/
2
,
0
);
this
.
closeBtn
=
this
.
addChild
(
Tool
.
getSprite
(
'closeBtn.png'
));
this
.
closeBtn
.
position
.
set
(
600
,
350
);
this
.
closeBtn
.
position
.
set
(
670
,
-
50
);
this
.
scroll
=
this
.
addChild
(
new
ScrollList
(
RecordItem
,
653
,
200
,
654
,
830
));
this
.
scroll
.
position
.
set
((
this
.
width
-
this
.
scroll
.
width
)
/
2
,
210
);
this
.
scroll
.
updateData
([
1
,
2
,
3
,
4
,
5
,
6
]);
}
public
showAni
()
{
if
(
this
.
isShowing
)
return
;
this
.
isShowing
=
true
;
this
.
y
=
this
.
height
;
const
_y
=
layers
.
height
-
this
.
height
+
30
;
Tween
.
get
(
this
)
.
to
({
y
:
_y
},
500
,
FYGE
.
Ease
.
quartOut
)
.
call
(()
=>
{
this
.
isShowing
=
false
;
});
}
start
(
data
)
{
super
.
start
();
}
...
...
@@ -30,3 +60,20 @@ export default class ExRecordPanel extends Panel {
}
}
class
RecordItem
extends
Container
implements
IScrollListItem
{
public
data
:
number
;
public
id
:
number
;
public
initData
(
id
:
number
,
data
:
any
):
void
{
if
(
!
data
)
return
;
}
constructor
()
{
super
();
this
.
addChild
(
Tool
.
getSprite
(
'record_item_bg.png'
));
}
}
src/panels/ShopPanel.ts
View file @
2c7a7b8c
import
{
Panel
}
from
"../../module/views/Panel"
;
import
{
Tool
}
from
"../Tools"
;
import
Sprite
=
FYGE
.
Sprite
;
import
{
layers
}
from
"../../module/views/layers"
;
import
Tween
=
FYGE
.
Tween
;
export
default
class
ShopPanel
extends
Panel
{
get
groupNames
()
{
...
...
@@ -10,11 +12,27 @@ export default class ShopPanel extends Panel {
closeBtn
:
Sprite
;
initUi
()
{
this
.
addChild
(
Tool
.
getSprite
(
"rule_bg.png"
));
this
.
addChild
(
Tool
.
getSprite
(
"comm_bg.png"
))
.
position
.
set
(
0
,
65
);
let
title
=
this
.
addChild
(
Tool
.
getSprite
(
"shop_icon.png"
));
title
.
position
.
set
((
this
.
width
-
title
.
width
)
/
2
,
0
);
this
.
closeBtn
=
this
.
addChild
(
Tool
.
getSprite
(
'closeBtn.png'
));
this
.
closeBtn
.
position
.
set
(
6
00
,
3
50
);
this
.
closeBtn
.
position
.
set
(
6
70
,
-
50
);
}
public
showAni
()
{
if
(
this
.
isShowing
)
return
;
this
.
isShowing
=
true
;
this
.
y
=
this
.
height
;
const
_y
=
layers
.
height
-
this
.
height
+
30
;
Tween
.
get
(
this
)
.
to
({
y
:
_y
},
500
,
FYGE
.
Ease
.
quartOut
)
.
call
(()
=>
{
this
.
isShowing
=
false
;
});
}
start
(
data
)
{
...
...
src/panels/WareHousePanel.ts
View file @
2c7a7b8c
import
{
Panel
}
from
"../../module/views/Panel"
;
import
{
Tool
}
from
"../Tools"
;
import
Sprite
=
FYGE
.
Sprite
;
import
{
layers
}
from
"../../module/views/layers"
;
import
Tween
=
FYGE
.
Tween
;
import
Ease
=
FYGE
.
Ease
;
export
default
class
WareHousePanel
extends
Panel
{
get
groupNames
()
{
...
...
@@ -10,13 +13,29 @@ export default class WareHousePanel extends Panel {
closeBtn
:
Sprite
;
initUi
()
{
this
.
addChild
(
Tool
.
getSprite
(
"rule_bg.png"
));
this
.
closeBtn
=
this
.
addChild
(
Tool
.
getSprite
(
'closeBtn.png'
));
this
.
closeBtn
.
position
.
set
(
600
,
350
);
this
.
addChild
(
Tool
.
getSprite
(
"comm_bg.png"
))
.
position
.
set
(
0
,
65
);
let
title
=
this
.
addChild
(
Tool
.
getSprite
(
"wareHouse_icon.png"
));
title
.
position
.
set
((
this
.
width
-
title
.
width
)
/
2
,
0
);
this
.
closeBtn
=
this
.
addChild
(
Tool
.
getSprite
(
'closeBtn.png'
));
this
.
closeBtn
.
position
.
set
(
670
,
-
50
);
}
public
showAni
()
{
if
(
this
.
isShowing
)
return
;
this
.
isShowing
=
true
;
this
.
y
=
this
.
height
;
const
_y
=
layers
.
height
-
this
.
height
+
30
;
Tween
.
get
(
this
)
.
to
({
y
:
_y
},
500
,
Ease
.
quartOut
)
.
call
(()
=>
{
this
.
isShowing
=
false
;
});
}
start
(
data
)
{
super
.
start
();
}
...
...
src/parts/UI/UILayer.ts
View file @
2c7a7b8c
...
...
@@ -9,6 +9,7 @@ import RulePanel from "../../panels/RulePanel";
import
TaskPanel
from
"../../panels/TaskPanel"
;
import
WareHousePanel
from
"../../panels/WareHousePanel"
;
import
ShopPanel
from
"../../panels/ShopPanel"
;
import
ExRecordPanel
from
"../../panels/ExRecordPanel"
;
export
class
UILayer
extends
Container
{
...
...
@@ -64,7 +65,8 @@ export class UILayer extends Container {
break
;
case
this
.
ruleBtn
:
console
.
log
(
'点击了规则'
);
PanelCtrl
.
instance
.
show
(
RulePanel
);
// PanelCtrl.instance.show(RulePanel);
PanelCtrl
.
instance
.
show
(
ExRecordPanel
);
break
;
case
this
.
adBtn
:
console
.
log
(
'点击了广告'
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment