From 56952ea28e6a3cda8bf8c7990e5de671eddd7ba7 Mon Sep 17 00:00:00 2001 From: IanStanion-google <112102430+IanStanion-google@users.noreply.github.com> Date: Mon, 5 Jun 2023 12:15:45 -0400 Subject: [PATCH] Added 2 sandbox samples (#919) * Added 2 sandbox samples * Updated readme style * Updated readme for 2nd Sandbox sample * Replaced windows API with Tabs to modernize * Small update to readme * Update api-samples/Sandbox/sandbox/mainpage.js Co-authored-by: Joe Medley * Update api-samples/Sandbox/sandbox/main.js Co-authored-by: Joe Medley * Update main.js * Update main.js * Update mainpage.html * Update mainpage.js * Update manifest.json * Update sandbox.html * Update main.js * Update main.js * Update manifest.json * changing folder case * case change * Minor cleanup * Update sandbox.html * Update sandbox.html * Update sandbox.html * Update api-samples/sandbox/sandbox/sandbox.html Co-authored-by: Joe Medley * Update api-samples/sandbox/sandbox/sandbox.html Co-authored-by: Joe Medley * Update api-samples/sandbox/sandbox/sandbox.md Co-authored-by: Joe Medley * Update api-samples/sandbox/sandboxed-content/sandboxed-content.md Co-authored-by: Joe Medley * Update api-samples/sandbox/sandboxed-content/sandboxed-content.md Co-authored-by: Joe Medley * Changed filename to service-worker.js * Update api-samples/sandbox/sandbox/mainpage.js Co-authored-by: Joe Medley * Update api-samples/sandbox/sandbox/manifest.json Co-authored-by: Joe Medley * Update api-samples/sandbox/sandboxed-content/manifest.json Co-authored-by: Joe Medley * Update api-samples/sandbox/sandboxed-content/service-worker.js Co-authored-by: Joe Medley * Update sandbox.md * Update sandboxed-content.md * Update manifest.json * Update manifest.json --------- Co-authored-by: Joe Medley --- .../sandbox/sandbox/LICENSE.handlebars | 20 + .../sandbox/assets/screenshot_1280_800.png | Bin 0 -> 61251 bytes .../sandbox/handlebars-1.0.0.beta.6.js | 2450 +++++++++++++++++ api-samples/sandbox/sandbox/icon_128.png | Bin 0 -> 4989 bytes api-samples/sandbox/sandbox/mainpage.html | 32 + api-samples/sandbox/sandbox/mainpage.js | 37 + api-samples/sandbox/sandbox/manifest.json | 14 + api-samples/sandbox/sandbox/sandbox.html | 83 + api-samples/sandbox/sandbox/sandbox.md | 10 + api-samples/sandbox/sandbox/service-worker.js | 26 + api-samples/sandbox/sandbox/styles/main.css | 42 + .../assets/screenshot_1280_800.png | Bin 0 -> 55767 bytes .../sandbox/sandboxed-content/icon_128.png | Bin 0 -> 6943 bytes .../sandbox/sandboxed-content/main.html | 13 + .../sandbox/sandboxed-content/manifest.json | 14 + .../sandboxed-content/sandboxed-content.md | 8 + .../sandbox/sandboxed-content/sandboxed.html | 19 + .../sandboxed-content/service-worker.js | 25 + .../sandbox/sandboxed-content/styles/main.css | 18 + 19 files changed, 2811 insertions(+) create mode 100644 api-samples/sandbox/sandbox/LICENSE.handlebars create mode 100644 api-samples/sandbox/sandbox/assets/screenshot_1280_800.png create mode 100644 api-samples/sandbox/sandbox/handlebars-1.0.0.beta.6.js create mode 100644 api-samples/sandbox/sandbox/icon_128.png create mode 100644 api-samples/sandbox/sandbox/mainpage.html create mode 100644 api-samples/sandbox/sandbox/mainpage.js create mode 100644 api-samples/sandbox/sandbox/manifest.json create mode 100644 api-samples/sandbox/sandbox/sandbox.html create mode 100644 api-samples/sandbox/sandbox/sandbox.md create mode 100644 api-samples/sandbox/sandbox/service-worker.js create mode 100644 api-samples/sandbox/sandbox/styles/main.css create mode 100644 api-samples/sandbox/sandboxed-content/assets/screenshot_1280_800.png create mode 100644 api-samples/sandbox/sandboxed-content/icon_128.png create mode 100644 api-samples/sandbox/sandboxed-content/main.html create mode 100644 api-samples/sandbox/sandboxed-content/manifest.json create mode 100644 api-samples/sandbox/sandboxed-content/sandboxed-content.md create mode 100644 api-samples/sandbox/sandboxed-content/sandboxed.html create mode 100644 api-samples/sandbox/sandboxed-content/service-worker.js create mode 100644 api-samples/sandbox/sandboxed-content/styles/main.css diff --git a/api-samples/sandbox/sandbox/LICENSE.handlebars b/api-samples/sandbox/sandbox/LICENSE.handlebars new file mode 100644 index 00000000..237cd034 --- /dev/null +++ b/api-samples/sandbox/sandbox/LICENSE.handlebars @@ -0,0 +1,20 @@ +Copyright (C) 2011 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/api-samples/sandbox/sandbox/assets/screenshot_1280_800.png b/api-samples/sandbox/sandbox/assets/screenshot_1280_800.png new file mode 100644 index 0000000000000000000000000000000000000000..3266c14e0f0f4c5c14dc5abb0dbe21af4a244cb9 GIT binary patch literal 61251 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 W=j!irwfR^2ps|rT^68OtSN|7m+{2py literal 0 HcmV?d00001 diff --git a/api-samples/sandbox/sandbox/handlebars-1.0.0.beta.6.js b/api-samples/sandbox/sandbox/handlebars-1.0.0.beta.6.js new file mode 100644 index 00000000..87a9e189 --- /dev/null +++ b/api-samples/sandbox/sandbox/handlebars-1.0.0.beta.6.js @@ -0,0 +1,2450 @@ +// Copyright (C) 2011 by Yehuda Katz +// Licensing details in LICENSE.handlebars + +// lib/handlebars/base.js +/* eslint-disable */ +var Handlebars = {}; + +Handlebars.VERSION = '1.0.beta.6'; + +Handlebars.helpers = {}; +Handlebars.partials = {}; + +Handlebars.registerHelper = function (name, fn, inverse) { + if (inverse) { + fn.not = inverse; + } + this.helpers[name] = fn; +}; + +Handlebars.registerPartial = function (name, str) { + this.partials[name] = str; +}; + +Handlebars.registerHelper('helperMissing', function (arg) { + if (arguments.length === 2) { + return undefined; + } else { + throw new Error("Could not find property '" + arg + "'"); + } +}); + +var toString = Object.prototype.toString, + functionType = '[object Function]'; + +Handlebars.registerHelper('blockHelperMissing', function (context, options) { + var inverse = options.inverse || function () {}, + fn = options.fn; + + var ret = ''; + var type = toString.call(context); + + if (type === functionType) { + context = context.call(this); + } + + if (context === true) { + return fn(this); + } else if (context === false || context == null) { + return inverse(this); + } else if (type === '[object Array]') { + if (context.length > 0) { + for (var i = 0, j = context.length; i < j; i++) { + ret = ret + fn(context[i]); + } + } else { + ret = inverse(this); + } + return ret; + } else { + return fn(context); + } +}); + +Handlebars.registerHelper('each', function (context, options) { + var fn = options.fn, + inverse = options.inverse; + var ret = ''; + + if (context && context.length > 0) { + for (var i = 0, j = context.length; i < j; i++) { + ret = ret + fn(context[i]); + } + } else { + ret = inverse(this); + } + return ret; +}); + +Handlebars.registerHelper('if', function (context, options) { + var type = toString.call(context); + if (type === functionType) { + context = context.call(this); + } + + if (!context || Handlebars.Utils.isEmpty(context)) { + return options.inverse(this); + } else { + return options.fn(this); + } +}); + +Handlebars.registerHelper('unless', function (context, options) { + var fn = options.fn, + inverse = options.inverse; + options.fn = inverse; + options.inverse = fn; + + return Handlebars.helpers['if'].call(this, context, options); +}); + +Handlebars.registerHelper('with', function (context, options) { + return options.fn(context); +}); + +Handlebars.registerHelper('log', function (context) { + Handlebars.log(context); +}); +// lib/handlebars/compiler/parser.js +/* Jison generated parser */ +var handlebars = (function () { + var parser = { + trace: function trace() {}, + yy: {}, + symbols_: { + error: 2, + root: 3, + program: 4, + EOF: 5, + statements: 6, + simpleInverse: 7, + statement: 8, + openInverse: 9, + closeBlock: 10, + openBlock: 11, + mustache: 12, + partial: 13, + CONTENT: 14, + COMMENT: 15, + OPEN_BLOCK: 16, + inMustache: 17, + CLOSE: 18, + OPEN_INVERSE: 19, + OPEN_ENDBLOCK: 20, + path: 21, + OPEN: 22, + OPEN_UNESCAPED: 23, + OPEN_PARTIAL: 24, + params: 25, + hash: 26, + param: 27, + STRING: 28, + INTEGER: 29, + BOOLEAN: 30, + hashSegments: 31, + hashSegment: 32, + ID: 33, + EQUALS: 34, + pathSegments: 35, + SEP: 36, + $accept: 0, + $end: 1 + }, + terminals_: { + 2: 'error', + 5: 'EOF', + 14: 'CONTENT', + 15: 'COMMENT', + 16: 'OPEN_BLOCK', + 18: 'CLOSE', + 19: 'OPEN_INVERSE', + 20: 'OPEN_ENDBLOCK', + 22: 'OPEN', + 23: 'OPEN_UNESCAPED', + 24: 'OPEN_PARTIAL', + 28: 'STRING', + 29: 'INTEGER', + 30: 'BOOLEAN', + 33: 'ID', + 34: 'EQUALS', + 36: 'SEP' + }, + productions_: [ + 0, + [3, 2], + [4, 3], + [4, 1], + [4, 0], + [6, 1], + [6, 2], + [8, 3], + [8, 3], + [8, 1], + [8, 1], + [8, 1], + [8, 1], + [11, 3], + [9, 3], + [10, 3], + [12, 3], + [12, 3], + [13, 3], + [13, 4], + [7, 2], + [17, 3], + [17, 2], + [17, 2], + [17, 1], + [25, 2], + [25, 1], + [27, 1], + [27, 1], + [27, 1], + [27, 1], + [26, 1], + [31, 2], + [31, 1], + [32, 3], + [32, 3], + [32, 3], + [32, 3], + [21, 1], + [35, 3], + [35, 1] + ], + performAction: function anonymous( + yytext, + yyleng, + yylineno, + yy, + yystate, + $$, + _$ + ) { + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + break; + case 2: + this.$ = new yy.ProgramNode($$[$0 - 2], $$[$0]); + break; + case 3: + this.$ = new yy.ProgramNode($$[$0]); + break; + case 4: + this.$ = new yy.ProgramNode([]); + break; + case 5: + this.$ = [$$[$0]]; + break; + case 6: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 7: + this.$ = new yy.InverseNode($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 8: + this.$ = new yy.BlockNode($$[$0 - 2], $$[$0 - 1], $$[$0]); + break; + case 9: + this.$ = $$[$0]; + break; + case 10: + this.$ = $$[$0]; + break; + case 11: + this.$ = new yy.ContentNode($$[$0]); + break; + case 12: + this.$ = new yy.CommentNode($$[$0]); + break; + case 13: + this.$ = new yy.MustacheNode($$[$0 - 1][0], $$[$0 - 1][1]); + break; + case 14: + this.$ = new yy.MustacheNode($$[$0 - 1][0], $$[$0 - 1][1]); + break; + case 15: + this.$ = $$[$0 - 1]; + break; + case 16: + this.$ = new yy.MustacheNode($$[$0 - 1][0], $$[$0 - 1][1]); + break; + case 17: + this.$ = new yy.MustacheNode($$[$0 - 1][0], $$[$0 - 1][1], true); + break; + case 18: + this.$ = new yy.PartialNode($$[$0 - 1]); + break; + case 19: + this.$ = new yy.PartialNode($$[$0 - 2], $$[$0 - 1]); + break; + case 20: + break; + case 21: + this.$ = [[$$[$0 - 2]].concat($$[$0 - 1]), $$[$0]]; + break; + case 22: + this.$ = [[$$[$0 - 1]].concat($$[$0]), null]; + break; + case 23: + this.$ = [[$$[$0 - 1]], $$[$0]]; + break; + case 24: + this.$ = [[$$[$0]], null]; + break; + case 25: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 26: + this.$ = [$$[$0]]; + break; + case 27: + this.$ = $$[$0]; + break; + case 28: + this.$ = new yy.StringNode($$[$0]); + break; + case 29: + this.$ = new yy.IntegerNode($$[$0]); + break; + case 30: + this.$ = new yy.BooleanNode($$[$0]); + break; + case 31: + this.$ = new yy.HashNode($$[$0]); + break; + case 32: + $$[$0 - 1].push($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 33: + this.$ = [$$[$0]]; + break; + case 34: + this.$ = [$$[$0 - 2], $$[$0]]; + break; + case 35: + this.$ = [$$[$0 - 2], new yy.StringNode($$[$0])]; + break; + case 36: + this.$ = [$$[$0 - 2], new yy.IntegerNode($$[$0])]; + break; + case 37: + this.$ = [$$[$0 - 2], new yy.BooleanNode($$[$0])]; + break; + case 38: + this.$ = new yy.IdNode($$[$0]); + break; + case 39: + $$[$0 - 2].push($$[$0]); + this.$ = $$[$0 - 2]; + break; + case 40: + this.$ = [$$[$0]]; + break; + } + }, + table: [ + { + 3: 1, + 4: 2, + 5: [2, 4], + 6: 3, + 8: 4, + 9: 5, + 11: 6, + 12: 7, + 13: 8, + 14: [1, 9], + 15: [1, 10], + 16: [1, 12], + 19: [1, 11], + 22: [1, 13], + 23: [1, 14], + 24: [1, 15] + }, + { 1: [3] }, + { 5: [1, 16] }, + { + 5: [2, 3], + 7: 17, + 8: 18, + 9: 5, + 11: 6, + 12: 7, + 13: 8, + 14: [1, 9], + 15: [1, 10], + 16: [1, 12], + 19: [1, 19], + 20: [2, 3], + 22: [1, 13], + 23: [1, 14], + 24: [1, 15] + }, + { + 5: [2, 5], + 14: [2, 5], + 15: [2, 5], + 16: [2, 5], + 19: [2, 5], + 20: [2, 5], + 22: [2, 5], + 23: [2, 5], + 24: [2, 5] + }, + { + 4: 20, + 6: 3, + 8: 4, + 9: 5, + 11: 6, + 12: 7, + 13: 8, + 14: [1, 9], + 15: [1, 10], + 16: [1, 12], + 19: [1, 11], + 20: [2, 4], + 22: [1, 13], + 23: [1, 14], + 24: [1, 15] + }, + { + 4: 21, + 6: 3, + 8: 4, + 9: 5, + 11: 6, + 12: 7, + 13: 8, + 14: [1, 9], + 15: [1, 10], + 16: [1, 12], + 19: [1, 11], + 20: [2, 4], + 22: [1, 13], + 23: [1, 14], + 24: [1, 15] + }, + { + 5: [2, 9], + 14: [2, 9], + 15: [2, 9], + 16: [2, 9], + 19: [2, 9], + 20: [2, 9], + 22: [2, 9], + 23: [2, 9], + 24: [2, 9] + }, + { + 5: [2, 10], + 14: [2, 10], + 15: [2, 10], + 16: [2, 10], + 19: [2, 10], + 20: [2, 10], + 22: [2, 10], + 23: [2, 10], + 24: [2, 10] + }, + { + 5: [2, 11], + 14: [2, 11], + 15: [2, 11], + 16: [2, 11], + 19: [2, 11], + 20: [2, 11], + 22: [2, 11], + 23: [2, 11], + 24: [2, 11] + }, + { + 5: [2, 12], + 14: [2, 12], + 15: [2, 12], + 16: [2, 12], + 19: [2, 12], + 20: [2, 12], + 22: [2, 12], + 23: [2, 12], + 24: [2, 12] + }, + { 17: 22, 21: 23, 33: [1, 25], 35: 24 }, + { 17: 26, 21: 23, 33: [1, 25], 35: 24 }, + { 17: 27, 21: 23, 33: [1, 25], 35: 24 }, + { 17: 28, 21: 23, 33: [1, 25], 35: 24 }, + { 21: 29, 33: [1, 25], 35: 24 }, + { 1: [2, 1] }, + { + 6: 30, + 8: 4, + 9: 5, + 11: 6, + 12: 7, + 13: 8, + 14: [1, 9], + 15: [1, 10], + 16: [1, 12], + 19: [1, 11], + 22: [1, 13], + 23: [1, 14], + 24: [1, 15] + }, + { + 5: [2, 6], + 14: [2, 6], + 15: [2, 6], + 16: [2, 6], + 19: [2, 6], + 20: [2, 6], + 22: [2, 6], + 23: [2, 6], + 24: [2, 6] + }, + { 17: 22, 18: [1, 31], 21: 23, 33: [1, 25], 35: 24 }, + { 10: 32, 20: [1, 33] }, + { 10: 34, 20: [1, 33] }, + { 18: [1, 35] }, + { + 18: [2, 24], + 21: 40, + 25: 36, + 26: 37, + 27: 38, + 28: [1, 41], + 29: [1, 42], + 30: [1, 43], + 31: 39, + 32: 44, + 33: [1, 45], + 35: 24 + }, + { + 18: [2, 38], + 28: [2, 38], + 29: [2, 38], + 30: [2, 38], + 33: [2, 38], + 36: [1, 46] + }, + { + 18: [2, 40], + 28: [2, 40], + 29: [2, 40], + 30: [2, 40], + 33: [2, 40], + 36: [2, 40] + }, + { 18: [1, 47] }, + { 18: [1, 48] }, + { 18: [1, 49] }, + { 18: [1, 50], 21: 51, 33: [1, 25], 35: 24 }, + { + 5: [2, 2], + 8: 18, + 9: 5, + 11: 6, + 12: 7, + 13: 8, + 14: [1, 9], + 15: [1, 10], + 16: [1, 12], + 19: [1, 11], + 20: [2, 2], + 22: [1, 13], + 23: [1, 14], + 24: [1, 15] + }, + { + 14: [2, 20], + 15: [2, 20], + 16: [2, 20], + 19: [2, 20], + 22: [2, 20], + 23: [2, 20], + 24: [2, 20] + }, + { + 5: [2, 7], + 14: [2, 7], + 15: [2, 7], + 16: [2, 7], + 19: [2, 7], + 20: [2, 7], + 22: [2, 7], + 23: [2, 7], + 24: [2, 7] + }, + { 21: 52, 33: [1, 25], 35: 24 }, + { + 5: [2, 8], + 14: [2, 8], + 15: [2, 8], + 16: [2, 8], + 19: [2, 8], + 20: [2, 8], + 22: [2, 8], + 23: [2, 8], + 24: [2, 8] + }, + { + 14: [2, 14], + 15: [2, 14], + 16: [2, 14], + 19: [2, 14], + 20: [2, 14], + 22: [2, 14], + 23: [2, 14], + 24: [2, 14] + }, + { + 18: [2, 22], + 21: 40, + 26: 53, + 27: 54, + 28: [1, 41], + 29: [1, 42], + 30: [1, 43], + 31: 39, + 32: 44, + 33: [1, 45], + 35: 24 + }, + { 18: [2, 23] }, + { 18: [2, 26], 28: [2, 26], 29: [2, 26], 30: [2, 26], 33: [2, 26] }, + { 18: [2, 31], 32: 55, 33: [1, 56] }, + { 18: [2, 27], 28: [2, 27], 29: [2, 27], 30: [2, 27], 33: [2, 27] }, + { 18: [2, 28], 28: [2, 28], 29: [2, 28], 30: [2, 28], 33: [2, 28] }, + { 18: [2, 29], 28: [2, 29], 29: [2, 29], 30: [2, 29], 33: [2, 29] }, + { 18: [2, 30], 28: [2, 30], 29: [2, 30], 30: [2, 30], 33: [2, 30] }, + { 18: [2, 33], 33: [2, 33] }, + { + 18: [2, 40], + 28: [2, 40], + 29: [2, 40], + 30: [2, 40], + 33: [2, 40], + 34: [1, 57], + 36: [2, 40] + }, + { 33: [1, 58] }, + { + 14: [2, 13], + 15: [2, 13], + 16: [2, 13], + 19: [2, 13], + 20: [2, 13], + 22: [2, 13], + 23: [2, 13], + 24: [2, 13] + }, + { + 5: [2, 16], + 14: [2, 16], + 15: [2, 16], + 16: [2, 16], + 19: [2, 16], + 20: [2, 16], + 22: [2, 16], + 23: [2, 16], + 24: [2, 16] + }, + { + 5: [2, 17], + 14: [2, 17], + 15: [2, 17], + 16: [2, 17], + 19: [2, 17], + 20: [2, 17], + 22: [2, 17], + 23: [2, 17], + 24: [2, 17] + }, + { + 5: [2, 18], + 14: [2, 18], + 15: [2, 18], + 16: [2, 18], + 19: [2, 18], + 20: [2, 18], + 22: [2, 18], + 23: [2, 18], + 24: [2, 18] + }, + { 18: [1, 59] }, + { 18: [1, 60] }, + { 18: [2, 21] }, + { 18: [2, 25], 28: [2, 25], 29: [2, 25], 30: [2, 25], 33: [2, 25] }, + { 18: [2, 32], 33: [2, 32] }, + { 34: [1, 57] }, + { 21: 61, 28: [1, 62], 29: [1, 63], 30: [1, 64], 33: [1, 25], 35: 24 }, + { + 18: [2, 39], + 28: [2, 39], + 29: [2, 39], + 30: [2, 39], + 33: [2, 39], + 36: [2, 39] + }, + { + 5: [2, 19], + 14: [2, 19], + 15: [2, 19], + 16: [2, 19], + 19: [2, 19], + 20: [2, 19], + 22: [2, 19], + 23: [2, 19], + 24: [2, 19] + }, + { + 5: [2, 15], + 14: [2, 15], + 15: [2, 15], + 16: [2, 15], + 19: [2, 15], + 20: [2, 15], + 22: [2, 15], + 23: [2, 15], + 24: [2, 15] + }, + { 18: [2, 34], 33: [2, 34] }, + { 18: [2, 35], 33: [2, 35] }, + { 18: [2, 36], 33: [2, 36] }, + { 18: [2, 37], 33: [2, 37] } + ], + defaultActions: { 16: [2, 1], 37: [2, 23], 53: [2, 21] }, + parseError: function parseError(str, hash) { + throw new Error(str); + }, + parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], + lstack = [], + table = this.table, + yytext = '', + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + if (typeof this.lexer.yylloc == 'undefined') this.lexer.yylloc = {}; + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + if (typeof this.yy.parseError === 'function') + this.parseError = this.yy.parseError; + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + function lex() { + var token; + token = self.lexer.lex() || 1; + if (typeof token !== 'number') { + token = self.symbols_[token] || token; + } + return token; + } + var symbol, + preErrorSymbol, + state, + action, + a, + r, + yyval = {}, + p, + len, + newState, + expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol == null) symbol = lex(); + action = table[state] && table[state][symbol]; + } + if (typeof action === 'undefined' || !action.length || !action[0]) { + if (!recovering) { + expected = []; + for (p in table[state]) + if (this.terminals_[p] && p > 2) { + expected.push("'" + this.terminals_[p] + "'"); + } + var errStr = ''; + if (this.lexer.showPosition) { + errStr = + 'Parse error on line ' + + (yylineno + 1) + + ':\n' + + this.lexer.showPosition() + + '\nExpecting ' + + expected.join(', ') + + ", got '" + + this.terminals_[symbol] + + "'"; + } else { + errStr = + 'Parse error on line ' + + (yylineno + 1) + + ': Unexpected ' + + (symbol == 1 + ? 'end of input' + : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: this.lexer.match, + token: this.terminals_[symbol] || symbol, + line: this.lexer.yylineno, + loc: yyloc, + expected: expected + }); + } + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error( + 'Parse Error: multiple actions possible at state: ' + + state + + ', token: ' + + symbol + ); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) recovering--; + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column + }; + r = this.performAction.call( + yyval, + yytext, + yyleng, + yylineno, + this.yy, + action[1], + vstack, + lstack + ); + if (typeof r !== 'undefined') { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; /* Jison generated lexer */ + var lexer = (function () { + var lexer = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parseError) { + this.yy.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function (input) { + this._input = input; + this._more = this._less = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + return this; + }, + input: function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/\n/); + if (lines) this.yylineno++; + this._input = this._input.slice(1); + return ch; + }, + unput: function (ch) { + this._input = ch + this._input; + return this; + }, + more: function () { + this._more = true; + return this; + }, + pastInput: function () { + var past = this.matched.substr( + 0, + this.matched.length - this.match.length + ); + return ( + (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, '') + ); + }, + upcomingInput: function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace( + /\n/g, + '' + ); + }, + showPosition: function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join('-'); + return pre + this.upcomingInput() + '\n' + c + '^'; + }, + next: function () { + if (this.done) { + return this.EOF; + } + if (!this._input) this.done = true; + + var token, match, col, lines; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + match = this._input.match(this.rules[rules[i]]); + if (match) { + lines = match[0].match(/\n.*/g); + if (lines) this.yylineno += lines.length; + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - 1 + : this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + this._more = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call( + this, + this.yy, + this, + rules[i], + this.conditionStack[this.conditionStack.length - 1] + ); + if (token) return token; + else return; + } + } + if (this._input === '') { + return this.EOF; + } else { + this.parseError( + 'Lexical error on line ' + + (this.yylineno + 1) + + '. Unrecognized text.\n' + + this.showPosition(), + { text: '', token: null, line: this.yylineno } + ); + } + }, + lex: function lex() { + var r = this.next(); + if (typeof r !== 'undefined') { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + return this.conditionStack.pop(); + }, + _currentRules: function _currentRules() { + return this.conditions[ + this.conditionStack[this.conditionStack.length - 1] + ].rules; + }, + topState: function () { + return this.conditionStack[this.conditionStack.length - 2]; + }, + pushState: function begin(condition) { + this.begin(condition); + } + }; + lexer.performAction = function anonymous( + yy, + yy_, + $avoiding_name_collisions, + YY_START + ) { + var YYSTATE = YY_START; + switch ($avoiding_name_collisions) { + case 0: + if (yy_.yytext.slice(-1) !== '\\') this.begin('mu'); + if (yy_.yytext.slice(-1) === '\\') + (yy_.yytext = yy_.yytext.substr(0, yy_.yyleng - 1)), + this.begin('emu'); + if (yy_.yytext) return 14; + + break; + case 1: + return 14; + break; + case 2: + this.popState(); + return 14; + break; + case 3: + return 24; + break; + case 4: + return 16; + break; + case 5: + return 20; + break; + case 6: + return 19; + break; + case 7: + return 19; + break; + case 8: + return 23; + break; + case 9: + return 23; + break; + case 10: + yy_.yytext = yy_.yytext.substr(3, yy_.yyleng - 5); + this.popState(); + return 15; + break; + case 11: + return 22; + break; + case 12: + return 34; + break; + case 13: + return 33; + break; + case 14: + return 33; + break; + case 15: + return 36; + break; + case 16 /*ignore whitespace*/: + break; + case 17: + this.popState(); + return 18; + break; + case 18: + this.popState(); + return 18; + break; + case 19: + yy_.yytext = yy_.yytext + .substr(1, yy_.yyleng - 2) + .replace(/\\"/g, '"'); + return 28; + break; + case 20: + return 30; + break; + case 21: + return 30; + break; + case 22: + return 29; + break; + case 23: + return 33; + break; + case 24: + yy_.yytext = yy_.yytext.substr(1, yy_.yyleng - 2); + return 33; + break; + case 25: + return 'INVALID'; + break; + case 26: + return 5; + break; + } + }; + lexer.rules = [ + /^[^\x00]*?(?=(\{\{))/, + /^[^\x00]+/, + /^[^\x00]{2,}?(?=(\{\{))/, + /^\{\{>/, + /^\{\{#/, + /^\{\{\//, + /^\{\{\^/, + /^\{\{\s*else\b/, + /^\{\{\{/, + /^\{\{&/, + /^\{\{![\s\S]*?\}\}/, + /^\{\{/, + /^=/, + /^\.(?=[} ])/, + /^\.\./, + /^[\/.]/, + /^\s+/, + /^\}\}\}/, + /^\}\}/, + /^"(\\["]|[^"])*"/, + /^true(?=[}\s])/, + /^false(?=[}\s])/, + /^[0-9]+(?=[}\s])/, + /^[a-zA-Z0-9_$-]+(?=[=}\s\/.])/, + /^\[[^\]]*\]/, + /^./, + /^$/ + ]; + lexer.conditions = { + mu: { + rules: [ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26 + ], + inclusive: false + }, + emu: { rules: [2], inclusive: false }, + INITIAL: { rules: [0, 1, 26], inclusive: true } + }; + return lexer; + })(); + parser.lexer = lexer; + return parser; +})(); +if (typeof require !== 'undefined' && typeof exports !== 'undefined') { + exports.parser = handlebars; + exports.parse = function () { + return handlebars.parse.apply(handlebars, arguments); + }; + exports.main = function commonjsMain(args) { + if (!args[1]) throw new Error('Usage: ' + args[0] + ' FILE'); + if (typeof process !== 'undefined') { + var source = require('fs').readFileSync( + require('path').join(process.cwd(), args[1]), + 'utf8' + ); + } else { + var cwd = require('file').path(require('file').cwd()); + var source = cwd.join(args[1]).read({ charset: 'utf-8' }); + } + return exports.parser.parse(source); + }; + if (typeof module !== 'undefined' && require.main === module) { + exports.main( + typeof process !== 'undefined' + ? process.argv.slice(1) + : require('system').args + ); + } +} +// lib/handlebars/compiler/base.js +Handlebars.Parser = handlebars; + +Handlebars.parse = function (string) { + Handlebars.Parser.yy = Handlebars.AST; + return Handlebars.Parser.parse(string); +}; + +Handlebars.print = function (ast) { + return new Handlebars.PrintVisitor().accept(ast); +}; + +Handlebars.logger = { + DEBUG: 0, + INFO: 1, + WARN: 2, + ERROR: 3, + level: 3, + + // override in the host environment + log: function (level, str) {} +}; + +Handlebars.log = function (level, str) { + Handlebars.logger.log(level, str); +}; +// lib/handlebars/compiler/ast.js +(function () { + Handlebars.AST = {}; + + Handlebars.AST.ProgramNode = function (statements, inverse) { + this.type = 'program'; + this.statements = statements; + if (inverse) { + this.inverse = new Handlebars.AST.ProgramNode(inverse); + } + }; + + Handlebars.AST.MustacheNode = function (params, hash, unescaped) { + this.type = 'mustache'; + this.id = params[0]; + this.params = params.slice(1); + this.hash = hash; + this.escaped = !unescaped; + }; + + Handlebars.AST.PartialNode = function (id, context) { + this.type = 'partial'; + + // TODO: disallow complex IDs + + this.id = id; + this.context = context; + }; + + var verifyMatch = function (open, close) { + if (open.original !== close.original) { + throw new Handlebars.Exception( + open.original + " doesn't match " + close.original + ); + } + }; + + Handlebars.AST.BlockNode = function (mustache, program, close) { + verifyMatch(mustache.id, close); + this.type = 'block'; + this.mustache = mustache; + this.program = program; + }; + + Handlebars.AST.InverseNode = function (mustache, program, close) { + verifyMatch(mustache.id, close); + this.type = 'inverse'; + this.mustache = mustache; + this.program = program; + }; + + Handlebars.AST.ContentNode = function (string) { + this.type = 'content'; + this.string = string; + }; + + Handlebars.AST.HashNode = function (pairs) { + this.type = 'hash'; + this.pairs = pairs; + }; + + Handlebars.AST.IdNode = function (parts) { + this.type = 'ID'; + this.original = parts.join('.'); + + var dig = [], + depth = 0; + + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + + if (part === '..') { + depth++; + } else if (part === '.' || part === 'this') { + this.isScoped = true; + } else { + dig.push(part); + } + } + + this.parts = dig; + this.string = dig.join('.'); + this.depth = depth; + this.isSimple = dig.length === 1 && depth === 0; + }; + + Handlebars.AST.StringNode = function (string) { + this.type = 'STRING'; + this.string = string; + }; + + Handlebars.AST.IntegerNode = function (integer) { + this.type = 'INTEGER'; + this.integer = integer; + }; + + Handlebars.AST.BooleanNode = function (bool) { + this.type = 'BOOLEAN'; + this.bool = bool; + }; + + Handlebars.AST.CommentNode = function (comment) { + this.type = 'comment'; + this.comment = comment; + }; +})(); +// lib/handlebars/utils.js +Handlebars.Exception = function (message) { + var tmp = Error.prototype.constructor.apply(this, arguments); + + for (var p in tmp) { + if (tmp.hasOwnProperty(p)) { + this[p] = tmp[p]; + } + } + + this.message = tmp.message; +}; +Handlebars.Exception.prototype = new Error(); + +// Build out our basic SafeString type +Handlebars.SafeString = function (string) { + this.string = string; +}; +Handlebars.SafeString.prototype.toString = function () { + return this.string.toString(); +}; + +(function () { + var escape = { + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + var badChars = /&(?!\w+;)|[<>"'`]/g; + var possible = /[&<>"'`]/; + + var escapeChar = function (chr) { + return escape[chr] || '&'; + }; + + Handlebars.Utils = { + escapeExpression: function (string) { + // don't escape SafeStrings, since they're already safe + if (string instanceof Handlebars.SafeString) { + return string.toString(); + } else if (string == null || string === false) { + return ''; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + }, + + isEmpty: function (value) { + if (typeof value === 'undefined') { + return true; + } else if (value === null) { + return true; + } else if (value === false) { + return true; + } else if ( + Object.prototype.toString.call(value) === '[object Array]' && + value.length === 0 + ) { + return true; + } else { + return false; + } + } + }; +})(); +// lib/handlebars/compiler/compiler.js +Handlebars.Compiler = function () {}; +Handlebars.JavaScriptCompiler = function () {}; + +(function (Compiler, JavaScriptCompiler) { + Compiler.OPCODE_MAP = { + appendContent: 1, + getContext: 2, + lookupWithHelpers: 3, + lookup: 4, + append: 5, + invokeMustache: 6, + appendEscaped: 7, + pushString: 8, + truthyOrFallback: 9, + functionOrFallback: 10, + invokeProgram: 11, + invokePartial: 12, + push: 13, + assignToHash: 15, + pushStringParam: 16 + }; + + Compiler.MULTI_PARAM_OPCODES = { + appendContent: 1, + getContext: 1, + lookupWithHelpers: 2, + lookup: 1, + invokeMustache: 3, + pushString: 1, + truthyOrFallback: 1, + functionOrFallback: 1, + invokeProgram: 3, + invokePartial: 1, + push: 1, + assignToHash: 1, + pushStringParam: 1 + }; + + Compiler.DISASSEMBLE_MAP = {}; + + for (var prop in Compiler.OPCODE_MAP) { + var value = Compiler.OPCODE_MAP[prop]; + Compiler.DISASSEMBLE_MAP[value] = prop; + } + + Compiler.multiParamSize = function (code) { + return Compiler.MULTI_PARAM_OPCODES[Compiler.DISASSEMBLE_MAP[code]]; + }; + + Compiler.prototype = { + compiler: Compiler, + + disassemble: function () { + var opcodes = this.opcodes, + opcode, + nextCode; + var out = [], + str, + name, + value; + + for (var i = 0, l = opcodes.length; i < l; i++) { + opcode = opcodes[i]; + + if (opcode === 'DECLARE') { + name = opcodes[++i]; + value = opcodes[++i]; + out.push('DECLARE ' + name + ' = ' + value); + } else { + str = Compiler.DISASSEMBLE_MAP[opcode]; + + var extraParams = Compiler.multiParamSize(opcode); + var codes = []; + + for (var j = 0; j < extraParams; j++) { + nextCode = opcodes[++i]; + + if (typeof nextCode === 'string') { + nextCode = '"' + nextCode.replace('\n', '\\n') + '"'; + } + + codes.push(nextCode); + } + + str = str + ' ' + codes.join(' '); + + out.push(str); + } + } + + return out.join('\n'); + }, + + guid: 0, + + compile: function (program, options) { + this.children = []; + this.depths = { list: [] }; + this.options = options; + + // These changes will propagate to the other compiler components + var knownHelpers = this.options.knownHelpers; + this.options.knownHelpers = { + helperMissing: true, + blockHelperMissing: true, + each: true, + if: true, + unless: true, + with: true, + log: true + }; + if (knownHelpers) { + for (var name in knownHelpers) { + this.options.knownHelpers[name] = knownHelpers[name]; + } + } + + return this.program(program); + }, + + accept: function (node) { + return this[node.type](node); + }, + + program: function (program) { + var statements = program.statements, + statement; + this.opcodes = []; + + for (var i = 0, l = statements.length; i < l; i++) { + statement = statements[i]; + this[statement.type](statement); + } + this.isSimple = l === 1; + + this.depths.list = this.depths.list.sort(function (a, b) { + return a - b; + }); + + return this; + }, + + compileProgram: function (program) { + var result = new this.compiler().compile(program, this.options); + var guid = this.guid++; + + this.usePartial = this.usePartial || result.usePartial; + + this.children[guid] = result; + + for (var i = 0, l = result.depths.list.length; i < l; i++) { + depth = result.depths.list[i]; + + if (depth < 2) { + continue; + } else { + this.addDepth(depth - 1); + } + } + + return guid; + }, + + block: function (block) { + var mustache = block.mustache; + var depth, child, inverse, inverseGuid; + + var params = this.setupStackForMustache(mustache); + + var programGuid = this.compileProgram(block.program); + + if (block.program.inverse) { + inverseGuid = this.compileProgram(block.program.inverse); + this.declare('inverse', inverseGuid); + } + + this.opcode('invokeProgram', programGuid, params.length, !!mustache.hash); + this.declare('inverse', null); + this.opcode('append'); + }, + + inverse: function (block) { + var params = this.setupStackForMustache(block.mustache); + + var programGuid = this.compileProgram(block.program); + + this.declare('inverse', programGuid); + + this.opcode('invokeProgram', null, params.length, !!block.mustache.hash); + this.declare('inverse', null); + this.opcode('append'); + }, + + hash: function (hash) { + var pairs = hash.pairs, + pair, + val; + + this.opcode('push', '{}'); + + for (var i = 0, l = pairs.length; i < l; i++) { + pair = pairs[i]; + val = pair[1]; + + this.accept(val); + this.opcode('assignToHash', pair[0]); + } + }, + + partial: function (partial) { + var id = partial.id; + this.usePartial = true; + + if (partial.context) { + this.ID(partial.context); + } else { + this.opcode('push', 'depth0'); + } + + this.opcode('invokePartial', id.original); + this.opcode('append'); + }, + + content: function (content) { + this.opcode('appendContent', content.string); + }, + + mustache: function (mustache) { + var params = this.setupStackForMustache(mustache); + + this.opcode( + 'invokeMustache', + params.length, + mustache.id.original, + !!mustache.hash + ); + + if (mustache.escaped && !this.options.noEscape) { + this.opcode('appendEscaped'); + } else { + this.opcode('append'); + } + }, + + ID: function (id) { + this.addDepth(id.depth); + + this.opcode('getContext', id.depth); + + this.opcode( + 'lookupWithHelpers', + id.parts[0] || null, + id.isScoped || false + ); + + for (var i = 1, l = id.parts.length; i < l; i++) { + this.opcode('lookup', id.parts[i]); + } + }, + + STRING: function (string) { + this.opcode('pushString', string.string); + }, + + INTEGER: function (integer) { + this.opcode('push', integer.integer); + }, + + BOOLEAN: function (bool) { + this.opcode('push', bool.bool); + }, + + comment: function () {}, + + // HELPERS + pushParams: function (params) { + var i = params.length, + param; + + while (i--) { + param = params[i]; + + if (this.options.stringParams) { + if (param.depth) { + this.addDepth(param.depth); + } + + this.opcode('getContext', param.depth || 0); + this.opcode('pushStringParam', param.string); + } else { + this[param.type](param); + } + } + }, + + opcode: function (name, val1, val2, val3) { + this.opcodes.push(Compiler.OPCODE_MAP[name]); + if (val1 !== undefined) { + this.opcodes.push(val1); + } + if (val2 !== undefined) { + this.opcodes.push(val2); + } + if (val3 !== undefined) { + this.opcodes.push(val3); + } + }, + + declare: function (name, value) { + this.opcodes.push('DECLARE'); + this.opcodes.push(name); + this.opcodes.push(value); + }, + + addDepth: function (depth) { + if (depth === 0) { + return; + } + + if (!this.depths[depth]) { + this.depths[depth] = true; + this.depths.list.push(depth); + } + }, + + setupStackForMustache: function (mustache) { + var params = mustache.params; + + this.pushParams(params); + + if (mustache.hash) { + this.hash(mustache.hash); + } + + this.ID(mustache.id); + + return params; + } + }; + + JavaScriptCompiler.prototype = { + // PUBLIC API: You can override these methods in a subclass to provide + // alternative compiled forms for name lookup and buffering semantics + nameLookup: function (parent, name, type) { + if (/^[0-9]+$/.test(name)) { + return parent + '[' + name + ']'; + } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { + return parent + '.' + name; + } else { + return parent + "['" + name + "']"; + } + }, + + appendToBuffer: function (string) { + if (this.environment.isSimple) { + return 'return ' + string + ';'; + } else { + return 'buffer += ' + string + ';'; + } + }, + + initializeBuffer: function () { + return this.quotedString(''); + }, + + namespace: 'Handlebars', + // END PUBLIC API + + compile: function (environment, options, context, asObject) { + this.environment = environment; + this.options = options || {}; + + this.name = this.environment.name; + this.isChild = !!context; + this.context = context || { + programs: [], + aliases: { self: 'this' }, + registers: { list: [] } + }; + + this.preamble(); + + this.stackSlot = 0; + this.stackVars = []; + + this.compileChildren(environment, options); + + var opcodes = environment.opcodes, + opcode; + + this.i = 0; + + for (l = opcodes.length; this.i < l; this.i++) { + opcode = this.nextOpcode(0); + + if (opcode[0] === 'DECLARE') { + this.i = this.i + 2; + this[opcode[1]] = opcode[2]; + } else { + this.i = this.i + opcode[1].length; + this[opcode[0]].apply(this, opcode[1]); + } + } + + return this.createFunctionContext(asObject); + }, + + nextOpcode: function (n) { + var opcodes = this.environment.opcodes, + opcode = opcodes[this.i + n], + name, + val; + var extraParams, codes; + + if (opcode === 'DECLARE') { + name = opcodes[this.i + 1]; + val = opcodes[this.i + 2]; + return ['DECLARE', name, val]; + } else { + name = Compiler.DISASSEMBLE_MAP[opcode]; + + extraParams = Compiler.multiParamSize(opcode); + codes = []; + + for (var j = 0; j < extraParams; j++) { + codes.push(opcodes[this.i + j + 1 + n]); + } + + return [name, codes]; + } + }, + + eat: function (opcode) { + this.i = this.i + opcode.length; + }, + + preamble: function () { + var out = []; + + // this register will disambiguate helper lookup from finding a function in + // a context. This is necessary for mustache compatibility, which requires + // that context functions in blocks are evaluated by blockHelperMissing, and + // then proceed as if the resulting value was provided to blockHelperMissing. + this.useRegister('foundHelper'); + + if (!this.isChild) { + var namespace = this.namespace; + var copies = 'helpers = helpers || ' + namespace + '.helpers;'; + if (this.environment.usePartial) { + copies = + copies + ' partials = partials || ' + namespace + '.partials;'; + } + out.push(copies); + } else { + out.push(''); + } + + if (!this.environment.isSimple) { + out.push(', buffer = ' + this.initializeBuffer()); + } else { + out.push(''); + } + + // track the last context pushed into place to allow skipping the + // getContext opcode when it would be a noop + this.lastContext = 0; + this.source = out; + }, + + createFunctionContext: function (asObject) { + var locals = this.stackVars; + if (!this.isChild) { + locals = locals.concat(this.context.registers.list); + } + + if (locals.length > 0) { + this.source[1] = this.source[1] + ', ' + locals.join(', '); + } + + // Generate minimizer alias mappings + if (!this.isChild) { + var aliases = []; + for (var alias in this.context.aliases) { + this.source[1] = + this.source[1] + ', ' + alias + '=' + this.context.aliases[alias]; + } + } + + if (this.source[1]) { + this.source[1] = 'var ' + this.source[1].substring(2) + ';'; + } + + // Merge children + if (!this.isChild) { + this.source[1] += '\n' + this.context.programs.join('\n') + '\n'; + } + + if (!this.environment.isSimple) { + this.source.push('return buffer;'); + } + + var params = this.isChild + ? ['depth0', 'data'] + : ['Handlebars', 'depth0', 'helpers', 'partials', 'data']; + + for (var i = 0, l = this.environment.depths.list.length; i < l; i++) { + params.push('depth' + this.environment.depths.list[i]); + } + + if (asObject) { + params.push(this.source.join('\n ')); + + return Function.apply(this, params); + } else { + var functionSource = + 'function ' + + (this.name || '') + + '(' + + params.join(',') + + ') {\n ' + + this.source.join('\n ') + + '}'; + Handlebars.log(Handlebars.logger.DEBUG, functionSource + '\n\n'); + return functionSource; + } + }, + + appendContent: function (content) { + this.source.push(this.appendToBuffer(this.quotedString(content))); + }, + + append: function () { + var local = this.popStack(); + this.source.push( + 'if(' + + local + + ' || ' + + local + + ' === 0) { ' + + this.appendToBuffer(local) + + ' }' + ); + if (this.environment.isSimple) { + this.source.push('else { ' + this.appendToBuffer("''") + ' }'); + } + }, + + appendEscaped: function () { + var opcode = this.nextOpcode(1), + extra = ''; + this.context.aliases.escapeExpression = 'this.escapeExpression'; + + if (opcode[0] === 'appendContent') { + extra = ' + ' + this.quotedString(opcode[1][0]); + this.eat(opcode); + } + + this.source.push( + this.appendToBuffer('escapeExpression(' + this.popStack() + ')' + extra) + ); + }, + + getContext: function (depth) { + if (this.lastContext !== depth) { + this.lastContext = depth; + } + }, + + lookupWithHelpers: function (name, isScoped) { + if (name) { + var topStack = this.nextStack(); + + this.usingKnownHelper = false; + + var toPush; + if (!isScoped && this.options.knownHelpers[name]) { + toPush = + topStack + ' = ' + this.nameLookup('helpers', name, 'helper'); + this.usingKnownHelper = true; + } else if (isScoped || this.options.knownHelpersOnly) { + toPush = + topStack + + ' = ' + + this.nameLookup('depth' + this.lastContext, name, 'context'); + } else { + this.register( + 'foundHelper', + this.nameLookup('helpers', name, 'helper') + ); + toPush = + topStack + + ' = foundHelper || ' + + this.nameLookup('depth' + this.lastContext, name, 'context'); + } + + toPush += ';'; + this.source.push(toPush); + } else { + this.pushStack('depth' + this.lastContext); + } + }, + + lookup: function (name) { + var topStack = this.topStack(); + this.source.push( + topStack + + ' = (' + + topStack + + ' === null || ' + + topStack + + ' === undefined || ' + + topStack + + ' === false ? ' + + topStack + + ' : ' + + this.nameLookup(topStack, name, 'context') + + ');' + ); + }, + + pushStringParam: function (string) { + this.pushStack('depth' + this.lastContext); + this.pushString(string); + }, + + pushString: function (string) { + this.pushStack(this.quotedString(string)); + }, + + push: function (name) { + this.pushStack(name); + }, + + invokeMustache: function (paramSize, original, hasHash) { + this.populateParams( + paramSize, + this.quotedString(original), + '{}', + null, + hasHash, + function (nextStack, helperMissingString, id) { + if (!this.usingKnownHelper) { + this.context.aliases.helperMissing = 'helpers.helperMissing'; + this.context.aliases.undef = 'void 0'; + this.source.push( + 'else if(' + + id + + '=== undef) { ' + + nextStack + + ' = helperMissing.call(' + + helperMissingString + + '); }' + ); + if (nextStack !== id) { + this.source.push('else { ' + nextStack + ' = ' + id + '; }'); + } + } + } + ); + }, + + invokeProgram: function (guid, paramSize, hasHash) { + var inverse = this.programExpression(this.inverse); + var mainProgram = this.programExpression(guid); + + this.populateParams( + paramSize, + null, + mainProgram, + inverse, + hasHash, + function (nextStack, helperMissingString, id) { + if (!this.usingKnownHelper) { + this.context.aliases.blockHelperMissing = + 'helpers.blockHelperMissing'; + this.source.push( + 'else { ' + + nextStack + + ' = blockHelperMissing.call(' + + helperMissingString + + '); }' + ); + } + } + ); + }, + + populateParams: function ( + paramSize, + helperId, + program, + inverse, + hasHash, + fn + ) { + var needsRegister = + hasHash || this.options.stringParams || inverse || this.options.data; + var id = this.popStack(), + nextStack; + var params = [], + param, + stringParam, + stringOptions; + + if (needsRegister) { + this.register('tmp1', program); + stringOptions = 'tmp1'; + } else { + stringOptions = '{ hash: {} }'; + } + + if (needsRegister) { + var hash = hasHash ? this.popStack() : '{}'; + this.source.push('tmp1.hash = ' + hash + ';'); + } + + if (this.options.stringParams) { + this.source.push('tmp1.contexts = [];'); + } + + for (var i = 0; i < paramSize; i++) { + param = this.popStack(); + params.push(param); + + if (this.options.stringParams) { + this.source.push('tmp1.contexts.push(' + this.popStack() + ');'); + } + } + + if (inverse) { + this.source.push('tmp1.fn = tmp1;'); + this.source.push('tmp1.inverse = ' + inverse + ';'); + } + + if (this.options.data) { + this.source.push('tmp1.data = data;'); + } + + params.push(stringOptions); + + this.populateCall(params, id, helperId || id, fn, program !== '{}'); + }, + + populateCall: function (params, id, helperId, fn, program) { + var paramString = ['depth0'].concat(params).join(', '); + var helperMissingString = ['depth0'] + .concat(helperId) + .concat(params) + .join(', '); + + var nextStack = this.nextStack(); + + if (this.usingKnownHelper) { + this.source.push( + nextStack + ' = ' + id + '.call(' + paramString + ');' + ); + } else { + this.context.aliases.functionType = '"function"'; + var condition = program ? 'foundHelper && ' : ''; + this.source.push( + 'if(' + + condition + + 'typeof ' + + id + + ' === functionType) { ' + + nextStack + + ' = ' + + id + + '.call(' + + paramString + + '); }' + ); + } + fn.call(this, nextStack, helperMissingString, id); + this.usingKnownHelper = false; + }, + + invokePartial: function (context) { + params = [ + this.nameLookup('partials', context, 'partial'), + "'" + context + "'", + this.popStack(), + 'helpers', + 'partials' + ]; + + if (this.options.data) { + params.push('data'); + } + + this.pushStack('self.invokePartial(' + params.join(', ') + ');'); + }, + + assignToHash: function (key) { + var value = this.popStack(); + var hash = this.topStack(); + + this.source.push(hash + "['" + key + "'] = " + value + ';'); + }, + + // HELPERS + + compiler: JavaScriptCompiler, + + compileChildren: function (environment, options) { + var children = environment.children, + child, + compiler; + + for (var i = 0, l = children.length; i < l; i++) { + child = children[i]; + compiler = new this.compiler(); + + this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children + var index = this.context.programs.length; + child.index = index; + child.name = 'program' + index; + this.context.programs[index] = compiler.compile( + child, + options, + this.context + ); + } + }, + + programExpression: function (guid) { + if (guid == null) { + return 'self.noop'; + } + + var child = this.environment.children[guid], + depths = child.depths.list; + var programParams = [child.index, child.name, 'data']; + + for (var i = 0, l = depths.length; i < l; i++) { + depth = depths[i]; + + if (depth === 1) { + programParams.push('depth0'); + } else { + programParams.push('depth' + (depth - 1)); + } + } + + if (depths.length === 0) { + return 'self.program(' + programParams.join(', ') + ')'; + } else { + programParams.shift(); + return 'self.programWithDepth(' + programParams.join(', ') + ')'; + } + }, + + register: function (name, val) { + this.useRegister(name); + this.source.push(name + ' = ' + val + ';'); + }, + + useRegister: function (name) { + if (!this.context.registers[name]) { + this.context.registers[name] = true; + this.context.registers.list.push(name); + } + }, + + pushStack: function (item) { + this.source.push(this.nextStack() + ' = ' + item + ';'); + return 'stack' + this.stackSlot; + }, + + nextStack: function () { + this.stackSlot++; + if (this.stackSlot > this.stackVars.length) { + this.stackVars.push('stack' + this.stackSlot); + } + return 'stack' + this.stackSlot; + }, + + popStack: function () { + return 'stack' + this.stackSlot--; + }, + + topStack: function () { + return 'stack' + this.stackSlot; + }, + + quotedString: function (str) { + return ( + '"' + + str + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + + '"' + ); + } + }; + + var reservedWords = ( + 'break else new var' + + ' case finally return void' + + ' catch for switch while' + + ' continue function this with' + + ' default if throw' + + ' delete in try' + + ' do instanceof typeof' + + ' abstract enum int short' + + ' boolean export interface static' + + ' byte extends long super' + + ' char final native synchronized' + + ' class float package throws' + + ' const goto private transient' + + ' debugger implements protected volatile' + + ' double import public let yield' + ).split(' '); + + var compilerWords = (JavaScriptCompiler.RESERVED_WORDS = {}); + + for (var i = 0, l = reservedWords.length; i < l; i++) { + compilerWords[reservedWords[i]] = true; + } + + JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { + if ( + !JavaScriptCompiler.RESERVED_WORDS[name] && + /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name) + ) { + return true; + } + return false; + }; +})(Handlebars.Compiler, Handlebars.JavaScriptCompiler); + +Handlebars.precompile = function (string, options) { + options = options || {}; + + var ast = Handlebars.parse(string); + var environment = new Handlebars.Compiler().compile(ast, options); + return new Handlebars.JavaScriptCompiler().compile(environment, options); +}; + +Handlebars.compile = function (string, options) { + options = options || {}; + + var compiled; + function compile() { + var ast = Handlebars.parse(string); + var environment = new Handlebars.Compiler().compile(ast, options); + var templateSpec = new Handlebars.JavaScriptCompiler().compile( + environment, + options, + undefined, + true + ); + return Handlebars.template(templateSpec); + } + + // Template is only compiled on first use and cached after that point. + return function (context, options) { + if (!compiled) { + compiled = compile(); + } + return compiled.call(this, context, options); + }; +}; +// lib/handlebars/runtime.js +Handlebars.VM = { + template: function (templateSpec) { + // Just add water + var container = { + escapeExpression: Handlebars.Utils.escapeExpression, + invokePartial: Handlebars.VM.invokePartial, + programs: [], + program: function (i, fn, data) { + var programWrapper = this.programs[i]; + if (data) { + return Handlebars.VM.program(fn, data); + } else if (programWrapper) { + return programWrapper; + } else { + programWrapper = this.programs[i] = Handlebars.VM.program(fn); + return programWrapper; + } + }, + programWithDepth: Handlebars.VM.programWithDepth, + noop: Handlebars.VM.noop + }; + + return function (context, options) { + options = options || {}; + return templateSpec.call( + container, + Handlebars, + context, + options.helpers, + options.partials, + options.data + ); + }; + }, + + programWithDepth: function (fn, data, $depth) { + var args = Array.prototype.slice.call(arguments, 2); + + return function (context, options) { + options = options || {}; + + return fn.apply(this, [context, options.data || data].concat(args)); + }; + }, + program: function (fn, data) { + return function (context, options) { + options = options || {}; + + return fn(context, options.data || data); + }; + }, + noop: function () { + return ''; + }, + invokePartial: function (partial, name, context, helpers, partials, data) { + options = { helpers: helpers, partials: partials, data: data }; + + if (partial === undefined) { + throw new Handlebars.Exception( + 'The partial ' + name + ' could not be found' + ); + } else if (partial instanceof Function) { + return partial(context, options); + } else if (!Handlebars.compile) { + throw new Handlebars.Exception( + 'The partial ' + + name + + ' could not be compiled when running in runtime-only mode' + ); + } else { + partials[name] = Handlebars.compile(partial); + return partials[name](context, options); + } + } +}; + +Handlebars.template = Handlebars.VM.template; diff --git a/api-samples/sandbox/sandbox/icon_128.png b/api-samples/sandbox/sandbox/icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8a3e1e9b31a6ebca7ac90d48a378b4383439f8 GIT binary patch literal 4989 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 literal 0 HcmV?d00001 diff --git a/api-samples/sandbox/sandbox/mainpage.html b/api-samples/sandbox/sandbox/mainpage.html new file mode 100644 index 00000000..487bbfe8 --- /dev/null +++ b/api-samples/sandbox/sandbox/mainpage.html @@ -0,0 +1,32 @@ + + + + + + + + +
+ + +
+ +
+ + + + diff --git a/api-samples/sandbox/sandbox/mainpage.js b/api-samples/sandbox/sandbox/mainpage.js new file mode 100644 index 00000000..b042816a --- /dev/null +++ b/api-samples/sandbox/sandbox/mainpage.js @@ -0,0 +1,37 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +let counter = 0; +document.addEventListener('DOMContentLoaded', () => { + document.getElementById('reset').addEventListener('click', function () { + counter = 0; + document.querySelector('#result').innerHTML = ''; + }); + + document.getElementById('sendMessage').addEventListener('click', function () { + counter++; + let message = { + command: 'render', + templateName: 'sample-template-' + counter, + context: { counter: counter } + }; + document.getElementById('theFrame').contentWindow.postMessage(message, '*'); + }); + + // on result from sandboxed frame: + window.addEventListener('message', function () { + document.querySelector('#result').innerHTML = + event.data.result || 'invalid result'; + }); +}); diff --git a/api-samples/sandbox/sandbox/manifest.json b/api-samples/sandbox/sandbox/manifest.json new file mode 100644 index 00000000..2c3b469b --- /dev/null +++ b/api-samples/sandbox/sandbox/manifest.json @@ -0,0 +1,14 @@ +{ + "name": "Sandboxed Frame Sample", + "version": "1.0.3", + "manifest_version": 3, + "background": { + "service_worker": "service-worker.js" + }, + "icons": { + "128": "icon_128.png" + }, + "sandbox": { + "pages": ["sandbox.html"] + } +} diff --git a/api-samples/sandbox/sandbox/sandbox.html b/api-samples/sandbox/sandbox/sandbox.html new file mode 100644 index 00000000..8dcc76c1 --- /dev/null +++ b/api-samples/sandbox/sandbox/sandbox.html @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + diff --git a/api-samples/sandbox/sandbox/sandbox.md b/api-samples/sandbox/sandbox/sandbox.md new file mode 100644 index 00000000..9da04b8a --- /dev/null +++ b/api-samples/sandbox/sandbox/sandbox.md @@ -0,0 +1,10 @@ +# Sandbox + +This sample creates a tab with a sandboxed iframe (`sandbox.html`) to which the main page (`mainpage.html`) +passes a counter variable. The sandboxed page uses the +Handlebars template library to evaluate and compose a message +using the counter variable which is then passed back to the main page for rendering. + +## Overview + +The default Content Security Policy (CSP) settings of the extension disallows the use of `eval()` so using a sandbox is necessary to use external resources for this extension. diff --git a/api-samples/sandbox/sandbox/service-worker.js b/api-samples/sandbox/sandbox/service-worker.js new file mode 100644 index 00000000..1ed24462 --- /dev/null +++ b/api-samples/sandbox/sandbox/service-worker.js @@ -0,0 +1,26 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * Listens for the extension launching then creates a new tab + * + * @see http://developer.chrome.com/docs/extensions/reference/runtime + * @see http://developer.chrome.com/docs/extensions/reference/tabs + */ +chrome.runtime.onInstalled.addListener(() => { + chrome.tabs.create({ + url: 'mainpage.html' + }); + console.log('Opened a tab with a sandboxed page!'); +}); diff --git a/api-samples/sandbox/sandbox/styles/main.css b/api-samples/sandbox/sandbox/styles/main.css new file mode 100644 index 00000000..5badba0f --- /dev/null +++ b/api-samples/sandbox/sandbox/styles/main.css @@ -0,0 +1,42 @@ +html, +body { + font-family: Helvetica, Arial, sans-serif; +} + +button { + width: 150px; + line-height: 26px; + font-size: 14px; + border-radius:4px; + border: 1px solid #666; + background: -webkit-linear-gradient(top, #ffffff 0%, #f2f2f2 99%); + box-shadow: 0 1px 1px rgba(0,0,0,0.3); + color: #555; +} + +button:hover { + color: #333; +} + +button:active { + color: #000; +} + +#buttons { + text-align: center; + padding: 15px; + background: #fcfcfc; + border-bottom: 1px solid #f2f2f2; +} + +#result { + padding: 20px; +} + +#result h1 { + margin: 0 0 0.2em 0; +} + +#result p { + line-height: 140% +} diff --git a/api-samples/sandbox/sandboxed-content/assets/screenshot_1280_800.png b/api-samples/sandbox/sandboxed-content/assets/screenshot_1280_800.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bbab669eb998bdf6e8220e65c15d0a6cffea60 GIT binary patch literal 55767 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 b7cg~#9tZa1^H=KU<9#Rf40SV(*j@P_rT$M+ literal 0 HcmV?d00001 diff --git a/api-samples/sandbox/sandboxed-content/icon_128.png b/api-samples/sandbox/sandboxed-content/icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..3f66f0290fa272e18a353e61ec309fdef7a82c61 GIT binary patch literal 6943 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 literal 0 HcmV?d00001 diff --git a/api-samples/sandbox/sandboxed-content/main.html b/api-samples/sandbox/sandboxed-content/main.html new file mode 100644 index 00000000..01b87e0c --- /dev/null +++ b/api-samples/sandbox/sandboxed-content/main.html @@ -0,0 +1,13 @@ + + + + + Sandboxed Content + + + +

Main Window

+

I am the main window. I am not sandboxed.

+ + + diff --git a/api-samples/sandbox/sandboxed-content/manifest.json b/api-samples/sandbox/sandboxed-content/manifest.json new file mode 100644 index 00000000..8a6e3296 --- /dev/null +++ b/api-samples/sandbox/sandboxed-content/manifest.json @@ -0,0 +1,14 @@ +{ + "name": "Sandboxed Content Sample", + "version": "1.0.3", + "manifest_version": 3, + "background": { + "service_worker": "service-worker.js" + }, + "icons": { + "128": "icon_128.png" + }, + "sandbox": { + "pages": ["sandboxed.html"] + } +} diff --git a/api-samples/sandbox/sandboxed-content/sandboxed-content.md b/api-samples/sandbox/sandboxed-content/sandboxed-content.md new file mode 100644 index 00000000..977f008f --- /dev/null +++ b/api-samples/sandbox/sandboxed-content/sandboxed-content.md @@ -0,0 +1,8 @@ +# Sandboxed Content + +This sample creates a tab containing a sandboxed iframe (`sandbox.html`). +The sandbox calls `eval()` to write some HTML to its own document. + +## Overview + +The default Content Security Policy (CSP) settings of the extension disallows the use of `eval()` so using a sandbox is necessary to use external resources for this extension. diff --git a/api-samples/sandbox/sandboxed-content/sandboxed.html b/api-samples/sandbox/sandboxed-content/sandboxed.html new file mode 100644 index 00000000..fd0329ce --- /dev/null +++ b/api-samples/sandbox/sandboxed-content/sandboxed.html @@ -0,0 +1,19 @@ + + + + + Sandboxed Content + + + +

Sandboxed Content

+

I am the sandboxed iframe.

+
+ + + diff --git a/api-samples/sandbox/sandboxed-content/service-worker.js b/api-samples/sandbox/sandboxed-content/service-worker.js new file mode 100644 index 00000000..bbcae6d1 --- /dev/null +++ b/api-samples/sandbox/sandboxed-content/service-worker.js @@ -0,0 +1,25 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * Listens for the extension launching then creates the window + * + * @see http://developer.chrome.com/docs/extensions/reference/runtime.html + * @see http://developer.chrome.com/docs/extensions/reference/tab.html + */ +chrome.runtime.onInstalled.addListener(() => { + chrome.tabs.create({ + url: 'main.html' + }); +}); diff --git a/api-samples/sandbox/sandboxed-content/styles/main.css b/api-samples/sandbox/sandboxed-content/styles/main.css new file mode 100644 index 00000000..c6451aa4 --- /dev/null +++ b/api-samples/sandbox/sandboxed-content/styles/main.css @@ -0,0 +1,18 @@ +html, body { + font-family: Helvetica, Arial; + color: #444; +} + +h1 { + margin: 0 0 0.3em 0; +} + +p { + color: #888; + margin: 0 0 1em 0; +} + +iframe { + border: 1px solid #CCC; + margin-top: 20px; +}