{"version":3,"sources":["./src/app/article/article-routing.module.ts","./src/app/article/article.component.ts","./src/app/article/article.component.html","./node_modules/marked/lib/marked.js","./src/app/article/article-comment.component.ts","./src/app/article/article-comment.component.html","./src/app/article/article.module.ts","./src/app/article/markdown.pipe.ts","./src/app/article/article-resolver.service.ts"],"names":[],"mappings":"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B,0DAA0B;QAA1B,uFAA0B;QAK1B,0DAAmB;QAAnB,gFAAmB;QAEnB,0DAA4D;QAA5D,qIAA4D;QAAsB,0DAA8B;QAA9B,sGAA8B;QAU9G,0DAAmB;QAAnB,+EAAmB;QAqBnB,0DAAoB;QAApB,gFAAoB;QAKJ,0DAAW;QAAX,iFAAW;;;;;;;;;;;;;ACtHzC;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa,EAAE;AACf;AACA,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG;AACnD,kBAAkB,IAAI;AACtB;AACA,mBAAmB,IAAI;AACvB,0CAA0C,GAAG;AAC7C,kDAAkD,GAAG,sBAAsB,GAAG;AAC9E,WAAW,IAAI;AACf;AACA,gCAAgC,GAAG;AACnC,qDAAqD,IAAI;AACzD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,GAAG,SAAS,GAAG,WAAW,GAAG;AACrE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;;AAEA,oBAAoB;AACpB,iBAAiB,GAAG,GAAG,GAAG;AAC1B;AACA,kBAAkB,IAAI;AACtB,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;;AAEA,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D,+BAA+B,IAAI;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,GAAG;AACb;AACA,sCAAsC,GAAG;AACzC;;AAEA,yCAAyC,KAAK;AAC9C,2CAA2C,EAAE,kCAAkC,KAAK,6CAA6C,KAAK;;AAEtI;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAwB;;AAExB;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,0BAA0B,oCAAoC,UAAU;AACxE;AACA;AACA;AACA,uEAAuE,IAAI;AAC3E;AACA,CAAC;;AAED;AACA;AACA;;AAEA,wBAAwB;AACxB,gCAAgC,GAAG;AACnC,wCAAwC,GAAG;AAC3C,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB,6BAA6B;AAC1D;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,8BAA8B;AAC/C;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA,iBAAiB,6BAA6B;AAC9C;;AAEA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,kBAAkB;AACpD,wBAAwB;AACxB,wBAAwB;AACxB,0BAA0B;AAC1B,yBAAyB;AACzB;;AAEA;AACA;AACA,8DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,sBAAsB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,4BAA4B;;AAE9C;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA,UAAU,mBAAmB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;A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","file":"article-article-module-es2015.js","sourcesContent":["import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { ArticleComponent } from './article.component';\nimport { ArticleResolver } from './article-resolver.service';\n\nconst routes: Routes = [\n {\n path: ':slug',\n component: ArticleComponent,\n resolve: {\n article: ArticleResolver\n }\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class ArticleRoutingModule {}\n","import { Component, OnInit } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport {\n Article,\n ArticlesService,\n Comment,\n CommentsService,\n User,\n UserService\n} from '../core';\n\n@Component({\n selector: 'app-article-page',\n templateUrl: './article.component.html'\n})\nexport class ArticleComponent implements OnInit {\n article: Article;\n currentUser: User;\n canModify: boolean;\n comments: Comment[];\n commentControl = new FormControl();\n commentFormErrors = {};\n isSubmitting = false;\n isDeleting = false;\n\n constructor(\n private route: ActivatedRoute,\n private articlesService: ArticlesService,\n private commentsService: CommentsService,\n private router: Router,\n private userService: UserService,\n ) { }\n\n ngOnInit() {\n // Retreive the prefetched article\n this.route.data.subscribe(\n (data: { article: Article }) => {\n this.article = data.article;\n\n // Load the comments on this article\n this.populateComments();\n }\n );\n\n // Load the current user's data\n this.userService.currentUser.subscribe(\n (userData: User) => {\n this.currentUser = userData;\n\n this.canModify = (this.currentUser.username === this.article.author.username);\n }\n );\n }\n\n onToggleFavorite(favorited: boolean) {\n this.article.favorited = favorited;\n\n if (favorited) {\n this.article.favoritesCount++;\n } else {\n this.article.favoritesCount--;\n }\n }\n\n onToggleFollowing(following: boolean) {\n this.article.author.following = following;\n }\n\n deleteArticle() {\n this.isDeleting = true;\n\n this.articlesService.destroy(this.article.slug)\n .subscribe(\n success => {\n this.router.navigateByUrl('/');\n }\n );\n }\n\n populateComments() {\n this.commentsService.getAll(this.article.slug)\n .subscribe(comments => this.comments = comments);\n }\n\n addComment() {\n this.isSubmitting = true;\n this.commentFormErrors = {};\n\n const commentBody = this.commentControl.value;\n this.commentsService\n .add(this.article.slug, commentBody)\n .subscribe(\n comment => {\n this.comments.unshift(comment);\n this.commentControl.reset('');\n this.isSubmitting = false;\n },\n errors => {\n this.isSubmitting = false;\n this.commentFormErrors = errors;\n }\n );\n }\n\n onDeleteComment(comment) {\n this.commentsService.destroy(comment.id, this.article.slug)\n .subscribe(\n success => {\n this.comments = this.comments.filter((item) => item !== comment);\n }\n );\n }\n\n}\n","
\n\n
\n
\n

{{ article.title }}

\n\n \n\n \n \n Edit Article\n \n\n \n \n\n \n \n \n\n \n {{ article.favorited ? 'Unfavorite' : 'Favorite' }} Article ({{ article.favoritesCount }})\n \n \n\n \n
\n
\n\n
\n\n
\n
\n\n
\n\n
    \n
  • \n {{ tag }}\n
  • \n
\n\n
\n
\n\n
\n\n
\n \n\n \n \n Edit Article\n \n\n \n \n\n \n \n \n\n \n {{ article.favorited ? 'Unfavorite' : 'Favorite' }} Article ({{ article.favoritesCount }})\n \n \n\n \n
\n\n
\n
\n\n
\n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n\n
\n Sign in or sign up to add comments on this article.\n
\n\n \n \n\n
\n
\n\n
\n
\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n;(function(root) {\n'use strict';\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: noop,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n nptable: noop,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n def: /^ {0,3}\\[(label)\\]: *\\n? *]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n table: noop,\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n paragraph: /^([^\\n]+(?:\\n?(?!hr|heading|lheading| {0,3}>|tag)[^\\n]+)+)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"|[^\"]|\"[^\"\\n]*\")*\"|'\\n?(?:[^'\\n]+\\n?)*'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\nblock.item = edit(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b';\n\nblock.html = edit(block.html)\n .replace('comment', //)\n .replace('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n .replace('closing', /\\s]*)*?\\/?>/)\n .replace(/tag/g, block._tag)\n .getRegex();\n\nblock.paragraph = edit(block.paragraph)\n .replace('hr', block.hr)\n .replace('heading', block.heading)\n .replace('lheading', block.lheading)\n .replace('tag', '<' + block._tag)\n .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]*?)\\n? *\\1 *(?:\\n+|$)/,\n paragraph: /^/,\n heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\n});\n\nblock.gfm.paragraph = edit(block.paragraph)\n .replace('(?!', '(?!'\n + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|'\n + block.list.source.replace('\\\\1', '\\\\3') + '|')\n .getRegex();\n\n/**\n * GFM + Tables Block Grammar\n */\n\nblock.tables = merge({}, block.gfm, {\n nptable: /^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,\n table: /^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/\n});\n\n/**\n * Block Lexer\n */\n\nfunction Lexer(options) {\n this.tokens = [];\n this.tokens.links = {};\n this.options = options || marked.defaults;\n this.rules = block.normal;\n\n if (this.options.gfm) {\n if (this.options.tables) {\n this.rules = block.tables;\n } else {\n this.rules = block.gfm;\n }\n }\n}\n\n/**\n * Expose Block Rules\n */\n\nLexer.rules = block;\n\n/**\n * Static Lex Method\n */\n\nLexer.lex = function(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n};\n\n/**\n * Preprocessing\n */\n\nLexer.prototype.lex = function(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\u2424/g, '\\n');\n\n return this.token(src, true);\n};\n\n/**\n * Lexing\n */\n\nLexer.prototype.token = function(src, top) {\n src = src.replace(/^ +$/gm, '');\n var next,\n loose,\n cap,\n bull,\n b,\n item,\n space,\n i,\n tag,\n l,\n isordered;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n text: !this.options.pedantic\n ? cap.replace(/\\n+$/, '')\n : cap\n });\n continue;\n }\n\n // fences (gfm)\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2],\n text: cap[3] || ''\n });\n continue;\n }\n\n // heading\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n }\n\n // table no leading pipe (gfm)\n if (top && (cap = this.rules.nptable.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i].split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // hr\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n }\n\n // blockquote\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n\n this.tokens.push({\n type: 'blockquote_start'\n });\n\n cap = cap[0].replace(/^ *> ?/gm, '');\n\n // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n this.token(cap, top);\n\n this.tokens.push({\n type: 'blockquote_end'\n });\n\n continue;\n }\n\n // list\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n isordered = bull.length > 1;\n\n this.tokens.push({\n type: 'list_start',\n ordered: isordered,\n start: isordered ? +bull : ''\n });\n\n // Get each top-level item.\n cap = cap[0].match(this.rules.item);\n\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i];\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (this.options.smartLists && i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n if (bull !== b && !(bull.length > 1 && b.length > 1)) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n this.tokens.push({\n type: loose\n ? 'loose_item_start'\n : 'list_item_start'\n });\n\n // Recurse.\n this.token(item, false);\n\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n\n continue;\n }\n\n // html\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n });\n continue;\n }\n\n // def\n if (top && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n tag = cap[1].toLowerCase();\n if (!this.tokens.links[tag]) {\n this.tokens.links[tag] = {\n href: cap[2],\n title: cap[3]\n };\n }\n continue;\n }\n\n // table (gfm)\n if (top && (cap = this.rules.table.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/(?: *\\| *)?\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i]\n .replace(/^ *\\| *| *\\| *$/g, '')\n .split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // lheading\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2] === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n }\n\n // top-level paragraph\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n });\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n};\n\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noop,\n tag: /^|^<\\/?[a-zA-Z0-9\\-]+(?:\"[^\"]*\"|'[^']*'|\\s[^<'\">\\/\\s]*)*?\\/?>/,\n link: /^!?\\[(inside)\\]\\(href\\)/,\n reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\n nolink: /^!?\\[((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\]/,\n strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\n em: /^_([^\\s_](?:[^_]|__)+?[^\\s_])_\\b|^\\*((?:\\*\\*|[^*])+?)\\*(?!\\*)/,\n code: /^(`+)\\s*([\\s\\S]*?[^`]?)\\s*\\1(?!`)/,\n br: /^ {2,}\\n(?!\\s*$)/,\n del: noop,\n text: /^[\\s\\S]+?(?=[\\\\?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\n\ninline.link = edit(inline.link)\n .replace('inside', inline._inside)\n .replace('href', inline._href)\n .getRegex();\n\ninline.reflink = edit(inline.reflink)\n .replace('inside', inline._inside)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('email', inline._email)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\n text: edit(inline.text)\n .replace(']|', '~]|')\n .replace('|', '|https?://|ftp://|www\\\\.|[a-zA-Z0-9.!#$%&\\'*+/=?^_`{\\\\|}~-]+@|')\n .getRegex()\n});\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text).replace('{2,}', '*').getRegex()\n});\n\n/**\n * Inline Lexer & Compiler\n */\n\nfunction InlineLexer(links, options) {\n this.options = options || marked.defaults;\n this.links = links;\n this.rules = inline.normal;\n this.renderer = this.options.renderer || new Renderer();\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n } else if (this.options.pedantic) {\n this.rules = inline.pedantic;\n }\n}\n\n/**\n * Expose Inline Rules\n */\n\nInlineLexer.rules = inline;\n\n/**\n * Static Lexing/Compiling Method\n */\n\nInlineLexer.output = function(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n};\n\n/**\n * Lexing/Compiling\n */\n\nInlineLexer.prototype.output = function(src) {\n var out = '',\n link,\n text,\n href,\n cap;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += cap[1];\n continue;\n }\n\n // autolink\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = escape(this.mangle(cap[1]));\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // url (gfm)\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n cap[0] = this.rules._backpedal.exec(cap[0])[0];\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // tag\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^/i.test(cap[0])) {\n this.inLink = false;\n }\n src = src.substring(cap[0].length);\n out += this.options.sanitize\n ? this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0])\n : cap[0]\n continue;\n }\n\n // link\n if (cap = this.rules.link.exec(src)) {\n src = src.substring(cap[0].length);\n this.inLink = true;\n out += this.outputLink(cap, {\n href: cap[2],\n title: cap[3]\n });\n this.inLink = false;\n continue;\n }\n\n // reflink, nolink\n if ((cap = this.rules.reflink.exec(src))\n || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n }\n\n // strong\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // em\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2].trim(), true));\n continue;\n }\n\n // br\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n }\n\n // del (gfm)\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n};\n\n/**\n * Compile Link\n */\n\nInlineLexer.prototype.outputLink = function(cap, link) {\n var href = escape(link.href),\n title = link.title ? escape(link.title) : null;\n\n return cap[0].charAt(0) !== '!'\n ? this.renderer.link(href, title, this.output(cap[1]))\n : this.renderer.image(href, title, escape(cap[1]));\n};\n\n/**\n * Smartypants Transformations\n */\n\nInlineLexer.prototype.smartypants = function(text) {\n if (!this.options.smartypants) return text;\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n};\n\n/**\n * Mangle Links\n */\n\nInlineLexer.prototype.mangle = function(text) {\n if (!this.options.mangle) return text;\n var out = '',\n l = text.length,\n i = 0,\n ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n};\n\n/**\n * Renderer\n */\n\nfunction Renderer(options) {\n this.options = options || {};\n}\n\nRenderer.prototype.code = function(code, lang, escaped) {\n if (this.options.highlight) {\n var out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n if (!lang) {\n return '
'\n      + (escaped ? code : escape(code, true))\n      + '\\n
';\n }\n\n return '
'\n    + (escaped ? code : escape(code, true))\n    + '\\n
\\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return '
\\n' + quote + '
\\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw) {\n return ''\n + text\n + '\\n';\n};\n\nRenderer.prototype.hr = function() {\n return this.options.xhtml ? '
\\n' : '
\\n';\n};\n\nRenderer.prototype.list = function(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '
  • ' + text + '
  • \\n';\n};\n\nRenderer.prototype.paragraph = function(text) {\n return '

    ' + text + '

    \\n';\n};\n\nRenderer.prototype.table = function(header, body) {\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + '\\n'\n + body\n + '\\n'\n + '
    \\n';\n};\n\nRenderer.prototype.tablerow = function(content) {\n return '\\n' + content + '\\n';\n};\n\nRenderer.prototype.tablecell = function(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align\n ? '<' + type + ' style=\"text-align:' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '\\n';\n};\n\n// span level renderer\nRenderer.prototype.strong = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.em = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.codespan = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? '
    ' : '
    ';\n};\n\nRenderer.prototype.del = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.link = function(href, title, text) {\n if (this.options.sanitize) {\n try {\n var prot = decodeURIComponent(unescape(href))\n .replace(/[^\\w:]/g, '')\n .toLowerCase();\n } catch (e) {\n return text;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return text;\n }\n }\n if (this.options.baseUrl && !originIndependentUrl.test(href)) {\n href = resolveUrl(this.options.baseUrl, href);\n }\n var out = '
    ';\n return out;\n};\n\nRenderer.prototype.image = function(href, title, text) {\n if (this.options.baseUrl && !originIndependentUrl.test(href)) {\n href = resolveUrl(this.options.baseUrl, href);\n }\n var out = '\"'' : '>';\n return out;\n};\n\nRenderer.prototype.text = function(text) {\n return text;\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\n\nfunction TextRenderer() {}\n\n// no need for block level renderers\n\nTextRenderer.prototype.strong =\nTextRenderer.prototype.em =\nTextRenderer.prototype.codespan =\nTextRenderer.prototype.del =\nTextRenderer.prototype.text = function (text) {\n return text;\n}\n\nTextRenderer.prototype.link =\nTextRenderer.prototype.image = function(href, title, text) {\n return '' + text;\n}\n\nTextRenderer.prototype.br = function() {\n return '';\n}\n\n/**\n * Parsing & Compiling\n */\n\nfunction Parser(options) {\n this.tokens = [];\n this.token = null;\n this.options = options || marked.defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n}\n\n/**\n * Static Parse Method\n */\n\nParser.parse = function(src, options) {\n var parser = new Parser(options);\n return parser.parse(src);\n};\n\n/**\n * Parse Loop\n */\n\nParser.prototype.parse = function(src) {\n this.inline = new InlineLexer(src.links, this.options);\n // use an InlineLexer with a TextRenderer to extract pure text\n this.inlineText = new InlineLexer(\n src.links,\n merge({}, this.options, {renderer: new TextRenderer()})\n );\n this.tokens = src.reverse();\n\n var out = '';\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n};\n\n/**\n * Next Token\n */\n\nParser.prototype.next = function() {\n return this.token = this.tokens.pop();\n};\n\n/**\n * Preview Next Token\n */\n\nParser.prototype.peek = function() {\n return this.tokens[this.tokens.length - 1] || 0;\n};\n\n/**\n * Parse Text Tokens\n */\n\nParser.prototype.parseText = function() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n};\n\n/**\n * Parse Current Token\n */\n\nParser.prototype.tok = function() {\n switch (this.token.type) {\n case 'space': {\n return '';\n }\n case 'hr': {\n return this.renderer.hr();\n }\n case 'heading': {\n return this.renderer.heading(\n this.inline.output(this.token.text),\n this.token.depth,\n unescape(this.inlineText.output(this.token.text)));\n }\n case 'code': {\n return this.renderer.code(this.token.text,\n this.token.lang,\n this.token.escaped);\n }\n case 'table': {\n var header = '',\n body = '',\n i,\n row,\n cell,\n j;\n\n // header\n cell = '';\n for (i = 0; i < this.token.header.length; i++) {\n cell += this.renderer.tablecell(\n this.inline.output(this.token.header[i]),\n { header: true, align: this.token.align[i] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n\n cell = '';\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(\n this.inline.output(row[j]),\n { header: false, align: this.token.align[j] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n return this.renderer.table(header, body);\n }\n case 'blockquote_start': {\n body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n case 'list_start': {\n body = '';\n var ordered = this.token.ordered,\n start = this.token.start;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered, start);\n }\n case 'list_item_start': {\n body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.token.type === 'text'\n ? this.parseText()\n : this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'loose_item_start': {\n body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'html': {\n var html = !this.token.pre && !this.options.pedantic\n ? this.inline.output(this.token.text)\n : this.token.text;\n return this.renderer.html(html);\n }\n case 'paragraph': {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n case 'text': {\n return this.renderer.paragraph(this.parseText());\n }\n }\n};\n\n/**\n * Helpers\n */\n\nfunction escape(html, encode) {\n return html\n .replace(!encode ? /&(?!#?\\w+;)/g : /&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig, function(_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nfunction edit(regex, opt) {\n regex = regex.source;\n opt = opt || '';\n return {\n replace: function(name, val) {\n val = val.source || val;\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return this;\n },\n getRegex: function() {\n return new RegExp(regex, opt);\n }\n };\n}\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (/^[^:]+:\\/*[^/]*$/.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = base.replace(/[^/]*$/, '');\n }\n }\n base = baseUrls[' ' + base];\n\n if (href.slice(0, 2) === '//') {\n return base.replace(/:[\\s\\S]*/, ':') + href;\n } else if (href.charAt(0) === '/') {\n return base.replace(/(:\\/*[^/]*)[\\s\\S]*/, '$1') + href;\n } else {\n return base + href;\n }\n}\nvar baseUrls = {};\nvar originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\nfunction noop() {}\nnoop.exec = noop;\n\nfunction merge(obj) {\n var i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\n/**\n * Marked\n */\n\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (callback || typeof opt === 'function') {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n\n var highlight = opt.highlight,\n tokens,\n pending,\n i = 0;\n\n try {\n tokens = Lexer.lex(src, opt)\n } catch (e) {\n return callback(e);\n }\n\n pending = tokens.length;\n\n var done = function(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!pending) return done();\n\n for (; i < tokens.length; i++) {\n (function(token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n return highlight(token.text, token.lang, function(err, code) {\n if (err) return done(err);\n if (code == null || code === token.text) {\n return --pending || done();\n }\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return;\n }\n try {\n if (opt) opt = merge({}, marked.defaults, opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if ((opt || marked.defaults).silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.defaults = {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n sanitizer: null,\n mangle: true,\n smartLists: false,\n silent: false,\n highlight: null,\n langPrefix: 'lang-',\n smartypants: false,\n headerPrefix: '',\n renderer: new Renderer(),\n xhtml: false,\n baseUrl: null\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.parse = marked;\n\nif (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = marked;\n} else if (typeof define === 'function' && define.amd) {\n define(function() { return marked; });\n} else {\n root.marked = marked;\n}\n})(this || (typeof window !== 'undefined' ? window : global));\n","import { Component, EventEmitter, Input, Output, OnInit, OnDestroy } from '@angular/core';\n\nimport { Comment, User, UserService } from '../core';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'app-article-comment',\n templateUrl: './article-comment.component.html'\n})\nexport class ArticleCommentComponent implements OnInit, OnDestroy {\n constructor(\n private userService: UserService\n ) {}\n\n private subscription: Subscription;\n\n @Input() comment: Comment;\n @Output() deleteComment = new EventEmitter();\n\n canModify: boolean;\n\n ngOnInit() {\n // Load the current user's data\n this.subscription = this.userService.currentUser.subscribe(\n (userData: User) => {\n this.canModify = (userData.username === this.comment.author.username);\n }\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n deleteClicked() {\n this.deleteComment.emit(true);\n }\n\n\n}\n","
    \n
    \n

    \n {{ comment.body }}\n

    \n
    \n
    \n \n \n \n  \n \n {{ comment.author.username }}\n \n \n {{ comment.createdAt | date: 'longDate' }}\n \n \n \n \n
    \n
    \n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { ArticleComponent } from './article.component';\nimport { ArticleCommentComponent } from './article-comment.component';\nimport { ArticleResolver } from './article-resolver.service';\nimport { MarkdownPipe } from './markdown.pipe';\nimport { SharedModule } from '../shared';\nimport { ArticleRoutingModule } from './article-routing.module';\n\n@NgModule({\n imports: [\n SharedModule,\n ArticleRoutingModule\n ],\n declarations: [\n ArticleComponent,\n ArticleCommentComponent,\n MarkdownPipe\n ],\n\n providers: [\n ArticleResolver\n ]\n})\nexport class ArticleModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as marked from 'marked';\n\n@Pipe({name: 'markdown'})\nexport class MarkdownPipe implements PipeTransform {\n transform(content: string): string {\n return marked(content, { sanitize: true });\n }\n}\n","import { Injectable, } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { Article, ArticlesService, UserService } from '../core';\nimport { catchError } from 'rxjs/operators';\n\n@Injectable()\nexport class ArticleResolver implements Resolve
    {\n constructor(\n private articlesService: ArticlesService,\n private router: Router,\n private userService: UserService\n ) {}\n\n resolve(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable {\n\n return this.articlesService.get(route.params['slug'])\n .pipe(catchError((err) => this.router.navigateByUrl('/')));\n }\n}\n"],"sourceRoot":"webpack:///"}