66 * @description Comment management unit for CCL
77 */
88/// <reference path="Core.d.ts" />
9+ class ScrollCommentFactory implements ICommentFactory {
10+ public create ( manager :ICommentManager , data :Object ) :ScrollComment {
11+ return new ScrollComment ( manager , data ) ;
12+ }
13+ }
14+
15+ class CanvasCommentFactory implements ICommentFactory {
16+ public canvas :HTMLCanvasElement ;
17+ constructor ( canvas :HTMLCanvasElement ) {
18+ this . canvas = canvas ;
19+ }
20+ public create ( manager :ICommentManager , data :Object ) :IComment {
21+ return null ;
22+ }
23+ }
24+
925class CommentManager implements ICommentManager {
1026 private _width :number = 0 ;
1127 private _height :number = 0 ;
@@ -22,7 +38,12 @@ class CommentManager implements ICommentManager {
2238 } ,
2339 "scroll" : {
2440 "scale" : 1 ,
25- "opacity" : 1
41+ "opacity" : 1 ,
42+ "factory" :new ScrollCommentFactory ( )
43+ } ,
44+ "scripting" :{
45+ "mode" :[ 8 ] ,
46+ "engine" : null
2647 }
2748 } ;
2849 public timeline :Array < Object > = [ ] ;
@@ -88,14 +109,31 @@ class CommentManager implements ICommentManager {
88109 * Clears all comments managed from the stage
89110 */
90111 public clear ( ) :void {
91-
112+ while ( this . runline . length > 0 ) {
113+ this . runline [ 0 ] . finish ( ) ;
114+ }
92115 }
93116
94117 /**
95118 * Sends a comment onto the stage
96119 * @param data - abstract comment data
97120 */
98121 public send ( data :Object ) :void {
122+ if ( ! data . hasOwnProperty ( "mode" ) ) {
123+ data [ "mode" ] = 1 ;
124+ }
125+ if ( this . options . scripting . mode . indexOf ( data [ "mode" ] ) >= 0 ) {
126+ /** Scripting comment **/
127+ if ( this . options . scripting . engine !== null ) {
128+ this . options . scripting . engine . eval ( data [ "code" ] ) ;
129+ }
130+ }
131+ var cmt :IComment ;
132+ if ( data [ "mode" ] === 1 || data [ "mode" ] === 2 || data [ "mode" ] === 6 ) {
133+ cmt = this . options . scroll . factory . create ( this , data ) ;
134+ } else {
135+ cmt = new CoreComment ( this , data ) ;
136+ }
99137
100138 }
101139
@@ -151,7 +189,10 @@ class CommentManager implements ICommentManager {
151189 }
152190
153191 public finish ( cmt :IComment ) :void {
154-
192+ var index :number = this . runline . indexOf ( cmt ) ;
193+ if ( index >= 0 ) {
194+ this . runline . splice ( index , 1 ) ;
195+ }
155196 }
156197
157198}
0 commit comments