diff --git a/make-base-messages.js b/make-base-messages.js
new file mode 100644
index 0000000000..178a24440b
--- /dev/null
+++ b/make-base-messages.js
@@ -0,0 +1,183 @@
+require('dotenv').config({path: 'src/.env'});
+const fs = require('fs-extra');
+const path = require('path');
+const walk = require("object-walk");
+const exec = require("child_process").exec;
+const yaml = require('js-yaml');
+const shell = require('shelljs');
+const colors = require('colors');
+const args = require("optimist").argv;
+
+const help = "Usage:\n" +
+ "Update all existing base project locale po files: node make-base-messages.js\n" +
+ "Add a new base project locale: node make-base-messages.js --set-new-locale=";
+
+if (args.h || args.help) {
+ console.log(help);
+ process.exit(0);
+}
+
+// Logging
+const logError = (msg) => {
+ console.error("(MAKEMESSAGES) ", colors.red("(ERROR!) "), msg);
+};
+
+const jsTemplatesRegexObj = new RegExp(/{{#_}}([\s\S]*?){{\/_}}/, "g");
+
+const basePath = path.resolve(
+ __dirname,
+ "src/base"
+);
+const baseLocalePath = path.resolve(
+ basePath,
+ "locale"
+);
+const potFilePath = path.resolve(
+ basePath,
+ "messages.pot"
+);
+const baseJSTemplatesPath = path.resolve(
+ basePath,
+ "jstemplates"
+);
+const messagesCatalogTempPath = path.resolve(
+ __dirname,
+ "temp-messages"
+);
+shell.mkdir('-p', messagesCatalogTempPath);
+
+let templatePath,
+ foundMessages,
+ jsTemplatesMessagesOutput;
+const extractTemplateMessages = (jsTemplateName, jsTemplatePath) => {
+ if (jsTemplate.endsWith("html") || jsTemplate.endsWith("hbs")) {
+ foundMessages = [];
+
+ // NOTE: we save these temp files as python files, so we can take
+ // advantage of Python's multiline string quoting capabilities. The JS
+ // equivalent (backticks) causes problems for xgettext.
+ jsTemplatesMessagesOutput = fs.createWriteStream(
+ path.resolve(
+ messagesCatalogTempPath,
+ jsTemplateName + "-messages.temp.py"
+ )
+ );
+ templateString = fs.readFileSync(
+ path.resolve(jsTemplatePath, jsTemplateName),
+ "utf8"
+ );
+ while (foundMessage = jsTemplatesRegexObj.exec(templateString)) {
+
+ // The second item in foundMessage represents the capture group
+ foundMessages.push(foundMessage[1]);
+ }
+
+ foundMessages.forEach((message) => {
+ jsTemplatesMessagesOutput.write('_("""' + escapeQuotes(message) + '""");\n');
+ });
+
+ jsTemplatesMessagesOutput.end();
+ }
+};
+
+const cleanup = () => {
+ shell.rm('-rf', messagesCatalogTempPath);
+ fs.existsSync(potFilePath) && shell.rm(potFilePath);
+};
+
+let basePOPath,
+ mergedBasePOPath;
+const mergeExistingLocales = () => {
+ const locales = fs.readdirSync(baseLocalePath)
+ .filter((locale) => {
+
+ // filter out any hidden system files, like .DS_Store
+ return !locale.startsWith("\.");
+ });
+ let numFinishedLocales = 0;
+ locales.forEach((locale) => {
+ basePOPath = path.resolve(
+ baseLocalePath,
+ locale,
+ "LC_MESSAGES/messages.po"
+ );
+
+ exec(
+ "msgmerge" +
+ " --no-location" +
+ " --no-fuzzy-matching" +
+ " --update " +
+ basePOPath + " " +
+ potFilePath,
+ (err) => {
+ if (err) {
+ logError("Error merging po files for " + locale + ": " + err);
+ logError("Aborting");
+
+ process.exit(1);
+ }
+ numFinishedLocales++;
+
+ // If we're all done, remove temporary files.
+ if (numFinishedLocales === locales.length) {
+ cleanup();
+ }
+ }
+ );
+ });
+};
+
+const generateCatalog = (merge, outputPath) => {
+ exec(
+ "xgettext" +
+ " --from-code=UTF-8" +
+ " --no-location" +
+ " -o " + outputPath + " " +
+ messagesCatalogTempPath + "/*",
+ (err) => {
+ if (err) {
+ logError("Error generating po template file: " + err);
+ logError("Aborting");
+
+ process.exit(1);
+ }
+
+ (merge)
+ ? mergeExistingLocales()
+ : cleanup();
+ }
+ );
+};
+
+const escapeQuotes = (message) => {
+ return message
+ .split('"')
+ .join('\\"')
+ .split("'")
+ .join("\\'");
+};
+
+// Extract trasnslatable strings from base project jstemplates
+fs.readdirSync(baseJSTemplatesPath).forEach((jsTemplateName) => {
+ extractTemplateMessages(jsTemplateName, baseJSTemplatesPath);
+});
+
+// Extract translatable strings from base.hbs
+extractTemplateMessages("base.hbs", path.resolve(basePath, "templates"));
+
+if (args["set-new-locale"]) {
+
+ // Create a new locale
+ let locale = args["set-new-locale"],
+ localePath = path.resolve(
+ baseLocalePath,
+ locale,
+ "LC_MESSAGES"
+ );
+ shell.mkdir("-p", localePath);
+ generateCatalog(false, localePath + "/messages.po");
+} else {
+
+ // Update existing locales
+ generateCatalog(true, potFilePath);
+}
\ No newline at end of file
diff --git a/make-flavor-messages.js b/make-flavor-messages.js
new file mode 100644
index 0000000000..9e6b411bfd
--- /dev/null
+++ b/make-flavor-messages.js
@@ -0,0 +1,229 @@
+require('dotenv').config({path: 'src/.env'});
+const fs = require('fs-extra');
+const path = require('path');
+const walk = require("object-walk");
+const exec = require("child_process").exec;
+const yaml = require('js-yaml');
+const shell = require('shelljs');
+const colors = require('colors');
+const args = require("optimist").argv;
+
+const help = "Usage:\n" +
+ "Update all existing flavor locale po files for flavor the flavor set in the FLAVOR environment variable: node make-flavor-messages.js\n" +
+ "Add a new flavor locale: node make-flavor-messages.js --set-new-locale=";
+
+if (args.h || args.help) {
+ console.log(help);
+ process.exit(0);
+}
+
+const flavor = process.env.FLAVOR;
+
+// Logging
+const logError = (msg) => {
+ console.error("(MAKEMESSAGES) ", colors.red("(ERROR!) "), msg);
+};
+
+// Generate message catalog for the given flavor's config.yml file.
+const flavorBasePath = path.resolve(
+ __dirname,
+ "src/flavors",
+ flavor
+);
+const messagesCatalogTempPath = path.resolve(
+ __dirname,
+ "src/flavors",
+ flavor,
+ "temp-messages"
+);
+const flavorConfigPath = path.resolve(
+ flavorBasePath,
+ "config.yml"
+);
+const config = yaml.safeLoad(fs.readFileSync(flavorConfigPath));
+shell.mkdir('-p', messagesCatalogTempPath);
+
+const configGettextRegex = /^_\(([\s\S]*?)\)$/g;
+const escapeQuotes = (message) => {
+ return message
+ .split('"')
+ .join('\\"')
+ .split("'")
+ .join("\\'");
+};
+
+const jsTemplatesRegexObj = new RegExp(/{{#_}}([\s\S]*?){{\/_}}/, "g");
+let templatePath,
+ foundMessages,
+ jsTemplatesMessagesOutput;
+const extractTemplateMessages = (jsTemplate, outputPath) => {
+ foundMessages = [];
+
+ // NOTE: we save these temp files as python files, so we can take
+ // advantage of Python's multiline string quoting capabilities. The JS
+ // equivalent (backticks) causes problems for xgettext.
+ jsTemplatesMessagesOutput = fs.createWriteStream(
+ path.resolve(
+ messagesCatalogTempPath,
+ jsTemplate + "-messages.temp.py"
+ )
+ );
+ templateString = fs.readFileSync(
+ path.resolve(outputPath, jsTemplate),
+ "utf8"
+ );
+ while (foundMessage = jsTemplatesRegexObj.exec(templateString)) {
+
+ // The second item in foundMessage represents the capture group
+ foundMessages.push(foundMessage[1]);
+ }
+
+ foundMessages.forEach((message) => {
+ jsTemplatesMessagesOutput.write('_("""' + escapeQuotes(message) + '""");\n');
+ });
+
+ jsTemplatesMessagesOutput.end();
+};
+
+const cleanup = () => {
+ shell.rm('-rf', messagesCatalogTempPath);
+ fs.existsSync(potFilePath) && shell.rm(potFilePath);
+};
+
+const flavorLocalePath = path.resolve(
+ flavorBasePath,
+ "locale"
+);
+let flavorPOPath,
+ mergedFlavorPOPath;
+const mergeExistingLocales = () => {
+ const locales = fs.readdirSync(flavorLocalePath)
+ .filter((locale) => {
+
+ // filter out any hidden system files, like .DS_Store
+ return !locale.startsWith("\.");
+ });
+ let numFinishedLocales = 0;
+ locales.forEach((locale) => {
+ flavorPOPath = path.resolve(
+ flavorLocalePath,
+ locale,
+ "LC_MESSAGES/messages.po"
+ );
+
+ exec(
+ "msgmerge" +
+ " --no-location" +
+ " --no-fuzzy-matching" +
+ " --update " +
+ flavorPOPath + " " +
+ potFilePath,
+ (e) => {
+ if (e) {
+ logError("Error merging po files for " + locale + ":" + e);
+ logError("Aborting");
+
+ process.exit(1);
+ }
+ numFinishedLocales++;
+
+ // If we're all done, remove temporary files.
+ if (numFinishedLocales === locales.length) {
+ cleanup();
+ }
+ }
+ );
+ });
+};
+
+const generateCatalog = (merge, outputPath) => {
+ exec(
+ "xgettext" +
+ " --from-code=UTF-8" +
+ " --no-location" +
+ " -o " + outputPath + " " +
+ messagesCatalogTempPath + "/*",
+ (err) => {
+ if (err) {
+ logError("Error generating po template file: " + err);
+ logError("Aborting");
+
+ process.exit(1);
+ }
+
+ (merge)
+ ? mergeExistingLocales()
+ : cleanup();
+ }
+ );
+}
+
+// Extract translatable messages for the config
+let configMessagesOutput = fs.createWriteStream(
+ path.resolve(
+ messagesCatalogTempPath,
+ "config-messages.temp.py"
+ )
+);
+let foundMessage;
+walk(config, (val, prop, obj) => {
+ if (typeof val === "string") {
+ foundMessage = configGettextRegex.exec(val);
+ foundMessage && configMessagesOutput.write('_("""' + escapeQuotes(foundMessage[1]) + '""");\n');
+ }
+});
+configMessagesOutput.end();
+
+// Extract translatable messages for flavor-defined jstemplates
+const flavorJSTemplatesPath = path.resolve(
+ flavorBasePath,
+ "jstemplates"
+);
+fs.readdirSync(flavorJSTemplatesPath).forEach((jsTemplate) => {
+ if (jsTemplate.endsWith("html")) {
+ extractTemplateMessages(jsTemplate, flavorJSTemplatesPath);
+ }
+});
+
+// Extract translatable messages for flavor pages
+const flavorPagesPath = path.resolve(
+ flavorBasePath,
+ "jstemplates/pages"
+);
+fs.readdirSync(flavorPagesPath).forEach((jsTemplate) => {
+ if (jsTemplate.endsWith("html")) {
+ extractTemplateMessages(jsTemplate, flavorPagesPath);
+ }
+});
+
+// Extract translatable messages for email templates
+const emailTemplatesPath = path.resolve(
+ flavorBasePath,
+ "templates"
+);
+fs.readdirSync(emailTemplatesPath).forEach((emailTemplate) => {
+ if (emailTemplate.endsWith("txt")) {
+ extractTemplateMessages(emailTemplate, emailTemplatesPath);
+ }
+});
+
+const potFilePath = path.resolve(
+ flavorBasePath,
+ "messages.pot"
+);
+if (args["set-new-locale"]) {
+
+ // Create a new locale
+ let locale = args["set-new-locale"],
+ localePath = path.resolve(
+ flavorLocalePath,
+ locale,
+ "LC_MESSAGES"
+ );
+ shell.mkdir("-p", localePath);
+ generateCatalog(false, localePath + "/messages.po");
+} else {
+
+ // Update existing locales
+ generateCatalog(true, potFilePath);
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index 9d3fa68f86..f2936437fd 100644
--- a/package.json
+++ b/package.json
@@ -70,6 +70,7 @@
"mv": "^2.1.1",
"node-gettext": "^2.0.0",
"object-walk": "^0.1.1",
+ "optimist": "^0.6.1",
"prettier": "^1.4.4",
"sass-loader": "^6.0.6",
"style-loader": "^0.18.2",
diff --git a/src/base/jstemplates/templates.js b/src/base/jstemplates/templates.js
deleted file mode 100644
index 2cc9dbbd04..0000000000
--- a/src/base/jstemplates/templates.js
+++ /dev/null
@@ -1,6 +0,0 @@
-!function(){var n=Handlebars.template,e=Handlebars.templates=Handlebars.templates||{};e.about=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'Greensboro Participatory Budgeting: \nOur Community, Our Decision! \n \nGreensboro Participatory Budgeting is a democratic process in which community members from all five City Council districts are directly deciding how to spend $500,000 ($100,000 per district).
\n\nFrom April to November 2017, volunteer budget delegates will work to develop these initial ideas into full project proposals. Greensboro residents will able to vote in October 2017 to determine the winning projects.\n
\n\nFor more information on participatory budgeting in Greensboro, visit greensboro-nc.gov/pb .
\n\nFor information on the nationwide movement for PB, visit the website of the Participatory Budgeting Project .
\n\n \n\n
\n
'},useData:!0}),e["activity-list-item"]=n({1:function(n,e,a,l,t){var o;return n.escapeExpression(n.lambda(null!=(o=null!=e?e.place:e)?o["url-title"]:o,e))},3:function(n,e,a,l,t){var o,i=n.lambda,r=n.escapeExpression;return r(i(null!=(o=null!=e?e.place:e)?o.datasetSlug:o,e))+"/"+r(i(null!=(o=null!=e?e.place:e)?o.id:o,e))},5:function(n,e,a,l,t){var o;return"/response/"+n.escapeExpression(n.lambda(null!=(o=null!=e?e.target:e)?o.id:o,e))},7:function(n,e,a,l,t){var o;return' \n'},9:function(n,e,a,l,t){var o;return' \n'},11:function(n,e,a,l,t){var o;return" "+n.escapeExpression(n.lambda(null!=(o=null!=(o=null!=e?e.target:e)?o.submitter:o)?o.name:o,e))+"\n"},13:function(n,e,a,l,t){var o;return" "+n.escapeExpression(n.lambda(null!=(o=null!=e?e.target:e)?o.submitter_name:o,e))+"\n"},15:function(n,e,a,l,t){var o,i,r=null!=e?e:n.nullContext||{},s=n.escapeExpression;return" "+s((i=null!=(i=a.action||(null!=e?e.action:e))?i:a.helperMissing,"function"==typeof i?i.call(r,{name:"action",hash:{},data:t}):i))+': '+s(n.lambda(null!=(o=null!=e?e.place:e)?o.name:o,e))+" \n\x3c!-- \n"+(null!=(o=a.if.call(r,null!=(o=null!=e?e.place:e)?o.location_text:o,{name:"if",hash:{},fn:n.program(16,t,0),inverse:n.noop,data:t}))?o:"")+" --\x3e\n"},16:function(n,e,a,l,t){var o;return' at '+(null!=(o=n.invokePartial(l["location-string"],null!=(o=null!=e?e.place:e)?o.location_text:o,{name:"location-string",data:t,helpers:a,partials:l,decorators:n.decorators}))?o:"")+" \n"},18:function(n,e,a,l,t){var o,i,r=null!=e?e:n.nullContext||{};return" "+n.escapeExpression((i=null!=(i=a.action||(null!=e?e.action:e))?i:a.helperMissing,"function"==typeof i?i.call(r,{name:"action",hash:{},data:t}):i))+":\n"+(null!=(o=a.if.call(r,null!=(o=null!=e?e.place:e)?o.name:o,{name:"if",hash:{},fn:n.program(19,t,0),inverse:n.program(21,t,0),data:t}))?o:"")},19:function(n,e,a,l,t){var o;return' '+n.escapeExpression(n.lambda(null!=(o=null!=e?e.place:e)?o.name:o,e))+" \n"},21:function(n,e,a,l,t){var o,i=n.lambda;return" a"+(null!=(o=a.blockHelperMissing.call(e,i(null!=(o=null!=e?e.place:e)?o.type_starts_with_vowel:o,e),{name:"place.type_starts_with_vowel",hash:{},fn:n.program(22,t,0),inverse:n.noop,data:t}))?o:"")+" "+n.escapeExpression(i(null!=(o=null!=e?e.place:e)?o.place_type_label:o,e))+"\n"},22:function(n,e,a,l,t){return"n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r=null!=e?e:n.nullContext||{},s=n.escapeExpression;return' \n \n\n'+(null!=(o=a.if.call(r,null!=(o=null!=(o=null!=e?e.target:e)?o.submitter:o)?o.avatar_url:o,{name:"if",hash:{},fn:n.program(7,t,0),inverse:n.program(9,t,0),data:t}))?o:"")+"\n"+(null!=(o=a.if.call(r,null!=(o=null!=(o=null!=e?e.target:e)?o.submitter:o)?o.name:o,{name:"if",hash:{},fn:n.program(11,t,0),inverse:n.program(13,t,0),data:t}))?o:"")+"\n \n\n"+(null!=(o=a.if.call(r,null!=e?e.is_place:e,{name:"if",hash:{},fn:n.program(15,t,0),inverse:n.program(18,t,0),data:t}))?o:"")+" \n \n"},usePartial:!0,useData:!0}),e["activity-list"]=n({1:function(n,e,a,l,t){var o;return null!=(o=n.invokePartial(l["activity-list-item"],e,{name:"activity-list-item",data:t,indent:" ",helpers:a,partials:l,decorators:n.decorators}))?o:""},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r,s="";return i=null!=(i=a.activities||(null!=e?e.activities:e))?i:a.helperMissing,r={name:"activities",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t},o="function"==typeof i?i.call(null!=e?e:n.nullContext||{},r):i,a.activities||(o=a.blockHelperMissing.call(e,o,r)),null!=o&&(s+=o),s},usePartial:!0,useData:!0}),e["add-places"]=n({1:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{};return'\t\n'+(null!=(o=a.if.call(i,null!=e?e.add_button_label:e,{name:"if",hash:{},fn:n.program(2,t,0),inverse:n.noop,data:t}))?o:"")+(null!=(o=a.if.call(i,null!=e?e.story_button_label:e,{name:"if",hash:{},fn:n.program(4,t,0),inverse:n.noop,data:t}))?o:"")+"\t
\n"},2:function(n,e,a,l,t){var o;return'\t\t \n\t\t '+n.escapeExpression((o=null!=(o=a.add_button_label||(null!=e?e.add_button_label:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"add_button_label",hash:{},data:t}):o))+" \n\t\t \n"},4:function(n,e,a,l,t){var o;return'\t\t \n\t\t '+n.escapeExpression((o=null!=(o=a.story_button_label||(null!=e?e.story_button_label:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"story_button_label",hash:{},data:t}):o))+" \n\t\t \n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r;return i=null!=(i=a.adding_supported||(null!=e?e.adding_supported:e))?i:a.helperMissing,r={name:"adding_supported",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t},o="function"==typeof i?i.call(null!=e?e:n.nullContext||{},r):i,a.adding_supported||(o=a.blockHelperMissing.call(e,o,r)),null!=o?o:""},useData:!0}),e["auth-nav"]=n({1:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=n.escapeExpression;return'\n'},3:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return'\n'},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o;return null!=(o=a.is_authenticated.call(null!=e?e:n.nullContext||{},{name:"is_authenticated",hash:{},fn:n.program(1,t,0),inverse:n.program(3,t,0),data:t}))?o:""},useData:!0}),e.background=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'Background \n\nThe Duwamish River is Seattle\'s only river, and is one of the most polluted waterways in the US. After 100 years of urban industrialization, it contains more than 40 toxic chemicals above safe limits for humans and the environment, including PCBs, dioxins, carcinogenic PAHs, and arsenic. Studies show that the low income communities living along the river have higher rates of heart disease, asthma, and other illnesses than other Seattle areas. It is also home to salmon, osprey, sea lions, and other creatures who face unsafe levels of contamination.
\n\nThe history here is rich. The Duwamish Tribe lived along the shores of this river for over 10,000 years, since the last ice age, until they were removed by incoming settlers who came about a century and a half ago.
\n\nIn 2001, the US Environmental Protection Agency declared the lower 5 miles of the Duwamish to be a superfund site, which mandates a cleanup paid by those responsible for the pollution. After more than a decade of public deliberation, the EPA came to a final decision in December 2014, and ordered a $342 million cleanup to take place over the next 17 years.
\n\nThe responsible parties named so far are Boeing, King County, the City of Seattle, and the Port of Seattle, with several more expected to be named over the coming years.
\n\nWe hope that \'Hey Duwamish\' can be used as a community monitoring system to help ensure that the $342 million is well spent. We want to restore the health of our watershed to its maximum potential and highlight the progress being made through initiatives such as the Duwamish Opportunity Fund .
\n\nTake me to the map!
\n'},useData:!0}),e.build=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'How to Build a Rain Garden \n
\nIf you’re interested in how to build a rain garden, a step-by-step process can be easily learned by attending a rain garden workshop, studying the Washington State University Rain Garden Handbook for Homeowners (18MB PDF download) and viewing the “How to build a rain garden WSU” online video (below). You will learn rain garden design and construction basics like:
\n\nHow to determine how much impervious surface you have, and how much of that water you want to manage. \nHow to decide where on the property you’d like to build your rain garden. \nHow to do a percolation test, to make sure the soils surrounding your rain garden plants can soak up the water. \nHow to decide how big of a rain garden to create in the space you have available. \nHow to implement rain garden construction next steps. \nHow to know what the best rain garden plants are. \nHow to maintain a rain garden. \n \nYou don’t have to be a gardener or an engineer to build a rain garden, but it is important to consider your site carefully before you get started.
\nVIDEO
'},useData:!0}),e.centerpoint=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return' '},useData:!0}),e["colorpicker-container"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return"\x3c!-- Template for the Spectrum colorpicker container --\x3e\n\n
"},useData:!0}),e["colorpicker-controls"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return"\x3c!-- A template for adding additional controls to the Spectrum colorpicker --\x3e\n\nFill \nStroke "},useData:!0}),e.contribute=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'Get involved \n\nWant to help out? Awesome!
\n\nThe best way to get involved is to submit a report on the map, or comment on someone else\'s report.
\n\nWe could also use help writing code, designing a better interface, and promoting the project. Contribute to our repository on GitHub!
\n\nIf you want to see a project like this in your community, let us know!
\n\nSend us a message and we\'ll be in touch ;)\n'},useData:!0}),e["count-meter"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r=null!=e?e:n.nullContext||{},s=a.helperMissing,u=n.escapeExpression,c=n.lambda;return'\n
\n '+u((i=null!=(i=a.value_pretty||(null!=e?e.value_pretty:e))?i:s,"function"==typeof i?i.call(r,{name:"value_pretty",hash:{},data:t}):i))+" / "+u((i=null!=(i=a.counter_max_pretty||(null!=e?e.counter_max_pretty:e))?i:s,"function"==typeof i?i.call(r,{name:"counter_max_pretty",hash:{},data:t}):i))+':\n
\n
\n \n
\n
\n'},useData:!0}),e.features=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return"Features \n\nFor users,
\n\n\n a simple map interface, to explore submitted locations and add your own\n site design that works well on small screens\n \n\nFor designers and developers,
\n\n\n flexible text and layout, making it easy to translate the user interface text or customize the sentences used\n geospatial database, so you can limit contributions to within boundaries, or asiggn neighborhood names\n \n\nFor project managers during a project,
\n\n\n simple admin interface\n blogging tools to create pages or blog posts\n map and location configuration\n export to GIS\n simple status dashboard\n \n"},useData:!0}),e["filter-menu"]=n({1:function(n,e,a,l,t){var o=n.lambda,i=n.escapeExpression;return'\t\n'},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o;return'\x3c!-- A template for displaying a menu of location_type filter options --\x3e\n\n\n\n \n\n'+(null!=(o=a.each.call(null!=e?e:n.nullContext||{},null!=e?e.activeFilters:e,{name:"each",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t}))?o:"")},useData:!0}),e["geocode-address"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o;return'
\n\n'},useData:!0}),e["geometry-style-panel"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n'},useData:!0}),e.getinvolved=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'積極參與此活動 \n\n已經提交了看法嗎?有很多方式可以參與預算編制活動:
\n\n志願者 \n\n有很多方式可以參與奧克蘭的PB活動!您可以幫助把資訊傳遞給地區居民,促進小組會議舉行,為PB活動提供支援等。登記這裡 。
\n\n聯絡我們 \n\n有問題?請隨時聯絡我們。
\n\n
\n \n What is a green screen? \n A green screen is a metal frame structure that will support the growth\n of native and fast growing vines (no invasive species will be used). In\n two to three years the entire structure will be completely covered by the\n vines, and as the vines grow, so will their ability to absorb air\n pollution. It will end up looking like a ten-foot tall and twenty to\n thirty foot long wall of green growing things. An example of a green\n screen on the Goat Hill Parking Garage in Seattle can be found here .\n\n
Why a “green screen”? \n A green screen is a great tool to help absorb air pollution. It is a\n version of the green wall or living wall concept that requires very little\n maintenance, so it has the potential to be sustainable for many years to\n come. The project is something that can be constructed relatively quickly\n on a narrow piece of land that cannot accommodate trees. The green screen\n will look attractive once it’s grown in, as well as reduce noise pollution,\n absorb water, reduce heat, create local jobs, and it is generally good for\n your health. Here is a link to more information about the benefits of\n living walls general:\n http://www.greenovergrey.com/green-wall-benefits/overview.php
\n \n What are we asking you to do? \n We would like your input on where you think this green screen should be\n placed. To add your voice, go to HeyDuwamish.org and place a pin on\n the map where you would like the green screen to go (see above for more\n detailed instructions). You can also add a comment along with your map pin\n on why you picked this spot, and/or comment on other people’s pins. \n Please comment by the end of December.
\n \n What is the timeline and how will the project get built? \n Two projects will be built, one in Georgetown, and one in South Park. \n During the first week of January, we will take all of the pins and\n suggestions into account, and decide on a location for the green screen. \n We will then negotiate with the landowner or the city as the case may be to\n site the project on their property. We are aiming to begin construction in\n the winter or spring of 2016. The project will be built by the Duwamish\n Valley Youth Corps, and the Duwamish Infrastructure Restoration Training\n Corps (DIRT Corps)
\n \n If you have any additional questions, or would like more information,\n you can contact us at:
\n Linn Gould - gouldjha@gmail.com
\n Andrew Schiffer - bricktree66@gmail.com
\n\n \n \n \n '},useData:!0}),e.guidelines=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'\n\n\n\n屋崙參與式預算制定究竟如何運作? \n\n參與式預算制定(PB) 是一項富於革新精神的民主進程,它授權屋崙市議會第一和第二選區的居民就聯邦社區發展綜合補助金(CDBG)應如何使用訂立優先順序,用以改善他們區内低至中等收入的社區。 第二區2017-19年的社區發展綜合補助金( CDBG)每年撥款$278,685 ,為期兩年,亦即總金額$557,370。那些獲選票最多的項目,算至撥款金額完盡為止,將成為本區社區發展綜合補助金的優先項目。屋崙市政府將發佈一項「提交建議書邀請」(RFP),然後,市及非牟利機構可以申請撥款來貫徹那些優先項目。社區發展區委員會的委員將審查所有回應「提交建議書邀請」的申請書,並向市府建議哪些申請應獲撥款。\n
\n'},useData:!0}),e.instructions=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return"Detailed instructions "},useData:!0}),e.involved=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){
-return'Get More Involved \n\nAlready submitted an idea? There are many more ways to get involved in participatory budgeting:
\n\nAttend a Neighborhood Assembly \n Each district will have a neighborhood assembly and other, informal idea collection events, to encourage widespread participation. Click here for upcoming assembly dates, times, and locations.
\n\nConnect with Us \nFind us on Facebook and follow us on Twitter !
\n\nContact Us \nHave a question? \nPlease contact Valerie Warren, Community Outreach Coordinator for Participatory Budgeting Greensboro, by email at valerie@participatorybudgeting.org or phone at 336‑373‑7750.\n
'},useData:!0}),e["layer-info-window"]=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r=null!=e?e:n.nullContext||{},s=a.helperMissing;return'\x3c!-- A template for rendering popup layer info windows --\x3e\n
\n\n\t\n\t
\n\t\t
'+(null!=(i=null!=(i=a.body||(null!=e?e.body:e))?i:s,o="function"==typeof i?i.call(r,{name:"body",hash:{},data:t}):i)?o:"")+"
\n\t
\n
\n"},useData:!0}),e.legend=n({1:function(n,e,a,l,t){var o,i,r,s=null!=e?e:n.nullContext||{},u=a.helperMissing,c="function",p=n.escapeExpression,m=' \n \n '+p((i=null!=(i=a.title||(null!=e?e.title:e))?i:u,typeof i===c?i.call(s,{name:"title",hash:{},data:t}):i))+' \n \n';return i=null!=(i=a.items||(null!=e?e.items:e))?i:u,r={name:"items",hash:{},fn:n.program(2,t,0),inverse:n.noop,data:t},o=typeof i===c?i.call(s,r):i,a.items||(o=a.blockHelperMissing.call(e,o,r)),null!=o&&(m+=o),m+" \n\n \n"},2:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return' \n '+s((o=null!=(o=a.title||(null!=e?e.title:e))?o:r,"function"==typeof o?o.call(i,{name:"title",hash:{},data:t}):o))+" \n \n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r,s='\x3c!-- SHAREABOUTS LAYERS --\x3e\n\n';return i=null!=(i=a.items||(null!=e?e.items:e))?i:a.helperMissing,r={name:"items",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t},o="function"==typeof i?i.call(null!=e?e:n.nullContext||{},r):i,a.items||(o=a.blockHelperMissing.call(e,o,r)),null!=o&&(s+=o),s+"\n \n"},useData:!0}),e["location-string"]=n({1:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{};return(null!=(o=a.is.call(i,null!=e?e.geocodeQuality:e,"POINT",{name:"is",hash:{},fn:n.program(2,t,0),inverse:n.noop,data:t}))?o:"")+"\n"+(null!=(o=a.is.call(i,null!=e?e.geocodeQuality:e,"ADDRESS",{name:"is",hash:{},fn:n.program(2,t,0),inverse:n.noop,data:t}))?o:"")+"\n"+(null!=(o=a.is.call(i,null!=e?e.geocodeQuality:e,"ZIP",{name:"is",hash:{},fn:n.program(4,t,0),inverse:n.noop,data:t}))?o:"")+"\n"+(null!=(o=a.is.call(i,null!=e?e.geocodeQuality:e,"CITY",{name:"is",hash:{},fn:n.program(6,t,0),inverse:n.noop,data:t}))?o:"")+"\n"+(null!=(o=a.is.call(i,null!=e?e.geocodeQuality:e,"STREET",{name:"is",hash:{},fn:n.program(2,t,0),inverse:n.noop,data:t}))?o:"")},2:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return" "+s((o=null!=(o=a.street||(null!=e?e.street:e))?o:r,"function"==typeof o?o.call(i,{name:"street",hash:{},data:t}):o))+", "+s((o=null!=(o=a.adminArea5||(null!=e?e.adminArea5:e))?o:r,"function"==typeof o?o.call(i,{name:"adminArea5",hash:{},data:t}):o))+" "+s((o=null!=(o=a.adminArea3||(null!=e?e.adminArea3:e))?o:r,"function"==typeof o?o.call(i,{name:"adminArea3",hash:{},data:t}):o))+"\n"},4:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return" "+s((o=null!=(o=a.adminArea5||(null!=e?e.adminArea5:e))?o:r,"function"==typeof o?o.call(i,{name:"adminArea5",hash:{},data:t}):o))+", "+s((o=null!=(o=a.adminArea3||(null!=e?e.adminArea3:e))?o:r,"function"==typeof o?o.call(i,{name:"adminArea3",hash:{},data:t}):o))+" "+s((o=null!=(o=a.postalCode||(null!=e?e.postalCode:e))?o:r,"function"==typeof o?o.call(i,{name:"postalCode",hash:{},data:t}):o))+"\n"},6:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return" "+s((o=null!=(o=a.adminArea5||(null!=e?e.adminArea5:e))?o:r,"function"==typeof o?o.call(i,{name:"adminArea5",hash:{},data:t}):o))+", "+s((o=null!=(o=a.adminArea3||(null!=e?e.adminArea3:e))?o:r,"function"==typeof o?o.call(i,{name:"adminArea3",hash:{},data:t}):o))+"\n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o;return null!=(o=a.if.call(null!=e?e:n.nullContext||{},e,{name:"if",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t}))?o:""},useData:!0}),e.overview=n({compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){return'Welcome \n\n\x3c!-- We are here to educate and inspire the environmental stewardship of Longfellow Creek in West Seattle, starting with Roxhill Bog, all the way down to Elliot Bay!
\n\n \nStart Mapping!
\n \n \n \nThis project made possible by our generous sponsors . --\x3e\n\nWe are here to educate and inspire action for our Central Puget Sound watersheds
\n\x3c!-- \n\n\t \n\t\n\t Lake Sammamish Watershed \n\t \n\t
\n\t \n\t \n \n\n\t \n \n Cedar River / Lake Washington Watershed \n \n
\n \n \n \n\n\t \n \n Green / Duwamish Watershed \n \n
\n \n \n \n\n \n \n Puyallup / White Watershed \n \n
\n \n \n \n \n --\x3e\n\n\n \n \n \n Cedar River / Lake Washington Watershed \n \n \n \n\n\n \n \n \n Green / Duwamish Watershed \n \n \n \n\n\n \n \n \n Lake Sammamish Watershed \n \n \n \n\n
\n\n\n \n \n \n Puyallup / White Watershed \n \n \n \n\n \n\nThis project made possible by our generous sponsors .'},useData:!0}),e["page-nav-item"]=n({1:function(n,e,a,l,t){var o;return" internal-menu-item menu-item-"+n.escapeExpression((o=null!=(o=a.slug||(null!=e?e.slug:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"slug",hash:{},data:t}):o))},3:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return' '+s((o=null!=(o=a.title||(null!=e?e.title:e))?o:r,"function"==typeof o?o.call(i,{name:"title",hash:{},data:t}):o))+" \n"},5:function(n,e,a,l,t){var o,i,r,s=null!=e?e:n.nullContext||{},u=a.helperMissing,c=a.blockHelperMissing,p="";return i=null!=(i=a.slug||(null!=e?e.slug:e))?i:u,r={name:"slug",hash:{},fn:n.program(6,t,0),inverse:n.noop,data:t},o="function"==typeof i?i.call(s,r):i,a.slug||(o=c.call(e,o,r)),null!=o&&(p+=o),i=null!=(i=a.slug||(null!=e?e.slug:e))?i:u,r={name:"slug",hash:{},fn:n.noop,inverse:n.program(8,t,0),data:t},o="function"==typeof i?i.call(s,r):i,a.slug||(o=c.call(e,o,r)),null!=o&&(p+=o),p},6:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return' '+s((o=null!=(o=a.title||(null!=e?e.title:e))?o:r,"function"==typeof o?o.call(i,{name:"title",hash:{},data:t}):o))+" \n"},8:function(n,e,a,l,t){var o;return" "+n.escapeExpression((o=null!=(o=a.title||(null!=e?e.title:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"title",hash:{},data:t}):o))+"\n"},10:function(n,e,a,l,t){var o;return null!=(o=n.invokePartial(l["page-nav-item"],e,{name:"page-nav-item",data:t,indent:" ",helpers:a,partials:l,decorators:n.decorators}))?o:""},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r,s=null!=e?e:n.nullContext||{},u=a.helperMissing,c=a.blockHelperMissing,p='\n"},usePartial:!0,useData:!0}),e["pages-nav-item"]=n({1:function(n,e,a,l,t){var o,i,r=null!=e?e:n.nullContext||{};return(null!=(o=a.unless.call(r,null!=e?e.pages:e,{name:"unless",hash:{},fn:n.program(2,t,0),inverse:n.noop,data:t}))?o:"")+" menu-item-"+n.escapeExpression((i=null!=(i=a.slug||(null!=e?e.slug:e))?i:a.helperMissing,"function"==typeof i?i.call(r,{name:"slug",hash:{},data:t}):i))},2:function(n,e,a,l,t){return" internal-menu-item"},4:function(n,e,a,l,t){var o,i,r,s=null!=e?e:n.nullContext||{},u=a.helperMissing,c='\n '+n.escapeExpression((i=null!=(i=a.title||(null!=e?e.title:e))?i:u,"function"==typeof i?i.call(s,{name:"title",hash:{},data:t}):i))+" \n \n";return i=null!=(i=a.pages||(null!=e?e.pages:e))?i:u,r={name:"pages",hash:{},fn:n.program(5,t,0),inverse:n.noop,data:t},o="function"==typeof i?i.call(s,r):i,a.pages||(o=a.blockHelperMissing.call(e,o,r)),null!=o&&(c+=o),c+" \n\n"},5:function(n,e,a,l,t){var o;return null!=(o=n.invokePartial(l["pages-nav-item"],e,{name:"pages-nav-item",data:t,indent:" ",helpers:a,partials:l,decorators:n.decorators}))?o:""},7:function(n,e,a,l,t){var o;return"\n"+(null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.external:e,{name:"if",hash:{},fn:n.program(8,t,0),inverse:n.program(10,t,0),data:t}))?o:"")+"\n"},8:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return' '+s((o=null!=(o=a.title||(null!=e?e.title:e))?o:r,"function"==typeof o?o.call(i,{name:"title",hash:{},data:t}):o))+" \n"},10:function(n,e,a,l,t){var o;return null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.slug:e,{name:"if",hash:{},fn:n.program(11,t,0),inverse:n.program(13,t,0),data:t}))?o:""},11:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return' '+s((o=null!=(o=a.title||(null!=e?e.title:e))?o:r,"function"==typeof o?o.call(i,{name:"title",hash:{},data:t}):o))+" \n"},13:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return' '+s((o=null!=(o=a.title||(null!=e?e.title:e))?o:r,"function"==typeof o?o.call(i,{name:"title",hash:{},data:t}):o))+" \n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{};return'\n"},usePartial:!0,useData:!0}),e["pages-nav"]=n({1:function(n,e,a,l,t){return'≡ \n'},3:function(n,e,a,l,t){var o;return"\n"+(null!=(o=n.invokePartial(l["pages-nav-item"],e,{name:"pages-nav-item",data:t,indent:" ",helpers:a,partials:l,decorators:n.decorators}))?o:"")+"\n"},5:function(n,e,a,l,t){var o;return"\n"+(null!=(o=n.invokePartial(l["pages-nav-item"],e,{name:"pages-nav-item",data:t,indent:" ",helpers:a,partials:l,decorators:n.decorators}))?o:"")+"\n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r,s=null!=e?e:n.nullContext||{},u=a.helperMissing,c="function",p=a.blockHelperMissing,m=n.escapeExpression,h="";return i=null!=(i=a.has_pages||(null!=e?e.has_pages:e))?i:u,r={name:"has_pages",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t},o=typeof i===c?i.call(s,r):i,a.has_pages||(o=p.call(e,o,r)),null!=o&&(h+=o),h+='\n\x3c!-- Begin flavor-specific code --\x3e\n\x3c!-- \n \n \n '+m((i=null!=(i=a.add_button_label||(null!=e?e.add_button_label:e))?i:u,typeof i===c?i.call(s,{name:"add_button_label",hash:{},data:t}):i))+' \n \n \n --\x3e\n\x3c!-- End flavor-specific code --\x3e\n\n\n \x3c!-- Begin flavor-specific code --\x3e\n \n \x3c!-- End flavor-specific code --\x3e\n '+m((i=null!=(i=a.show_map_button_label||(null!=e?e.show_map_button_label:e))?i:u,typeof i===c?i.call(s,{name:"show_map_button_label",hash:{},data:t}):i))+' \n / \n '+m((i=null!=(i=a.show_list_button_label||(null!=e?e.show_list_button_label:e))?i:u,typeof i===c?i.call(s,{name:"show_list_button_label",hash:{},data:t}):i))+' \n \n \n\n\n \n \n\n\x3c!-- Begin flavor-specific code --\x3e\n\n \n \n \n
\n\x3c!-- End flavor-specific code --\x3e"},usePartial:!0,useData:!0}),e["place-detail-edit-bar"]=n({1:function(n,e,a,l,t){var o;return' \n
\n Edit this post\n
\n\n'+(null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.isEditingToggled:e,{name:"if",hash:{},fn:n.program(2,t,0),inverse:n.noop,data:t}))?o:"")+"
\n"},2:function(n,e,a,l,t){var o;return' \n Remove\n
\n \n Save\n
\n'},3:function(n,e,a,l,t){return" isModified"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o;return"\x3c!-- Template for the row of editor buttons visible at the top of place\n detail views. --\x3e\n\n"+(null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.isEditable:e,{name:"if",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t}))?o:"")},useData:!0}),e["place-detail-field-types"]=n({1:function(n,e,a,l,t,o,i){var r=n.escapeExpression;return' '+r(a.nlToBr.call(null!=e?e:n.nullContext||{},null!=e?e.content:e,{name:"nlToBr",hash:{},data:t}))+"
\n"},3:function(n,e,a,l,t,o,i){var r;return' '+(null!=(r=a.nlToBr.call(null!=e?e:n.nullContext||{},null!=e?e.content:e,{name:"nlToBr",hash:{},data:t}))?r:"")+"
\n"},5:function(n,e,a,l,t,o,i){var r,s;return' '+(null!=(s=null!=(s=a.content||(null!=e?e.content:e))?s:a.helperMissing,r="function"==typeof s?s.call(null!=e?e:n.nullContext||{},{name:"content",hash:{},data:t}):s)?r:"")+" \n"},7:function(n,e,a,l,t){var o;return" \n"+(null!=(o=a.each.call(null!=e?e:n.nullContext||{},null!=e?e.content:e,{name:"each",hash:{},fn:n.program(8,t,0),inverse:n.noop,data:t}))?o:"")+" \n"},8:function(n,e,a,l,t){var o;return null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.selected:e,{name:"if",hash:{},fn:n.program(9,t,0),inverse:n.noop,data:t}))?o:""},9:function(n,e,a,l,t){var o;return' '+n.escapeExpression((o=null!=(o=a.label||(null!=e?e.label:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"label",hash:{},data:t}):o))+" \n"},11:function(n,e,a,l,t){var o;return" \n"+(null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=(o=null!=e?e.content:e)?o.selected:o,{name:"if",hash:{},fn:n.program(12,t,0),inverse:n.program(14,t,0),data:t}))?o:"")+"
\n"},12:function(n,e,a,l,t){var o;return" "+n.escapeExpression(n.lambda(null!=(o=null!=e?e.content:e)?o.selectedLabel:o,e))+"\n"},14:function(n,e,a,l,t){var o;return" "+n.escapeExpression(n.lambda(null!=(o=null!=e?e.content:e)?o.unselectedLabel:o,e))+"\n"},16:function(n,e,a,l,t){var o;return null!=(o=a.each.call(null!=e?e:n.nullContext||{},null!=e?e.content:e,{name:"each",hash:{},fn:n.program(17,t,0),inverse:n.noop,data:t}))?o:""},17:function(n,e,a,l,t){var o;return" \n"+(null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.selected:e,{name:"if",hash:{},fn:n.program(18,t,0),inverse:n.noop,data:t}))?o:"")+"
\n"},18:function(n,e,a,l,t){return" "+n.escapeExpression(a.nlToBr.call(null!=e?e:n.nullContext||{},null!=e?e.label:e,{name:"nlToBr",hash:{},data:t}))+"\n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t,o,i){var r,s=null!=e?e:n.nullContext||{};return"\x3c!-- Template for all fields displayed by the place detail view. --\x3e\n\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"datetime",{name:"is",hash:{},fn:n.program(1,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"text",{name:"is",hash:{},fn:n.program(1,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"textarea",{name:"is",hash:{},fn:n.program(3,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"richTextarea",{name:"is",hash:{},fn:n.program(5,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"radio_big_buttons",{name:"is",hash:{},fn:n.program(7,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"checkbox_big_buttons",{name:"is",hash:{},fn:n.program(7,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"binary_toggle",{name:"is",hash:{},fn:n.program(11,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"\n"+(null!=(r=a.is.call(s,null!=e?e.type:e,"dropdown",{name:"is",hash:{},fn:n.program(16,t,0,o,i),inverse:n.noop,data:t}))?r:"")+'\n
'},useData:!0,useDepths:!0}),e["place-detail-promotion-bar"]=n({1:function(n,e,a,l,t){return" single-line"},3:function(n,e,a,l,t){return"single-line"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{};return''},useData:!0}),e["place-detail-story-bar-tagline"]=n({1:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{};return'\t\n\t\t \n\t\t'+n.escapeExpression(n.lambda(null!=(o=null!=e?e.story:e)?o.tagline:o,e))+' \n\t\t \n\t \n'},2:function(n,e,a,l,t){return"story-nav-disabled"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o;return null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.story:e,{name:"if",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t}))?o:""},useData:!0}),e["place-detail-story-bar"]=n({1:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{};return'\t\n\t\t \n\t\t\n\t\t\t\n'+(null!=(o=a.if.call(i,null!=e?e.fullTitle:e,{name:"if",hash:{},fn:n.program(4,t,0),inverse:n.program(6,t,0),data:t}))?o:"")+'\t\t\t \n\t\t \n\t\t \n\t \n'},2:function(n,e,a,l,t){return"story-nav-disabled"},4:function(n,e,a,l,t){var o;return"\t\t\t\t\t"+n.escapeExpression((o=null!=(o=a.fullTitle||(null!=e?e.fullTitle:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"fullTitle",hash:{},data:t}):o))+"\n"},6:function(n,e,a,l,t){var o;return null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.title:e,{name:"if",hash:{},fn:n.program(7,t,0),inverse:n.program(9,t,0),data:t}))?o:""},7:function(n,e,a,l,t){var o;return"\t\t\t\t\t\t"+n.escapeExpression((o=null!=(o=a.title||(null!=e?e.title:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"title",hash:{},data:t}):o))+"\n"},9:function(n,e,a,l,t){var o;return"\t\t\t\t\t\t"+n.escapeExpression((o=null!=(o=a.name||(null!=e?e.name:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"name",hash:{},data:t}):o))+"\n"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o;return null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.story:e,{name:"if",hash:{},fn:n.program(1,t,0),inverse:n.noop,data:t}))?o:""},useData:!0}),e["place-detail-support"]=n({1:function(n,e,a,l,t){return' checked="checked"'},3:function(n,e,a,l,t){var o;return n.escapeExpression((o=null!=(o=a.count||(null!=e?e.count:e))?o:a.helperMissing,"function"==typeof o?o.call(null!=e?e:n.nullContext||{},{name:"count",hash:{},data:t}):o))},5:function(n,e,a,l,t){return"0"},compiler:[7,">= 4.0.0"],main:function(n,e,a,l,t){var o,i,r,s=null!=e?e:n.nullContext||{},u=a.helperMissing,c=' \n"},useData:!0}),e["place-detail-survey"]=n({1:function(n,e,a,l,t,o,i){var r,s,u,c=null!=e?e:n.nullContext||{},p=a.helperMissing,m=a.blockHelperMissing,h=' \n\n"+(null!=(r=a.if.call(c,null!=(r=null!=e?e.survey_config:e)?r.single_submission:r,{name:"if",hash:{},fn:n.program(6,t,0,o,i),inverse:n.program(9,t,0,o,i),data:t}))?r:"")+'\n \n',s=null!=(s=a.responses||(null!=e?e.responses:e))?s:p,u={name:"responses",hash:{},fn:n.program(11,t,0,o,i),inverse:n.noop,data:t},r="function"==typeof s?s.call(c,u):s,a.responses||(r=m.call(e,r,u)),null!=r&&(h+=r),h+" \n"},2:function(n,e,a,l,t){var o;return n.escapeExpression(n.lambda(null!=(o=null!=e?e.survey_config:e)?o.response_name:o,e))},4:function(n,e,a,l,t){var o;return n.escapeExpression(n.lambda(null!=(o=null!=e?e.survey_config:e)?o.response_plural_name:o,e))},6:function(n,e,a,l,t){var o;return null!=(o=a.if.call(null!=e?e:n.nullContext||{},null!=e?e.user_submitted:e,{name:"if",hash:{},fn:n.noop,inverse:n.program(7,t,0),data:t}))?o:""},7:function(n,e,a,l,t){var o;return' '+n.escapeExpression(n.lambda(null!=(o=null!=e?e.survey_config:e)?o.form_link_text:o,e))+" \n"},9:function(n,e,a,l,t){var o;return' '+n.escapeExpression(n.lambda(null!=(o=null!=e?e.survey_config:e)?o.form_link_text:o,e))+" \n"},11:function(n,e,a,l,t,o,i){var r,s,u,c=null!=e?e:n.nullContext||{},p=a.helperMissing,m=n.escapeExpression,h=' \n \n \n\n \n';return s=null!=(s=a.items||(null!=e?e.items:e))?s:p,u={name:"items",hash:{},fn:n.program(16,t,0,o,i),inverse:n.noop,data:t},r="function"==typeof s?s.call(c,u):s,a.items||(r=a.blockHelperMissing.call(e,r,u)),null!=r&&(h+=r),h+"
\n \n \n"},12:function(n,e,a,l,t){var o,i=n.lambda,r=n.escapeExpression;return' '+r(i(null!=(o=null!=e?e.submitter:e)?o.name:o,e))+"\n"},14:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression
-;return" \x3c!-- TODO: FIXME: don't hardcode image URL --\x3e\n '+s((o=null!=(o=a.submitter_name||(null!=e?e.submitter_name:e))?o:r,"function"==typeof o?o.call(i,{name:"submitter_name",hash:{},data:t}):o))+"\n"},16:function(n,e,a,l,t,o,i){var r,s,u=null!=e?e:n.nullContext||{},c=a.helperMissing,p=n.escapeExpression;return' \n '+p((s=null!=(s=a.label||(null!=e?e.label:e))?s:c,"function"==typeof s?s.call(u,{name:"label",hash:{},data:t}):s))+" \n"+(null!=(r=a.if.call(u,null!=i[2]?i[2].isEditingToggled:i[2],{name:"if",hash:{},fn:n.program(17,t,0,o,i),inverse:n.program(19,t,0,o,i),data:t}))?r:"")+"\n"+(null!=(r=a.if.call(u,null!=i[2]?i[2].isEditingToggled:i[2],{name:"if",hash:{},fn:n.program(21,t,0,o,i),inverse:n.noop,data:t}))?r:"")+"
\n"},17:function(n,e,a,l,t){var o,i=null!=e?e:n.nullContext||{},r=a.helperMissing,s=n.escapeExpression;return'