diff options
| -rw-r--r-- | js/lib/node.js | 271 | 
1 files changed, 136 insertions, 135 deletions
diff --git a/js/lib/node.js b/js/lib/node.js index f96d65c..f88dff5 100644 --- a/js/lib/node.js +++ b/js/lib/node.js @@ -1,182 +1,183 @@ -util = require('util'); +"use strict";  function isContainer(node) { -  var t = node.t; -  return (t == 'Document' || -          t == 'BlockQuote' || -          t == 'List' || -          t == 'ListItem' || -          t == 'Paragraph' || -          t == 'Header' || -          t == 'Emph' || -          t == 'Strong' || -          t == 'Link' || -          t == 'Image'); +    var t = node.t; +    return (t === 'Document' || +            t === 'BlockQuote' || +            t === 'List' || +            t === 'ListItem' || +            t === 'Paragraph' || +            t === 'Header' || +            t === 'Emph' || +            t === 'Strong' || +            t === 'Link' || +            t === 'Image');  }  function NodeWalker(root) { -  this.current = root; -  this.root = root; -  this.entering = true; +    this.current = root; +    this.root = root; +    this.entering = true;  }  NodeWalker.prototype.resumeAt = function(node, entering) { -  this.current = node; -  this.entering = (entering === true); +    this.current = node; +    this.entering = (entering === true);  };  NodeWalker.prototype.next = function(){ -  var cur = this.current; -  var entering = this.entering; +    var cur = this.current; +    var entering = this.entering; -  if (!cur) -    return null; +    if (!cur) { +        return null; +    } -  var container = isContainer(cur); +    var container = isContainer(cur); -  if (entering && container) { -    if (cur.firstChild) { -      this.current = cur.firstChild; -      this.entering = true; -    } else { -      // stay on node but exit -      this.entering = false; -    } +    if (entering && container) { +        if (cur.firstChild) { +            this.current = cur.firstChild; +            this.entering = true; +        } else { +            // stay on node but exit +            this.entering = false; +        } -  } else if (!entering && cur == this.root) { -    // don't move past root -    this.current = null; +    } else if (!entering && cur === this.root) { +        // don't move past root +        this.current = null; -  } else if (cur.next) { -    this.current = cur.next; -    this.entering = true; +    } else if (cur.next) { +        this.current = cur.next; +        this.entering = true; -  } else { -    this.current = cur.parent; -    this.entering = false; -  } +    } else { +        this.current = cur.parent; +        this.entering = false; +    } -  return {entering: entering, node: cur}; +    return {entering: entering, node: cur};  };  function Node(nodeType) { -  this.t = nodeType; -  this.parent = null; -  this.firstChild = null; -  this.lastChild = null; -  this.prev = null; -  this.next = null; -  this.pos = {}; +    this.t = nodeType; +    this.parent = null; +    this.firstChild = null; +    this.lastChild = null; +    this.prev = null; +    this.next = null; +    this.pos = {};  }  Node.prototype.isContainer = function() { -  return isContainer(this); +    return isContainer(this);  };  Node.prototype.appendChild = function(child) { -  child.unlink(); -  child.parent = this; -  if (this.lastChild) { -    this.lastChild.next = child; -    child.prev = this.lastChild; -    this.lastChild = child; -  } else { -    this.firstChild = child; -    this.lastChild = child; -  } +    child.unlink(); +    child.parent = this; +    if (this.lastChild) { +        this.lastChild.next = child; +        child.prev = this.lastChild; +        this.lastChild = child; +    } else { +        this.firstChild = child; +        this.lastChild = child; +    }  };  Node.prototype.prependChild = function(child) { -  child.unlink(); -  child.parent = this; -  if (this.firstChild) { -    this.firstChild.prev = child; -    child.next = this.firstChild; -    this.firstChild = child; -  } else { -    this.firstChild = child; -    this.lastChild = child; -  } +    child.unlink(); +    child.parent = this; +    if (this.firstChild) { +        this.firstChild.prev = child; +        child.next = this.firstChild; +        this.firstChild = child; +    } else { +        this.firstChild = child; +        this.lastChild = child; +    }  };  Node.prototype.unlink = function() { -  if (this.prev) { -    this.prev.next = this.next; -  } else if (this.parent) { -    this.parent.firstChild = this.next; -  } -  if (this.next) { -    this.next.prev = this.prev; -  } else if (this.parent) { -    this.parent.lastChild = this.prev; -  } -  this.parent = null; -  this.next = null; -  this.prev = null; +    if (this.prev) { +        this.prev.next = this.next; +    } else if (this.parent) { +        this.parent.firstChild = this.next; +    } +    if (this.next) { +        this.next.prev = this.prev; +    } else if (this.parent) { +        this.parent.lastChild = this.prev; +    } +    this.parent = null; +    this.next = null; +    this.prev = null;  };  Node.prototype.insertAfter = function(sibling) { -  sibling.unlink(); -  sibling.next = this.next; -  if (sibling.next) { -      sibling.next.prev = sibling; -  } -  sibling.prev = this; -  this.next = sibling; -  sibling.parent = this.parent; -  if (!sibling.next) { -    sibling.parent.lastChild = sibling; -  } +    sibling.unlink(); +    sibling.next = this.next; +    if (sibling.next) { +        sibling.next.prev = sibling; +    } +    sibling.prev = this; +    this.next = sibling; +    sibling.parent = this.parent; +    if (!sibling.next) { +        sibling.parent.lastChild = sibling; +    }  };  Node.prototype.insertBefore = function(sibling) { -  sibling.unlink(); -  sibling.prev = this.prev; -  if (sibling.prev) { -    sibling.prev.next = sibling; -  } -  sibling.next = this; -  this.prev = sibling; -  sibling.parent = this.parent; -  if (!sibling.prev) { -    sibling.parent.firstChild = sibling; -  } +    sibling.unlink(); +    sibling.prev = this.prev; +    if (sibling.prev) { +        sibling.prev.next = sibling; +    } +    sibling.next = this; +    this.prev = sibling; +    sibling.parent = this.parent; +    if (!sibling.prev) { +        sibling.parent.firstChild = sibling; +    }  };  Node.prototype.walker = function() { -  var walker = new NodeWalker(this); -  return walker; +    var walker = new NodeWalker(this); +    return walker;  };  Node.prototype.toAST = function() { -  var children; -  var cur; -  var result = { t: this.t }; - -  var propsToShow = ['t', 'c', 'list_data', 'string_content', -                     'pos', 'start_column', 'end_column', -                     'tight', 'info']; - -  for (var i = 0; i < propsToShow.length; i++) { -      var prop = propsToShow[i]; -      if (this[prop] !== undefined) { -          result[prop] = this[prop]; -      } -  } - -  if (isContainer(this)) { -    children = []; -    if (this.firstChild) { -      cur = this.firstChild; -      while (cur) { -        // TODO avoid recursion here... -        children.push(cur.toAST()); -        cur = cur.next; -      } -      result.children = children; +    var children; +    var cur; +    var result = { t: this.t }; + +    var propsToShow = ['t', 'c', 'list_data', 'string_content', +                       'pos', 'start_column', 'end_column', +                       'tight', 'info']; + +    for (var i = 0; i < propsToShow.length; i++) { +        var prop = propsToShow[i]; +        if (this[prop] !== undefined) { +            result[prop] = this[prop]; +        } +    } + +    if (isContainer(this)) { +        children = []; +        if (this.firstChild) { +            cur = this.firstChild; +            while (cur) { +                // TODO avoid recursion here... +                children.push(cur.toAST()); +                cur = cur.next; +            } +            result.children = children; +        }      } -  } -  return result; +    return result;  }; @@ -189,7 +190,7 @@ module.exports = Node;   var event;   while (event = walker.next()) { -   console.log(event.entering, event.node.t); + console.log(event.entering, event.node.t);   } -*/ + */  | 
