| OLD | NEW | 
 | (Empty) | 
|    1 SKY MODULE |  | 
|    2 <!-- this is part of sky:core --> |  | 
|    3 <script> |  | 
|    4  // "internals" is an object only made visible to this module that exports stuff
      implemented in C++ |  | 
|    5  module.exports.registerProperty = internals.registerProperty; |  | 
|    6  internals.registerLayoutManager('none', null); |  | 
|    7  module.exports.LayoutManager = internals.LayoutManager; |  | 
|    8  module.exports.InlineLayoutManager = internals.InlineLayoutManager; |  | 
|    9  internals.registerLayoutManager('inline', internals.InlineLayoutManager); |  | 
|   10  module.exports.ParagraphLayoutManager = internals.ParagraphLayoutManager; |  | 
|   11  internals.registerLayoutManager('paragraph', internals.ParagraphLayoutManager); |  | 
|   12  module.exports.BlockLayoutManager = internals.BlockLayoutManager; |  | 
|   13  internals.registerLayoutManager('block', internals.BlockLayoutManager); |  | 
|   14  |  | 
|   15  let displayTypes = new Map(); |  | 
|   16  module.exports.registerLayoutManager = function registerLayoutManager(displayVa
     lue, layoutManagerConstructor) { |  | 
|   17    // TODO(ianh): apply rules for type-checking displayValue is a String |  | 
|   18    // TODO(ianh): apply rules for type-checking layoutManagerConstructor impleme
     nts the LayoutManagerConstructor interface (or is null) |  | 
|   19    if (displayTypes.has(displayValue)) |  | 
|   20      throw new Error(); |  | 
|   21    displayTypes.set(displayValue, layoutManagerConstructor); |  | 
|   22  }; |  | 
|   23  |  | 
|   24  module.exports.DisplayStyleGrammar = new StyleGrammar(); // value is null or a 
     LayoutManagerConstructor |  | 
|   25  module.exports.DisplayStyleGrammar.addParser((tokens) => { |  | 
|   26    let token = tokens.next(); |  | 
|   27    if (token.done) |  | 
|   28      throw new Error(); |  | 
|   29    if (token.value.kind != 'identifier') |  | 
|   30      throw new Error(); |  | 
|   31    if (!displayTypes.has(token.value.value)) |  | 
|   32      throw new Error(); |  | 
|   33    return { |  | 
|   34      value: displayTypes.get(token.value.value), |  | 
|   35    } |  | 
|   36  }); |  | 
|   37  |  | 
|   38  internals.registerProperty({ |  | 
|   39    name: 'display', |  | 
|   40    type: module.exports.DisplayStyleGrammar, |  | 
|   41    inherits: false, |  | 
|   42    initialValue: internals.BlockLayoutManager, |  | 
|   43    needsLayout: true, |  | 
|   44  }); |  | 
|   45  |  | 
|   46  module.exports.PositiveLengthStyleGrammar = new StyleGrammar(); // value is a P
     arsedValue whose value (once resolved) is a number in 96dpi pixels, >=0 |  | 
|   47  module.exports.PositiveLengthStyleGrammar.addParser((tokens) => { |  | 
|   48    // just handle "<number>px" |  | 
|   49    let token = tokens.next(); |  | 
|   50    if (token.done) |  | 
|   51      throw new Error(); |  | 
|   52    if (token.value.kind != 'dimension') |  | 
|   53      throw new Error(); |  | 
|   54    if (token.value.unit != 'px') |  | 
|   55      throw new Error(); |  | 
|   56    if (token.value.value < 0) |  | 
|   57      throw new Error(); |  | 
|   58    return { |  | 
|   59      value: token.value.value; |  | 
|   60    }; |  | 
|   61  }); |  | 
|   62  |  | 
|   63  internals.registerProperty({ |  | 
|   64    name: 'min-width', |  | 
|   65    type: module.exports.PositiveLengthStyleGrammar, |  | 
|   66    inherits: false, |  | 
|   67    initialValue: 0, |  | 
|   68    needsLayout: true, |  | 
|   69  }); |  | 
|   70  internals.registerProperty({ |  | 
|   71    name: 'min-height', |  | 
|   72    type: module.exports.PositiveLengthStyleGrammar, |  | 
|   73    inherits: false, |  | 
|   74    initialValue: 0, |  | 
|   75    needsLayout: true, |  | 
|   76  }); |  | 
|   77  |  | 
|   78  module.exports.PositiveLengthOrAutoStyleGrammar = new StyleGrammar(); // value 
     is a ParsedValue whose value (once resolved) is either a number in 96dpi pixels 
     (>=0) or null (meaning 'auto') |  | 
