@@ -107,46 +107,80 @@ Discourse.Dialect.on("register", function(event) {
107107 @return {Array } the JsonML containing the markup or undefined if nothing changed.
108108 @namespace Discourse.Dialect
109109 **/
110- dialect . inline [ "[quote=" ] = function bbcodeQuote ( text , orig_match ) {
111- var bbcodePattern = new RegExp ( "\\[quote=?([^\\[\\]]+)?\\]([\\s\\S]*?)\\[\\/quote\\]" , "igm" ) ,
112- m = bbcodePattern . exec ( text ) ;
110+ dialect . block [ 'quote' ] = function bbcodeQuote ( block , next ) {
111+ var m = new RegExp ( "\\[quote=?([^\\[\\]]+)?\\]([\\s\\S]*)" , "igm" ) . exec ( block ) ;
112+ if ( m ) {
113+ var paramsString = m [ 1 ] . replace ( / \" / g, '' ) ,
114+ params = { 'class' : 'quote' } ,
115+ paramsSplit = paramsString . split ( / \, * / ) ,
116+ username = paramsSplit [ 0 ] ,
117+ opts = dialect . options ,
118+ startPos = block . indexOf ( m [ 0 ] ) ,
119+ leading ,
120+ quoteContents = [ ] ,
121+ result = [ ] ;
122+
123+ if ( startPos > 0 ) {
124+ leading = block . slice ( 0 , startPos ) ;
125+
126+ var para = [ 'p' ] ;
127+ this . processInline ( leading ) . forEach ( function ( l ) {
128+ para . push ( l ) ;
129+ } ) ;
130+
131+ result . push ( para ) ;
132+ }
113133
114- if ( ! m ) { return ; }
115- var paramsString = m [ 1 ] . replace ( / \" / g, '' ) ,
116- params = { 'class' : 'quote' } ,
117- paramsSplit = paramsString . split ( / \, * / ) ,
118- username = paramsSplit [ 0 ] ,
119- opts = dialect . options ;
120-
121- paramsSplit . forEach ( function ( p , i ) {
122- if ( i > 0 ) {
123- var assignment = p . split ( ':' ) ;
124- if ( assignment [ 0 ] && assignment [ 1 ] ) {
125- params [ 'data-' + assignment [ 0 ] ] = assignment [ 1 ] . trim ( ) ;
134+ paramsSplit . forEach ( function ( p , i ) {
135+ if ( i > 0 ) {
136+ var assignment = p . split ( ':' ) ;
137+ if ( assignment [ 0 ] && assignment [ 1 ] ) {
138+ params [ 'data-' + assignment [ 0 ] ] = assignment [ 1 ] . trim ( ) ;
139+ }
126140 }
141+ } ) ;
142+
143+ var avatarImg ;
144+ if ( opts . lookupAvatarByPostNumber ) {
145+ // client-side, we can retrieve the avatar from the post
146+ var postNumber = parseInt ( params [ 'data-post' ] , 10 ) ;
147+ avatarImg = opts . lookupAvatarByPostNumber ( postNumber ) ;
148+ } else if ( opts . lookupAvatar ) {
149+ // server-side, we need to lookup the avatar from the username
150+ avatarImg = opts . lookupAvatar ( username ) ;
127151 }
128- } ) ;
129152
130- var avatarImg ;
131- if ( opts . lookupAvatarByPostNumber ) {
132- // client-side, we can retrieve the avatar from the post
133- var postNumber = parseInt ( params [ 'data-post' ] , 10 ) ;
134- avatarImg = opts . lookupAvatarByPostNumber ( postNumber ) ;
135- } else if ( opts . lookupAvatar ) {
136- // server-side, we need to lookup the avatar from the username
137- avatarImg = opts . lookupAvatar ( username ) ;
138- }
153+ if ( m [ 2 ] ) { next . unshift ( MD . mk_block ( m [ 2 ] ) ) ; }
139154
140- var quote = [ 'aside' , params ,
141- [ 'div' , { 'class' : 'title' } ,
142- [ 'div' , { 'class' : 'quote-controls' } ] ,
143- avatarImg ? avatarImg + "\n" : "" ,
144- I18n . t ( 'user.said' , { username : username } )
145- ] ,
146- [ 'blockquote' ] . concat ( this . processInline ( m [ 2 ] ) )
147- ] ;
155+ while ( next . length > 0 ) {
156+ var b = next . shift ( ) ,
157+ n = b . match ( / ( [ \s \S ] * ) \[ \/ q u o t e \] ( [ \s \S ] * ) / m) ;
148158
149- return [ m [ 0 ] . length , quote ] ;
159+ if ( n ) {
160+ if ( n [ 2 ] ) {
161+ next . unshift ( MD . mk_block ( n [ 2 ] ) ) ;
162+ }
163+ quoteContents . push ( n [ 1 ] ) ;
164+ break ;
165+ } else {
166+ quoteContents . push ( b ) ;
167+ }
168+ }
169+
170+ var contents = this . processInline ( quoteContents . join ( " \n \n" ) ) ;
171+ contents . unshift ( 'blockquote' ) ;
172+
173+
174+ result . push ( [ 'p' , [ 'aside' , params ,
175+ [ 'div' , { 'class' : 'title' } ,
176+ [ 'div' , { 'class' : 'quote-controls' } ] ,
177+ avatarImg ? avatarImg + "\n" : "" ,
178+ I18n . t ( 'user.said' , { username : username } )
179+ ] ,
180+ contents
181+ ] ] ) ;
182+ return result ;
183+ }
150184 } ;
151185
152186} ) ;
0 commit comments