 e89f2f4b7b
			
		
	
	e89f2f4b7b
	
	
	
		
			
			Created 10 detailed GitHub issues covering: - Project activation and management UI (#1-2) - Worker node coordination and visualization (#3-4) - Automated GitHub repository scanning (#5) - Intelligent model-to-issue matching (#6) - Multi-model task execution system (#7) - N8N workflow integration (#8) - Hive-Bzzz P2P bridge (#9) - Peer assistance protocol (#10) Each issue includes detailed specifications, acceptance criteria, technical implementation notes, and dependency mapping. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			192 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Token class
 | |
| 
 | |
| /**
 | |
|  * class Token
 | |
|  **/
 | |
| 
 | |
| /**
 | |
|  * new Token(type, tag, nesting)
 | |
|  *
 | |
|  * Create new token and fill passed properties.
 | |
|  **/
 | |
| function Token (type, tag, nesting) {
 | |
|   /**
 | |
|    * Token#type -> String
 | |
|    *
 | |
|    * Type of the token (string, e.g. "paragraph_open")
 | |
|    **/
 | |
|   this.type     = type
 | |
| 
 | |
|   /**
 | |
|    * Token#tag -> String
 | |
|    *
 | |
|    * html tag name, e.g. "p"
 | |
|    **/
 | |
|   this.tag      = tag
 | |
| 
 | |
|   /**
 | |
|    * Token#attrs -> Array
 | |
|    *
 | |
|    * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`
 | |
|    **/
 | |
|   this.attrs    = null
 | |
| 
 | |
|   /**
 | |
|    * Token#map -> Array
 | |
|    *
 | |
|    * Source map info. Format: `[ line_begin, line_end ]`
 | |
|    **/
 | |
|   this.map      = null
 | |
| 
 | |
|   /**
 | |
|    * Token#nesting -> Number
 | |
|    *
 | |
|    * Level change (number in {-1, 0, 1} set), where:
 | |
|    *
 | |
|    * -  `1` means the tag is opening
 | |
|    * -  `0` means the tag is self-closing
 | |
|    * - `-1` means the tag is closing
 | |
|    **/
 | |
|   this.nesting  = nesting
 | |
| 
 | |
|   /**
 | |
|    * Token#level -> Number
 | |
|    *
 | |
|    * nesting level, the same as `state.level`
 | |
|    **/
 | |
|   this.level    = 0
 | |
| 
 | |
|   /**
 | |
|    * Token#children -> Array
 | |
|    *
 | |
|    * An array of child nodes (inline and img tokens)
 | |
|    **/
 | |
|   this.children = null
 | |
| 
 | |
|   /**
 | |
|    * Token#content -> String
 | |
|    *
 | |
|    * In a case of self-closing tag (code, html, fence, etc.),
 | |
|    * it has contents of this tag.
 | |
|    **/
 | |
|   this.content  = ''
 | |
| 
 | |
|   /**
 | |
|    * Token#markup -> String
 | |
|    *
 | |
|    * '*' or '_' for emphasis, fence string for fence, etc.
 | |
|    **/
 | |
|   this.markup   = ''
 | |
| 
 | |
|   /**
 | |
|    * Token#info -> String
 | |
|    *
 | |
|    * Additional information:
 | |
|    *
 | |
|    * - Info string for "fence" tokens
 | |
|    * - The value "auto" for autolink "link_open" and "link_close" tokens
 | |
|    * - The string value of the item marker for ordered-list "list_item_open" tokens
 | |
|    **/
 | |
|   this.info     = ''
 | |
| 
 | |
|   /**
 | |
|    * Token#meta -> Object
 | |
|    *
 | |
|    * A place for plugins to store an arbitrary data
 | |
|    **/
 | |
|   this.meta     = null
 | |
| 
 | |
|   /**
 | |
|    * Token#block -> Boolean
 | |
|    *
 | |
|    * True for block-level tokens, false for inline tokens.
 | |
|    * Used in renderer to calculate line breaks
 | |
|    **/
 | |
|   this.block    = false
 | |
| 
 | |
|   /**
 | |
|    * Token#hidden -> Boolean
 | |
|    *
 | |
|    * If it's true, ignore this element when rendering. Used for tight lists
 | |
|    * to hide paragraphs.
 | |
|    **/
 | |
|   this.hidden   = false
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Token.attrIndex(name) -> Number
 | |
|  *
 | |
|  * Search attribute index by name.
 | |
|  **/
 | |
| Token.prototype.attrIndex = function attrIndex (name) {
 | |
|   if (!this.attrs) { return -1 }
 | |
| 
 | |
|   const attrs = this.attrs
 | |
| 
 | |
|   for (let i = 0, len = attrs.length; i < len; i++) {
 | |
|     if (attrs[i][0] === name) { return i }
 | |
|   }
 | |
|   return -1
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Token.attrPush(attrData)
 | |
|  *
 | |
|  * Add `[ name, value ]` attribute to list. Init attrs if necessary
 | |
|  **/
 | |
| Token.prototype.attrPush = function attrPush (attrData) {
 | |
|   if (this.attrs) {
 | |
|     this.attrs.push(attrData)
 | |
|   } else {
 | |
|     this.attrs = [attrData]
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Token.attrSet(name, value)
 | |
|  *
 | |
|  * Set `name` attribute to `value`. Override old value if exists.
 | |
|  **/
 | |
| Token.prototype.attrSet = function attrSet (name, value) {
 | |
|   const idx = this.attrIndex(name)
 | |
|   const attrData = [name, value]
 | |
| 
 | |
|   if (idx < 0) {
 | |
|     this.attrPush(attrData)
 | |
|   } else {
 | |
|     this.attrs[idx] = attrData
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Token.attrGet(name)
 | |
|  *
 | |
|  * Get the value of attribute `name`, or null if it does not exist.
 | |
|  **/
 | |
| Token.prototype.attrGet = function attrGet (name) {
 | |
|   const idx = this.attrIndex(name)
 | |
|   let value = null
 | |
|   if (idx >= 0) {
 | |
|     value = this.attrs[idx][1]
 | |
|   }
 | |
|   return value
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Token.attrJoin(name, value)
 | |
|  *
 | |
|  * Join value to existing attribute via space. Or create new attribute if not
 | |
|  * exists. Useful to operate with token classes.
 | |
|  **/
 | |
| Token.prototype.attrJoin = function attrJoin (name, value) {
 | |
|   const idx = this.attrIndex(name)
 | |
| 
 | |
|   if (idx < 0) {
 | |
|     this.attrPush([name, value])
 | |
|   } else {
 | |
|     this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value
 | |
|   }
 | |
| }
 | |
| 
 | |
| export default Token
 |