|   79  module.exports.PositiveLengthOrAutoStyleGrammar.addParser((tokens) => { |  | 
|   80    // handle 'auto' |  | 
|   81    let token = tokens.next(); |  | 
|   82    if (token.done) |  | 
|   83      throw new Error(); |  | 
|   84    if (token.value.kind != 'identifier') |  | 
|   85      throw new Error(); |  | 
|   86    if (token.value.value != 'auto') |  | 
|   87      throw new Error(); |  | 
|   88    return { |  | 
|   89      value: null, |  | 
|   90    }; |  | 
|   91  }); |  | 
|   92  module.exports.PositiveLengthOrAutoStyleGrammar.addParser((tokens) => { |  | 
|   93    return module.exports.PositiveLengthStyleGrammar.parse(tokens); |  | 
|   94  }); |  | 
|   95  |  | 
|   96  internals.registerProperty({ |  | 
|   97    name: 'width', |  | 
|   98    type: module.exports.PositiveLengthOrAutoStyleGrammar, |  | 
|   99    inherits: false, |  | 
|  100    initialValue: null, |  | 
|  101    needsLayout: true, |  | 
|  102  }); |  | 
|  103  internals.registerProperty({ |  | 
|  104    name: 'height', |  | 
|  105    type: module.exporets.PositiveLengthOrAutoStyleGrammar, |  | 
|  106    inherits: false, |  | 
|  107    initialValue: null, |  | 
|  108    needsLayout: true, |  | 
|  109  }); |  | 
|  110  |  | 
|  111  module.exports.PositiveLengthOrInfinityStyleGrammar = new StyleGrammar(); // va
     lue is a ParsedValue whose value (once resolved) is either a number in 96dpi pix
     els (>=0) or Infinity |  | 
|  112  module.exports.PositiveLengthOrInfinityStyleGrammar.addParser((tokens) => { |  | 
|  113    // handle 'infinity' |  | 
|  114    let token = tokens.next(); |  | 
|  115    if (token.done) |  | 
|  116      throw new Error(); |  | 
|  117    if (token.value.kind != 'identifier') |  | 
|  118      throw new Error(); |  | 
|  119    if (token.value.value != 'infinity') |  | 
|  120      throw new Error(); |  | 
|  121    return { |  | 
|  122      value: Infinity, |  | 
|  123    }; |  | 
|  124  }); |  | 
|  125  module.exports.PositiveLengthOrInfinityStyleGrammar.addParser((tokens) => { |  | 
|  126    return module.exports.PositiveLengthStyleGrammar.parse(tokens); |  | 
|  127  }); |  | 
|  128  |  | 
|  129  internals.registerProperty({ |  | 
|  130    name: 'width', |  | 
|  131    type: module.exports.PositiveLengthOrInfinityStyleGrammar, |  | 
|  132    inherits: false, |  | 
|  133    initialValue: Infinity, |  | 
|  134    needsLayout: true, |  | 
|  135  }); |  | 
|  136  internals.registerProperty({ |  | 
|  137    name: 'height', |  | 
|  138    type: module.exporets.PositiveLengthOrInfinityStyleGrammar, |  | 
|  139    inherits: false, |  | 
|  140    initialValue: Infinity, |  | 
|  141    needsLayout: true, |  | 
|  142  }); |  | 
|  143 </script> |  | 
| OLD | NEW |