@@ -218,8 +218,23 @@ module.exports = function (sequelize, DataTypes) {
218218 return callback ( null , null ) ;
219219 } ) ;
220220 } ,
221+ parseNoteInfo : function ( body ) {
222+ var meta = null ;
223+ try {
224+ var obj = metaMarked ( body ) ;
225+ body = obj . markdown ;
226+ meta = obj . meta ;
227+ } catch ( err ) {
228+ //na
229+ }
230+ if ( ! meta ) meta = { } ;
231+ var $ = cheerio . load ( md . render ( body ) ) ;
232+ return {
233+ title : Note . extractNoteTitle ( meta , $ ) ,
234+ tags : Note . extractNoteTags ( meta , $ )
235+ } ;
236+ } ,
221237 parseNoteTitle : function ( body ) {
222- var title = "" ;
223238 var meta = null ;
224239 try {
225240 var obj = metaMarked ( body ) ;
@@ -229,10 +244,14 @@ module.exports = function (sequelize, DataTypes) {
229244 //na
230245 }
231246 if ( ! meta ) meta = { } ;
247+ var $ = cheerio . load ( md . render ( body ) ) ;
248+ return Note . extractNoteTitle ( meta , $ ) ;
249+ } ,
250+ extractNoteTitle : function ( meta , $ ) {
251+ var title = "" ;
232252 if ( meta . title && ( typeof meta . title == "string" || typeof meta . title == "number" ) ) {
233253 title = meta . title ;
234254 } else {
235- var $ = cheerio . load ( md . render ( body ) ) ;
236255 var h1s = $ ( "h1" ) ;
237256 if ( h1s . length > 0 && h1s . first ( ) . text ( ) . split ( '\n' ) . length == 1 )
238257 title = S ( h1s . first ( ) . text ( ) ) . stripTags ( ) . s ;
@@ -250,6 +269,40 @@ module.exports = function (sequelize, DataTypes) {
250269 title = ! title || title == "Untitled" ? "HackMD - Collaborative markdown notes" : title + " - HackMD" ;
251270 return title ;
252271 } ,
272+ extractNoteTags : function ( meta , $ ) {
273+ var tags = [ ] ;
274+ var rawtags = [ ] ;
275+ if ( meta . tags && ( typeof meta . tags == "string" || typeof meta . tags == "number" ) ) {
276+ var metaTags = ( '' + meta . tags ) . split ( ',' ) ;
277+ for ( var i = 0 ; i < metaTags . length ; i ++ ) {
278+ var text = metaTags [ i ] . trim ( ) ;
279+ if ( text ) rawtags . push ( text ) ;
280+ }
281+ } else {
282+ var h6s = $ ( "h6" ) ;
283+ h6s . each ( function ( key , value ) {
284+ if ( / ^ t a g s / gmi. test ( $ ( value ) . text ( ) ) ) {
285+ var codes = $ ( value ) . find ( "code" ) ;
286+ for ( var i = 0 ; i < codes . length ; i ++ ) {
287+ var text = $ ( codes [ i ] ) . html ( ) . trim ( ) ;
288+ if ( text ) rawtags . push ( text ) ;
289+ }
290+ }
291+ } ) ;
292+ }
293+ for ( var i = 0 ; i < rawtags . length ; i ++ ) {
294+ var found = false ;
295+ for ( var j = 0 ; j < tags . length ; j ++ ) {
296+ if ( tags [ j ] == rawtags [ i ] ) {
297+ found = true ;
298+ break ;
299+ }
300+ }
301+ if ( ! found )
302+ tags . push ( rawtags [ i ] ) ;
303+ }
304+ return tags ;
305+ } ,
253306 parseMeta : function ( meta ) {
254307 var _meta = { } ;
255308 if ( meta ) {
0 commit comments