Skip to content

Instantly share code, notes, and snippets.

@simonexmachina
Created February 6, 2015 11:00
Show Gist options
  • Select an option

  • Save simonexmachina/a64fa5ff67768a0894f6 to your computer and use it in GitHub Desktop.

Select an option

Save simonexmachina/a64fa5ff67768a0894f6 to your computer and use it in GitHub Desktop.
ember-cli source maps
This file has been truncated, but you can view the full file.
{"version":3,"sources":["dashboard/app.js","dashboard/components/accordion-button.js","dashboard/components/accordion-container.js","dashboard/components/accordion-header.js","dashboard/components/accordion-item.js","dashboard/components/acl-create-button.js","dashboard/components/acl-delete-link.js","dashboard/components/acl-edit-link.js","dashboard/components/acl-link.js","dashboard/components/action-buttons.js","dashboard/components/address-locator.js","dashboard/components/address-select.js","dashboard/components/autocomplete-input.js","dashboard/components/bread-crumbs.js","dashboard/components/change-input.js","dashboard/components/color-palette.js","dashboard/components/color-picker.js","dashboard/components/confirm-action-mixin.js","dashboard/components/confirm-action.js","dashboard/components/confirm-input.js","dashboard/components/confirm-popover.js","dashboard/components/drag-spacer.js","dashboard/components/ember-notify.js","dashboard/components/ember-spinner.js","dashboard/components/event-delegate.js","dashboard/components/f-hint.js","dashboard/components/f-matrix-item.js","dashboard/components/f-matrix.js","dashboard/components/f-popover.js","dashboard/components/f-swiper.js","dashboard/components/filter-input.js","dashboard/components/filterable-list-select.js","dashboard/components/form-cn.js","dashboard/components/form-control.js","dashboard/components/form-heading.js","dashboard/components/foundation-reveal.js","dashboard/components/foundation-tabs.js","dashboard/components/groupable-checkbox.js","dashboard/components/icon-button.js","dashboard/components/image-cropper.js","dashboard/components/index-cn.js","dashboard/components/menu-list-delete-modal.js","dashboard/components/menu-list-editor.js","dashboard/components/menu-list.js","dashboard/components/option-rules.js","dashboard/components/price-entry.js","dashboard/components/price-tax.js","dashboard/components/prices-entry.js","dashboard/components/product-and-group-select.js","dashboard/components/product-group-management.js","dashboard/components/product-group-select.js","dashboard/components/product-select.js","dashboard/components/radio-button.js","dashboard/components/search-input.js","dashboard/components/select-2.js","dashboard/components/select-transformer.js","dashboard/components/split-button.js","dashboard/components/td-fill-row.js","dashboard/components/tree-view.js","dashboard/components/type-ahead-create.js","dashboard/components/type-ahead-toggle.js","dashboard/components/type-ahead.js","dashboard/components/x-tag.js","dashboard/config/ember-spinner/default.js","dashboard/config/environment.js","dashboard/controllers/error.js","dashboard/features.js","dashboard/helpers/capitalize-str.js","dashboard/helpers/date-format.js","dashboard/helpers/if-feature.js","dashboard/helpers/popover-handle.js","dashboard/helpers/to-price.js","dashboard/initializers/acl.js","dashboard/initializers/api.js","dashboard/initializers/attic.js","dashboard/initializers/auth.js","dashboard/initializers/bread-crumbs-limit.js","dashboard/initializers/bread-crumbs.js","dashboard/initializers/ember-devtools.js","dashboard/initializers/ember-feature-flags.js","dashboard/initializers/ember-notify.js","dashboard/initializers/ember-spinner.js","dashboard/initializers/export-application-global.js","dashboard/initializers/fast-click.js","dashboard/initializers/pricing.js","dashboard/initializers/translations.js","dashboard/models/address.js","dashboard/models/cashdrawer.js","dashboard/models/condition.js","dashboard/models/daterange.js","dashboard/models/dayofweek.js","dashboard/models/gateway.js","dashboard/models/groupitem.js","dashboard/models/groupoptionitem.js","dashboard/models/instruction.js","dashboard/models/instructionitem.js","dashboard/models/license.js","dashboard/models/lineitem.js","dashboard/models/menu.js","dashboard/models/menulist.js","dashboard/models/menulistitem.js","dashboard/models/menulistvariant.js","dashboard/models/mixins/has-embedded-children.js","dashboard/models/mixins/has-prices.js","dashboard/models/mixins/has-timestamps.js","dashboard/models/mixins/price-mixin.js","dashboard/models/option.js","dashboard/models/order.js","dashboard/models/organisation.js","dashboard/models/price.js","dashboard/models/printer.js","dashboard/models/printergroup.js","dashboard/models/printerimage.js","dashboard/models/product.js","dashboard/models/productgroup.js","dashboard/models/productinstructionitem.js","dashboard/models/productoptionitem.js","dashboard/models/role.js","dashboard/models/scale.js","dashboard/models/surcharge.js","dashboard/models/terminal.js","dashboard/models/timeofday.js","dashboard/models/transaction.js","dashboard/models/user.js","dashboard/models/usergroup.js","dashboard/models/variant.js","dashboard/models/venue.js","dashboard/models/zone.js","dashboard/pods/404/controller.js","dashboard/pods/app/changelog/route.js","dashboard/pods/app/controller.js","dashboard/pods/app/index/route.js","dashboard/pods/app/route.js","dashboard/pods/app/view.js","dashboard/pods/application/adapter.js","dashboard/pods/application/controller.js","dashboard/pods/application/route.js","dashboard/pods/application/serializer.js","dashboard/pods/application/store.js","dashboard/pods/gateway/devices/controller.js","dashboard/pods/gateway/devices/route.js","dashboard/pods/gateway/edit/route.js","dashboard/pods/gateway/form/route.js","dashboard/pods/gateways/create/route.js","dashboard/pods/gateways/index/controller.js","dashboard/pods/gateways/index/route.js","dashboard/pods/gateways/index/view.js","dashboard/pods/instruction/edit/controller.js","dashboard/pods/instruction/edit/route.js","dashboard/pods/instruction/form/controller.js","dashboard/pods/instruction/form/route.js","dashboard/pods/instructionitem/controller.js","dashboard/pods/instructions/create/controller.js","dashboard/pods/instructions/create/route.js","dashboard/pods/instructions/index/controller.js","dashboard/pods/instructions/index/route.js","dashboard/pods/instructions/index/view.js","dashboard/pods/license/edit/route.js","dashboard/pods/license/form/route.js","dashboard/pods/licenses/create/route.js","dashboard/pods/licenses/index/controller.js","dashboard/pods/licenses/index/route.js","dashboard/pods/licenses/index/view.js","dashboard/pods/login/controller.js","dashboard/pods/login/route.js","dashboard/pods/logout/route.js","dashboard/pods/menu/edit/controller.js","dashboard/pods/menu/edit/index/route.js","dashboard/pods/menu/edit/list/controller.js","dashboard/pods/menu/edit/list/route.js","dashboard/pods/menu/edit/list/view.js","dashboard/pods/menu/edit/route.js","dashboard/pods/menu/edit/view.js","dashboard/pods/menu/form/controller.js","dashboard/pods/menu/form/index/route.js","dashboard/pods/menu/form/list/controller.js","dashboard/pods/menu/form/list/route.js","dashboard/pods/menu/form/list/view.js","dashboard/pods/menu/form/route.js","dashboard/pods/menu/form/view.js","dashboard/pods/menu/structure/controller.js","dashboard/pods/menu/structure/move/controller.js","dashboard/pods/menu/structure/route.js","dashboard/pods/menus/archived/controller.js","dashboard/pods/menus/archived/route.js","dashboard/pods/menus/archived/view.js","dashboard/pods/menus/create/controller.js","dashboard/pods/menus/create/index/route.js","dashboard/pods/menus/create/list/controller.js","dashboard/pods/menus/create/list/route.js","dashboard/pods/menus/create/list/view.js","dashboard/pods/menus/create/route.js","dashboard/pods/menus/create/view.js","dashboard/pods/menus/index/controller.js","dashboard/pods/menus/index/item/controller.js","dashboard/pods/menus/index/route.js","dashboard/pods/menus/index/view.js","dashboard/pods/organisation/controller.js","dashboard/pods/organisation/edit/route.js","dashboard/pods/organisation/form/route.js","dashboard/pods/organisation/index/controller.js","dashboard/pods/organisation/index/route.js","dashboard/pods/organisation/route.js","dashboard/pods/organisation/view.js","dashboard/pods/organisations/create/route.js","dashboard/pods/organisations/route.js","dashboard/pods/organisations/select/controller.js","dashboard/pods/organisations/select/route.js","dashboard/pods/printer/edit/controller.js","dashboard/pods/printer/edit/route.js","dashboard/pods/printer/form/controller.js","dashboard/pods/printer/form/route.js","dashboard/pods/printer/form/view.js","dashboard/pods/printergroup/edit/controller.js","dashboard/pods/printergroup/edit/route.js","dashboard/pods/printergroup/form/controller.js","dashboard/pods/printergroup/form/route.js","dashboard/pods/printergroup/form/view.js","dashboard/pods/printergroups/create/controller.js","dashboard/pods/printergroups/create/route.js","dashboard/pods/printergroups/create/view.js","dashboard/pods/printergroups/index/controller.js","dashboard/pods/printergroups/index/route.js","dashboard/pods/printergroups/index/view.js","dashboard/pods/printerimage/edit/route.js","dashboard/pods/printerimage/form/route.js","dashboard/pods/printerimage/form/view.js","dashboard/pods/printerimages/create/route.js","dashboard/pods/printerimages/index/controller.js","dashboard/pods/printerimages/index/route.js","dashboard/pods/printerimages/index/view.js","dashboard/pods/printers/create/controller.js","dashboard/pods/printers/create/route.js","dashboard/pods/printers/index/controller.js","dashboard/pods/printers/index/route.js","dashboard/pods/printers/index/view.js","dashboard/pods/product/edit/controller.js","dashboard/pods/product/edit/route.js","dashboard/pods/product/edit/view.js","dashboard/pods/product/form/basic/view.js","dashboard/pods/product/form/controller.js","dashboard/pods/product/form/groupoptionitem/controller.js","dashboard/pods/product/form/option/view.js","dashboard/pods/product/form/optionitem/controller.js","dashboard/pods/product/form/route.js","dashboard/pods/product/form/variant/controller.js","dashboard/pods/product/form/variant/view.js","dashboard/pods/product/form/view.js","dashboard/pods/product/route.js","dashboard/pods/productgroup/edit/controller.js","dashboard/pods/productgroup/edit/route.js","dashboard/pods/productgroup/form/controller.js","dashboard/pods/productgroup/form/route.js","dashboard/pods/productgroup/form/view.js","dashboard/pods/productgroup/route.js","dashboard/pods/productgroup/variant/controller.js","dashboard/pods/productgroup/variant/product/controller.js","dashboard/pods/productgroups/create/controller.js","dashboard/pods/productgroups/create/route.js","dashboard/pods/productgroups/create/view.js","dashboard/pods/productgroups/index/controller.js","dashboard/pods/productgroups/index/route.js","dashboard/pods/productgroups/index/view.js","dashboard/pods/productgroups/route.js","dashboard/pods/products/create/controller.js","dashboard/pods/products/create/route.js","dashboard/pods/products/create/view.js","dashboard/pods/products/index/controller.js","dashboard/pods/products/index/route.js","dashboard/pods/products/index/view.js","dashboard/pods/products/instruction/controller.js","dashboard/pods/products/option/controller.js","dashboard/pods/products/search/route.js","dashboard/pods/recover/controller.js","dashboard/pods/recover/route.js","dashboard/pods/recover/view.js","dashboard/pods/reset-password/controller.js","dashboard/pods/reset-password/route.js","dashboard/pods/reset-password/view.js","dashboard/pods/surcharge/edit/controller.js","dashboard/pods/surcharge/edit/route.js","dashboard/pods/surcharge/form/basic/view.js","dashboard/pods/surcharge/form/controller.js","dashboard/pods/surcharge/form/route.js","dashboard/pods/surcharges/create/controller.js","dashboard/pods/surcharges/create/route.js","dashboard/pods/surcharges/index/controller.js","dashboard/pods/surcharges/index/route.js","dashboard/pods/surcharges/index/view.js","dashboard/pods/temp/route.js","dashboard/pods/user/delete/route.js","dashboard/pods/user/edit/route.js","dashboard/pods/user/form/route.js","dashboard/pods/user/form/view.js","dashboard/pods/user/serializer.js","dashboard/pods/usergroup/edit/route.js","dashboard/pods/usergroup/form/route.js","dashboard/pods/usergroups/create/route.js","dashboard/pods/usergroups/index/controller.js","dashboard/pods/usergroups/index/route.js","dashboard/pods/usergroups/index/view.js","dashboard/pods/users/create/route.js","dashboard/pods/users/create/view.js","dashboard/pods/users/index/controller.js","dashboard/pods/users/index/route.js","dashboard/pods/users/index/view.js","dashboard/pods/venue/edit/route.js","dashboard/pods/venue/form/details/view.js","dashboard/pods/venue/form/route.js","dashboard/pods/venues/create/route.js","dashboard/pods/venues/index/controller.js","dashboard/pods/venues/index/route.js","dashboard/pods/venues/index/view.js","dashboard/pods/zone/edit/route.js","dashboard/pods/zone/form/route.js","dashboard/pods/zone/form/view.js","dashboard/pods/zones/create/route.js","dashboard/pods/zones/index/controller.js","dashboard/pods/zones/index/route.js","dashboard/pods/zones/index/view.js","dashboard/router.js","dashboard/serializers/groupitem.js","dashboard/serializers/groupoptionitem.js","dashboard/serializers/instruction.js","dashboard/serializers/instructionitem.js","dashboard/serializers/lineitem.js","dashboard/serializers/menu.js","dashboard/serializers/menulist.js","dashboard/serializers/option.js","dashboard/serializers/order.js","dashboard/serializers/organisation.js","dashboard/serializers/product.js","dashboard/serializers/productgroup.js","dashboard/serializers/productinstructionitem.js","dashboard/serializers/productoptionitem.js","dashboard/serializers/variant.js","dashboard/serializers/zone.js","dashboard/services/clock.js","dashboard/services/ember-devtools.js","dashboard/services/pricing.js","dashboard/services/tax.js","dashboard/templates/404.js","dashboard/templates/500.js","dashboard/templates/app.js","dashboard/templates/app/changelog.js","dashboard/templates/application.js","dashboard/templates/components/accordion-button.js","dashboard/templates/components/accordion-header.js","dashboard/templates/components/acl-delete-link.js","dashboard/templates/components/acl-link.js","dashboard/templates/components/action-buttons.js","dashboard/templates/components/bread-crumbs.js","dashboard/templates/components/color-palette.js","dashboard/templates/components/color-picker.js","dashboard/templates/components/confirm-input.js","dashboard/templates/components/confirm-popover.js","dashboard/templates/components/drag-spacer.js","dashboard/templates/components/ember-notify.js","dashboard/templates/components/f-hint.js","dashboard/templates/components/f-popover.js","dashboard/templates/components/filter-input.js","dashboard/templates/components/filterable-list-select.js","dashboard/templates/components/form-cn.js","dashboard/templates/components/form-control.js","dashboard/templates/components/form-heading.js","dashboard/templates/components/icon-button.js","dashboard/templates/components/image-cropper.js","dashboard/templates/components/index-cn.js","dashboard/templates/components/menu-list-delete-modal.js","dashboard/templates/components/menu-list-editor.js","dashboard/templates/components/menu-list.js","dashboard/templates/components/option-rules.js","dashboard/templates/components/price-tax.js","dashboard/templates/components/product-and-group-select.js","dashboard/templates/components/product-group-management.js","dashboard/templates/components/search-input.js","dashboard/templates/components/split-button.js","dashboard/templates/components/type-ahead-toggle.js","dashboard/templates/confirm-action.js","dashboard/templates/error.js","dashboard/templates/gateway/devices.js","dashboard/templates/gateway/edit.js","dashboard/templates/gateway/form.js","dashboard/templates/gateways/create.js","dashboard/templates/gateways/index.js","dashboard/templates/instruction/edit.js","dashboard/templates/instruction/form.js","dashboard/templates/instructions/create.js","dashboard/templates/instructions/index.js","dashboard/templates/license/edit.js","dashboard/templates/license/form.js","dashboard/templates/licenses/create.js","dashboard/templates/licenses/index.js","dashboard/templates/login.js","dashboard/templates/menu/_menulist.js","dashboard/templates/menu/_menulistmove.js","dashboard/templates/menu/form.js","dashboard/templates/menu/form/list.js","dashboard/templates/menu/structure.js","dashboard/templates/menus/archived.js","dashboard/templates/menus/index.js","dashboard/templates/organisation.js","dashboard/templates/organisation/edit.js","dashboard/templates/organisation/form.js","dashboard/templates/organisation/index.js","dashboard/templates/organisations/create.js","dashboard/templates/organisations/select.js","dashboard/templates/printer/edit.js","dashboard/templates/printer/form.js","dashboard/templates/printergroup/edit.js","dashboard/templates/printergroup/form.js","dashboard/templates/printergroups/create.js","dashboard/templates/printergroups/index.js","dashboard/templates/printerimage/edit.js","dashboard/templates/printerimage/form.js","dashboard/templates/printerimages/create.js","dashboard/templates/printerimages/index.js","dashboard/templates/printers/create.js","dashboard/templates/printers/index.js","dashboard/templates/product/edit.js","dashboard/templates/product/form.js","dashboard/templates/product/form/_optionitem.js","dashboard/templates/product/form/basic.js","dashboard/templates/product/form/instructions.js","dashboard/templates/product/form/option.js","dashboard/templates/product/form/options.js","dashboard/templates/product/form/sizes-prices.js","dashboard/templates/product/form/variant.js","dashboard/templates/productgroup/edit.js","dashboard/templates/productgroup/form.js","dashboard/templates/productgroup/form/basic.js","dashboard/templates/productgroup/form/variant.js","dashboard/templates/productgroups/create.js","dashboard/templates/productgroups/index.js","dashboard/templates/products/create.js","dashboard/templates/products/index.js","dashboard/templates/products/search.js","dashboard/templates/recover.js","dashboard/templates/reset-password.js","dashboard/templates/surcharge/edit.js","dashboard/templates/surcharge/form.js","dashboard/templates/surcharge/form/basic.js","dashboard/templates/surcharges/content/table.js","dashboard/templates/surcharges/create.js","dashboard/templates/surcharges/index.js","dashboard/templates/temp.js","dashboard/templates/transaction-receipt.js","dashboard/templates/unauthorised.js","dashboard/templates/user/edit.js","dashboard/templates/user/form.js","dashboard/templates/usergroup/edit.js","dashboard/templates/usergroup/form.js","dashboard/templates/usergroups/create.js","dashboard/templates/usergroups/index.js","dashboard/templates/users/create.js","dashboard/templates/users/index.js","dashboard/templates/venue/edit.js","dashboard/templates/venue/form.js","dashboard/templates/venue/form/details.js","dashboard/templates/venue/form/zones-devices.js","dashboard/templates/venues/create.js","dashboard/templates/venues/index.js","dashboard/templates/zone/edit.js","dashboard/templates/zone/form.js","dashboard/templates/zones/create.js","dashboard/templates/zones/index.js","dashboard/tests/bind-polyfill.js","dashboard/tests/helpers.js","dashboard/tests/helpers/fakegatewayservice.js","dashboard/tests/helpers/resolver.js","dashboard/tests/helpers/start-app.js","dashboard/tests/helpers/uploadrock.js","dashboard/tests/integration/demuxing-test.js","dashboard/tests/integration/error-pages-test.js","dashboard/tests/integration/gateways-test.js","dashboard/tests/integration/global-search-test.js","dashboard/tests/integration/instructions-test.js","dashboard/tests/integration/lincenses-test.js","dashboard/tests/integration/login-test.js","dashboard/tests/integration/menus-test.js","dashboard/tests/integration/organisation-test.js","dashboard/tests/integration/printergroup-test.js","dashboard/tests/integration/printerimage-test.js","dashboard/tests/integration/printers-test.js","dashboard/tests/integration/productgroup-test.js","dashboard/tests/integration/products-test.js","dashboard/tests/integration/recover-password-test.js","dashboard/tests/integration/route-patterns-test.js","dashboard/tests/integration/security-test.js","dashboard/tests/integration/sizetemplates-test.js","dashboard/tests/integration/surcharges-test.js","dashboard/tests/integration/usergroups-test.js","dashboard/tests/integration/users-test.js","dashboard/tests/integration/venue-test.js","dashboard/tests/integration/zone-test.js","dashboard/tests/test-helper.js","dashboard/tests/unit/adapter-test.js","dashboard/tests/unit/aliasDefaultingTo-test.js","dashboard/tests/unit/auth-test.js","dashboard/tests/unit/component/acl-link-test.js","dashboard/tests/unit/component/color-picker-component-test.js","dashboard/tests/unit/component/confirm-input-test.js","dashboard/tests/unit/component/drag-spacer-test.js","dashboard/tests/unit/component/event-delegate-test.js","dashboard/tests/unit/component/f-matrix-test.js","dashboard/tests/unit/component/filterable-list-select-component-test.js","dashboard/tests/unit/component/foundation-reveal-component-test.js","dashboard/tests/unit/component/foundation-tabs-component-test.js","dashboard/tests/unit/component/groupable-checkbox-component-test.js","dashboard/tests/unit/component/icon-button-test.js","dashboard/tests/unit/component/menu-list-delete-modal-component-test.js","dashboard/tests/unit/component/menu-list-modal-component-test.js","dashboard/tests/unit/component/menu-list-test.js","dashboard/tests/unit/component/option-rules-component-test.js","dashboard/tests/unit/component/price-entry-test.js","dashboard/tests/unit/component/product-and-group-select-component-test.js","dashboard/tests/unit/component/product-group-management-test.js","dashboard/tests/unit/component/product-group-select-component-test.js","dashboard/tests/unit/component/radio-button-component-test.js","dashboard/tests/unit/component/tree-view-component-test.js","dashboard/tests/unit/controller/product-option-controller-test.js","dashboard/tests/unit/feature-flags-test.js","dashboard/tests/unit/fileuploader-service-test.js","dashboard/tests/unit/first-price-test.js","dashboard/tests/unit/has-embedded-children-test.js","dashboard/tests/unit/menulist-mixin-test.js","dashboard/tests/unit/model/instruction-model-test.js","dashboard/tests/unit/model/organisation-model-test.js","dashboard/tests/unit/model/price-model-test.js","dashboard/tests/unit/model/product-model-test.js","dashboard/tests/unit/model/zone-test.js","dashboard/tests/unit/tax-service-test.js","dashboard/transforms/array.js","dashboard/transforms/decimal.js","dashboard/transforms/price.js","dashboard/views/datefield.js","dashboard/views/transaction-receipt.js","vendor/ember-cli/app-suffix.js"],"sourcesContent":["define('dashboard/app', ['exports', 'ember/resolver', 'ember/load-initializers', 'dashboard/config/environment', 'attic/services/acl', 'attic/services/auth'], function (exports, Resolver, loadInitializers, config, Acl, Auth) {\n\n 'use strict';\n\n Ember.MODEL_FACTORY_INJECTIONS = true;\n\n var App = Ember.Application.extend({\n modulePrefix: config['default'].modulePrefix,\n podModulePrefix: config['default'].podModulePrefix,\n Resolver: Resolver['default'],\n config: config['default'],\n controller: (function () {\n return this.__container__.lookup(\"controller:application\");\n }).property(),\n status: Ember.computed.alias(\"controller.status\")\n });\n\n loadInitializers['default'](App, config['default'].modulePrefix);\n\n exports['default'] = App;\n\n});","define('dashboard/components/accordion-button', ['exports'], function (exports) {\n\n 'use strict';\n\n var AccordionButton = Ember.Component.extend({\n itemBinding: \"parentView\",\n accordion: Ember.computed.alias(\"item.accordion\"),\n open: Ember.computed.alias(\"item.open\"),\n extraDisplay: false,\n actions: {\n toggle: function () {\n this.set(\"open\", !this.get(\"open\"));\n }\n }\n });\n\n exports['default'] = AccordionButton;\n\n});","define('dashboard/components/accordion-container', ['exports'], function (exports) {\n\n 'use strict';\n\n var AccordionContainer = Ember.Component.extend({\n tagName: \"dl\",\n classNames: [\"accordion\"],\n items: undefined,\n\n initItems: (function () {\n this.set(\"items\", Em.A());\n }).on(\"init\"),\n\n addItem: function (item) {\n this.get(\"items\").addObject(item);\n },\n\n removeItem: function (item) {\n this.get(\"items\").removeObject(item);\n }\n });\n\n exports['default'] = AccordionContainer;\n\n});","define('dashboard/components/accordion-header', ['exports', 'dashboard/components/accordion-button'], function (exports, AccordionButton) {\n\n 'use strict';\n\n exports['default'] = AccordionButton['default'].extend({\n classNames: [\"accordion-header\"],\n titleTagName: \"h4\"\n });\n\n});","define('dashboard/components/accordion-item', ['exports'], function (exports) {\n\n 'use strict';\n\n var AccordionItem = Ember.Component.extend({\n open: false,\n accordionBinding: \"parentView\",\n contentSelector: \".content:eq(0)\",\n\n register: (function () {\n this.get(\"accordion\").addItem(this);\n }).on(\"init\"),\n\n unregister: (function () {\n this.get(\"accordion\").removeItem(this);\n }).on(\"willDestroyElement\"),\n\n observesOpen: (function () {\n if (this.get(\"open\")) {\n this.show();\n } else {\n this.hide();\n }\n }).observes(\"open\").on(\"didInsertElement\"),\n\n show: function () {\n this.$(this.get(\"contentSelector\")).addClass(\"content\").addClass(\"active\");\n },\n\n hide: function () {\n this.$(this.get(\"contentSelector\")).addClass(\"content\").removeClass(\"active\");\n }\n });\n\n exports['default'] = AccordionItem;\n\n});","define('dashboard/components/acl-create-button', ['exports', 'dashboard/components/acl-link'], function (exports, AclLink) {\n\n 'use strict';\n\n exports['default'] = AclLink['default'].extend({\n layoutName: \"components/acl-link\",\n model: null,\n\n permission: \"create\",\n innerClass: \"button large\",\n\n route: (function () {\n return this.get(\"typeKey\").pluralize() + \".create\";\n }).property(\"typeKey\")\n });\n\n});","define('dashboard/components/acl-delete-link', ['exports', 'dashboard/components/acl-link'], function (exports, AclLink) {\n\n 'use strict';\n\n exports['default'] = AclLink['default'].extend({\n permission: \"delete\",\n title: \"Delete\",\n innerClass: \"delete\",\n icon: \"icon-x-outline\",\n\n deleting: null,\n\n actions: {\n openModal: function (model) {\n this.set(\"deleting\", model);\n },\n action: function () {\n var deleting = this.get(\"deleting\");\n this.send(\"closeModal\");\n this.sendAction(\"action\", deleting);\n },\n closeModal: function () {\n this.set(\"deleting\", null);\n }\n }\n });\n\n});","define('dashboard/components/acl-edit-link', ['exports', 'dashboard/components/acl-link'], function (exports, AclLink) {\n\n 'use strict';\n\n exports['default'] = AclLink['default'].extend({\n layoutName: \"components/acl-link\",\n\n permission: \"update\",\n title: \"Edit\",\n innerClass: \"default-action\",\n icon: \"icon-pencil\",\n\n route: (function () {\n return this.get(\"typeKey\") + \".edit\";\n }).property(\"typeKey\")\n });\n\n});","define('dashboard/components/acl-link', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * This component wraps up acl logic for links. In addition to\n * wrapping up the hide/display behaviour, it also marks the link as\n * x-acl-handled, so our devtools layer doesn't complain about it.\n *\n * By default, it reads `typeKey` and `acl` from the view, so you only\n * need to specify the permission - like `permission=update` inside a\n * menu/index controller will map to the acl permission\n * menus.update. You can override `typeKey` and `acl` as necessary, if\n * they live in nonstandard locations. Or you can just set `allowed`,\n * like `allowed=acl.reporting.read` if you have the acl in scope\n * already.\n *\n * Provide a route OR an action, for the resulting link to wrap to. If\n * you provide a model, it will be rendered into the route via\n * {{link-to}} or passed as an argument to the action.\n *\n * Finally, `title`, `innerClass`, and `icon` are all ui stuff for the\n * generated link. `acl-link` uses {{yield}} internally, so you can\n * always unset `icon` and fully customise the internals of the link.\n *\n * Examples of use:\n *\n * {{acl-link route=\"product.edit\" permission=\"update\" model=product icon='icon-pencil'}}\n *\n * This is a simple case, for an edit link that is just the pencil\n * icon. This pattern is wrapped up as {{acl-edit-link model=product}}.\n *\n * {{acl-link action=\"delete\" permission=\"delete\" model=product icon='icon-x-outline'}}\n *\n * Actions work in pretty much the same way. This pattern (modulo a\n * confirm dialog) is wrapped up as {{acl-delete-link action=\"delete\"\n * model=product}}.\n *\n * {{#acl-link route=\"products.create\" permission=\"create\" model=null icon=null innerClass=\"button large\"}}\n * Create a {{typeKey}}\n * {{/acl-link}}\n *\n * You can always open it up as a block and render the innards\n * yourself. Except for said innards, this is packaged up as\n * {{acl-create-button}}.\n *\n * {{#acl-link route='venues' allowed=acl.venues.read}}\n * Venues\n * {{/acl-link}}\n *\n * You can set allowed directly, if it's too annoying to hook up\n * typeKey and acl and permission separately.\n */\n\n exports['default'] = Ember.Component.extend({\n tagName: \"span\",\n classNames: [\"acl-link\"],\n\n route: null,\n action: null,\n\n title: null,\n model: null,\n\n innerClass: null,\n icon: null,\n\n permission: null,\n\n typeKey: Em.computed.alias(\"parentView.typeKey\"),\n acl: Em.computed.alias(\"parentView.controller.acl\"),\n\n allowed: (function () {\n return this.get(\"acl\").get(this.get(\"typeKey\").pluralize()).get(this.get(\"permission\"));\n }).property(\"typeKey\", \"acl\", \"permission\"),\n\n actions: {\n action: function (arg) {\n this.sendAction(\"action\", arg);\n }\n }\n });\n\n});","define('dashboard/components/action-buttons', ['exports'], function (exports) {\n\n 'use strict';\n\n /*\n * {{action-buttons confirm='commit' cancel='rollback' confirmDisabled=disabled label='Confirm'}}\n */\n\n exports['default'] = Ember.Component.extend({\n confirmDisabled: null,\n label: \"Confirm\",\n\n actions: {\n confirm: function () {\n this.sendAction(\"confirm\");\n },\n cancel: function () {\n this.sendAction(\"cancel\");\n }\n }\n });\n\n});","define('dashboard/components/address-locator', ['exports'], function (exports) {\n\n 'use strict';\n\n /* \n\n This Component is used for locating the address that user enters.\n\n Available Configurations:\n mapAddress: the address object with coordinates information;\n initializing: if the map is initializing;\n textAddress: the address entered by user in multiple address lines;\n addressLocator: the componet itself used for triggering its own events\n\n To trigger the refresh map event:\n In route / view:\n this.get('controller.addressLocator').trigger('refreshMap');\n\n In controller:\n this.get('addressLocator').trigger('refreshMap');\n */\n\n\n exports['default'] = Ember.Component.extend({\n tagName: \"div\",\n addressLocator: null, // use this to send events\n didInsertElement: function () {\n var mapDiv = this.$(\"<div class=\\\"address-locator-map\\\">\");\n this.$(this.element).append(mapDiv);\n var addressLocator = this.$();\n this.set(\"addressLocator\", addressLocator);\n addressLocator.on(\"refreshMap\", this.locateAddress.bind(this));\n\n this.initializeControl();\n },\n willDestroy: function () {\n var mapTiledLoadedListener = this.get(\"tileLoadedListener\");\n if (mapTiledLoadedListener) {\n google.maps.event.removeListener(mapTiledLoadedListener);\n }\n },\n initializeControl: function () {\n var _this = this;\n this.set(\"initializing\", true);\n var geocoder = new google.maps.Geocoder();\n var position = {\n coords: {\n latitude: 10, //-37.8133623,\n longitude: 144.9696966\n }\n };\n\n var currentAddress = this.get(\"mapAddress\");\n var hadAddress = false;\n if (!Em.isEmpty(currentAddress) && currentAddress.get(\"latitude\") && currentAddress.get(\"longitude\")) {\n hadAddress = true;\n position.coords.latitude = currentAddress.get(\"latitude\");\n position.coords.longitude = currentAddress.get(\"longitude\");\n }\n\n var latlong = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);\n var mapOptions = {\n center: latlong,\n zoom: hadAddress ? 16 : 1,\n mapTypeId: google.maps.MapTypeId.ROADMAP\n };\n var map = new google.maps.Map(this.$(\"div\", this.element)[0], mapOptions);\n\n var infoWindow = new google.maps.InfoWindow();\n var marker = new google.maps.Marker({\n map: map,\n anchorPoint: new google.maps.Point(0, -29),\n position: latlong,\n title: \"current location\"\n });\n var content = \"Current Location\";\n\n marker.setVisible(false);\n\n if (hadAddress) {\n content = currentAddress.get(\"formatted_address\");\n marker.setVisible(true);\n infoWindow.close();\n infoWindow.setContent(\"<div><strong>\" + content + \"</strong><br></div>\");\n infoWindow.open(map, marker);\n }\n\n this.set(\"map\", map);\n this.set(\"geocoder\", geocoder);\n this.set(\"infoWindow\", infoWindow);\n this.set(\"marker\", marker);\n\n this.set(\"tileLoadedListener\", google.maps.event.addListener(map, \"tilesloaded\", function () {\n Ember.run(function () {\n return _this.set(\"initializing\", false);\n });\n }));\n },\n locateAddress: function () {\n var geocoder = this.get(\"geocoder\");\n geocoder.geocode({ \"address\": this.get(\"textAddress\") }, this.onAddressFound.bind(this));\n },\n\n onAddressFound: function (results, status) {\n var map = this.get(\"map\");\n var infoWindow = this.get(\"infoWindow\");\n var marker = this.get(\"marker\");\n\n if (status == google.maps.GeocoderStatus.OK) {\n var place = results[0];\n if (!place.geometry) {\n return;\n }\n infoWindow.close();\n marker.setVisible(false);\n\n // If the place has a geometry, then present it on a map.\n if (place.geometry.viewport) {\n map.fitBounds(place.geometry.viewport);\n } else {\n map.setCenter(place.geometry.location);\n map.setZoom(14);\n }\n\n marker.setPosition(place.geometry.location);\n marker.setVisible(true);\n\n //Set info window\n infoWindow.setContent(\"<div><strong>\" + place.formatted_address + \"</strong><br></div>\");\n infoWindow.open(map, marker);\n\n // Populate addressObj to store\n this.obtainAddressInfo(place);\n } else {\n console.log(\"Oops, we can't find the location, \" + status);\n }\n },\n obtainAddressInfo: function (place) {\n var currentAddress = this.get(\"mapAddress\");\n var rawAddrLine = \"\";\n place.address_components.forEach(function (addressComponent) {\n var addressType = addressComponent.types[0];\n switch (addressType) {\n case \"subpremise\":\n case \"street_number\":\n case \"route\":\n rawAddrLine += addressComponent.long_name + \" \";\n break;\n // case \"locality\":\n // currentAddress.set('city', addressComponent.long_name);\n // break;\n case \"administrative_area_level_1\":\n currentAddress.set(\"state\", addressComponent.long_name);\n break;\n // case \"country\":\n // currentAddress.set('country', addressComponent.long_name);\n // break;\n // case \"postal_code\":\n // currentAddress.set('postcode', addressComponent.long_name);\n }\n });\n\n currentAddress.set(\"raw_addr_line\", rawAddrLine.trim());\n currentAddress.set(\"formatted_address\", place.formatted_address);\n currentAddress.set(\"latitude\", place.geometry.location.lat());\n currentAddress.set(\"longitude\", place.geometry.location.lng());\n }\n\n });\n\n});","define('dashboard/components/address-select', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n tagName: \"div\",\n didInsertElement: function () {\n var searchBox = this.$(\"<input class=\\\"address-select-map-control\\\" type=\\\"text\\\">\"),\n mapDiv = this.$(\"<div class=\\\"address-select-map\\\">\");\n\n this.$(this.element).append(searchBox);\n this.$(this.element).append(mapDiv);\n\n this.initializeControl();\n },\n willDestroy: function () {\n var mapTiledLoadedListener = this.get(\"tileLoadedListener\");\n if (mapTiledLoadedListener) {\n google.maps.event.removeListener(mapTiledLoadedListener);\n }\n },\n initializeControl: function () {\n var _this = this;\n this.set(\"initializing\", true);\n var position = {\n coords: {\n latitude: -33.8688,\n longitude: 151.2195\n }\n };\n\n var currentAddress = this.get(\"selectedAddress\");\n\n if (currentAddress) {\n position.coords.latitude = currentAddress.latitude;\n position.coords.longitude = currentAddress.longitude;\n }\n\n var latlong = new google.maps.LatLng(position.coords.latitude, position.coords.longitude),\n mapOptions = {\n center: latlong,\n zoom: 17\n },\n map = new google.maps.Map(this.$(\"div\", this.element)[0], mapOptions),\n input = this.$(\"input\", this.element)[0],\n autoComplete = new google.maps.places.Autocomplete(input),\n infoWindow = new google.maps.InfoWindow(),\n marker = new google.maps.Marker({\n map: map,\n anchorPoint: new google.maps.Point(0, -29),\n position: latlong,\n title: \"current location\"\n }),\n content = \"Current Location\";\n\n map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);\n\n autoComplete.bindTo(\"bounds\", map);\n\n marker.setVisible(false);\n\n if (currentAddress) {\n content = currentAddress.formatted_address;\n this.$(input).val(content);\n marker.setVisible(true);\n infoWindow.close();\n infoWindow.setContent(\"<div><strong>\" + content + \"</strong><br>\");\n infoWindow.open(map, marker);\n }\n\n this.set(\"map\", map);\n\n this.set(\"autoComplete\", autoComplete);\n\n this.set(\"infoWindow\", infoWindow);\n\n this.set(\"marker\", marker);\n\n google.maps.event.addListener(autoComplete, \"place_changed\", this.onPlaceChanged.bind(this));\n\n this.set(\"tileLoadedListener\", google.maps.event.addListener(map, \"tilesloaded\", function () {\n Ember.run(function () {\n return _this.set(\"initializing\", false);\n });\n }));\n },\n\n onPlaceChanged: function () {\n var infoWindow = this.get(\"infoWindow\"),\n marker = this.get(\"marker\"),\n map = this.get(\"map\"),\n autoComplete = this.get(\"autoComplete\");\n\n infoWindow.close();\n marker.setVisible(false);\n var place = autoComplete.getPlace();\n if (!place.geometry) {\n return;\n }\n\n // If the place has a geometry, then present it on a map.\n if (place.geometry.viewport) {\n map.fitBounds(place.geometry.viewport);\n } else {\n map.setCenter(place.geometry.location);\n map.setZoom(17);\n }\n\n marker.setIcon({\n url: place.icon,\n size: new google.maps.Size(71, 71),\n origin: new google.maps.Point(0, 0),\n anchor: new google.maps.Point(17, 34),\n scaledSize: new google.maps.Size(35, 35)\n });\n marker.setPosition(place.geometry.location);\n marker.setVisible(true);\n\n var address = \"\";\n if (place.address_components) {\n address = [place.address_components[0] && place.address_components[0].short_name || \"\", place.address_components[1] && place.address_components[1].short_name || \"\", place.address_components[2] && place.address_components[2].short_name || \"\"].join(\" \");\n }\n\n infoWindow.setContent(\"<div><strong>\" + place.name + \"</strong><br>\" + address);\n infoWindow.open(map, marker);\n\n var addressObj = {\n address_line_1: \"\"\n };\n\n place.address_components.forEach(function (addressComponent) {\n var addressType = addressComponent.types[0];\n switch (addressType) {\n case \"street_number\":\n case \"route\":\n addressObj.address_line_1 += addressComponent.long_name + \" \";\n break;\n case \"locality\":\n addressObj.city = addressComponent.long_name;\n break;\n case \"administrative_area_level_1\":\n addressObj.state = addressComponent.long_name;\n break;\n case \"country\":\n addressObj.country = addressComponent.long_name;\n break;\n case \"postal_code\":\n addressObj.postcode = addressComponent.long_name;\n }\n });\n\n addressObj.address_line_1 = addressObj.address_line_1.trim();\n addressObj.formatted_address = place.formatted_address;\n addressObj.latitude = place.geometry.location.lat();\n addressObj.longitude = place.geometry.location.lng();\n this.set(\"selectedAddress\", addressObj);\n }\n });\n\n});","define('dashboard/components/autocomplete-input', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.TextField.extend({\n attributeBindings: [\"autocomplete:on:off\"]\n });\n\n});","define('dashboard/components/bread-crumbs', ['exports', 'ember', 'ember-breadcrumbs/components/bread-crumbs'], function (exports, Ember, BreadCrumbs) {\n\n\t'use strict';\n\n\texports['default'] = BreadCrumbs['default'];\n\n});","define('dashboard/components/change-input', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * TextInput doesn't provide a 'change' event, this does.\n * Usage: {{change-input on-change=\"doSomething\"}}\n * @see https://github.com/emberjs/ember.js/issues/5492\n */\n exports['default'] = Ember.TextField.extend({\n keyUp: function (ev) {\n if (this.$().is(ev.target)) {\n // keyCode 9 == tab, where when user press tab with change value will call on-change event\n if (!Ember.isEqual(this.get(\"value\"), this.get(\"_value\")) && ev.keyCode != 9) {\n this.set(\"_value\", this.get(\"value\"));\n this.sendAction(\"on-value-change\", this.get(\"value\"), ev);\n }\n }\n },\n change: function (ev) {\n this._elementValueDidChange();\n this.sendAction(\"on-change\", this.get(\"value\"), ev);\n }\n });\n\n});","define('dashboard/components/color-palette', ['exports'], function (exports) {\n\n 'use strict';\n\n var PresetColor = Ember.Object.extend({\n style: (function () {\n return \"background-color: %@\".fmt(this.get(\"color\"));\n }).property(\"color\")\n });\n\n exports['default'] = Ember.Component.extend({\n classNameBindings: [\":color-palette\"],\n colors: [\"#d92027\", \"#b31e8a\", \"#882888\", \"#3952a4\", \"#2168af\", \"#168c43\", \"#63b245\", \"#d8db20\", \"#d7b128\", \"#d88928\", \"#d86128\"],\n presets: (function () {\n return this.get(\"colors\").map(function (color) {\n return PresetColor.create({ color: color });\n });\n }).property(\"colors\"),\n onColorChanged: (function () {\n this.$(\".current\").css(\"background-color\", this.get(\"color\"));\n }).observes(\"color\"),\n actions: {\n setColor: function (color) {\n this.set(\"color\", color.get(\"color\"));\n }\n }\n });\n\n});","define('dashboard/components/color-picker', ['exports'], function (exports) {\n\n 'use strict';\n\n /** color-picker :: http://bgrins.github.io/spectrum **/\n // Usage: {{color-picker color=menu.color}}\n exports['default'] = Ember.Component.extend({\n layoutName: \"components/color-picker\",\n style: (function () {\n return \"background-color:\" + this.get(\"color\");\n }).property(\"color\"),\n classNameBindings: [\":color-picker\"],\n hexValue: (function (key, val) {\n if (arguments.length == 2) {\n if (val.length == 7) {\n this.set(\"color\", val);\n }\n }\n return this.get(\"color\");\n }).property(\"color\"),\n\n rgbR: (function () {\n var hex = this.get(\"hexValue\");\n return parseInt(hex.substring(1, 3), 16);\n }).property(\"color\"),\n\n rgbG: (function () {\n var hex = this.get(\"hexValue\");\n return parseInt(hex.substring(3, 5), 16);\n }).property(\"color\"),\n\n rgbB: (function () {\n var hex = this.get(\"hexValue\");\n return parseInt(hex.substring(5, 7), 16);\n }).property(\"color\"),\n\n rgbToHex: function (n) {\n if (n === null) return \"00\";\n n = parseInt(n, 10);\n if (n === 0 || isNaN(n)) return \"00\";\n n = Math.max(0, n);\n n = Math.min(n, 255);\n n = Math.round(n);\n return \"0123456789ABCDEF\".charAt((n - n % 16) / 16) + \"0123456789ABCDEF\".charAt(n % 16);\n },\n\n watchRgb: (function () {\n var r = this.get(\"rgbR\");\n var g = this.get(\"rgbG\");\n var b = this.get(\"rgbB\");\n var color = \"#\" + this.rgbToHex(r) + this.rgbToHex(g) + this.rgbToHex(b);\n this.set(\"color\", color);\n }).observes(\"rgbR\", \"rgbG\", \"rgbB\"),\n\n didInsertElement: function () {\n var _this = this;\n var color = this.get(\"color\"),\n updateNewColor = function (newColor) {\n if (newColor) _this.set(\"color\", newColor.toHexString());\n };\n\n this.$(\".color-swatch\").spectrum({\n showButtons: true,\n showInitial: true,\n color: color,\n change: updateNewColor,\n move: updateNewColor\n });\n\n Ember.run.next(function () {\n $(\".sp-container .acl-highlight\").removeClass(\"acl-highlight\");\n });\n }\n });\n\n});","define('dashboard/components/confirm-action-mixin', ['exports'], function (exports) {\n\n 'use strict';\n\n\n exports['default'] = Ember.Mixin.create({\n classNames: \"confirm\",\n cancelLabel: Ember.computed.oneWay(\"defaultCancelLabel\"),\n label: Ember.computed.oneWay(\"defaultLabel\"),\n defaultLabel: \"Confirm\",\n defaultCancelLabel: \"Cancel\",\n confirmDisabled: false,\n\n self: null, // use to trigger confirm or cancel\n\n // on cancel or confirm close the modal\n closeAfterAction: true,\n\n didInsertElement: function () {\n var _this = this;\n this.set(\"self\", this.$());\n this.$().on(\"confirm\", function () {\n return _this.send(\"confirm\");\n });\n this.$().on(\"cancel\", function () {\n return _this.send(\"cancel\");\n });\n this._super();\n },\n\n confirmOrCancel: function () {\n if (this.get(\"lastAction\") === \"confirm\") {\n this.sendAction(\"action\", this.get(\"lastArgument\"));\n } else {\n this.sendAction(\"cancel\", this.get(\"lastArgument\"));\n }\n },\n\n actions: {\n opened: function (arg) {\n this.set(\"lastAction\", null);\n this.set(\"lastArgument\", null);\n this.sendAction(\"opened\", arg);\n },\n closed: function () {\n if (this.get(\"closeAfterAction\")) {\n this.confirmOrCancel();\n }\n this.sendAction(\"closed\");\n },\n confirm: function () {\n if (!this.get(\"confirmDisabled\")) {\n this.set(\"lastAction\", \"confirm\");\n // support for the common pattern of putting data into open\n this.set(\"lastArgument\", this.get(\"open\"));\n\n if (this.get(\"closeAfterAction\")) {\n this.set(\"open\", false);\n } else {\n this.confirmOrCancel();\n }\n }\n },\n cancel: function () {\n this.set(\"lastAction\", \"cancel\");\n // support for the common pattern of putting data into open\n this.set(\"lastArgument\", this.get(\"open\"));\n\n if (this.get(\"closeAfterAction\")) {\n this.set(\"open\", false);\n } else {\n this.confirmOrCancel();\n }\n }\n }\n });\n\n});","define('dashboard/components/confirm-action', ['exports', 'dashboard/components/confirm-action-mixin', 'dashboard/components/foundation-reveal'], function (exports, ConfirmActionMixin, FoundationRevealComponent) {\n\n 'use strict';\n\n exports['default'] = FoundationRevealComponent['default'].extend(ConfirmActionMixin['default'], {\n layoutName: \"confirm-action\"\n });\n\n});","define('dashboard/components/confirm-input', ['exports', 'attic/dom-utils', 'attic/computed'], function (exports, dom_utils, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n\n value: null,\n tabIndex: null,\n required: false,\n emptyLabel: \"\",\n valueTagName: \"span\",\n placeholder: null,\n onFocusOutConfirm: false,\n focusOnFirstDefaultEditing: true,\n\n classNames: [\"confirm-input\", \"clearfix\", \"has-errors\"],\n classNameBindings: [\"editing\", \"error:error\", \"readOnly\", \"value:has-value:empty\"],\n layoutName: \"components/confirm-input\",\n\n // if you want to be able to set the input value from outside bind to inputValue as well as value\n inputValue: Ember.computed.oneWay(\"value\"),\n messages: {\n required: \"A value is required\",\n invalid: \"Invalid input\",\n abide: \"Please confirm this value\"\n },\n\n validateEditing: false,\n abideValidator: (function () {\n return this.get(\"validateEditing\") ? \"isNotEditing\" : null;\n }).property(\"validateEditing\"),\n\n displayValue: (function () {\n var value = this.get(\"value\");\n return value ? value : this.get(\"emptyLabel\");\n }).property(\"value\", \"emptyLabel\"),\n\n validate: function () {\n return true;\n },\n\n setValue: function (value) {\n this.set(\"value\", value);\n },\n\n resetInputValue: function () {\n this.set(\"inputValue\", this.get(\"value\"));\n },\n\n didInsertElement: function () {\n dom_utils.setTabIndices(this, [\".edit-link\", \"input\", \".confirm\", \".cancel\"]);\n if (this.get(\"editing\") || this.get(\"required\") && Ember.isEmpty(this.get(\"inputValue\"))) {\n this.send(\"edit\");\n } else {\n this.set(\"editing\", false);\n }\n this.set(\"focusOnFirstDefaultEditing\", true);\n },\n\n keyPress: function (ev) {\n // Only call `confirm` action if 'enter' key is detected with cursor is focusing on input field,\n // and not 'TICK' or 'CROSS' button.\n if (ev.keyCode === 13 && this.get(\"focusingInput\")) {\n this.send(\"confirm\");\n }\n },\n\n change: function (event) {\n this.sendAction(\"on-change\", this.get(\"inputValue\"), event);\n },\n\n resetErrorCondition: (function () {\n if (!this.get(\"required\") && Ember.isEmpty(this.get(\"value\"))) {\n this.set(\"error\", null);\n }\n }).observes(\"required\", \"value\"),\n\n actions: {\n focusIn: function () {\n this.set(\"focusingInput\", true);\n },\n focusOut: function () {\n var _this = this;\n this.set(\"focusingInput\", false);\n if (this.get(\"onFocusOutConfirm\")) {\n //TODO: needed run later here because `focus-out` will call immediately once cursor out from input field.\n // EG: when is focusing on input field and editing, then user decide to cancel the changes,\n // and click on 'X' button, at this point 'focus-out' will be call before the 'cancel' action,\n // if we did not do the checking here it will always call confirm.\n Ember.run.later(function () {\n if (_this.get(\"editing\")) {\n _this.send(\"confirm\");\n }\n }, 100);\n }\n },\n edit: function () {\n var _this = this;\n if (this.get(\"readOnly\")) return;\n this.set(\"editing\", true);\n if (this.get(\"focusOnFirstDefaultEditing\")) {\n Ember.run.schedule(\"afterRender\", function () {\n var $el = _this.$(\"input\");\n if ($el) $el.focus();\n });\n }\n },\n confirm: function () {\n this.set(\"error\", null);\n var value = this.get(\"inputValue\");\n if (Ember.isEmpty(value) && this.get(\"required\")) {\n this.set(\"error\", this.get(\"messages.required\"));\n } else if (Ember.isEmpty(value) || this.validate(value)) {\n if (this.setValue) this.setValue(value);\n this.sendAction(\"on-confirm\", value);\n } else if (!this.get(\"error\")) {\n this.set(\"error\", this.get(\"messages.invalid\"));\n }\n this.set(\"editing\", !!this.get(\"error\"));\n\n this.send(\"triggerJqueryChange\");\n },\n cancel: function () {\n this.resetInputValue();\n var value = this.get(\"value\");\n if (this.get(\"required\") && Ember.isEmpty(value)) {\n this.set(\"error\", this.get(\"messages.required\"));\n } else {\n this.setProperties({\n editing: false,\n error: null\n });\n this.sendAction(\"on-cancel\");\n }\n\n this.send(\"triggerJqueryChange\");\n },\n triggerJqueryChange: function () {\n var _this = this;\n Em.run.schedule(\"afterRender\", function () {\n if (!_this.get(\"isDestroying\") && !_this.get(\"isDestroyed\")) {\n _this.$(\"input\").trigger(\"change\");\n }\n });\n },\n // propagate the on-value-change event from the change-input\n onValueChange: function (ev) {\n this.sendAction(\"on-value-change\", this.get(\"inputValue\"), ev);\n }\n }\n\n });\n\n});","define('dashboard/components/confirm-popover', ['exports', 'dashboard/components/confirm-action-mixin', 'attic/dom-utils', 'dashboard/components/f-popover'], function (exports, ConfirmActionMixin, dom_utils, FranqPopover) {\n\n 'use strict';\n\n exports['default'] = FranqPopover['default'].extend(ConfirmActionMixin['default'], {\n classNameBindings: [\":confirm-popover\"],\n includeActionButtons: true,\n\n didInsertElement: function () {\n var _this = this;\n this._super();\n dom_utils.setTabIndices(this, [\"input\", \".confirm\", \".cancel\"]);\n Ember.run.next(function () {\n _this.$(\".acl-highlight\").removeClass(\"acl-highlight\");\n });\n }\n });\n\n});","define('dashboard/components/drag-spacer', ['exports'], function (exports) {\n\n 'use strict';\n\n var dragstartBinding = function (event) {\n event.dataTransfer.setData(\"item/spacer\", \"true\");\n event.dataTransfer.effectAllowed = \"copymove\";\n event.dataTransfer.dropEffect = \"copy\";\n };\n\n exports['default'] = Em.Component.extend({\n draggable: true,\n disabled: false,\n draggableAsString: (function () {\n return this.get(\"draggable\") === true && !this.get(\"disabled\") ? \"true\" : null;\n }).property(\"draggable\", \"disabled\"),\n classNames: [\"spacer\"],\n attributeBindings: [\"draggableAsString:draggable:\"],\n text: \"Add a Space\",\n\n didInsertElement: function () {\n var _this = this;\n Ember.run.schedule(\"afterRender\", function () {\n if (_this.get(\"isDestroyed\") || _this.get(\"isDestroying\")) {\n return;\n }\n\n var $el = _this.$().get(0);\n if (!$el) {\n return;\n }\n\n $el.removeEventListener(\"dragstart\", dragstartBinding);\n $el.addEventListener(\"dragstart\", dragstartBinding);\n });\n }\n });\n\n});","define('dashboard/components/ember-notify', ['exports', 'ember-notify/components/ember-notify'], function (exports, Notify) {\n\n\t'use strict';\n\n\texports['default'] = Notify['default'];\n\n});","define('dashboard/components/ember-spinner', ['exports', 'ember', 'ember-cli-spinjs/components/ember-spinner'], function (exports, Ember, emberSpinner) {\n\n\t'use strict';\n\n\t/* global Spinner */\n\n\texports['default'] = emberSpinner['default'];\n\n});","define('dashboard/components/event-delegate', ['exports'], function (exports) {\n\n 'use strict';\n\n /*\n * {{#event-delegate on='mouseover' targets='.enterable' action='doTheMonkey'}}\n *\n * Uses event delegation in jquery to attach an ember action to child\n * elements of this object.\n */\n\n exports['default'] = Ember.Component.extend({\n on: \"click\",\n action: null,\n targets: \"li\",\n\n didInsertElement: function () {\n var event = this.get(\"on\");\n var sel = this.get(\"targets\");\n\n this.$().on(event, sel, (function (ev) {\n var elem = $(ev.currentTarget);\n this.sendAction(\"action\", elem.data(), elem);\n }).bind(this));\n }\n });\n\n});","define('dashboard/components/f-hint', ['exports'], function (exports) {\n\n 'use strict';\n\n /*\n This is the hint component that to be developed later. Now is an empty component.\n\n */\n exports['default'] = Ember.Component.extend({\n classNameBindings: [\":hint\", \"collapsed:collapsed:expanded\"],\n collapsed: false,\n init: function () {\n this._super();\n this.set(\"localStorage\", window.localStorage);\n this.set(\"collapsed\", this.getAcknowledgement());\n },\n getAcknowledgement: function () {\n return this.get(\"localStorage\").getItem(\"notShowHint\") === \"true\";\n },\n setAcknowledgement: function (val) {\n this.get(\"localStorage\").setItem(\"notShowHint\", val ? \"true\" : \"false\");\n },\n actions: {\n hideHint: function () {\n this.set(\"collapsed\", true);\n },\n showHint: function () {\n this.set(\"collapsed\", false);\n },\n hideHintAndRemember: function () {\n this.send(\"hideHint\");\n this.setAcknowledgement(true);\n }\n }\n });\n\n});","define('dashboard/components/f-matrix-item', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n tagName: \"li\",\n attributeBindings: [\"data-row\", \"data-col\", \"ref\", \"data-swap-only\", \"data-accept-drop\"],\n \"data-accept-drop\": (function () {\n return (this.get(\"acceptDrop\") === true).toString();\n }).property(\"acceptDrop\"),\n \"data-row\": Ember.computed.alias(\"content.displayRow\"),\n \"data-col\": Ember.computed.alias(\"content.displayColumn\"),\n \"data-swap-only\": (function () {\n return (this.get(\"swapOnly\") === true).toString();\n }).property(\"swapOnly\"),\n swapOnly: false,\n ref: Ember.computed.alias(\"content.id\"),\n classNameBindings: [\":cell\"],\n\n didInsertElement: function () {\n this.$().on(\"indexChanged\", this.onIndexChanged.bind(this));\n },\n onIndexChanged: function (e, data) {\n this.set(\"content.displayRow\", data.to.row);\n this.set(\"content.displayColumn\", data.to.col);\n },\n willDestroy: function () {\n $(\"#\" + this.get(\"elementId\")).detach();\n }\n });\n\n});","define('dashboard/components/f-matrix', ['exports', 'attic/computed'], function (exports, computed) {\n\n 'use strict';\n\n var GridItem = Em.ObjectProxy.extend({\n pager: null,\n content: null,\n index: (function () {\n return this.get(\"pager.indices\").get(this.get(\"content\"));\n }).property(\"pager.indices\", \"content\"),\n\n contentRowPath: (function () {\n return \"content.\" + this.get(\"pager.rowPath\");\n }).property(\"pager.rowPath\"),\n\n contentColumnPath: (function () {\n return \"content.\" + this.get(\"pager.columnPath\");\n }).property(\"pager.columnPath\"),\n\n rowViaIndex: (function () {\n var index = this.get(\"index\");\n var cols = this.get(\"pager.cols\");\n\n return Math.floor(index / cols);\n }).property(\"index\", \"pager.cols\").readOnly(),\n\n columnViaIndex: (function () {\n var index = this.get(\"index\");\n var cols = this.get(\"pager.cols\");\n\n return index % cols;\n }).property(\"index\", \"pager.cols\").readOnly(),\n\n defineRowColumn: (function () {\n Ember.defineProperty(this, \"rowProxy\", Em.computed.alias(this.get(\"contentRowPath\")));\n Ember.defineProperty(this, \"columnProxy\", Em.computed.alias(this.get(\"contentColumnPath\")));\n }).observes(\"contentRowPath\", \"contentColumnPath\").on(\"init\"),\n\n row: computed.aliasDefaultingTo(\"rowProxy\", \"rowViaIndex\", {\n persistImmediatelyPath: \"pager.persistLocations\",\n defaultCondition: Em.isNone\n }),\n column: computed.aliasDefaultingTo(\"columnProxy\", \"columnViaIndex\", {\n persistImmediatelyPath: \"pager.persistLocations\",\n defaultCondition: Em.isNone\n }),\n\n page: (function (key, val) {\n var rows = this.get(\"pager.rows\");\n\n if (arguments.length > 1) {\n var displayRow = this.get(\"displayRow\");\n this.set(\"row\", (val - 1) * rows + displayRow);\n }\n\n var row = this.get(\"row\");\n return Math.floor(row / rows) + 1;\n }).property(\"row\", \"pager.rows\"),\n\n\n displayRow: (function (key, val) {\n var rows = this.get(\"pager.rows\");\n\n if (arguments.length > 1) {\n var page = this.get(\"pager.page\");\n this.set(\"row\", (page - 1) * rows + val);\n }\n\n var row = this.get(\"row\");\n return row % rows;\n }).property(\"row\", \"pager.rows\", \"pager.page\"),\n\n displayColumn: Em.computed.alias(\"column\"),\n\n\n onCurrentPage: computed.equalTo(\"page\", \"pager.page\")\n });\n\n var Pager = Em.Object.extend({\n scope: null,\n\n rows: Em.computed.alias(\"scope.rows\"),\n cols: Em.computed.alias(\"scope.cols\"),\n items: Em.computed.alias(\"scope.items\"),\n rowPath: Em.computed.alias(\"scope.rowPath\"),\n columnPath: Em.computed.alias(\"scope.columnPath\"),\n\n persistLocations: true,\n\n page: 1,\n\n wrappedItems: Em.computed.map(\"items\", function (item) {\n return GridItem.create({\n content: item,\n pager: this\n });\n }),\n\n takenIndices: (function () {\n var _this = this;\n var indexOf = function (row, col, cols) {\n return row * cols + col;\n };\n\n var mapToRowCol = function (map, item) {\n var key = item.get(\"content\");\n var row = item.get(\"rowProxy\");\n var col = item.get(\"columnProxy\");\n\n var cols = _this.get(\"cols\");\n\n return map.set(key, indexOf(row, col, cols));\n };\n\n return this.get(\"wrappedItems\").filter(function (item) {\n return !Em.isNone(item.get(\"rowProxy\")) && !Em.isNone(item.get(\"columnProxy\"));\n }).reduce(mapToRowCol, Em.Map.create());\n }).property(\"wrappedItems.[]\", \"wrappedItems.@each.rowProxy\", \"wrappedItems.@each.columnProxy\", \"cols\").readOnly(),\n\n indices: (function () {\n var items = this.get(\"wrappedItems\");\n var taken = this.get(\"takenIndices\").copy();\n\n // values isn't actually part of the public API. #upgradewarning , maybe?\n var takenArr = Object.keys(taken.values).map(function (key) {\n return taken.values[key];\n }); // _.values(taken.values)\n\n return items.reduce(function (acc, item) {\n var key = item.get(\"content\");\n\n if (Em.isNone(acc.hashmap.get(key))) {\n while (takenArr.contains(acc.index)) {\n acc.index++;\n }\n\n acc.hashmap.set(key, acc.index);\n acc.index++;\n }\n\n return acc;\n }, { hashmap: taken, index: 0 }).hashmap;\n }).property(\"wrappedItems.[]\", \"takenIndices.[]\"),\n\n // Em.computed.filterBy is just broken as fuck. Using it here causes\n // weird issues where views get destroyed without removing their dom\n // elements, or something?\n visibleItems: (function () {\n return this.get(\"wrappedItems\").filterBy(\"onCurrentPage\", true);\n }).property(\"wrappedItems.[]\", \"wrappedItems.@each.onCurrentPage\")\n });\n\n var RecordFactory = Em.Object.extend({\n typeKey: null,\n store: null,\n\n create: function (dataTransfer, extra) {\n var _this = this;\n var props = this.dataTransfer(dataTransfer, extra);\n if (!props) {\n return [];\n }\n if (!Em.isArray(props)) {\n props = [props];\n }\n\n return props.map(function (data) {\n return _this.get(\"store\").createRecord(_this.get(\"typeKey\"), data);\n });\n },\n\n dataTransfer: function (dataTransfer, extra) {\n // override this for your own purposes\n return dataTransfer;\n }\n });\n\n exports['default'] = Ember.Component.extend({\n tagName: \"ul\",\n\n attributeBindings: [\"data-editable\", \"data-rows\", \"data-cols\", \"data-delete-spacers\"],\n classNameBindings: [\":matrix\"],\n\n \"data-editable\": (function () {\n return (this.get(\"editable\") === true).toString();\n }).property(\"editable\"),\n \"data-delete-spacers\": (function () {\n return (this.get(\"canDeleteSpacers\") === true).toString();\n }).property(\"canDeleteSpacers\"),\n \"data-rows\": Ember.computed.alias(\"rows\"),\n \"data-cols\": Ember.computed.alias(\"cols\"),\n\n editable: true,\n canDeleteSpacers: true,\n rows: null,\n cols: null,\n\n items: [],\n\n rowPath: \"row\",\n columnPath: \"column\",\n\n factory: null,\n\n pager: null,\n onPagerSet: (function () {\n if (!this.get(\"pager\")) {\n throw new Error(\"f-matrix requires a Pager object\");\n }\n\n this.set(\"pager.scope\", this);\n this.set(\"pager.itemsBinding\", \"scope.wrappedItems\");\n }).observes(\"pager\").on(\"init\"),\n\n page: Em.computed.alias(\"pager.page\"),\n\n didInsertElement: function () {\n var _this = this;\n this.$().matrix();\n\n this.$().on(\"dropFromOutside\", function (ev, data) {\n Em.run(function () {\n var factory = _this.get(\"factory\");\n var pager = _this.get(\"pager\");\n\n if (!pager) {\n throw new Error(\"f-matrix requires a pager to handle external drops\");\n }\n\n var things = factory ? factory.create(data.dataTransfer, data) : Em.copy(data.spaces).map(function (obj) {\n return { row: obj.row, column: obj.col };\n });\n\n // we use the griditem indirection to set the right row and\n // column on the new thing. we also don't go through the\n // factory, since we know we want to proxy this thing\n var items = things.map(function (thing) {\n return GridItem.create({\n pager: pager,\n content: thing\n });\n });\n\n items.forEach(function (item, index) {\n return item.setProperties({\n displayRow: data.spaces[index].row,\n displayColumn: data.spaces[index].col\n });\n });\n\n if (factory) {\n // if we were provided a factory, we can directly push the\n // resulting objects directly onto the items\n _this.get(\"items\").pushObjects(things);\n }\n\n var arr = things.map(function (thing) {\n return Em.getProperties(thing, [\"row\", \"column\"]);\n });\n _this.sendAction(\"dropped\", data.dataTransfer, arr);\n });\n });\n\n this.set(\"matrix\", this.$().data(\"matrix\"));\n this.set(\"grid\", this);\n },\n\n syncEditable: function () {\n var matrix = this.get(\"matrix\");\n if (!matrix) {\n return;\n }\n\n if (this.get(\"editable\")) {\n matrix.enableEdit();\n } else {\n matrix.disableEdit();\n }\n },\n\n syncCanDeleteSpacers: function () {\n var matrix = this.get(\"matrix\");\n if (!matrix) {\n return;\n }\n\n if (this.get(\"canDeleteSpacers\")) {\n matrix.enableDeletingSpacers();\n } else {\n matrix.disableDeletingSpacers();\n }\n },\n\n syncState: function () {\n var matrix = this.get(\"matrix\");\n if (!matrix) {\n return;\n }\n\n matrix.update();\n },\n\n onEditableChanged: (function () {\n this.syncEditable();\n }).observes(\"editable\"),\n\n onCDSChanged: (function () {\n this.syncCanDeleteSpacers();\n }).observes(\"canDeleteSpacers\"),\n\n updateIfAlive: function () {\n if (this.get(\"isDestroyed\") || this.get(\"isDestroying\")) {\n return;\n }\n\n this.syncState();\n },\n\n onItemChanged: (function () {\n Ember.run.scheduleOnce(\"afterRender\", this, this.updateIfAlive);\n }).observes(\"pager.visibleItems\", \"pager.visibleItems.[]\"),\n\n serialize: function () {\n return this.get(\"matrix\").serialize();\n }\n });\n\n exports.GridItem = GridItem;\n exports.Pager = Pager;\n exports.RecordFactory = RecordFactory;\n\n});","define('dashboard/components/f-popover', ['exports'], function (exports) {\n\n 'use strict';\n\n var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } };\n\n /*\n Component that offers popover dialog functionality.\n\n USAGE: use as combination of popover-handle\n\n in the target that you need the popover to show, put an attribute helper,\n <a {{popover-handle popover=popoverReference}}> </a>\n\n {{#f-popover popover=popoverReference}}\n content goes here.\n {{/f-popover}}\n\n There are two ways to open the popover. one is to do the above.\n under this mode, the popover will open by click.\n\n The other mode is to use reference item to open it.\n When you want to open a popover for a specific element.\n just set the openItem to item.\n \n {{popover-handle popover=popoverRef ref=item}}\n\n {{#f-popover popover=popoverReference open=openItem}}\n content goes here.\n {{/f-popover}}\n */\n var FranqPopover = Ember.Component.extend({\n init: function () {\n this._super();\n //references to be linked to the element\n this.set(\"references\", Ember.Map.create());\n },\n addReference: function (key, val) {\n this.get(\"references\").set(key, val);\n },\n classNameBindings: [\":f-popover\", \"popoverVisible:open:close\", \"placement\"],\n open: false,\n application: (function () {\n return this.get(\"container\").lookup(\"application:main\");\n }).property(),\n triangle: (function () {\n return this.$(\".triangle\");\n }).property(),\n getTriangleBaseWidth: function () {\n return parseInt(this.$(\".triangle .base\").css(\"border-width\").replace(\"px\", \"\"), 10);\n },\n documentEscKeyedBinding: (function () {\n return this.onDocumentEsckeyed.bind(this);\n }).property(),\n documentClickedBinding: (function () {\n return this.onDocumentClicked.bind(this);\n }).property(),\n popoverClickedBinding: (function () {\n return this.onPopoverClicked.bind(this);\n }).property(),\n didInsertElement: function () {\n this.set(\"popover\", this);\n\n //move this up to the body for absolute positioning.\n this.$().detach().appendTo($(this.get(\"application.rootElement\")));\n //$().append(this.$());\n\n $(document).keyup(this.get(\"documentEscKeyedBinding\"));\n $(document).click(this.get(\"documentClickedBinding\"));\n this.$().click(this.get(\"popoverClickedBinding\"));\n },\n onDocumentEsckeyed: function (event) {\n if (event.which === 27 || event.keyCode === 27) {\n this.send(\"close\");\n }\n },\n // time gap between it start handling the close triggered on document click from the last open time\n timeBeforeRespondingDocumentClick: 200,\n onDocumentClicked: function () {\n var now = moment(),\n diff = now.diff(this.get(\"lastOpenTime\") || moment()),\n clickedOnPopover = this.get(\"clickedOnPopover\");\n\n if (diff > this.get(\"timeBeforeRespondingDocumentClick\") && !clickedOnPopover) {\n this.send(\"close\");\n } else if (clickedOnPopover) {\n this.set(\"clickedOnPopover\", false);\n }\n },\n onPopoverClicked: function (event) {\n // this thing here is to prevent triggering the close.\n // because ember need the event to be propagated up to root element for handling the action.\n // so better do it this way.\n this.set(\"clickedOnPopover\", true);\n },\n getOppositePlacement: function (placement) {\n var placements = [\"top\", \"right\", \"bottom\", \"left\"];\n\n return placements[(placements.indexOf(placement) + 2) % placements.length];\n },\n calculatePosition: function (item, target, itemPlacement) {\n var targetPos = \"\",\n itemPos = \"\",\n horizontalPosTemplate = \"middle %@\",\n verticalPosTemplate = \"%@ center\",\n oppositePlacement = this.getOppositePlacement(itemPlacement);\n\n switch (itemPlacement) {\n case \"left\":\n case \"right\":\n targetPos = horizontalPosTemplate.fmt(itemPlacement);\n itemPos = horizontalPosTemplate.fmt(oppositePlacement);\n break;\n case \"top\":\n case \"bottom\":\n targetPos = verticalPosTemplate.fmt(itemPlacement);\n itemPos = verticalPosTemplate.fmt(oppositePlacement);\n break;\n }\n\n //calculate the position to the target using PositionCalculator.\n var calculator = $.PositionCalculator({\n item: item,\n itemAt: itemPos,\n target: target,\n targetAt: targetPos,\n flip: \"both\"\n }),\n posResult = calculator.calculate();\n\n return [posResult, !(posResult.itemAt === itemPos && posResult.targetAt === targetPos)];\n },\n getByRef: function (ref) {\n return this.get(\"references\").get(ref);\n },\n openChanged: (function () {\n var open = this.get(\"open\");\n\n if (open) {\n //handle the reference by open handle\n this.send(\"openByRef\", open);\n } else {\n this.send(\"close\");\n }\n }).observes(\"open\"),\n actions: {\n openByRef: function (ref) {\n var targetInfo = this.getByRef(ref);\n\n if (targetInfo) {\n this.set(\"target\", targetInfo[\"el\"]);\n this.send(\"open\", targetInfo[\"placement\"], ref);\n }\n },\n open: function (itemPlacement, ref) {\n var _this = this;\n itemPlacement = itemPlacement ? itemPlacement.toLowerCase() : \"top\";\n\n var target = this.get(\"target\");\n var item = this.$();var _calculatePosition = this.calculatePosition(item, target, itemPlacement);\n\n var _calculatePosition2 = _slicedToArray(_calculatePosition, 2);\n\n var posResult = _calculatePosition2[0];\n var flipped = _calculatePosition2[1];\n var offset = $(item).offset();\n var dialogPosition = null;\n var trianglePosition = null;\n var itemHeight = item.height();\n var itemWidth = item.width();\n var triangleBaseWidth = this.getTriangleBaseWidth();\n var toPx = function (num) {\n return \"%@px\".fmt(num);\n };\n var pos = function (top, left) {\n return { top: toPx(top), left: toPx(left) };\n };\n var dialogPos = function (offsetTop, offsetLeft) {\n return pos(offset.top + posResult.moveBy.y + (offsetTop || 0), offset.left + posResult.moveBy.x + (offsetLeft || 0));\n };\n\n itemPlacement = flipped ? this.getOppositePlacement(itemPlacement) : itemPlacement;\n\n switch (itemPlacement) {\n case \"bottom\":\n trianglePosition = pos(triangleBaseWidth * -2, itemWidth / 2 - triangleBaseWidth);\n dialogPosition = dialogPos(0, 0);\n break;\n case \"top\":\n trianglePosition = pos(itemHeight, itemWidth / 2 - triangleBaseWidth);\n dialogPosition = dialogPos(-triangleBaseWidth * 2, 0);\n break;\n case \"left\":\n trianglePosition = pos(itemHeight / 2 - triangleBaseWidth, itemWidth);\n dialogPosition = dialogPos(0, -triangleBaseWidth);\n break;\n case \"right\":\n trianglePosition = pos(itemHeight / 2 - triangleBaseWidth, triangleBaseWidth * -2);\n //trianglePosition=pos(0,0);\n dialogPosition = dialogPos(0, triangleBaseWidth);\n break;\n default:\n Ember.assert(\"Unknown placement\", false);\n break;\n }\n\n this.get(\"triangle\").css(trianglePosition);\n\n $(item).css(dialogPosition);\n\n this.set(\"placement\", itemPlacement);\n\n this.set(\"popoverVisible\", true);\n this.set(\"lastOpenTime\", moment());\n\n Ember.run.next(function () {\n //make sure the opened is updated then send out the opened event.\n _this.sendAction(\"opened\", ref);\n });\n },\n close: function () {\n this.set(\"popoverVisible\", false);\n this.set(\"open\", false); // set the open to false so that it can listen to the next change.\n this.send(\"closed\");\n }\n },\n willDestroyElement: function () {\n $(document).off(\"keyup\", this.get(\"documentEscKeyedBinding\"));\n $(document).off(\"click\", this.get(\"documentClickedBinding\"));\n this.$().off(\"click\", this.get(\"popoverClickedBinding\"));\n this.$().remove();\n }\n });\n\n exports['default'] = FranqPopover;\n\n});","define('dashboard/components/f-swiper', ['exports'], function (exports) {\n\n 'use strict';\n\n\n exports['default'] = Ember.Component.extend({\n swiper: null,\n slidesPerView: 1,\n swiping: false,\n cssWidthAndHeight: false,\n initialSlide: 0,\n calculateHeight: false,\n\n didInsertElement: function () {\n this.setup();\n },\n\n setup: function () {\n var _this = this;\n Ember.run.schedule(\"afterRender\", function () {\n var swiperInstance = _this.$(\".swiper-container\").swiper({\n initialSlide: _this.get(\"initialSlide\"),\n slidesPerView: _this.get(\"slidesPerView\"),\n cssWidthAndHeight: _this.get(\"cssWidthAndHeight\"),\n calculateHeight: _this.get(\"calculateHeight\"),\n\n onTouchMove: _this.onTouchMove.bind(_this),\n onTouchEnd: function (swiper) {\n // Force this to run in the next tick.\n // The button shouldn't be enabled at the same time as the swipe is over\n // otherwise the dragging counts as a click.\n Ember.run.next(_this.onTouchEnd.bind(_this));\n },\n\n onInit: function (swiper) {\n swiper.swipeTo(0);\n }\n });\n\n _this.set(\"swiperInstance\", swiperInstance);\n _this.$().on(\"swipeNext\", function () {\n return swiperInstance.swipeNext();\n });\n _this.$().on(\"swipePrev\", function () {\n return swiperInstance.swipePrev();\n });\n\n _this.set(\"swiper\", _this.$());\n _this.$().on(\"reinit\", function () {\n return Ember.run.schedule(\"afterRender\", function () {\n _this.get(\"swiperInstance\").reInit();\n });\n });\n _this.$().on(\"resizeFix\", function () {\n return Ember.run.schedule(\"afterRender\", function () {\n _this.get(\"swiperInstance\").resizeFix();\n });\n });\n });\n },\n\n onTouchMove: function (swiper) {\n this.set(\"swiping\", true);\n },\n onTouchEnd: function (swiper) {\n if (!(this.get(\"isDestroying\") || this.get(\"isDestroyed\"))) {\n this.set(\"swiping\", false);\n }\n }\n });\n\n});","define('dashboard/components/filter-input', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n classNames: [\"filter-input\"],\n classNameBindings: [\"closable\", \"open:open:closed\", \"right:right:left\"],\n value: null,\n closable: false,\n open: null,\n right: false,\n buttonText: \"Filter results\",\n onInit: (function () {\n if (this.get(\"open\") === null && this.get(\"closable\")) {\n this.set(\"open\", !!this.get(\"value\"));\n }\n }).on(\"init\"),\n focusIn: function () {\n if (!this.get(\"open\")) this.send(\"toggle\");\n },\n focusOut: function () {\n if (!this.get(\"value\")) this.send(\"toggle\");\n },\n actions: {\n toggle: function () {\n if (this.get(\"closable\")) this.toggleProperty(\"open\");\n }\n }\n });\n\n});","define('dashboard/components/filterable-list-select', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * Filterable List Select is a combination of a list of items with checkboxes indicates the selection & a search box to filter out the list\n * In the list it will list the name of the item from list and a checkbox for a given line.\n * USAGE: {{filterable-list-select }}\n *\n * Available Configurations:\n *\n * availableList: availableList is the full lists when no filter applied\n * textField: name of the text field within an item of list. (e.g for object { name: 'test', advName: 'advanced test', id:3}, if you want to show advName rather than name you need to tell the component to use textField='advName')\n * searchTerm: value binding into the search box. Good place to know about what's being search\n * filterFunction: filter function will be called on filtering if you want to do more complex filtering. otherwise it will just filter out what's in the text field.\n * signature: function(item, searchTerm){}. Return true if you want the item to be specified.\n * selectedItems: list of selected Items. selectedItems won't change on filtering. It will change only when you deselected the item.\n * filteredList: place to know about the filteredList. good place for outer component to test whether their filter function is working as expected.\n * noResultsText: text to show up when no results in the list. defaults to 'No Results'\n * noResultsLinkAction: function that will trigger when no result link is clicked.\n * noResultsLinkText: text for no result link text.\n * searchQueryInterval: interval between query that's actually doing the filtering. in millionseconds\n **/\n exports['default'] = Ember.Component.extend({\n tagName: \"div\",\n layoutName: \"components/filterable-list-select\",\n classNameBindings: [\"disabled:disabled\", \":filterable-list-select\"],\n disabled: false,\n draggable: false,\n dragEnabled: (function () {\n return !this.get(\"disabled\") && this.get(\"draggable\");\n }).property(\"draggable\", \"disabled\"),\n stringifiedDraggable: (function () {\n return this.get(\"dragEnabled\") ? \"true\" : \"false\";\n }).property(\"dragEnabled\"),\n onInit: (function () {\n // necessary thanks to https://github.com/emberjs/ember.js/issues/9440\n this.notifyPropertyChange(\"draggable\");\n }).on(\"init\"),\n availableList: [],\n resultHeaderInfoText: \"Available Items\",\n resultHeaderCheckboxText: \"Add\",\n includeClearSearch: true,\n includeHeader: true,\n /**\n * dragAndDropRefName is the reference you will be used in handling the drop event to pickup the reference saved since\n * the beginning of the drag\n * */\n dragAndDropRefName: \"item/id\",\n selectedItems: [],\n noResultsText: \"No Results\",\n textField: \"name\",\n searchQueryInterval: 100,\n propertiesToWatchForUpdate: [\"availableList.[]\", \"filterFunction\", \"textField\"],\n didInsertElement: function () {\n var _this = this;\n this.initializeSelectList();\n this.get(\"propertiesToWatchForUpdate\").forEach(function (item) {\n _this.addObserver(item, _this, \"onWatchPropertiesUpdated\");\n });\n },\n onDraggableChanged: (function () {\n var draggable = this.get(\"draggable\");\n\n this.unregisterItemDraggle();\n\n if (draggable) {\n this.registerItemDraggable();\n }\n }).observes(\"draggable\"),\n registerItemDraggable: function () {\n var _this = this;\n Ember.run.schedule(\"afterRender\", function () {\n var els = _this.$(\".results .item\");\n if (els) {\n els.each(function (index, item) {\n item.addEventListener(\"dragstart\", _this.dragstart.bind(_this));\n item.addEventListener(\"drag\", _this.drag.bind(_this));\n });\n }\n });\n },\n unregisterItemDraggle: function () {\n var _this = this;\n Ember.run.schedule(\"afterRender\", function () {\n var els = _this.$(\".results .item\");\n if (els) {\n els.each(function (index, item) {\n item.removeEventListener(\"dragstart\", _this.dragstart.bind(_this));\n item.removeEventListener(\"drag\", _this.drag.bind(_this));\n });\n }\n });\n },\n spacesRequired: function (thing) {\n // assume 1 as the default\n return 1;\n },\n dragstart: function (event) {\n var ref = $(event.target).attr(\"ref\");\n\n var spacesRequired = this.get(\"spacesRequired\");\n var length = spacesRequired(this.get(\"availableList\").findBy(\"id\", ref));\n\n var dragAndDropRefName = this.get(\"dragAndDropRefName\") || \"item/id\";\n\n event.dataTransfer.setData(dragAndDropRefName, ref);\n event.dataTransfer.setData(\"multiple/length\", length);\n\n // dragenter and dragover don't have the right to see data in the\n // datatransfer object. They're only allowed to see the keys, in .types().\n // hence this horrible hack.\n // See http://stackoverflow.com/questions/11065803/determine-what-is-being-dragged-from-dragenter-dragover-events\n event.dataTransfer.setData(\"multiple/length/\" + length.toString(), length);\n\n event.dataTransfer.effectAllowed = \"copymove\";\n event.dataTransfer.dropEffect = \"copy\";\n },\n drag: function (event) {\n event.dataTransfer.dropEffect = \"copy\";\n },\n willDestroyElement: function () {\n this.unregisterItemDraggle();\n },\n onSearchTermUpdated: (function () {\n if (!Ember.testing || this.get(\"forceDebounce\")) {\n Ember.run.debounce(this, this.initializeSelectList, [], this.get(\"searchQueryInterval\"));\n } else {\n this.initializeSelectList();\n }\n }).observes(\"searchTerm\"),\n onWatchPropertiesUpdated: function () {\n this.initializeSelectList();\n },\n initializeSelectList: function () {\n this.generateFilteredList();\n },\n generateFilteredList: function () {\n var _this = this;\n if ($(\"#\" + this.get(\"elementId\")).length <= 0) {\n return;\n }\n\n var list = Ember.A(this.get(\"availableList\")) || Ember.A(),\n filterFunction = this.get(\"filterFunction\"),\n textField = this.get(\"textField\"),\n searchTerm = this.get(\"searchTerm\") || \"\",\n filteredList;\n\n filteredList = list.filter(function (item) {\n if (filterFunction) {\n return filterFunction.call(_this, item, searchTerm);\n } else {\n var searchField = item.get(textField) || \"\";\n return searchField.toLowerCase().indexOf(searchTerm.toLowerCase()) >= 0;\n }\n });\n\n //build the filtered list\n this.set(\"filteredList\", filteredList.map(function (item) {\n return Ember.Object.create({\n text: item.get(textField),\n associatedObject: item\n });\n }));\n\n if (this.get(\"draggable\")) {\n this.registerItemDraggable();\n }\n },\n filteredListEmpty: (function () {\n return Ember.isEmpty(this.get(\"filteredList\"));\n }).property(\"filteredList\"),\n actions: {\n clearSearchBox: function () {\n this.set(\"searchTerm\", \"\");\n },\n onNoResultsLinkAction: function () {\n var action = this.get(\"noResultsLinkAction\");\n\n if (action && typeof action === \"function\") {\n return action.apply(this, arguments);\n }\n }\n },\n hasNoResultsLinkAction: (function () {\n return !Ember.isEmpty(this.get(\"noResultsLinkText\"));\n }).property(\"noResultsLinkText\")\n });\n\n});","define('dashboard/components/form-cn', ['exports', 'attic/utils/type-names'], function (exports, TypeNames) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend(TypeNames['default'], {\n submitLabel: \"Submit\",\n cancelLabel: \"Cancel\",\n submitDisabled: false,\n includeCreate: true,\n includeControls: true,\n includeButtons: true,\n includeCancel: true,\n includeDelete: true,\n\n tagName: \"section\",\n classNames: [\"form\"],\n classNameBindings: [\"typeKey\", \"model.isNew:create:edit\"],\n typeKeyBinding: \"parentView.controller.typeKey\",\n modelBinding: \"parentView.controller.model\",\n\n init: function () {\n this._super();\n if (this.get(\"typeKey\")) {\n Ember.defineProperty(this, \"canCreate\", Ember.computed.alias(\"parentView.controller.acl.\" + this.get(\"typeKey\").pluralize() + \".create\"));\n }\n },\n showCreate: Ember.computed.and(\"canCreate\", \"includeCreate\"),\n createLink: (function () {\n return this.get(\"typeKey\").pluralize() + \".create\";\n }).property(\"typeKey\"),\n actions: {\n cancel: function () {\n this.sendAction(\"cancel\");\n },\n openDeleteModal: function () {\n this.set(\"isDeleting\", true);\n },\n closeDeleteModal: function () {\n this.set(\"isDeleting\", false);\n },\n delete: function () {\n this.send(\"closeDeleteModal\");\n this.sendAction(\"delete\");\n }\n }\n });\n\n});","define('dashboard/components/form-control', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n tagName: \"li\",\n classNames: [\"form-control\"],\n classNameBindings: [\"valid::error\", \"classFromLabel\"],\n label: null,\n valid: true,\n useLabelTag: true,\n useDefinition: true,\n classFromLabel: (function () {\n return (this.get(\"label\") || \"\").toLowerCase().dasherize();\n }).property(\"label\")\n });\n\n});","define('dashboard/components/form-heading', ['exports', 'attic/utils/type-names'], function (exports, TypeNames) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend(TypeNames['default'], {\n tagName: \"h1\",\n classNames: [\"form-heading\"]\n });\n\n});","define('dashboard/components/foundation-reveal', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n Component that offers the foundation reveal functionality. It just use the foundation javascript.\n\n USAGE:\n {{#foundation-reveal open=shouldModalOpen revealModalClass=\"large\"}}\n <div>\n content you want to put\n </div>\n {{/foundation-reveal}}\n\n Configuration:\n open attribute to define whether the modal should be open\n revealModalClass class that will attach to the generated div.\n opened: action sent after modal has been opened.\n closed: action sent after modal has been closed.\n * */\n var FoundationReveal = Ember.Component.extend({\n classNameBindings: [\":reveal-modal\", \"revealModalClass\"],\n attributeBindings: [\"dataRevealAsStringToWorkAround9595:data-reveal:\"],\n\n // See https://github.com/emberjs/ember.js/issues/9595\n \"data-reveal\": true,\n dataRevealAsStringToWorkAround9595: (function () {\n var reveal = this.get(\"data-reveal\");\n return reveal ? \"\" + this.get(\"data-reveal\") : \"\";\n }).property(\"data-reveal\"),\n\n open: false,\n\n openObserver: (function () {\n var currentState = !!this.get(\"open\");\n if (currentState === this.$().hasClass(\"open\")) {\n return;\n }\n if (this.get(\"open\")) {\n this.$().foundation(\"reveal\", \"open\");\n } else {\n this.$().foundation(\"reveal\", \"close\");\n }\n }).observes(\"open\"),\n\n didInsertElement: function () {\n var _this = this;\n var setOpen = function (val) {\n return function () {\n Em.run(function () {\n if (_this.get(\"isDestroyed\") || _this.get(\"isDestroying\")) {\n return;\n }\n\n var open = _this.get(\"open\");\n var openTruthy = !!open;\n if (val !== openTruthy) {\n // we preserve truthiness, not equality\n _this.set(\"open\", val);\n }\n if (val) {\n _this.send(\"opened\", val); // support the common case of an argument as the open var\n } else {\n _this.send(\"closed\");\n }\n });\n };\n };\n\n this.$().on(\"opened\", setOpen(true));\n this.$().on(\"closed\", setOpen(false));\n\n this.notifyPropertyChange(\"open\");\n },\n\n willDestroyElement: function () {\n // handle navigating elsewhere while the modal is open\n\n this.set(\"open\", false);\n\n // YAY BINDINGS ARE LAZY\n // See: https://github.com/emberjs/ember.js/pull/5289 and\n // https://github.com/emberjs/ember.js/issues/9265\n // TODO: This is a major, awful hack and we need to get rid of it\n var from = this.get(\"openBinding._from\");\n if (from) {\n this.set(from, false);\n }\n\n this.$().foundation(\"reveal\", \"close\");\n this.$().remove();\n }\n });\n\n exports['default'] = FoundationReveal;\n\n});","define('dashboard/components/foundation-tabs', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n Component that offers the foundation tab functionality. It just manipulates the foundation css.\n\n USAGE:\n {{#foundation-tabs activeTab=view.activeTab}}\n <ul class=\"tabs\" data-tab>\n <li class=\"tab-title active\"><a href=\"#panel2-1\">Tab 1</a></li>\n <li class=\"tab-title\"><a href=\"#panel2-2\">Tab 2</a></li>\n <li class=\"tab-title\"><a href=\"#panel2-3\">Tab 3</a></li>\n <li class=\"tab-title\"><a href=\"#panel2-4\">Tab 4</a></li>\n </ul>\n <div class=\"tabs-content\">\n <div class=\"content active\" id=\"panel2-1\">\n <p>First panel content goes here...</p>\n </div>\n <div class=\"content\" id=\"panel2-2\">\n <p>Second panel content goes here...</p>\n </div>\n <div class=\"content\" id=\"panel2-3\">\n <p>Third panel content goes here...</p>\n </div>\n <div class=\"content\" id=\"panel2-4\">\n <p>Fourth panel content goes here...</p>\n </div>\n </div>\n {{/foundation-tabs}}\n\n what you need is feed the foundation tab html structure into the foundation-tabs component.\n for more information. Please visit http://foundation.zurb.com/docs/components/tabs.html\n\n useful properties: availableTabs (read only property which gives you a list of tab names you can use to set in the activeTab), activeTab\n * */\n var FoundationTabs = Ember.Component.extend({\n\n tabLinksLiSelector: \"ul.tabs:first > li.tab-title\",\n activeTabLinksASelector: \"ul.tabs:first > li.tab-title.active > a\",\n activeTabContentSelector: \"div.tabs-content:first > div.content.active\",\n tabLinksASelector: \"ul.tabs:first > li.tab-title > a\",\n tabContentSelector: \"div.tabs-content:first > div.content\",\n init: function () {\n this._super();\n this.set(\"availableTabs\", []);\n },\n didInsertElement: function () {\n var _this = this;\n this.$(this.tabLinksLiSelector).on(\"click\", this.onTabLinkClicked.bind(this));\n var activeTab = this.get(\"activeTab\");\n if (activeTab) {\n this.selectTab(activeTab);\n } else {\n // determine the active tab from the DOM\n activeTab = this.idForLink(this.$(this.activeTabLinksASelector)) || this.idForLink(this.$(this.tabLinksLiSelector).eq(0).children(\"a\"));\n this.set(\"activeTab\", activeTab);\n }\n this.set(\"availableTabs\", this.$(this.tabLinksASelector).toArray().map(function (link) {\n return _this.idForLink(link);\n }));\n },\n idForLink: function (link) {\n var href = this.$(link).attr(\"href\");\n return href ? href.replace(\"#\", \"\") : null;\n },\n onTabLinkClicked: function (event) {\n event.preventDefault();\n event.stopPropagation();\n var link = this.$(event.currentTarget).find(\"a\");\n this.set(\"activeTab\", this.idForLink(link));\n return false;\n },\n selectTab: function (id) {\n var tab = this.$(\"#\" + id);\n if (!id || !tab.length) return;\n this.$(this.tabLinksLiSelector).removeClass(\"active\");\n this.$(this.tabContentSelector).removeClass(\"active\");\n tab.addClass(\"active\");\n this.$(\"\" + this.tabLinksASelector + \"[href=\\\"#\" + id + \"\\\"]\").parent().addClass(\"active\");\n },\n onActiveTabChanged: (function () {\n this.selectTab(this.get(\"activeTab\"));\n }).observes(\"activeTab\")\n\n });\n\n exports['default'] = FoundationTabs;\n\n});","define('dashboard/components/groupable-checkbox', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n Groupable Checkbox can update the common binding destination of an array with its value comes on and off when checked and unchecked.\n\n the binding is called selections, it's a native javascript array [].\n\n USAGE:\n {{groupable-checkbox value='1' selectionsBinding=view.selectedOptions}} Option 1\n {{groupable-checkbox value='2' selectionsBinding=view.selectedOptions}} Option 2\n {{groupable-checkbox value='3' selectionsBinding=view.selectedOptions}} Option 3\n\n so when three of them are checked, the view.selectedOptions will be [1, 2, 3];\n\n */\n var GroupableCheckbox = Ember.Component.extend({\n tagName: \"input\",\n type: \"checkbox\",\n attributeBindings: [\"name\", \"type\", \"value\", \"checked:checked\", \"disabled:disabled\"],\n classNameBindings: [\"disabled:disabled\"],\n selections: [], // My psychiatrist says I suffer from Ember Paranoia\n updateSelections: (function () {\n var value = this.get(\"value\"),\n isChecked = this.get(\"checked\"),\n selectionArray = this.get(\"selections\");\n if (!selectionArray) return;\n var exists = selectionArray.contains(value);\n if (isChecked && !exists) {\n selectionArray.pushObject(value);\n } else if (!isChecked && exists) {\n selectionArray.removeObject(value);\n }\n }).observes(\"checked\"),\n change: function () {\n this.set(\"checked\", !this.get(\"checked\"));\n },\n updateCheckedState: (function () {\n this.set(\"checked\", (this.get(\"selections\") || []).contains(this.get(\"value\")));\n }).observes(\"selections.[]\", \"value\", \"selections\").on(\"init\")\n });\n\n exports['default'] = GroupableCheckbox;\n\n});","define('dashboard/components/icon-button', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n tagName: \"button\",\n classNames: [\"icon-button\"],\n classNameBindings: [\"circle:circle\", \"disabled:disabled\"],\n attributeBindings: [\"type\"],\n type: \"button\",\n icon: null,\n text: null,\n circle: false,\n disabled: false,\n bubbles: true,\n click: function (e) {\n if (!this.get(\"bubbles\")) {\n e.stopPropagation();\n }\n this.sendAction();\n }\n });\n\n});","define('dashboard/components/image-cropper', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n title: null,\n originalImage: null,\n cropper: null,\n api: null,\n selection: null,\n aspectRatio: 0,\n minSize: [0, 0], // [ width, height ]\n maxSize: [0, 0],\n jcrop: null,\n forceSelect: false,\n didInsertElement: function () {\n this.reset();\n },\n notReady: Em.computed.not(\"ready\"),\n\n reset: function () {\n var $cropper = this.$(\"img.cropper-display\");\n this.set(\"cropper\", $cropper);\n this.set(\"selection\", null);\n this.get(\"cropper\").removeAttr(\"style\");\n this.get(\"cropper\").data(\"Jcrop\", null);\n this.set(\"ready\", false);\n $(\".jcrop-holder\").remove();\n },\n setupJCrop: function () {\n var that = this;\n\n this.get(\"cropper\").Jcrop({\n aspectRatio: this.aspectRatio,\n minSize: this.minSize,\n maxSize: this.maxSize,\n setSelect: this.setSelect,\n onSelect: this.onSelect.bind(this),\n onRelease: this.onRelease.bind(this)\n }, function () {\n that.set(\"jcrop\", this);\n that.set(\"ready\", true);\n });\n },\n onOriginalImageChanged: (function () {\n if (this.get(\"originalImage\")) {\n Ember.run.scheduleOnce(\"afterRender\", this, this.setupJCrop);\n } else {\n this.reset();\n }\n }).observes(\"originalImage\"),\n\n onSelect: function () {\n var jcrop = this.get(\"jcrop\");\n if (!jcrop) {\n // this is here because onSelect might be fired when the jcrop is empty\n if (this.get(\"setSelect\")) {\n this.set(\"selection\", this.get(\"setSelect\"));\n }\n\n return;\n }\n\n var selection = jcrop.tellSelect();\n this.set(\"selection\", [selection.x, selection.y, selection.w, selection.h]);\n this.set(\"jcropSelection\", [selection.x, selection.y, selection.x2, selection.y2]);\n },\n onRelease: function () {\n if (this.get(\"forceSelect\") && (this.get(\"setSelect\") || this.get(\"jcropSelection\"))) {\n var jcrop = this.get(\"jcrop\");\n if (!jcrop) {\n return;\n }\n\n jcrop.setSelect(this.get(\"jcropSelection\") ? this.get(\"jcropSelection\") : this.get(\"setSelect\"));\n }\n },\n actions: {\n confirmSave: function () {\n this.sendAction(\"confirmSave\", this.get(\"originalImage\"), this.get(\"selection\"));\n }\n }\n });\n\n});","define('dashboard/components/index-cn', ['exports', 'attic/utils/type-names'], function (exports, TypeNames) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend(TypeNames['default'], {\n typeKeyBinding: \"parentView.typeKey\",\n classNameBindings: [\"longTypeName\"],\n acl: Em.computed.alias(\"parentView.controller.acl\"),\n longTypeName: (function () {\n return this.get(\"typeName\").length > 9;\n }).property(\"typeName\"),\n filterPlaceholder: (function () {\n return \"Filter \" + this.get(\"pluralTypeName\");\n }).property(\"pluralTypeName\"),\n didInsertElement: function () {\n this.$(\".listing\").on(\"click\", \".item\", function (ev) {\n // if the click wasn't from a link or a button\n if (!$(ev.target).closest(\"a, button\").length) {\n $(ev.currentTarget).find(\".default-action\").click();\n }\n });\n this.$(\".listing .item\").addClass(\"clickable\");\n }\n });\n\n});","define('dashboard/components/menu-list-delete-modal', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n classNames: \"menu-list-delete-modal\",\n layoutName: \"components/menu-list-delete-modal\",\n deletingList: null,\n actions: {\n confirmDelete: function (listToDelete) {\n var parentList = listToDelete.get(\"parent\");\n\n if (parentList) {\n //remove itself from its parent. (is needed to update the tree view at this stage)\n parentList.get(\"children\").removeObject(listToDelete);\n };\n listToDelete.deleteRecord();\n\n this.sendAction();\n }\n }\n });\n\n});","define('dashboard/components/menu-list-editor', ['exports'], function (exports) {\n\n 'use strict';\n\n /* Menu list Modal Component\n * Usage:\n * {{menu-list-editor\n * label=label\n * menuList=menulist\n * confirm='confirm'\n * cancel='cancel'}}\n *\n * label: Modal title (String)\n * menuList: menulist data model (Ember data)\n * confirm: action to trigger after confirm is clicked (action function name)\n * cancel: action to trigger after cancel is clicked or is closing from outside click (action function name)\n * */\n\n var equalByKeys = function (obj1, obj2) {\n // assumes the objects are guaranteed to have exactly the same keys\n var keys = Object.keys(obj1);\n\n var clean = function (val) {\n if (typeof val === \"function\") {\n return val();\n }\n if (val && typeof val.serialize === \"function\") {\n return val.serialize();\n }\n return val;\n };\n\n return keys.every(function (key) {\n var val1 = clean(obj1[key]);\n var val2 = clean(obj2[key]);\n\n if (Array.isArray(val1) && Array.isArray(val2)) {\n // only handle empty arrays;\n if (val1.length === 0 && val2.length == 0) {\n return true;\n }\n return false;\n }\n\n return val1 === val2;\n });\n };\n\n exports['default'] = Ember.Component.extend({\n classNames: \"edit-menulist-dialog\",\n\n label: null,\n menuList: null,\n oldData: null,\n popover: null,\n self: null, // use to trigger open\n innerClass: \"menu-list-popover\",\n innerClasses: (function () {\n var classes = this.get(\"innerClass\");\n var label = this.get(\"label\");\n\n return classes + (label ? \" has-label\" : \"\");\n }).property(\"innerClass\", \"label\"),\n\n confirmDisabled: Em.computed.empty(\"menuList.name\"),\n menuListNameErrorMessages: {\n required: \"Name is required for menu list.\",\n invalid: \"\"\n },\n\n didInsertElement: function () {\n var _this = this;\n this.set(\"self\", this.$());\n this.get(\"self\").on(\"open\", function (ev, menuList) {\n // special case here, waiting for the popover handle\n // to be rendered then trigger the open.\n Ember.run.schedule(\"afterRender\", function () {\n _this.set(\"menuList\", menuList);\n });\n });\n },\n\n actions: {\n confirmViaPopover: function () {\n this.get(\"popover\").$().trigger(\"confirm\");\n },\n cancelViaPopover: function () {\n this.get(\"popover\").$().trigger(\"cancel\");\n },\n confirm: function () {\n this.sendAction(\"confirm\");\n },\n cancel: function (mlist) {\n var oldData = this.get(\"oldData\");\n if (oldData) {\n mlist.setProperties(oldData);\n this.set(\"oldData\", undefined);\n } else {\n mlist.deleteRecord();\n }\n\n this.sendAction(\"cancel\");\n },\n delete: function () {\n this.sendAction(\"delete\");\n },\n openDeleteModal: function () {\n this.set(\"deletingList\", this.get(\"menuList\"));\n this.set(\"menuList\", false); // close this popover\n },\n opened: function (mlist) {\n var attrs = Em.get(mlist.constructor, \"attributes\");\n var keys = attrs.keys.list;\n\n var oldData = mlist.getProperties(keys);\n var defaults = keys.reduce(function (acc, key) {\n acc[key] = attrs.get(key).options.defaultValue;\n return acc;\n }, {});\n\n if (equalByKeys(oldData, defaults)) {\n // if it's a new object\n oldData = undefined;\n }\n\n this.set(\"oldData\", oldData);\n\n // we can't use this.$() here because the popover gets detached from our dom\n // so we have to use the global $ here, yay\n var inputSel = \".\" + this.get(\"innerClass\") + \".open .name\";\n $(inputSel).focus();\n }\n }\n });\n\n});","define('dashboard/components/menu-list', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * Menu-list component\n * USAGE: {{menu-list menuLists=menu.lists selectedMenuList=selected}}\n *\n * - menuLists: A menu's menulists.\n * - selectedMenuList: Current selected menulist (Object of menuLists or there children).\n **/\n exports['default'] = Ember.Component.extend({\n layoutName: \"components/menu-list\",\n classNameBindings: [\":menu-list\"],\n\n menuLists: [],\n selectedMenuList: null,\n\n isSelectingRoot: Em.computed.empty(\"selectedMenuList.parent\"),\n isSelectingAllProductsList: (function () {\n return this.get(\"selectedMenuList.all_products\") && this.get(\"isSelectingRoot\");\n }).property(\"selectedMenuList.all_products\", \"isSelectingRoot\"),\n siblingOrChildrenLists: (function () {\n var _this = this;\n return this.get(\"isSelectingAllProductsList\") ? this.get(\"menuLists\").filter(function (list) {\n return Em.isEmpty(list.get(\"parent\")) && list !== _this.get(\"selectedMenuList\");\n }) : this.get(\"selectedMenuList.children\");\n }).property(\"menuLists.[]\", \"selectedMenuList.children.[]\", \"isSelectingAllProductsList\"),\n\n popover: null,\n editor: null,\n\n init: function () {\n this._super();\n if (!this.get(\"selectedMenuList\")) {\n this.set(\"selectedMenuList\", this.get(\"menuLists\").findBy(\"all_products\", true));\n }\n },\n\n onSelectedMenuListChanged: (function () {\n var current = this.get(\"selectedMenuList\");\n if (this._selectedMenuListCache !== current) {\n this.sendAction(\"action\", current);\n this._selectedMenuListCache = current;\n }\n }).observes(\"selectedMenuList\"),\n\n actions: {\n selectParent: function () {\n if (this.get(\"isSelectingRoot\")) {\n this.set(\"selectedMenuList\", this.get(\"menuLists\").findBy(\"all_products\", true));\n } else {\n this.set(\"selectedMenuList\", this.get(\"selectedMenuList\").get(\"parent\"));\n }\n },\n addMenuList: function () {\n var newList = this.get(\"store\").createRecord(\"menulist\");\n\n if (this.get(\"isSelectingAllProductsList\")) {\n this.get(\"menuLists\").pushObject(newList);\n } else {\n newList.set(\"parent\", this.get(\"selectedMenuList\"));\n newList.set(\"menu\", this.get(\"selectedMenuList.menu\"));\n this.get(\"selectedMenuList.children\").pushObject(newList);\n }\n\n this.send(\"editMenuList\", newList);\n },\n selectList: function (menuList) {\n this.set(\"selectedMenuList\", menuList);\n },\n editMenuList: function (menuList) {\n this.get(\"editor\").trigger(\"open\", menuList);\n }\n },\n\n store: (function () {\n return this.container.lookup(\"store:main\");\n }).property()\n });\n\n});","define('dashboard/components/option-rules', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * Option rules will take one product option and take control of it's minimum and maximum by the selects inside.\n *\n * Configurations\n * option should take a product option model\n * connectionText text in the connection section.\n *\n * Usage\n * {{option-rules option=option ...}}\n * */\n exports['default'] = Ember.Component.extend({\n classNames: [\"option-rules\"],\n connectionText: \"and\",\n maximum: Em.computed.alias(\"option.maximum\"),\n minimum: Em.computed.alias(\"option.minimum\"),\n\n didInsertElement: function () {\n if (this.get(\"option.product.resolved\")) {\n this.set(\"firstOperator\", this.get(\"minimum\") >= 1 ? \"mandatory\" : \"optional\");\n } else if (this.get(\"option.group\")) {\n var minimum = this.get(\"minimum\"),\n maximum = this.get(\"maximum\");\n\n if (minimum > 0 && !maximum) {\n this.set(\"firstOperator\", \"atleast\");\n } else if (!minimum && maximum > 0) {\n this.set(\"firstOperator\", \"atmost\");\n } else if (maximum && minimum) {\n this.set(\"firstOperator\", \"atleast\");\n }\n }\n },\n\n numberOfProducts: Ember.computed.alias(\"option.group.resolved.products.length\"),\n\n firstBoundaries: (function () {\n var output = [],\n secondLimit = this.get(\"numberOfProducts\");\n for (var i = 1; i <= secondLimit; i++) {\n output.push({\n label: i + \" product\" + (i > 1 ? \"s\" : \"\"),\n value: i\n });\n }\n return output;\n }).property(\"numberOfProducts\"),\n\n secondBoundaries: (function () {\n var minimum = this.get(\"minimum\"),\n ret = this.get(\"firstBoundaries\");\n return !minimum ? ret : ret.filter(function (item) {\n return item.value >= minimum;\n });\n }).property(\"firstBoundaries\", \"minimum\"),\n\n firstOperatorsForProduct: [{ label: \"Optional\", value: \"optional\" }, { label: \"Mandatory\", value: \"mandatory\" }],\n\n firstOperatorsForProductGroup: [{ label: \"Optional\", value: \"optional\" }, { label: \"At Least\", value: \"atleast\" }, { label: \"At Most\", value: \"atmost\" }],\n\n firstOperators: (function () {\n if (this.get(\"option.product.resolved\")) {\n return this.get(\"firstOperatorsForProduct\");\n } else if (this.get(\"option.group.resolved\")) {\n return this.get(\"firstOperatorsForProductGroup\");\n } else {\n return null;\n }\n }).property(\"firstOperatorsForProduct\", \"firstOperatorsForProductGroup\", \"option.resolved\", \"option.group.resolved\", \"option.product.resolved\"),\n\n onLowerOperatorChanged: (function () {\n var firstOperator = this.get(\"firstOperator\"),\n minimum = this.get(\"minimum\"),\n maximum = this.get(\"maximum\");\n\n switch (firstOperator) {\n case \"optional\":\n this.set(\"minimum\", 0);\n this.set(\"maximum\", null);\n break;\n case \"atleast\":\n if (!minimum && maximum) {\n this.set(\"minimum\", maximum);\n this.set(\"maximum\", null);\n } else if (!minimum) {\n this.set(\"minimum\", 1);\n }\n break;\n case \"atmost\":\n if (!maximum && minimum > 0) {\n this.set(\"maximum\", minimum);\n } else if (!maximum && !minimum) {\n this.set(\"maximum\", 1);\n }\n this.set(\"minimum\", null);\n break;\n case \"mandatory\":\n this.set(\"minimum\", 1);\n this.set(\"maximum\", null);\n break;\n }\n }).observes(\"firstOperator\"),\n\n showLowerBoundary: (function () {\n return [\"atleast\", \"atmost\"].contains(this.get(\"firstOperator\"));\n }).property(\"firstOperator\"),\n showAddSecondBoundaryButton: (function () {\n return !this.get(\"showSecondBoundary\") && this.get(\"firstOperator\") === \"atleast\";\n }).property(\"showSecondBoundary\", \"firstOperator\"),\n showSecondBoundary: (function () {\n return this.get(\"firstOperator\") === \"atleast\" && this.get(\"maximum\");\n }).property(\"firstOperator\", \"maximum\"),\n\n /**\n * This accessor is a common accessor for both firstBoundary & secondBoundary.\n * Purpose for this method to exists rather than using Ember.computed.alias\n * is to avoid letting the intermediate undefined value from the UI middle\n * state to flow through to the model.\n */\n boundaryAccessor: function (key, value) {\n var prop = key === \"firstBoundary\" ? \"minimum\" : \"maximum\";\n if (this.get(\"firstOperator\") === \"atmost\") {\n prop = \"maximum\";\n }\n if (arguments.length > 1 && value) {\n this.set(prop, value);\n\n var maximum = this.get(\"maximum\");\n var minimum = this.get(\"minimum\");\n\n if (maximum && minimum > maximum) {\n this.set(\"maximum\", minimum);\n }\n }\n\n return this.get(prop);\n },\n firstBoundary: (function (key, value) {\n return this.boundaryAccessor.apply(this, arguments);\n }).property(\"minimum\", \"firstBoundaries\"),\n secondBoundary: (function (key, value) {\n return this.boundaryAccessor.apply(this, arguments);\n }).property(\"maximum\", \"secondBoundaries\"),\n\n actions: {\n addSecondBoundary: function () {\n this.set(\"maximum\", this.get(\"minimum\"));\n },\n removeLowerBoundary: function () {\n this.set(\"minimum\", null);\n },\n removeSecondBoundary: function () {\n this.set(\"maximum\", null);\n }\n }\n });\n\n});","define('dashboard/components/price-entry', ['exports', 'attic/computed', 'attic/utils', 'attic/dom-utils', 'dashboard/components/confirm-input'], function (exports, computed, utils, dom_utils, ConfirmInputComponent) {\n\n 'use strict';\n\n /**\n All prices should be entered using a {{price-entry}} component. It is expected that\n this will grow over time to provide control over the various attributes of a price object\n (includes_tax, tax_exempt, multi-currency support etc.)\n */\n var isNone = Ember.isNone;\n\n exports['default'] = ConfirmInputComponent['default'].extend({\n\n /**\n * @property PriceModel\n */\n price: null,\n\n classNames: [\"price-entry\"],\n classNameBindings: [\"usingInherited:inherited\"],\n\n messages: {\n required: \"A price is required\",\n invalid: \"Invalid input\"\n },\n\n currency: {\n symbol: \"$\"\n },\n\n value: computed.formatPrice(\"price.amount\", {\n thousands: false,\n symbol: false\n }),\n inputValue: computed.boundOneWay(\"value\"),\n placeholder: computed.formatPrice(\"inherited.amount\", {\n symbol: false\n }),\n\n formattedPrice: computed.formatPrice(\"price.amount\"),\n formattedInherited: computed.formatPrice(\"inherited.amount\"),\n\n symbolChanged: (function () {\n var symbol = this.$(\".edit .symbol\");\n if (!symbol.length) {\n symbol = $(\"<span class=\\\"symbol\\\"></span>\");\n this.$(\".edit\").prepend(symbol);\n }\n symbol.text(this.get(\"currency.symbol\"));\n }).observes(\"currency.symbol\").on(\"didInsertElement\"),\n\n usingInherited: (function () {\n return isNone(this.get(\"price.amount\")) && !isNone(this.get(\"inherited.amount\"));\n }).property(\"price.amount\", \"inherited.amount\"),\n\n displayValue: (function () {\n var amount = this.get(\"formattedPrice\") || this.get(\"formattedInherited\");\n return Ember.isNone(amount) ? this.get(\"emptyLabel\") : amount;\n }).property(\"formattedPrice\", \"formattedInherited\", \"emptyLabel\"),\n\n validate: function (n) {\n return new RegExp(/^\\s*-?(\\d+(\\.\\d{1,2})?|\\.\\d{1,2})\\s*$/).test(n);\n },\n\n setValue: function (amount) {\n var price = this.get(\"price\");\n if (Ember.isEmpty(amount)) {\n if (price) {\n price.set(\"value\", null);\n if (!price.get(\"isDeleted\")) {\n price.deleteRecord();\n this.set(\"price\", null);\n }\n }\n } else {\n if (!price || price.get(\"isDeleted\")) {\n this.set(\"price\", this.get(\"store\").createRecord(\"price\", {\n value: amount\n }));\n } else {\n price.set(\"amount\", new BigNumber(amount));\n }\n }\n },\n\n resetInputValue: function () {\n this.set(\"inputValue\", this.get(\"price.value\"));\n },\n\n store: (function () {\n return this.container.lookup(\"store:main\");\n }).property()\n\n });\n\n});","define('dashboard/components/price-tax', ['exports', 'attic/computed'], function (exports, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n required: true,\n emptyLabel: \"0.00\",\n classNames: [\"price-tax\"],\n init: function () {\n this._super();\n this.pricing = this.container.lookup(\"service:pricing\");\n },\n editPrice: (function () {\n return this.pricing.newPriceObject(this.get(\"price\"));\n }).property(\"price.amount\", \"price.includes_tax\", \"isEditingPrice\"),\n incTax: Ember.computed.oneWay(\"editPrice.incTaxValue\"),\n exTax: Ember.computed.oneWay(\"editPrice.exTaxValue\"),\n isEditingPrice: Ember.computed.oneWay(\"price.isNew\"),\n\n onEditingPrice: (function () {\n this.set(\"incTax\", this.get(\"editPrice.incTaxValue\"));\n this.set(\"exTax\", this.get(\"editPrice.exTaxValue\"));\n }).observes(\"isEditingPrice\"),\n\n displayValue: (function () {\n var value = this.get(\"editPrice.formatted.incTax\");\n return value ? value : this.get(\"emptyLabel\");\n }).property(\"editPrice.formatted.incTax\", \"emptyLabel\"),\n\n actions: {\n incTaxPriceChanged: function (value) {\n this.set(\"editPrice.value\", value);\n this.set(\"editPrice.includes_tax\", true);\n this.set(\"exTax\", this.get(\"editPrice.exTaxValue\"));\n },\n exTaxPriceChanged: function (value) {\n this.set(\"editPrice.value\", value);\n this.set(\"editPrice.includes_tax\", false);\n this.set(\"incTax\", this.get(\"editPrice.incTaxValue\"));\n },\n priceConfirmed: function () {\n this.get(\"price\").setProperties(this.get(\"editPrice\").priceProps());\n }\n }\n });\n\n});","define('dashboard/components/prices-entry', ['exports', 'dashboard/components/price-entry', 'attic/computed'], function (exports, PriceEntry, computed) {\n\n 'use strict';\n\n exports['default'] = PriceEntry['default'].extend({\n prices: null,\n inheritedPrices: [],\n price: computed.firstPrice(\"prices\"),\n inherited: computed.firstPrice(\"inheritedPrices\")\n });\n\n});","define('dashboard/components/product-and-group-select', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * Product And Group Select is a combination of product-select and product-group-select in two separate tabs.\n *\n * Available Configurations:\n *\n * All available configuration located in product-select product-group-select\n * are exposed pretty much the same name as what's available in product-select, product-group-select & filterable-list-select.\n * just prepend product/productGroup to the things you want to configure, for example.\n *\n * searchBoxContainerClass is exposed as productSearchBoxContainerClass or productGroupSearchBoxContainerClass\n *\n * the following are still the same.\n * excludedProductGroups: array of product model that will be automatically excluded from availableProduct list.\n * availableProductGroups: same effect as availableList in FilterableListProduct, but an array of Product Model should be provided\n * noProductGroupAction: same as noResultsLinkAction in FilterableListProduct\n * selectedProductGroups: array of productModel indicates the selected products\n *\n * excludedProducts: array of product model that will be automatically excluded from availableProduct list.\n * availableProducts: same effect as availableList in FilterableListProduct, but an array of Product Model should be provided\n * noProductAction: same as noResultsLinkAction in FilterableListProduct\n * selectedProducts: array of productModel indicates the selected products\n *\n * Also FoundationTab's activeTab and availableTabs are exposed as well.\n **/\n\n exports['default'] = Ember.Component.extend({\n layoutName: \"components/product-and-group-select\",\n searchQueryInterval: 100,\n productSearchQueryInterval: Em.computed.oneWay(\"searchQueryInterval\"),\n productGroupSearchQueryInterval: Em.computed.oneWay(\"searchQueryInterval\")\n });\n\n});","define('dashboard/components/product-group-management', ['exports'], function (exports) {\n\n 'use strict';\n\n /*\n * reexports the following properties from {{product-group-select}}:\n * * availableProductGroups\n * * selectedProductGroups\n * * excludedProductGroups\n * * noProductGroupAction\n * * searchTerm\n * * filteredList\n * * searchQueryInterval\n * * draggable\n * * disabled\n * * resultHeaderInfoOnNoSearch\n * * resultHeaderInfoTemplateOnSearch\n * * resultHeaderCheckboxText\n * * noResultsLinkText\n * * noResultsLinkTextOnNoSearch\n * * noResultsLinkTemplateOnNoSearch\n */\n\n exports['default'] = Ember.Component.extend({\n classNames: [\"product-group-management\"],\n titleText: \"Available Groups\",\n subtitleText: \"Select groups to build your menu\",\n includeKeepOrganised: true,\n keepOrganisedText: \"Keep organised as Product Groups\",\n includeClearSearch: true,\n includeHeader: true,\n includeOuterHeader: true,\n sortOptions: [{ text: \"Alphabetically (A-Z)\", by: \"name\", asc: true }, { text: \"Alphabetically (Z-A)\", by: \"name\", asc: false }],\n sortOptionsWithIds: (function () {\n return this.get(\"sortOptions\").map(function (obj, index) {\n var copy = Ember.copy(obj);\n Ember.set(copy, \"idForSelect\", index + 1);\n return copy;\n });\n }).property(\"sortOptions\", \"sortOptions.@each.text\", \"sortOptions.@each.by\", \"sortOptions.@each.asc\", \"sortOptions.[]\"),\n\n availableProductGroups: null,\n excludedProductGroups: null,\n noProductGroupAction: null,\n searchTerm: null,\n filteredList: null,\n searchQueryInterval: null,\n\n sortOptionWithId: null,\n\n keepOrganisedChecked: true,\n selectedProductGroups: [],\n sortOption: (function (key, value) {\n var options = this.get(\"sortOptionsWithIds\");\n\n if (arguments.length > 1) {\n var input = options.find(function (opt) {\n return opt.by === value.by && opt.asc === value.asc;\n });\n if (input) {\n this.set(\"sortOptionWithId\", input);\n }\n }\n\n var selected = this.get(\"sortOptionWithId\") || options[0];\n selected = Ember.copy(selected);\n delete selected.idForSelect;\n return selected;\n }).property(\"sortOptionWithId\", \"sortOptionsWithIds\", \"sortOptionWithIds.[]\"),\n\n // ignore .set('status')\n // yes, ember inspects fn.length\n status: (function (k, v) {\n return {\n keepOrganisedChecked: this.get(\"keepOrganisedChecked\"),\n sortOption: this.get(\"sortOption\"),\n selectedProductGroups: this.get(\"selectedProductGroups\")\n };\n }).property(\"keepOrganisedChecked\", \"sortOption\", \"selectedProductGroups\", \"selectedProductGroups.[]\")\n\n // onKOCChanged: function() {\n // this.send('keepOrganisedChanged', this.get('keepOrganisedChecked'));\n // }.observes('keepOrganisedChecked'),\n\n // onSortChanged: function() {\n // this.send('sortOptionChanged', this.get('sortOption'));\n // }.observes('sortOption'),\n\n // onSPGChanged: function() {\n // this.send('selectionChanged', this.get('selectedProductGroups'));\n // }.observes('selectedProductGroups'),\n\n // onStatusChanged: function() {\n // this.send('statusChanged', this.get('status'));\n // }.observes('status')\n });\n\n});","define('dashboard/components/product-group-select', ['exports', 'dashboard/components/product-select'], function (exports, ProductSelect) {\n\n 'use strict';\n\n exports['default'] = ProductSelect['default'].extend({\n selectedProductGroups: [],\n dragAndDropRefName: \"productgroup/id\",\n excludeItemFieldToWatch: \"excludedProductGroups.[]\",\n excludedItems: Ember.computed.alias(\"excludedProductGroups\"),\n availableList: Ember.computed.alias(\"availableProductGroups\"),\n noResultsLinkAction: Ember.computed.alias(\"noProductGroupAction\"),\n selectedItems: Ember.computed.alias(\"selectedProductGroups\"),\n resultHeaderInfoOnNoSearch: \"Available Product Groups\",\n resultHeaderInfoTemplateOnSearch: \"Showing results for '@search'\",\n noResultsLinkTextOnNoSearch: \"\",\n noResultsLinkTemplateOnNoSearch: \"Add '@search' as a new product group?\",\n spacesRequired: function (pgroup) {\n return pgroup.get(\"products.length\");\n }\n });\n\n});","define('dashboard/components/product-select', ['exports', 'dashboard/components/filterable-list-select'], function (exports, FilterableListSelect) {\n\n 'use strict';\n\n exports['default'] = FilterableListSelect['default'].extend({\n selectedProducts: [],\n dragAndDropRefName: \"product/id\",\n excludeItemFieldToWatch: \"excludedProducts.[]\",\n excludedItems: Ember.computed.alias(\"excludedProducts\"),\n resultHeaderInfoOnNoSearch: \"Available Products\",\n resultHeaderInfoTemplateOnSearch: \"Showing results for '@search'\",\n resultHeaderInfoOnSearch: (function () {\n var template = this.get(\"resultHeaderInfoTemplateOnSearch\") || \"\";\n return template.replace(\"@search\", this.get(\"searchTerm\"));\n }).property(\"resultHeaderInfoTemplateOnSearch\", \"searchTerm\"),\n noResultsLinkTextOnNoSearch: \"\",\n placeholderText: \"Search\",\n noResultsLinkTemplateOnNoSearch: \"Add '@search' as a new product?\",\n noResultsLinkTextOnSearch: (function () {\n var template = this.get(\"noResultsLinkTemplateOnNoSearch\") || \"\";\n return template.replace(\"@search\", this.get(\"searchTerm\"));\n }).property(\"noResultsLinkTemplateOnNoSearch\", \"searchTerm\"),\n init: function () {\n this._super();\n this.get(\"propertiesToWatchForUpdate\").pushObject(this.get(\"excludeItemFieldToWatch\"));\n },\n filterFunction: function (item, searchTerm) {\n var excludedProducts = this.get(\"excludedItems\") || Ember.A([]),\n excluded = excludedProducts.filterBy(\"id\", item.get(\"id\")).length > 0;\n\n return !excluded && item.get(\"name\").toLowerCase().indexOf(searchTerm.toLowerCase()) >= 0;\n },\n availableList: Ember.computed.alias(\"availableProducts\"),\n noResultsLinkAction: Ember.computed.alias(\"noProductAction\"),\n selectedItems: Ember.computed.alias(\"selectedProducts\"),\n resultHeaderInfoText: (function () {\n var searchTerm = this.get(\"searchTerm\");\n\n if (Ember.isEmpty(searchTerm)) {\n return this.get(\"resultHeaderInfoOnNoSearch\");\n } else {\n return this.get(\"resultHeaderInfoOnSearch\");\n }\n }).property(\"searchTerm\"),\n noResultsLinkText: (function () {\n var searchTerm = this.get(\"searchTerm\");\n\n if (Ember.isEmpty(searchTerm)) {\n return this.get(\"noResultsLinkTextOnNoSearch\");\n } else {\n return this.get(\"noResultsLinkTextOnSearch\");\n }\n }).property(\"searchTerm\")\n });\n\n});","define('dashboard/components/radio-button', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n Radio button component that have extra selection attribute for you to create a radio button group\n\n USAGE:\n <span>{{radio-button name='productPriceHasNoSize' value='true' selectionBinding=view.productPriceHasNoSize}} Product has no size</span>\n <span>{{radio-button name='productPriceHasNoSize' value='false' selectionBinding=view.productPriceHasNoSize}} Product has one size or multiple sizes.</span>\n\n Through selectionBinding you can bind the selection to a value that you can monitor.\n\n * */\n var RadioButton = Ember.Component.extend({\n tagName: \"input\",\n type: \"radio\",\n attributeBindings: [\"name\", \"type\", \"value\", \"checked:checked:\", \"disabled:disabled:\"],\n change: function () {\n this.set(\"selection\", this.get(\"value\"));\n },\n checked: (function (key, val) {\n var _this = this;\n if (arguments.length > 1) {\n if (val) {\n this.set(\"selection\", this.get(\"value\"));\n } else {\n this.mutate(\"selection\", function (orig) {\n return orig === _this.get(\"value\") ? null : orig;\n });\n }\n }\n return this.get(\"value\") === this.get(\"selection\");\n }).property(\"value\", \"selection\")\n });\n\n exports['default'] = RadioButton;\n\n});","define('dashboard/components/search-input', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n classNames: \"search-input\",\n classNameBindings: [\"focused:focus\"],\n didInsertElement: function () {\n var _this = this;\n this.$(\"input\").on(\"focus\", function (ev) {\n return _this.set(\"focused\", true);\n }).on(\"focusOut\", function (ev) {\n return _this.set(\"focused\", false);\n });\n }\n });\n\n});","define('dashboard/components/select-2', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * Reusable select2 view, which offers mostly the same of the select2 3.5.0 functions that locates in\n * http://ivaynberg.github.io/select2/#documentation\n *\n * Updates:\n * Now the select-2 is a components rather than a view. But the usages are pretty much the same as before.\n *\n *\n * NOTICE:\n * id option is set using idField rather than id since it conflicts with ember.\n *\n * USAGE:\n * Options:\n *\n * In handle bar templates, most of the options in the Constructor section of Select2 Documentation can be used as\n * view property. For example in a list of book item context where letting user to choose the chapter of a book, what's\n * in the template should be the following\n *\n * {{select-2 data=model.chapters}}\n *\n * as what's been documented in select2, an example model.chapters should be [{id: 1, text: 'Chapter 1'}, {id: 2, text: 'Chapter 2'}].\n * This way only uses select2's internal data processor to do the work. If you have more complex logic, or need to load data by using\n * ajax, you can focus on how to use query & ajax option.\n *\n * For more information about what should you feed in to the select2, related options. Please refer to select2 documentation\n * http://ivaynberg.github.io/select2/#documentation\n *\n * Option multiple will turn on the select2 to multiple mode.\n *\n * Notice when using option function.\n * So, when assigning an option which should be a function, for example formatLogoSelection. Please notice that if you\n * want to keep the context value, e.g. this inside your function during the call. The following code inside a view\n * shows one way to do it.\n *\n * formatLogoSelection: function(){\n * return (object) => {\n * var container = this.$('<div></div>'),\n * imgElement = this.$('<img/>'),\n * labelElement = this.$('<span></span>');\n *\n * imgElement.attr('class', 'printer-group-logo-selection-img');\n * imgElement.attr('src', object.logo.get('previewImageURL'));\n *\n * labelElement.attr('class', 'printer-group-logo-selection-label');\n * labelElement.text(object.logo.get('name'));\n *\n * container.append(imgElement);\n * container.append(labelElement);\n *\n * return container;\n * };\n * }.property(),\n *\n * Event:\n *\n * All supported events except 'change' from select2 are notified via actions that assigned to the view in template.\n * The original event object & ref is supplied as arguments to those actions.\n *\n * Here is an example:\n * {{select-2 select2-close=\"select2Close\" select2-open=\"select2Open\" data=availablePrinterGroups selectedVal=selectedPrinterGroups}}\n * Related code in controller as following:\n *\n * export default Ember.Controller.extend({\n * actions: {\n * 'select2Open': function(event, ref){\n * console.log(event, ref);\n * },\n * 'select2Close': function(event, ref){\n * console.log(event, ref);\n * }\n * }\n * });\n *\n * A list of supporting select2 events are : ['select2-opening', 'select2-highlight', 'select2-selecting',\n * 'select2-clearing', 'select2-removing', 'select2-removed', 'select2-loaded', 'select2-focus',\n * 'select2-blur']\n *\n *\n * Important Properties:\n * selectedVal: two way binding to select2 'val' method, it represents the selected item's id. If you need to watch\n * the change of select2, just observe on the property fed into selectedVal.\n * selectedData: two way binding to select2 'data' method, it represents the selected item's object. If you need to watch\n * the change of select2, just observe on the property fed into selectedData.\n * open: a way to both manually open the select2 dropdown box and check the select2 status. It's a two way binding.\n * Just link it to a property and you are able to get the live update on select2 open status.\n * enabled: a way to enable/disable select2. It's a two way binding, which means you will get the select2 enabled/disabled status update\n * readonly: a way to set select2 to readonly/writable status. It's a two way binding, , which means you will get the\n * select2 writable/readonly status update\n * ref: the reference for a given select2 instance, in the scenario where there are multiple instances of select2. And\n * an event is fired, this is the reference for you to tell which instance is the current event sourced from.\n * idField: idField is the place to specify where the id in the object should select2 get from to feed the val field.\n * This is only functional when you specify ur dropdown list via data attribute.\n * textField: textField is the place to specify where the text in the object should select2 get from to feed the val\n * field. This is only functional when you specify ur dropdown list via data attribute.\n * objectNameField: objectNameField is the place to specify a place for the item you supplied. For example,\n * if you specify objectNameField to 'comment' and in data you've given [{id: 2, text: 'short description', time: '2014-07-04 11:30:00' }].\n * Then when you select the item, the selectedData will look like the following:\n * [{\n * id: 2,\n * text: 'short description',\n * comment: [\n * {\n * id: 2,\n * text: 'short description',\n * time: '2014-07-04 11:30:00'\n * }\n * ]\n * }]\n * This is only functional when you specify ur dropdown list via data attribute.\n *\n * */\n var Select2Component = Ember.Component.extend({\n tagName: \"div\",\n select2OptionFields: [\"width\", \"minimumInputLength\", \"maximumInputLength\", \"minimumResultsForSearch\", \"maximumSelectionSize\", \"placeholder\", \"placeholderOption\", \"separator\", \"allowClear\", \"multiple\", \"closeOnSelect\", \"openOnEnter\", \"matcher\", \"sortResults\", \"formatSelection\", \"formatResult\", \"formatResultCssClass\", \"formatNoMatches\", \"formatSearching\", \"formatInputTooShort\", \"formatInputTooLong\", \"formatSelectionTooBig\", \"formatLoadMore\", \"createSearchChoice\", \"createSearchChoicePosition\", \"initSelection\", \"tokenizer\", \"tokenSeparators\", \"query\", \"ajax\", \"data\", \"tags\", \"containerCss\", \"containerCssClass\", \"dropdownCss\", \"dropdownCssClass\", \"dropdownAutoWidth\", \"adaptContainerCssClass\", \"adaptDropdownCssClass\", \"escapeMarkup\", \"selectOnBlur\", \"loadMorePadding\", \"nextSearchTerm\"],\n select2Events: [\"select2-opening\", \"select2-highlight\", \"select2-selecting\", \"select2-clearing\", \"select2-removing\", \"select2-removed\", \"select2-loaded\", \"select2-focus\", \"select2-blur\"],\n extraObservingFields: [{ name: \"idField\", method: \"initializeSelect2\" }, { name: \"textField\", method: \"initializeSelect2\" }, { name: \"objectNameField\", method: \"initializeSelect2\" }, { name: \"selectedVal\", method: \"onSelectedValChanged\" }, { name: \"selectedData\", method: \"onSelectedDataChanged\" }, { name: \"open\", method: \"onOpenStateChanged\" }, { name: \"enabled\", method: \"onEnabledStateChanged\" }, { name: \"readonly\", method: \"onReadonlyStateChanged\" }],\n didInsertElement: function () {\n this.initializeSelect2();\n },\n getElement: function () {\n return this.$(this.get(\"element\"));\n },\n willDestroyElement: function () {\n this.destroySelect2();\n },\n initializeSelect2: function () {\n var _this = this;\n this.set(\"select2Option\", {});\n\n var dataPromise = Ember.RSVP.Promise.resolve(null);\n\n this.get(\"select2OptionFields\").forEach(function (optionItemName) {\n _this.addObserver(optionItemName, _this, \"initializeSelect2\"); //re-initialize select2 when change, the options will be preserved.\n var item = _this.get(optionItemName);\n if (optionItemName === \"data\") {\n if (item instanceof Ember.RSVP.Promise || item instanceof DS.PromiseArray) {\n dataPromise = item;\n } else {\n dataPromise = Ember.RSVP.Promise.resolve(item);\n }\n return;\n }\n if (item) {\n _this.get(\"select2Option\")[optionItemName] = item;\n }\n });\n\n this.get(\"select2Option\").id = this.get(\"idField\");\n\n this.get(\"extraObservingFields\").forEach(function (item) {\n return _this.addObserver(item.name, _this, item.method);\n });\n\n dataPromise.then(function (result) {\n // Ensure that we don't try to initialise the component when no\n // component actually exists\n if (!_this.getElement()) {\n return;\n }\n\n var idField = _this.get(\"idField\"),\n textField = _this.get(\"textField\"),\n objectNameField = _this.get(\"objectNameField\");\n\n if (result) {\n var select2Data = [];\n result.forEach(function (item) {\n var output = {\n id: item.get(idField || \"id\"),\n text: item.get(textField || \"text\")\n };\n\n if (objectNameField) {\n output[objectNameField] = item;\n }\n\n if (output.id && output.text) {\n select2Data.push(output);\n }\n });\n _this.get(\"select2Option\").data = select2Data;\n }\n\n _this.getElement().select2(_this.get(\"select2Option\"));\n\n var selectedValue = _this.get(\"selectedVal\"),\n selectedData = _this.get(\"selectedData\");\n\n if (selectedData) {\n _this.getElement().select2(\"data\", selectedData, false);\n }\n\n if (selectedValue) {\n _this.getElement().select2(\"val\", selectedValue, false);\n }\n\n _this.initializeEvents();\n });\n },\n onSelectedValChanged: function () {\n Ember.run.once(this, \"processSelectedValChanged\");\n },\n processSelectedValChanged: function () {\n this.getElement().select2(\"val\", this.get(\"selectedVal\"), false);\n },\n onSelectedDataChanged: function () {\n Ember.run.once(this, \"processSelectedDataChanged\");\n },\n processSelectedDataChanged: function () {\n this.getElement().select2(\"data\", this.get(\"selectedData\"), false);\n },\n onOpenStateChanged: function () {\n var isOpen = this.get(\"open\") === true;\n\n if (isOpen) {\n this.getElement().select2(\"open\");\n } else {\n this.getElement().select2(\"close\");\n }\n },\n onEnabledStateChanged: function () {\n this.getElement().select2(\"enable\", this.get(\"enabled\") === true);\n },\n onReadonlyStateChanged: function () {\n this.getElement().select2(\"readonly\", this.get(\"readonly\") === true);\n },\n change: function (event) {\n var addedComparable = !Ember.empty(event.added) ? Ember.isArray(event.added) ? event.added.length : event.added.id : null,\n removedComparable = !Ember.empty(event.removed) ? Ember.isArray(event.removed) ? event.removed.length : event.removed.id : null;\n\n if (addedComparable !== removedComparable) {\n this.set(\"selectedVal\", this.getElement().select2(\"val\"));\n this.set(\"selectedData\", this.getElement().select2(\"data\"));\n }\n },\n \"onSelect2Opened\": function (event) {\n this.set(\"open\", true);\n this.dispatchSelect2Events(event);\n },\n \"onSelect2Closed\": function (event) {\n this.set(\"open\", false);\n this.dispatchSelect2Events(event);\n },\n initializeEvents: function () {\n var _this = this;\n this.get(\"select2Events\").forEach(function (item) {\n _this.getElement().on(item, _this.dispatchSelect2Events.bind(_this));\n });\n\n this.getElement().on(\"select2-open\", this.onSelect2Opened.bind(this));\n this.getElement().on(\"select2-close\", this.onSelect2Closed.bind(this));\n },\n dispatchSelect2Events: function (event) {\n this.sendAction(event.type, event, this.get(\"ref\"));\n },\n destroySelect2: function () {\n var _this = this;\n this.get(\"select2OptionFields\").forEach(function (item) {\n _this.removeObserver(item, _this, \"initializeSelect2\"); //remove the observers.\n });\n\n this.get(\"extraObservingFields\").forEach(function (item) {\n return _this.removeObserver(item.name, _this, item.method);\n });\n\n this.get(\"select2Events\").forEach(function (item) {\n _this.getElement().off(item);\n });\n\n this.getElement().off(\"select2-open\");\n\n this.getElement().off(\"select2-close\");\n\n this.getElement().select2(\"destroy\");\n }\n });\n\n exports['default'] = Select2Component;\n\n});","define('dashboard/components/select-transformer', ['exports', 'select-transformer'], function (exports, SelectTransformer) {\n\n 'use strict';\n\n /* global Ember */\n exports['default'] = Ember.Select.extend({\n classNames: \"transformer\",\n optionLabelPath: \"content.name\",\n observeProperties: [\"name\"],\n didInsertElement: function () {\n this.$().selectTransformer();\n this.addObserver(\"content.[]\", this, update);\n this.get(\"observeProperties\").forEach(function (prop) {\n this.addObserver(\"content.@each.\" + prop, this, update);\n }, this);\n function update() {\n Ember.run.next(this, function () {\n if (this.get(\"isDestroyed\")) return;\n this.$().trigger(\"change\");\n });\n }\n }\n });\n\n});","define('dashboard/components/split-button', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n tagName: \"li\",\n classNames: [\"split-button\"]\n });\n\n});","define('dashboard/components/td-fill-row', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Component.extend({\n tagName: \"td\",\n didInsertElement: function () {\n var cells = this.$().closest(\"table\").find(\"tr:eq(0)\").find(\"td, th\");\n var numCols = cells.toArray().reduce(function (accum, el) {\n return accum + (el.colSpan || 1);\n }, 0);\n this.$().attr(\"colSpan\", numCols);\n }\n });\n\n});","define('dashboard/components/tree-view', ['exports'], function (exports) {\n\n 'use strict';\n\n // Tree View component: Using jquery-bonsai from https://github.com/aexmachina/jquery-bonsai\n //\n // Usage:\n // {{#tree-view tree=tree}}\n // <li>\n // PARENT\n // <ul>\n // <li> CHILD-1 </li>\n // <li> CHILD-2\n // <ul>\n // <li> CHILD of CHILD-2 </li>\n // </ul>\n // </li>\n // </ul>\n // </li>\n // {{/tree-view}}\n //\n // In route / view:\n // this.get('controller.tree').trigger('expandAllChildren');\n // this.get('controller.tree').trigger('collapseAllChildren');\n //\n // In controller:\n // this.get('tree').trigger('expandAllChildren');\n // this.get('tree').trigger('collapseAllChildren');\n\n exports['default'] = Ember.Component.extend({\n tagName: \"ol\",\n tree: null, // use this to send events to the tree\n\n updateTree: function (state) {\n if (!this.get(\"isDestroying\") || !this.get(\"isDestroyed\")) {\n this.$().bonsai(\"update\");\n this.$().bonsai(\"restore\", state);\n }\n },\n\n didInsertElement: function () {\n var _this = this;\n var tree = this.$();\n\n this.set(\"tree\", tree);\n tree.on(\"expand\", function (ev, elem) {\n return _this.$().bonsai(\"expand\", elem);\n });\n tree.on(\"expandAllChildren\", function () {\n return _this.$().bonsai(\"expandAll\");\n });\n tree.on(\"collapseAllChildren\", function () {\n return _this.$().bonsai(\"collapseAll\");\n });\n tree.on(\"updated\", function () {\n var state = _this.$().data(\"bonsai\").serialize();\n Ember.run.scheduleOnce(\"afterRender\", _this, _this.updateTree, state);\n });\n\n this.$().bonsai({\n expandAll: false\n });\n }\n });\n\n});","define('dashboard/components/type-ahead-create', ['exports', 'dashboard/components/type-ahead'], function (exports, TypeAheadComponent) {\n\n 'use strict';\n\n var TypeAheadCreate = TypeAheadComponent['default'].extend({\n\n /**\n Set to the Class to be used to `create()` new options, or implement `createOption()`\n */\n optionType: Em.Object,\n\n init: function () {\n this._super();\n this.templates.footer = footer.bind(this);\n // the empty template is used when there are no suggestions\n this.templates.empty = (function (ctx) {\n // allow footer() to be used for the empty template\n ctx.isEmpty = true;\n footer.call(this, ctx);\n }).bind(this);\n function footer(ctx) {\n // don't show a link to add if it's empty or already exists\n if (!ctx.query || this._isExactMatch(ctx.query)) {\n this.canCreate = false;\n return;\n }\n this.canCreate = true;\n this.createValue = ctx.query;\n var showAdd = true;\n // ctx.isEmpty is true when there are no suggestions\n if (ctx.isEmpty) {\n showAdd = true;\n } else {\n // avoid showing it twice\n // if there are no matches then the 'empty' template will showAdd\n showAdd = this.source.index.get(ctx.query).length > 0;\n }\n if (showAdd) {\n return [\"<div class=\\\"tt-suggestion\\\">\", \"<a class=\\\"create\\\"><i class=\\\"foundicon-plus\\\"></i> Add \\\"\" + ctx.query + \"\\\"</a>\", \"</div>\"].join(\"\");\n }\n }\n },\n\n _isExactMatch: function (query) {\n var matches = this.source.index.get(query);\n for (var i = 0; i < matches.length; i++) {\n if (matches[i].value === query) {\n return true;\n }\n }\n return false;\n },\n\n _typeahead: function () {\n return this.$().data(\"ttTypeahead\");\n },\n\n didInsertElement: function () {\n var that = this;\n this.$().on(\"typeahead:selected\", function (ev, item) {\n if (item === undefined) {\n that.createOption(that.createValue);\n ev.stopImmediatePropagation();\n }\n }).on(\"typeahead:cursorchanged\", function (ev, item, dataset) {\n // when the cursor is on the create link, update the value in the input\n if (that.canCreate && item === undefined) {\n that.$().val(\"Add \\\"\" + that.createValue + \"\\\"\");\n that.isAddSelected = true;\n } else {\n that.isAddSelected = false;\n }\n }).on(\"keydown\", function (ev) {\n if (that.isAddSelected) {\n that._typeahead().input.resetInputValue();\n that.isAddSelected = false;\n }\n }).on(\"change\", function () {\n that.set(\"selection\", null);\n }).on(\"blur\", function (ev) {\n var typeahead = that._typeahead();\n // ensure the input has the real value on blur\n typeahead.input.query = that.get(\"selectionLabel\") || \"\";\n typeahead.input.clearHint();\n // clear out the dropdown so the hint isn't re-populated when re-focused\n typeahead.dropdown.empty();\n typeahead.dropdown.close();\n typeahead.dropdown.isEmpty = true;\n typeahead.dropdown._getSuggestions().remove();\n });\n\n this._super();\n },\n\n createOption: function (value) {\n var optionType = this.get(\"optionType\");\n if (!optionType) throw new Error(\"A create() method must be provided if the `optionType` property is not set\");\n if (typeof optionType === \"string\") {\n optionType = this.container.lookupFactory(optionType);\n }\n var object;\n // if we need to create a DS.Model then use the DS.Store\n if (DS.Model && DS.Model.detect(optionType)) {\n var store = this.container.lookup(\"store:main\");\n object = store.createRecord(optionType.typeKey);\n } else {\n object = optionType.create();\n }\n object.set(this.get(\"labelPath\"), value);\n this.set(\"selection\", object);\n }\n\n });\n\n Ember.Handlebars.helper(\"type-ahead-create\", TypeAheadCreate);\n exports['default'] = TypeAheadCreate;\n\n});","define('dashboard/components/type-ahead-toggle', ['exports', 'dashboard/components/type-ahead', 'dashboard/components/type-ahead-create'], function (exports, TypeAhead, TypeAheadCreate) {\n\n 'use strict';\n\n exports['default'] = Em.Component.extend({\n\n isEditMode: false,\n labelValueBinding: \"input.selectionLabel\",\n\n input: (function () {\n var klass = this.get(\"allowCreate\") ? TypeAheadCreate['default'] : TypeAhead['default'];\n return this.createChildView(klass, {\n nameBinding: \"parentView.name\",\n placeholderBinding: \"parentView.placeholder\",\n showHintBinding: \"parentView.showHint\",\n contentBinding: \"parentView.content\",\n remoteBinding: \"parentView.remote\",\n optionTypeBinding: \"parentView.optionType\",\n optionLabelPathBinding: \"parentView.optionLabelPath\",\n selectionBinding: \"parentView.selection\",\n requiredBinding: \"parentView.required\",\n tabIndexBinding: \"parentView.tabIndex\" });\n }).property(\"allowCreate\", \"isEditMode\"),\n\n focusIn: function () {\n this.set(\"isEditMode\", true);\n this.sendAction(\"focusInCB\");\n },\n\n focusOut: function () {\n this.set(\"isEditMode\", false);\n this.sendAction(\"focusOutCB\");\n },\n\n // the input will be inserted in the template after the property changes\n // so have to se the focus manually after that happens\n focusInput: (function () {\n if (this.get(\"isEditMode\")) {\n Em.run.next(this, function () {\n this.$(\".write input\").focus();\n });\n }\n }).observes(\"isEditMode\")\n });\n\n});","define('dashboard/components/type-ahead', ['exports'], function (exports) {\n\n 'use strict';\n\n /* global Bloodhound */\n\n var TypeAheadComponent = Ember.TextField.extend({\n\n classNames: \"type-ahead\",\n optionLabelPath: \"content.name\",\n attributeBindings: [\"required\", \"tabIndex\", \"value\"],\n showHint: true,\n\n /**\n May be a string URL or a [remote options hash](https://github.com/twitter/typeahead.js/blob/master/doc/bloodhound.md#remote)\n */\n remote: null,\n\n /**\n Can be used to define options to be passed to the jQuery.ajax call.\n */\n ajaxOptions: null,\n\n /**\n The Bloodhound instance that is the source for suggestions.\n */\n source: null,\n defaultLimit: 5,\n minLength: 0,\n\n init: function () {\n this._super();\n this.templates = {\n suggestion: function (suggestion) {\n return \"<a>\" + suggestion.value + \"</a>\";\n }\n };\n this.source = new Bloodhound({\n datumTokenizer: function (item) {\n return Bloodhound.tokenizers.whitespace(item.value);\n },\n queryTokenizer: Bloodhound.tokenizers.whitespace,\n dupDetector: function (remoteMatch, localMatch) {\n return remoteMatch.value === localMatch.value;\n },\n local: [], // will be populated in contentObserver()\n remote: this.getRemote()\n });\n this.source.initialize();\n },\n\n getRemote: function () {\n var remote = this.get(\"remote\");\n if (!remote) return null;\n if (Em.typeOf(remote) === \"string\") {\n remote = { url: remote };\n }\n return Em.$.extend(remote, this.ajaxOptions, this.constructor.ajaxOptions);\n },\n\n selectionLabel: (function () {\n return this.get(\"selection.\" + this.get(\"labelPath\"));\n }).property(\"selection\", \"labelPath\"),\n\n selectionChanged: (function () {\n var $el = this.$();\n if ($el) $el.val(this.get(\"selectionLabel\"));\n }).observes(\"selectionLabel\"),\n\n labelPath: (function () {\n return this.get(\"optionLabelPath\").replace(/^content\\.?/, \"\");\n }).property(\"optionLabelPath\"),\n\n labelPathChanged: (function () {\n this.addObserver(\"selection.\" + this.get(\"labelPath\"), this, function () {\n this.notifyPropertyChange(\"selectionLabel\");\n });\n }).observes(\"labelPath\").on(\"init\"),\n\n didInsertElement: function () {\n this._super();\n this.$().val(this.get(\"selectionLabel\"));\n this.initializeTypeahead();\n this.$().closest(\".twitter-typeahead\").find(\".tt-hint\").removeAttr(\"required\");\n },\n\n willDestroyElement: function () {\n this._super();\n this._removeContentObserver();\n },\n\n _removeContentObserver: function () {\n var content = this.get(\"content\");\n if (content) {\n content.removeArrayObserver(this);\n }\n },\n\n contentChanged: (function () {\n this.source.clear();\n var content = this.get(\"content\");\n if (content) {\n content.forEach(this.addItemToSource, this);\n content.addArrayObserver(this);\n }\n }).observes(\"content\").on(\"init\"),\n\n beforeContentChanged: (function () {\n this._removeContentObserver();\n }).observesBefore(\"content\"),\n\n arrayDidChange: function (content, start, removeCount, addCount) {\n if (addCount) {\n content.slice(start, start + addCount).forEach(this.addItemToSource, this);\n }\n },\n arrayWillChange: Ember.K,\n\n addItemToSource: function (object) {\n var labelPath = this.get(\"labelPath\"),\n item = this._itemForObject(labelPath, object);\n this.source.add(item);\n },\n\n initializeTypeahead: function () {\n var that = this;\n this.$().typeahead(this.get(\"typeaheadOptions\"), this.getDataset()).on(\"typeahead:selected\", function (event, item) {\n that.set(\"selection\", item.object);\n }).on(\"typeahead:autocompleted\", function (event, item) {\n that.set(\"selection\", item.object);\n });\n if (this.get(\"selection\")) {\n this.notifyPropertyChange(\"selection\");\n }\n },\n\n typeaheadOptions: (function () {\n return {\n name: this.get(\"name\"),\n limit: this.get(\"limit\") || this.defaultLimit,\n hint: this.get(\"showHint\"),\n minLength: this.get(\"minLength\")\n };\n }).property(),\n\n getDataset: function () {\n return {\n templates: this._createTemplates(),\n source: this.source.ttAdapter()\n };\n },\n\n _createTemplates: function () {\n var templates = {};\n Object.keys(this.templates).forEach(function (key) {\n var template = this.templates[key];\n if (typeof template === \"function\") {\n template = template.bind(this);\n }\n templates[key] = template;\n }, this);\n return templates;\n },\n\n _itemForObject: function (labelPath, object) {\n return {\n value: object.get(labelPath) || \"\",\n object: object\n };\n } });\n\n TypeAheadComponent.reopenClass({\n /**\n Can be used to define options to be passed to the jQuery.ajax call.\n */\n ajaxOptions: {},\n\n /**\n Error classes are placed on the wrong elements for the typeahead inputs\n so we need to move these around whenever validation changes\n */\n handleAbideErrors: function ($form) {\n $form.on(\"validated\", function typeaheadErrors() {\n $form.find(\".twitter-typeahead\").each(function () {\n var $el = $(this);\n if ($el.hasClass(\"error\")) {\n $el.parent().addClass(\"error\");\n } else {\n var $parent = $el.parent();\n // avoid resetting the whole form if the typeahead input hasn't been wrapped in a label\n if (!$parent.is(\"form\")) {\n $parent.removeClass(\"error\");\n }\n }\n });\n });\n }\n\n });\n\n Ember.Handlebars.helper(\"type-ahead\", TypeAheadComponent);\n\n exports['default'] = TypeAheadComponent;\n\n});","define('dashboard/components/x-tag', ['exports'], function (exports) {\n\n\t'use strict';\n\n\t// this exists so that we can use all of the default component\n\t// conveniences for dynamic tags/classes/etc in a template, like:\n\t//\n\t// {{x-tag classNames=\":disabled\" tagName=boundToSomething}}\n\n\texports['default'] = Ember.Component;\n\n});","define('dashboard/config/ember-spinner/default', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = {\n lines: 13, // The number of lines to draw\n length: 5, // The length of each line\n width: 1, // The line thickness\n radius: 3, // The radius of the inner circle\n corners: 1, // Corner roundness (0..1)\n rotate: 0, // The rotation offset\n direction: 1, // 1: clockwise, -1: counterclockwise\n color: \"#000\", // #rgb or #rrggbb or array of colors\n speed: 1, // Rounds per second\n trail: 60, // Afterglow percentage\n shadow: false, // Whether to render a shadow\n hwaccel: false, // Whether to use hardware acceleration\n className: \"spinner\", // The CSS class to assign to the spinner\n zIndex: 2000000000, // The z-index (defaults to 2000000000)\n top: \"50%\", // Top position relative to parent\n left: \"50%\" // Left position relative to parent\n };\n\n});","define('dashboard/config/environment', ['exports'], function (exports) {\n\n\t'use strict';\n\n\t// this import is provided by ember-cli\n\texports['default'] = {};\n\n});","define('dashboard/controllers/error', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n is404: Ember.computed.equal(\"model.status\", 404)\n });\n\n});","define('dashboard/features', ['exports', 'ember-feature-flags/features'], function (exports, features) {\n\n\t'use strict';\n\n\texports['default'] = features['default'];\n\n});","define('dashboard/helpers/capitalize-str', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Handlebars.makeBoundHelper(function (str) {\n return (str || \"\").capitalize();\n });\n\n});","define('dashboard/helpers/date-format', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Handlebars.makeBoundHelper(function (date, format) {\n return moment(date).format(typeof format === \"string\" ? format : \"LLLL\");\n });\n\n});","define('dashboard/helpers/if-feature', ['exports', 'ember-feature-flags/helpers/if-feature'], function (exports, ifFeature) {\n\n\t'use strict';\n\n\texports['default'] = ifFeature['default'];\n\n});","define('dashboard/helpers/popover-handle', ['exports'], function (exports) {\n\n 'use strict';\n\n /*\n * Popover Handle binds the target dom element to a reference\n * object to let f-popover know which dom element should it attach\n * to when open by ref.\n *\n * USAGE: {{popover-handle popover=popover ref=obj placement='left'}}\n *\n * popover: the f-popover reference that shared in the context\n * ref: the object that used to open the f-popover, if not provided, the popover will be open by click\n * placement: the placement of the popover relative to the dom element.\n *\n */\n exports['default'] = PopoverHandle;\n function PopoverHandle(options) {\n var id = Ember.uuid(),\n attrTemplate = \"popover-handle-%@1=\\\"%@1\\\"\",\n ctx = this || window,\n attrs = options.hash,\n handlebarsGet = Em.Handlebars.get,\n getValue = function (key) {\n if (!attrs[key]) {\n return;\n }\n\n return handlebarsGet(ctx, attrs[key], options) || attrs[key];\n };\n\n // runs in the render period. this will run after the attribute rendered in the dom so that we can find the el.\n // the popover reference will be setup by then.\n Ember.run.schedule(\"render\", function () {\n //setup the event handler here.\n var el = $($(\"[%@1]\".fmt(attrTemplate.fmt(id))).get(0)),\n popover = getValue(\"popover\"),\n placement = getValue(\"placement\"),\n reference = getValue(\"ref\"),\n view = options.data.view,\n clickHandler = function () {\n popover.set(\"target\", el);\n popover.send(\"open\", placement);\n },\n registerRefOrHandler = function (ref, el, placement) {\n if (ref) {\n popover.addReference(ref, { el: el, placement: placement });\n } else {\n el.on(\"click\", clickHandler);\n }\n };\n\n // this do the job by adding the reference into the popover.\n // or if the reference is not provided, then will register the click event.\n registerRefOrHandler(reference, el, placement);\n\n //register ref observer in case of change.\n Object.keys(attrs).forEach(function (attr) {\n var path = attrs[attr],\n normalized;\n\n normalized = Em.Handlebars.normalizePath(ctx, path, options.data);\n\n var observer = function () {\n var reference = handlebarsGet(ctx, \"ref\", options),\n placement = handlebarsGet(ctx, \"placement\", options),\n el = $(\"[%@]\".fmt(attrTemplate.fmt(id)));\n\n if (!el || el.length === 0) {\n Ember.removeObserver(normalized.root, normalized.path, observer);\n return;\n }\n registerRefOrHandler(reference, el, placement);\n };\n\n if (path !== \"this\" && !(normalized.isKeyword && normalized.path === \"\")) {\n view.registerObserver(normalized.root, normalized.path, observer);\n }\n });\n });\n\n //returns a popover-handle-1=1 attribute to the element so that we can do the work later.\n return new Ember.Handlebars.SafeString(attrTemplate.fmt(id));\n }\n\n});","define('dashboard/helpers/to-price', ['exports', 'attic/utils'], function (exports, utils) {\n\n 'use strict';\n\n exports['default'] = Ember.Handlebars.makeBoundHelper(function (cents) {\n return utils.priceFormat(cents);\n });\n\n});","define('dashboard/initializers/acl', ['exports', 'attic/services/acl'], function (exports, Acl) {\n\n 'use strict';\n\n exports['default'] = {\n name: \"acl\",\n initialize: function (container) {\n container.register(\"service:acl\", Acl['default']);\n container.injection(\"service:acl\", \"auth\", \"service:auth\");\n container.injection(\"route\", \"acl\", \"service:acl\");\n container.injection(\"controller\", \"acl\", \"service:acl\");\n }\n };\n\n});","define('dashboard/initializers/api', ['exports', 'attic/services/api'], function (exports, Api) {\n\n 'use strict';\n\n var initializer = {\n name: \"api\",\n initialize: function (container, app) {\n container.register(\"service:api\", Api['default']);\n }\n };\n\n exports['default'] = initializer;\n\n});","define('dashboard/initializers/attic', ['exports', 'attic/services/service-registry', 'attic/utils/controller-props', 'attic/utils/route-go', 'attic/utils/route-all', 'attic/utils/route-resolve', 'attic/utils/object-extras', 'attic/utils/array-extras', 'attic/utils/abide-customisations', 'attic/utils/attribute-bindings', 'attic/utils/promise-object', 'attic/utils/unbork-arraycomputed-reducecomputed', 'attic/utils/feature-flags', 'attic/utils/matches-mixin'], function (exports, ServiceRegistry, controllerProps, routeGo, routeAll, routeResolve, objectExtras, arrayExtras, abide, attributeBindings, promise_object, unbork, featureFlags, MatchesMixin) {\n\n 'use strict';\n\n promise_object.addResolvedProperties();\n DS.Model.reopen(MatchesMixin['default']);\n\n var initializer = {\n name: \"app\",\n after: [\"auth\", \"store\", \"ember-devtools\"],\n initialize: function (container, app) {\n app.auth = container.lookup(\"service:auth\");\n if (window.FranqENV.environment === \"development\") {\n app.auth.set(\"requestCookie\", true);\n }\n var api = container.lookup(\"service:api\");\n app.auth.addObserver(\"token\", this, function () {\n return api.setToken(app.auth.get(\"token\"));\n });\n }\n };\n\n exports['default'] = initializer;\n\n});","define('dashboard/initializers/auth', ['exports', 'attic/services/auth'], function (exports, AuthService) {\n\n 'use strict';\n\n exports['default'] = {\n name: \"auth\",\n after: \"api\",\n initialize: function (container) {\n AuthService['default'].addInjections(container);\n }\n };\n\n});","define('dashboard/initializers/bread-crumbs-limit', ['exports', 'ember-breadcrumbs/components/bread-crumbs'], function (exports, BreadCrumbsComponent) {\n\n 'use strict';\n\n exports['default'] = {\n name: \"bread-crumbs-limit\",\n initialize: function () {}\n };\n\n BreadCrumbsComponent['default'].reopen({\n limit: 4,\n truncatedBreadCrumbs: (function () {\n var crumbs = this.get(\"breadCrumbs\");\n var limit = this.get(\"limit\");\n if (crumbs.length > limit) {\n var allCrumbs = crumbs;\n var prev = crumbs[crumbs.length - limit - 1];\n Ember.set(prev, \"label\", \"…\");\n crumbs = allCrumbs.slice(0 - limit - 1);\n }\n return crumbs;\n }).property(\"breadCrumbs.[]\", \"limit\")\n });\n\n});","define('dashboard/initializers/bread-crumbs', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = {\n name: \"ember-breadcrumbs\",\n initialize: function (container, app) {\n app.inject(\"component:bread-crumbs\", \"router\", \"router:main\");\n app.inject(\"component:bread-crumbs\", \"applicationController\", \"controller:application\");\n }\n };\n\n});","define('dashboard/initializers/ember-devtools', ['exports', 'dashboard/services/ember-devtools'], function (exports, Devtools) {\n\n 'use strict';\n\n /* global DS */\n exports['default'] = {\n name: \"ember-devtools\",\n after: DS !== undefined ? \"store\" : null,\n initialize: function (container, app) {\n app.devTools = Devtools['default'].create({\n container: container\n });\n container.register(\"service:devtools\", app.devTools);\n var config = app.emberDevTools || {};\n if (config.global === true) {\n app.devTools.globalize();\n } else if (config.global) {\n window[config.global] = app.devTools;\n }\n }\n };\n\n});","define('dashboard/initializers/ember-feature-flags', ['exports', 'ember-feature-flags/initializers/ember-feature-flags'], function (exports, init) {\n\n\t'use strict';\n\n\texports['default'] = init['default'];\n\n});","define('dashboard/initializers/ember-notify', ['exports', 'ember-notify'], function (exports, Notify) {\n\n 'use strict';\n\n exports['default'] = {\n name: \"ember-notify\",\n initialize: function (container, app) {\n container.optionsForType(\"notify\", { instantiate: false, singleton: true });\n app.register(\"notify:main\", Notify['default']);\n app.inject(\"route\", \"notify\", \"notify:main\");\n app.inject(\"controller\", \"notify\", \"notify:main\");\n }\n };\n\n});","define('dashboard/initializers/ember-spinner', ['exports', 'dashboard/config/environment'], function (exports, config) {\n\n 'use strict';\n\n var emberSpinnerPrefix = {\n modulePrefix: config['default'].modulePrefix\n };\n\n exports['default'] = {\n name: \"ember-spinner-prefix\",\n\n initialize: function (container, app) {\n app.register(\"ember-spinner:main\", emberSpinnerPrefix, { instantiate: false });\n app.inject(\"component:ember-spinner\", \"emberSpinnerPrefixConfig\", \"ember-spinner:main\");\n }\n };\n\n});","define('dashboard/initializers/export-application-global', ['exports', 'ember', 'dashboard/config/environment'], function (exports, Ember, config) {\n\n 'use strict';\n\n exports.initialize = initialize;\n\n function initialize(container, application) {\n var classifiedName = Ember['default'].String.classify(config['default'].modulePrefix);\n\n if (config['default'].exportApplicationGlobal) {\n window[classifiedName] = application;\n }\n };\n\n exports['default'] = {\n name: \"export-application-global\",\n\n initialize: initialize\n };\n\n});","define('dashboard/initializers/fast-click', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = {\n name: \"fastclick\",\n initialize: function (container) {\n window.FastClick.attach(document.body);\n }\n };\n\n});","define('dashboard/initializers/pricing', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = {\n name: \"pricing\",\n initialize: function (container, app) {\n app.inject(\"service:tax\", \"pricing\", \"service:pricing\");\n app.inject(\"model:lineitem\", \"pricingService\", \"service:pricing\");\n app.inject(\"model:lineitem\", \"taxService\", \"service:tax\");\n app.inject(\"model:surcharge\", \"pricingService\", \"service:pricing\");\n app.inject(\"model:price\", \"taxService\", \"service:tax\");\n }\n };\n\n});","define('dashboard/initializers/translations', ['exports'], function (exports) {\n\n 'use strict';\n\n /*\n * Trivial i18n implementation, but we should evaluate the options\n * when we come to adding i18n support. For example, I've already\n * raised this issue:\n * https://github.com/jamesarosen/ember-i18n/issues/168.\n *\n * It looks like this is the right solution:\n * https://github.com/fivetanley/i18nliner-handlebars\n */\n\n var i18n = Em.Object.create({\n translations: {\n \"productgroup\": \"product group\",\n \"productgroups\": \"product groups\",\n \"printergroup\": \"printer group\",\n \"printergroups\": \"printer groups\",\n \"usergroup\": \"user group\",\n \"usergroups\": \"user groups\"\n },\n t: function (key) {\n var translations = this.get(\"translations\");\n return translations[key] ? translations[key] : key;\n }\n });\n\n var initializer = {\n name: \"translations\",\n initialize: function () {\n Ember.I18n = i18n;\n }\n };\n\n exports['default'] = initializer;\n\n});","define('dashboard/models/address', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.ModelFragment.extend({\n addr_line_1: DS.attr(\"string\"),\n addr_line_2: DS.attr(\"string\"),\n raw_addr_line: DS.attr(\"string\"),\n city: DS.attr(\"string\"),\n state: DS.attr(\"string\"),\n postcode: DS.attr(\"string\"),\n country: DS.attr(\"string\"),\n latitude: DS.attr(\"string\"),\n longitude: DS.attr(\"string\"),\n formatted_address: DS.attr(\"string\"),\n pretty_address: DS.attr(\"string\")\n });\n\n});","define('dashboard/models/cashdrawer', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n interface: DS.attr(\"string\"),\n port: DS.attr(\"string\"),\n printer_id: DS.belongsTo(\"printer\", { async: true }),\n gateway: DS.belongsTo(\"gateway\", { async: true })\n });\n\n});","define('dashboard/models/condition', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.ModelFragment.extend({\n timeofday: DS.hasOneFragment(\"timeofday\"),\n dayofweek: DS.hasOneFragment(\"dayofweek\"),\n daterange: DS.hasOneFragment(\"daterange\")\n });\n\n});","define('dashboard/models/daterange', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.ModelFragment.extend({\n from: DS.attr(\"date\"),\n to: DS.attr(\"date\")\n });\n\n});","define('dashboard/models/dayofweek', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.ModelFragment.extend({\n monday: DS.attr(\"boolean\"),\n tuesday: DS.attr(\"boolean\"),\n wednesday: DS.attr(\"boolean\"),\n thursday: DS.attr(\"boolean\"),\n friday: DS.attr(\"boolean\"),\n saturday: DS.attr(\"boolean\"),\n sunday: DS.attr(\"boolean\")\n });\n\n});","define('dashboard/models/gateway', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n gateway_id: DS.attr(\"string\"),\n ip: DS.attr(\"string\"),\n venue: DS.belongsTo(\"venue\", { async: true }),\n printers: DS.hasMany(\"printer\", { async: true }),\n cashdrawers: DS.hasMany(\"cashdrawer\", { async: true }),\n scales: DS.hasMany(\"scale\", { async: true }),\n\n name: (function () {\n return \"Gateway \" + this.get(\"gateway_id\");\n }).property(\"gateway_id\")\n\n });\n\n});","define('dashboard/models/groupitem', ['exports', 'dashboard/models/mixins/has-embedded-children', 'dashboard/models/mixins/has-prices'], function (exports, HasEmbeddedChildren, HasPrices) {\n\n 'use strict';\n\n var GroupItem = DS.Model.extend(HasEmbeddedChildren['default'], HasPrices['default'], {\n\n parent: DS.belongsTo(\"productgroup\"),\n parent_variant: DS.belongsTo(\"variant\", { inverse: \"groupitems\" }),\n\n product: DS.belongsTo(\"product\", { async: true }),\n product_variant: DS.belongsTo(\"variant\", { inverse: \"productgroupitems\" }),\n\n prices: DS.hasMany(\"prices\", { inverse: \"groupitem\" }),\n\n embeddedRelations: [\"prices\"],\n\n productId: Ember.computed(function (key, val) {\n return this.get(\"data.product.id\") || this.get(\"_productId\");\n })\n\n });\n\n GroupItem.reopenClass({\n parent: \"parent\",\n uniqueKeys: [\"parent\", \"parent_variant\", \"product_variant\", \"product\"]\n });\n\n exports['default'] = GroupItem;\n\n});","define('dashboard/models/groupoptionitem', ['exports', 'dashboard/models/productoptionitem'], function (exports, ProductOptionItem) {\n\n 'use strict';\n\n var GroupOptionItem = ProductOptionItem['default'].extend({\n status: DS.attr(\"string\"),\n option: DS.belongsTo(\"option\", { inverse: \"goitems\" }),\n group: DS.belongsTo(\"productgroup\", { async: true }),\n prices: DS.hasMany(\"price\", { inverse: \"groupoptionitem\" })\n });\n\n GroupOptionItem.reopenClass({\n parent: \"option\",\n uniqueKeys: [\"product\"]\n });\n\n exports['default'] = GroupOptionItem;\n\n});","define('dashboard/models/instruction', ['exports', 'dashboard/models/mixins/has-timestamps', 'dashboard/models/mixins/has-embedded-children'], function (exports, HasTimestamps, HasEmbeddedChildren) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], HasEmbeddedChildren['default'], {\n name: DS.attr(\"string\"),\n instructionitems: DS.hasMany(\"instructionitem\", { inverse: \"instruction\" }),\n\n embeddedRelations: [\"instructionitems\"]\n });\n\n});","define('dashboard/models/instructionitem', ['exports', 'dashboard/models/mixins/has-embedded-children', 'dashboard/models/mixins/has-prices'], function (exports, HasEmbeddedChildren, HasPrices) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasEmbeddedChildren['default'], HasPrices['default'], {\n name: DS.attr(\"string\"),\n prices: DS.hasMany(\"price\", { inverse: \"instructionitem\" }),\n instruction: DS.belongsTo(\"instruction\", { inverse: \"instructionitems\" }),\n productinstructionitems: DS.hasMany(\"productinstructionitem\", { inverse: \"instructionitem\", async: true }),\n\n embeddedRelations: [\"prices\"]\n }).reopenClass({\n uniqueKeys: [\"name\"],\n parent: \"instruction\"\n });\n\n});","define('dashboard/models/license', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n current_vid: DS.attr(\"number\"),\n terminal: DS.belongsTo(\"terminal\", { async: true }),\n\n nameWithAssigned: (function () {\n var name = this.get(\"name\");\n var terminalName = this.get(\"terminal.name\");\n if (terminalName) name += \" (\" + terminalName + \")\";\n return name;\n }).property(\"name\", \"terminal.name\")\n });\n\n});","define('dashboard/models/lineitem', ['exports', 'dashboard/models/mixins/has-timestamps', 'dashboard/models/mixins/has-embedded-children', 'attic/computed'], function (exports, HasTimestamps, HasEmbeddedChildren, computed) {\n\n 'use strict';\n\n var LineitemState = Ember.Object.extend({\n pricingService: null, // provided by lineitem\n taxService: null, // provided by lineitem\n lineitem: null,\n\n subtotal: (function () {\n this.get(\"lineitem.pricing\"); // for some reason pricing doesn't update unless we call get here\n // TODO prevent lineitems from being modified after they're placed?\n // maybe this should always go through to pricing - it is computed.pricing?\n if (this.get(\"lineitem.placed\")) {\n return this.get(\"lineitem.subtotalPrice\");\n } else {\n return this.pricingService.for(this.get(\"lineitem\"));\n }\n }).property(\"lineitem.placed\", \"lineitem.pricing\"),\n lineitemsTotal: computed.sumBigNumberBy(\"lineitem.lineitems\", \"computedTotal\"),\n total: computed.addPathsBigNumber(\"subtotal\", \"lineitemsTotal\"),\n unadjustedTotal: (function () {\n // can't use adjustmentsTotal because it leads to recursion for percentage surcounts\n var adjustments = this.get(\"lineitem.surcounts\");\n return this.get(\"subtotal\").plus(this.get(\"lineitem.lineitems\").reject(function (li) {\n return adjustments.contains(li);\n }).reduce(function (sum, li) {\n return sum.plus(li.get(\"computedUnadjustedTotal\"));\n }, new BigNumber(0)));\n }).property(\"lineitem.surcounts.[]\", \"subtotal\", \"lineitem.lineitems.@each.computedUnadjustedTotal\"),\n adjustmentsTotal: computed.sumBigNumberBy(\"lineitem.surcounts\", \"computedTotal\"),\n quantity: (function () {\n var quantity = this.get(\"lineitem.quantity\");\n return !Ember.isNone(quantity) ? quantity : this.get(\"lineitem.parent.quantity\");\n }).property(\"lineitem.quantity\", \"lineitem.parent.quantity\"),\n\n tax: (function () {\n // maybe this should always go through to pricing - it is computed.tax?\n if (this.get(\"lineitem.placed\")) {\n return this.get(\"lineitem.taxPrice\");\n } else {\n return this.taxService.for(this.get(\"lineitem\"));\n }\n }).property(\"lineitem.placed\", \"lineitem.taxPrice\", \"lineitem.pricing\"),\n lineitemsTax: computed.sumBigNumberBy(\"lineitem.lineitems\", \"computedTax\"),\n totalTax: computed.addPathsBigNumber(\"tax\", \"lineitemsTax\"),\n formatted: (function () {\n return Formatted.create({\n lineitem: this,\n total_tax: Ember.computed.alias(\"lineitem.totalTax\")\n });\n }).property()\n });\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], HasEmbeddedChildren['default'], {\n order: DS.belongsTo(\"order\", { inverse: \"lineitems\" }),\n lineitems: DS.hasMany(\"lineitem\"),\n product: DS.belongsTo(\"product\", { async: true }),\n variant: DS.belongsTo(\"variant\", { async: true }),\n parent: DS.belongsTo(\"lineitem\", { inverse: \"lineitems\" }),\n surcount: DS.belongsTo(\"surcharge\", { async: true }),\n productoptionitem: DS.belongsTo(\"productoptionitem\", { async: true }),\n groupoptionitem: DS.belongsTo(\"groupoptionitem\", { async: true }),\n instructionitem: DS.belongsTo(\"instructionitem\", { async: true }),\n\n type: DS.attr(\"string\"),\n subtotal: DS.attr(\"price\"),\n quantity: DS.attr(\"number\"),\n tax: DS.attr(\"price\"),\n total: DS.attr(\"price\"),\n total_tax: DS.attr(\"price\"),\n\n voided: DS.attr(\"boolean\", { defaultValue: false }),\n placed: DS.attr(\"boolean\", { defaultValue: false }),\n meta: DS.attr({ defaultValue: function () {\n return {};\n } }),\n\n embeddedRelations: [\"lineitems\"],\n\n parentOrOrder: computed.thisOrThat(\"parent\", \"order\"),\n\n // the following properties are required because @each doesn't support deep properties\n computedTotal: Ember.computed.alias(\"computed.total\"),\n computedTax: Ember.computed.alias(\"computed.tax\"),\n // having an alias to computed.totalTax doesn't work, but this is fine too\n computedTotalTax: computed.addPathsBigNumber(\"computed.tax\", \"computed.lineitemsTax\"),\n computedUnadjustedTotal: Ember.computed.alias(\"computed.unadjustedTotal\"),\n\n formatted: (function () {\n return Formatted.create({ lineitem: this });\n }).property(),\n\n // This is a property that notifies when anything that affects pricing changes.\n pricing: (function () {}).property(\"product\", \"quantity\", \"variant\", \"surcount\", \"meta\", \"instructionitem\", \"productoptionitem\", \"groupoptionitem\", \"lineitems.@each.pricing\", \"parent.computed.quantity\"),\n\n init: function () {\n this._super();\n this.set(\"cid\", Math.random().toString(36).substring(7));\n // BE AWARE that logging pricing can cause failures on test teardown\n //* debug */ this.addObserver('pricing', () => this.logPricing());\n },\n\n label: (function () {\n switch (this.get(\"type\")) {\n case \"product\":\n return this.get(\"product.name\");\n case \"tax\":\n return \"Tax\";\n case \"surcharge\":\n return this.get(\"surcharge.name\");\n case \"instructionitem\":\n return this.get(\"instructionitem.name\");\n case \"productoptionitem\":\n return this.get(\"productoptionitem.product.name\");\n case \"groupoptionitem\":\n return this.get(\"groupoptionitem.product.name\");\n }\n }).property(\"type\", \"product.name\", \"surcharge.name\", \"instructionitem.name\", \"productoptionitem.product.name\", \"groupoptionitem.product.name\"),\n\n logPricing: function () {\n var props = this.getProperties(\"type\", \"parent\", \"quantity\", \"computed.subtotal\", \"computed.total\");\n props[\"computed.subtotal\"] = props[\"computed.subtotal\"].toString();\n props[\"computed.total\"] = props[\"computed.total\"].toString();\n console.log(props, this);\n },\n\n lineitemsByType: (function () {\n var _this = this;\n var result = {};\n this.constructor.types.map(function (type) {\n return result[type] = [];\n });\n this.get(\"lineitems\").map(function (lineitem) {\n return result[lineitem.get(\"type\")].pushObject(lineitem);\n });\n Object.keys(result).map(function (type) {\n return result[type].addArrayObserver({\n arrayWillChange: function (lineitems, start, removeCount, addCount) {\n return lineitems.slice(start, removeCount).map(function (li) {\n return _this.get(\"lineitems\").removeObject(li);\n });\n },\n arrayDidChange: function (lineitems, start, removeCount, addCount) {\n return lineitems.slice(start, addCount).map(function (li) {\n return _this.get(\"lineitems\").addObject(li);\n });\n }\n });\n });\n return result;\n }).property(\"lineitems.@each.type\"),\n\n surcounts: Ember.computed.oneWay(\"lineitemsByType.surcharge\"),\n surcharges: Ember.computed.filterBy(\"surcounts\", \"type\", \"surcharge\"),\n discounts: Ember.computed.filterBy(\"surcounts\", \"type\", \"discount\"),\n instructionitems: Ember.computed.oneWay(\"lineitemsByType.instructionitem\"),\n productoptionitems: Ember.computed.oneWay(\"lineitemsByType.productoptionitem\"),\n groupoptionitems: Ember.computed.oneWay(\"lineitemsByType.groupoptionitem\"),\n\n computed: (function () {\n return LineitemState.create({\n lineitem: this,\n pricingService: this.pricingService,\n taxService: this.taxService\n });\n }).property(),\n\n /**\n * This is a property that notifies when anything that affects modifiers changes.\n */\n modifiers: (function () {}).property(\"lineitems.[]\", \"lineitems.@each.product\", \"lineitems.@each.productoptionitem\", \"lineitems.@each.groupoptionitem\", \"lineitems.@each.instructionitem\", \"lineitems.@each.variant\"),\n\n hasSameOptions: function (lineitem) {\n return this.matches({\n product: lineitem.get(\"product.resolved\"),\n productoptionitem: lineitem.get(\"productoptionitem.resolved\"),\n groupoptionitem: lineitem.get(\"groupoptionitem.resolved\"),\n instructionitem: lineitem.get(\"instructionitem.resolved\"),\n variant: lineitem.get(\"variant.resolved\")\n });\n },\n\n findChild: function (model, type) {\n type = [\"surcharge\", \"discount\"].contains(type) ? \"surcount\" : type;\n return this.get(type.pluralize()).find(function (lineitem) {\n return lineitem.get(type + \".resolved\") === model;\n });\n },\n addChild: function (model, type, meta) {\n var existing = this.findChild(model, type);\n if (!existing) {\n var props = {\n type: type,\n parent: this\n };\n if (type === \"surcharge\") props.surcount = model;\n props[model.constructor.typeKey] = model;\n if (meta) props.meta = meta;\n return this.store.createRecord(\"lineitem\", props);\n }\n },\n removeChild: function (model, type) {\n var existing = this.findChild(model, type);\n if (existing) {\n existing.deleteRecord();\n return existing;\n }\n },\n\n addProductOptionitem: function (poitem) {\n return this.addChild(poitem, \"productoptionitem\");\n },\n removeProductOptionitem: function (poitem) {\n return this.removeChild(poitem, \"productoptionitem\");\n },\n addGroupOptionitem: function (goitem) {\n return this.addChild(goitem, \"groupoptionitem\");\n },\n removeGroupOptionitem: function (goitem) {\n return this.removeChild(goitem, \"groupoptionitem\");\n },\n addSurcount: function (surcharge, meta) {\n return this.addChild(surcharge, \"surcharge\", meta);\n },\n removeSurcount: function (surcharge) {\n return this.removeChild(surcharge, \"surcharge\");\n },\n addInstructionitem: function (instructionitem) {\n return this.addChild(instructionitem, \"instructionitem\");\n },\n removeInstructionitem: function (instructionitem) {\n return this.removeChild(instructionitem, \"instructionitem\");\n },\n manualSurcount: (function (key, val) {\n return this.get(\"surcounts\").rejectBy(\"surcount.id\").get(\"lastObject\");\n }).property(\"surcounts.@each.surcount\"),\n setManualSurcount: function (props) {\n var lineitem = this.get(\"manualSurcount\");\n var meta = {\n manualSurcount: props\n };\n if (lineitem) {\n lineitem.setMeta(meta);\n } else {\n lineitem = this.store.createRecord(\"lineitem\", {\n type: \"surcharge\",\n parent: this,\n meta: meta\n });\n }\n return lineitem;\n },\n setMeta: function (props) {\n var meta = Ember.merge({}, this.get(\"meta\"));\n this.set(\"meta\", Ember.merge(meta, props));\n }\n }).reopenClass({\n types: [\"product\", \"tax\", \"surcharge\", \"instructionitem\", \"productoptionitem\", \"groupoptionitem\"],\n uniqueKeys: [\"meta.cid\"],\n parent: [\"parent\", \"order\"]\n });\n\n var Formatted = Ember.Object.extend({\n lineitem: null,\n\n subtotal: computed.formatPrice(\"lineitem.subtotal\"),\n tax: computed.formatPrice(\"lineitem.tax\"),\n total: computed.formatPrice(\"lineitem.total\"),\n total_tax: computed.formatPrice(\"lineitem.total_tax\")\n });\n\n});","define('dashboard/models/menu', ['exports', 'dashboard/models/mixins/has-timestamps', 'dashboard/models/mixins/has-embedded-children'], function (exports, HasTimestamps, HasEmbeddedChildren) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], HasEmbeddedChildren['default'], {\n archived: DS.attr(\"boolean\"),\n archived_user: DS.belongsTo(\"user\", { async: true }),\n archived_at: DS.attr(\"date\"),\n name: DS.attr(\"string\"),\n color: DS.attr(\"string\", { defaultValue: \"#FFFFFF\" }),\n lists: DS.hasMany(\"menulist\", { inverse: \"menu\" }),\n default_list: DS.belongsTo(\"menulist\"),\n\n embeddedRelations: [\"lists\"]\n });\n\n});","define('dashboard/models/menulist', ['exports', 'dashboard/models/mixins/has-timestamps', 'dashboard/models/mixins/has-embedded-children'], function (exports, HasTimestamps, HasEmbeddedChildren) {\n\n 'use strict';\n\n var menulist = DS.Model.extend(HasTimestamps['default'], HasEmbeddedChildren['default'], {\n name: DS.attr(\"string\"),\n parent: DS.belongsTo(\"menulist\", { inverse: \"children\" }),\n children: DS.hasMany(\"menulist\", { inverse: \"parent\" }),\n type: DS.attr(\"string\", { defaultValue: \"normal\" }),\n items: DS.hasMany(\"menulistitem\", { inverse: \"list\" }),\n groups: DS.hasMany(\"productgroup\", { async: true }),\n group_sort_fields: DS.attr(\"array\", { defaultValue: function () {\n return [];\n } }),\n group_sort_descending: DS.attr(\"boolean\"),\n variants: DS.hasManyFragments(\"menulistvariant\", { defaultValue: function () {\n return [];\n } }),\n uses_variants: DS.attr(\"boolean\", { defaultValue: false }),\n color: DS.attr(\"string\", { defaultValue: \"#FFFFFF\" }),\n menu: DS.belongsTo(\"menu\", { inverse: \"lists\" }),\n\n all_products: (function (key, value) {\n if (arguments.length > 1) {\n this.set(\"type\", value ? \"allproducts\" : \"normal\");\n }\n return this.get(\"type\") === \"allproducts\";\n }).property(\"type\"),\n normal: (function (key, value) {\n if (arguments.length > 1) {\n this.set(\"type\", value ? \"normal\" : \"allproducts\");\n }\n return this.get(\"type\") === \"normal\";\n }).property(\"type\"),\n isGroups: (function (key, value) {\n if (arguments.length > 1) {\n this.set(\"type\", value ? \"group\" : \"normal\");\n }\n return this.get(\"type\") === \"group\";\n }).property(\"type\"),\n deleteRecord: function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n // BTW, this is taken directly from has-embedded-relations\n // should children be embedded here?\n this.get(\"children\").forEach(function (list) {\n return list.deleteRecord();\n });\n this._super.apply(this, args);\n },\n embeddedRelations: [\"items\"],\n parents: (function () {\n var parent = this.get(\"parent\");\n return parent ? [parent].concat(parent.get(\"parents\")) : [];\n }).property(\"parent.parents\")\n\n });\n\n menulist.reopenClass({\n uniqueKeys: [\"name\"],\n parent: \"menu\"\n });\n\n exports['default'] = menulist;\n\n});","define('dashboard/models/menulistitem', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n var MenuListItem = DS.Model.extend(HasTimestamps['default'], {\n product: DS.belongsTo(\"product\", { async: true }),\n list: DS.belongsTo(\"menulist\", { inverse: \"items\" }),\n row: DS.attr(\"number\"),\n column: DS.attr(\"number\"),\n gridPosition: (function () {\n return this.getProperties(\"row\", \"column\");\n }).property(\"row\", \"column\")\n });\n\n MenuListItem.reopenClass({\n parent: \"list\",\n uniqueKeys: [\"product\"]\n });\n\n exports['default'] = MenuListItem;\n\n});","define('dashboard/models/menulistvariant', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.ModelFragment.extend({\n label: DS.attr(\"string\"),\n row: DS.attr(\"number\"),\n column: DS.attr(\"number\"),\n gridPosition: (function () {\n return this.getProperties(\"row\", \"column\");\n }).property(\"row\", \"column\")\n });\n\n});","define('dashboard/models/mixins/has-embedded-children', ['exports'], function (exports) {\n\n 'use strict';\n\n /**\n * Packages up some common helper stuff for embedded relations on a DS.Model\n *\n * Does _not_ implement serialization for them; that is handled\n * separately by manually making serializers that mixin EmbeddedRecordsMixin.\n *\n * Assumes the existence of an `embeddedRelations` property on the Model\n * that defines the set of relationships that are embedded.\n */\n\n var EmbeddedMixin = Ember.Mixin.create({\n init: function () {\n var _this = this;\n this._super();\n var keys = [\"currentState.isDirty\", \"currentState.stateName\"];\n this.set(\"persistedEmbeddedRecords\", []);\n\n // Build the keys we want to listen to\n keys = keys.concat(this.mapEmbeddedRelationships(function (rel, kind) {\n return kind === \"hasMany\" ? rel + \".@each.isDirty\" : rel + \".isDirty\";\n }));\n\n var isDirty = function () {\n return _this.get(\"currentState.isDirty\") || _this.allEmbeddedRecords().anyBy(\"isDirty\");\n };\n\n keys.push(isDirty);\n\n Ember.defineProperty(this, \"isDirty\", Ember.computed.apply(this, keys));\n\n // Clean the childRecords once the parent record has been saved\n this.on(\"didUpdate\", function () {\n _this.allEmbeddedRecords().forEach(function (record) {\n record._attributes = {};\n record.transitionTo(\"loaded.saved\");\n _this.set(\"persistedEmbeddedRecords\", _this.allEmbeddedRecords());\n });\n });\n\n this.on(\"didLoad\", function () {\n _this.set(\"persistedEmbeddedRecords\", _this.allEmbeddedRecords());\n });\n },\n\n\n embeddedByType: (function () {\n var embedded = this.get(\"embeddedRelations\");\n var relationships = Ember.get(this.constructor, \"relationshipsByName\");\n\n var ret = embedded.reduce(function (acc, rel) {\n var kind = relationships.get(rel).kind;\n acc[kind].push(rel);\n return acc;\n }, { hasMany: [], belongsTo: [] });\n\n return ret;\n }).property(\"embeddedRelations\"),\n\n mapEmbeddedRelationships: function (callback) {\n var _this = this;\n var embedded = this.get(\"embeddedByType\");\n return embedded.hasMany.map(function (rel) {\n return callback.call(_this, rel, \"hasMany\");\n }).concat(embedded.belongsTo.map(function (rel) {\n return callback.call(_this, rel, \"belongsTo\");\n }));\n },\n\n eachEmbeddedRelationship: function (callback) {\n this.mapEmbeddedRelationships(callback);\n },\n\n // Returns a list instead of just walking all the embedded records with\n // a callback, because sometimes we want to modify relationships on those\n // records\n allEmbeddedRecords: function () {\n var _this = this;\n var arr = [];\n this.eachEmbeddedRelationship(function (rel, kind) {\n if (kind === \"hasMany\") {\n arr = arr.concat(_this.get(rel).toArray());\n } else {\n if (_this.get(rel)) {\n arr.push(_this.get(rel));\n }\n }\n });\n return arr;\n },\n\n deleteRecord: function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this.allEmbeddedRecords().forEach(function (record) {\n return record.deleteRecord();\n });\n return this._super.apply(this, args);\n },\n\n rollback: function () {\n var oldRecords = this.get(\"persistedEmbeddedRecords\");\n var allRecords = this.allEmbeddedRecords().concat(oldRecords).uniq();\n allRecords.forEach(function (record) {\n record.rollback();\n });\n this._super();\n }\n\n });\n\n exports['default'] = EmbeddedMixin;\n\n});","define('dashboard/models/mixins/has-prices', ['exports', 'attic/computed'], function (exports, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.Mixin.create({\n prices: DS.hasMany(\"price\"),\n price: computed.firstPrice(\"prices\")\n });\n\n});","define('dashboard/models/mixins/has-timestamps', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Mixin.create({\n created_at: DS.attr(\"date\"),\n updated_at: DS.attr(\"date\")\n });\n\n});","define('dashboard/models/mixins/price-mixin', ['exports', 'attic/computed'], function (exports, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.Mixin.create({\n taxService: null,\n amount: null,\n includes_tax: null,\n tax_exempt: null,\n\n value: computed.bigNumberValue(\"amount\", 2),\n incTaxValue: computed.bigNumberValue(\"incTax\", 2),\n exTaxValue: computed.bigNumberValue(\"exTax\", 2),\n taxValue: computed.bigNumberValue(\"tax\", 2),\n\n formatted: (function () {\n return Formatted.create({ price: this });\n }).property(),\n\n incTax: Ember.computed(\"amount\", \"includes_tax\", \"tax_exempt\", function (key, value) {\n if (arguments.length > 1) {\n this.set(\"includes_tax\", true);\n this.set(\"amount\", new BigNumber(value));\n return value;\n }\n if (this.get(\"includes_tax\") || this.get(\"tax_exempt\")) {\n return this.get(\"amount\");\n } else {\n var amount = this.get(\"amount\");\n return Ember.isNone(amount) ? null : this.taxService.toIncPrice(amount);\n }\n }),\n exTax: Ember.computed(\"amount\", \"includes_tax\", \"tax_exempt\", function (key, value) {\n if (arguments.length > 1) {\n this.set(\"includes_tax\", false);\n this.set(\"amount\", new BigNumber(value));\n return value;\n }\n var amount = this.get(\"amount\");\n if (this.get(\"includes_tax\") && !this.get(\"tax_exempt\")) {\n return Ember.isNone(amount) ? null : this.taxService.toExPrice(amount);\n } else {\n return amount;\n }\n }),\n tax: (function () {\n var amount = this.get(\"amount\");\n if (Ember.isNone(amount)) return null;\n if (this.get(\"tax_exempt\")) return new BigNumber(0);\n if (this.get(\"includes_tax\")) {\n return this.taxService.taxForIncPrice(amount);\n } else {\n return this.taxService.taxForExPrice(amount);\n }\n }).property(\"amount\", \"tax_exempt\", \"includes_tax\").readOnly(),\n priceProps: function () {\n return this.getProperties(\"amount\", \"includes_tax\", \"tax_exempt\");\n }\n });\n\n var Formatted = Ember.Object.extend({\n price: undefined,\n amount: computed.formatPrice(\"price.value\"),\n incTax: computed.formatPrice(\"price.incTaxValue\"),\n exTax: computed.formatPrice(\"price.exTaxValue\"),\n tax: computed.formatPrice(\"price.taxValue\")\n });\n\n});","define('dashboard/models/option', ['exports', 'dashboard/models/mixins/has-embedded-children', 'attic/computed'], function (exports, HasEmbeddedChildren, computed) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasEmbeddedChildren['default'], {\n\n minimum: DS.attr(\"number\", { defaultValue: null }),\n maximum: DS.attr(\"number\", { defaultValue: null }),\n parent: DS.belongsTo(\"product\", { inverse: \"options\" }),\n product: DS.belongsTo(\"product\", { inverse: \"inOptions\", async: true }),\n group: DS.belongsTo(\"productgroup\", { async: true }),\n poitems: DS.hasMany(\"productoptionitem\", { inverse: \"option\" }),\n goitems: DS.hasMany(\"groupoptionitem\", { inverse: \"option\" }),\n isMandatory: Ember.computed.gt(\"minimum\", 0),\n isOptional: Ember.computed.not(\"isMandatory\"),\n hasOneMaximum: Ember.computed.equal(\"maximum\", 1),\n hasProduct: Ember.computed.bool(\"product.resolved\"),\n hasGroup: Ember.computed.bool(\"group.resolved\"),\n\n items: Ember.computed.union(\"poitems\", \"goitems\"),\n\n embeddedRelations: [\"poitems\", \"goitems\"],\n name: computed.thisOrThat(\"product.name\", \"group.name\"),\n\n groupitems: Ember.computed.filterBy(\"goitems\", \"parent_variant\", null),\n\n poitemFor: function poitemFor(product, parentVariant) {\n Ember.assert(\"poitems only apply to options that are for a product\", this.get(\"hasProduct\"));\n var poitem = this.get(\"poitems\").find(function (poitem) {\n return poitem.matches({\n product: product,\n parent_variant: parentVariant\n });\n });\n if (!poitem) {\n poitem = this.store.createRecord(\"productoptionitem\", {\n option: this,\n product: product,\n parent_variant: parentVariant\n });\n }\n return poitem;\n },\n goitemFor: function goitemFor(group, parentVariant) {\n Ember.assert(\"goitems only apply to options that are for a group\", this.get(\"hasGroup\"));\n var goitem = this.get(\"poitems\").find(function (poitem) {\n return poitem.matches({\n group: group,\n parent_variant: parentVariant\n });\n });\n if (!goitem) {\n goitem = this.store.createRecord(\"groupoptionitem\", {\n option: this,\n group: group,\n parent_variant: parentVariant\n });\n }\n return goitem;\n }\n }).reopenClass({\n parent: \"parent\",\n uniqueKeys: [\"product\", \"group\"]\n });\n\n});","define('dashboard/models/order', ['exports', 'dashboard/models/mixins/has-timestamps', 'dashboard/models/mixins/has-embedded-children', 'dashboard/models/transaction', 'attic/utils', 'attic/computed'], function (exports, HasTimestamps, HasEmbeddedChildren, Transaction, utils, computed) {\n\n 'use strict';\n\n var RSVP = Ember.RSVP.Promise;\n\n var OrderState = Ember.Object.extend({\n order: null,\n total: computed.sumBigNumberBy(\"order.lineitems\", \"computedTotal\"),\n totalPaid: computed.sumBigNumberBy(\"order.transactions\", \"amount\"),\n totalUnpaid: (function () {\n return this.get(\"total\").minus(this.get(\"totalPaid\"));\n }).property(\"total\", \"totalPaid\"),\n totalTax: computed.sumBigNumberBy(\"order.lineitems\", \"computedTotalTax\"),\n totalExTax: (function () {\n return this.get(\"total\").minus(this.get(\"totalTax\"));\n }).property(\"total\", \"totalTax\"),\n paid: computed.gteBigNumber(\"totalPaid\", \"total\")\n });\n\n var LineItemsArray = Ember.ArrayProxy.extend({\n product: Ember.computed.alias(\"content.firstObject.product\"),\n totalQuantity: computed.sumBy(\"content\", \"quantity\"),\n total: computed.sumBigNumberBy(\"content\", \"computedTotal\"),\n hasMoreThanOne: Em.computed.gt(\"totalQuantity\", 1),\n hasSameOptions: (function () {\n var _this = this;\n return this.get(\"content\").reduce(function (accum, lineitem) {\n return accum && _this.get(\"content\").reduce(function (accum, toCompare) {\n return lineitem.hasSameOptions(toCompare);\n }, true);\n }, true);\n }).property(\"content.@each.modifiers\")\n });\n\n var Order = DS.Model.extend(HasTimestamps['default'], HasEmbeddedChildren['default'], {\n total: DS.attr(\"price\"),\n total_tax: DS.attr(\"price\"),\n total_paid: DS.attr(\"price\"),\n lineitems: DS.hasMany(\"lineitem\"),\n cashier: DS.belongsTo(\"user\"),\n updated_at: DS.attr(\"date\"),\n terminal_keyspace: DS.attr(\"string\"),\n order_number: DS.attr(\"string\"),\n transactions: DS.hasMany(\"transaction\", { inverse: \"order\" }),\n cid: DS.attr(\"string\", {\n defaultValue: function () {\n return Math.random().toString(36).substring(7);\n }\n }),\n\n embeddedRelations: [\"lineitems\", \"transactions\"],\n\n computed: (function () {\n return OrderState.create({ order: this });\n }).property(),\n formatted: (function () {\n return Formatted.create({ order: this });\n }).property(),\n totalOrComputed: computed.thisOrThat(\"total\", \"computed.total\"),\n\n lineitemsByProductMap: (function () {\n return this.get(\"lineitems\").reduce(function (result, item) {\n var product = item.get(\"product.content\");\n var existed = result.get(product);\n existed ? existed.addObject(item) : result.set(product, LineItemsArray.create({ content: [item] }));\n return result;\n }, Ember.Map.create());\n }).property(\"lineitems.@each.product\"),\n\n lineitemsByProductArray: (function () {\n var map = this.get(\"lineitemsByProductMap\");\n return map.keys.toArray().reduce(function (accum, key) {\n accum.push(map.get(key));\n return accum;\n }, []);\n }).property(\"lineitemsByProductMap\"),\n\n quantityForProduct: function (product) {\n var lineitemsByProduct = this.get(\"lineitemsByProductMap\").get(product);\n return lineitemsByProduct ? lineitemsByProduct.get(\"totalQuantity\") : 0;\n },\n\n isEmpty: Ember.computed.empty(\"lineitems\"),\n\n transactionsByType: (function () {\n var result = {};\n Transaction['default'].types.map(function (type) {\n return result[type] = [];\n });\n this.get(\"transactions\").map(function (transaction) {\n return result[transaction.get(\"type\")].pushObject(transaction);\n });\n return result;\n }).property(\"transactions.@each.type\"),\n\n numTransactions: Ember.computed.oneWay(\"transactions.length\"),\n numPayments: Ember.computed.oneWay(\"transactionsByType.payment.length\"),\n numRefunds: Ember.computed.oneWay(\"transactionsByType.refund.length\"),\n numUndoTransactions: Ember.computed.oneWay(\"transactionsByType.undo.length\"),\n totalRefunds: computed.sumBigNumberBy(\"transactionsByType.refund\", \"amount\"),\n transactionsByDate: (function () {\n return this.get(\"transactions\").sortBy(\"created_at\").reverse();\n }).property(\"transactions.@each.created_at\"),\n name: (function () {\n if (!this.get(\"terminal_keyspace\") || !this.get(\"order_number\")) return \"Current\";\n return this.get(\"terminal_keyspace\") + \" \" + this.get(\"order_number\");\n }).property(\"terminal_keyspace\", \"order_number\"),\n status: (function () {\n if (this.get(\"computed.paid\")) {\n return \"paid\";\n } else if (this.get(\"numRefunds\")) {\n return this.get(\"computed.totalPaid\") ? \"partially refunded\" : \"refunded\";\n } else {\n return \"unpaid\";\n }\n }).property(\"computed.paid\", \"numRefunds\", \"computed.totalPaid\"),\n paid: Ember.computed.equal(\"status\", \"paid\"),\n lastTransaction: Ember.computed.alias(\"transactionsByDate.firstObject\").readOnly(),\n\n /**\n * Returns a function that creates child lineitems of <tt>type</tt> for a given\n * productoptionitem or groupoptionitem\n * @param parent {Lineitem}\n * @param type {String}\n * @returns {Function}\n */\n childLineitemFactory: function (parent, type) {\n var _this = this;\n return function (modifier) {\n var quantity = parent.get(\"quantity\");\n var variant = parent.get(\"variant\");\n var childHash = {\n parent: parent,\n type: type,\n product: modifier.get(\"product\"),\n variant: modifier.get(\"variant\"),\n quantity: quantity\n };\n childHash[type] = modifier;\n return _this.store.createRecord(\"lineitem\", childHash);\n };\n },\n removeLineItem: function (lineitem) {\n this.get(\"lineitems\").removeObject(lineitem);\n },\n removeLineItems: function (lineitems) {\n this.get(\"lineitems\").removeObjects(lineitems);\n },\n\n pay: function (paymentMethod, amount, cashier) {\n var _this = this;\n return this.ensureSaved(cashier).then(function () {\n return _this.saveTransaction(paymentMethod, amount, cashier);\n });\n },\n\n refund: function (paymentMethod, amount, cashier, refers /* optional */) {\n var _this = this;\n return this.ensureSaved(cashier).then(function () {\n return _this.saveTransaction(paymentMethod, amount, cashier, {\n type: \"refund\",\n refers: refers,\n amount: 0 - amount\n });\n });\n },\n\n ensureSaved: function (cashier) {\n // TODO orders should have an array of OrderCashiers that contains a date\n this.set(\"cashier\", cashier);\n return this.get(\"isNew\") ? this.save() : RSVP.resolve(this);\n },\n\n voidOrder: function () {\n if (this.get(\"isNew\")) {\n this.get(\"lineitems\").toArray().map(function (lineitem) {\n return lineitem.deleteRecord();\n });\n return Ember.RSVP.Promise.resolve();\n } else {\n this.get(\"lineitems\").forEach(function (lineitem) {\n return lineitem.set(\"voided\", true);\n });\n return this.save().catch(function (err) {\n utils.handleError(err, \"Void order failed\");\n throw err;\n });\n }\n },\n\n saveTransaction: function (paymentMethod, amount, cashier, attrs) {\n var transaction = this.store.createRecord(\"transaction\", Ember.merge({\n type: \"payment\",\n payment_method: paymentMethod,\n amount: amount.toNumber(),\n cashier: cashier,\n order: this\n }, attrs));\n return transaction.save().catch(function (err) {\n // TODO confirm that this results in order.computed.totalPaid being reset\n transaction.deleteRecord();\n throw err;\n });\n },\n\n createProductLineitem: function (product, variant, quantity) {\n var lineitem = this.store.createRecord(\"lineitem\", {\n type: \"product\",\n product: product,\n variant: variant || product.get(\"defaultVariant\"),\n quantity: quantity\n });\n product.get(\"defaultProductOptionsItems\").map(this.childLineitemFactory(lineitem, \"productoptionitem\"));\n product.get(\"defaultGroupOptionsItems\").map(this.childLineitemFactory(lineitem, \"groupoptionitem\"));\n product.get(\"defaultInstructionItems\").map(this.childLineitemFactory(lineitem, \"instructionitem\"));\n this.get(\"lineitems\").addObject(lineitem);\n return lineitem;\n },\n quantityForProductChanged: \"\"\n });\n\n Order.featureFlags({\n \"cart-control-0\": {\n add: function (product, variant, quantity) {\n if (Ember.isNone(quantity)) quantity = 1;\n return this.createProductLineitem(product, variant, quantity);\n },\n shouldUpdateProductQuantity: (function () {\n this.notifyPropertyChange(\"quantityForProductChanged\");\n }).observes(\"lineitems.[]\", \"lineitems.@each.quantity\")\n },\n\n \"cart-control-1\": {\n shouldUpdateProductQuantity: (function () {\n this.notifyPropertyChange(\"quantityForProductChanged\");\n }).observes(\"lineitemsByProductArray.@each.totalQuantity\"),\n\n add: function (product, variant, quantity) {\n if (Ember.isNone(variant)) variant = product.get(\"defaultVariant\");\n if (Ember.isNone(quantity)) quantity = 1;\n var existingLineItem = this.get(\"lineitems\").find(function (item) {\n return item.matches({ product: product, variant: variant });\n });\n if (existingLineItem) {\n existingLineItem.set(\"quantity\", existingLineItem.get(\"quantity\") + quantity);\n return existingLineItem;\n } else {\n return this.createProductLineitem(product, variant, quantity);\n }\n }\n }\n });\n\n var Formatted = Ember.Object.extend({\n order: null,\n total: computed.formatPrice(\"order.total\"),\n total_tax: computed.formatPrice(\"order.total_tax\"),\n total_paid: computed.formatPrice(\"order.total_paid\")\n });\n\n exports['default'] = Order;\n\n});","define('dashboard/models/organisation', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n owner: DS.belongsTo(\"user\", { async: true }),\n default_menu: DS.belongsTo(\"menu\", { async: true })\n });\n\n});","define('dashboard/models/price', ['exports', 'dashboard/models/mixins/price-mixin'], function (exports, PriceMixin) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(PriceMixin['default'], {\n currency: DS.attr(\"string\"),\n type: DS.attr(\"string\"),\n amount: DS.attr(\"price\"),\n includes_tax: DS.attr(\"boolean\"),\n tax_exempt: DS.attr(\"boolean\"),\n variant: DS.belongsTo(\"variant\", { inverse: \"prices\" }),\n instructionitem: DS.belongsTo(\"instructionitem\", { inverse: \"prices\" }),\n productinstructionitem: DS.belongsTo(\"productinstructionitem\", { inverse: \"prices\" }),\n productoptionitem: DS.belongsTo(\"productoptionitem\", { inverse: \"prices\" }),\n groupoptionitem: DS.belongsTo(\"groupoptionitem\", { inverse: \"prices\" }),\n groupitem: DS.belongsTo(\"groupitem\", { inverse: \"prices\" })\n }).reopenClass({\n uniqueKeys: [\"currency\"],\n parent: [\"variant\", \"instructionitem\", \"productinstructionitem\", \"productoptionitem\", \"groupoptionitem\", \"groupitem\"]\n });\n\n});","define('dashboard/models/printer', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n ip: DS.attr(\"string\"),\n interface: DS.attr(\"string\"),\n port: DS.attr(\"string\"),\n location: DS.attr(\"string\"),\n make: DS.attr(\"string\"),\n model: DS.attr(\"string\"),\n serial: DS.attr(\"string\"),\n type: DS.attr(\"string\"),\n gateway: DS.belongsTo(\"gateway\", { async: true }),\n printergroups: DS.hasMany(\"printergroup\", { async: true })\n });\n\n});","define('dashboard/models/printergroup', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n printers: DS.hasMany(\"printer\", { async: true }),\n logo: DS.belongsTo(\"printerimage\", { async: true })\n });\n\n});","define('dashboard/models/printerimage', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n keycode: DS.attr(\"string\"),\n preview: DS.attr(),\n previewImageURL: (function () {\n var file = this.get(\"preview\");\n var services = this.container.lookup(\"service:registry\");\n return file && services.fileuploader.getURLForFile(file);\n }).property(\"preview\"),\n processed: DS.attr(),\n printergroups: DS.hasMany(\"printergroup\", { async: true })\n });\n\n});","define('dashboard/models/product', ['exports', 'dashboard/models/mixins/has-timestamps', 'dashboard/models/mixins/has-embedded-children'], function (exports, HasTimestamps, HasEmbeddedChildren) {\n\n 'use strict';\n\n var defaultVariant = function (parent, variants) {\n variants = variants || \"variants\";\n return Ember.computed(variants + \".@each.default\", function (key, value) {\n if (arguments.length > 1) {\n Ember.assert(\"defaultVariant should be a variant\", value.constructor.typeKey === \"variant\");\n Ember.assert(\"defaultVariant should belong to the model\", value.get(parent) === this);\n this.get(variants).forEach(function (v) {\n return v.set(\"default\", false);\n });\n value.set(\"default\", true);\n }\n return this.get(variants).findBy(\"default\", true);\n });\n };\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], HasEmbeddedChildren['default'], {\n\n name: DS.attr(\"string\", { defaultValue: \"\" }),\n description: DS.attr(\"string\"),\n sku: DS.attr(\"string\"),\n barcode: DS.attr(\"string\"),\n variant_type: DS.attr(\"string\"),\n tax_exempt: DS.attr(\"string\"),\n purchasable: DS.attr(\"boolean\", { defaultValue: true }),\n image: DS.attr(),\n\n productgroups: DS.hasMany(\"productgroup\", { async: true }),\n surcharges: DS.hasMany(\"surcharge\", { async: true }),\n options: DS.hasMany(\"option\", { inverse: \"parent\" }),\n // ember is _really dumb_ about inverses. This is actually necessary.\n inOptions: DS.hasMany(\"option\", { inverse: \"product\" }),\n variants: DS.hasMany(\"variant\", { inverse: \"product\" }),\n instructions: DS.hasMany(\"instruction\", { async: true }),\n productinstructionitems: DS.hasMany(\"productinstructionitem\"),\n\n defaultVariant: defaultVariant(\"product\"),\n mandatoryOptions: Ember.computed.filterBy(\"options\", \"isMandatory\"),\n optionalOptions: Ember.computed.filterBy(\"options\", \"isOptional\"),\n\n getProductInstructionItem: function (instructionItem) {\n return this.get(\"productinstructionitems\").findBy(\"instructionitem.resolved\", instructionItem);\n },\n\n imageURL: (function () {\n return this.services.fileuploader.getURLForFile(this.get(\"image\"));\n }).property(\"image\"),\n\n defaultOptionsItems: Ember.computed.union(\"defaultProductOptionsItems\", \"defaultGroupOptionsItems\"),\n\n defaultProductOptionsItems: (function () {\n return this.get(\"options\").reduce(function (accum, option) {\n return accum.addObjects(option.get(\"poitems\").filterBy(\"status\", \"default\"));\n }, []);\n }).property(\"options.@each.poitems.[]\"),\n\n defaultGroupOptionsItems: (function () {\n return this.get(\"options\").reduce(function (accum, option) {\n return accum.addObjects(option.get(\"goitems\").filterBy(\"status\", \"default\"));\n }, []);\n }).property(\"options.@each.goitems.[]\"),\n\n defaultInstructionItems: (function () {\n return this.get(\"productinstructionitems\").filterBy(\"status\", \"default\").mapBy(\"instructionitem\");\n }).property(\"productinstructionitems.[]\"),\n\n embeddedRelations: [\"options\", \"variants\", \"productinstructionitems\"]\n });\n\n exports.defaultVariant = defaultVariant;\n\n});","define('dashboard/models/productgroup', ['exports', 'dashboard/models/mixins/has-timestamps', 'dashboard/models/mixins/has-embedded-children', 'dashboard/models/product'], function (exports, HasTimestamps, HasEmbeddedChildren, product) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], HasEmbeddedChildren['default'], {\n name: DS.attr(\"string\"),\n products: DS.hasMany(\"product\", { async: true }),\n surcharges: DS.hasMany(\"surcharge\", { async: true }),\n variants: DS.hasMany(\"variant\", { inverse: \"group\" }),\n\n defaultVariant: product.defaultVariant(\"group\"),\n embeddedRelations: [\"variants\"],\n\n updateVariantsDefault: (function () {\n var variants = this.get(\"variants\");\n if (!variants || variants.get(\"length\") <= 0) {\n return;\n }\n var anyDefaultVariant = variants.any(function (variant) {\n return variant.get(\"default\");\n });\n\n if (!anyDefaultVariant) {\n this.get(\"variants.firstObject\").set(\"default\", true);\n }\n }).observes(\"variants.[]\", \"variants.@each.default\")\n });\n\n});","define('dashboard/models/productinstructionitem', ['exports', 'dashboard/models/mixins/has-embedded-children', 'attic/computed', 'dashboard/models/mixins/has-prices'], function (exports, HasEmbeddedChildren, computed, HasPrices) {\n\n 'use strict';\n\n var ProductInstructionItem = DS.Model.extend(HasEmbeddedChildren['default'], HasPrices['default'], {\n status: DS.attr(\"string\"),\n product: DS.belongsTo(\"product\"),\n instructionitem: DS.belongsTo(\"instructionitem\", { async: true, inverse: \"productinstructionitems\" }),\n prices: DS.hasMany(\"price\", { inverse: \"productinstructionitem\" }),\n\n disabled: computed.statusProperty(\"disabled\", \"enabled\"),\n default: computed.statusProperty(\"default\", \"enabled\"),\n\n embeddedRelations: [\"prices\"]\n });\n\n ProductInstructionItem.reopenClass({\n parent: \"product\",\n uniqueKeys: [\"instructionitem\"]\n });\n\n exports['default'] = ProductInstructionItem;\n\n});","define('dashboard/models/productoptionitem', ['exports', 'dashboard/models/mixins/has-embedded-children', 'dashboard/models/mixins/has-prices', 'attic/computed'], function (exports, HasEmbeddedChildren, HasPrices, computed) {\n\n 'use strict';\n\n var ProductOptionItem = DS.Model.extend(HasEmbeddedChildren['default'], HasPrices['default'], {\n has_quantity: DS.attr(\"boolean\"),\n parent_variant: DS.belongsTo(\"variant\"),\n\n option: DS.belongsTo(\"option\", { inverse: \"poitems\" }),\n product: DS.belongsTo(\"product\", { async: true }),\n variant: DS.belongsTo(\"variant\", { async: true }),\n prices: DS.hasMany(\"price\", { inverse: \"productoptionitem\" }),\n\n embeddedRelations: [\"prices\"],\n\n isDefault: computed.statusProperty(\"default\", \"enabled\"),\n isDisabled: computed.statusProperty(\"disabled\", \"enabled\"),\n variantOrDefault: computed.thisOrThat(\"variant\", \"product.defaultVariant\"),\n\n test: (function () {\n debugger;\n }).observes(\"variant\")\n });\n\n ProductOptionItem.reopenClass({\n parent: \"option\",\n uniqueKeys: [\"product\"]\n });\n\n exports['default'] = ProductOptionItem;\n\n});","define('dashboard/models/role', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend({\n nameBinding: \"id\"\n });\n\n});","define('dashboard/models/scale', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n interface: DS.attr(\"string\"),\n ip: DS.attr(\"string\"),\n port: DS.attr(\"string\"),\n location: DS.attr(\"string\"),\n make: DS.attr(\"string\"),\n type: DS.attr(\"string\"),\n gateway: DS.belongsTo(\"gateway\", { async: true })\n });\n\n});","define('dashboard/models/surcharge', ['exports', 'dashboard/models/mixins/has-timestamps', 'attic/computed'], function (exports, HasTimestamps, computed) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n percentage: DS.attr(\"decimal\"),\n absolute: DS.attr(\"price\"),\n conditions: DS.hasOneFragment(\"condition\"),\n\n // TODO: these should be removed and the relationships should go the other direction\n productgroups: DS.hasMany(\"productgroup\", { async: true }),\n products: DS.hasMany(\"product\", { async: true }),\n\n isPercentage: Ember.computed.bool(\"percentage\"),\n isAbsolute: Ember.computed.bool(\"absolute\"),\n amount: computed.thisOrThat(\"percentage\", \"absolute\"),\n value: computed.bigNumberValue(\"amount\"),\n absoluteValue: computed.bigNumberValue(\"absolute\"),\n percentageValue: computed.bigNumberValue(\"percentage\"),\n positivePercentage: (function () {\n return this.get(\"percentage\").abs();\n }).property(\"isPercentage\", \"percentage\"),\n positiveAbsolute: (function () {\n return this.get(\"absolute\").abs();\n }).property(\"isAbsolute\", \"absolute\"),\n absoluteFormatted: computed.formatPrice(\"positiveAbsolute\"),\n\n type: (function () {\n var amount = this.get(\"amount\");\n return Ember.isNone(amount) ? null : amount.gte(0) ? \"surcharge\" : \"discount\";\n }).property(\"amount\"),\n surcountType: (function () {\n return this.get(\"isPercentage\") ? \"percentage\" : \"absolute\";\n }).property(\"isPercentage\"),\n signValue: (function () {\n var amount = this.get(\"amount\");\n return Ember.isNone(amount) ? null : amount.gte(0) ? \"+\" : \"-\";\n }).property(\"amount\"),\n readableValue: (function () {\n if (Ember.isNone(this.get(\"amount\"))) return;\n return this.get(\"isPercentage\") ? this.get(\"positivePercentage\").times(100).toNumber() : this.get(\"positiveAbsolute\").toNumber();\n }).property(\"isPercentage\", \"signValue\", \"percentage\", \"absolute\"),\n displayValue: (function () {\n if (Ember.isNone(this.get(\"amount\"))) return;\n return this.get(\"isPercentage\") ? this.get(\"positivePercentage\").times(100) + \"%\" : this.get(\"absoluteFormatted\");\n }).property(\"isPercentage\", \"signValue\", \"percentage\", \"absoluteFormatted\"),\n setValue: function (value, percentageOrAbsolute) {\n if (percentageOrAbsolute === \"percentage\") {\n this.setProperties({\n absolute: null,\n percentageValue: value\n });\n } else if (percentageOrAbsolute === \"absolute\") {\n this.setProperties({\n percentage: null,\n absoluteValue: value\n });\n } else {\n throw new Error(\"unsupported value: percentage or absolute only\");\n }\n },\n pricingFor: function (lineitem) {\n return this.pricingService.priceObjectForSurcount(lineitem, this.get(\"surcountType\"), this.get(\"amount\") || new BigNumber(0)).get(\"amount\");\n }\n });\n\n});","define('dashboard/models/terminal', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n keyspace: DS.attr(\"string\"),\n\n license: DS.belongsTo(\"license\", { async: true }),\n venue: DS.belongsTo(\"venue\", { async: true })\n });\n\n});","define('dashboard/models/timeofday', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.ModelFragment.extend({\n from: DS.attr(\"string\"),\n to: DS.attr(\"string\")\n });\n\n});","define('dashboard/models/transaction', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n order: DS.belongsTo(\"order\", { inverse: \"transactions\" }),\n refers: DS.belongsTo(\"transaction\", { inverse: \"referenced_by\" }),\n referenced_by: DS.hasMany(\"transaction\", { inverse: \"refers\" }),\n cashier: DS.belongsTo(\"user\", { async: true }),\n payment_method: DS.attr(\"string\", { defaultValue: \"cash\" }), //'cash', 'eft'\n type: DS.attr(\"string\", { defaultValue: \"payment\" }), //'payment', 'refund', 'undo', 'pre-auth', 'completion'\n amount: DS.attr(\"price\"),\n status: DS.attr(\"string\"), // 'pending', 'in-progress', 'successful', 'failed'\n currency: DS.attr(\"string\", { defaultValue: \"AUD\" }),\n currency_rate: DS.attr(\"number\", { defaultValue: 1 }),\n\n displayType: (function () {\n switch (this.get(\"type\")) {\n case \"payment\":\n return \"paid\";\n case \"refund\":\n return \"refunded\";\n case \"undo\":\n return \"reversed\";\n default:\n return \"unpaid\";\n }\n }).property(\"type\"),\n\n undo: function (cashier) {\n return this.store.createRecord(\"transaction\", {\n type: \"undo\",\n cashier: cashier,\n order: this.get(\"order\"),\n amount: 0 - this.get(\"amount\"),\n refers: this\n }).save();\n }\n\n }).reopenClass({\n types: [\"payment\", \"refund\", \"undo\", \"pre-auth\", \"completion\"]\n });\n\n});","define('dashboard/models/user', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n email: DS.attr(\"string\"),\n phone: DS.attr(\"string\"),\n password: DS.attr(\"string\"),\n usercode: DS.attr(\"string\"),\n pincode: DS.attr(\"string\"),\n pincode_hash: DS.attr(\"string\"),\n signature_salt: DS.attr(\"string\"),\n venues: DS.hasMany(\"venue\", { async: true }),\n usergroups: DS.hasMany(\"usergroup\", { async: true }),\n image: DS.attr(),\n imageURL: (function (key, value, oldValue) {\n return this.services.fileuploader.getURLForFile(this.get(\"image\"));\n }).property(\"image\"),\n\n bareCashier: (function () {\n return this.get(\"usercode\") && !this.get(\"name\");\n }).property(\"name\", \"usercode\"),\n\n displayName: (function () {\n var name = this.get(\"name\");\n var usercode = this.get(\"usercode\");\n if (name && usercode) {\n return name + \" (\" + usercode + \")\";\n }\n if (name) {\n return name;\n }\n if (usercode) {\n return \"(\" + usercode + \")\";\n }\n return \"[[NO NAME FOUND]]\";\n }).property(\"name\", \"usercode\"),\n\n firstName: (function () {\n var name = this.get(\"name\");\n if (name) return name.split(/\\s/)[0];\n }).property(\"name\"),\n\n lastName: (function () {\n var name = this.get(\"name\");\n if (name) return name.split(/\\s/)[1];\n }).property(\"name\")\n });\n\n});","define('dashboard/models/usergroup', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n roles: DS.hasMany(\"role\", { async: true }),\n users: DS.hasMany(\"user\", { async: true })\n });\n\n});","define('dashboard/models/variant', ['exports', 'dashboard/models/mixins/has-embedded-children', 'dashboard/models/mixins/has-prices'], function (exports, HasEmbeddedChildren, HasPrices) {\n\n 'use strict';\n\n var Variant = DS.Model.extend(HasEmbeddedChildren['default'], HasPrices['default'], {\n name: DS.attr(\"string\"),\n default: DS.attr(\"boolean\"),\n\n // a variant may be for a product or a group, indicated by the `product`\n // and `productgroup` relations\n product: DS.belongsTo(\"product\", { inverse: \"variants\" }),\n group: DS.belongsTo(\"productgroup\", { inverse: \"variants\" }),\n\n // when a variant is a group variant, then we have a number of `groupitems`\n // that are contain information about the products in the group (eg. which\n // variant of the product to be used, price etc)\n productgroupitems: DS.hasMany(\"groupitem\", { inverse: \"product_variant\" }),\n groupitems: DS.hasMany(\"groupitem\", { inverse: \"parent_variant\" }),\n\n prices: DS.hasMany(\"price\", { inverse: \"variant\" }),\n\n embeddedRelations: [\"groupitems\", \"prices\"]\n });\n\n Variant.reopenClass({\n parent: [\"product\", \"group\"],\n uniqueKeys: [\"name\"]\n });\n\n exports['default'] = Variant;\n\n});","define('dashboard/models/venue', ['exports', 'dashboard/models/mixins/has-timestamps'], function (exports, HasTimestamps) {\n\n 'use strict';\n\n exports['default'] = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n phone: DS.attr(\"string\"),\n email: DS.attr(\"string\"),\n open: DS.attr(\"boolean\", { defaultValue: false }),\n image: DS.attr(),\n address: DS.hasOneFragment(\"address\"),\n type: DS.attr(\"string\"),\n coordinate: DS.attr(),\n\n imageURL: (function () {\n var image = this.get(\"image\");\n if (Em.isEmpty(image)) {\n return \"/images/venue-default.png\";\n }\n return this.services.fileuploader.getURLForFile(image);\n }).property(\"image\"),\n inputAddress: (function () {\n var input = [this.get(\"address.addr_line_1\"), this.get(\"address.addr_line_2\"), this.get(\"address.city\"), this.get(\"address.country\"), this.get(\"address.postcode\")];\n return input.join(\" \");\n }).property(\"address.addr_line_1\", \"address.addr_line_2\", \"address.city\", \"address.country\", \"address.postcode\")\n });\n\n});","define('dashboard/models/zone', ['exports', 'dashboard/models/mixins/has-timestamps', 'attic/utils'], function (exports, HasTimestamps, utils) {\n\n 'use strict';\n\n var Zone = DS.Model.extend(HasTimestamps['default'], {\n name: DS.attr(\"string\"),\n /**\n * Path at the moment is delimited by Zone.pathSeparator which is '.', this thing comes from server.\n */\n path: DS.attr(\"string\"),\n venue: DS.belongsTo(\"venue\", { async: true }),\n parent: DS.belongsTo(\"zone\", { async: true, inverse: \"children\" }),\n // direct children of this zone\n children: DS.hasMany(\"zone\", { async: true, inverse: \"parent\" }),\n /**\n * Updates the on namePath when path is updated.\n */\n onPathChanged: (function () {\n var _this = this;\n var path = this.get(\"path\");\n\n if (!path) {\n return;\n }\n\n return Ember.RSVP.all(path.split(\".\").map(function (id) {\n return _this.store.findById(\"zone\", id);\n })).then(function (results) {\n _this.set(\"namePath\", results.map(function (zone) {\n return zone.get(\"name\");\n }).join(\".\"));\n });\n }).observes(\"path\").on(\"init\"),\n /**\n * regexp to match all children under current zone.\n */\n allChildrenRegExp: (function () {\n return new RegExp(\"^\" + utils.regExpEscape(this.get(\"path\") + Zone.pathSeparator));\n }).property(\"path\"),\n /**\n * tests if the current zone is a parent(maybe indirect) of the given zone\n */\n isParentOf: function (zone) {\n return this.get(\"allChildrenRegExp\").test(zone.get(\"path\"));\n },\n /**\n * Gets all the children under this node\n */\n getAllChildren: function () {\n var _this = this;\n return this.get(\"store\").find(\"zone\").then(function (zones) {\n return zones.filter(function (zone) {\n return _this.isParentOf(zone);\n });\n });\n }\n });\n\n Zone.reopenClass({\n pathSeparator: \".\"\n });\n\n exports['default'] = Zone;\n\n});","define('dashboard/pods/404/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n title: \"dashboard\"\n });\n\n});","define('dashboard/pods/app/changelog/route', ['exports', 'attic/utils'], function (exports, utils) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n setupController: function (controller, model) {\n this._super(controller, model);\n controller.set(\"changelogIsLoaded\", false);\n var api = this.get(\"container\").lookup(\"service:api\");\n return api.get(\"changelog\", null, { dataType: \"html\", timeout: 100000 }).then(function (response) {\n controller.set(\"changelog\", response);\n controller.set(\"changelogIsLoaded\", true);\n }, function (err) {\n return utils.handleError(err, \"Failed to get changlog\");\n });\n } });\n\n});","define('dashboard/pods/app/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n needs: [\"application\"],\n actions: {\n back: function () {\n var currentHost = window.location.host.match(/([^\\/]+)/);\n var previousHost = document.referrer.match(/https?:\\/\\/([^\\/]+)/);\n\n currentHost = currentHost ? currentHost[1] : \"current host\";\n previousHost = previousHost ? previousHost[1] : \"previous host\";\n\n if (previousHost === currentHost) {\n window.history.go(-1);\n } else {\n console.error(\"Cannot go back from \" + currentHost + \" to \" + previousHost);\n }\n }\n }\n });\n\n});","define('dashboard/pods/app/index/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n redirect: function () {\n // find out which organisation we're talking about\n var activeOrg = this.auth.get(\"activeOrganisation\");\n if (activeOrg) {\n return this.transitionTo(\"organisation\", activeOrg);\n }\n return this.transitionTo(\"organisations.create\");\n }\n });\n\n});","define('dashboard/pods/app/route', ['exports', 'attic/routes/require-login'], function (exports, RequireLoginRoute) {\n\n\t'use strict';\n\n\texports['default'] = RequireLoginRoute['default'];\n\n});","define('dashboard/pods/app/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n currentRouteNameBinding: \"controller.controllers.application.currentRouteName\",\n pathObserver: (function () {\n Ember.run.once(this, this.updateNav);\n }).observes(\"currentRouteName\"),\n updateNav: function () {\n if (!this.$nav) return;\n this.$nav.find(\".active\").removeClass(\"active\");\n var routeName = this.get(\"currentRouteName\");\n if (!routeName) return;\n var itemClass = routeName.split(\".\").shift().pluralize();\n var item = this.$nav.find(\".\" + itemClass).addClass(\"active\");\n var topLevel = item.parent().closest(\"li\");\n if (!topLevel.length) topLevel = item;\n if (topLevel.hasClass(\"has-children\")) {\n this.$nav.bonsai(\"expand\", topLevel);\n }\n },\n didInsertElement: function () {\n this.$nav = this.$(\"#primary-nav\").bonsai({\n expandAll: true\n });\n this.updateNav();\n }\n });\n\n});","define('dashboard/pods/application/adapter', ['exports', 'attic/rest-adapter'], function (exports, RestAdapter) {\n\n\t'use strict';\n\n\texports['default'] = RestAdapter['default'];\n\n});","define('dashboard/pods/application/controller', ['exports', 'dashboard/config/environment', 'attic/controllers/application'], function (exports, config, ApplicationController) {\n\n 'use strict';\n\n exports['default'] = ApplicationController['default'].extend({\n didChangePath: function () {\n this._super();\n\n var path = this.get(\"currentPath\");\n var whitelistPaths = [/\\.edit/, /\\.create/, /\\.structure/, /^login$/, /^recover$/, /^error$/, /^\\d{3}$/];\n\n if (config['default'].environment === \"development\" && whitelistPaths.every(function (r) {\n return !path.match(r);\n })) {\n // in development, we want to render every link we could have\n // potentially forgotten to acl as highly visible. The\n // acl-highlight class does that formatting - it's bright orange\n // and has a little warning symbol ⚠.\n\n // right now, we don't do acl checks inside create/edit routes.\n // the assumption is that the user is never linked to them in\n // the first place.\n\n var highlight = function (thing) {\n return $(thing).addClass(\"acl-highlight\");\n };\n\n var links = $(\"a[href]:not(.x-acl-handled)\").toArray();\n var actions = $(\"[data-ember-action]:not(.x-acl-handled)\").toArray();\n\n links.forEach(highlight);\n actions.forEach(highlight);\n }\n },\n init: function () {\n this._super();\n this.set(\"app\", this.get(\"container\").lookup(\"application:main\"));\n },\n moduleName: Em.computed.alias(\"app.modulePrefix\"),\n isDashboard: (function () {\n return this.get(\"moduleName\").toLowerCase() === \"dashboard\";\n }).property(\"moduleName\")\n });\n\n});","define('dashboard/pods/application/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n actions: {\n back: function () {\n window.history.go(-1);\n },\n error: function (err) {\n // display the error page by default\n return true;\n }\n }\n });\n\n});","define('dashboard/pods/application/serializer', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {\n\n /**\n * Add support for adding the has many relationship on the serialization when seeing the many to one relationship\n * */\n serializeHasMany: function (record, json, relationship) {\n var options = this.attrsOption(relationship.key);\n if (options && options.serialize === false) return;\n\n var key = relationship.key,\n payloadKey = this.keyForRelationship ? this.keyForRelationship(key, \"hasMany\") : key,\n relationshipType = getRelationshipType(record, relationship),\n relationshipRecord = Ember.get(record, payloadKey);\n\n // serialize hasMany relationships by default\n\n // we can't use the EmbeddedRecords \"serialize: 'ids'\" option for\n // this unless we want to specify it for every single hasMany\n // relationship in the codebase.\n\n // defaulting it here wouldn't work, as it's based on state and\n // serializers are singletons\n\n // so we do it manually! yaaay\n if (this.noSerializeOptionSpecified(relationship.key) && relationshipType === \"manyToOne\" && relationshipRecord) {\n json[payloadKey] = relationshipRecord.mapBy(\"id\");\n } else {\n this._super(record, json, relationship);\n }\n },\n\n serialize: function (record, options) {\n this.set(\"serializeOptions\", options);\n var json = this._super(record, options);\n this.cleanupNullAttributes(record, json);\n return json;\n },\n\n normalize: function (type, hash, prop) {\n delete hash.href;\n return this._super(type, hash, prop);\n },\n\n /**\n * Allow distinguishing between `null` and `not set`\n */\n cleanupNullAttributes: function (record, json) {\n Object.keys(json).map(function (key) {\n if (Ember.typeOf(json[key]) === \"null\") {\n delete json[key];\n if (Ember.typeOf(record.get(key)) === \"null\") {\n json[key] = null;\n }\n }\n });\n }\n\n });\n\n function getRelationshipType(record, relationship) {\n // record.constructor.determineRelationshipType was added in ember-data beta.10\n return record.constructor.determineRelationshipType ? record.constructor.determineRelationshipType(relationship) : DS.RelationshipChange.determineRelationshipType(record.constructor, relationship);\n }\n\n});","define('dashboard/pods/application/store', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = DS.Store.extend({\n init: function () {\n this._super();\n this.set(\"uncommitedRecords\", {});\n this.set(\"uncommitedRecordsWaitingOnParent\", {});\n },\n\n parentKeyForEmbeds: function (record) {\n // return the first key in parents that actually has data\n var parentKeys = record.constructor.parent;\n if (!Em.isArray(parentKeys)) {\n parentKeys = [parentKeys];\n }\n\n // note that the parent key has to always be synchronous, because\n // this is embedded in it!\n var key = parentKeys.find(function (key) {\n return record.get(key) !== null;\n });\n // there are corner cases where embedded children are created with\n // no parents, so we do a dumb defaulting in those cases\n return key || parentKeys[0];\n },\n\n push: function (typeName, data, _partial) {\n var _this = this;\n var type = this.modelFor(typeName);\n var id = data.id;\n var uniques = type.uniqueKeys;\n\n if (uniques && !this.hasRecordForId(typeName, id) && Ember.isArray(this.uncommitedRecords[typeName])) {\n this.uncommitedRecords[typeName].forEach(function (record) {\n var parentKey = _this.parentKeyForEmbeds(record);\n var parent = record.get(parentKey);\n\n if (parent && !parent.get(\"id\")) {\n var parentType = parent.constructor.typeKey;\n if (!_this.uncommitedRecordsWaitingOnParent[parentType]) {\n _this.uncommitedRecordsWaitingOnParent[parentType] = [];\n }\n _this.uncommitedRecordsWaitingOnParent[parentType].push({ record: record, data: data });\n }\n _this.demuxRecord(record, data);\n });\n }\n return this._super(typeName, data, _partial);\n },\n\n demuxRecord: function (record, data) {\n var type = record.constructor;\n var typeName = type.typeKey;\n var parentKey = this.parentKeyForEmbeds(record);\n var uniques = type.uniqueKeys;\n\n if (record.get(parentKey + \".id\") !== data[parentKey] + \"\") {\n return;\n }\n\n // we check serialized versions because uniqueKeys can be from\n // async relations\n var serialized = record.serialize();\n var matches = uniques.every(function (key) {\n return Em.get(serialized, key) === Em.get(data, key);\n });\n if (!matches) {\n return;\n }\n\n record.transitionTo(\"created.inFlight\");\n this.didSaveRecord(record, data);\n },\n\n buildRecord: function (type, id, data) {\n var record = this._super(type, id, data);\n if (!id) {\n var typeName = type.typeKey;\n if (!this.uncommitedRecords[typeName]) {\n this.uncommitedRecords[typeName] = [];\n }\n this.uncommitedRecords[typeName].push(record);\n }\n return record;\n },\n\n updateId: function (record, data) {\n var typeName = record.constructor.typeKey;\n var isNew = record.get(\"isNew\");\n var toReturn = this._super(record, data);\n var store = this;\n\n if (isNew && this.uncommitedRecordsWaitingOnParent[typeName]) {\n this.uncommitedRecordsWaitingOnParent[typeName].forEach(function (_ref) {\n var record = _ref.record;\n var data = _ref.data;\n store.demuxRecord(record, data);\n });\n }\n\n if (isNew && this.uncommitedRecords[typeName]) {\n this.uncommitedRecords[typeName].removeObject(record);\n }\n return toReturn;\n }\n });\n\n});","define('dashboard/pods/gateway/devices/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n devices: (function () {\n var _this = this;\n var scaleNames = [];var _get = this.get(\"props\");\n\n var gatewayResponse = _get.gatewayResponse;\n var printers = _get.printers;\n var scales = _get.scales;\n\n\n // We don't have a unique key for scale, so using concatenated string as keys\n var scaleSerials = scales.map(function (scale) {\n scaleNames.push(scale.get(\"name\"));\n return _this.serialFor(scale);\n });\n\n return gatewayResponse.map(function (discovered) {\n var printerExists = !Ember.isEmpty(printers.filterProperty(\"serial\", discovered.serial)),\n scaleSerial = _this.serialFor(Ember.Object.create(discovered)),\n scaleName = scaleNames[scaleSerials.indexOf(scaleSerial)];\n\n discovered.selected = true;\n discovered.added = false;\n discovered.isDisabled = false;\n discovered.name = \"\";\n discovered.gateway = _this.get(\"props.gateway\");\n\n if (printerExists || scaleName) {\n discovered.added = true;\n discovered.isDisabled = true;\n\n if (printerExists) {\n discovered.name = printers.filter(function (dbPrinter) {\n return dbPrinter.get(\"serial\") === discovered.serial;\n })[0].get(\"name\");\n } else {\n discovered.name = scaleName;\n }\n }\n return discovered;\n });\n }).property(\"props.gatewayResponse\", \"props.printers\", \"props.scales\"),\n\n serialFor: function (scale) {\n return scale.get(\"interface\") + \"_\" + scale.get(\"port\") + \"_\" + scale.get(\"make\");\n }\n });\n\n});","define('dashboard/pods/gateway/devices/route', ['exports', 'ember-notify', 'attic/utils'], function (exports, Notify, utils) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n model: function () {\n var _this = this;\n var gateway = this.modelFor(\"gateway\");\n return Ember.RSVP.Promise.all([this.services.gateway.doDeviceDiscovery(gateway), this.store.find(\"printer\"), this.store.find(\"scale\")]).then(function (results) {\n _this.set(\"controllerProps\", {\n gateway: gateway,\n gatewayResponse: results[0],\n printers: results[1],\n scales: results[2]\n });\n });\n },\n createPrinter: function (defaults) {\n var _this = this;\n return this.store.createRecord(\"printer\", defaults).save().then(function (printer) {\n return defaults.hasCashdrawer ? _this.createCashdrawer(defaults, printer) : null;\n });\n },\n createScale: function (defaults) {\n return this.store.createRecord(\"scale\", defaults).save();\n },\n createCashdrawer: function (defaults, printer) {\n var cashdrawer = Ember.copy(defaults);\n cashdrawer.name = \"Cashdrawer on \" + defaults.name;\n\n cashdrawer = this.store.createRecord(\"cashdrawer\", cashdrawer);\n cashdrawer.set(\"printer\", printer);\n\n return cashdrawer.save();\n },\n actions: {\n addSelectedDevices: function () {\n var _this = this;\n var devices = this.get(\"controller.devices\").filter(function (device) {\n return device.selected && !device.isDisabled;\n });\n return Promise.all(devices.map(function (device) {\n return device.type === \"scale\" ? _this.createScale(device) : _this.createPrinter(device);\n })).then(function () {\n Notify['default'].success(\"Devices successfully added\");\n return _this.transitionTo(\"gateways\");\n }, function (err) {\n return utils.handleError(err, \"Failed to add device\");\n });\n }\n }\n });\n\n});","define('dashboard/pods/gateway/edit/route', ['exports', 'dashboard/pods/gateway/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/gateway/form/route', ['exports', 'attic/utils', 'ember-notify', 'attic/routes/form'], function (exports, utils, Notify, FormRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"gateway\",\n afterModel: function () {\n var _this = this;\n return this.store.findAll(\"venue\").then(function (venues) {\n return _this.set(\"controllerProps.venues\", venues);\n });\n },\n actions: {\n saved: function () {\n Notify['default'].success(\"Gateway saved\");\n this.go(\"gateways\");\n },\n cancel: function () {\n this.go(\"gateways\");\n }\n }\n });\n\n});","define('dashboard/pods/gateways/create/route', ['exports', 'dashboard/pods/gateway/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/gateways/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/gateways/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"gateway\"\n });\n\n});","define('dashboard/pods/gateways/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/instruction/edit/controller', ['exports', 'dashboard/pods/instruction/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/instruction/edit/route', ['exports', 'dashboard/pods/instruction/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/instruction/form/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n actions: {\n addiitem: function () {\n this.get(\"model.instructionitems\").pushObject(this.store.createRecord(\"instructionitem\"));\n }\n }\n });\n\n});","define('dashboard/pods/instruction/form/route', ['exports', 'attic/routes/form'], function (exports, FormRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"instruction\"\n });\n\n});","define('dashboard/pods/instructionitem/controller', ['exports', 'attic/computed'], function (exports, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n isEditingPrice: false,\n required: Em.computed.alias(\"isEditingPrice\"),\n price: computed.firstPrice(\"content.prices\"),\n onEditingPriceChanged: (function () {\n if (this.get(\"isEditingPrice\") && !this.get(\"price\")) {\n //create when editing and no prices\n this.get(\"content.prices\").pushObject(this.get(\"store\").createRecord(\"price\"));\n }\n }).observes(\"isEditingPrice\"),\n actions: {\n delete: function () {\n this.get(\"content\").deleteRecord();\n }\n }\n });\n\n});","define('dashboard/pods/instructions/create/controller', ['exports', 'dashboard/pods/instruction/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/instructions/create/route', ['exports', 'dashboard/pods/instruction/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/instructions/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/instructions/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"instruction\"\n });\n\n});","define('dashboard/pods/instructions/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/license/edit/route', ['exports', 'dashboard/pods/license/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/license/form/route', ['exports', 'attic/routes/form', 'ember-notify'], function (exports, FormRoute, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"license\",\n messages: {\n saveFailed: \"Failed to save the license\",\n saveSuccess: \"License saved\"\n },\n actions: {\n saved: function () {\n Notify['default'].success(this.get(\"messages.saveSuccess\"));\n this.transitionTo(\"licenses.index\");\n },\n cancel: function () {\n this.transitionTo(\"licenses.index\");\n }\n }\n });\n\n});","define('dashboard/pods/licenses/create/route', ['exports', 'dashboard/pods/license/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/licenses/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n 'use strict';\n\n exports['default'] = Ember.ArrayController.extend(index.Controller, {\n typeKey: \"license\"\n });\n\n});","define('dashboard/pods/licenses/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"license\"\n });\n\n});","define('dashboard/pods/licenses/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/login/controller', ['exports', 'attic/utils', 'ember-notify'], function (exports, utils, Notify) {\n\n 'use strict';\n\n exports['default'] = Em.Controller.extend({\n rememberMe: Ember.computed.alias(\"auth.rememberMe\"),\n autocompleteEnabled: !Ember.testing,\n isTerminal: false,\n needs: [\"application\"],\n init: function () {\n this._super();\n this.set(\"isTerminal\", window.FranqENV.modulePrefix === \"terminal\");\n this.reset();\n if (this.get(\"auth.isLoggedIn\")) {\n Em.run.next(this, this.loginNotification);\n }\n },\n\n loginNotification: (function () {\n if (this.get(\"auth.isLoggedIn\")) {\n if (!this.get(\"wasLoggedIn\")) {\n Notify['default'].success(\"Logged in\");\n }\n }\n this.set(\"wasLoggedIn\", this.get(\"auth.isLoggedIn\"));\n }).observes(\"auth.isLoggedIn\"),\n\n credentials: function () {\n return {\n username: this.get(\"username\"),\n password: this.get(\"password\"),\n rememberMe: this.get(\"rememberMe\")\n };\n },\n\n reset: function () {\n this.setProperties({\n isProcessing: false,\n username: \"\",\n password: \"\"\n });\n },\n\n actions: {\n login: function () {\n var _this = this;\n this.set(\"isProcessing\", true);\n this.set(\"wrongCredentials\", false);\n this.auth.login(this.credentials()).then(function () {\n _this.auth.retryGoingTo() || _this.transitionToRoute(\"application\");\n }).catch(function (err) {\n _this.set(\"wrongCredentials\", true);\n _this.set(\"isProcessing\", false);\n if (err.jqXHR) {\n switch (err.jqXHR.status) {\n case 500:\n return _this.transitionToRoute(\"500\");\n default:\n return utils.handleError(err, \"Login failed\");\n }\n }\n });\n }\n }\n });\n\n});","define('dashboard/pods/login/route', ['exports'], function (exports) {\n\n 'use strict';\n\n var LoginRoute = Em.Route.extend({\n deactivate: function () {\n this.controller.reset();\n }\n });\n\n exports['default'] = LoginRoute;\n\n});","define('dashboard/pods/logout/route', ['exports', 'ember-notify', 'attic/utils'], function (exports, Notify, utils) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n beforeModel: function () {\n var _this = this;\n return this.auth.logout().then(function () {\n return Ember.run.next(function () {\n return Notify['default'].success(\"You have been successfully signed out.\");\n });\n }, function (err) {\n utils.handleError(err, \"Failed to sign out\");\n _this.transitionTo(\"/\");\n });\n },\n redirect: function () {\n this.transitionTo(\"/\");\n }\n });\n\n});","define('dashboard/pods/menu/edit/controller', ['exports', 'dashboard/pods/menu/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/menu/edit/index/route', ['exports', 'dashboard/pods/menu/form/index/route'], function (exports, FormRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'];\n\n});","define('dashboard/pods/menu/edit/list/controller', ['exports', 'dashboard/pods/menu/form/list/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/menu/edit/list/route', ['exports', 'dashboard/pods/menu/form/list/route'], function (exports, FormRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'];\n\n});","define('dashboard/pods/menu/edit/list/view', ['exports', 'dashboard/pods/menu/form/list/view'], function (exports, FormView) {\n\n\t'use strict';\n\n\texports['default'] = FormView['default'];\n\n});","define('dashboard/pods/menu/edit/route', ['exports', 'dashboard/pods/menu/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/menu/edit/view', ['exports', 'dashboard/pods/menu/form/view'], function (exports, FormView) {\n\n\t'use strict';\n\n\texports['default'] = FormView['default'];\n\n});","define('dashboard/pods/menu/form/controller', ['exports', 'attic/computed', 'attic/utils', 'dashboard/components/f-matrix', 'attic/utils/menulist-mixin'], function (exports, computed, utils, f_matrix, menulist_mixin) {\n\n 'use strict';\n\n function traverseNames(menulist, prefix) {\n prefix = (prefix ? prefix + \"/\" : \"\") + menulist.get(\"name\");\n var current = {\n label: prefix,\n value: menulist\n };\n\n return menulist.get(\"children\").map(function (child) {\n return traverseNames(child, prefix);\n }).reduce(function (acc, arr) {\n return acc.concat(arr);\n }, [current]); // .flatten()\n }\n\n exports['default'] = Ember.ObjectController.extend(menulist_mixin.AllProductsBreadCrumbs, {\n\n needs: [\"application\"],\n routeName: Em.computed.alias(\"controllers.application.currentRouteName\"),\n currentList: null,\n allProductsPath: \"menu.edit.list\",\n\n invalidName: null,\n editingName: null,\n nameErrors: {\n required: \"Menu name is required.\",\n invalid: \"Menu name must be unique.\"\n },\n\n // this cp returns a function from name -> boolean, as\n // {{confirm-input}} requires\n validateName: (function () {\n var _this = this;\n return function (name) {\n return _this.get(\"model.name\") === name || !_this.get(\"all.menus\").filterBy(\"archived\", false).mapBy(\"name\").contains(name);\n };\n }).property(\"all.menus.[]\", \"model.name\"),\n\n submitDisabled: (function () {\n return Em.isEmpty(this.get(\"model.name\")) || !Em.isEmpty(this.get(\"invalidName\")) || this.get(\"editingName\");\n }).property(\"model.name\", \"invalidName\", \"editingName\"),\n\n availableDefaultMenulists: (function () {\n return this.get(\"model.lists\").filter(function (list) {\n return !list.get(\"parent\");\n }).map(function (list) {\n return traverseNames(list);\n }).reduce(function (acc, arr) {\n return acc.concat(arr);\n }, []); // .flatten()\n }).property(\"model.lists.@each.name\"),\n\n actions: {\n selectList: function (mlist) {\n this.transitionToRoute(this.get(\"routeName\"), mlist);\n }\n }\n });\n\n});","define('dashboard/pods/menu/form/index/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n afterModel: function (model, transition) {\n var allProductList = model.get(\"lists\").findBy(\"all_products\", true);\n var listRoute = transition.targetName.replace(\"index\", \"list\");\n this.transitionTo(listRoute, allProductList);\n }\n });\n\n});","define('dashboard/pods/menu/form/list/controller', ['exports', 'attic/computed', 'attic/utils', 'dashboard/components/f-matrix', 'attic/utils/menulist-mixin'], function (exports, computed, utils, f_matrix, MenulistMixin) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend(MenulistMixin['default'], {\n needs: [\"organisation\"],\n queryParams: [\"page\"],\n\n // for and from AllProductsMenulistMixin\n currentMenulist: Em.computed.alias(\"model\"),\n currentItems: Em.computed.alias(\"currentMenulistItems\"),\n currentProducts: Em.computed.mapBy(\"currentItems\", \"product.resolved\"),\n\n spacesForPGroup: (function () {\n var _this = this;\n return function (group) {\n return group.get(\"products\").filter(function (product) {\n return !_this.get(\"currentProducts\").contains(product);\n }).get(\"length\");\n };\n }).property(),\n\n rows: (function () {\n return this.get(\"model.uses_variants\") ? 3 : 4;\n }).property(\"model.uses_variants\"),\n cols: 5,\n\n pager: f_matrix.Pager.extend({\n persistLocations: Em.computed.alias(\"form.model.normal\")\n }).create(),\n initPager: (function () {\n this.set(\"pager.form\", this);\n }).on(\"init\"),\n page: Em.computed.alias(\"pager.page\"),\n\n factory: null,\n initFactory: (function () {\n // so that we have a reference to `this`\n\n // this factory creates menulistitems when products or pgroups are\n // dropped onto the menu\n var MenuListItemFactory = f_matrix.RecordFactory.extend({\n typeKey: \"menulistitem\",\n\n scope: null,\n store: null,\n\n products: Em.computed.alias(\"scope.all.products\"),\n groups: Em.computed.alias(\"scope.all.productgroups\"),\n\n sort: { by: \"name\", asc: true },\n\n currentProducts: Em.computed.alias(\"scope.currentProducts\"),\n\n create: function (dt, args) {\n var mlistitems = this._super(dt, args);\n\n this.get(\"scope\").send(\"addVariantsOf\", mlistitems.mapBy(\"product\"));\n return mlistitems;\n },\n\n dataTransfer: function (dt, args) {\n var _this = this;\n if (dt.getData(\"item/spacer\")) {\n return null;\n }\n\n var productId = dt.getData(\"product/id\");\n if (productId) {\n return { product: this.get(\"products\").findBy(\"id\", productId) };\n }\n\n var groupId = dt.getData(\"productgroup/id\");\n if (groupId) {\n var group = this.get(\"groups\").findBy(\"id\", groupId);\n\n var sortOption = this.get(\"sort\");\n var sortBy = sortOption.by;\n if (!sortOption.asc) {\n sortBy = sortBy + \":desc\";\n }\n\n var products = group.get(\"products\").filter(function (product) {\n return !_this.get(\"currentProducts\").contains(product);\n }).sortBy(sortBy);\n\n return products.map(function (product) {\n return { product: product };\n });\n }\n\n return null;\n }\n });\n\n this.set(\"factory\", MenuListItemFactory.create({\n scope: this,\n store: this.store\n }));\n }).on(\"init\"),\n\n variantsOf: function (products) {\n return products.mapBy(\"variants\").invoke(\"toArray\").reduce(function (acc, variants) {\n return acc.concat(variants);\n }, []) // .flatten\n .mapBy(\"name\").filter(function (name) {\n return name !== null;\n }).reduce(function (acc, name) {\n return acc.add(name);\n }, new Set());\n },\n\n computedVariantNames: (function () {\n var products = this.get(\"currentProducts\");\n return Array.from(this.variantsOf(products));\n }).property(\"currentProducts.[]\"),\n\n variants: null,\n\n initVariants: (function () {\n // so that we have a reference to `this`\n\n // this object handles all of the internal property chains for\n // variants\n\n var VariantManager = Em.Object.extend({\n scope: null,\n\n rows: 2,\n cols: 5,\n pager: f_matrix.Pager.create(),\n\n current: Em.computed.alias(\"scope.model.variants\"),\n deleted: [],\n\n allNames: Em.computed.alias(\"scope.computedVariantNames\"),\n currentNames: Em.computed.mapBy(\"current\", \"label\"),\n available: Em.computed.setDiff(\"allNames\", \"currentNames\"),\n\n adding: null,\n addingPos: null,\n addingEmpty: Em.computed.empty(\"adding\"),\n\n popover: null,\n popoverSize: 5\n });\n\n this.set(\"variants\", VariantManager.create({ scope: this }));\n }).on(\"init\"),\n\n draggable: Em.computed.readOnly(\"model.normal\"),\n productSelectDisabled: Em.computed.readOnly(\"model.all_products\"),\n\n keepOrganisedChecked: (function (key, val) {\n var groupSortField = \"fromProductGroup\";\n\n if (arguments.length > 1) {\n var fields = this.get(\"model.group_sort_fields\");\n if (val) {\n this.set(\"model.group_sort_fields\", [groupSortField].concat(fields));\n } else {\n this.set(\"model.group_sort_fields\", fields.filter(function (field) {\n return field !== groupSortField;\n }));\n }\n }\n\n var fields = this.get(\"model.group_sort_fields\") || [];\n return fields.contains(groupSortField);\n }).property(\"model.group_sort_fields.[]\"),\n\n\n sortOption: (function (key, val) {\n if (arguments.length > 1) {\n var fields = this.get(\"model.group_sort_fields\") || [];\n var index = fields.length - 1;\n index = index < 0 ? 0 : index;\n\n fields[index] = val.by;\n this.set(\"model.group_sort_fields\", fields);\n this.set(\"model.group_sort_descending\", !val.asc);\n }\n\n var fields = this.get(\"model.group_sort_fields\") || [];\n return {\n by: fields[fields.length - 1],\n asc: !this.get(\"model.group_sort_descending\")\n };\n }).property(\"model.group_sort_fields.[]\", \"model.group_sort_descending\"),\n\n excludedProducts: Ember.computed.mapBy(\"currentItems\", \"product\"),\n\n itemPages: Em.computed.mapBy(\"pager.wrappedItems\", \"page\"),\n maxPageOrNegInfinity: Em.computed.max(\"itemPages\"),\n maxPage: computed.higher(\"maxPageOrNegInfinity\", 1),\n lastPage: computed.higherProperty(\"maxPage\", \"page\"),\n exactlyOnePage: Em.computed.equal(\"lastPage\", 1),\n moreThanOnePage: Em.computed.not(\"exactlyOnePage\"),\n\n deletePageEnabled: Em.computed.and(\"model.normal\", \"moreThanOnePage\"),\n\n onFirstPage: Em.computed.equal(\"page\", 1),\n onLastPage: computed.equalTo(\"page\", \"lastPage\"),\n\n pages: null,\n initPages: (function () {\n // so that we have access to `this`\n\n // the nav object manages our temporary navbar logic here\n var Nav = Em.Object.extend({\n scope: null,\n page: Em.computed.alias(\"scope.page\"),\n lastPage: Em.computed.alias(\"scope.lastPage\"),\n\n left: (function () {\n return Math.max(this.get(\"page\") - 1, 1);\n }).property(\"page\"),\n right: (function () {\n return Math.min(this.get(\"page\") + 2, this.get(\"lastPage\"));\n }).property(\"page\", \"lastPage\"),\n width: (function () {\n return this.get(\"right\") - this.get(\"left\") + 1;\n }).property(\"left\", \"right\"),\n maxWidth: 4,\n\n all: (function () {\n var _this = this;\n // create a lastPage-element array\n var elems = Array.apply(null, { length: this.get(\"lastPage\") });\n\n return elems.map(Number.call, function (index) {\n return Em.Object.extend({\n scope: _this,\n number: index + 1,\n display: (function () {\n var left = this.get(\"scope.left\");\n var right = this.get(\"scope.right\");\n var width = this.get(\"scope.width\");\n var maxWidth = this.get(\"scope.maxWidth\");\n\n var lastPage = this.get(\"scope.lastPage\");\n\n var num = this.get(\"number\");\n\n if (width !== maxWidth) {\n return num;\n }\n if (num === left && num !== 1) {\n return \"..\";\n }\n if (num === right && num !== lastPage) {\n return \"..\";\n }\n return num;\n }).property(\"scope.left\", \"scope.right\", \"scope.width\", \"scope.maxWidth\", \"number\", \"scope.lastPage\"),\n\n isSelecting: computed.equalTo(\"scope.page\", \"number\")\n }).create();\n });\n }).property(\"lastPage\"),\n\n visible: (function () {\n var pages = this.get(\"all\");\n return pages.slice(this.get(\"left\") - 1, this.get(\"right\"));\n }).property(\"all\", \"all.[]\", \"left\", \"right\")\n });\n\n this.set(\"pages\", Nav.create({ scope: this }));\n }).on(\"init\"),\n\n deletePageItemsOpen: false,\n actions: {\n nextPage: function () {\n this.mutate(\"page\", function (x) {\n return x + 1;\n });\n },\n previousPage: function () {\n this.mutate(\"page\", function (x) {\n return x > 1 ? x - 1 : 1;\n });\n },\n selectPage: function (val) {\n this.set(\"page\", val);\n },\n addPage: function () {\n var _this = this;\n var followingItems = this.get(\"pager.wrappedItems\").filter(function (item) {\n return item.get(\"page\") > _this.get(\"page\");\n });\n followingItems.forEach(function (item) {\n return item.mutate(\"page\", function (x) {\n return x + 1;\n });\n });\n\n this.send(\"nextPage\");\n },\n deletePage: function () {\n if (this.get(\"pager.visibleItems.length\") === 0) {\n this.send(\"definitelyDeletePage\");\n } else {\n this.set(\"deletePageItemsOpen\", true);\n }\n },\n definitelyDeletePage: function () {\n var _this = this;\n var visibleMlistitems = this.get(\"pager.visibleItems\").mapBy(\"content\");\n this.get(\"model.items\").removeObjects(visibleMlistitems);\n\n var followingItems = this.get(\"pager.wrappedItems\").filter(function (item) {\n return item.get(\"page\") > _this.get(\"page\");\n });\n followingItems.forEach(function (item) {\n return item.mutate(\"page\", function (x) {\n return x - 1;\n });\n });\n\n this.send(\"previousPage\");\n },\n removeProduct: function (product) {\n this.get(\"model.items\").removeObject(product);\n\n var computedVariants = this.variantsOf(this.get(\"currentProducts\"));\n var variants = this.get(\"variants.current\");\n\n variants.toArray().forEach(function (variant) {\n var label = variant.get(\"label\");\n\n if (!computedVariants.has(label)) {\n variants.removeObject(variant);\n }\n });\n },\n openPopover: function (pos, elem) {\n var popover = this.get(\"variants.popover\");\n\n this.set(\"variants.addingPos\", pos);\n\n popover.set(\"target\", elem);\n popover.send(\"open\", \"right\");\n },\n closePopover: function () {\n this.set(\"variants.adding\", null);\n this.set(\"variants.addingPos\", null);\n },\n addVariantsOf: function (products) {\n var _this = this;\n var deleted = this.get(\"variants.deleted\");\n var currentNames = this.get(\"variants.currentNames\");\n\n var variants = this.get(\"variants.current\");\n var spaceFor = this.get(\"variants.rows\") * this.get(\"variants.cols\") - variants.get(\"length\");\n\n var newVariants = Array.from(this.variantsOf(products)).removeObjects(deleted).removeObjects(currentNames).map(function (label) {\n return _this.store.createFragment(\"menulistvariant\", { label: label });\n }).slice(0, spaceFor);\n\n variants.pushObjects(newVariants);\n },\n addVariantAtPos: function (pos) {\n var name = this.get(\"variants.adding\");\n var deleted = this.get(\"variants.deleted\");\n var variants = this.get(\"variants.current\");\n\n // if the variant is in variants.deleted. remove it.\n if (deleted.contains(name)) {\n deleted.removeObject(name);\n }\n\n // add it back to the variants list.\n variants.pushObject(this.store.createFragment(\"menulistvariant\", {\n label: name,\n row: pos.row,\n column: pos.col\n }));\n\n // clear out the state and close the popover\n this.set(\"variants.adding\", null);\n this.set(\"variants.addingPos\", null);\n },\n removeVariant: function (variant) {\n var variants = this.get(\"variants.current\");\n var deleted = this.get(\"variants.deleted\");\n var label = variant.get(\"label\");\n\n deleted.pushObject(label);\n variants.removeObject(variant);\n }\n }\n });\n\n});","define('dashboard/pods/menu/form/list/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n typeKey: \"menulist\",\n model: function (params, transition) {\n // we use /edit/list/l3 for menulists that only exist locally. The\n // number refers to the index into the menulists array.\n var match = /^l(\\d+)$/.exec(params.menulist_id);\n\n if (match) {\n var menuRoute = transition.targetName.replace(\".list\", \"\");\n var index = Number(match[1]);\n\n var model = this.modelFor(menuRoute).get(\"lists\").objectAt(index);\n if (model) {\n return model;\n }\n }\n\n return this._super(params);\n },\n serialize: function (model) {\n var id = model.get(\"id\");\n if (id) {\n return { menulist_id: id };\n } else {\n var index = model.get(\"menu.lists\").indexOf(model);\n return { menulist_id: \"l\" + index };\n }\n },\n afterModel: function (model, transition) {\n var parentRoute = transition.targetName.replace(\".list\", \"\");\n this.controllerFor(parentRoute).set(\"currentList\", model);\n this.allSync([\"product\", \"productgroup\"]);\n },\n resetController: function (controller, isExiting) {\n controller.set(\"page\", 1);\n controller.set(\"variants.deleted\", []);\n }\n });\n\n});","define('dashboard/pods/menu/form/list/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.View.extend({\n templateName: \"menu/form/list\",\n //Temporarily not using an alias here until Ember alias lazy get is fixed\n //See: https://github.com/emberjs/ember.js/pull/5289 and\n //https://github.com/emberjs/ember.js/issues/9265\n\n //variants: Em.computed.alias('controller.variants.current'),\n\n addVariantIcons: function () {\n if (!this.get(\"isDestroying\") && !this.get(\"isDestroyed\")) {\n this.$(\".variants .grid .spacer .icon.add\").remove();\n this.$(\".variants .grid .spacer\").append(\"<i class='icon add fi-plus'></i>\");\n }\n },\n\n addProductIcons: function () {\n if (!this.get(\"isDestroying\") && !this.get(\"isDestroyed\")) {\n this.$(\".spacer .delete .remove-item\").remove();\n this.$(\".spacer .delete\").append(\"<span class='remove-item'><i class='fi-x'></i></span>\");\n }\n },\n\n onVariantsGridChanges: (function () {\n var _this = this;\n Em.run.schedule(\"afterRender\", this, function () {\n return Em.run.once(_this, _this.addVariantIcons);\n });\n }).observes(\"controller.model.variants.[]\", \"controller.model.variants.@each.row\", \"controller.model.variants.@each.column\"),\n\n onProductsGridChanges: (function () {\n var _this = this;\n Em.run.schedule(\"afterRender\", this, function () {\n return Em.run.once(_this, _this.addProductIcons);\n });\n }).observes(\"controller.pager.visibleItems.[]\", \"controller.pager.visibleItems.@each.row\", \"controller.pager.visibleItems.@each.column\", \"controller.pager.visibleItems.@each.product\")\n });\n\n});","define('dashboard/pods/menu/form/route', ['exports', 'attic/utils', 'ember-notify', 'attic/routes/form'], function (exports, utils, Notify, FormRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"menu\",\n messages: {\n saveFailed: \"Failed to save menu\",\n saveSuccess: \"Menu saved\"\n },\n afterModel: function (model, transition) {\n var _this = this;\n var allProductList = model.get(\"lists\").findBy(\"all_products\", true);\n\n return this.all([\"product\", \"productgroup\", \"menu\"]).then(function () {\n return Em.RSVP.all(_this.store.all(\"productgroup\").mapBy(\"products\"));\n }).then(function () {\n return Em.RSVP.all(model.get(\"lists\").mapBy(\"groups\"));\n });\n },\n actions: {\n saved: function () {\n Notify['default'].success(this.get(\"messages.saveSuccess\"));\n this.transitionTo(\"menus\");\n },\n cancel: function () {\n this.transitionTo(\"menus\");\n },\n delete: function () {\n var _this = this;\n if (this.get(\"controller.isDefault\")) {\n return Notify['default'].warning(\"Cannot delete default menu\");\n }\n\n return this.get(\"currentModel\").destroyRecord().then(function () {\n Notify['default'].success(\"Successfully delete menu.\");\n }).catch(function (err) {\n return utils.handleError(err, \"Failed to delete menu\");\n }).finally(function () {\n return _this.transitionTo(\"menus\");\n });\n }\n }\n\n });\n\n});","define('dashboard/pods/menu/form/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.View.extend({\n templateName: \"menu/form\",\n label: \"Menu Designer\"\n });\n\n});","define('dashboard/pods/menu/structure/controller', ['exports', 'attic/utils', 'ember-notify'], function (exports, utils, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n tree: null,\n moveTree: null,\n\n parentMenuList: Ember.computed.filterBy(\"model.lists\", \"parent\", null),\n topLevelMenuList: Ember.computed.filterBy(\"parentMenuList\", \"all_products\", false),\n\n popover: null,\n editor: null,\n\n moving: null,\n movingTo: null,\n\n actions: {\n expandAllSublist: function () {\n this.get(\"tree\").trigger(\"expandAllChildren\");\n },\n hideAllSublist: function () {\n this.get(\"tree\").trigger(\"collapseAllChildren\");\n },\n updateTrees: function () {\n this.get(\"tree\").trigger(\"updated\");\n this.get(\"moveTree\").trigger(\"updated\");\n },\n addList: function (menulist) {\n var newList = this.get(\"store\").createRecord(\"menulist\");\n\n if (menulist) {\n var $parent = $(\".menulist-tree [data-bonsai-id=\\\"\" + menulist.get(\"id\") + \"\\\"]\");\n this.get(\"tree\").trigger(\"expand\", $parent);\n this.set(\"label\", \"Add new sub-list\");\n menulist.get(\"children\").pushObject(newList);\n } else {\n this.set(\"label\", \"Add new list\");\n this.get(\"model.lists\").pushObject(newList);\n }\n this.get(\"editor\").trigger(\"open\", newList);\n this.send(\"updateTrees\");\n },\n deleteList: function (menulist) {\n this.set(\"deletingList\", menulist);\n },\n editList: function (menulist) {\n this.set(\"label\", \"Edit menu list\");\n this.get(\"editor\").trigger(\"open\", menulist);\n },\n showMoveModal: function (mlist) {\n this.set(\"movingTo\", undefined);\n this.set(\"moving\", mlist);\n },\n selectMoveTarget: function (mlist) {\n this.set(\"movingTo\", mlist);\n },\n move: function () {\n var movingTo = this.get(\"movingTo\");\n if (movingTo !== undefined) {\n this.set(\"moving.parent\", movingTo);\n this.send(\"updateTrees\");\n }\n }\n }\n });\n\n});","define('dashboard/pods/menu/structure/move/controller', ['exports', 'attic/computed'], function (exports, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n moving: Em.computed.alias(\"parentController.moving\"),\n movingTo: Em.computed.alias(\"parentController.movingTo\"),\n\n selected: computed.equalTo(\"content\", \"movingTo\"),\n isBeingMoved: computed.equalTo(\"content\", \"moving\"),\n disabled: Em.computed.or(\"parentController.disabled\", \"isBeingMoved\")\n });\n\n});","define('dashboard/pods/menu/structure/route', ['exports', 'ember-notify', 'attic/routes/form'], function (exports, Notify, FormRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"menu\",\n actions: {\n saved: function () {\n Notify['default'].success(\"Menu saved\");\n this.transitionTo(\"menu.edit\", this.get(\"currentModel\"));\n },\n cancel: function () {\n this.transitionTo(\"menu.edit\", this.get(\"currentModel\"));\n }\n }\n });\n\n});","define('dashboard/pods/menus/archived/controller', ['exports', 'attic/routes/index', 'ember-notify'], function (exports, index, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.ArrayController.extend(index.Controller, {\n archivedResults: Em.computed.filterBy(\"results\", \"archived\", true),\n\n nonArchivedMenus: Ember.computed.filterBy(\"model\", \"archived\", false),\n nameExist: (function () {\n return this.get(\"nonArchivedMenus\").mapBy(\"name\").contains(this.get(\"newMenuName\"));\n }).property(\"nonArchivedMenus\", \"newMenuName\"),\n editMenuListConfirmDisabled: (function () {\n if (this.get(\"editMenuModalOpen\") && !Em.isEmpty(this.get(\"newMenuName\")) && !this.get(\"nameExist\")) {\n return false;\n }\n return true;\n }).property(\"editMenuModalOpen\", \"newMenuName\", \"nameExist\"),\n\n actions: {\n restore: function (menu) {\n var _this = this;\n if (!this.get(\"nonArchivedMenus\").mapBy(\"name\").contains(menu.get(\"name\"))) {\n menu.setProperties({\n archived: false,\n archived_at: undefined,\n archived_user: undefined\n });\n\n menu.save().then(function () {\n Notify['default'].success(\"Restored menu: \" + menu.get(\"name\"));\n _this.set(\"menuToRestore\", undefined);\n _this.set(\"editMenuModalOpen\", false);\n });\n } else {\n this.set(\"menuToRestore\", menu);\n this.set(\"editMenuModalOpen\", true);\n }\n },\n editMenuNameConfirm: function () {\n if (!this.get(\"editMenuListConfirmDisabled\")) {\n this.set(\"menuToRestore.name\", this.get(\"newMenuName\"));\n this.send(\"restore\", this.get(\"menuToRestore\"));\n }\n },\n closeEditMenuNameModal: function () {\n this.set(\"editMenuModalOpen\", false);\n }\n }\n });\n\n});","define('dashboard/pods/menus/archived/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"menu\"\n });\n\n});","define('dashboard/pods/menus/archived/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/menus/create/controller', ['exports', 'dashboard/pods/menu/form/controller'], function (exports, FormController) {\n\n 'use strict';\n\n exports['default'] = FormController['default'].extend({\n editingName: true,\n allProductsPath: \"menus.create.list\" });\n\n});","define('dashboard/pods/menus/create/index/route', ['exports', 'dashboard/pods/menu/form/index/route'], function (exports, FormRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'];\n\n});","define('dashboard/pods/menus/create/list/controller', ['exports', 'dashboard/pods/menu/form/list/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/menus/create/list/route', ['exports', 'dashboard/pods/menu/form/list/route'], function (exports, FormRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'];\n\n});","define('dashboard/pods/menus/create/list/view', ['exports', 'dashboard/pods/menu/form/list/view'], function (exports, FormView) {\n\n\t'use strict';\n\n\texports['default'] = FormView['default'];\n\n});","define('dashboard/pods/menus/create/route', ['exports', 'dashboard/pods/menu/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(CreateRoute['default'], {\n model: function (parms) {\n var allProductsMenulist = this.store.createRecord(\"menulist\", {\n name: \"All products\",\n all_products: true\n });\n\n var model = this.store.createRecord(\"menu\");\n\n model.get(\"lists\").pushObject(allProductsMenulist);\n return model;\n }\n });\n\n});","define('dashboard/pods/menus/create/view', ['exports', 'dashboard/pods/menu/form/view'], function (exports, FormView) {\n\n\t'use strict';\n\n\texports['default'] = FormView['default'];\n\n});","define('dashboard/pods/menus/index/controller', ['exports', 'attic/controllers/filterable-mixin', 'attic/utils', 'attic/computed', 'ember-notify', 'attic/routes/index'], function (exports, FilterableMixin, utils, computed, Notify, index) {\n\n 'use strict';\n\n exports['default'] = Ember.ArrayController.extend(FilterableMixin['default'], index.Controller, {\n needs: [\"organisation\"],\n filter: function (item) {\n var query = this.get(\"query\");\n if (!query) return true;\n return (item.get(\"name\") || \"\").match(new RegExp(utils.regExpEscape(query), \"i\"));\n },\n filterDependencies: [\"query\"],\n nonArchivedContent: Em.computed.filterBy(\"content\", \"archived\", false),\n nonArchivedResults: Em.computed.filterBy(\"results\", \"archived\", false),\n sortTypes: [\"A-Z\", \"Z-A\"],\n toDisplayResults: (function () {\n switch (this.get(\"sortBy\")) {\n default:\n this.set(\"sortBy\", this.get(\"sortTypes\")[0]);\n case \"A-Z\":\n return this.get(\"nonArchivedResults\").sortBy(\"name\");\n case \"Z-A\":\n return this.get(\"nonArchivedResults\").sortBy(\"name:desc\");\n }\n }).property(\"nonArchivedResults.[]\", \"sortBy\"),\n actions: {\n setDefaultMenu: function () {\n this.get(\"controllers.organisation.model\").set(\"default_menu\", this.get(\"defaultMenu\")).save().then(function () {\n return Notify['default'].success(\"Default menu saved\");\n }).catch(function (err) {\n return utils.handleError(err, \"Failed to save default menu\");\n });\n },\n archiveMenu: function (menu) {\n menu.set(\"archived\", true).save().then(function () {\n return Notify['default'].success(\"Menu archived\");\n }, function (err) {\n return utils.handleError(err, \"Failed to archive menu\");\n });\n },\n editName: function (menu) {\n menu.set(\"editingName\", true);\n menu.set(\"oldName\", menu.get(\"name\"));\n },\n duplicateMenu: function (menu) {\n var _this = this;\n var menuName = \"Copy of \" + menu.get(\"name\");\n\n //Rename by increment the copy-number if name exist.\n var copyNumber = 1;\n while (this.get(\"model\").mapBy(\"name\").contains(menuName)) {\n var last = menuName.split(/\\s+/).popObject(),\n lastWithBracket = last.match(/\\([0-9]*\\)/);\n if (lastWithBracket) {\n menuName = menuName.replace(lastWithBracket[0], \"(\" + copyNumber + \")\");\n } else {\n menuName += \" (\" + copyNumber + \")\";\n }\n copyNumber++;\n }\n\n var api = this.container.lookup(\"service:api\");\n\n var defaultListName = menu.get(\"default_list.name\");\n var serialized = menu.serialize();\n\n serialized.name = menuName;\n delete serialized.created_at;\n delete serialized.updated_at;\n delete serialized.default_list;\n\n var cleanIds = function (obj) {\n if (Em.isArray(obj)) {\n obj.forEach(cleanIds);\n } else if (typeof obj === \"string\") {} else if (obj && typeof obj === \"object\") {\n // hey, guess what? typeof null === 'object'!\n delete obj.id;\n Object.keys(obj).forEach(function (key) {\n return cleanIds(obj[key]);\n });\n }\n };\n\n cleanIds(serialized);\n\n api.post(\"menus\", JSON.stringify({\n menu: serialized\n }), {\n contentType: \"application/json; charset=utf-8\"\n }).then(function (response) {\n _this.store.pushPayload(response);\n\n var menu = _this.store.all(\"menu\").findBy(\"id\", response.menu.id);\n if (defaultListName) {\n var defaultList = menu.get(\"lists\").findBy(\"name\", defaultListName);\n menu.set(\"default_list\", defaultList);\n return menu.save();\n } else {\n return menu;\n }\n }).then(function () {\n return Notify['default'].success(\"Duplicate menu saved successfully.\");\n }).catch(function (err) {\n return utils.handleError(err, \"Failed to save copy menu\");\n });\n },\n showColorPicker: function (menu) {\n this.set(\"selectedMenu\", menu);\n this.set(\"oldColor\", menu.get(\"color\"));\n },\n confirmColor: function () {\n var _this = this;\n //this.set('selectedMenu.color', this.get('editingColor'));\n if (this.get(\"selectedMenu.isDirty\") && !(this.get(\"selectedMenu.color\") === this.get(\"oldColor\"))) {\n this.get(\"selectedMenu\").save().then(function () {\n Notify['default'].success(\"Menu color updated\");\n }).catch(function (err) {\n _this.set(\"selectedMenu.color\", _this.get(\"oldColor\"));\n utils.handleError(err, \"Failed to update menu color\");\n });\n }\n },\n cancelColor: function () {\n this.set(\"selectedMenu.color\", this.get(\"oldColor\"));\n this.set(\"selectedMenu\", null);\n }\n }\n });\n // noop\n\n});","define('dashboard/pods/menus/index/item/controller', ['exports', 'attic/utils', 'attic/computed', 'ember-notify'], function (exports, utils, computed, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n init: function () {\n this._super();\n this.set(\"oldColor\", this.get(\"color\"));\n },\n fillStyle: (function () {\n return \"background-color:\" + this.get(\"model.color\");\n }).property(\"model.color\"),\n isDefault: (function () {\n return this.get(\"parentController.defaultMenu\") === this.model;\n }).property(\"parentController.defaultMenu\"),\n onEditingNameChanged: (function () {\n var currentModel = this.model,\n oldName = currentModel.get(\"oldName\"),\n newName = currentModel.get(\"name\").trim();\n\n currentModel.set(\"name\", newName);\n\n if (!currentModel.editingName && !Em.isEqual(oldName, newName)) {\n return currentModel.save().then(function () {\n return Notify['default'].success(\"Menu name updated\");\n }).catch(function (err) {\n utils.handleError(err, \"Failed to update menu name\");\n currentModel.set(\"name\", oldName);\n });\n }\n }).observes(\"editingName\"),\n validateNames: (function () {\n var invalidName = this.get(\"parentController.model\").mapBy(\"name\").removeObject(this.get(\"model.name\"));\n return function (newName) {\n return !invalidName.contains(newName);\n };\n }).property(\"parentController.model\", \"model\"),\n resetInputValue: (function () {\n var _this = this;\n return function () {\n return _this.model.set(\"name\", _this.model.get(\"modal.oldName\"));\n };\n }).property(\"model\")\n });\n\n});","define('dashboard/pods/menus/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"menu\",\n afterModel: function () {\n var _this = this;\n return this.modelFor(\"organisation\").get(\"default_menu\").then(function (menu) {\n return _this.set(\"controllerProps.defaultMenu\", menu);\n });\n }\n });\n\n});","define('dashboard/pods/menus/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/organisation/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n needs: [\"application\"],\n currentRouteName: Em.computed.alias(\"controllers.application.currentRouteName\"),\n onHintCollapsed: (function () {\n var _this = this;\n if (this.get(\"currentRouteName\") !== \"organisation.index\") {\n Ember.run.schedule(\"afterRender\", function () {\n _this.set(\"hintCollapsed\", true);\n });\n }\n }).observes(\"controllers.application.currentRouteName\")\n });\n\n});","define('dashboard/pods/organisation/edit/route', ['exports', 'dashboard/pods/organisation/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/organisation/form/route', ['exports', 'attic/routes/form', 'ember-notify'], function (exports, FormRoute, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"instruction\"\n });\n\n});","define('dashboard/pods/organisation/index/controller', ['exports', 'ember-notify', 'attic/utils'], function (exports, Notify, utils) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n onOrganisationSwitch: (function () {\n if (this._oldId && this.get(\"model.id\") !== this._oldId) {\n throw new Error(\"Can't switch models in an existing controller. Tear down the route first.\");\n }\n this._oldId = this.get(\"model.id\");\n }).observes(\"model\")\n });\n\n});","define('dashboard/pods/organisation/index/route', ['exports', 'ember-notify'], function (exports, Notify) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n model: function () {\n return this.modelFor(\"organisation\");\n }\n });\n\n});","define('dashboard/pods/organisation/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n deactivate: function () {\n if (!Ember.testing) {\n this.container.lookup(\"application:main\").reset();\n }\n }\n });\n\n});","define('dashboard/pods/organisation/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n onHintCollapsed: (function () {\n this.syncHintBGHeight(true);\n }).observes(\"controller.hintCollapsed\"),\n didInsertElement: function () {\n var _this = this;\n this.syncHintBGHeight(true);\n $(window).resize(function () {\n return _this.syncHintBGHeight();\n });\n },\n syncHintBGHeight: function (afterRender) {\n if (afterRender) {\n Ember.run.schedule(\"afterRender\", function () {\n $(\"#hint-bg\").height($(\".hint-container\").height());\n });\n } else {\n Ember.run.next(function () {\n $(\"#hint-bg\").height($(\".hint-container\").height());\n });\n }\n }\n });\n\n});","define('dashboard/pods/organisations/create/route', ['exports', 'dashboard/pods/organisation/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/organisations/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n model: function () {\n return this.store.find(\"organisation\");\n },\n redirect: function (orgs, transition) {\n if (transition.targetName === \"organisations.index\") {}\n }\n });\n // find out which organisation we're talking about\n // TODO would modelFor('organisation') ever be set here?\n // var selected = this.modelFor('organisation'),\n // numOrgs = orgs.get('length');\n\n // // if no org is selected\n // if (!selected) {\n // if (!numOrgs) { // if none exist\n // return this.transitionTo('organisations.create');\n // }\n // else if (numOrgs > 1) { // if there's more than one\n // return this.transitionTo('organisations.select');\n // }\n // else { // go to the only org\n // selected = orgs.get('firstObject');\n // }\n // }\n // return this.transitionTo('organisation', selected);\n\n});","define('dashboard/pods/organisations/select/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.ArrayController.extend({\n hasOrganisations: Em.computed.notEmpty(\"model\"),\n organisationBinding: \"auth.organisation\",\n selected: (function () {\n if (this.get(\"organisation\")) this.send(\"orgSelected\");\n }).observes(\"organisation\")\n });\n\n});","define('dashboard/pods/organisations/select/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n model: function () {\n return this.auth.get(\"user.organisations\");\n },\n actions: {\n orgSelected: function () {\n this.transitionTo(\"organisation\", this.controller.get(\"organisation\"));\n },\n create: function () {\n this.transitionTo(\"organisations.create\");\n }\n }\n });\n\n});","define('dashboard/pods/printer/edit/controller', ['exports', 'dashboard/pods/printer/form/controller'], function (exports, PrinterController) {\n\n\t'use strict';\n\n\texports['default'] = PrinterController['default'];\n\n});","define('dashboard/pods/printer/edit/route', ['exports', 'dashboard/pods/printer/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/printer/form/controller', ['exports', 'attic/utils', 'attic/computed'], function (exports, utils, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n\n gateway: computed.select2ToModel(\"model.gateway\", \"props.gateways\"),\n\n availablePrinters: (function () {\n return (function (options) {\n var _this = this;\n var gateway = this.get(\"model.gateway\");\n if (gateway) {\n var cachedPrinters = this.get(\"cachedPrinters\");\n\n if (cachedPrinters && this.get(\"lastCachedTime\") + 10000 > Date.now()) {\n return options.callback(this.filterPrinterSelection(cachedPrinters, options.term));\n }\n\n if (!this.get(\"isLoadingAvailablePrinters\")) {\n this.set(\"isLoadingAvailablePrinters\", true);\n this.services.gateway.getAvailablePrinters(gateway).then(function (printers) {\n var data = { results: [] },\n existingPrinters = _this.get(\"props.printers\").mapBy(\"serial\");\n\n printers.map(function (printer) {\n if (printer.serial !== _this.get(\"model.serial\") && !existingPrinters.contains(printer.serial)) {\n data.results.push(_this.getPrinterSelectionObject(printer));\n }\n });\n\n _this.set(\"cachedPrinters\", data);\n _this.set(\"lastCachedTime\", Date.now());\n\n return options.callback(_this.filterPrinterSelection(data, options.term));\n }).catch(function (err) {\n return utils.handleError(err, \"Couldn't get list of printers from the gateway\");\n }).finally(function () {\n return _this.set(\"isLoadingAvailablePrinters\", false);\n });\n }\n }\n }).bind(this);\n }).property(),\n\n onSelectedGatewayChanged: (function () {\n if (this.get(\"props.selectedGateway\") && Ember.isEqual(this.get(\"props.selectedGateway\"), this.get(\"model.gateway.id\"))) {\n var printer = this.get(\"model\").toJSON();\n this.set(\"props.selectedPrinter\", this.getPrinterSelectionObject(printer));\n } else {\n this.set(\"props.selectedPrinter\", null);\n }\n this.set(\"cachedPrinters\", null);\n this.set(\"lastCachedTime\", null);\n }).observes(\"model.gateway\"),\n\n printerInitSelection: (function () {\n var _this = this;\n return function (element, callback) {\n var id = element.val();\n var printer = _this.get(\"cachedPrinters.results\").findBy(\"id\", id).printer;\n return callback(_this.getPrinterSelectionObject(printer));\n };\n }).property(),\n\n getPrinterSelectionObject: function (printer) {\n var text = \"Serial: \" + printer.serial + \", Interface: \" + printer.interface + \", \" + (Ember.isEqual(printer.interface, \"ip\") ? \"IP: \" + printer.ip : \"Port: \" + printer.port);\n delete printer.printergroups;\n return { id: printer.serial, text: text, printer: printer };\n },\n\n filterPrinterSelection: function (printerObjArray, term) {\n var output = [];\n printerObjArray.results.forEach(function (item) {\n if (item.text.toLowerCase().indexOf(term.toLowerCase()) >= 0) {\n output.push(item);\n }\n });\n printerObjArray.results = output;\n return printerObjArray;\n }\n });\n\n});","define('dashboard/pods/printer/form/route', ['exports', 'attic/utils', 'ember-notify', 'attic/routes/form', 'dashboard/pods/printerimage/form/route'], function (exports, utils, Notify, FormRoute, PrinterImageRoute) {\n\n 'use strict';\n\n var RSVP = Ember.RSVP.Promise;\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"printer\",\n messages: {\n saveSuccess: \"Printer saved\"\n },\n beforeModel: function () {\n var _this = this;\n return this.store.find(\"printer\").then(function (printers) {\n return _this.set(\"controllerProps.printers\", printers);\n });\n },\n afterModel: function (model) {\n return this.resolve(model, {\n findAll: [\"printergroup\", \"gateway\"],\n relations: [\"printergroups\", \"gateway\"]\n });\n },\n actions: {\n submit: function () {\n var _this = this;\n var printer = this.currentModel,\n device = this.get(\"controller.props.selectedDevice.printer\");\n if (device && !Ember.isEqual(device.serial, printer.get(\"serial\"))) {\n if (Ember.isEqual(device.interface, \"ip\")) {\n device.port = null;\n } else {\n device.ip = null;\n }\n printer.setProperties(device);\n }\n printer.save().then(function () {\n Notify['default'].success(_this.get(\"messages.saveSuccess\"));\n return _this.updateLogo(printer).then(function () {\n return _this.transitionTo(\"printergroups\");\n }).catch();\n }).catch(function (err) {\n return utils.handleError(err, _this.get(\"messages.saveFailed\"));\n });\n }\n },\n updateLogo: function (printer) {\n var logo = printer.get(\"printergroups\").findBy(\"logo\");\n if (logo) {\n return PrinterImageRoute['default'].updatePrinters(this.services.gateway, [printer], logo);\n } else {\n return Ember.RSVP.resolve();\n }\n }\n\n });\n\n});","define('dashboard/pods/printer/form/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"printer/form\",\n didInsertElement: function () {\n var _this = this;\n this.$().on(\"validated submit\", function (ev) {\n var gatewayValid = _this.get(\"controller.model.gateway.id\");\n _this.$(\"#gateway label\").toggleClass(\"error\", !gatewayValid);\n var deviceValid = !!_this.get(\"controller.props.selectedDevice\");\n _this.$(\"#printer label\").toggleClass(\"error\", !deviceValid);\n return !!(gatewayValid && deviceValid);\n });\n },\n formatNoAvailablePrinter: function () {\n return \"No more printers are available\";\n },\n formatSearchingPrinter: function () {\n return \"Searching gateway printers...\";\n }\n });\n\n});","define('dashboard/pods/printergroup/edit/controller', ['exports', 'dashboard/pods/printergroup/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/printergroup/edit/route', ['exports', 'dashboard/pods/printergroup/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/printergroup/form/controller', ['exports', 'attic/computed'], function (exports, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n // provides arrays of IDs to select2, and as they're changed populate\n // model.logo and model.printers with actual printer instances\n logo: computed.select2ToModel(\"model.logo\", \"props.printerimages\"),\n printers: computed.select2ToModelArray(\"model.printers\", \"props.printers\")\n });\n\n});","define('dashboard/pods/printergroup/form/route', ['exports', 'attic/routes/form', 'ember-notify', 'attic/utils', 'dashboard/pods/printerimage/form/route'], function (exports, FormRoute, Notify, utils, PrinterImageRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"printergroup\",\n afterModel: function (model) {\n var _this = this;\n return Ember.RSVP.Promise.all([this.store.find(\"printerimage\"), this.store.find(\"printer\"), model.get(\"printers\"), model.get(\"logo\")]).then(function (results) {\n _this.get(\"controllerProps\").setProperties({\n printerimages: results[0],\n printers: results[1]\n });\n });\n },\n actions: {\n submit: function () {\n var _this = this;\n this.currentModel.save().then(function () {\n Notify['default'].success(_this.get(\"messages.saveSuccess\"));\n return _this.updatePrinters().then(function () {\n return _this.transitionTo(\"printergroups\");\n });\n }).catch(function (err) {\n return utils.handleError(err, _this.get(\"messages.saveFailed\"));\n });\n }\n },\n updatePrinters: function () {\n var _this = this;\n var logo = this.currentModel.get(\"logo\");\n if (logo) {\n return this.currentModel.get(\"printers\").then(function (printers) {\n return PrinterImageRoute['default'].updatePrinters(_this.services.gateway, printers, logo);\n });\n }\n }\n });\n\n});","define('dashboard/pods/printergroup/form/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"printergroup/form\",\n didInsertElement: function () {\n this.$().closest(\"[data-abide]\").foundation(\"abide\");\n },\n formatLogoSelection: (function () {\n var _this = this;\n return function (object) {\n var container = _this.$(\"<div></div>\"),\n imgElement = _this.$(\"<img/>\"),\n labelElement = _this.$(\"<span></span>\");\n\n imgElement.attr(\"class\", \"printer-group-logo-selection-img\");\n imgElement.attr(\"src\", object.logo.get(\"previewImageURL\"));\n\n labelElement.attr(\"class\", \"printer-group-logo-selection-label\");\n labelElement.text(object.logo.get(\"name\"));\n\n container.append(imgElement);\n container.append(labelElement);\n\n return container;\n };\n }).property(),\n formatLogoResult: (function () {\n var _this = this;\n return function (object) {\n var container = _this.$(\"<div></div>\"),\n imgElement = _this.$(\"<img/>\"),\n labelElement = _this.$(\"<span></span>\");\n\n imgElement.attr(\"class\", \"printer-group-logo-result-item-img\");\n imgElement.attr(\"src\", object.logo.get(\"previewImageURL\"));\n\n labelElement.attr(\"class\", \"printer-group-logo-result-item-label\");\n labelElement.text(object.logo.get(\"name\"));\n container.append(imgElement);\n container.append(labelElement);\n\n return container;\n };\n }).property()\n });\n\n});","define('dashboard/pods/printergroups/create/controller', ['exports', 'dashboard/pods/printergroup/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/printergroups/create/route', ['exports', 'dashboard/pods/printergroup/form/route', 'attic/routes/create', 'attic/utils', 'ember-notify'], function (exports, FormRoute, CreateRoute, utils, Notify) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(CreateRoute['default'], {\n model: function (params) {\n var model = this.store.createRecord(\"printergroup\");\n return model.get(\"printers\").then(function () {\n return model;\n });\n }\n });\n\n});","define('dashboard/pods/printergroups/create/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n didInsertElement: function () {\n this.$(\"form\").foundation(\"abide\");\n }\n });\n\n});","define('dashboard/pods/printergroups/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/printergroups/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"printergroup\"\n });\n\n});","define('dashboard/pods/printergroups/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/printerimage/edit/route', ['exports', 'dashboard/pods/printerimage/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(EditRoute['default'], {\n typeKey: \"printerimage\",\n messages: {\n saveSuccess: \"Printer logo saved\"\n }\n });\n\n});","define('dashboard/pods/printerimage/form/route', ['exports', 'attic/routes/form', 'attic/utils', 'ember-notify', 'dashboard/pods/printerimage/form/route'], function (exports, FormRouteMixin, utils, Notify, PrinterImageRoute) {\n\n 'use strict';\n\n var RSVP = Ember.RSVP.Promise;\n var FormRoute = Ember.Route.extend(FormRouteMixin['default'], {\n typeKey: \"printerimage\",\n messages: {\n noLogoMessage: \"Logo is required\",\n logoSaved: \"Printer logo saved\"\n },\n afterModel: function (model) {\n var _this = this;\n return RSVP.all([this.store.find(\"printergroup\"), model.get(\"printergroups\")]).then(function (results) {\n _this.set(\"controllerProps\", {\n printergroups: results[0]\n });\n });\n },\n actions: {\n submit: function () {\n var _this = this;\n var image = this.currentModel;\n if (!image.get(\"preview\") || !image.get(\"processed\")) {\n return Notify['default'].error(this.messages.noLogoMessage);\n }\n return image.save().then(function () {\n Notify['default'].success(_this.get(\"messages.saveSuccess\"));\n return _this.updatePrinters().then(function () {\n return _this.transitionTo(\"printerimages\");\n }).catch(); // errors are handled in updatePrinters\n }).catch(function (err) {\n return utils.handleError(err, _this.get(\"messages.saveFailed\"));\n });\n }\n },\n updatePrinters: function () {\n var _this = this;\n var allPrinters = [];\n // get all the printers for the selected groups\n return this.currentModel.get(\"printergroups\").then(function (groups) {\n return RSVP.all(groups.map(function (group) {\n return group.get(\"printers\").then(function (printers) {\n return allPrinters.pushObjects(printers);\n });\n }));\n }).then(function () {\n return updatePrinters(_this.services.gateway, allPrinters, _this.currentModel);\n });\n }\n });\n\n function updatePrinters(gatewayService, printers, printerimage) {\n var notification = Notify['default'].info(\"Updating printer logos\");\n return RSVP.all(printers.map(function (printer) {\n return gatewayService.updatePrinterLogo(printer, printerimage);\n })).then(function () {\n notification.send(\"close\"); // close the previous notification\n Notify['default'].success(\"Printer logos updated\");\n }, function (err) {\n return utils.handleError(err, \"Error updating printer logos\");\n });\n }\n FormRoute.reopenClass({\n updatePrinters: updatePrinters\n });\n\n exports['default'] = FormRoute;\n\n});","define('dashboard/pods/printerimage/form/view', ['exports', 'ember-notify'], function (exports, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"printerimage/form\",\n submitLabel: Ember.computed(\"isProcessing\", function () {\n return this.get(\"isProcessing\") ? \"Processing\" : \"Submit\";\n }),\n didInsertElement: function () {\n var model = this.get(\"controller.model\");\n this.set(\"initialPreview\", Ember.copy(model.get(\"preview\")));\n this.set(\"initialProcessed\", Ember.copy(model.get(\"processed\")));\n },\n actions: {\n uploadLogo: function () {\n var _this = this;\n var model = this.get(\"controller.model\"),\n inkfileBlob,\n api = this.container.lookup(\"service:api\");\n\n this.set(\"isProcessing\", true);\n\n this.services.fileuploader.upload(\"receipt_printer_logo\").then(function (result) {\n if (!result || result.length <= 0) {\n return Notify['default'].error(\"Upload failed\");\n }\n\n inkfileBlob = result[0];\n\n var deleteOldFilePromises = [],\n preview = model.get(\"preview\"),\n previewURLMatch = model.get(\"preview.url\") === _this.get(\"initialPreview.url\"),\n processed = model.get(\"processed\"),\n processedURLMatch = model.get(\"processed.url\") === _this.get(\"initialProcessed.url\");\n\n if (preview && !previewURLMatch) {\n deleteOldFilePromises.push(_this.services.fileuploader.remove(model.get(\"preview\")));\n }\n\n if (processed && !processedURLMatch) {\n deleteOldFilePromises.push(_this.services.fileuploader.remove(model.get(\"processed\")));\n }\n\n return Ember.RSVP.Promise.all(deleteOldFilePromises);\n }).then(function () {\n return api.post(\"printerimages/processimage\", JSON.stringify({ imageToProcess: inkfileBlob }), {\n timeout: 15000,\n contentType: \"application/json; charset=utf-8\"\n });\n }).then(function (result) {\n var model = _this.get(\"controller.model\");\n model.set(\"preview\", result.previewImage);\n model.set(\"processed\", result.processed);\n }).finally(function () {\n return _this.set(\"isProcessing\", false);\n });\n }\n }\n });\n\n});","define('dashboard/pods/printerimages/create/route', ['exports', 'dashboard/pods/printerimage/form/route', 'attic/routes/create', 'dashboard/config/environment'], function (exports, FormRoute, CreateRoute, config) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(CreateRoute['default'], {\n model: function () {\n return this.store.createRecord(\"printerimage\", {\n keycode: config['default'].printerImageKeyCodes.logo\n });\n }\n });\n\n});","define('dashboard/pods/printerimages/index/controller', ['exports', 'ember-notify', 'attic/utils', 'attic/routes/index'], function (exports, Notify, utils, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/printerimages/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"printerimage\"\n });\n\n});","define('dashboard/pods/printerimages/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/printers/create/controller', ['exports', 'dashboard/pods/printer/form/controller'], function (exports, PrinterController) {\n\n\t'use strict';\n\n\texports['default'] = PrinterController['default'];\n\n});","define('dashboard/pods/printers/create/route', ['exports', 'dashboard/pods/printer/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/printers/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/printers/index/route', ['exports', 'ember-notify', 'attic/routes/index'], function (exports, Notify, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"printer\",\n model: function () {\n return this.store.find(\"printer\");\n }\n });\n\n});","define('dashboard/pods/printers/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/product/edit/controller', ['exports', 'dashboard/pods/product/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/product/edit/route', ['exports', 'dashboard/pods/product/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/product/edit/view', ['exports', 'dashboard/pods/product/form/view'], function (exports, FormView) {\n\n\t'use strict';\n\n\texports['default'] = FormView['default'];\n\n});","define('dashboard/pods/product/form/basic/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"product/form/basic\",\n imageSize: {\n minWidth: 212,\n minHeight: 290\n },\n setSelect: (function () {\n return [0, 0, this.get(\"imageSize.minWidth\"), this.get(\"imageSize.minHeight\")];\n }).property(\"imageSize.minWidth\", \"imageSize.minHeight\"),\n aspectRatio: 0.731,\n minSizeToCrop: (function () {\n return [this.get(\"imageSize.minWidth\"), this.get(\"imageSize.minHeight\")];\n }).property(\"imageSize.minWidth\", \"imageSize.minHeight\"),\n actions: {\n uploadImage: function () {\n var _this = this;\n return this.services.fileuploader.upload(\"product\").then(function (InkBlob) {\n var blob = InkBlob.objectAt(0);\n return _this.services.fileuploader.getStats(blob, {\n width: true,\n height: true\n }).then(function (size) {\n // Minimum upload dimensions for an image should be 212px x 290px.\n if (size.width < _this.imageSize.minWidth || size.height < _this.imageSize.minHeight) {\n Notify.alert(\"Minimum upload dimensions for an image should be \" + _this.imageSize.minWidth + \"px x \" + _this.imageSize.minHeight + \"px.\");\n return _this.services.fileuploader.remove(blob);\n }\n\n return _this.set(\"controller.newImage\", blob);\n });\n });\n }\n }\n\n });\n\n});","define('dashboard/pods/product/form/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n queryParams: [\"tab\"],\n\n tab: null,\n errorTabs: [],\n tabHasError: (function () {\n var tabs = this.get(\"errorTabs\");\n return [\"basic\", \"options-instructions\", \"sizes-prices\"].reduce(function (acc, key) {\n acc[key] = tabs.contains(key);\n return acc;\n }, {});\n }).property(\"errorTabs\"),\n\n optionsWithProduct: Ember.computed.filterBy(\"options\", \"hasProduct\", true),\n addedOptionProducts: Ember.computed.mapBy(\"optionsWithProduct\", \"product.resolved\"),\n optionsWithProductGroup: Ember.computed.filterBy(\"options\", \"hasGroup\", true),\n addedOptionProductGroups: Ember.computed.mapBy(\"optionsWithProductGroup\", \"group.resolved\"),\n selectedOptionProducts: [],\n selectedOptionProductGroups: [],\n selectedInstructions: [],\n availableProducts: Ember.computed.filterBy(\"all.products\", \"isNew\", false),\n availableProductGroups: Ember.computed.filterBy(\"all.productgroups\", \"isNew\", false),\n availableInstructions: (function () {\n var added = this.get(\"instructions\");\n return this.get(\"all.instructions\").filter(function (instruction) {\n return !added.contains(instruction);\n });\n }).property(\"all.instructions.[]\", \"instructions.[]\"),\n isAddOptionModalOpen: false,\n isAddInstructionModalOpen: false,\n isAddOptionConfirmDisabled: (function () {\n return Ember.isEmpty(this.get(\"selectedOptionProducts\")) && Ember.isEmpty(this.get(\"selectedOptionProductGroups\"));\n }).property(\"selectedOptionProducts.[]\", \"selectedOptionProductGroups.[]\"),\n isAddInstructionConfirmDisabled: (function () {\n return Ember.isEmpty(this.get(\"selectedInstructions\"));\n }).property(\"selectedInstructions.[]\"),\n\n actions: {\n addOptions: function () {\n if (this.get(\"isAddOptionConfirmDisabled\")) {\n return;\n }\n\n var store = this.get(\"store\"),\n model = this.get(\"model\");\n\n this.get(\"selectedOptionProducts\").map(function (product) {\n return store.createRecord(\"option\", {\n parent: model,\n product: product\n });\n });\n\n this.get(\"selectedOptionProductGroups\").map(function (productgroup) {\n return store.createRecord(\"option\", {\n parent: model,\n group: productgroup\n });\n });\n\n this.send(\"closeAddOptionModal\");\n },\n showAddOptionModal: function () {\n this.set(\"selectedOptionProducts\", []);\n this.set(\"selectedOptionProductGroups\", []);\n this.set(\"isAddOptionModalOpen\", true);\n },\n closeAddOptionModal: function () {\n this.set(\"isAddOptionModalOpen\", false);\n },\n removeOption: function (option) {\n this.get(\"model.options\").removeObject(option);\n },\n addInstructions: function () {\n this.get(\"instructions\").pushObjects(this.get(\"selectedInstructions\"));\n this.get(\"selectedInstructions\").clear();\n this.send(\"closeAddInstructionModal\");\n },\n showAddInstructionModal: function () {\n this.set(\"isAddInstructionModalOpen\", true);\n },\n closeAddInstructionModal: function () {\n this.set(\"isAddInstructionModalOpen\", false);\n },\n removeInstruction: function (instruction) {\n var iitems = instruction.get(\"instructionitems\").toArray();\n var piItems = this.get(\"model.productinstructionitems\").filter(function (piitem) {\n return iitems.contains(piitem.get(\"instructionitem\"));\n });\n\n this.get(\"model.instructions\").removeObject(instruction);\n this.get(\"model.productinstructionitems\").removeObjects(piItems);\n\n piItems.forEach(function (piItem) {\n var prices = piItem.get(\"prices\");\n piItem.deleteRecord();\n prices.forEach(function (price) {\n return price.deleteRecord();\n });\n });\n },\n scanBarcode: function () {},\n openTab: function (name) {\n this.set(\"tab\", name);\n },\n selectErrorTab: function () {\n var tabs = this.get(\"errorTabs\");\n var current = this.get(\"tab\");\n\n if (!tabs.contains(current)) {\n var indices = {\n basic: 0,\n \"options-instructions\": 1,\n \"sizes-prices\": 2\n };\n\n var tab = tabs.sort(function (a, b) {\n return indices[a] - indices[b];\n })[0];\n this.send(\"openTab\", tab);\n }\n },\n errorsOn: function (tabs) {\n if (!Em.isArray(tabs)) {\n tabs = [tabs];\n }\n this.set(\"errorTabs\", tabs);\n }\n }\n });\n // TODO\n\n});","define('dashboard/pods/product/form/groupoptionitem/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n onSelectionRulesChanged: (function () {\n var parentOption = this.get(\"model.option\");\n\n // this doesn't feel like the right solution here\n // maybe this should happen on serialize?\n if (parentOption) {\n var defaultItems = parentOption.get(\"items\").filterBy(\"isDefault\");\n if (defaultItems.get(\"length\") < parentOption.get(\"minimum\")) {\n this.set(\"model.isDefault\", true);\n }\n }\n }).observes(\"model.option.minimum\", \"model.option.maximum\", \"model.isDefault\")\n });\n\n});","define('dashboard/pods/product/form/option/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"product/form/option\"\n });\n\n});","define('dashboard/pods/product/form/optionitem/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n optionBinding: \"model\",\n variantBinding: \"parentController.variant\",\n // TODO this property should have depencies on 'option.poitems.@each.product', 'variant' but this\n // causes tests failures. Ignoring for now because it's not necessary\n poitem: (function () {\n return this.get(\"option\").poitemFor(this.get(\"option.product.resolved\"), this.get(\"variant\"));\n }).property(),\n // TODO this property should have depencies on 'option.poitems.@each.product', 'variant' but this\n // causes tests failures. Ignoring for now because it's not necessary\n goitem: (function () {\n return this.get(\"option\").goitemFor(this.get(\"option.group.resolved\"), this.get(\"variant\"));\n }).property()\n });\n\n});","define('dashboard/pods/product/form/route', ['exports', 'ember-notify', 'attic/routes/form'], function (exports, Notify, FormRoute) {\n\n 'use strict';\n\n var RSVP = Ember.RSVP.Promise;\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n\n typeKey: \"product\",\n messages: {\n saveFailed: \"Failed to save the product\",\n saveSuccess: \"Product saved\",\n variantEditing: \"Changes on Sizes & Prices tab are not finished\",\n priceEditing: \"Changes to prices on Sizes & Prices tab are not finished\",\n imageRemoved: \"Product image has been removed\",\n noImage: \"Product does not have an image\"\n },\n\n afterModel: function (model) {\n return RSVP.all([this.all([\"productgroup\", \"surcharge\", \"instruction\"]), model.get(\"productgroups\"), model.get(\"surcharges\"), model.get(\"instruction\")]);\n },\n setupController: function setupController(controller, model) {\n this._super(controller, model);\n controller.set(\"all.products\", this.store.all(\"product\"));\n },\n actions: {\n // submit: function() {\n // // TODO: None of this actually works.\n // // I suspect this is because we hang on to the records we want to destroy, here,\n // // in uncommittedRecords inside the demuxing code, attic/app/pods/application/store.\n // // WHATEVER.\n\n // var removeEmbeddedRecord =\n // record => record.get('isNew') ? record.destroyRecord() : record.deleteRecord();\n // var clean = (arr, hasDefaultData) => arr.filter(hasDefaultData).map(removeEmbeddedRecord);\n\n // // prune any empty options\n // this.currentModel.get('options').forEach(option => {\n // var statusEnabled = item => item.get('status') === 'enabled';\n\n // clean(option.get('poitems'), statusEnabled);\n // clean(option.get('goitems'), statusEnabled);\n // });\n\n // // prune any empty piItems\n // clean(this.currentModel.get('productinstructionitems'),\n // piItem => piItem.get('status') === 'enabled' && !piItem.get('price.amount'));\n\n // return this._super();\n // },\n createVariant: function () {\n this.currentModel.get(\"variants\").pushObject(this.store.createRecord(\"variant\"));\n },\n removeVariant: function (variant) {\n variant.deleteRecord();\n },\n saved: function () {\n Notify['default'].success(this.get(\"messages.saveSuccess\"));\n this.transitionTo(\"products\");\n },\n cancel: function () {\n this.transitionTo(\"products\");\n },\n confirmCroppedImage: function (image, selection) {\n var _this = this;\n return selection ? this.services.fileuploader.convert(\"product\", image, { crop: selection }, false).then(function (croppedImage) {\n return _this.set(\"controller.model.image\", croppedImage);\n }) : this.set(\"controller.model.image\", image);\n },\n removeImage: function () {\n var _this = this;\n if (this.get(\"controller.model.image\")) {\n return this.services.fileuploader.remove(this.get(\"controller.model.image\")).then(function () {\n return Notify['default'].success(_this.get(\"messages.imageRemoved\"));\n });\n } else {\n Notify['default'].warning(this.get(\"messages.noImage\"));\n }\n }\n },\n\n deactivate: function () {\n this.set(\"controller.isAddOptionModalOpen\", false);\n this.set(\"controller.isAddInstructionModalOpen\", false);\n this.set(\"controller.errorTabs\", []);\n if (!Ember.testing) this.set(\"controller.tab\", null);\n this._super();\n }\n });\n\n});","define('dashboard/pods/product/form/variant/controller', ['exports', 'attic/utils', 'attic/computed'], function (exports, utils, computed) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n variantBinding: \"model\",\n\n init: function () {\n this._super();\n this.pricing = this.container.lookup(\"service:pricing\");\n },\n\n product: Ember.computed.alias(\"parentController.model\"),\n priceType: null,\n price: computed.firstPrice(\"model.prices\", { create: true }),\n hasManySize: Ember.computed.gt(\"variant.product.variants.length\", 1),\n isEditingSize: (function () {\n return this.get(\"hasManySize\") && Ember.isEmpty(this.get(\"variant.name\"));\n }).property(\"hasManySize\", \"variant.name\"),\n\n actions: {\n remove: function () {\n if (this.get(\"variant.default\")) {\n return this.notify.warning(\"Default size cannot be deleted.\");\n }\n this.send(\"removeVariant\", this.get(\"content\"));\n }\n }\n });\n\n});","define('dashboard/pods/product/form/variant/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"product/form/variant\",\n\n didInsertElement: function () {\n var _this = this;\n this.$(\"*\").removeAttr(\"tabindex\");\n this.$(\".size .edit .buttons a\").attr(\"tabindex\", \"-1\");\n var setFocus = function () {\n _this.$(\"button.disabled\").attr(\"tabindex\", \"-1\");\n if (_this.get(\"controller.isEditingSize\")) {\n Ember.run.next(function () {\n if (!_this.$()) return;\n _this.$(\".size input\").focus();\n });\n }\n };\n Ember.run.schedule(\"afterRender\", function () {\n setFocus();\n });\n },\n\n onEditPrice: (function () {\n var _this = this;\n if (this.get(\"controller.isEditingPrice\")) {\n Ember.run.next(function () {\n _this.$(\"button.disabled\").attr(\"tabindex\", \"-1\");\n });\n }\n }).observes(\"controller.isEditingPrice\")\n });\n\n});","define('dashboard/pods/product/form/view', ['exports'], function (exports) {\n\n 'use strict';\n\n var schedule = function (once, ctx, fn) {\n if (!fn && !ctx) {\n fn = once;\n ctx = this;\n once = false;\n } else if (!fn) {\n fn = ctx;\n ctx = this;\n }\n\n Em.run(function () {\n if (once === \"once\") {\n Em.run.scheduleOnce(\"afterRender\", ctx, fn);\n } else {\n Em.run.schedule(\"afterRender\", ctx, fn);\n }\n });\n };\n\n exports['default'] = Em.View.extend({\n sendErrorTabs: function () {\n var tabs = this.$(\"[data-invalid]\").parents(\".content\").toArray().map(function (el) {\n return $(el).attr(\"id\");\n });\n this.get(\"controller\").send(\"errorsOn\", tabs);\n },\n\n didInsertElement: function () {\n var _this = this;\n this.set(\"controller.view\", this);\n\n var scheduleSending = function () {\n return schedule(\"once\", _this, _this.sendErrorTabs);\n };\n\n this.$(\"[data-abide]\").on(\"change\", scheduleSending).on(\"valid\", scheduleSending).on(\"invalid\", function () {\n scheduleSending();\n schedule(function () {\n return _this.get(\"controller\").send(\"selectErrorTab\");\n });\n });\n\n this.$(\"[data-abide] .confirm-input input\").on(\"focusout\", scheduleSending);\n }\n });\n\n});","define('dashboard/pods/product/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n beforeModel: function () {\n return this.all(\"product\");\n }\n });\n\n});","define('dashboard/pods/productgroup/edit/controller', ['exports', 'dashboard/pods/productgroup/form/controller'], function (exports, ProductGroupController) {\n\n\t'use strict';\n\n\texports['default'] = ProductGroupController['default'];\n\n});","define('dashboard/pods/productgroup/edit/route', ['exports', 'dashboard/pods/productgroup/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(EditRoute['default'], {\n supportReadOnly: true\n });\n\n});","define('dashboard/pods/productgroup/form/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n modelIsSaving: false,\n isAddProductOpen: false,\n excludedProducts: Ember.computed.filterBy(\"products\", \"isNew\", false),\n isAddProductDisabled: Ember.computed.empty(\"props.selectedProducts\"),\n filteredProduct: (function () {\n var _this = this;\n return this.get(\"products\").filter(function (product) {\n return product.get(\"name\").match(new RegExp(_this.get(\"productQuery\") || \"\", \"i\"));\n });\n }).property(\"products.[]\", \"products.@each.name\", \"productQuery\"),\n\n actions: {\n showAddProductModal: function () {\n this.set(\"isAddProductOpen\", true);\n },\n closeAddProductModal: function () {\n this.set(\"isAddProductOpen\", false);\n },\n addProducts: function () {\n if (this.get(\"isAddProductDisabled\")) {\n return;\n }\n\n this.get(\"products\").pushObjects(this.get(\"props.selectedProducts\"));\n this.set(\"props.selectedProducts\", Ember.A());\n this.send(\"closeAddProductModal\");\n },\n removeProduct: function (product) {\n this.get(\"products\").removeObject(product);\n },\n showDeleteProductGroupModal: function () {\n this.set(\"isDeleting\", true);\n },\n closeDeleteProductGroupModal: function () {\n this.set(\"isDeleting\", false);\n },\n finishedDeletion: function () {\n this.send(\"closeDeleteProductGroupModal\");\n },\n addVariant: function () {\n this.get(\"model.variants\").pushObject(this.store.createRecord(\"variant\", {\n \"default\": this.get(\"model.variants.length\") ? false : true\n }));\n }\n }\n });\n\n});","define('dashboard/pods/productgroup/form/route', ['exports', 'attic/routes/form', 'ember-notify'], function (exports, FormRoute, Notify) {\n\n 'use strict';\n\n var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } };\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"productgroup\",\n messages: {\n saveSuccess: \"Product group saved\",\n deleteSuccess: \"Product group deleted\",\n deleteFailed: \"Product group not deleted\"\n },\n\n afterModel: function (model) {\n var _this = this;\n var promises = [this.store.find(\"product\"), this.store.find(\"surcharge\"), model.get(\"products\"), model.get(\"surcharges\"), this._super(model)];\n return Ember.RSVP.Promise.all(promises).then(function (results) {\n var _results = _slicedToArray(results, 2);\n\n var products = _results[0];\n var surcharges = _results[1];\n _this.get(\"controllerProps\").setProperties({\n products: products,\n surcharges: surcharges,\n selectedProducts: []\n });\n });\n },\n\n actions: {\n submit: function () {\n var _this = this;\n this.set(\"controller.modelIsSaving\", true);\n return this._super().finally(function () {\n return Ember.run.next(function () {\n return _this.set(\"controller.modelIsSaving\", false);\n });\n });\n },\n saved: function () {\n Notify['default'].success(this.get(\"messages.saveSuccess\"));\n this.go(\"productgroups\");\n },\n cancel: function () {\n this.go(\"productgroups\");\n },\n delete: function () {\n var _this = this;\n return this.get(\"currentModel\").destroyRecord().then(function () {\n Notify['default'].success(_this.get(\"messages.deleteSuccess\"));\n _this.transitionTo(\"productgroups\");\n }).catch(function () {\n return Notify['default'].alert(_this.get(\"messages.deleteFailed\"));\n }).finally(function () {\n return _this.get(\"controller\").send(\"finishedDeletion\");\n });\n }\n }\n });\n\n});","define('dashboard/pods/productgroup/form/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.View.extend({\n didInsertElement: function () {\n this.$().closest(\"[data-abide]\").foundation(\"abide\");\n }\n });\n\n});","define('dashboard/pods/productgroup/route', ['exports', 'dashboard/pods/productgroups/route'], function (exports, ProductGroupsRoute) {\n\n\t'use strict';\n\n\texports['default'] = ProductGroupsRoute['default'];\n\n});","define('dashboard/pods/productgroup/variant/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n editingName: false,\n editingPrice: false,\n accordionOpen: false,\n modelIsSavingBinding: \"parentController.modelIsSaving\",\n\n emptyPrices: Ember.computed.empty(\"content.prices\"),\n hasGlobalPrices: (function () {\n return this.get(\"editingPrice\") || !this.get(\"emptyPrices\");\n }).property(\"editingPrice\", \"emptyPrices\"),\n\n pgroup: Ember.computed.alias(\"parentController.model\"),\n\n init: function () {\n if (this.get(\"content.isNew\")) {\n this.set(\"editingName\", true);\n this.set(\"accordionOpen\", true);\n }\n },\n\n actions: {\n useGlobalPrice: function () {\n if (!this.get(\"emptyPrices\")) {\n var price = this.get(\"store\").createRecord(\"price\");\n this.get(\"content.prices\").pushObject(price);\n }\n this.set(\"editingPrice\", true);\n },\n removeVariant: function () {\n this.get(\"content\").deleteRecord();\n }\n }\n });\n\n});","define('dashboard/pods/productgroup/variant/product/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n parent: Ember.computed.alias(\"parentController.pgroup\"),\n parentVariant: Ember.computed.alias(\"parentController.content\"),\n product: Ember.computed.alias(\"content\"),\n\n referencesGlobalPrices: Ember.computed.alias(\"parentController.hasGlobalPrices\"),\n hasMultipleVariants: Em.computed.gt(\"product.variants.length\", 1),\n\n groupitem: (function () {\n var _this = this;\n // TODO workaround for https://github.com/emberjs/data/issues/2363 #ember-data-issues\n if (this.get(\"parentController.modelIsSaving\")) {\n return this.store.createRecord(\"groupitem\");\n }\n\n var item = this.get(\"parentVariant.groupitems\").find(function (existing) {\n return existing.get(\"product.resolved\") === _this.get(\"product\") && existing.get(\"parent.id\") === _this.get(\"parent.id\");\n });\n\n if (!item) {\n item = this.store.createRecord(\"groupitem\", {\n parent: this.get(\"parent\"),\n product: this.get(\"product\"),\n parent_variant: this.get(\"parentVariant\"),\n product_variant: this.get(\"product.defaultVariant\")\n });\n }\n\n return item;\n }).property(\"parentVariant.groupitems.[]\"),\n\n // it's theoretically possible for defaultVariant to be null\n // if we have a product with no variants\n // TODO: handle this case here\n currentPrices: Em.computed.alias(\"groupitem.product_variant.prices\"),\n\n overridePrices: (function () {\n if (this.get(\"referencesGlobalPrices\")) {\n return [];\n } else {\n return this.get(\"groupitem.prices\");\n }\n }).property(\"referencesGlobalPrices\", \"groupitem.prices\"),\n\n inheritedOverridePrices: (function () {\n if (this.get(\"referencesGlobalPrices\")) {\n return this.get(\"parentVariant.prices\");\n } else {\n return this.get(\"currentPrices\");\n }\n }).property(\"referencesGlobalPrices\", \"parentVariant.prices\", \"currentPrices\")\n\n });\n\n});","define('dashboard/pods/productgroups/create/controller', ['exports', 'dashboard/pods/productgroup/form/controller'], function (exports, ProductGroupController) {\n\n\t'use strict';\n\n\texports['default'] = ProductGroupController['default'];\n\n});","define('dashboard/pods/productgroups/create/route', ['exports', 'dashboard/pods/productgroup/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/productgroups/create/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n didInsertElement: function () {\n this.$(\"form\").foundation(\"abide\");\n }\n });\n\n});","define('dashboard/pods/productgroups/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/productgroups/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"productgroup\"\n });\n\n});","define('dashboard/pods/productgroups/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/productgroups/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n afterModel: function (model) {\n var _this = this;\n return this.store.find(\"productgroup\").then(function (results) {\n return _this.get(\"controllerProps\").setProperties({\n searchable: results,\n found: null,\n query: null,\n filter: null\n });\n });\n },\n foundSearchModel: (function () {\n var model = this.get(\"controllerProps.found\");\n if (model) {\n this.transitionTo(\"productgroup.edit\", model);\n }\n }).observes(\"controllerProps.found\"),\n actions: {\n filterIndex: function () {}\n }\n });\n // default empty implementation for non-index routes\n\n});","define('dashboard/pods/products/create/controller', ['exports', 'dashboard/pods/product/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/products/create/route', ['exports', 'dashboard/pods/product/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(CreateRoute['default'], {\n model: function (params) {\n var product = this._super(params);\n product.get(\"variants\").addObject(this.store.createRecord(\"variant\", {\n name: null,\n default: true\n }));\n return product;\n }\n });\n\n});","define('dashboard/pods/products/create/view', ['exports', 'dashboard/pods/product/form/view'], function (exports, FormView) {\n\n\t'use strict';\n\n\texports['default'] = FormView['default'];\n\n});","define('dashboard/pods/products/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/products/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"product\"\n });\n\n});","define('dashboard/pods/products/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/products/instruction/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n productinstructionitems: (function () {\n var _this = this;\n var product = this.get(\"parentController.model\");\n return this.get(\"instructionitems\").map(function (iitem) {\n var piItem = product.getProductInstructionItem(iitem);\n if (!piItem) {\n piItem = _this.get(\"store\").createRecord(\"productinstructionitem\", { product: product, instructionitem: iitem, status: \"enabled\" });\n product.get(\"productinstructionitems\").pushObject(piItem);\n }\n return piItem;\n });\n }).property(\"parentController.model.instructions.[]\", \"parentController.model.productinstructionitems.[]\"),\n actions: {\n remove: function () {\n this.send(\"removeInstruction\", this.get(\"content\"));\n }\n }\n });\n\n});","define('dashboard/pods/products/option/controller', ['exports', 'ember-notify'], function (exports, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n defaultItems: Ember.computed.filterBy(\"items\", \"status\", \"default\"),\n defaultItem: (function (key, val) {\n // this property only exists to provide a value for the radio buttons when\n // maximum is 1 so return undefined to avoid confusion\n if (this.get(\"maximum\") > 1) return;\n if (arguments.length > 1) {\n this.get(\"defaultItems\").map(function (item) {\n return item.set(\"isDefault\", item === val);\n });\n }\n\n // make sure we _always_ have an option selected when they become radio buttons.\n var firstDefault = this.get(\"defaultItems.firstObject\");\n if (!firstDefault) {\n firstDefault = this.get(\"items.firstObject\");\n firstDefault.set(\"isDefault\", true);\n }\n\n return firstDefault;\n }).property(\"defaultItems.[]\"),\n\n onOptionChanged: (function () {\n if (!this.get(\"group.resolved.id\")) return;\n Ember.run.once(this, this.updateGoitems);\n }).observes(\"model.group.resolved\").on(\"init\"),\n\n updateGoitems: function () {\n var _this = this;\n // ensure that an optionitem exists for each product in the group\n var items = this.get(\"items\");\n var products = this.get(\"group.products\");\n var existingProductIds = items.mapBy(\"product.id\");\n var toCreate = products.filter(function (product) {\n return !existingProductIds.contains(product.get(\"id\"));\n });\n var newItems = toCreate.map(function (product) {\n return _this.get(\"store\").createRecord(\"groupoptionitem\", {\n option: _this.get(\"model\"),\n product: product,\n group: _this.get(\"group\"),\n status: \"enabled\"\n });\n });\n this.get(\"goitems\").pushObjects(newItems);\n },\n\n checkMaximum: (function () {\n Ember.run.once(this, this._checkMaximum);\n }).observes(\"defaultItems.[]\", \"maximum\"),\n _checkMaximum: (function () {\n var maximum = this.get(\"maximum\");\n if (!maximum) return;\n var exceeded;\n this.get(\"defaultItems\").reduce(function (num, item) {\n if (num >= maximum) {\n exceeded = true;\n item.set(\"isDefault\", false);\n }\n return num + 1;\n }, 0);\n if (exceeded) Notify['default'].warning(\"The maximum for this option is \" + maximum + \", so you can't select\\n more than \" + maximum + \" default products.\");\n }).on(\"init\"),\n actions: {\n remove: function () {\n this.send(\"removeOption\", this.get(\"content\"));\n }\n }\n });\n\n});","define('dashboard/pods/products/search/route', ['exports', 'ember-notify'], function (exports, Notify) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n model: function (params) {\n return this.store.find(\"product\", { search: params.keyword });\n },\n serialize: function (keyword) {\n return { keyword: keyword || \"\" };\n }\n });\n\n});","define('dashboard/pods/recover/controller', ['exports', 'attic/services/api', 'attic/utils', 'ember-notify'], function (exports, api, utils, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n reset: (function () {\n this.setProperties({\n isProcessing: false,\n successful: false,\n emailNotExist: false,\n email: \"\"\n });\n }).on(\"init\"),\n\n isTerminal: false,\n needs: [\"application\"],\n init: function () {\n this.set(\"isTerminal\", window.FranqENV.modulePrefix === \"terminal\");\n },\n\n actions: {\n recover: function () {\n var _this = this;\n this.set(\"isProcessing\", true);\n this.set(\"emailNotExist\", false);\n\n var loc = window.location,\n uri = this.container.lookup(\"router:main\").generate(\"reset-password\"),\n api = this.container.lookup(\"service:api\");\n api.post(\"recover\", {\n email: this.get(\"email\"),\n link: \"\" + loc.protocol + \"//\" + loc.host + \"\" + uri + \"?token={{token}}\"\n }).then(function () {\n return _this.set(\"successful\", true);\n }).catch(function (err) {\n if (!err.jqXHR || err.jqXHR.status == 404) {\n _this.set(\"emailNotExist\", true);\n } else {\n utils.handleError(err, \"Failed to send recovery email\");\n }\n }).finally(function () {\n return _this.set(\"isProcessing\", false);\n });\n }\n }\n });\n\n});","define('dashboard/pods/recover/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.Route.extend({\n deactivate: function () {\n this.get(\"controller\").reset();\n }\n });\n\n});","define('dashboard/pods/recover/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.View.extend({\n didInsertElement: function () {\n this.$().foundation(\"abide\");\n }\n });\n\n});","define('dashboard/pods/reset-password/controller', ['exports', 'attic/utils', 'ember-notify'], function (exports, utils, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.ObjectController.extend({\n reset: function () {\n this.set(\"isProcessing\", false);\n },\n needs: [\"application\"],\n actions: {\n submit: function () {\n var _this = this;\n this.set(\"isProcessing\", true);\n this.get(\"model\").save().then(function () {\n Notify['default'].success(\"Password saved\");\n _this.transitionToRoute(\"app\");\n }, function (err) {\n return utils.handleError(err, \"Failed to reset password\");\n });\n }\n }\n });\n\n});","define('dashboard/pods/reset-password/route', ['exports', 'attic/routes/require-login'], function (exports, RequireLoginRoute) {\n\n 'use strict';\n\n exports['default'] = RequireLoginRoute['default'].extend({\n model: function () {\n return this.auth.get(\"user\");\n },\n deactivate: function (controller, model) {\n this.get(\"controller\").reset();\n }\n });\n\n});","define('dashboard/pods/reset-password/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Em.View.extend({\n didInsertElement: function () {\n this.$().foundation(\"abide\");\n // input component doesn't accept 'data-equalto'\n this.$(\"#repeat-newpassword\").attr(\"data-equalto\", \"newpassword\");\n }\n });\n\n});","define('dashboard/pods/surcharge/edit/controller', ['exports', 'dashboard/pods/surcharge/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/surcharge/edit/route', ['exports', 'dashboard/pods/surcharge/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/surcharge/form/basic/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"surcharge/form/basic\",\n didInsertElement: function () {\n this.$().foundation({\n abide: {\n validators: {\n positiveNumber: function (el, required, parent) {\n var value = el.value;\n return !Ember.isEmpty(value) && value > 0;\n }\n }\n }\n });\n } }).featureFlags({\n \"advanced-surcounts\": {\n didInsertElement: function () {\n this._super();\n this.$().foundation({\n abide: {\n validators: {\n afterDate: function (el, required, parent) {\n var from = document.getElementsByName(\"dr-from\")[0].value,\n to = el.value,\n valid = new Date(from) < new Date(to);\n\n return valid;\n }\n }\n }\n });\n }\n }\n });\n\n});","define('dashboard/pods/surcharge/form/controller', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Controller.extend({\n onSurcountValueChanged: (function () {\n this.updateSurcountValue();\n }).observes(\"surcountValue\"),\n updateSurcountValue: function () {\n if (!this.get(\"isSurcountValid\")) return;\n var input = this.get(\"surcountValue\");\n var value = new BigNumber(input);\n value = this.get(\"inDiscountMode\") ? value.negated() : value;\n if (this.get(\"model.isPercentage\")) {\n this.get(\"model\").setValue(value.dividedBy(100), \"percentage\");\n } else {\n this.get(\"model\").setValue(value, \"absolute\");\n }\n },\n isSurcountValid: (function () {\n var value = this.get(\"surcountValue\");\n return !Ember.isEmpty(value) && value > 0;\n }).property(\"surcountValue\"),\n actions: {\n toggleType: function (mode) {\n this.set(\"inDiscountMode\", mode === \"discount\");\n this.updateSurcountValue();\n },\n toggleSurcountType: function (type) {\n this.get(\"model\").setValue(0, type);\n this.updateSurcountValue();\n } }\n }).featureFlags({\n \"advanced-surcounts\": {\n actions: {\n submit: function () {\n if (this.get(\"model.conditions.daterange\")) {\n this.mutate(\"model.conditions.daterange.from\", function (str) {\n return new Date(str);\n });\n this.mutate(\"model.conditions.daterange.to\", function (str) {\n return new Date(str);\n });\n }\n return true;\n },\n createCondition: function (condition) {\n this.set(\"model.conditions.\" + condition, this.store.createFragment(condition));\n },\n removeCondition: function (condition) {\n this.set(\"model.conditions.\" + condition, null);\n }\n }\n }\n });\n\n});","define('dashboard/pods/surcharge/form/route', ['exports', 'attic/routes/form', 'ember-notify'], function (exports, FormRoute, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"surcharge\",\n messages: {\n saveSuccess: \"Surcharge saved\",\n deleteSuccess: \"Surcharge deleted\",\n deleteFailed: \"Surcharge not deleted\"\n },\n setupController: function (controller, model) {\n this._super(controller, model);\n controller.set(\"inDiscountMode\", model.get(\"type\") === \"discount\");\n controller.set(\"surcountValue\", model.get(\"readableValue\"));\n },\n actions: {\n delete: function () {\n var _this = this;\n return this.get(\"currentModel\").destroyRecord().then(function () {\n Notify['default'].success(_this.get(\"messages.deleteSuccess\"));\n _this.transitionTo(\"surcharges\");\n }).catch(function () {\n return Notify['default'].alert(_this.get(\"messages.deleteFailed\"));\n });\n }\n }\n });\n\n});","define('dashboard/pods/surcharges/create/controller', ['exports', 'dashboard/pods/surcharge/form/controller'], function (exports, FormController) {\n\n\t'use strict';\n\n\texports['default'] = FormController['default'];\n\n});","define('dashboard/pods/surcharges/create/route', ['exports', 'dashboard/pods/surcharge/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(CreateRoute['default'], {\n model: function (params) {\n var surcharge = this.store.createRecord(\"surcharge\");\n surcharge.setValue(0, \"absolute\");\n var conditions = this.store.createFragment(\"condition\");\n surcharge.set(\"conditions\", conditions);\n return surcharge;\n }\n });\n\n});","define('dashboard/pods/surcharges/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n 'use strict';\n\n exports['default'] = Ember.ArrayController.extend(index.Controller, {\n discounts: Ember.computed.filterBy(\"results\", \"type\", \"discount\"),\n surcharges: Ember.computed.filterBy(\"results\", \"type\", \"surcharge\"),\n activeTab: \"discounts\"\n });\n\n});","define('dashboard/pods/surcharges/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"surcharge\"\n });\n\n});","define('dashboard/pods/surcharges/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/temp/route', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend({\n model: function model() {\n return this.store.find(\"product\", 1);\n }\n });\n\n});","define('dashboard/pods/user/delete/route', ['exports'], function (exports) {\n\n\t'use strict';\n\n\texports['default'] = Ember.Route;\n\n});","define('dashboard/pods/user/edit/route', ['exports', 'dashboard/pods/user/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/user/form/route', ['exports', 'attic/routes/form', 'ember-notify'], function (exports, FormRoute, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"user\",\n messages: {\n saveFailed: \"Failed to save the user\",\n saveSuccess: \"User saved\"\n },\n afterModel: function (model) {\n return this.all([\"usergroup\", \"venue\"]);\n },\n actions: {\n submit: function () {\n // if usercode is \"\" or suchlikes, explicitly delete it\n if (!this.currentModel.get(\"usercode\")) {\n this.currentModel.set(\"usercode\", null);\n }\n this._super();\n }\n }\n });\n\n});","define('dashboard/pods/user/form/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n didInsertElement: function () {\n this.$().closest(\"[data-abide]\").foundation(\"abide\");\n },\n globalsVisible: (function () {\n // global details are visible\n // IF we're not in an organisation context (eg. at /profile)\n // OR we have details to display (ie. a cashier doesn't have an email - just a usercode)\n // note: we don't display the globals if we're creating a new user in organisation context\n return !this.get(\"organisationContext\") || this.get(\"controller.model.email\");\n }).property(\"controller.model.email\", \"organisationContext\"),\n globalsInvisible: (function () {\n return !this.get(\"globalsVisible\");\n }).property(\"globalsVisible\"),\n globalsEditable: (function () {\n if (!this.get(\"globalsVisible\")) {\n return false;\n }\n var modelId = this.get(\"controller.model.id\"),\n userId = this.get(\"controller.auth.user.id\"),\n editingCurrentUser = modelId && userId && modelId.toString() === userId.toString(),\n creating = this.get(\"controller.model.isNew\");\n return creating || editingCurrentUser;\n }).property(\"globalsVisible\", \"controller.model.id\", \"controller.model.isNew\", \"controller.auth.user.id\"),\n globalsImmutable: (function () {\n return !this.get(\"globalsEditable\");\n }).property(\"globalsEditable\"),\n organisationContext: (function () {\n // true within an organisation\n return true;\n }).property(),\n isCashier: (function () {\n return !Em.isEmpty(this.get(\"controller.model.usercode\")) || this.get(\"controller.model.isNew\");\n }).property(\"controller.model.usercode\", \"controller.model.isNew\"),\n actions: {\n uploadImage: function () {\n var _this = this;\n return this.services.fileuploader.upload(\"user\").then(function (InkBlob) {\n return _this.get(\"controller.model\").set(\"image\", InkBlob[0]);\n });\n }\n }\n });\n\n});","define('dashboard/pods/user/serializer', ['exports', 'dashboard/pods/application/serializer'], function (exports, AppSerializer) {\n\n 'use strict';\n\n exports['default'] = AppSerializer['default'].extend({\n normalize: function (type, hash, prop) {\n hash.links = hash.links || {};\n // the /api/v1/organisations route returns the set of orgs for the current user\n hash.links.organisations = \"/api/v1/organisations\";\n return this._super(type, hash, prop);\n }\n });\n\n});","define('dashboard/pods/usergroup/edit/route', ['exports', 'dashboard/pods/usergroup/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/usergroup/form/route', ['exports', 'attic/routes/form', 'ember-notify'], function (exports, FormRoute, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"usergroup\",\n messages: {\n saveSuccess: \"User group saved\"\n },\n\n afterModel: function (model) {\n var _this = this;\n var promises = [this.store.find(\"user\"), this.store.find(\"role\"),\n // pre-load users and roles\n model.get(\"users\"), model.get(\"roles\")];\n return Ember.RSVP.Promise.all(promises).then(function (results) {\n _this.set(\"controllerProps\", {\n users: results[0],\n roles: results[1]\n });\n });\n }\n\n });\n\n});","define('dashboard/pods/usergroups/create/route', ['exports', 'dashboard/pods/usergroup/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/usergroups/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/usergroups/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"usergroup\"\n });\n\n});","define('dashboard/pods/usergroups/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/users/create/route', ['exports', 'dashboard/pods/user/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/users/create/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n didInsertElement: function () {\n this.$(\"form\").foundation(\"abide\");\n }\n });\n\n});","define('dashboard/pods/users/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/users/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"user\"\n });\n\n});","define('dashboard/pods/users/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/venue/edit/route', ['exports', 'dashboard/pods/venue/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(EditRoute['default'], {\n model: function (params, transition, queryParams) {\n var venue = this._super(params, transition, queryParams);\n if (!venue.get(\"address\")) {\n venue.set(\"address\", this.store.createFragment(\"address\"));\n }\n return venue;\n }\n });\n\n});","define('dashboard/pods/venue/form/details/view', ['exports', 'ember-notify'], function (exports, Notify) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"venue/form/details\",\n imageSize: {\n minWidth: 118,\n minHeight: 80,\n maxWidth: 560,\n maxHeight: 370\n },\n aspectRatio: 1.475,\n minSizeToCrop: (function () {\n return [this.get(\"imageSize.minWidth\"), this.get(\"imageSize.minHeight\")];\n }).property(\"imageSize.minWidth\", \"imageSize.minHeight\"),\n\n didInsertElement: function () {\n var _this = this;\n var country = this.$(\"input[name=\\\"country\\\"]\");\n var city = this.$(\"input[name=\\\"city\\\"]\");\n var address1 = this.$(\"input[name=\\\"address1\\\"]\");\n var address2 = this.$(\"input[name=\\\"address2\\\"]\");\n var postcode = this.$(\"input[name=\\\"postcode\\\"]\");\n [country, city, address1, address2, postcode].forEach(function (input) {\n input.focusout(function () {\n // Ignore if address is empty\n if (!_this.get(\"controller.model.inputAddress\").trim()) {\n return;\n }\n _this.get(\"controller.addressLocator\").trigger(\"refreshMap\");\n });\n });\n },\n actions: {\n uploadImage: function () {\n var _this = this;\n return this.services.fileuploader.upload(\"venue\").then(function (InkBlob) {\n var blob = InkBlob.objectAt(0);\n return _this.services.fileuploader.getStats(blob, {\n width: true,\n height: true\n }).then(function (size) {\n // Minimum upload dimensions for an image should be 118px x 80px.\n if (size.width < _this.imageSize.minWidth || size.height < _this.imageSize.minHeight) {\n Notify['default'].alert(\"Minimum upload dimensions for an image should be \" + _this.imageSize.minWidth + \"px x \" + _this.imageSize.minHeight + \"px.\");\n return _this.services.fileuploader.remove(blob);\n } else if (size.width > _this.imageSize.maxWidth || size.height > _this.imageSize.maxHeight) {\n Notify['default'].alert(\"Maximun upload dimensions for an image should be \" + _this.imageSize.maxWidth + \"px x \" + _this.imageSize.maxHeight + \"px.\");\n return _this.services.fileuploader.remove(blob);\n }\n return _this.set(\"controller.newImage\", blob);\n });\n });\n }\n }\n });\n\n});","define('dashboard/pods/venue/form/route', ['exports', 'attic/routes/form'], function (exports, FormRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"venue\",\n actions: {\n confirmSave: function (image, selection) {\n var _this = this;\n return selection ? this.services.fileuploader.convert(\"venue\", image, { crop: selection }, false).then(function (croppedImage) {\n return _this.set(\"controller.model.image\", croppedImage);\n }) : this.set(\"controller.model.image\", image);\n }\n }\n });\n\n});","define('dashboard/pods/venues/create/route', ['exports', 'dashboard/pods/venue/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n 'use strict';\n\n exports['default'] = FormRoute['default'].extend(CreateRoute['default'], {\n model: function () {\n return this.store.createRecord(\"venue\").set(\"address\", this.store.createFragment(\"address\"));\n }\n });\n\n});","define('dashboard/pods/venues/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/venues/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"venue\"\n });\n\n});","define('dashboard/pods/venues/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/pods/zone/edit/route', ['exports', 'dashboard/pods/zone/form/route', 'attic/routes/edit'], function (exports, FormRoute, EditRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(EditRoute['default']);\n\n});","define('dashboard/pods/zone/form/route', ['exports', 'attic/routes/form'], function (exports, FormRoute) {\n\n 'use strict';\n\n var _slicedToArray = function (arr, i) { if (Array.isArray(arr)) { return arr; } else { var _arr = []; for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { _arr.push(_step.value); if (i && _arr.length === i) break; } return _arr; } };\n\n exports['default'] = Ember.Route.extend(FormRoute['default'], {\n typeKey: \"zone\",\n afterModel: function (model) {\n var _this = this;\n return Ember.RSVP.all([model.get(\"parent\"), this.store.findQuery(\"zone\", { venue: this.modelFor(\"venue\").get(\"id\") })]).then(function (results) {\n var _results = _slicedToArray(results, 2);\n\n var parent = _results[0];\n var zones = _results[1];\n _this.get(\"controllerProps\").setProperties({\n selectedParent: parent,\n zones: zones.filter(function (zone) {\n return !model.isParentOf(zone) && model !== zone;\n })\n });\n });\n },\n actions: {\n submit: function () {\n this.set(\"currentModel.venue\", this.modelFor(\"venue\"));\n this.set(\"currentModel.parent\", this.get(\"controller.props.selectedParent\"));\n return this._super();\n }\n }\n });\n\n});","define('dashboard/pods/zone/form/view', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.View.extend({\n templateName: \"zone/form\",\n didInsertElement: function () {\n this.$(\"form\").foundation({\n abide: {\n validators: {\n zoneName: function (el, required, parent) {\n var value = el.value;\n return !/[.]/.test(value) && !Ember.isEmpty(value);\n }\n }\n }\n });\n }\n });\n\n});","define('dashboard/pods/zones/create/route', ['exports', 'dashboard/pods/zone/form/route', 'attic/routes/create'], function (exports, FormRoute, CreateRoute) {\n\n\t'use strict';\n\n\texports['default'] = FormRoute['default'].extend(CreateRoute['default']);\n\n});","define('dashboard/pods/zones/index/controller', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.ArrayController.extend(index.Controller);\n\n});","define('dashboard/pods/zones/index/route', ['exports', 'attic/routes/index'], function (exports, IndexRoute) {\n\n 'use strict';\n\n exports['default'] = Ember.Route.extend(IndexRoute['default'], {\n typeKey: \"zone\",\n model: function () {\n return this.store.findQuery(this.get(\"typeKey\"), { venue: this.modelFor(\"venue\").get(\"id\") });\n },\n actions: {\n stopDeleting: function () {\n this._super();\n this.refresh();\n }\n }\n });\n\n});","define('dashboard/pods/zones/index/view', ['exports', 'attic/routes/index'], function (exports, index) {\n\n\t'use strict';\n\n\texports['default'] = Ember.View.extend(index.View);\n\n});","define('dashboard/router', ['exports', 'ember', 'dashboard/config/environment', 'ember-feature-flags/features'], function (exports, Ember, config, features) {\n\n 'use strict';\n\n var locationType = window.FranqENV && window.FranqENV.locationType || config['default'].locationType;\n var Router = Ember['default'].Router.extend({\n location: locationType\n });\n\n Router.map(function () {\n this.route(\"login\");\n this.route(\"logout\");\n this.route(\"recover\");\n this.route(\"reset-password\");\n this.route(\"unauthorised\");\n this.route(\"404\", { path: \"*path\" });\n this.route(\"500\");\n\n // login is required under app\n this.resource(\"app\", { path: \"/\" }, function () {\n this.route(\"changelog\");\n this.route(\"profile\");\n\n this.resource(\"organisations\", { path: \"/org\" }, function () {\n this.route(\"select\");\n this.route(\"create\");\n this.resource(\"organisation\", { path: \"/:organisation_id\" }, function () {\n this.route(\"edit\");\n\n this.resource(\"venues\", function () {\n this.route(\"create\");\n });\n this.resource(\"venue\", { path: \"/venue/:venue_id\" }, function () {\n this.route(\"edit\");\n\n if (featureEnabled(\"zones\")) {\n this.resource(\"zones\", function () {\n this.route(\"create\");\n });\n this.resource(\"zone\", { path: \"/zone/:zone_id\" }, function () {\n this.route(\"edit\");\n });\n }\n });\n\n this.resource(\"users\", { path: \"/employees\" }, function () {\n this.route(\"create\");\n });\n this.resource(\"user\", { path: \"/employee/:user_id\" }, function () {\n this.route(\"edit\");\n this.route(\"delete\");\n });\n\n this.resource(\"productgroups\", function () {\n this.route(\"create\");\n });\n this.resource(\"productgroup\", { path: \"/productgroup/:productgroup_id\" }, function () {\n this.route(\"edit\");\n this.route(\"delete\");\n });\n\n this.resource(\"usergroups\", function () {\n this.route(\"create\");\n });\n this.resource(\"usergroup\", { path: \"/usergroup/:usergroup_id\" }, function () {\n this.route(\"edit\");\n this.route(\"delete\");\n });\n\n this.resource(\"products\", function () {\n this.route(\"create\");\n //this.route('search', {path: '/search/:keyword'});\n });\n this.resource(\"product\", { path: \"/product/:product_id\" }, function () {\n this.route(\"edit\");\n });\n\n this.resource(\"printergroups\", function () {\n this.route(\"create\");\n });\n this.resource(\"printergroup\", { path: \"/printergroup/:printergroup_id\" }, function () {\n this.route(\"edit\");\n });\n\n this.resource(\"gateways\", function () {\n this.route(\"create\");\n });\n this.resource(\"gateway\", { path: \"/gateway/:gateway_id\" }, function () {\n this.route(\"edit\");\n this.route(\"devices\");\n });\n\n this.resource(\"printers\", function () {\n this.route(\"create\");\n });\n this.resource(\"printer\", { path: \"/printer/:printer_id\" }, function () {\n this.route(\"edit\");\n });\n\n\n this.resource(\"surcharges\", function () {\n this.route(\"create\");\n });\n this.resource(\"surcharge\", { path: \"/surcharge/:surcharge_id\" }, function () {\n this.route(\"edit\");\n this.route(\"delete\");\n });\n\n this.resource(\"printerimages\", function () {\n this.route(\"create\");\n });\n\n this.resource(\"printerimage\", { path: \"/printerimage/:printerimage_id\" }, function () {\n this.route(\"edit\");\n });\n\n this.resource(\"licenses\", function () {\n this.route(\"create\");\n });\n this.resource(\"license\", { path: \"/license/:license_id\" }, function () {\n this.route(\"edit\");\n this.route(\"delete\");\n });\n\n this.resource(\"instructions\", function () {\n this.route(\"create\");\n });\n this.resource(\"instruction\", { path: \"/instruction/:instruction_id\" }, function () {\n this.route(\"edit\");\n this.route(\"delete\");\n });\n\n this.resource(\"sizetemplates\", function () {\n this.route(\"create\");\n });\n this.resource(\"sizetemplate\", { path: \"/sizetemplates/:sizetemplates_id\" }, function () {\n this.route(\"edit\");\n this.route(\"delete\");\n });\n\n this.resource(\"menus\", function () {\n this.route(\"archived\");\n this.route(\"create\", function () {\n this.route(\"list\", { path: \"/list/:menulist_id\" });\n });\n });\n this.resource(\"menu\", { path: \"/menu/:menu_id\" }, function () {\n this.route(\"edit\", function () {\n this.route(\"list\", { path: \"/list/:menulist_id\" });\n });\n\n this.route(\"structure\");\n this.route(\"delete\");\n });\n\n\n // placeholder routes\n this.resource(\"reporting\");\n this.resource(\"customers\");\n this.resource(\"settings\");\n });\n });\n });\n if (config['default'].environment === \"development\") {\n this.route(\"temp\");\n }\n });\n\n exports['default'] = Router;\n\n function featureEnabled(flag) {\n // load all routes in testing because the router is only loader once\n return Ember['default'].testing || features['default'].enabled(flag);\n }\n\n});","define('dashboard/serializers/groupitem', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n prices: { serialize: \"records\", deserialize: \"ids\" }\n }\n });\n\n});","define('dashboard/serializers/groupoptionitem', ['exports', 'dashboard/pods/application/serializer', 'attic/utils/json-pointer-serializer'], function (exports, ApplicationSerializer, JsonPointerSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend(JsonPointerSerializer['default'], {\n attrs: {\n prices: { serialize: \"records\", deserialize: \"ids\" }\n },\n init: function init() {\n this._super();\n this.jsonPointers(\"parent_variant\", {\n records: \"option.parent.variants\",\n path: \"/product/variants\"\n });\n }\n });\n\n});","define('dashboard/serializers/instruction', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n instructionitems: { serialize: \"records\", deserialize: \"ids\" }\n }\n });\n\n});","define('dashboard/serializers/instructionitem', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n prices: { serialize: \"records\", deserialize: \"ids\" },\n productinstructionitems: { serialize: \"none\", deserialize: \"none\" }\n }\n });\n\n});","define('dashboard/serializers/lineitem', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n lineitems: { serialize: \"records\", deserialize: \"ids\" }\n },\n serialize: function (record, options) {\n if (record.get(\"isNew\")) record.setMeta({ cid: record.get(\"cid\") }); // for uniqueKeys\n if (record.get(\"isDirty\")) {\n record.setProperties({\n subtotal: record.get(\"computed.subtotal\"),\n tax: record.get(\"computed.totalTax\")\n });\n }\n return this._super(record, options);\n }\n });\n\n});","define('dashboard/serializers/menu', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n lists: { serialize: \"records\", deserialize: \"ids\" }\n }\n });\n\n});","define('dashboard/serializers/menulist', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n menu: { serialize: \"none\", deserialize: \"none\" },\n children: { serialize: \"records\", deserialize: \"ids\" },\n items: { serialize: \"records\", deserialize: \"ids\" }\n }\n });\n\n});","define('dashboard/serializers/option', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n poitems: { serialize: \"records\", deserialize: \"ids\" },\n goitems: { serialize: \"records\", deserialize: \"ids\" }\n }\n });\n\n});","define('dashboard/serializers/order', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n lineitems: { serialize: \"records\", deserialize: \"ids\" },\n transactions: { serialize: false }\n }\n });\n\n});","define('dashboard/serializers/organisation', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n owner: { serialize: \"none\", deserialize: \"none\" }\n }\n });\n\n});","define('dashboard/serializers/product', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n options: { serialize: \"records\", deserialize: \"ids\" },\n variants: { serialize: \"records\", deserialize: \"ids\" },\n productinstructionitems: { serialize: \"records\", deserialize: \"ids\" },\n prices: { serialize: \"records\", deserialize: \"ids\" },\n inOptions: { serialize: \"none\", deserialize: \"none\" }\n },\n\n typeForRoot: function (key) {\n switch (key) {\n case \"options\":\n return \"option\";\n case \"variants\":\n return \"variant\";\n case \"groupoptionitems\":\n return \"groupoptionitem\";\n case \"productoptionitems\":\n return \"productoptionitem\";\n default:\n return this._super(key);\n }\n }\n });\n\n});","define('dashboard/serializers/productgroup', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n variants: { serialize: \"records\", deserialize: \"ids\" }\n }\n });\n\n});","define('dashboard/serializers/productinstructionitem', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n prices: { serialize: \"records\", deserialize: \"ids\" }\n }\n });\n\n});","define('dashboard/serializers/productoptionitem', ['exports', 'dashboard/pods/application/serializer', 'attic/utils/json-pointer-serializer'], function (exports, ApplicationSerializer, JsonPointerSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend(JsonPointerSerializer['default'], {\n attrs: {\n prices: { serialize: \"records\", deserialize: \"ids\" }\n },\n init: function init() {\n this._super();\n this.jsonPointers(\"parent_variant\", {\n records: \"option.parent.variants\",\n path: \"/product/variants\"\n });\n }\n });\n\n});","define('dashboard/serializers/variant', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n groupitems: { serialize: \"records\", deserialize: \"ids\" },\n prices: { serialize: \"records\", deserialize: \"ids\" },\n productgroupitems: { serialize: \"none\", deserialize: \"none\" }\n }\n });\n\n});","define('dashboard/serializers/zone', ['exports', 'dashboard/pods/application/serializer'], function (exports, ApplicationSerializer) {\n\n 'use strict';\n\n exports['default'] = ApplicationSerializer['default'].extend({\n attrs: {\n children: { serialize: \"none\", deserialize: \"ids\" }\n },\n serialize: function (record, options) {\n var json = this._super(record, options);\n if (json.parent === undefined) {\n json.parent = null;\n }\n return json;\n }\n });\n\n});","define('dashboard/services/clock', ['exports'], function (exports) {\n\n 'use strict';\n\n exports['default'] = Ember.Object.extend({\n init: function () {\n this.define(\"hours\", 3600000);\n this.define(\"minutes\", 60000);\n this.define(\"seconds\", 1000);\n },\n define: function (prop, interval) {\n var _this = this;\n var started = false;\n function floor() {\n var time = Date.now();\n return time - time % interval;\n }\n Ember.defineProperty(this, prop, Ember.computed(function (key, val) {\n if (!started) startTimer();\n // this value will be cached until next set\n if (arguments.length > 1) return new Date(val);\n return new Date(floor());\n }));\n var startTimer = function () {\n var next = floor() + interval;\n setTimeout(function () {\n if (_this.get(\"isDestroyed\")) return;\n Ember.run(function () {\n return _this.set(prop, next);\n });\n startTimer();\n }, next - Date.now());\n started = true;\n };\n }\n });\n\n});","define('dashboard/services/ember-devtools', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n /* global DS */\n exports['default'] = Ember['default'].Object.extend({\n init: function () {\n this.global = this.global || window;\n this.console = this.console || window.console;\n this.registry = this.container.registry.dict || this.container.registry;\n if (DS !== undefined) {\n this.store = this.container.lookup(\"store:main\");\n this.typeMaps = this.store.typeMaps;\n }\n },\n consoleLog: function () {\n this.console.log.apply(this.console, arguments);\n },\n app: function (name) {\n name = name || \"main\";\n return this.container.lookup(\"application:\" + name);\n },\n route: function (name) {\n name = name || this.currentRouteName();\n return this.container.lookup(\"route:\" + name);\n },\n controller: function (name) {\n name = name || this.currentRouteName();\n return this.container.lookup(\"controller:\" + name);\n },\n model: function (name) {\n var controller = this.controller(name);\n return controller && controller.get(\"model\");\n },\n service: function (name) {\n return this.lookup(\"service:\" + name);\n },\n router: function (name) {\n name = name || \"main\";\n return this.container.lookup(\"router:\" + name).get(\"router\");\n },\n routes: function () {\n return Ember['default'].keys(this.router().recognizer.names);\n },\n view: function (id) {\n if (typeof id === \"object\") {\n id = id.id;\n }\n return Ember['default'].View.views[id];\n },\n currentRouteName: function () {\n return this.controller(\"application\").get(\"currentRouteName\");\n },\n currentPath: function () {\n return this.controller(\"application\").get(\"currentPath\");\n },\n log: function (promise, property, getEach) {\n var self = this;\n return promise.then(function (value) {\n self.global.$E = value;\n if (property) {\n value = value[getEach ? \"getEach\" : \"get\"].call(value, property);\n }\n self.consoleLog(value);\n }, function (err) {\n self.console.error(err);\n });\n },\n lookup: function (name) {\n return this.container.lookup(name);\n },\n lookupFactory: function (name) {\n return this.container.lookupFactory(name);\n },\n containerNameFor: function (object) {\n var keys = Object.keys(this.container.cache);\n for (var i = 0; i < keys.length; i++) {\n if (this.container.cache[keys[i]] === object) return keys[i];\n }\n },\n inspect: Ember['default'].inspect,\n logResolver: function (bool) {\n bool = typeof bool === \"undefined\" ? true : bool;\n Ember['default'].ENV.LOG_MODULE_RESOLVER = bool;\n },\n logAll: function (bool) {\n bool = typeof bool === \"undefined\" ? true : bool;\n var app = this.app();\n app.LOG_ACTIVE_GENERATION = bool;\n app.LOG_VIEW_LOOKUPS = bool;\n app.LOG_TRANSITIONS = bool;\n app.LOG_TRANSITIONS_INTERNAL = bool;\n this.logResolver(bool);\n },\n globalize: function () {\n var self = this;\n var props = [\"app\", \"container\", \"registry\", \"store\", \"typeMaps\", \"route\", \"controller\", \"model\", \"service\", \"routes\", \"view\", \"currentRouteName\", \"currentPath\", \"log\", \"lookup\", \"lookupFactory\", \"containerNameFor\", \"inspect\", \"logResolver\", \"logAll\"];\n // don't stomp on pre-existing global vars\n var skipGlobalize = this.constructor.skipGlobalize;\n if (skipGlobalize === null) {\n skipGlobalize = this.constructor.skipGlobalize = props.filter(function (prop) {\n return !Ember['default'].isNone(self.global[prop]);\n });\n }\n props.map(function (name) {\n if (skipGlobalize.indexOf(name) !== -1) return;\n var prop = self[name];\n if (typeof prop === \"function\") {\n prop = function () {\n return self[name].apply(self, arguments);\n };\n }\n self.global[name] = prop;\n });\n }\n }).reopenClass({\n skipGlobalize: null\n });\n\n});","define('dashboard/services/pricing', ['exports', 'dashboard/models/mixins/price-mixin'], function (exports, PriceMixin) {\n\n 'use strict';\n\n exports['default'] = Ember.Object.extend({\n // provides the same interface as a Price model\n PriceObject: null,\n for: function (model, options) {\n options = options || {};\n var price = this.priceObjectFor(model, options);\n return price.get(\"amount\");\n },\n forLineitem: function (li) {\n var price = this.priceObjectForLineitem(li);\n return price.get(\"amount\");\n },\n priceObjectFor: function (model, options) {\n //* debug */ console.log('priceObjectFor', model, options);\n var _ref = options || {};\n var product = _ref.product;\n var variant = _ref.variant;\n var quantity = _ref.quantity;\n Ember.assert(model.constructor.typeKey, \"PricingServicethisthis expects to be provided a Model instance but \" + model + \" was provided\");\n var typeKey = model.constructor.typeKey;\n var price, override;\n if (\"product\" === typeKey) {\n price = variant && variant.get(\"price\") || model.get(\"defaultVariant.price\");\n } else if (\"instructionitem\" === typeKey) {\n if (variant) {\n var piItem = variant.get(\"product\").getProductInstructionItem(model);\n override = piItem && piItem.get(\"price\");\n }\n price = override || model.get(\"price\") || this.newPriceObject({ value: 0 });\n } else if ([\"productoptionitem\", \"groupoptionitem\"].contains(typeKey)) {\n override = model.get(\"price\");\n price = override || model.get(\"product.defaultVariant.price\");\n } else if (\"surcount\" === typeKey) {\n // TODO - are there more variables here?\n price = model.get(\"price\");\n } else if (\"lineitem\" === typeKey) {\n price = this.priceObjectForLineitem(model);\n } else if (\"order\" === typeKey) {\n price = this.newPriceObject({\n amount: model.get(\"computed.total\"),\n includes_tax: true\n });\n } else {\n throw new Error(\"Unhandled model type \" + typeKey + \" in call to PricingService\");\n }\n if (!Ember.isNone(quantity) && quantity !== 1) {\n var amount = price.get(\"amount\");\n price = this.newPriceObject({\n amount: Ember.isNone(amount) ? null : amount.times(quantity),\n includes_tax: price.get(\"includes_tax\"),\n tax_exempt: price.get(\"tax_exempt\")\n });\n }\n return price;\n },\n priceObjectForLineitem: function (li) {\n var type = li.get(\"type\");\n var quantity = li.get(\"computed.quantity\");\n var price;\n if (type === \"product\") {\n price = this.priceObjectFor(li.get(\"product.resolved\"), {\n variant: li.get(\"variant.resolved\"),\n quantity: quantity\n });\n } else if ([\"productoptionitem\", \"groupoptionitem\"].contains(type)) {\n price = this.priceObjectFor(li.get(type + \".resolved\"), {\n variant: li.get(\"variant.resolved\"),\n quantity: quantity\n });\n } else if (type === \"instructionitem\") {\n price = this.priceObjectFor(li.get(\"instructionitem.resolved\"), {\n variant: li.get(\"parent.variant.resolved\"),\n quantity: quantity\n });\n } else if ([\"discount\", \"surcharge\"].contains(type)) {\n var meta = li.get(\"meta\");\n var adjustment;\n if (meta && meta.manualSurcount) {\n adjustment = meta.manualSurcount;\n } else {\n var surcount = li.get(\"surcharge\");\n Ember.assert(\"A \" + type + \" lineitem must contain a surcharge or meta.manualSurcount property\", surcount);\n adjustment = {\n type: surcount.get(\"isPercentage\") ? \"percentage\" : \"absolute\",\n amount: surcount.get(\"value\")\n };\n }\n price = this.priceObjectForSurcount(li.get(\"parent\"), adjustment.type, new BigNumber(adjustment.amount));\n } else {\n throw new Error(\"Unsupported lineitem type \" + type);\n }\n return price;\n },\n priceObjectForSurcount: function (parentLineitem, type, amount) {\n var _priceObjectFor$getProperties = this.priceObjectFor(parentLineitem).getProperties(\"includes_tax\", \"tax_exempt\");\n\n var includes_tax = _priceObjectFor$getProperties.includes_tax;\n var tax_exempt = _priceObjectFor$getProperties.tax_exempt;\n var adjustment = {\n amount: amount,\n includes_tax: includes_tax,\n tax_exempt: tax_exempt\n };\n if (type === \"percentage\") {\n var baseAmount = new BigNumber(parentLineitem.get(\"computed.unadjustedTotal\"));\n // TODO percentage amounts should be stored as percentages (not ratios)\n // but Dashboard will need to be changed to do this\n adjustment.amount = baseAmount.times(adjustment.amount);\n } else {\n var quantity = parentLineitem.get(\"computed.quantity\");\n adjustment.amount = adjustment.amount.times(quantity);\n }\n return this.newPriceObject(adjustment);\n },\n newPriceObject: function (attrs) {\n // circular dependency prevents us from doing on startup or init\n if (!this.PriceObject) {\n this.PriceObject = Ember.Object.extend(PriceMixin['default'], {\n taxService: this.container.lookup(\"service:tax\") });\n }\n if (attrs instanceof DS.Model) {\n attrs = attrs.getProperties(\"amount\", \"includes_tax\", \"tax_exempt\");\n }\n return this.PriceObject.create(attrs);\n }\n });\n\n});","define('dashboard/services/tax', ['exports'], function (exports) {\n\n 'use strict';\n\n // TODO this needs tests that encode all of our decisions about tax\n exports['default'] = Ember.Object.extend({\n\n rate: 1.1,\n\n for: function (model, options) {\n var price = this.pricing.priceObjectFor(model, options);\n return price.get(\"tax\");\n },\n\n forLineitem: function (li) {\n var price = this.pricing.priceObjectForLineitem(li);\n return price.get(\"tax\");\n },\n\n toIncPrice: function (price) {\n return bigNumber(price).times(this.rate);\n },\n\n toExPrice: function (price) {\n return bigNumber(price).dividedBy(this.rate);\n },\n\n taxForIncPrice: function (price) {\n return bigNumber(price).minus(this.toExPrice(price));\n },\n\n taxForExPrice: function (price) {\n return this.toIncPrice(price).minus(price);\n }\n\n });\n\n function bigNumber(num) {\n return num instanceof BigNumber ? num : new BigNumber(num);\n }\n\n});","define('dashboard/templates/404', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <button class=\\\"button primary try-back\\\">\\n Try going back to the \");\n stack1 = helpers._triageMustache.call(depth0, \"title\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </button>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='fullscreen'>\\n <div class=\\\"full-height\\\">\\n <div>\\n <img src='attic/images/franq-logo-white.png' class='logo'>\\n </div>\\n <div class='center-display'>\\n <div class=\\\"image-container\\\">\\n <img src='attic/images/franq-404.png' class='code-image'>\\n </div>\\n <p class='info-display'>\\n Whoops! Looks like there's been a slip up and we can't find\\n <br>\\n the page that you are looking for.\\n </p>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"app\", options) : helperMissing.call(depth0, \"link-to\", \"app\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/500', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n \n\n\n data.buffer.push(\"<div class='fullscreen'>\\n <div class=\\\"full-height\\\">\\n <div>\\n <img src='attic/images/franq-logo-white.png' class='logo'>\\n </div>\\n <div class='center-display'>\\n <div class=\\\"image-container\\\">\\n <img src='attic/images/franq-500.png' class='code-image'>\\n </div>\\n <p class='info-display'>\\n Whoops! Something has gone wrong.\\n <br>\\n We're experiencing an internal server problem. Please try later.\\n </p>\\n </div>\\n </div>\\n</div>\\n\");\n \n });\n\n});","define('dashboard/templates/app', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '';\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='profile left'\\n data-dropdown='profile-dropdown' data-options='is_hover:true'>\\n Hi, \");\n stack1 = helpers._triageMustache.call(depth0, \"auth.user.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" <i class='settings icon-cog'></i>\\n </div>\\n <ul id='profile-dropdown' class='f-dropdown' data-dropdown-content>\\n <li>\");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"app.profile\", options) : helperMissing.call(depth0, \"link-to\", \"app.profile\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</li>\\n <li>\");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"logout\", options) : helperMissing.call(depth0, \"link-to\", \"logout\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</li>\\n </ul>\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n \n data.buffer.push(\"Profile\");\n }\n\n function program6(depth0,data) {\n \n \n data.buffer.push(\"Sign Out\");\n }\n\n function program8(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"login\", options) : helperMissing.call(depth0, \"link-to\", \"login\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program9(depth0,data) {\n \n \n data.buffer.push(\"Login\");\n }\n\n function program11(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['search-input'] || (depth0 && depth0['search-input']),options={hash:{\n 'class': (\"left x-acl-handled global-search\"),\n 'placeholder': (\"'A whole wheel of cheese'\")\n },hashTypes:{'class': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'class': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"search-input\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program13(depth0,data) {\n \n \n data.buffer.push(\"Franq Dashboard\");\n }\n\n data.buffer.push(\"<div id='cn' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"fixedWidth\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div class='bg-left'>&nbsp;</div>\\n <div class='bg-right'>&nbsp;</div>\\n <section id='hd' class='top-bar fixed'>\\n <div class='row'>\\n <div class='columns'>\\n <div class='bd'>\\n <div class='left'>\\n <button class='back left x-acl-handled' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"back\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class=\\\"icon-chevron-left\\\"></i>Back\\n </button>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"impos-logo-white left medium-hidden x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"app\", options) : helperMissing.call(depth0, \"link-to\", \"app\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"auth.isLoggedIn\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(8, program8, data),fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div class='right'>\\n \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"global-search\", options) : helperMissing.call(depth0, \"if-feature\", \"global-search\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"franq-logo left medium-hidden x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(13, program13, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"app\", options) : helperMissing.call(depth0, \"link-to\", \"app\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n </div>\\n </div>\\n </section>\\n <div id='content-cn' class='row'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"outlet\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/app/changelog', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression(helpers._triageMustache.call(depth0, \"changelog\", {hash:{\n 'unescaped': (\"true\")\n },hashTypes:{'unescaped': \"STRING\"},hashContexts:{'unescaped': depth0},contexts:[depth0],types:[\"ID\"],data:data})));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['ember-spinner'] || (depth0 && depth0['ember-spinner']),options={hash:{\n 'config': (\"default\"),\n 'class': (\"left\")\n },hashTypes:{'config': \"STRING\",'class': \"STRING\"},hashContexts:{'config': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"ember-spinner\", options))));\n data.buffer.push(\"\\n <p>Loading changelog...</p>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div id='content' class='column'>\\n <div class='bd'>\\n \");\n stack1 = helpers['if'].call(depth0, \"changelogIsLoaded\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/application', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n stack1 = helpers._triageMustache.call(depth0, \"outlet\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n data.buffer.push(escapeExpression((helper = helpers.outlet || (depth0 && depth0.outlet),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data},helper ? helper.call(depth0, \"modal\", options) : helperMissing.call(depth0, \"outlet\", \"modal\", options))));\n data.buffer.push(\"\\n\");\n stack1 = helpers._triageMustache.call(depth0, \"ember-notify\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/accordion-button', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"extraDisplay\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'class': (\"large\"),\n 'action': (\"toggle\"),\n 'icon': (\"icon-chevron-down\"),\n 'text': (\"See less\")\n },hashTypes:{'class': \"STRING\",'action': \"STRING\",'icon': \"STRING\",'text': \"STRING\"},hashContexts:{'class': depth0,'action': depth0,'icon': depth0,'text': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <span>\\n <a class='see-less' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"toggle\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">See less</a>\\n </span>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"extraDisplay\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'class': (\"large\"),\n 'action': (\"toggle\"),\n 'icon': (\"icon-chevron-right\"),\n 'text': (\"See more\")\n },hashTypes:{'class': \"STRING\",'action': \"STRING\",'icon': \"STRING\",'text': \"STRING\"},hashContexts:{'class': depth0,'action': depth0,'icon': depth0,'text': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program5(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <span>\\n <a class='see-more' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"toggle\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">See more</a>\\n </span>\\n \");\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, \"open\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/accordion-header', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"title\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" <span class='description'>\");\n stack1 = helpers._triageMustache.call(depth0, \"description\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"toggle\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['x-tag'] || (depth0 && depth0['x-tag']),options={hash:{\n 'tagName': (\"titleTagName\")\n },hashTypes:{'tagName': \"ID\"},hashContexts:{'tagName': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"x-tag\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</a>\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/acl-delete-link', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <p class=\\\"lead\\\">Delete \");\n stack1 = helpers._triageMustache.call(depth0, \"typeKey\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</p>\\n <p>Are you sure you want to delete \");\n stack1 = helpers._triageMustache.call(depth0, \"deleting.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"?</p>\\n\");\n return buffer;\n }\n\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'permission': (\"permission\"),\n 'model': (\"model\"),\n 'title': (\"title\"),\n 'innerClass': (\"innerClass\"),\n 'action': (\"openModal\"),\n 'icon': (\"icon\")\n },hashTypes:{'permission': \"ID\",'model': \"ID\",'title': \"ID\",'innerClass': \"ID\",'action': \"STRING\",'icon': \"ID\"},hashContexts:{'permission': depth0,'model': depth0,'title': depth0,'innerClass': depth0,'action': depth0,'icon': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'label': (\"Delete\"),\n 'open': (\"deleting\"),\n 'action': (\"action\"),\n 'cancel': (\"closeModal\"),\n 'x-acl-handled': (true)\n },hashTypes:{'label': \"STRING\",'open': \"ID\",'action': \"STRING\",'cancel': \"STRING\",'x-acl-handled': \"BOOLEAN\"},hashContexts:{'label': depth0,'open': depth0,'action': depth0,'cancel': depth0,'x-acl-handled': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/acl-link', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"action\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"innerClass :x-acl-handled\"),\n 'title': (\"title\")\n },hashTypes:{'class': \"STRING\",'title': \"ID\"},hashContexts:{'class': depth0,'title': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"action\", \"model\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"icon\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <i \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"icon\")\n },hashTypes:{'class': \"ID\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></i>\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"model\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(10, program10, data),fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program6(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'title': (\"title\"),\n 'class': (\"innerClass\"),\n 'classNames': (\"x-acl-handled\")\n },hashTypes:{'title': \"ID\",'class': \"ID\",'classNames': \"STRING\"},hashContexts:{'title': depth0,'class': depth0,'classNames': depth0},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0,depth0],types:[\"ID\",\"ID\"],data:data},helper ? helper.call(depth0, \"route\", \"model\", options) : helperMissing.call(depth0, \"link-to\", \"route\", \"model\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program7(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"icon\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(8, program8, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program8(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <i \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"icon\")\n },hashTypes:{'class': \"ID\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></i>\\n \");\n return buffer;\n }\n\n function program10(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'title': (\"title\"),\n 'class': (\"innerClass\"),\n 'classNames': (\"x-acl-handled\")\n },hashTypes:{'title': \"ID\",'class': \"ID\",'classNames': \"STRING\"},hashContexts:{'title': depth0,'class': depth0,'classNames': depth0},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:[\"ID\"],data:data},helper ? helper.call(depth0, \"route\", options) : helperMissing.call(depth0, \"link-to\", \"route\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, \"allowed\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/action-buttons', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<div class=\\\"actions\\\">\\n <a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :primary :confirm confirmDisabled:disabled\"),\n 'disabled': (\"confirmDisabled\")\n },hashTypes:{'class': \"STRING\",'disabled': \"ID\"},hashContexts:{'class': depth0,'disabled': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"confirm\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n <a class=\\\"button secondary cancel\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/bread-crumbs', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"crumb.isCurrent:current crumb.ellipsis\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"crumb.linkable\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"button\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0,depth0],types:[\"ID\",\"ID\"],data:data},helper ? helper.call(depth0, \"crumb.path\", \"crumb.model\", options) : helperMissing.call(depth0, \"link-to\", \"crumb.path\", \"crumb.model\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"crumb.label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='button unclickable'>\");\n stack1 = helpers._triageMustache.call(depth0, \"crumb.label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div>\\n \");\n return buffer;\n }\n\n stack1 = helpers.each.call(depth0, \"crumb\", \"in\", \"truncatedBreadCrumbs\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/color-palette', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class=\\\"block current\\\"></div>\\n\");\n }\n\n function program3(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class=\\\"block preset\\\" \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'style': (\"color.style\")\n },hashTypes:{'style': \"ID\"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"setColor\", \"color\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\"></div>\\n \");\n return buffer;\n }\n\n stack1 = (helper = helpers['color-picker'] || (depth0 && depth0['color-picker']),options={hash:{\n 'color': (\"color\")\n },hashTypes:{'color': \"ID\"},hashContexts:{'color': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"color-picker\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"<!-- here to eliminate the space!\\n--><div class=\\\"presets\\\">\\n \");\n stack1 = helpers.each.call(depth0, \"color\", \"in\", \"presets\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/color-picker', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'style': (\"style\")\n },hashTypes:{'style': \"ID\"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" class='color-swatch'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/confirm-input', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='value'>\");\n stack1 = helpers._triageMustache.call(depth0, \"displayValue\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div>\\n\");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='read'>\\n \");\n stack1 = (helper = helpers['x-tag'] || (depth0 && depth0['x-tag']),options={hash:{\n 'class': (\"value\"),\n 'tagName': (\"valueTagName\")\n },hashTypes:{'class': \"STRING\",'tagName': \"ID\"},hashContexts:{'class': depth0,'tagName': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"x-tag\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"edit\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\" href class='edit-link x-acl-handled'>edit</a>\\n </div>\\n <div class='edit clearfix'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['change-input'] || (depth0 && depth0['change-input']),options={hash:{\n 'placeholder': (\"placeholder\"),\n 'value': (\"inputValue\"),\n 'focus-in': (\"focusIn\"),\n 'focus-out': (\"focusOut\"),\n 'escape-press': (\"cancel\"),\n 'on-value-change': (\"onValueChange\"),\n 'data-abide-validator': (\"abideValidator\")\n },hashTypes:{'placeholder': \"ID\",'value': \"ID\",'focus-in': \"STRING\",'focus-out': \"STRING\",'escape-press': \"STRING\",'on-value-change': \"STRING\",'data-abide-validator': \"ID\"},hashContexts:{'placeholder': depth0,'value': depth0,'focus-in': depth0,'focus-out': depth0,'escape-press': depth0,'on-value-change': depth0,'data-abide-validator': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"change-input\", options))));\n data.buffer.push(\"\\n <small class='error'>\");\n stack1 = helpers._triageMustache.call(depth0, \"messages.abide\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</small>\\n <div class='buttons'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'text': (\"Confirm\"),\n 'icon': (\"icon-tick\"),\n 'circle': (true),\n 'action': (\"confirm\"),\n 'class': (\"confirm\")\n },hashTypes:{'text': \"STRING\",'icon': \"STRING\",'circle': \"BOOLEAN\",'action': \"STRING\",'class': \"STRING\"},hashContexts:{'text': depth0,'icon': depth0,'circle': depth0,'action': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'text': (\"Cancel\"),\n 'icon': (\"icon-x-outline\"),\n 'circle': (true),\n 'action': (\"cancel\"),\n 'class': (\"remove cancel\")\n },hashTypes:{'text': \"STRING\",'icon': \"STRING\",'circle': \"BOOLEAN\",'action': \"STRING\",'class': \"STRING\"},hashContexts:{'text': depth0,'icon': depth0,'circle': depth0,'action': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n <small class='error'>\");\n stack1 = helpers._triageMustache.call(depth0, \"error\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</small>\\n\");\n return buffer;\n }\n function program4(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"displayValue\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, \"readOnly\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/confirm-popover', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['action-buttons'] || (depth0 && depth0['action-buttons']),options={hash:{\n 'confirm': (\"confirm\"),\n 'cancel': (\"cancel\"),\n 'confirmDisabled': (\"confirmDisabled\"),\n 'label': (\"label\")\n },hashTypes:{'confirm': \"STRING\",'cancel': \"STRING\",'confirmDisabled': \"ID\",'label': \"ID\"},hashContexts:{'confirm': depth0,'cancel': depth0,'confirmDisabled': depth0,'label': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"action-buttons\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class=\\\"triangle\\\">\\n <div class=\\\"base\\\"></div>\\n <div class=\\\"filling\\\"></div>\\n</div>\\n<div class=\\\"body\\\">\\n <div class=\\\"content\\\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n stack1 = helpers['if'].call(depth0, \"includeActionButtons\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/drag-spacer', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1;\n\n\n data.buffer.push(\"<a class='add'>\");\n stack1 = helpers._triageMustache.call(depth0, \"text\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</a>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/ember-notify', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers.view.call(depth0, \"view.messageClass\", {hash:{\n 'message': (\"message\"),\n 'closeAfter': (\"closeAfter\"),\n 'class': (\"clearfix\")\n },hashTypes:{'message': \"ID\",'closeAfter': \"ID\",'class': \"STRING\"},hashContexts:{'message': depth0,'closeAfter': depth0,'class': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"close\", {hash:{\n 'target': (\"view\")\n },hashTypes:{'target': \"STRING\"},hashContexts:{'target': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\" class='close'>&times;</a>\\n <span class='message'>\");\n stack1 = helpers._triageMustache.call(depth0, \"message.message\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(escapeExpression(helpers._triageMustache.call(depth0, \"message.raw\", {hash:{\n 'unescaped': (\"true\")\n },hashTypes:{'unescaped': \"STRING\"},hashContexts:{'unescaped': depth0},contexts:[depth0],types:[\"ID\"],data:data})));\n data.buffer.push(\"</span>\\n \");\n return buffer;\n }\n\n stack1 = helpers.each.call(depth0, \"message\", \"in\", \"messages\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/f-hint', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n<div class='collapsed'>\\n <span class='message'>Welcome to ImPOS online</span>\\n <i class='icon icon-chevron-down x-acl-handled' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"showHint\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"></i>\\n</div>\\n\");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n<div class='expanded'>\\n <div class='cell'>\\n <div class='hd'>\\n <span class='greeting'>Hi,</span>\\n <span class='name'>\");\n stack1 = helpers._triageMustache.call(depth0, \"user.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n </div>\\n <div class='separator'></div>\\n <div class='bd'>\\n <div class='title'>Welcome to the ImPOS online beta</div>\\n <div class='content'>\\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam interdum nisl in tortor\\n malesuada dapibus. Nullam quam odio, tempor sit amet faucibus eget, ultrices non purus.\\n Cras at ligula porta, hendrerit libero at, malesuada eros. Sed bibendum augue at pretium.\\n </div>\\n </div>\\n </div>\\n <div class='cell'>\\n <button class='acknowledgement x-acl-handled' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"hideHintAndRemember\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n Ok, got it\\n <i class='icon icon-chevron-up'></i>\\n </button>\\n </div>\\n</div>\\n\");\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, \"collapsed\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/f-popover', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1;\n\n\n data.buffer.push(\"<div class=\\\"triangle\\\">\\n <div class=\\\"base\\\"></div>\\n <div class=\\\"filling\\\"></div>\\n</div>\\n<div class=\\\"body\\\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/filter-input', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'icon': (\"fi-magnifying-glass\"),\n 'tagName': (\"a\"),\n 'action': (\"toggle\")\n },hashTypes:{'icon': \"STRING\",'tagName': \"STRING\",'action': \"STRING\"},hashContexts:{'icon': depth0,'tagName': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n\");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"text\"),\n 'placeholder': (\"placeholder\"),\n 'value': (\"value\")\n },hashTypes:{'type': \"STRING\",'placeholder': \"ID\",'value': \"ID\"},hashContexts:{'type': depth0,'placeholder': depth0,'value': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/filterable-list-select', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <i class='fi-x large clear' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"clearSearchBox\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"></i>\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='header'>\\n <span class='info'>\");\n stack1 = helpers._triageMustache.call(depth0, \"resultHeaderInfoText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n <span class='checkbox'>\");\n stack1 = helpers._triageMustache.call(depth0, \"resultHeaderCheckboxText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n </div>\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <label class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'draggable': (\"stringifiedDraggable\"),\n 'ref': (\"item.associatedObject.id\")\n },hashTypes:{'draggable': \"ID\",'ref': \"ID\"},hashContexts:{'draggable': depth0,'ref': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"draggable\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </label>\\n \");\n return buffer;\n }\n function program6(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='line'>\\n <span class='text'>\");\n stack1 = helpers._triageMustache.call(depth0, \"item.text\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n </div>\\n \");\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['groupable-checkbox'] || (depth0 && depth0['groupable-checkbox']),options={hash:{\n 'class': (\"select\"),\n 'selections': (\"selectedItems\"),\n 'value': (\"item.associatedObject\"),\n 'disabled': (\"disabled\")\n },hashTypes:{'class': \"STRING\",'selections': \"ID\",'value': \"ID\",'disabled': \"ID\"},hashContexts:{'class': depth0,'selections': depth0,'value': depth0,'disabled': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"groupable-checkbox\", options))));\n data.buffer.push(\"\\n <span class='text'>\");\n stack1 = helpers._triageMustache.call(depth0, \"item.text\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n \");\n return buffer;\n }\n\n function program10(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"noResultsText\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"hasNoResultsLinkAction\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(13, program13, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program11(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <span class='no-results'>\");\n stack1 = helpers._triageMustache.call(depth0, \"noResultsText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n \");\n return buffer;\n }\n\n function program13(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <span class='no-results-action' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"onNoResultsLinkAction\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\");\n stack1 = helpers._triageMustache.call(depth0, \"noResultsLinkText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='search'>\\n <i class='icon-search icon'></i>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'class': (\"input\"),\n 'valueBinding': (\"searchTerm\"),\n 'placeholderBinding': (\"placeholderText\"),\n 'disabled': (\"disabled\"),\n 'classNameBindings': (\"disabled:disabled\")\n },hashTypes:{'class': \"STRING\",'valueBinding': \"STRING\",'placeholderBinding': \"STRING\",'disabled': \"ID\",'classNameBindings': \"STRING\"},hashContexts:{'class': depth0,'valueBinding': depth0,'placeholderBinding': depth0,'disabled': depth0,'classNameBindings': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"includeClearSearch\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n<div class='results'>\\n \");\n stack1 = helpers['if'].call(depth0, \"includeHeader\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='list'>\\n \");\n stack1 = helpers.each.call(depth0, \"item\", \"in\", \"filteredList\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(10, program10, data),fn:self.program(5, program5, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/form-cn', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='row heading'>\\n <div class='columns'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['form-heading'] || (depth0 && depth0['form-heading']),options={hash:{\n 'label': (\"label\"),\n 'typeKey': (\"typeKey\"),\n 'model': (\"model\")\n },hashTypes:{'label': \"ID\",'typeKey': \"ID\",'model': \"ID\"},hashContexts:{'label': depth0,'typeKey': depth0,'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-heading\", options))));\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"showCreate\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"create button large right-button\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data},helper ? helper.call(depth0, \"createLink\", options) : helperMissing.call(depth0, \"link-to\", \"createLink\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"createLabel\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"createLabel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n Add a new \");\n stack1 = helpers._triageMustache.call(depth0, \"typeName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program9(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='row'>\\n <div class='columns'>\\n <h3>\");\n stack1 = helpers._triageMustache.call(depth0, \"view.label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</h3>\\n </div>\\n </div>\\n \");\n return buffer;\n }\n\n function program11(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <ul class='form-controls'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n \");\n return buffer;\n }\n\n function program13(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program15(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='row hr'><div class='columns'>\\n <hr />\\n </div></div>\\n <div class='row form-buttons'>\\n <div class='columns button-group'>\\n <button type='submit' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'disabled': (\"submitDisabled\"),\n 'class': (\":button :primary :large submitDisabled:disabled:\")\n },hashTypes:{'disabled': \"ID\",'class': \"STRING\"},hashContexts:{'disabled': depth0,'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"submitLabel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </button>\\n \");\n stack1 = helpers['if'].call(depth0, \"includeCancel\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(16, program16, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"includeDelete\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(18, program18, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n\");\n return buffer;\n }\n function program16(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <a class='cancel large button secondary' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"cancelLabel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n \");\n return buffer;\n }\n\n function program18(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <a class='delete large button alert right right-button' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"openDeleteModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"deleteLabel\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(21, program21, data),fn:self.program(19, program19, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n \");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'class': (\"delete-modal\"),\n 'open': (\"isDeleting\"),\n 'action': (\"delete\"),\n 'x-acl-handled': (true),\n 'cancel': (\"closeDeleteModal\")\n },hashTypes:{'class': \"STRING\",'open': \"ID\",'action': \"STRING\",'x-acl-handled': \"BOOLEAN\",'cancel': \"STRING\"},hashContexts:{'class': depth0,'open': depth0,'action': depth0,'x-acl-handled': depth0,'cancel': depth0},inverse:self.noop,fn:self.program(23, program23, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program19(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"deleteLabel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program21(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n Delete this \");\n stack1 = helpers._triageMustache.call(depth0, \"typeName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program23(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <h3>Delete \");\n stack1 = helpers['if'].call(depth0, \"deleteTypeName\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(26, program26, data),fn:self.program(24, program24, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" </h3>\\n <div>\\n Are you sure you want to delete \");\n stack1 = helpers._triageMustache.call(depth0, \"model.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" ?\\n </div>\\n \");\n return buffer;\n }\n function program24(depth0,data) {\n \n var stack1;\n stack1 = helpers._triageMustache.call(depth0, \"deleteTypeName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n else { data.buffer.push(''); }\n }\n\n function program26(depth0,data) {\n \n var stack1;\n stack1 = helpers._triageMustache.call(depth0, \"typeName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n else { data.buffer.push(''); }\n }\n\n stack1 = helpers['if'].call(depth0, \"typeKey\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(8, program8, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n<div class='row'>\\n <div class='columns'>\\n \");\n stack1 = helpers['if'].call(depth0, \"includeControls\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(13, program13, data),fn:self.program(11, program11, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n\");\n stack1 = helpers['if'].call(depth0, \"includeButtons\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(15, program15, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/form-control', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <label>\\n \");\n stack1 = helpers['if'].call(depth0, \"useDefinition\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </label>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"<dfn>\");\n stack1 = helpers._triageMustache.call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</dfn>\");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='label'>\\n \");\n stack1 = helpers['if'].call(depth0, \"useDefinition\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n\");\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, \"useLabelTag\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/form-heading', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" /\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"pluralTypeName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" /\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n \n data.buffer.push(\"\\n Create\\n\");\n }\n\n function program8(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"model.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"type\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data},helper ? helper.call(depth0, \"pluralTypeKey\", options) : helperMissing.call(depth0, \"link-to\", \"pluralTypeKey\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n stack1 = helpers['if'].call(depth0, \"model.isNew\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/icon-button', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"<span class='hide-text'>\");\n stack1 = helpers._triageMustache.call(depth0, \"text\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\");\n return buffer;\n }\n\n data.buffer.push(\"<i \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"icon disabled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></i>\");\n stack1 = helpers['if'].call(depth0, \"text\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/image-cropper', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <p class='lead'>\");\n stack1 = helpers._triageMustache.call(depth0, \"title\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</p>\\n <div class='image'>\\n <div class='preview'>\\n <img class='cropper-display' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'src': (\"originalImage.url\")\n },hashTypes:{'src': \"ID\"},hashContexts:{'src': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"/>\\n </div>\\n </div>\\n\");\n return buffer;\n }\n\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'label': (\"Set logo\"),\n 'open': (\"originalImage\"),\n 'action': (\"confirmSave\"),\n 'cancel': (\"cancelSave\"),\n 'class': (\"confirm-set-logo-modal\"),\n 'confirmDisabled': (\"notReady\")\n },hashTypes:{'label': \"STRING\",'open': \"ID\",'action': \"STRING\",'cancel': \"STRING\",'class': \"STRING\",'confirmDisabled': \"ID\"},hashContexts:{'label': depth0,'open': depth0,'action': depth0,'cancel': depth0,'class': depth0,'confirmDisabled': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/index-cn', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"createLabel\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"createLabel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n Create a \");\n stack1 = helpers._triageMustache.call(depth0, \"typeName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='row heading'>\\n <div class='columns'>\\n <h1 class='left'>\");\n stack1 = helpers._triageMustache.call(depth0, \"pluralTypeName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</h1>\\n \");\n stack1 = (helper = helpers['acl-create-button'] || (depth0 && depth0['acl-create-button']),options={hash:{\n 'innerClass': (\"button right-button large\")\n },hashTypes:{'innerClass': \"STRING\"},hashContexts:{'innerClass': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-create-button\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['filter-input'] || (depth0 && depth0['filter-input']),options={hash:{\n 'value': (\"filterQuery\"),\n 'class': (\"large\"),\n 'placeholder': (\"filterPlaceholder\"),\n 'closable': (true),\n 'right': (true)\n },hashTypes:{'value': \"ID\",'class': \"STRING\",'placeholder': \"ID\",'closable': \"BOOLEAN\",'right': \"BOOLEAN\"},hashContexts:{'value': depth0,'class': depth0,'placeholder': depth0,'closable': depth0,'right': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"filter-input\", options))));\n data.buffer.push(\"\\n </div>\\n</div>\\n<div class='row'>\\n <div class='columns'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/menu-list-delete-modal', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <p class=\\\"lead\\\">Delete Menu List?</p>\\n \");\n stack1 = helpers['if'].call(depth0, \"deletingList.children\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <p>Are you sure you want to delete \");\n stack1 = helpers._triageMustache.call(depth0, \"deletingList.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"?</p>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <p class=\\\"has-children-message\\\">\\n Deleting ‘\");\n stack1 = helpers._triageMustache.call(depth0, \"deletingList.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"’ will also delete any sub menu lists.\\n </p>\\n \");\n return buffer;\n }\n\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'label': (\"Delete\"),\n 'open': (\"deletingList\"),\n 'action': (\"confirmDelete\"),\n 'cancel': (\"stopDeleting\"),\n 'class': (\"confirm-delete-modal\")\n },hashTypes:{'label': \"STRING\",'open': \"ID\",'action': \"STRING\",'cancel': \"STRING\",'class': \"STRING\"},hashContexts:{'label': depth0,'open': depth0,'action': depth0,'cancel': depth0,'class': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/menu-list-editor', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='content'>\\n <label class='label'> Name\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'class': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"menuList.name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Menu list name\")\n },hashTypes:{'class': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'class': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </label>\\n <label class='label color'> Colour Picker\\n \");\n data.buffer.push(escapeExpression((helper = helpers['color-palette'] || (depth0 && depth0['color-palette']),options={hash:{\n 'color': (\"menuList.color\")\n },hashTypes:{'color': \"ID\"},hashContexts:{'color': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"color-palette\", options))));\n data.buffer.push(\"\\n </label>\\n <label class='option'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'checked': (\"menuList.uses_variants\"),\n 'class': (\"show-variants checkbox\")\n },hashTypes:{'type': \"STRING\",'checked': \"ID\",'class': \"STRING\"},hashContexts:{'type': depth0,'checked': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <span class='label'>Display variant options</span>\\n </label>\\n <label class='option'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'checked': (\"menuList.isGroups\"),\n 'class': (\"auto-populate-groups checkbox\")\n },hashTypes:{'type': \"STRING\",'checked': \"ID\",'class': \"STRING\"},hashContexts:{'type': depth0,'checked': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <span class='label'>Auto populate groups</span>\\n </label>\\n </div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['action-buttons'] || (depth0 && depth0['action-buttons']),options={hash:{\n 'confirm': (\"confirmViaPopover\"),\n 'cancel': (\"cancelViaPopover\"),\n 'confirmDisabled': (\"confirmDisabled\"),\n 'label': (\"Confirm\")\n },hashTypes:{'confirm': \"STRING\",'cancel': \"STRING\",'confirmDisabled': \"ID\",'label': \"STRING\"},hashContexts:{'confirm': depth0,'cancel': depth0,'confirmDisabled': depth0,'label': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"action-buttons\", options))));\n data.buffer.push(\"\\n <div class='delete'>\\n <a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"openDeleteModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Delete List</a>\\n </div>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <h4>\");\n stack1 = helpers._triageMustache.call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</h4>\\n \");\n return buffer;\n }\n\n stack1 = (helper = helpers['confirm-popover'] || (depth0 && depth0['confirm-popover']),options={hash:{\n 'popover': (\"popover\"),\n 'class': (\"innerClasses\"),\n 'open': (\"menuList\"),\n 'opened': (\"opened\"),\n 'action': (\"confirm\"),\n 'cancel': (\"cancel\"),\n 'includeActionButtons': (false)\n },hashTypes:{'popover': \"ID\",'class': \"ID\",'open': \"ID\",'opened': \"STRING\",'action': \"STRING\",'cancel': \"STRING\",'includeActionButtons': \"BOOLEAN\"},hashContexts:{'popover': depth0,'class': depth0,'open': depth0,'opened': depth0,'action': depth0,'cancel': depth0,'includeActionButtons': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-popover\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n data.buffer.push(escapeExpression((helper = helpers['menu-list-delete-modal'] || (depth0 && depth0['menu-list-delete-modal']),options={hash:{\n 'deletingList': (\"deletingList\"),\n 'action': (\"delete\")\n },hashTypes:{'deletingList': \"ID\",'action': \"STRING\"},hashContexts:{'deletingList': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"menu-list-delete-modal\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/menu-list', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"\\n Add Menu List\\n \");\n }\n\n function program3(depth0,data) {\n \n \n data.buffer.push(\"\\n Add Sublist\\n \");\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div style='background-color: \");\n stack1 = helpers._triageMustache.call(depth0, \"\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"' class='color'></div>\\n \");\n return buffer;\n }\n\n function program7(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='button-cn left-icon'>\\n <i class='icon-chevron-left'></i>\\n </div>\\n \");\n }\n\n function program9(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='list clearfix'>\\n <a class='button left next' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"selectList\", \"menulist\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['popover-handle'] || (depth0 && depth0['popover-handle']),options={hash:{\n 'popover': (\"popover\"),\n 'placement': (\"right\"),\n 'ref': (\"menulist\")\n },hashTypes:{'popover': \"ID\",'placement': \"STRING\",'ref': \"ID\"},hashContexts:{'popover': depth0,'placement': depth0,'ref': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"popover-handle\", options))));\n data.buffer.push(\">\\n \");\n stack1 = helpers['with'].call(depth0, \"menulist.color\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(10, program10, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='button-cn menulist'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"menulist.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div class='button-cn'>\\n <i class='icon-chevron-right right'></i>\\n </div>\\n </a>\\n <a class='edit' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"editMenuList\", \"menulist\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\"><i class='icon-cog'></i></a>\\n </li>\\n \");\n return buffer;\n }\n function program10(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div style='background-color: \");\n stack1 = helpers._triageMustache.call(depth0, \"\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"' class='color'></div>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='head'>\\n <a class='button small add' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addMenuList\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"isSelectingAllProductsList\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n</div>\\n\\n<div class='nav'>\\n <div class='current'>\\n <a class='button back' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"selectParent\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['with'].call(depth0, \"selectedMenuList.color\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers.unless.call(depth0, \"isSelectingAllProductsList\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='button-cn menulist'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"selectedMenuList.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </a>\\n </div>\\n\\n <div class='siblings'>\\n <ul class='no-bullet'>\\n \");\n stack1 = helpers.each.call(depth0, \"menulist\", \"in\", \"siblingOrChildrenLists\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n </div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['menu-list-editor'] || (depth0 && depth0['menu-list-editor']),options={hash:{\n 'popover': (\"popover\"),\n 'self': (\"editor\"),\n 'innerClass': (\"menu-list-inspector\")\n },hashTypes:{'popover': \"ID\",'self': \"ID\",'innerClass': \"STRING\"},hashContexts:{'popover': depth0,'self': depth0,'innerClass': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"menu-list-editor\", options))));\n data.buffer.push(\"\\n</div>\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/option-rules', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'content': (\"firstBoundaries\"),\n 'class': (\"boundary\"),\n 'optionLabelPath': (\"content.label\"),\n 'optionValuePath': (\"content.value\"),\n 'value': (\"firstBoundary\")\n },hashTypes:{'content': \"ID\",'class': \"STRING\",'optionLabelPath': \"STRING\",'optionValuePath': \"STRING\",'value': \"ID\"},hashContexts:{'content': depth0,'class': depth0,'optionLabelPath': depth0,'optionValuePath': depth0,'value': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'icon': (\"icon-plus-outline\"),\n 'class': (\"add-second add\"),\n 'circle': (true),\n 'action': (\"addSecondBoundary\")\n },hashTypes:{'icon': \"STRING\",'class': \"STRING\",'circle': \"BOOLEAN\",'action': \"STRING\"},hashContexts:{'icon': depth0,'class': depth0,'circle': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <span class='connection'>\");\n stack1 = helpers._triageMustache.call(depth0, \"connectionText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n \");\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <select class='operator' disabled='disabled'>\\n <option value='atmost'>At Most</option>\\n </select>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'content': (\"secondBoundaries\"),\n 'class': (\"boundary\"),\n 'optionLabelPath': (\"content.label\"),\n 'optionValuePath': (\"content.value\"),\n 'value': (\"secondBoundary\")\n },hashTypes:{'content': \"ID\",'class': \"STRING\",'optionLabelPath': \"STRING\",'optionValuePath': \"STRING\",'value': \"ID\"},hashContexts:{'content': depth0,'class': depth0,'optionLabelPath': depth0,'optionValuePath': depth0,'value': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'icon': (\"icon-minus\"),\n 'class': (\"remove\"),\n 'circle': (true),\n 'action': (\"removeSecondBoundary\")\n },hashTypes:{'icon': \"STRING\",'class': \"STRING\",'circle': \"BOOLEAN\",'action': \"STRING\"},hashContexts:{'icon': depth0,'class': depth0,'circle': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":first showLowerBoundary::no-boundary\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'content': (\"firstOperators\"),\n 'class': (\"operator\"),\n 'optionLabelPath': (\"content.label\"),\n 'optionValuePath': (\"content.value\"),\n 'value': (\"firstOperator\")\n },hashTypes:{'content': \"ID\",'class': \"STRING\",'optionLabelPath': \"STRING\",'optionValuePath': \"STRING\",'value': \"ID\"},hashContexts:{'content': depth0,'class': depth0,'optionLabelPath': depth0,'optionValuePath': depth0,'value': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"showLowerBoundary\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"showAddSecondBoundaryButton\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"showSecondBoundary\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n<div class='second'>\\n \");\n stack1 = helpers['if'].call(depth0, \"showSecondBoundary\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/price-tax', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <div class='cell no-gap'>\\n <i class='icon icon-online-equal large'></i>\\n </div>\\n <div class=\\\"cell no-gap\\\">\\n <label>Excluding Tax Price:\\n \");\n data.buffer.push(escapeExpression((helper = helpers['change-input'] || (depth0 && depth0['change-input']),options={hash:{\n 'name': (\"variantExTaxPrice\"),\n 'value': (\"exTax\"),\n 'on-value-change': (\"exTaxPriceChanged\"),\n 'on-change': (\"exTaxPriceChanged\"),\n 'class': (\"x-tax-price\")\n },hashTypes:{'name': \"STRING\",'value': \"ID\",'on-value-change': \"STRING\",'on-change': \"STRING\",'class': \"STRING\"},hashContexts:{'name': depth0,'value': depth0,'on-value-change': depth0,'on-change': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"change-input\", options))));\n data.buffer.push(\"\\n </label>\\n </div>\\n <div class='cell no-gap'>\\n <i class='icon icon-plus-slim large'></i>\\n </div>\\n <div class=\\\"cell gst-display\\\">\\n <label>GST:\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"variantGst\"),\n 'disabled': (\"true\"),\n 'value': (\"editPrice.taxValue\"),\n 'class': (\"gst\")\n },hashTypes:{'name': \"STRING\",'disabled': \"STRING\",'value': \"ID\",'class': \"STRING\"},hashContexts:{'name': depth0,'disabled': depth0,'value': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </label>\\n </div>\\n\");\n return buffer;\n }\n\n data.buffer.push(\"<div class='cell no-gap'>\\n <label>Price:\\n \");\n data.buffer.push(escapeExpression((helper = helpers['confirm-input'] || (depth0 && depth0['confirm-input']),options={hash:{\n 'class': (\"price\"),\n 'required': (\"required\"),\n 'value': (\"incTax\"),\n 'inputValue': (\"incTax\"),\n 'displayValue': (\"displayValue\"),\n 'emptyLabel': (\"emptyLabel\"),\n 'placeholder': (\"Price\"),\n 'editing': (\"isEditingPrice\"),\n 'on-value-change': (\"incTaxPriceChanged\"),\n 'on-change': (\"incTaxPriceChanged\"),\n 'on-confirm': (\"priceConfirmed\"),\n 'validateEditing': (true)\n },hashTypes:{'class': \"STRING\",'required': \"ID\",'value': \"ID\",'inputValue': \"ID\",'displayValue': \"ID\",'emptyLabel': \"ID\",'placeholder': \"STRING\",'editing': \"ID\",'on-value-change': \"STRING\",'on-change': \"STRING\",'on-confirm': \"STRING\",'validateEditing': \"BOOLEAN\"},hashContexts:{'class': depth0,'required': depth0,'value': depth0,'inputValue': depth0,'displayValue': depth0,'emptyLabel': depth0,'placeholder': depth0,'editing': depth0,'on-value-change': depth0,'on-change': depth0,'on-confirm': depth0,'validateEditing': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-input\", options))));\n data.buffer.push(\"\\n </label>\\n</div>\\n\");\n stack1 = helpers['if'].call(depth0, \"isEditingPrice\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/product-and-group-select', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <ul class='tabs'>\\n <li class='tab-title active'><a href='#product-select-tab'>Products</a></li>\\n <li class='tab-title'><a href='#product-group-select-tab'>Product Groups</a></li>\\n </ul>\\n <div class='tabs-content'>\\n <div class='content active' id='product-select-tab'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-select'] || (depth0 && depth0['product-select']),options={hash:{\n 'availableProducts': (\"availableProducts\"),\n 'selectedProducts': (\"selectedProducts\"),\n 'excludedProducts': (\"excludedProducts\"),\n 'noProductAction': (\"noProductAction\"),\n 'class': (\"product-select\"),\n 'searchTerm': (\"productSearchTerm\"),\n 'filteredList': (\"filteredProducts\"),\n 'noResultsText': (\"productNoResultsText\"),\n 'noResultsLinkAction': (\"productNoResultsLinkAction\"),\n 'noResultsLinkText': (\"productNoResultsLinkText\"),\n 'searchQueryInterval': (\"productSearchQueryInterval\")\n },hashTypes:{'availableProducts': \"ID\",'selectedProducts': \"ID\",'excludedProducts': \"ID\",'noProductAction': \"ID\",'class': \"STRING\",'searchTerm': \"ID\",'filteredList': \"ID\",'noResultsText': \"ID\",'noResultsLinkAction': \"ID\",'noResultsLinkText': \"ID\",'searchQueryInterval': \"ID\"},hashContexts:{'availableProducts': depth0,'selectedProducts': depth0,'excludedProducts': depth0,'noProductAction': depth0,'class': depth0,'searchTerm': depth0,'filteredList': depth0,'noResultsText': depth0,'noResultsLinkAction': depth0,'noResultsLinkText': depth0,'searchQueryInterval': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-select\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='content' id='product-group-select-tab'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-group-select'] || (depth0 && depth0['product-group-select']),options={hash:{\n 'availableProductGroups': (\"availableProductGroups\"),\n 'selectedProductGroups': (\"selectedProductGroups\"),\n 'excludedProductGroups': (\"excludedProductGroups\"),\n 'noProductGroupAction': (\"noProductGroupAction\"),\n 'class': (\"product-group-select\"),\n 'searchTerm': (\"productGroupSearchTerm\"),\n 'filteredList': (\"filteredProductGroups\"),\n 'noResultsText': (\"productGroupNoResultsText\"),\n 'noResultsLinkAction': (\"productGroupNoResultsLinkAction\"),\n 'noResultsLinkText': (\"productGroupNoResultsLinkText\"),\n 'searchQueryInterval': (\"productGroupSearchQueryInterval\")\n },hashTypes:{'availableProductGroups': \"ID\",'selectedProductGroups': \"ID\",'excludedProductGroups': \"ID\",'noProductGroupAction': \"ID\",'class': \"STRING\",'searchTerm': \"ID\",'filteredList': \"ID\",'noResultsText': \"ID\",'noResultsLinkAction': \"ID\",'noResultsLinkText': \"ID\",'searchQueryInterval': \"ID\"},hashContexts:{'availableProductGroups': depth0,'selectedProductGroups': depth0,'excludedProductGroups': depth0,'noProductGroupAction': depth0,'class': depth0,'searchTerm': depth0,'filteredList': depth0,'noResultsText': depth0,'noResultsLinkAction': depth0,'noResultsLinkText': depth0,'searchQueryInterval': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-group-select\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n\");\n return buffer;\n }\n\n stack1 = (helper = helpers['foundation-tabs'] || (depth0 && depth0['foundation-tabs']),options={hash:{\n 'activeTab': (\"activeTab\"),\n 'availableTabs': (\"availableTabs\")\n },hashTypes:{'activeTab': \"ID\",'availableTabs': \"ID\"},hashContexts:{'activeTab': depth0,'availableTabs': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-tabs\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n else { data.buffer.push(''); }\n \n });\n\n});","define('dashboard/templates/components/product-group-management', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div>\\n <div class='header'>\");\n stack1 = helpers._triageMustache.call(depth0, \"titleText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div>\\n <div class='subtitle'>\");\n stack1 = helpers._triageMustache.call(depth0, \"subtitleText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div>\\n </div>\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <label class='keep-organised'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'checked': (\"keepOrganisedChecked\")\n },hashTypes:{'type': \"STRING\",'checked': \"ID\"},hashContexts:{'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <span>\");\n stack1 = helpers._triageMustache.call(depth0, \"keepOrganisedText\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n </label>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div>\\n \");\n stack1 = helpers['if'].call(depth0, \"includeOuterHeader\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-group-select'] || (depth0 && depth0['product-group-select']),options={hash:{\n 'availableProductGroups': (\"availableProductGroups\"),\n 'selectedProductGroups': (\"selectedProductGroups\"),\n 'excludedProductGroups': (\"excludedProductGroups\"),\n 'noProductGroupAction': (\"noProductGroupAction\"),\n 'placeholderText': (\"placeholderText\"),\n 'class': (\"select\"),\n 'searchTerm': (\"searchTerm\"),\n 'filteredList': (\"filteredList\"),\n 'searchQueryInterval': (\"searchQueryInterval\"),\n 'includeClearSearch': (\"includeClearSearch\"),\n 'includeHeader': (\"includeHeader\"),\n 'draggable': (\"draggable\"),\n 'disabled': (\"disabled\"),\n 'spacesRequired': (\"spacesRequired\"),\n 'resultHeaderInfoOnNoSearch': (\"resultHeaderInfoOnNoSearch\"),\n 'resultHeaderInfoTemplateOnSearch': (\"resultHeaderInfoTemplateOnSearch\"),\n 'noResultsLinkText': (\"noResultsLinkText\"),\n 'resultHeaderCheckboxText': (\"resultHeaderCheckboxText\"),\n 'noResultsLinkTextOnNoSearch': (\"noResultsLinkTextOnNoSearch\"),\n 'noResultsLinkTemplateOnNoSearch': (\"noResultsLinkTemplateOnNoSearch\")\n },hashTypes:{'availableProductGroups': \"ID\",'selectedProductGroups': \"ID\",'excludedProductGroups': \"ID\",'noProductGroupAction': \"ID\",'placeholderText': \"ID\",'class': \"STRING\",'searchTerm': \"ID\",'filteredList': \"ID\",'searchQueryInterval': \"ID\",'includeClearSearch': \"ID\",'includeHeader': \"ID\",'draggable': \"ID\",'disabled': \"ID\",'spacesRequired': \"ID\",'resultHeaderInfoOnNoSearch': \"ID\",'resultHeaderInfoTemplateOnSearch': \"ID\",'noResultsLinkText': \"ID\",'resultHeaderCheckboxText': \"ID\",'noResultsLinkTextOnNoSearch': \"ID\",'noResultsLinkTemplateOnNoSearch': \"ID\"},hashContexts:{'availableProductGroups': depth0,'selectedProductGroups': depth0,'excludedProductGroups': depth0,'noProductGroupAction': depth0,'placeholderText': depth0,'class': depth0,'searchTerm': depth0,'filteredList': depth0,'searchQueryInterval': depth0,'includeClearSearch': depth0,'includeHeader': depth0,'draggable': depth0,'disabled': depth0,'spacesRequired': depth0,'resultHeaderInfoOnNoSearch': depth0,'resultHeaderInfoTemplateOnSearch': depth0,'noResultsLinkText': depth0,'resultHeaderCheckboxText': depth0,'noResultsLinkTextOnNoSearch': depth0,'noResultsLinkTemplateOnNoSearch': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-group-select\", options))));\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"includeKeepOrganised\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'content': (\"sortOptionsWithIds\"),\n 'class': (\"sort\"),\n 'optionLabelPath': (\"content.text\"),\n 'optionValuePath': (\"content.idForSelect\"),\n 'selection': (\"sortOptionWithId\")\n },hashTypes:{'content': \"ID\",'class': \"STRING\",'optionLabelPath': \"STRING\",'optionValuePath': \"STRING\",'selection': \"ID\"},hashContexts:{'content': depth0,'class': depth0,'optionLabelPath': depth0,'optionValuePath': depth0,'selection': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/search-input', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<form class='x-acl-handled' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"search\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <input type='text' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'placeholder': (\"placeholder\")\n },hashTypes:{'placeholder': \"ID\"},hashContexts:{'placeholder': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"><button><i class=\\\"icon-search icon\\\"></i></button>\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/split-button', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<div class=\\\"top button radius\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"increment\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class=\\\"fi-arrow-up\\\"></i>\\n</div>\\n<div class=\\\"middle\\\">\\n <div class=\\\"text\\\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n<div class=\\\"hr\\\"></div>\\n<div class=\\\"bottom button radius\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"decrement\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class=\\\"fi-arrow-down\\\"></i>\\n</div>\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/components/type-ahead-toggle', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class=\\\"read\\\">\\n <span \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'tabIndex': (\"tabIndex\")\n },hashTypes:{'tabIndex': \"ID\"},hashContexts:{'tabIndex': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\");\n stack1 = helpers._triageMustache.call(depth0, \"labelValue\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n </div>\\n\");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class=\\\"write\\\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"view.input\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data})));\n data.buffer.push(\"\\n </div>\\n\");\n return buffer;\n }\n\n stack1 = helpers.unless.call(depth0, \"isEditMode\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/confirm-action', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression;\n\n\n stack1 = helpers._triageMustache.call(depth0, \"yield\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n<div class=\\\"button-group right\\\">\\n <a class=\\\"button secondary cancel x-acl-handled\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"cancelLabel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n <a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :primary :confirm confirmDisabled:disabled x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'disabled': (\"confirmDisabled\")\n },hashTypes:{'disabled': \"ID\"},hashContexts:{'disabled': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"confirm\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/error', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.render || (depth0 && depth0.render),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"404\", options) : helperMissing.call(depth0, \"render\", \"404\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.render || (depth0 && depth0.render),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"500\", options) : helperMissing.call(depth0, \"render\", \"500\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, \"is404\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n else { data.buffer.push(''); }\n \n });\n\n});","define('dashboard/templates/gateway/devices', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class=\\\"item\\\">\\n <td>\");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'checked': (\"selected\"),\n 'disabled': (\"isDisabled\")\n },hashTypes:{'type': \"STRING\",'checked': \"ID\",'disabled': \"ID\"},hashContexts:{'type': depth0,'checked': depth0,'disabled': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"</td>\\n <td>\\n \");\n stack1 = helpers['if'].call(depth0, \"added\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"type\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"interface\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"ip\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"port\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"make\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"model\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"serial\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n </tr>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'value': (\"name\")\n },hashTypes:{'value': \"ID\"},hashContexts:{'value': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<section>\\n <div class=\\\"row devices\\\">\\n <div class=\\\"columns\\\">\\n <h2>Devices</h2>\\n <table>\\n <thead>\\n <td></td>\\n <td>Name</td>\\n <td>Type</td>\\n <td>Interface</td>\\n <td>ip</td>\\n <td>port</td>\\n <td>make</td>\\n <td>model</td>\\n <td>serial</td>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"devices\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n <a class=\\\"button\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addSelectedDevices\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Add selected devices</a>\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/gateway/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"gateway/form\"),\n 'label': (\"Edit gateway\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/gateway/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"devices\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"gateway.devices\", options) : helperMissing.call(depth0, \"link-to\", \"gateway.devices\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Gateway ID\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Venue\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n \n data.buffer.push(\"\\n View devices on this gateway\\n \");\n }\n\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"gateway_id\"),\n 'type': (\"text\"),\n 'value': (\"gateway_id\"),\n 'required': (\"true\"),\n 'pattern': (\"number\"),\n 'placeholder': (\"Enter the Gateway ID\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'pattern': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'pattern': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Gateway ID is required and must be numeric.</small>\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'class': (\"venue-select\"),\n 'content': (\"props.venues\"),\n 'selection': (\"venue\"),\n 'optionValuePath': (\"content.id\"),\n 'optionLabelPath': (\"content.name\")\n },hashTypes:{'class': \"STRING\",'content': \"ID\",'selection': \"ID\",'optionValuePath': \"STRING\",'optionLabelPath': \"STRING\"},hashContexts:{'class': depth0,'content': depth0,'selection': depth0,'optionValuePath': depth0,'optionLabelPath': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"gateway\"),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\")\n },hashTypes:{'type': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\"},hashContexts:{'type': depth0,'cancel': depth0,'delete': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/gateways/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"gateway/form\"),\n 'label': (\"Add a gateway\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/gateways/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th>Gateway ID</th>\\n <th data-sort-by='ip'>IP Address</th>\\n <th>Venue</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"gateway\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item'>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"gateway.id\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"gateway.ip\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"gateway.venue.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class=\\\"actions\\\">\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"gateway\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"gateway\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/instruction/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"instruction/form\"),\n 'label': (\"Edit instruction\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/instruction/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='row'>\\n <div class='columns small-4 name-row'>\\n <label>Instruction name\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'class': (\"name\"),\n 'value': (\"model.name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the name\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'class': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'class': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Name is required.</small>\\n </label>\\n </div>\\n </div>\\n <div class=\\\"row option-header\\\">\\n <div class='columns small-3'>\\n <div class='title'>Instruction Options</div>\\n <div class='sub-title'>Add options for this instruction below.</div>\\n </div>\\n <div class='columns small-7'>\\n <button class=\\\"button small right add-item\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addiitem\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Add a new Instruction Options</button>\\n </div>\\n </div>\\n \");\n stack1 = helpers.each.call(depth0, \"iitem\", \"in\", \"model.instructionitems\", {hash:{\n 'itemController': (\"instructionitem\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <div class='table instructionitem'>\\n <div class='cell label small-1'>\\n Option:\\n </div>\\n <div class='cell name small-3'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'value': (\"iitem.content.name\"),\n 'placeholder': (\"iitem.content.name\")\n },hashTypes:{'name': \"STRING\",'value': \"ID\",'placeholder': \"ID\"},hashContexts:{'name': depth0,'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='cell price small-5'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['price-tax'] || (depth0 && depth0['price-tax']),options={hash:{\n 'price': (\"iitem.price\"),\n 'emptyLabel': (\"No Price\"),\n 'isEditingPrice': (\"iitem.isEditingPrice\"),\n 'required': (\"iitem.required\")\n },hashTypes:{'price': \"ID\",'emptyLabel': \"STRING\",'isEditingPrice': \"ID\",'required': \"ID\"},hashContexts:{'price': depth0,'emptyLabel': depth0,'isEditingPrice': depth0,'required': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"price-tax\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='cell actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'text': (\"Delete\"),\n 'icon': (\"icon-x\"),\n 'circle': (true),\n 'action': (\"delete\"),\n 'class': (\"remove\")\n },hashTypes:{'text': \"STRING\",'icon': \"STRING\",'circle': \"BOOLEAN\",'action': \"STRING\",'class': \"STRING\"},hashContexts:{'text': depth0,'icon': depth0,'circle': depth0,'action': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='no-results'>\\n Create your first instruction option\\n </div>\\n \");\n }\n\n data.buffer.push(\"<form class='instruction' data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"product\"),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\"),\n 'includeControls': (false),\n 'submitLabel': (\"Save all changes\"),\n 'deleteLabel': (\"Delete\")\n },hashTypes:{'type': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\",'includeControls': \"BOOLEAN\",'submitLabel': \"STRING\",'deleteLabel': \"STRING\"},hashContexts:{'type': depth0,'cancel': depth0,'delete': depth0,'includeControls': depth0,'submitLabel': depth0,'deleteLabel': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/instructions/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"instruction/form\"),\n 'label': (\"New instruction\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/instructions/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"results.length\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(8, program8, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Instruction</th>\\n <th>Delete</th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"instruction\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(6, program6, data),fn:self.program(3, program3, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"instruction.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"instruction.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'class': (\"edit\"),\n 'model': (\"instruction\")\n },hashTypes:{'class': \"STRING\",'model': \"ID\"},hashContexts:{'class': depth0,'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'class': (\"delete\"),\n 'icon': (\"null\"),\n 'model': (\"instruction\"),\n 'action': (\"delete\")\n },hashTypes:{'class': \"STRING\",'icon': \"ID\",'model': \"ID\",'action': \"STRING\"},hashContexts:{'class': depth0,'icon': depth0,'model': depth0,'action': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'icon': (\"icon-x-outline\"),\n 'class': (\"remove\"),\n 'circle': (true)\n },hashTypes:{'icon': \"STRING\",'class': \"STRING\",'circle': \"BOOLEAN\"},hashContexts:{'icon': depth0,'class': depth0,'circle': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n function program8(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'class': (\"create\"),\n 'permission': (\"create\"),\n 'route': (\"instructions.create\"),\n 'model': (\"instruction\")\n },hashTypes:{'class': \"STRING\",'permission': \"STRING\",'route': \"STRING\",'model': \"ID\"},hashContexts:{'class': depth0,'permission': depth0,'route': depth0,'model': depth0},inverse:self.noop,fn:self.program(9, program9, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program9(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='no-results'>\\n Create your first instruction\\n </div>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/license/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h3>Edit license</h3>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-12 columns\\\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"license/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/license/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n data.buffer.push(\"<form data-abide class=\\\"form license create\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <div>\\n <label>License name\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the name of your license\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">License name is required.</small>\\n </label>\\n </div>\\n <div class=\\\"button-group right\\\">\\n <a class=\\\"button secondary cancel\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n <button type=\\\"submit\\\" class=\\\"button primary\\\">Save</button>\\n </div>\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/licenses/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h3>Create a new license</h3>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-12 columns\\\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"license/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/licenses/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>License Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"license\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"license.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"license.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"license\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"license\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/login', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"Sign in\");\n }\n\n function program3(depth0,data) {\n \n \n data.buffer.push(\"Signing in\");\n }\n\n function program5(depth0,data) {\n \n \n data.buffer.push(\"Can't access your account?\");\n }\n\n data.buffer.push(\"<div class='login page'>\\n <img src='attic/images/franq-peek.png' class='peek'>\\n <div class=\\\"impos-logo-white center\\\"></div>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":center controllers.application.isDashboard:dashboard-logo-white:terminal-logo-white\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></div>\\n\\n\\n <div class='login full-screen panel center clearfix'>\\n <div class='franq form-title'>Sign <span class='no-cap'>into</span> ImPOS online</div>\\n <form data-abide id='login-form' class='x-acl-handled' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"login\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\" action='/api/v1/authenticate'>\\n\\n <div class=\\\"row errors\\\">\\n <label \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":error-message wrongCredentials:visible\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n Incorrect email or password\\n </label>\\n </div>\\n\\n <div class='row username-row'>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"email\"),\n 'name': (\"username\"),\n 'id': (\"username\"),\n 'class': (\"username\"),\n 'value': (\"username\"),\n 'placeholder': (\"Email Address\"),\n 'pattern': (\"email\"),\n 'required': (\"true\")\n },hashTypes:{'type': \"STRING\",'name': \"STRING\",'id': \"STRING\",'class': \"STRING\",'value': \"ID\",'placeholder': \"STRING\",'pattern': \"STRING\",'required': \"STRING\"},hashContexts:{'type': depth0,'name': depth0,'id': depth0,'class': depth0,'value': depth0,'placeholder': depth0,'pattern': depth0,'required': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class='error'>Invalid email</small>\\n </label>\\n </div>\\n\\n <div class='row password-row'>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"password\"),\n 'name': (\"password\"),\n 'id': (\"password\"),\n 'class': (\"password\"),\n 'value': (\"password\"),\n 'placeholder': (\"Password\"),\n 'pattern': (\"alpha_numeric\"),\n 'required': (\"true\")\n },hashTypes:{'type': \"STRING\",'name': \"STRING\",'id': \"STRING\",'class': \"STRING\",'value': \"ID\",'placeholder': \"STRING\",'pattern': \"STRING\",'required': \"STRING\"},hashContexts:{'type': depth0,'name': depth0,'id': depth0,'class': depth0,'value': depth0,'placeholder': depth0,'pattern': depth0,'required': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class='error'>Password is required</small>\\n </label>\\n </div>\\n\\n <div class='row buttons'>\\n <label \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"isTerminal:small-8:small-6 :columns :remember\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'name': (\"rememberMe\"),\n 'checked': (\"rememberMe\")\n },hashTypes:{'type': \"STRING\",'name': \"STRING\",'checked': \"ID\"},hashContexts:{'type': depth0,'name': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Remember me\\n </label>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button-group isTerminal:small-8:small-6 :columns\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <button type='submit' id='sign-in' class='button primary right'\\n \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'disabled': (\"isProcessing\")\n },hashTypes:{'disabled': \"STRING\"},hashContexts:{'disabled': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers.unless.call(depth0, \"isProcessing\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </button>\\n </div>\\n </div>\\n\\n <div class='recovery columns'>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"recover x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"recover\", options) : helperMissing.call(depth0, \"link-to\", \"recover\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n\\n </form>\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/menu/_menulist', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <ul>\\n \");\n stack1 = helpers.each.call(depth0, \"list\", \"in\", \"list.children\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"menu/menulist\", options) : helperMissing.call(depth0, \"partial\", \"menu/menulist\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-bonsai-id': (\"list.id\")\n },hashTypes:{'data-bonsai-id': \"ID\"},hashContexts:{'data-bonsai-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <label>\\n <div class=\\\"list-name\\\">\\n <span>\");\n stack1 = helpers._triageMustache.call(depth0, \"list.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n <span class=\\\"actions\\\">\\n <a class=\\\"fi-pencil edit-list\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"editList\", \"list\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['popover-handle'] || (depth0 && depth0['popover-handle']),options={hash:{\n 'popover': (\"popover\"),\n 'placement': (\"right\"),\n 'ref': (\"list\")\n },hashTypes:{'popover': \"ID\",'placement': \"STRING\",'ref': \"ID\"},hashContexts:{'popover': depth0,'placement': depth0,'ref': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"popover-handle\", options))));\n data.buffer.push(\">\\n </a>\\n <a class=\\\"fi-arrow-right move\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"showMoveModal\", \"list\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\"></a>\\n <a class=\\\"fi-plus add-sublist\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addList\", \"list\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\"></a>\\n <a class=\\\"fi-x delete-list right\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"deleteList\", \"list\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\"></a>\\n </span>\\n </div>\\n </label>\\n \");\n stack1 = helpers['if'].call(depth0, \"list.children\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</li>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/menu/_menulistmove', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"content.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"selectMoveTarget\", \"content\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\">\");\n stack1 = helpers._triageMustache.call(depth0, \"content.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</a>\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <ul>\\n \");\n stack1 = helpers.each.call(depth0, \"content.children\", {hash:{\n 'itemController': (\"menu.structure.move\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n \");\n return buffer;\n }\n function program6(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"menu/menulistmove\", options) : helperMissing.call(depth0, \"partial\", \"menu/menulistmove\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<li>\\n <label>\\n <div class=\\\"row\\\">\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":small-6 :columns :list-name disabled selected\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"disabled\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n </label>\\n \");\n stack1 = helpers['if'].call(depth0, \"content.children\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</li>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/menu/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='row'>\\n <div class='small-5 columns edit-menu-name'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['confirm-input'] || (depth0 && depth0['confirm-input']),options={hash:{\n 'name': (\"name\"),\n 'value': (\"name\"),\n 'placeholder': (\"Menu name\"),\n 'required': (\"true\"),\n 'valueTagName': (\"h1\"),\n 'class': (\"menu-name left\"),\n 'validate': (\"validateName\"),\n 'error': (\"invalidName\"),\n 'editing': (\"editingName\"),\n 'messages': (\"nameErrors\")\n },hashTypes:{'name': \"STRING\",'value': \"ID\",'placeholder': \"STRING\",'required': \"STRING\",'valueTagName': \"STRING\",'class': \"STRING\",'validate': \"ID\",'error': \"ID\",'editing': \"ID\",'messages': \"ID\"},hashContexts:{'name': depth0,'value': depth0,'placeholder': depth0,'required': depth0,'valueTagName': depth0,'class': depth0,'validate': depth0,'error': depth0,'editing': depth0,'messages': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-input\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='small-5 columns'>\\n <div class='small-5 columns text-right'>\\n Default menu list:\\n </div>\\n <div class='small-5 columns'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'content': (\"availableDefaultMenulists\"),\n 'class': (\"default-menulist\"),\n 'optionLabelPath': (\"content.label\"),\n 'optionValuePath': (\"content.value\"),\n 'value': (\"model.default_list\")\n },hashTypes:{'content': \"ID\",'class': \"STRING\",'optionLabelPath': \"STRING\",'optionValuePath': \"STRING\",'value': \"ID\"},hashContexts:{'content': depth0,'class': depth0,'optionLabelPath': depth0,'optionValuePath': depth0,'value': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </div>\\n </div>\\n </div>\\n <div class='edit-ui flex-row'>\\n <!--MENULIST COMPONENT SECTION-->\\n <div class='small-2 medium-2 large-2 columns'>\\n <div class='menu-list-container'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['menu-list'] || (depth0 && depth0['menu-list']),options={hash:{\n 'menuLists': (\"model.lists\"),\n 'action': (\"selectList\"),\n 'selectedMenuList': (\"currentList\")\n },hashTypes:{'menuLists': \"ID\",'action': \"STRING\",'selectedMenuList': \"ID\"},hashContexts:{'menuLists': depth0,'action': depth0,'selectedMenuList': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"menu-list\", options))));\n data.buffer.push(\"\\n <div class='display-box'></div>\\n </div>\\n </div>\\n <div class='small-8 medium-8 large-8 columns'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"outlet\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n \n data.buffer.push(\"\\n View Menu Structure\\n \");\n }\n\n function program5(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class='column small-2 right'>\\n <a class='button secondary delete alert' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"delete\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Delete</a>\\n </div>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\" class='menu detail menu-designer'>\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'typeKey': (\"typeKey\"),\n 'model': (\"model\"),\n 'submitDisabled': (\"submitDisabled\"),\n 'includeCreate': (false),\n 'includeControls': (false),\n 'includeButtons': (false),\n 'cancel': (\"cancel\"),\n 'submitLabel': (\"Save\")\n },hashTypes:{'typeKey': \"ID\",'model': \"ID\",'submitDisabled': \"ID\",'includeCreate': \"BOOLEAN\",'includeControls': \"BOOLEAN\",'includeButtons': \"BOOLEAN\",'cancel': \"STRING\",'submitLabel': \"STRING\"},hashContexts:{'typeKey': depth0,'model': depth0,'submitDisabled': depth0,'includeCreate': depth0,'includeControls': depth0,'includeButtons': depth0,'cancel': depth0,'submitLabel': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='row actions'>\\n <div class='column small-2'>\\n <button type='submit' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'disabled': (\"submitDisabled\"),\n 'class': (\":button :primary submitDisabled:disabled\")\n },hashTypes:{'disabled': \"ID\",'class': \"STRING\"},hashContexts:{'disabled': depth0,'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n Save all changes\\n </button>\\n </div>\\n <div class='column small-2'>\\n <a class='cancel button secondary' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n </div>\\n <div class='column small-2'>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"button menu-structure\"),\n 'disabled': (\"model.isNew\")\n },hashTypes:{'class': \"STRING\",'disabled': \"ID\"},hashContexts:{'class': depth0,'disabled': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data},helper ? helper.call(depth0, \"menu.structure\", \"model\", options) : helperMissing.call(depth0, \"link-to\", \"menu.structure\", \"model\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n stack1 = helpers.unless.call(depth0, \"isDefault\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/menu/form/list', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing, functionType=\"function\", blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <ul class='tabs'>\\n <li class='tab-title active basic'><a href='#edit-store'>Edit Store</a></li>\\n <li class='tab-title more'><a href='#edit-more-options'>Edit More Options</a></li>\\n </ul>\\n <div class='tabs-content'>\\n <div class='content active' id='edit-store'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['bread-crumbs'] || (depth0 && depth0['bread-crumbs']),options={hash:{\n 'class': (\"bread-crumbs no-bullets\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"bread-crumbs\", options))));\n data.buffer.push(\"\\n <!--MATRIX COMPONENT SECTION-->\\n <div class='products'>\\n \");\n stack1 = (helper = helpers['f-matrix'] || (depth0 && depth0['f-matrix']),options={hash:{\n 'rows': (\"rows\"),\n 'cols': (\"cols\"),\n 'editable': (\"draggable\"),\n 'pager': (\"pager\"),\n 'factory': (\"factory\"),\n 'items': (\"currentItems\"),\n 'class': (\"grid clearfix\")\n },hashTypes:{'rows': \"ID\",'cols': \"ID\",'editable': \"ID\",'pager': \"ID\",'factory': \"ID\",'items': \"ID\",'class': \"STRING\"},hashContexts:{'rows': depth0,'cols': depth0,'editable': depth0,'pager': depth0,'factory': depth0,'items': depth0,'class': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"f-matrix\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n stack1 = helpers['if'].call(depth0, \"model.uses_variants\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='page-control-section'>\\n \");\n stack1 = helpers['if'].call(depth0, \"deletePageEnabled\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(17, program17, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='pagination-centered left'>\\n <ul \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":pagination deletePageEnabled::only\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":arrow :previous-page onFirstPage:unavailable\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"previousPage\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">&lt;</a>\\n </li>\\n \");\n stack1 = helpers.each.call(depth0, \"page\", \"in\", \"pages.visible\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(19, program19, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":arrow :next-page onLastPage:unavailable\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"nextPage\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">&gt;</a>\\n </li>\\n </ul>\\n </div>\\n \");\n stack1 = helpers['if'].call(depth0, \"model.normal\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(21, program21, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n <div class='content active' id='edit-more-options'>\\n <!--TODO-->\\n <h1>Edit More Options</h1>\\n </div>\\n </div>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers.each.call(depth0, \"item\", \"in\", \"pager.visibleItems\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['f-matrix-item'] || (depth0 && depth0['f-matrix-item']),options={hash:{\n 'content': (\"item\"),\n 'acceptDrop': (true),\n 'classNameBindings': (\":cell :item item.product.purchasable::unpurchasable item.product.imageURL:has-img:\")\n },hashTypes:{'content': \"ID\",'acceptDrop': \"BOOLEAN\",'classNameBindings': \"STRING\"},hashContexts:{'content': depth0,'acceptDrop': depth0,'classNameBindings': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"f-matrix-item\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='label'>\");\n stack1 = helpers._triageMustache.call(depth0, \"item.product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div>\\n \");\n stack1 = helpers['if'].call(depth0, \"item.product.imageURL\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"model.normal\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program5(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <img class='img' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'src': (\"item.product.imageURL\")\n },hashTypes:{'src': \"ID\"},hashContexts:{'src': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"/>\\n \");\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <button class='remove-item' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"removeProduct\", \"item.content\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\">\\n <i class='fi-x'></i>\\n </button>\\n \");\n return buffer;\n }\n\n function program9(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['event-delegate'] || (depth0 && depth0['event-delegate']),options={hash:{\n 'class': (\"variants\"),\n 'action': (\"openPopover\"),\n 'targets': (\".spacer\")\n },hashTypes:{'class': \"STRING\",'action': \"STRING\",'targets': \"STRING\"},hashContexts:{'class': depth0,'action': depth0,'targets': depth0},inverse:self.noop,fn:self.program(10, program10, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"event-delegate\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['confirm-popover'] || (depth0 && depth0['confirm-popover']),options={hash:{\n 'popover': (\"variants.popover\"),\n 'class': (\"menu-variant-popover\"),\n 'open': (\"variants.addingPos\"),\n 'action': (\"addVariantAtPos\"),\n 'cancel': (\"closePopover\"),\n 'confirmDisabled': (\"variants.addingEmpty\")\n },hashTypes:{'popover': \"ID\",'class': \"STRING\",'open': \"ID\",'action': \"STRING\",'cancel': \"STRING\",'confirmDisabled': \"ID\"},hashContexts:{'popover': depth0,'class': depth0,'open': depth0,'action': depth0,'cancel': depth0,'confirmDisabled': depth0},inverse:self.noop,fn:self.program(15, program15, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-popover\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program10(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['f-matrix'] || (depth0 && depth0['f-matrix']),options={hash:{\n 'rows': (\"variants.rows\"),\n 'cols': (\"variants.cols\"),\n 'editable': (true),\n 'pager': (\"variants.pager\"),\n 'canDeleteSpacers': (false),\n 'items': (\"variants.current\"),\n 'class': (\"grid clearfix\")\n },hashTypes:{'rows': \"ID\",'cols': \"ID\",'editable': \"BOOLEAN\",'pager': \"ID\",'canDeleteSpacers': \"BOOLEAN\",'items': \"ID\",'class': \"STRING\"},hashContexts:{'rows': depth0,'cols': depth0,'editable': depth0,'pager': depth0,'canDeleteSpacers': depth0,'items': depth0,'class': depth0},inverse:self.noop,fn:self.program(11, program11, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"f-matrix\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program11(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers.each.call(depth0, \"variant\", \"in\", \"variants.pager.visibleItems\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(12, program12, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program12(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['f-matrix-item'] || (depth0 && depth0['f-matrix-item']),options={hash:{\n 'content': (\"variant\"),\n 'classNames': (\"cell variant\"),\n 'acceptDrop': (false)\n },hashTypes:{'content': \"ID\",'classNames': \"STRING\",'acceptDrop': \"BOOLEAN\"},hashContexts:{'content': depth0,'classNames': depth0,'acceptDrop': depth0},inverse:self.noop,fn:self.program(13, program13, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"f-matrix-item\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program13(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class='flex flex-center'>\\n <span class='label'>\");\n stack1 = helpers._triageMustache.call(depth0, \"variant.label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</span>\\n </div>\\n <button class='remove-item' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"removeVariant\", \"variant.content\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\">\\n <i class='fi-x'></i>\\n </button>\\n \");\n return buffer;\n }\n\n function program15(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <label class='label'>Available Sizes\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'content': (\"variants.available\"),\n 'value': (\"variants.adding\"),\n 'size': (\"variants.popoverSize\"),\n 'class': (\"select\")\n },hashTypes:{'content': \"ID\",'value': \"ID\",'size': \"ID\",'class': \"STRING\"},hashContexts:{'content': depth0,'value': depth0,'size': depth0,'class': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </label>\\n \");\n return buffer;\n }\n\n function program17(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <button class='delete-page left tiny' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"deletePage\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class='icon-minus'></i>\\n </button>\\n \");\n return buffer;\n }\n\n function program19(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"page.isSelecting:current :numbered-page\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <a \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"selectPage\", \"page.number\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\">\");\n stack1 = helpers._triageMustache.call(depth0, \"page.display\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</a>\\n </li>\\n \");\n return buffer;\n }\n\n function program21(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <button class='add-page right tiny' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addPage\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class='icon-plus'></i>\\n </button>\\n \");\n return buffer;\n }\n\n function program23(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <h3 class=\\\"label\\\">Add Functions:</h3>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-group-management'] || (depth0 && depth0['product-group-management']),options={hash:{\n 'includeClearSearch': (false),\n 'includeHeader': (false),\n 'availableProductGroups': (\"all.productgroups\"),\n 'selectedProductGroups': (\"model.groups\"),\n 'keepOrganisedChecked': (\"keepOrganisedChecked\"),\n 'disabled': (\"productSelectDisabled\"),\n 'sortOption': (\"sortOption\"),\n 'titleText': (\"\"),\n 'subtitleText': (\"\"),\n 'placeholderText': (\"Search\"),\n 'resultHeaderInfoOnNoSearch': (\"\")\n },hashTypes:{'includeClearSearch': \"BOOLEAN\",'includeHeader': \"BOOLEAN\",'availableProductGroups': \"ID\",'selectedProductGroups': \"ID\",'keepOrganisedChecked': \"ID\",'disabled': \"ID\",'sortOption': \"ID\",'titleText': \"STRING\",'subtitleText': \"STRING\",'placeholderText': \"STRING\",'resultHeaderInfoOnNoSearch': \"STRING\"},hashContexts:{'includeClearSearch': depth0,'includeHeader': depth0,'availableProductGroups': depth0,'selectedProductGroups': depth0,'keepOrganisedChecked': depth0,'disabled': depth0,'sortOption': depth0,'titleText': depth0,'subtitleText': depth0,'placeholderText': depth0,'resultHeaderInfoOnNoSearch': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-group-management\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program25(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(26, program26, data),contexts:[],types:[],data:data}\n if (helper = helpers['foundation-tabs']) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0['foundation-tabs']); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers['foundation-tabs']) { stack1 = blockHelperMissing.call(depth0, 'foundation-tabs', {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(26, program26, data),contexts:[],types:[],data:data}); }\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['drag-spacer'] || (depth0 && depth0['drag-spacer']),options={hash:{\n 'draggable': (\"draggable\"),\n 'disabled': (\"productSelectDisabled\"),\n 'classNameBindings': (\":flex :flex-center productSelectDisabled:disabled\")\n },hashTypes:{'draggable': \"ID\",'disabled': \"ID\",'classNameBindings': \"STRING\"},hashContexts:{'draggable': depth0,'disabled': depth0,'classNameBindings': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"drag-spacer\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program26(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <ul class='tabs'>\\n <li class='tab-title active basic'>\\n <a href='#drag-products'>Products</a>\\n </li>\\n <li class='tab-title more'>\\n <a href='#drag-product-groups'>Groups</a>\\n </li>\\n </ul>\\n <div class='tabs-content'>\\n <div class='content active' id='drag-products'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-select'] || (depth0 && depth0['product-select']),options={hash:{\n 'includeClearSearch': (false),\n 'draggable': (true),\n 'disabled': (\"productSelectDisabled\"),\n 'class': (\"product-select\"),\n 'availableProducts': (\"all.products\"),\n 'excludedProducts': (\"excludedProducts\"),\n 'noResultsLinkText': (\"\"),\n 'resultHeaderCheckboxText': (\"\"),\n 'resultHeaderInfoOnNoSearch': (\"Drag n' drop products to build your menu.\")\n },hashTypes:{'includeClearSearch': \"BOOLEAN\",'draggable': \"BOOLEAN\",'disabled': \"ID\",'class': \"STRING\",'availableProducts': \"ID\",'excludedProducts': \"ID\",'noResultsLinkText': \"STRING\",'resultHeaderCheckboxText': \"STRING\",'resultHeaderInfoOnNoSearch': \"STRING\"},hashContexts:{'includeClearSearch': depth0,'draggable': depth0,'disabled': depth0,'class': depth0,'availableProducts': depth0,'excludedProducts': depth0,'noResultsLinkText': depth0,'resultHeaderCheckboxText': depth0,'resultHeaderInfoOnNoSearch': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-select\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='content' id='drag-product-groups'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-group-management'] || (depth0 && depth0['product-group-management']),options={hash:{\n 'includeClearSearch': (false),\n 'includeOuterHeader': (false),\n 'includeKeepOrganised': (false),\n 'draggable': (true),\n 'disabled': (\"productSelectDisabled\"),\n 'subtitleText': (\"\"),\n 'spacesRequired': (\"spacesForPGroup\"),\n 'availableProductGroups': (\"all.productgroups\"),\n 'sortOption': (\"factory.sort\"),\n 'placeholderText': (\"Search\"),\n 'keepOrganisedText': (\"Group products (By product group)\"),\n 'noResultsLinkText': (\"\"),\n 'resultHeaderCheckboxText': (\"\"),\n 'resultHeaderInfoOnNoSearch': (\"Drag n' drop product groups to build your menu.\")\n },hashTypes:{'includeClearSearch': \"BOOLEAN\",'includeOuterHeader': \"BOOLEAN\",'includeKeepOrganised': \"BOOLEAN\",'draggable': \"BOOLEAN\",'disabled': \"ID\",'subtitleText': \"STRING\",'spacesRequired': \"ID\",'availableProductGroups': \"ID\",'sortOption': \"ID\",'placeholderText': \"STRING\",'keepOrganisedText': \"STRING\",'noResultsLinkText': \"STRING\",'resultHeaderCheckboxText': \"STRING\",'resultHeaderInfoOnNoSearch': \"STRING\"},hashContexts:{'includeClearSearch': depth0,'includeOuterHeader': depth0,'includeKeepOrganised': depth0,'draggable': depth0,'disabled': depth0,'subtitleText': depth0,'spacesRequired': depth0,'availableProductGroups': depth0,'sortOption': depth0,'placeholderText': depth0,'keepOrganisedText': depth0,'noResultsLinkText': depth0,'resultHeaderCheckboxText': depth0,'resultHeaderInfoOnNoSearch': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-group-management\", options))));\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n\n function program28(depth0,data) {\n \n \n data.buffer.push(\"\\n <p class=\\\"lead\\\">Delete this page?</p>\\n <p>You are about to delete a page which has products on it. Are you sure you want to go ahead with this?</p>\\n\");\n }\n\n data.buffer.push(\"<div class='menu-item-editor'>\\n <div class='items-display'>\\n \");\n options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data}\n if (helper = helpers['foundation-tabs']) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0['foundation-tabs']); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers['foundation-tabs']) { stack1 = blockHelperMissing.call(depth0, 'foundation-tabs', {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data}); }\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":items-management productSelectDisabled:blur\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":overlay productSelectDisabled::hidden\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></div>\\n <!--MENU MANAGEMENT SECTION-->\\n \");\n stack1 = helpers['if'].call(depth0, \"model.isGroups\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(25, program25, data),fn:self.program(23, program23, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n\\n\");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'label': (\"Delete\"),\n 'open': (\"deletePageItemsOpen\"),\n 'action': (\"definitelyDeletePage\"),\n 'class': (\"delete-page-modal\")\n },hashTypes:{'label': \"STRING\",'open': \"ID\",'action': \"STRING\",'class': \"STRING\"},hashContexts:{'label': depth0,'open': depth0,'action': depth0,'class': depth0},inverse:self.noop,fn:self.program(28, program28, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/menu/structure', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <li data-bonsai-id=\\\"all-products\\\"><label>All Products</label></li>\\n \");\n stack1 = helpers.each.call(depth0, \"list\", \"in\", \"topLevelMenuList\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"menu/menulist\", options) : helperMissing.call(depth0, \"partial\", \"menu/menulist\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['tree-view'] || (depth0 && depth0['tree-view']),options={hash:{\n 'tree': (\"moveTree\"),\n 'class': (\"move-tree\")\n },hashTypes:{'tree': \"ID\",'class': \"STRING\"},hashContexts:{'tree': depth0,'class': depth0},inverse:self.noop,fn:self.program(5, program5, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"tree-view\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers.each.call(depth0, \"topLevelMenuList\", {hash:{\n 'itemController': (\"menu.structure.move\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program6(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"menu/menulistmove\", options) : helperMissing.call(depth0, \"partial\", \"menu/menulistmove\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\" class=\\\"menu structure\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h1 class=\\\"page-heading center-text\\\">\\n <span class=\\\"faded\\\">Menu List</span>\\n <span class=\\\"bold\\\">Structure</span></h1>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <div>\\n <ul class=\\\"button-group expand-collapse even-2 right\\\">\\n <a class=\\\"expand-all underline\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"expandAllSublist\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Expand all</a>\\n /\\n <a class=\\\"hide-all underline\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"hideAllSublist\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Hide all</a>\\n </ul>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns menulist-tree\\\">\\n \");\n stack1 = (helper = helpers['tree-view'] || (depth0 && depth0['tree-view']),options={hash:{\n 'tree': (\"tree\"),\n 'class': (\"structure-tree panel\")\n },hashTypes:{'tree': \"ID\",'class': \"STRING\"},hashContexts:{'tree': depth0,'class': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"tree-view\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n <div class=\\\"row form-buttons\\\">\\n <div class=\\\"small-2 columns\\\">\\n <button type=\\\"submit\\\" \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'disabled': (\"submitDisabled\"),\n 'class': (\":save :button :full-width :primary submitDisabled:disabled:\")\n },hashTypes:{'disabled': \"ID\",'class': \"STRING\"},hashContexts:{'disabled': depth0,'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">Save Changes</button>\\n </div>\\n <div class=\\\"small-2 columns\\\">\\n <a class=\\\"button primary add-list full-width\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addList\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Add Menu List</a>\\n </div>\\n <div class=\\\"small-2 columns right\\\">\\n <a class=\\\"cancel button secondary full-width\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n </div>\\n </div>\\n</form>\\n\\n\");\n data.buffer.push(escapeExpression((helper = helpers['menu-list-editor'] || (depth0 && depth0['menu-list-editor']),options={hash:{\n 'label': (\"label\"),\n 'popover': (\"popover\"),\n 'self': (\"editor\"),\n 'confirm': (\"updateTrees\"),\n 'cancel': (\"updateTrees\"),\n 'delete': (\"updateTrees\")\n },hashTypes:{'label': \"ID\",'popover': \"ID\",'self': \"ID\",'confirm': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\"},hashContexts:{'label': depth0,'popover': depth0,'self': depth0,'confirm': depth0,'cancel': depth0,'delete': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"menu-list-editor\", options))));\n data.buffer.push(\"\\n\\n\\n\");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'open': (\"moving\"),\n 'action': (\"move\"),\n 'label': (\"Move\")\n },hashTypes:{'open': \"ID\",'action': \"STRING\",'label': \"STRING\"},hashContexts:{'open': depth0,'action': depth0,'label': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\");\n data.buffer.push(escapeExpression((helper = helpers['menu-list-delete-modal'] || (depth0 && depth0['menu-list-delete-modal']),options={hash:{\n 'deletingList': (\"deletingList\"),\n 'action': (\"updateTrees\")\n },hashTypes:{'deletingList': \"ID\",'action': \"STRING\"},hashContexts:{'deletingList': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"menu-list-delete-modal\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/menus/archived', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item'>\\n <td class='name'>\");\n stack1 = (helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"menu\"),\n 'icon': (\"null\")\n },hashTypes:{'model': \"ID\",'icon': \"ID\"},hashContexts:{'model': depth0,'icon': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='user'>\");\n stack1 = helpers._triageMustache.call(depth0, \"menu.archived_user.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='date-created'>\");\n data.buffer.push(escapeExpression((helper = helpers['date-format'] || (depth0 && depth0['date-format']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"ID\",\"STRING\"],data:data},helper ? helper.call(depth0, \"menu.created_at\", \"L\", options) : helperMissing.call(depth0, \"date-format\", \"menu.created_at\", \"L\", options))));\n data.buffer.push(\"</td>\\n <td class='date-archived'>\");\n data.buffer.push(escapeExpression((helper = helpers['date-format'] || (depth0 && depth0['date-format']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"ID\",\"STRING\"],data:data},helper ? helper.call(depth0, \"menu.archived_at\", \"L\", options) : helperMissing.call(depth0, \"date-format\", \"menu.archived_at\", \"L\", options))));\n data.buffer.push(\"</td>\\n <td class='action'>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'permission': (\"update\"),\n 'model': (\"menu\"),\n 'action': (\"restore\")\n },hashTypes:{'permission': \"STRING\",'model': \"ID\",'action': \"STRING\"},hashContexts:{'permission': depth0,'model': depth0,'action': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var stack1;\n stack1 = helpers._triageMustache.call(depth0, \"menu.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n else { data.buffer.push(''); }\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <button class='warning button restore'>Restore</button>\\n \");\n }\n\n function program6(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='content'>\\n <h4>Rename this menu</h4>\\n <p>\\n You have chosen to restore the menu \\\"\");\n stack1 = helpers._triageMustache.call(depth0, \"menuToRestore.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\\".\\n </p>\\n <p>\\n This menu has the same name as an active menu.\\n Please choose a new name for this menu.\\n </p>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"new_name\"),\n 'type': (\"text\"),\n 'value': (\"newMenuName\"),\n 'required': (\"true\"),\n 'placeholder': (\"New name\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"nameExist\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div class='action'>\\n <a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :tiny :primary editMenuListConfirmDisabled:disabled :confirm-edit-menu-name\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"editMenuNameConfirm\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Save</a>\\n <a class='button tiny cancel' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"closeEditMenuNameModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n </div>\\n \");\n return buffer;\n }\n function program7(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <small class=\\\"error\\\">\");\n stack1 = helpers._triageMustache.call(depth0, \"newMenuName\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" exist!</small>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<section class='menu'>\\n <div class='row'>\\n <div class='columns'>\\n <h1 class='left'>Menu Archive</h1>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['filter-input'] || (depth0 && depth0['filter-input']),options={hash:{\n 'value': (\"filterQuery\"),\n 'placeholder': (\"Search menu archive\"),\n 'closable': (true),\n 'right': (true),\n 'class': (\"search\")\n },hashTypes:{'value': \"ID\",'placeholder': \"STRING\",'closable': \"BOOLEAN\",'right': \"BOOLEAN\",'class': \"STRING\"},hashContexts:{'value': depth0,'placeholder': depth0,'closable': depth0,'right': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"filter-input\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n <div class='row'>\\n <div class='columns'>\\n <table class='listing'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Menu</th>\\n <th data-sort-by='archived_user.name'>User</th>\\n <th data-sort-by='created_at'>Date Created</th>\\n <th data-sort-by='archived_at'>Date Archived</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"menu\", \"in\", \"archivedResults\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n </div>\\n </div>\\n \");\n stack1 = (helper = helpers['foundation-reveal'] || (depth0 && depth0['foundation-reveal']),options={hash:{\n 'open': (\"editMenuModalOpen\"),\n 'revealModalClass': (\"small\"),\n 'class': (\"edit-menu-name-dialog\")\n },hashTypes:{'open': \"ID\",'revealModalClass': \"STRING\",'class': \"STRING\"},hashContexts:{'open': depth0,'revealModalClass': depth0,'class': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-reveal\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/menus/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='menus index'>\\n <div class='row'>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.organisations.update\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='small-2 columns menu-select'>\\n <label>Sort menus:\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'class': (\"select sort-menu\"),\n 'content': (\"sortTypes\"),\n 'value': (\"sortBy\")\n },hashTypes:{'class': \"STRING\",'content': \"ID\",'value': \"ID\"},hashContexts:{'class': depth0,'content': depth0,'value': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </label>\\n </div>\\n </div>\\n <div class='row'>\\n <div class='columns'>\\n <ul class='menus grid small-block-grid-3'>\\n \");\n stack1 = helpers.each.call(depth0, \"menu\", \"in\", \"toDisplayResults\", {hash:{\n 'tagname': (\"div\"),\n 'itemController': (\"menus.index.item\")\n },hashTypes:{'tagname': \"STRING\",'itemController': \"STRING\"},hashContexts:{'tagname': depth0,'itemController': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['confirm-popover'] || (depth0 && depth0['confirm-popover']),options={hash:{\n 'popover': (\"popover\"),\n 'class': (\"menu-color\"),\n 'open': (\"selectedMenu\"),\n 'action': (\"confirmColor\"),\n 'cancel': (\"cancelColor\")\n },hashTypes:{'popover': \"ID\",'class': \"STRING\",'open': \"ID\",'action': \"STRING\",'cancel': \"STRING\"},hashContexts:{'popover': depth0,'class': depth0,'open': depth0,'action': depth0,'cancel': depth0},inverse:self.noop,fn:self.program(16, program16, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-popover\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n </div>\\n </div>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'permission': (\"read\"),\n 'route': (\"menus.archived\"),\n 'innerClass': (\"button right\")\n },hashTypes:{'permission': \"STRING\",'route': \"STRING\",'innerClass': \"STRING\"},hashContexts:{'permission': depth0,'route': depth0,'innerClass': depth0},inverse:self.noop,fn:self.program(18, program18, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n\\n \");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'label': (\"Delete\"),\n 'open': (\"props.deleting\"),\n 'action': (\"confirmDelete\"),\n 'cancel': (\"stopDeleting\")\n },hashTypes:{'label': \"STRING\",'open': \"ID\",'action': \"STRING\",'cancel': \"STRING\"},hashContexts:{'label': depth0,'open': depth0,'action': depth0,'cancel': depth0},inverse:self.noop,fn:self.program(20, program20, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class='small-2 columns menu-select x-acl-handled'\\n \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"setDefaultMenu\", {hash:{\n 'on': (\"change\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <label class='select-label'>Default menu:\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'class': (\"select default-menu-select\"),\n 'content': (\"nonArchivedContent\"),\n 'optionLabelPath': (\"content.name\"),\n 'value': (\"defaultMenu\")\n },hashTypes:{'class': \"STRING\",'content': \"ID\",'optionLabelPath': \"STRING\",'value': \"ID\"},hashContexts:{'class': depth0,'content': depth0,'optionLabelPath': depth0,'value': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </label>\\n </div>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='menus' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"menu.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"menu.isDefault:default-menu :item\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div class='color' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'style': (\"menu.fillStyle\")\n },hashTypes:{'style': \"ID\"},hashContexts:{'style': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"menu.isDefault\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div class='details'>\\n <div class=\\\"top-line\\\">\\n \");\n stack1 = helpers['if'].call(depth0, \"menu.editingName\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(11, program11, data),fn:self.program(9, program9, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'permission': (\"create\"),\n 'model': (\"menu\"),\n 'icon': (\"fi-page-copy\"),\n 'innerClass': (\"duplicate right\"),\n 'action': (\"duplicateMenu\")\n },hashTypes:{'permission': \"STRING\",'model': \"ID\",'icon': \"STRING\",'innerClass': \"STRING\",'action': \"STRING\"},hashContexts:{'permission': depth0,'model': depth0,'icon': depth0,'innerClass': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options))));\n data.buffer.push(\"\\n </div>\\n <div class=\\\"bottom-line\\\">\\n <span class='created-date'>Created: \");\n data.buffer.push(escapeExpression((helper = helpers['date-format'] || (depth0 && depth0['date-format']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"ID\",\"STRING\"],data:data},helper ? helper.call(depth0, \"menu.created_at\", \"L\", options) : helperMissing.call(depth0, \"date-format\", \"menu.created_at\", \"L\", options))));\n data.buffer.push(\"</span>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'permission': (\"update\"),\n 'model': (\"menu.model\"),\n 'innerClass': (\"right\"),\n 'action': (\"showColorPicker\")\n },hashTypes:{'permission': \"STRING\",'model': \"ID\",'innerClass': \"STRING\",'action': \"STRING\"},hashContexts:{'permission': depth0,'model': depth0,'innerClass': depth0,'action': depth0},inverse:self.noop,fn:self.program(14, program14, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n </div>\\n </li>\\n \");\n return buffer;\n }\n function program5(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='default'>Default menu</div>\\n \");\n }\n\n function program7(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'model': (\"menu\"),\n 'permission': (\"update\"),\n 'icon': (\"fi-x-circle\"),\n 'innerClass': (\"menu-archive right\"),\n 'action': (\"archiveMenu\")\n },hashTypes:{'model': \"ID\",'permission': \"STRING\",'icon': \"STRING\",'innerClass': \"STRING\",'action': \"STRING\"},hashContexts:{'model': depth0,'permission': depth0,'icon': depth0,'innerClass': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program9(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['confirm-input'] || (depth0 && depth0['confirm-input']),options={hash:{\n 'name': (\"name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Menu name\"),\n 'editing': (\"menu.editingName\"),\n 'value': (\"menu.name\"),\n 'validate': (\"menu.validateNames\"),\n 'messages': (\"menuListNameErrorMessages\")\n },hashTypes:{'name': \"STRING\",'required': \"STRING\",'placeholder': \"STRING\",'editing': \"ID\",'value': \"ID\",'validate': \"ID\",'messages': \"ID\"},hashContexts:{'name': depth0,'required': depth0,'placeholder': depth0,'editing': depth0,'value': depth0,'validate': depth0,'messages': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-input\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program11(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <span>\\n \");\n stack1 = (helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"menu\"),\n 'icon': (\"null\"),\n 'innerClass': (\"menu-name-edit\")\n },hashTypes:{'model': \"ID\",'icon': \"ID\",'innerClass': \"STRING\"},hashContexts:{'model': depth0,'icon': depth0,'innerClass': depth0},inverse:self.noop,fn:self.program(12, program12, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'permission': (\"update\"),\n 'model': (\"menu\"),\n 'icon': (\"fi-pencil\"),\n 'action': (\"editName\")\n },hashTypes:{'permission': \"STRING\",'model': \"ID\",'icon': \"STRING\",'action': \"STRING\"},hashContexts:{'permission': depth0,'model': depth0,'icon': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options))));\n data.buffer.push(\"\\n </span>\\n \");\n return buffer;\n }\n function program12(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"menu.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program14(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <i class='icon-eye-dropper'\\n \");\n data.buffer.push(escapeExpression((helper = helpers['popover-handle'] || (depth0 && depth0['popover-handle']),options={hash:{\n 'popover': (\"popover\"),\n 'placement': (\"right\"),\n 'ref': (\"menu.model\")\n },hashTypes:{'popover': \"ID\",'placement': \"STRING\",'ref': \"ID\"},hashContexts:{'popover': depth0,'placement': depth0,'ref': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"popover-handle\", options))));\n data.buffer.push(\">\\n </i>\\n \");\n return buffer;\n }\n\n function program16(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <label class=\\\"color\\\">\\n <span class=\\\"label\\\">Color Picker</span>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['color-palette'] || (depth0 && depth0['color-palette']),options={hash:{\n 'color': (\"selectedMenu.color\")\n },hashTypes:{'color': \"ID\"},hashContexts:{'color': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"color-palette\", options))));\n data.buffer.push(\"\\n </label>\\n \");\n return buffer;\n }\n\n function program18(depth0,data) {\n \n \n data.buffer.push(\"\\n Archived menus\\n \");\n }\n\n function program20(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <p class=\\\"lead\\\">Delete menu</p>\\n <p>Are you sure you want to delete \");\n stack1 = helpers._triageMustache.call(depth0, \"props.deleting.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"?</p>\\n \");\n return buffer;\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"query\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/organisation', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='products item'>\\n <i class='thumb icon-factory'></i>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"products\", options) : helperMissing.call(depth0, \"link-to\", \"products\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <ul class='sub-nav'>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.productgroups.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"sizetemplates\", options) : helperMissing.call(depth0, \"if-feature\", \"sizetemplates\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.instructions.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(11, program11, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n </li>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n \n data.buffer.push(\"Products\");\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='productgroups'>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(5, program5, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"productgroups\", options) : helperMissing.call(depth0, \"link-to\", \"productgroups\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n \");\n return buffer;\n }\n function program5(depth0,data) {\n \n \n data.buffer.push(\"Groups\");\n }\n\n function program7(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.sizetemplates.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(8, program8, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program8(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='sizetemplates'>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"sizetemplates\", options) : helperMissing.call(depth0, \"link-to\", \"sizetemplates\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n \");\n return buffer;\n }\n function program9(depth0,data) {\n \n \n data.buffer.push(\"Size templates\");\n }\n\n function program11(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='instructions'>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(12, program12, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"instructions\", options) : helperMissing.call(depth0, \"link-to\", \"instructions\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n \");\n return buffer;\n }\n function program12(depth0,data) {\n \n \n data.buffer.push(\"Instructions\");\n }\n\n function program14(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='venues item'>\\n <i class='thumb icon-house'></i>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(15, program15, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"venues\", options) : helperMissing.call(depth0, \"link-to\", \"venues\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <ul class='sub-nav'>\\n <li class='create'>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.licenses.create\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(18, program18, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n </ul>\\n </li>\\n \");\n return buffer;\n }\n function program15(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"Venues\");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(16, program16, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"devices\", options) : helperMissing.call(depth0, \"if-feature\", \"devices\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" & Licences\");\n return buffer;\n }\n function program16(depth0,data) {\n \n \n data.buffer.push(\", Devices\");\n }\n\n function program18(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(19, program19, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"licenses\", options) : helperMissing.call(depth0, \"link-to\", \"licenses\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program19(depth0,data) {\n \n \n data.buffer.push(\"Licenses\");\n }\n\n function program21(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='menus item'>\\n <i class='thumb icon-book'></i>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(22, program22, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"menus\", options) : helperMissing.call(depth0, \"link-to\", \"menus\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <ul class='sub-nav'>\\n <li class='create'>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.menus.create\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(24, program24, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n </ul>\\n </li>\\n \");\n return buffer;\n }\n function program22(depth0,data) {\n \n \n data.buffer.push(\"Menus\");\n }\n\n function program24(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(25, program25, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"menus.create\", options) : helperMissing.call(depth0, \"link-to\", \"menus.create\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program25(depth0,data) {\n \n \n data.buffer.push(\"Menu Designer\");\n }\n\n function program27(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='users item'>\\n <i class='thumb icon-face'></i>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(28, program28, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"users\", options) : helperMissing.call(depth0, \"link-to\", \"users\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <ul class='sub-nav'>\\n <li class='create'>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.usergroups.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(30, program30, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n </ul>\\n </li>\\n \");\n return buffer;\n }\n function program28(depth0,data) {\n \n \n data.buffer.push(\"Employees\");\n }\n\n function program30(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(31, program31, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"usergroups\", options) : helperMissing.call(depth0, \"link-to\", \"usergroups\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program31(depth0,data) {\n \n \n data.buffer.push(\"Roles\");\n }\n\n function program33(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='surcharges item'>\\n <i class='thumb icon-suitcase'></i>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(34, program34, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"surcharges\", options) : helperMissing.call(depth0, \"link-to\", \"surcharges\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <ul class='sub-nav'>\\n <li >\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.surcharges.create\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(36, program36, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n </ul>\\n </li>\\n \");\n return buffer;\n }\n function program34(depth0,data) {\n \n \n data.buffer.push(\"Payment Control\");\n }\n\n function program36(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(37, program37, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"surcharges\", options) : helperMissing.call(depth0, \"link-to\", \"surcharges\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program37(depth0,data) {\n \n \n data.buffer.push(\"Discount & Surcharges\");\n }\n\n function program39(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='settings item'>\\n <i class='thumb icon-settings'></i>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"x-acl-handled\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(40, program40, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"settings\", options) : helperMissing.call(depth0, \"link-to\", \"settings\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </li>\\n \");\n return buffer;\n }\n function program40(depth0,data) {\n \n \n data.buffer.push(\"Settings\");\n }\n\n data.buffer.push(\"<div id='hint-bg'></div>\\n<div id='content' class='columns large-10'>\\n <div class='row hint-container'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['f-hint'] || (depth0 && depth0['f-hint']),options={hash:{\n 'user': (\"auth.user\"),\n 'collapsed': (\"hintCollapsed\")\n },hashTypes:{'user': \"ID\",'collapsed': \"ID\"},hashContexts:{'user': depth0,'collapsed': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"f-hint\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='bd'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"outlet\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n<div class='columns large-2'>\\n <ul id='primary-nav'>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.products.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.venues.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(14, program14, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.menus.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(21, program21, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.users.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(27, program27, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.surcharges.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(33, program33, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.settings.read\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(39, program39, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n </ul>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/organisation/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h3>Edit organisation</h3>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-12 columns\\\">\\n <form data-abide class=\\\"form organisation edit\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"organisation/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n <div class=\\\"button-group right\\\">\\n <a class=\\\"button secondary cancel\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n <button type=\\\"submit\\\" class=\\\"button primary\\\">Save</button>\\n </div>\\n </form>\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/organisation/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<div>\\n <label>Organisation name\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the name of your organisation\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Organisation name is required.</small>\\n </label>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/organisation/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='columns small-3'>\\n <div class='icon-container'>\\n <i class='icon-factory'></i>\\n </div>\\n </div>\\n <div class='columns small-6'>\\n <div class='title'>\\n Products\\n </div>\\n <div class='description'>\\n Create products, groups and sizes. Your fist stop when building your menus.\\n </div>\\n </div>\\n \");\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='columns small-3'>\\n <div class='icon-container'>\\n <i class='icon-house'></i>\\n </div>\\n </div>\\n <div class='columns small-6'>\\n <div class='title'>\\n Venues\");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"devices\", options) : helperMissing.call(depth0, \"if-feature\", \"devices\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" & licenses\\n </div>\\n <div class='description'>\\n Add \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"devices\", options) : helperMissing.call(depth0, \"if-feature\", \"devices\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" Licenses to your Venues\\n </div>\\n </div>\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n \n data.buffer.push(\", devices\");\n }\n\n function program6(depth0,data) {\n \n \n data.buffer.push(\"Devices &\");\n }\n\n function program8(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='columns small-3'>\\n <div class='icon-container'>\\n <i class='icon-book'></i>\\n </div>\\n </div>\\n <div class='columns small-6'>\\n <div class='title'>\\n Menus\\n </div>\\n <div class='description'>\\n With our simple menu designer, create custom menus for your terminals.\\n </div>\\n </div>\\n \");\n }\n\n function program10(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='columns small-3'>\\n <div class='icon-container'>\\n <i class='icon-face'></i>\\n </div>\\n </div>\\n <div class='columns small-6'>\\n <div class='title'>\\n Employees\\n </div>\\n <div class='description'>\\n Manage your employees, roles and permissions.\\n </div>\\n </div>\\n \");\n }\n\n function program12(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='columns small-3'>\\n <div class='icon-container'>\\n <i class='icon-suitcase'></i>\\n </div>\\n </div>\\n <div class='columns small-6'>\\n <div class='title'>\\n Payment Control\\n </div>\\n <div class='description'>\\n Create and edit discounts and surcharges\\n </div>\\n </div>\\n \");\n }\n\n function program14(depth0,data) {\n \n \n data.buffer.push(\"\\n <div class='columns small-3'>\\n <div class='icon-container'>\\n <i class='icon-settings'></i>\\n </div>\\n </div>\\n <div class='columns small-6'>\\n <div class='title'>\\n Settings\\n </div>\\n <div class='description'>\\n Change your ImPOS online settings for the dashboard and terminals\\n </div>\\n </div>\\n \");\n }\n\n data.buffer.push(\"<section class='landing'>\\n <ul class=\\\"small-block-grid-2\\\">\\n <li class='item'>\\n <div class='row'>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'route': (\"products\"),\n 'allowed': (\"acl.products.read\")\n },hashTypes:{'route': \"STRING\",'allowed': \"ID\"},hashContexts:{'route': depth0,'allowed': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </li>\\n <li class='item'>\\n <div class='row'>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'route': (\"venues\"),\n 'allowed': (\"acl.venues.read\")\n },hashTypes:{'route': \"STRING\",'allowed': \"ID\"},hashContexts:{'route': depth0,'allowed': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </li>\\n <li class='item'>\\n <div class='row'>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'route': (\"menus\"),\n 'allowed': (\"acl.menus.read\")\n },hashTypes:{'route': \"STRING\",'allowed': \"ID\"},hashContexts:{'route': depth0,'allowed': depth0},inverse:self.noop,fn:self.program(8, program8, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </li>\\n <li class='item'>\\n <div class='row'>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'route': (\"users\"),\n 'allowed': (\"acl.users.read\")\n },hashTypes:{'route': \"STRING\",'allowed': \"ID\"},hashContexts:{'route': depth0,'allowed': depth0},inverse:self.noop,fn:self.program(10, program10, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </li>\\n <li class='item'>\\n <div class='row'>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'route': (\"surcharges\"),\n 'allowed': (\"acl.surcharges.read\")\n },hashTypes:{'route': \"STRING\",'allowed': \"ID\"},hashContexts:{'route': depth0,'allowed': depth0},inverse:self.noop,fn:self.program(12, program12, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </li>\\n <li class='item'>\\n <div class='row'>\\n \");\n stack1 = (helper = helpers['acl-link'] || (depth0 && depth0['acl-link']),options={hash:{\n 'route': (\"settings\"),\n 'allowed': (\"acl.settings.read\")\n },hashTypes:{'route': \"STRING\",'allowed': \"ID\"},hashContexts:{'route': depth0,'allowed': depth0},inverse:self.noop,fn:self.program(14, program14, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </li>\\n </ul>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/organisations/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h3>Create a new organisation</h3>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-12 columns\\\">\\n <form data-abide class=\\\"form organisation create\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"organisation/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n <div class=\\\"button-group right\\\">\\n <a class=\\\"button secondary cancel\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n <button type=\\\"submit\\\" class=\\\"button primary\\\">Save</button>\\n </div>\\n </form>\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/organisations/select', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <p>There are multiple organisations associated with your account.</p>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'id': (\"select-organisation\"),\n 'content': (\"content\"),\n 'selection': (\"organisation\"),\n 'optionLabelPath': (\"content.name\"),\n 'prompt': (\"Select organisation\")\n },hashTypes:{'id': \"STRING\",'content': \"ID\",'selection': \"ID\",'optionLabelPath': \"STRING\",'prompt': \"STRING\"},hashContexts:{'id': depth0,'content': depth0,'selection': depth0,'optionLabelPath': depth0,'prompt': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h1>Choose your organisation</h1>\\n \");\n stack1 = helpers['if'].call(depth0, \"hasOrganisations\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <button \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"create\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Add a new organisation</button>\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printer/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<section id=\\\"printerEdit\\\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"printer.form\", {hash:{\n 'label': (\"Edit printer\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printer/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Printer Name\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Gateway\"),\n 'id': (\"gateway\")\n },hashTypes:{'label': \"STRING\",'id': \"STRING\"},hashContexts:{'label': depth0,'id': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'id': (\"printer\"),\n 'label': (\"Printer\")\n },hashTypes:{'id': \"STRING\",'label': \"STRING\"},hashContexts:{'id': depth0,'label': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Printer Groups\"),\n 'class': (\"printergroups\"),\n 'useLabelTag': (false)\n },hashTypes:{'label': \"STRING\",'class': \"STRING\",'useLabelTag': \"BOOLEAN\"},hashContexts:{'label': depth0,'class': depth0,'useLabelTag': depth0},inverse:self.noop,fn:self.program(8, program8, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter a friendly name for the printer\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Printer Name is required.</small>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-2'] || (depth0 && depth0['select-2']),options={hash:{\n 'class': (\"printer-gateways-selection\"),\n 'ref': (\"1\"),\n 'textField': (\"gateway_id\"),\n 'data': (\"props.gateways\"),\n 'selectedVal': (\"gateway\"),\n 'placeholder': (\"Select a gateway\"),\n 'width': (\"100%\")\n },hashTypes:{'class': \"STRING\",'ref': \"STRING\",'textField': \"STRING\",'data': \"ID\",'selectedVal': \"ID\",'placeholder': \"STRING\",'width': \"STRING\"},hashContexts:{'class': depth0,'ref': depth0,'textField': depth0,'data': depth0,'selectedVal': depth0,'placeholder': depth0,'width': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-2\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Please select a gateway.</small>\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-2'] || (depth0 && depth0['select-2']),options={hash:{\n 'class': (\"printer-devices-selection\"),\n 'ref': (\"2\"),\n 'query': (\"availablePrinters\"),\n 'selectedData': (\"props.selectedDevice\"),\n 'formatSearching': (\"view.formatSearchingPrinter\"),\n 'formatNoMatches': (\"view.formatNoAvailablePrinter\"),\n 'placeholder': (\"Select a printer\"),\n 'initSelection': (\"printerInitSelection\"),\n 'width': (\"100%\")\n },hashTypes:{'class': \"STRING\",'ref': \"STRING\",'query': \"ID\",'selectedData': \"ID\",'formatSearching': \"ID\",'formatNoMatches': \"ID\",'placeholder': \"STRING\",'initSelection': \"ID\",'width': \"STRING\"},hashContexts:{'class': depth0,'ref': depth0,'query': depth0,'selectedData': depth0,'formatSearching': depth0,'formatNoMatches': depth0,'placeholder': depth0,'initSelection': depth0,'width': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-2\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Please select a printer.</small>\\n \");\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'multiple': (true),\n 'content': (\"props.printergroups\"),\n 'selection': (\"printergroups\"),\n 'optionValuePath': (\"content.id\")\n },hashTypes:{'multiple': \"BOOLEAN\",'content': \"ID\",'selection': \"ID\",'optionValuePath': \"STRING\"},hashContexts:{'multiple': depth0,'content': depth0,'selection': depth0,'optionValuePath': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"printer\"),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\")\n },hashTypes:{'type': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\"},hashContexts:{'type': depth0,'cancel': depth0,'delete': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printergroup/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"printergroup.form\", {hash:{\n 'label': (\"Edit printer group\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printergroup/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Logo\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Name\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Printers\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-2'] || (depth0 && depth0['select-2']),options={hash:{\n 'class': (\"printer-group-logo-selection\"),\n 'containerCssClass': (\"printer-group-logo-selection-container\"),\n 'textField': (\"name\"),\n 'objectNameField': (\"logo\"),\n 'ref': (\"1\"),\n 'data': (\"props.printerimages\"),\n 'selectedVal': (\"logo\"),\n 'formatSelection': (\"view.formatLogoSelection\"),\n 'formatResult': (\"view.formatLogoResult\"),\n 'width': (\"100%\")\n },hashTypes:{'class': \"STRING\",'containerCssClass': \"STRING\",'textField': \"STRING\",'objectNameField': \"STRING\",'ref': \"STRING\",'data': \"ID\",'selectedVal': \"ID\",'formatSelection': \"ID\",'formatResult': \"ID\",'width': \"STRING\"},hashContexts:{'class': depth0,'containerCssClass': depth0,'textField': depth0,'objectNameField': depth0,'ref': depth0,'data': depth0,'selectedVal': depth0,'formatSelection': depth0,'formatResult': depth0,'width': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-2\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"model.name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the printer group name\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Name is required.</small>\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-2'] || (depth0 && depth0['select-2']),options={hash:{\n 'class': (\"printer-group-printers-selection\"),\n 'containerCssClass': (\"printer-group-printer-selection-container\"),\n 'textField': (\"name\"),\n 'objectNameField': (\"logo\"),\n 'ref': (\"2\"),\n 'data': (\"props.printers\"),\n 'selectedVal': (\"printers\"),\n 'multiple': (\"true\")\n },hashTypes:{'class': \"STRING\",'containerCssClass': \"STRING\",'textField': \"STRING\",'objectNameField': \"STRING\",'ref': \"STRING\",'data': \"ID\",'selectedVal': \"ID\",'multiple': \"STRING\"},hashContexts:{'class': depth0,'containerCssClass': depth0,'textField': depth0,'objectNameField': depth0,'ref': depth0,'data': depth0,'selectedVal': depth0,'multiple': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-2\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"printergroup\"),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\")\n },hashTypes:{'type': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\"},hashContexts:{'type': depth0,'cancel': depth0,'delete': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printergroups/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"printergroup.form\", {hash:{\n 'label': (\"Create a new printer group\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printergroups/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Group Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"printergroup\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"printergroup.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"printergroup.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"printergroup\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"printergroup\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printerimage/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"printerimage.form\", {hash:{\n 'label': (\"Edit Receipt Printer Logo\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printerimage/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Logo\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Name\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(7, program7, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'class': (\"printergroups\"),\n 'label': (\"Printer groups\"),\n 'useLabelTag': (false)\n },hashTypes:{'class': \"STRING\",'label': \"STRING\",'useLabelTag': \"BOOLEAN\"},hashContexts:{'class': depth0,'label': depth0,'useLabelTag': depth0},inverse:self.noop,fn:self.program(9, program9, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class=\\\"receiptPrinterLogoContainer\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"uploadLogo\", {hash:{\n 'target': (\"view\"),\n 'on': (\"click\")\n },hashTypes:{'target': \"STRING\",'on': \"STRING\"},hashContexts:{'target': depth0,'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"model.preview\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <img class=\\\"receiptPrinterLogoPreview\\\" \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'src': (\"model.previewImageURL\")\n },hashTypes:{'src': \"ID\"},hashContexts:{'src': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"/>\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n \n data.buffer.push(\"\\n <span>Click to upload</span>\\n \");\n }\n\n function program7(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"model.name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the name\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Name is required.</small>\\n \");\n return buffer;\n }\n\n function program9(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'class': (\"printergroups\"),\n 'content': (\"props.printergroups\"),\n 'optionValuePath': (\"content.id\"),\n 'selection': (\"printergroups\"),\n 'multiple': (true)\n },hashTypes:{'class': \"STRING\",'content': \"ID\",'optionValuePath': \"STRING\",'selection': \"ID\",'multiple': \"BOOLEAN\"},hashContexts:{'class': depth0,'content': depth0,'optionValuePath': depth0,'selection': depth0,'multiple': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"printerimage\"),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\"),\n 'submitDisabled': (\"view.isProcessing\"),\n 'submitLabel': (\"view.submitLabel\")\n },hashTypes:{'type': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\",'submitDisabled': \"ID\",'submitLabel': \"ID\"},hashContexts:{'type': depth0,'cancel': depth0,'delete': depth0,'submitDisabled': depth0,'submitLabel': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printerimages/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"printerimage.form\", {hash:{\n 'label': (\"Create a new printer logo\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printerimages/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th>Image</th>\\n <th data-sort-by='name'>Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"printerimage\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"printerimage.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td><img \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'src': (\"printerimage.previewImageURL\"),\n 'class': (\":printerLogoInList\")\n },hashTypes:{'src': \"ID\",'class': \"STRING\"},hashContexts:{'src': depth0,'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></td>\\n <td class=\\\"name\\\">\");\n stack1 = helpers._triageMustache.call(depth0, \"printerimage.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"printerimage\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"printerimage\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printers/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"printer.form\", {hash:{\n 'label': (\"Add a printer\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/printers/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Printer Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"printer\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"printer.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"printer.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"printer\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"printer\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"product/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['foundation-tabs'] || (depth0 && depth0['foundation-tabs']),options={hash:{\n 'activeTab': (\"tab\")\n },hashTypes:{'activeTab': \"ID\"},hashContexts:{'activeTab': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-tabs\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class='row'>\\n <div class='columns'>\\n <ul class='tabs'>\\n <li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":basic :tab-title tabHasError.basic:error-icon\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <a href='#basic'>Basic Details.</a>\\n <i class='error-icon icon-x-outline'></i>\\n </li>\\n <li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":options-instructions :tab-title tabHasError.options-instructions:error-icon\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <a href='#options-instructions'>Options & Instructions.</a>\\n <i class='error-icon icon-x-outline'></i>\\n </li>\\n <li \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":sizes-prices :tab-title tabHasError.sizes-prices:error-icon\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <a href='#sizes-prices'>Sizes & Prices.</a>\\n <i class='error-icon icon-x-outline'></i>\\n </li>\\n </ul>\\n </div>\\n </div>\\n <div class='tabs-content'>\\n <div class='content active' id='basic'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"product/form/basic\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </div>\\n <div class='content' id='options-instructions'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"product/form/options\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"product/form/instructions\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n <div class='content' id='sizes-prices'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"product/form/sizes-prices\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n </div>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"product\"),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\"),\n 'includeControls': (false),\n 'submitLabel': (\"Save all changes\")\n },hashTypes:{'type': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\",'includeControls': \"BOOLEAN\",'submitLabel': \"STRING\"},hashContexts:{'type': depth0,'cancel': depth0,'delete': depth0,'includeControls': depth0,'submitLabel': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form/_optionitem', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, self=this, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <tr class='goitem'>\\n <td class='label'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"ctrl.option.group.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" -\\n <span class='cardinality'>\\n \");\n stack1 = helpers['if'].call(depth0, \"ctrl.option.isMandatory\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </span>\\n </td>\\n <td class='variant'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'value': (\"ctrl.goitem.variant\"),\n 'content': (\"ctrl.option.group.variants\"),\n 'optionLabelPath': (\"content.name\")\n },hashTypes:{'value': \"ID\",'content': \"ID\",'optionLabelPath': \"STRING\"},hashContexts:{'value': depth0,'content': depth0,'optionLabelPath': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </td>\\n <td class='price'></td>\\n </tr>\\n \");\n stack1 = helpers.each.call(depth0, \"item\", \"in\", \"ctrl.option.goitems\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n At least \");\n stack1 = helpers._triageMustache.call(depth0, \"ctrl.option.minimum\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" products\\n \");\n stack1 = helpers['if'].call(depth0, \"ctrl.option.maximum\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\", at most \");\n stack1 = helpers._triageMustache.call(depth0, \"ctrl.option.maximum\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" products\");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n At most \");\n stack1 = helpers._triageMustache.call(depth0, \"ctrl.option.maximum\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" products\\n \");\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <tr>\\n <td class='label'><div class='indent'>\");\n stack1 = helpers._triageMustache.call(depth0, \"item.product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div></td>\\n <td class='variant'>\");\n stack1 = helpers._triageMustache.call(depth0, \"item.variant.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='price'>\");\n stack1 = helpers._triageMustache.call(depth0, \"item.price.formatted.incTaxValue\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program9(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers['with'].call(depth0, \"ctrl.poitem\", \"as\", \"poitem\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(10, program10, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program10(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='poitem item'>\\n <td class='label'>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"poitem.product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td class='variant'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'value': (\"poitem.variant\"),\n 'content': (\"poitem.product.variants\"),\n 'optionLabelPath': (\"content.name\")\n },hashTypes:{'value': \"ID\",'content': \"ID\",'optionLabelPath': \"STRING\"},hashContexts:{'value': depth0,'content': depth0,'optionLabelPath': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </td>\\n <td class='price'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['price-entry'] || (depth0 && depth0['price-entry']),options={hash:{\n 'price': (\"poitem.price\"),\n 'inherited': (\"poitem.variantOrDefault.price\")\n },hashTypes:{'price': \"ID\",'inherited': \"ID\"},hashContexts:{'price': depth0,'inherited': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"price-entry\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, \"ctrl.option.hasGroup\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(9, program9, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form/basic', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='image' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"uploadImage\", {hash:{\n 'target': (\"view\"),\n 'on': (\"click\")\n },hashTypes:{'target': \"STRING\",'on': \"STRING\"},hashContexts:{'target': depth0,'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":preview image:has-image:\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <img \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'src': (\"imageURL\"),\n 'class': (\"image::invisible :content\")\n },hashTypes:{'src': \"ID\",'class': \"STRING\"},hashContexts:{'src': depth0,'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div class='name'>\\n \");\n stack1 = helpers['if'].call(depth0, \"name\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'icon': (\"icon-x-outline\"),\n 'circle': (true),\n 'action': (\"removeImage\"),\n 'bubbles': (false),\n 'class': (\"remove\")\n },hashTypes:{'icon': \"STRING\",'circle': \"BOOLEAN\",'action': \"STRING\",'bubbles': \"BOOLEAN\",'class': \"STRING\"},hashContexts:{'icon': depth0,'circle': depth0,'action': depth0,'bubbles': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n </div>\\n <a class='button add'>Add product image</a>\\n </div>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n New Product\\n \");\n }\n\n function program6(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'class': (\"name\"),\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"name\"),\n 'required': (true)\n },hashTypes:{'class': \"STRING\",'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"BOOLEAN\"},hashContexts:{'class': depth0,'name': depth0,'type': depth0,'value': depth0,'required': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class='error'>Name is required.</small>\\n \");\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.textarea || (depth0 && depth0.textarea),options={hash:{\n 'name': (\"description\"),\n 'value': (\"description\"),\n 'class': (\"description\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the description\")\n },hashTypes:{'name': \"STRING\",'value': \"ID\",'class': \"STRING\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'value': depth0,'class': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"textarea\", options))));\n data.buffer.push(\"\\n <small class='error'>A description is required.</small>\\n \");\n return buffer;\n }\n\n function program10(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <div class='flex flex-center'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"barcode\"),\n 'type': (\"text\"),\n 'value': (\"barcode\"),\n 'placeholder': (\"Enter or scan the barcode\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'text': (\"Add\"),\n 'icon': (\"fi-plus\"),\n 'circle': (true),\n 'action': (\"scanBarcode\"),\n 'class': (\"flex-fixed add\")\n },hashTypes:{'text': \"STRING\",'icon': \"STRING\",'circle': \"BOOLEAN\",'action': \"STRING\",'class': \"STRING\"},hashContexts:{'text': depth0,'icon': depth0,'circle': depth0,'action': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n\n function program12(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"sku\"),\n 'value': (\"sku\")\n },hashTypes:{'name': \"STRING\",'value': \"ID\"},hashContexts:{'name': depth0,'value': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program14(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'multiple': (true),\n 'content': (\"all.productgroups\"),\n 'selection': (\"productgroups\")\n },hashTypes:{'multiple': \"BOOLEAN\",'content': \"ID\",'selection': \"ID\"},hashContexts:{'multiple': depth0,'content': depth0,'selection': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program16(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'multiple': (true),\n 'content': (\"all.surcharges\"),\n 'selection': (\"surcharges\")\n },hashTypes:{'multiple': \"BOOLEAN\",'content': \"ID\",'selection': \"ID\"},hashContexts:{'multiple': depth0,'content': depth0,'selection': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='row basic'>\\n <div class='columns medium-2 form-controls image-container'>\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Product Image\"),\n 'tagName': (\"div\")\n },hashTypes:{'label': \"STRING\",'tagName': \"STRING\"},hashContexts:{'label': depth0,'tagName': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <ul class='form-controls columns large-4 medium-8 basic-controls'>\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Product Name\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(6, program6, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <label class='purchasable'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"purchasable\"),\n 'type': (\"checkbox\"),\n 'checked': (\"purchasable\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n This product can be selected in the POS terminal.\\n </label>\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Description\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(8, program8, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Barcode\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(10, program10, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Quick code / SKU\")\n },hashTypes:{'label': \"STRING\"},hashContexts:{'label': depth0},inverse:self.noop,fn:self.program(12, program12, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n <ul class='form-controls columns large-4 medium-10'>\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Product groups\"),\n 'class': (\"productgroups\"),\n 'useLabelTag': (false)\n },hashTypes:{'label': \"STRING\",'class': \"STRING\",'useLabelTag': \"BOOLEAN\"},hashContexts:{'label': depth0,'class': depth0,'useLabelTag': depth0},inverse:self.noop,fn:self.program(14, program14, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['form-control'] || (depth0 && depth0['form-control']),options={hash:{\n 'label': (\"Surcharges and discounts\"),\n 'class': (\"surcharges\"),\n 'useLabelTag': (false)\n },hashTypes:{'label': \"STRING\",'class': \"STRING\",'useLabelTag': \"BOOLEAN\"},hashContexts:{'label': depth0,'class': depth0,'useLabelTag': depth0},inverse:self.noop,fn:self.program(16, program16, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-control\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n</div>\\n\\n\");\n data.buffer.push(escapeExpression((helper = helpers['image-cropper'] || (depth0 && depth0['image-cropper']),options={hash:{\n 'originalImage': (\"controller.newImage\"),\n 'title': (\"Product Image Selection\"),\n 'confirmSave': (\"confirmCroppedImage\"),\n 'aspectRatio': (\"view.aspectRatio\"),\n 'minSize': (\"view.minSizeToCrop\"),\n 'maxSize': (\"view.minSizeToCrop\"),\n 'setSelect': (\"view.setSelect\"),\n 'forceSelect': (true)\n },hashTypes:{'originalImage': \"ID\",'title': \"STRING\",'confirmSave': \"STRING\",'aspectRatio': \"ID\",'minSize': \"ID\",'maxSize': \"ID\",'setSelect': \"ID\",'forceSelect': \"BOOLEAN\"},hashContexts:{'originalImage': depth0,'title': depth0,'confirmSave': depth0,'aspectRatio': depth0,'minSize': depth0,'maxSize': depth0,'setSelect': depth0,'forceSelect': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"image-cropper\", options))));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form/instructions', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='instruction'>\\n <div class='row'>\\n <div class='columns'>\\n <div class='header thead'>\\n <div class='flex-row'>\\n <div class='name columns medium-9'>\\n <small>Instruction:</small>\\n <h4 class='value'>\");\n stack1 = helpers._triageMustache.call(depth0, \"instruction.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</h4>\\n </div>\\n <div class='actions columns medium-1 flex-center'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'class': (\"remove-instruction remove right large\"),\n 'action': (\"remove\"),\n 'icon': (\"icon-x-outline\"),\n 'text': (\"Remove\")\n },hashTypes:{'class': \"STRING\",'action': \"STRING\",'icon': \"STRING\",'text': \"STRING\"},hashContexts:{'class': depth0,'action': depth0,'icon': depth0,'text': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n </div>\\n </div>\\n </div>\\n <table class='instruction-items vertical-lines rounded-bottom'>\\n <thead>\\n <tr>\\n <th class='default'>Default</th>\\n <th>Instruction item</th>\\n <th>Price</th>\\n <th>Override price</th>\\n <th class='actions center'>Disable item</th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"piitem\", \"in\", \"instruction.productinstructionitems\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n </div>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item'>\\n <td class='center'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'class': (\"is-default\"),\n 'checked': (\"piitem.default\"),\n 'disabled': (\"piitem.disabled\")\n },hashTypes:{'type': \"STRING\",'class': \"STRING\",'checked': \"ID\",'disabled': \"ID\"},hashContexts:{'type': depth0,'class': depth0,'checked': depth0,'disabled': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </td>\\n <td class='name'>\");\n stack1 = helpers._triageMustache.call(depth0, \"piitem.instructionitem.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['prices-entry'] || (depth0 && depth0['prices-entry']),options={hash:{\n 'prices': (\"piitem.instructionitem.prices\"),\n 'readOnly': (true)\n },hashTypes:{'prices': \"ID\",'readOnly': \"BOOLEAN\"},hashContexts:{'prices': depth0,'readOnly': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"prices-entry\", options))));\n data.buffer.push(\"\\n </td>\\n <td>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['prices-entry'] || (depth0 && depth0['prices-entry']),options={hash:{\n 'prices': (\"piitem.prices\")\n },hashTypes:{'prices': \"ID\"},hashContexts:{'prices': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"prices-entry\", options))));\n data.buffer.push(\"\\n </td>\\n <td class='actions center'>\\n <div class='hide-text'>Disabled:</div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'class': (\"is-disabled\"),\n 'checked': (\"piitem.disabled\")\n },hashTypes:{'type': \"STRING\",'class': \"STRING\",'checked': \"ID\"},hashContexts:{'type': depth0,'class': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <h3>Add an instruction</h3>\\n <div class='content'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['filterable-list-select'] || (depth0 && depth0['filterable-list-select']),options={hash:{\n 'availableList': (\"availableInstructions\"),\n 'selectedItems': (\"selectedInstructions\"),\n 'resultHeaderInfoText': (\"\"),\n 'resultHeaderCheckboxText': (\"\"),\n 'class': (\"instruction-select\")\n },hashTypes:{'availableList': \"ID\",'selectedItems': \"ID\",'resultHeaderInfoText': \"STRING\",'resultHeaderCheckboxText': \"STRING\",'class': \"STRING\"},hashContexts:{'availableList': depth0,'selectedItems': depth0,'resultHeaderInfoText': depth0,'resultHeaderCheckboxText': depth0,'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"filterable-list-select\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='action'>\\n <a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :primary isAddInstructionConfirmDisabled:disabled :confirm-addinstruction\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addInstructions\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Confirm</a>\\n <a class='button cancel' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"closeAddInstructionModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n </div>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='instructions'>\\n <div class='row'>\\n <div class='columns'>\\n <a class='button add-instruction large right-button' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"showAddInstructionModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n Add an instruction\\n </a>\\n <h2>Product Instructions.</h2>\\n <p>Product instructions are optional and can be used for <strong>defining\\n things</strong> such as if an order is ‘Dine in or take away’.</p>\\n </div>\\n </div>\\n \");\n stack1 = helpers.each.call(depth0, \"instruction\", \"in\", \"instructions\", {hash:{\n 'itemController': (\"products.instruction\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['foundation-reveal'] || (depth0 && depth0['foundation-reveal']),options={hash:{\n 'open': (\"isAddInstructionModalOpen\"),\n 'revealModalClass': (\"large\"),\n 'class': (\"add-instruction-dialog\")\n },hashTypes:{'open': \"ID\",'revealModalClass': \"STRING\",'class': \"STRING\"},hashContexts:{'open': depth0,'revealModalClass': depth0,'class': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-reveal\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form/option', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='sub-products vertical-lines rounded-bottom'>\\n <thead>\\n <tr>\\n <th class='default center'>Default</th>\\n <th>Product Groups and Products</th>\\n <th class='actions center'>Disable product</th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"item\", \"in\", \"model.groupitems\", {hash:{\n 'itemController': (\"product.form.groupoptionitem\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item'>\\n <td class='default center'>\\n \");\n stack1 = helpers['if'].call(depth0, \"model.hasOneMaximum\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td class='name'>\");\n stack1 = helpers._triageMustache.call(depth0, \"item.product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions center'>\\n <div class='hide-text'>Disabled:</div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'disabled': (\"item.isDefault\"),\n 'class': (\"is-disabled\"),\n 'checked': (\"item.isDisabled\")\n },hashTypes:{'type': \"STRING\",'disabled': \"ID\",'class': \"STRING\",'checked': \"ID\"},hashContexts:{'type': depth0,'disabled': depth0,'class': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['radio-button'] || (depth0 && depth0['radio-button']),options={hash:{\n 'class': (\"is-default\"),\n 'value': (\"item\"),\n 'selection': (\"defaultItem\"),\n 'checked': (\"item.isDefault\"),\n 'disabled': (\"item.isDisabled\")\n },hashTypes:{'class': \"STRING\",'value': \"ID\",'selection': \"ID\",'checked': \"ID\",'disabled': \"ID\"},hashContexts:{'class': depth0,'value': depth0,'selection': depth0,'checked': depth0,'disabled': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"radio-button\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"checkbox\"),\n 'class': (\"is-default\"),\n 'checked': (\"item.isDefault\"),\n 'disabled': (\"item.isDisabled\")\n },hashTypes:{'type': \"STRING\",'class': \"STRING\",'checked': \"ID\",'disabled': \"ID\"},hashContexts:{'type': depth0,'class': depth0,'checked': depth0,'disabled': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":option model.product.resolved:product:product-group\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div class='row'>\\n <div class='columns'>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":header :thead model.product.resolved:rounded-bottom\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div class='flex-row'>\\n <div class='name columns medium-4'>\\n <small>Option:</small>\\n <h4 class='value'>\");\n stack1 = helpers._triageMustache.call(depth0, \"model.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</h4>\\n </div>\\n <div class='rules columns medium-5'>\\n <small>Selection rules:</small>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['option-rules'] || (depth0 && depth0['option-rules']),options={hash:{\n 'option': (\"model\")\n },hashTypes:{'option': \"ID\"},hashContexts:{'option': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"option-rules\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='actions columns medium-1'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'class': (\"remove-option remove right large\"),\n 'action': (\"remove\"),\n 'icon': (\"icon-x-outline\"),\n 'text': (\"Remove\")\n },hashTypes:{'class': \"STRING\",'action': \"STRING\",'icon': \"STRING\",'text': \"STRING\"},hashContexts:{'class': depth0,'action': depth0,'icon': depth0,'text': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n </div>\\n \");\n stack1 = helpers['if'].call(depth0, \"model.group\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form/options', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-and-group-select'] || (depth0 && depth0['product-and-group-select']),options={hash:{\n 'availableProducts': (\"availableProducts\"),\n 'availableProductGroups': (\"availableProductGroups\"),\n 'excludedProducts': (\"addedOptionProducts\"),\n 'excludedProductGroups': (\"addedOptionProductGroups\"),\n 'selectedProducts': (\"selectedOptionProducts\"),\n 'selectedProductGroups': (\"selectedOptionProductGroups\")\n },hashTypes:{'availableProducts': \"ID\",'availableProductGroups': \"ID\",'excludedProducts': \"ID\",'excludedProductGroups': \"ID\",'selectedProducts': \"ID\",'selectedProductGroups': \"ID\"},hashContexts:{'availableProducts': depth0,'availableProductGroups': depth0,'excludedProducts': depth0,'excludedProductGroups': depth0,'selectedProducts': depth0,'selectedProductGroups': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-and-group-select\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='options'>\\n <div class='row'>\\n <div class='columns'>\\n <a class='button add-option large right-button' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"showAddOptionModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n Add a new option\\n </a>\\n <p>\\n <strong>Products</strong> or <strong>Product Groups</strong> can be added\\n as <strong>Options</strong> to create meals and other complex products.\\n <strong>Selection Rules</strong> can also be applied to Product Groups to <strong>control\\n how options are selected</strong> in the POS.\\n </p>\\n </div>\\n </div>\\n \");\n data.buffer.push(escapeExpression(helpers.each.call(depth0, \"options\", {hash:{\n 'itemController': (\"products.option\"),\n 'itemView': (\"product/form/option\")\n },hashTypes:{'itemController': \"STRING\",'itemView': \"STRING\"},hashContexts:{'itemController': depth0,'itemView': depth0},contexts:[depth0],types:[\"ID\"],data:data})));\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'open': (\"isAddOptionModalOpen\"),\n 'confirmDisabled': (\"isAddOptionConfirmDisabled\"),\n 'revealModalClass': (\"large\"),\n 'class': (\"options-selector\"),\n 'action': (\"addOptions\"),\n 'cancel': (\"closeAddOptionModal\")\n },hashTypes:{'open': \"ID\",'confirmDisabled': \"ID\",'revealModalClass': \"STRING\",'class': \"STRING\",'action': \"STRING\",'cancel': \"STRING\"},hashContexts:{'open': depth0,'confirmDisabled': depth0,'revealModalClass': depth0,'class': depth0,'action': depth0,'cancel': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form/sizes-prices', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"\\n <br>\\n You can also use <strong>Size Templates</strong>\\n for common sizes across your product ranges.\\n \");\n }\n\n data.buffer.push(\"<div class='variants'>\\n <div class='row'>\\n <div class='columns'>\\n <a class='button primary create-variant large right-button' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"createVariant\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n Add a new size\\n </a>\\n <p>\\n You can add different <strong>sizes and prices</strong> to this\\n product, and its options.\\n \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"sizetemplates\", options) : helperMissing.call(depth0, \"if-feature\", \"sizetemplates\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </p>\\n </div>\\n </div>\\n \");\n data.buffer.push(escapeExpression(helpers.each.call(depth0, \"variants\", {hash:{\n 'itemController': (\"product/form/variant\"),\n 'itemView': (\"product/form/variant\")\n },hashTypes:{'itemController': \"STRING\",'itemView': \"STRING\"},hashContexts:{'itemController': depth0,'itemView': depth0},contexts:[depth0],types:[\"ID\"],data:data})));\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/product/form/variant', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['accordion-item'] || (depth0 && depth0['accordion-item']),options={hash:{\n 'open': (\"open\")\n },hashTypes:{'open': \"ID\"},hashContexts:{'open': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"accordion-item\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <dt \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\"open::bottom-border\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div class='flex'>\\n <div class='selects left no-gap'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['radio-button'] || (depth0 && depth0['radio-button']),options={hash:{\n 'name': (\"default-variant\"),\n 'value': (\"variant\"),\n 'selection': (\"variant.product.defaultVariant\")\n },hashTypes:{'name': \"STRING\",'value': \"ID\",'selection': \"ID\"},hashContexts:{'name': depth0,'value': depth0,'selection': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"radio-button\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='content-container'>\\n <div class='left'>\\n <label>Size:\\n \");\n data.buffer.push(escapeExpression((helper = helpers['confirm-input'] || (depth0 && depth0['confirm-input']),options={hash:{\n 'class': (\"size\"),\n 'required': (\"hasManySize\"),\n 'value': (\"variant.name\"),\n 'editing': (\"isEditingSize\"),\n 'validateEditing': (true),\n 'placeholder': (\"Size\"),\n 'onFocusOutConfirm': (true),\n 'focusOnFirstDefaultEditing': (false)\n },hashTypes:{'class': \"STRING\",'required': \"ID\",'value': \"ID\",'editing': \"ID\",'validateEditing': \"BOOLEAN\",'placeholder': \"STRING\",'onFocusOutConfirm': \"BOOLEAN\",'focusOnFirstDefaultEditing': \"BOOLEAN\"},hashContexts:{'class': depth0,'required': depth0,'value': depth0,'editing': depth0,'validateEditing': depth0,'placeholder': depth0,'onFocusOutConfirm': depth0,'focusOnFirstDefaultEditing': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-input\", options))));\n data.buffer.push(\"\\n </label>\\n </div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['price-tax'] || (depth0 && depth0['price-tax']),options={hash:{\n 'price': (\"price\")\n },hashTypes:{'price': \"ID\"},hashContexts:{'price': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"price-tax\", options))));\n data.buffer.push(\"\\n <div class=\\\"right\\\">\\n \");\n data.buffer.push(escapeExpression((helper = helpers['accordion-button'] || (depth0 && depth0['accordion-button']),options={hash:{\n 'class': (\"accordion-button\"),\n 'extraDisplay': (true)\n },hashTypes:{'class': \"STRING\",'extraDisplay': \"BOOLEAN\"},hashContexts:{'class': depth0,'extraDisplay': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"accordion-button\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n <div class='right remove remove-panel'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'class': (\"remove-variant right large\"),\n 'action': (\"remove\"),\n 'icon': (\"icon-x-outline\"),\n 'text': (\"Remove\")\n },hashTypes:{'class': \"STRING\",'action': \"STRING\",'icon': \"STRING\",'text': \"STRING\"},hashContexts:{'class': depth0,'action': depth0,'icon': depth0,'text': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n </dt>\\n <dd>\\n <div class='products content'>\\n \");\n stack1 = helpers['if'].call(depth0, \"variant.product.mandatoryOptions.length\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"variant.product.optionalOptions.length\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </dd>\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='mandatory'>\\n <thead>\\n <tr class='header'>\\n <th class='label'>Mandatory Products</th>\\n <th class='variant'>Size</th>\\n <th class='price'>Price</th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"ctrl\", \"in\", \"variant.product.mandatoryOptions\", {hash:{\n 'itemController': (\"product/form/optionitem\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \\n \");\n data.buffer.push(escapeExpression((helper = helpers.partial || (depth0 && depth0.partial),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"product/form/optionitem\", options) : helperMissing.call(depth0, \"partial\", \"product/form/optionitem\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='optional'>\\n <thead>\\n <tr class='header'>\\n <th class='label'>Optional Products</th>\\n <th class='variant'>Size</th>\\n <th class='price'>Price</th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"ctrl\", \"in\", \"variant.product.optionalOptions\", {hash:{\n 'itemController': (\"product/form/optionitem\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n \");\n return buffer;\n }\n\n stack1 = (helper = helpers['accordion-container'] || (depth0 && depth0['accordion-container']),options={hash:{\n 'class': (\"variant\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"accordion-container\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/productgroup/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"productgroup.form\", {hash:{\n 'templateName': (\"productgroup/form\"),\n 'label': (\"Edit product group\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/productgroup/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <ul class='tabs'>\\n <li class='tab-title active basic'><a href='#product-group-basic'>Group Details</a></li>\\n <li class='tab-title variants'><a href='#product-group-sizes-prices'>Sizes & Prices</a></li>\\n </ul>\\n <div class='tabs-content'>\\n <div class='content active' id='product-group-basic'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"productgroup/form/basic\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n <div class='content' id='product-group-sizes-prices'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"productgroup/form/variant\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n </div>\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n \n data.buffer.push(\"\\n <button type='submit' class='button primary'>Save all changes</button>\\n \");\n }\n\n function program5(depth0,data) {\n \n \n data.buffer.push(\"\\n Cancel all changes\\n \");\n }\n\n function program7(depth0,data) {\n \n \n data.buffer.push(\"\\n Ok\\n \");\n }\n\n function program9(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='button-group right'>\\n <a class='button alert delete-product-group' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"showDeleteProductGroupModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Delete Group</a>\\n \");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'class': (\"delete-product-group-dialog\"),\n 'open': (\"isDeleting\"),\n 'confirmDisabled': (false),\n 'revealModalClass': (\"large\"),\n 'action': (\"delete\"),\n 'cancel': (\"closeDeleteProductGroupModal\")\n },hashTypes:{'class': \"STRING\",'open': \"ID\",'confirmDisabled': \"BOOLEAN\",'revealModalClass': \"STRING\",'action': \"STRING\",'cancel': \"STRING\"},hashContexts:{'class': depth0,'open': depth0,'confirmDisabled': depth0,'revealModalClass': depth0,'action': depth0,'cancel': depth0},inverse:self.noop,fn:self.program(10, program10, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n function program10(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <h3>Delete product group </h3>\\n <div>\\n Are you sure you want to delete \");\n stack1 = helpers._triageMustache.call(depth0, \"name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<section class='product-group'>\\n <form \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":form :productgroup isNew:create:edit\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['foundation-tabs'] || (depth0 && depth0['foundation-tabs']),options={hash:{\n 'activeTab': (\"activeTab\")\n },hashTypes:{'activeTab': \"ID\"},hashContexts:{'activeTab': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-tabs\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div class='button-group left'>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.productgroups.update\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <a class='button secondary cancel' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.productgroups.update\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a>\\n </div>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.productgroups.delete\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </form>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/productgroup/form/basic', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class=\\\"small-4 columns\\\">\\n <a class=\\\"button primary right add-product\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"showAddProductModal\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Add Products</a>\\n \");\n stack1 = (helper = helpers['confirm-action'] || (depth0 && depth0['confirm-action']),options={hash:{\n 'class': (\"add-product-dialog\"),\n 'open': (\"isAddProductOpen\"),\n 'confirmDisabled': (\"isAddProductDisabled\"),\n 'revealModalClass': (\"large\"),\n 'action': (\"addProducts\"),\n 'cancel': (\"closeAddProductModal\")\n },hashTypes:{'class': \"STRING\",'open': \"ID\",'confirmDisabled': \"ID\",'revealModalClass': \"STRING\",'action': \"STRING\",'cancel': \"STRING\"},hashContexts:{'class': depth0,'open': depth0,'confirmDisabled': depth0,'revealModalClass': depth0,'action': depth0,'cancel': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-action\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['product-select'] || (depth0 && depth0['product-select']),options={hash:{\n 'availableProducts': (\"all.products\"),\n 'excludedProducts': (\"excludedProducts\"),\n 'selectedProducts': (\"props.selectedProducts\")\n },hashTypes:{'availableProducts': \"ID\",'excludedProducts': \"ID\",'selectedProducts': \"ID\"},hashContexts:{'availableProducts': depth0,'excludedProducts': depth0,'selectedProducts': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"product-select\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <th class=\\\"action\\\"></th>\\n \");\n }\n\n function program6(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <tr class='product-row'>\\n <td class=\\\"name\\\">\");\n stack1 = helpers._triageMustache.call(depth0, \"product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.productgroups.update\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(7, program7, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tr>\\n \");\n return buffer;\n }\n function program7(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <td class=\\\"action\\\">\\n <a class=\\\"button remove right\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"removeProduct\", \"product\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data})));\n data.buffer.push(\">\\n <i class=\\\"icon-x-outline\\\"></i>\\n </a>\\n </td>\\n \");\n return buffer;\n }\n\n function program9(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n<div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <div class='surcharges'>\\n <div class='label'>Surcharges or Discounts\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'multiple': (true),\n 'content': (\"props.surcharges\"),\n 'selection': (\"model.surcharges\")\n },hashTypes:{'multiple': \"BOOLEAN\",'content': \"ID\",'selection': \"ID\"},hashContexts:{'multiple': depth0,'content': depth0,'selection': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n </div>\\n</div>\\n\");\n return buffer;\n }\n\n data.buffer.push(\"<div class='row name'>\\n <div class='columns small-4'>\\n <label class='name'>Group Name:\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'class': (\"name\"),\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"model.name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the product group name\")\n },hashTypes:{'class': \"STRING\",'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'class': depth0,'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class='error'>Name is required.</small>\\n </label>\\n </div>\\n</div>\\n<div class=\\\"row title\\\">\\n <div class=\\\"columns small-5\\\">\\n <h2>Products in this group</h2>\\n <div class='subtitle'>\\n Products or other Product Groups can be added into this group\\n </div>\\n </div>\\n <div class=\\\"search small-5 columns\\\">\\n <div class=\\\"small-6 columns list-filter\\\">\\n <i class=\\\"fi-magnifying-glass\\\"></i>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"productQuery\"),\n 'type': (\"text\"),\n 'class': (\"product-query\"),\n 'value': (\"productQuery\"),\n 'placeholder': (\"Filter Products\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'class': \"STRING\",'value': \"ID\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'class': depth0,'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </div>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.productgroups.update\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n</div>\\n<div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <table class=\\\"products form-table\\\">\\n <thead>\\n <tr>\\n <th class=\\\"title\\\">Included Products and Product Groups</th>\\n \");\n stack1 = helpers['if'].call(depth0, \"acl.productgroups.update\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"product\", \"in\", \"filteredProduct\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(6, program6, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\\n<!--This row has been hidden at the request of Mark. It's out of scope for go-live.-->\\n\");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(9, program9, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"surcounts-on-productgroups\", options) : helperMissing.call(depth0, \"if-feature\", \"surcounts-on-productgroups\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/productgroup/form/variant', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers.each.call(depth0, \"variant\", \"in\", \"model.variants\", {hash:{\n 'itemController': (\"productgroup.variant\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['accordion-item'] || (depth0 && depth0['accordion-item']),options={hash:{\n 'open': (\"variant.accordionOpen\")\n },hashTypes:{'open': \"ID\"},hashContexts:{'open': depth0},inverse:self.noop,fn:self.program(3, program3, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"accordion-item\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <dt class='variant-header'>\\n <div class='header-col default'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['radio-button'] || (depth0 && depth0['radio-button']),options={hash:{\n 'name': (\"default\"),\n 'class': (\"default\"),\n 'value': (\"variant.content\"),\n 'selection': (\"variant.pgroup.defaultVariant\")\n },hashTypes:{'name': \"STRING\",'class': \"STRING\",'value': \"ID\",'selection': \"ID\"},hashContexts:{'name': depth0,'class': depth0,'value': depth0,'selection': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"radio-button\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='header-col size'>\\n Size:<br/>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['confirm-input'] || (depth0 && depth0['confirm-input']),options={hash:{\n 'name': (\"size\"),\n 'value': (\"variant.content.name\"),\n 'placeholder': (\"variant.content.name\"),\n 'editing': (\"variant.editingName\")\n },hashTypes:{'name': \"STRING\",'value': \"ID\",'placeholder': \"ID\",'editing': \"ID\"},hashContexts:{'name': depth0,'value': depth0,'placeholder': depth0,'editing': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"confirm-input\", options))));\n data.buffer.push(\"\\n </div>\\n <div class='header-col price'>\\n Price:<br/>\\n <div class='value'>\\n \");\n stack1 = helpers['if'].call(depth0, \"variant.hasGlobalPrices\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n <div class='header-col remove'>\\n <a class='button small remove variant' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"removeVariant\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class='icon-x-outline'></i>\\n </a>\\n </div>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['accordion-button'] || (depth0 && depth0['accordion-button']),options={hash:{\n 'class': (\"header-col expand\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"accordion-button\", options))));\n data.buffer.push(\"\\n </dt>\\n <dd>\\n <div class='content'>\\n <table class='products form-table'>\\n <thead>\\n <tr>\\n <th class='title'>Included Products and Product Groups</th>\\n <th class='title text-center'>Product Size</th>\\n <th class='title text-center'>Price</th>\\n <th class='title text-center'>Override Price</th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"product\", \"in\", \"model.products\", {hash:{\n 'itemController': (\"productgroup.variant.product\")\n },hashTypes:{'itemController': \"STRING\"},hashContexts:{'itemController': depth0},inverse:self.noop,fn:self.program(8, program8, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n </div>\\n </dd>\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['prices-entry'] || (depth0 && depth0['prices-entry']),options={hash:{\n 'prices': (\"variant.content.prices\"),\n 'editing': (\"variant.editingPrice\")\n },hashTypes:{'prices': \"ID\",'editing': \"ID\"},hashContexts:{'prices': depth0,'editing': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"prices-entry\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n Various Prices <a class='edit-prices' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"useGlobalPrice\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">edit</a>\\n \");\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='product-row'>\\n <td class='name' width='40%'>\");\n stack1 = helpers._triageMustache.call(depth0, \"product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='size' width='20%'>\\n \");\n stack1 = helpers['if'].call(depth0, \"product.hasMultipleVariants\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(11, program11, data),fn:self.program(9, program9, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td class='price' width='20%'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['prices-entry'] || (depth0 && depth0['prices-entry']),options={hash:{\n 'prices': (\"product.currentPrices\"),\n 'readOnly': (true),\n 'data-id': (\"product.id\")\n },hashTypes:{'prices': \"ID\",'readOnly': \"BOOLEAN\",'data-id': \"ID\"},hashContexts:{'prices': depth0,'readOnly': depth0,'data-id': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"prices-entry\", options))));\n data.buffer.push(\"\\n </td>\\n <td class='override-price' width='20%'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['prices-entry'] || (depth0 && depth0['prices-entry']),options={hash:{\n 'prices': (\"product.overridePrices\"),\n 'inheritedPrices': (\"product.inheritedOverridePrices\"),\n 'readOnly': (\"product.referencesGlobalPrices\"),\n 'data-id': (\"product.id\")\n },hashTypes:{'prices': \"ID\",'inheritedPrices': \"ID\",'readOnly': \"ID\",'data-id': \"ID\"},hashContexts:{'prices': depth0,'inheritedPrices': depth0,'readOnly': depth0,'data-id': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"prices-entry\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n function program9(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"select\", {hash:{\n 'content': (\"product.variants\"),\n 'optionLabelPath': (\"content.name\"),\n 'optionValuePath': (\"content.id\"),\n 'selection': (\"product.groupitem.product_variant\"),\n 'data-id': (\"product.id\")\n },hashTypes:{'content': \"ID\",'optionLabelPath': \"STRING\",'optionValuePath': \"STRING\",'selection': \"ID\",'data-id': \"ID\"},hashContexts:{'content': depth0,'optionLabelPath': depth0,'optionValuePath': depth0,'selection': depth0,'data-id': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program11(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"product.defaultVariant.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<div class='row'>\\n <div class='columns small-5'>\\n <h2>Sizes & Prices</h2>\\n <div class='subtitle'>Add <strong>sizes</strong> and <strong>prices</strong> to this group and its options</div>\\n </div>\\n <div class='columns small-5'>\\n <a class='button primary add variant right' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"addVariant\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Add a new size</a>\\n </div>\\n</div>\\n<div class='row'>\\n \");\n stack1 = (helper = helpers['accordion-container'] || (depth0 && depth0['accordion-container']),options={hash:{\n 'class': (\"variant\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"accordion-container\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/productgroups/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"productgroup.form\", {hash:{\n 'templateName': (\"productgroup/form\"),\n 'label': (\"Create a new product group\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/productgroups/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Group Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"productgroup\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item'>\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"productgroup.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"productgroup\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"productgroup\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/products/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"product/form\"),\n 'label': (\"Create a new product\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/products/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Product Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"product\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"product.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"product\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"product\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/products/search', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'title': (\"description\")\n },hashTypes:{'title': \"ID\"},hashContexts:{'title': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[depth0,depth0],types:[\"STRING\",\"ID\"],data:data},helper ? helper.call(depth0, \"product.edit\", \"\", options) : helperMissing.call(depth0, \"link-to\", \"product.edit\", \"\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <li>\");\n stack1 = helpers._triageMustache.call(depth0, \"name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</li>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"Back\");\n }\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h2>Products Search</h2>\\n <ul>\\n \");\n stack1 = helpers.each.call(depth0, {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"products\", options) : helperMissing.call(depth0, \"link-to\", \"products\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/recover', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"Back to login\");\n }\n\n function program3(depth0,data) {\n \n \n data.buffer.push(\"Submit\");\n }\n\n function program5(depth0,data) {\n \n \n data.buffer.push(\"Sending&hellip;\");\n }\n\n data.buffer.push(\"<div class=\\\"recover page\\\">\\n <div class=\\\"impos-logo-white\\\"></div>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":center controllers.application.isDashboard:dashboard-logo-white:terminal-logo-white\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></div>\\n\\n <div class=\\\"recover full-screen panel center clearfix\\\">\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":form successful:hide\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <div class='franq form-title'>Reset your password.</div>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":sub-title emailNotExist:has-error\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">We'll email you instructions on how to reset your password.</div>\\n <form data-abide id=\\\"recover-form\\\" class='x-acl-handled' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"recover\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\" action=\\\"/api/v1/recover\\\">\\n\\n <label \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":error-message emailNotExist:visible\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n Incorrect email\\n </label>\\n\\n <div class=\\\"row\\\">\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"email\"),\n 'name': (\"username\"),\n 'id': (\"username\"),\n 'value': (\"email\"),\n 'placeholder': (\"Email Address\"),\n 'pattern': (\"email\"),\n 'required': (\"true\")\n },hashTypes:{'type': \"STRING\",'name': \"STRING\",'id': \"STRING\",'value': \"ID\",'placeholder': \"STRING\",'pattern': \"STRING\",'required': \"STRING\"},hashContexts:{'type': depth0,'name': depth0,'id': depth0,'value': depth0,'placeholder': depth0,'pattern': depth0,'required': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Invalid email</small>\\n </label>\\n </div>\\n\\n <div class=\\\"row actions\\\">\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":columns isTerminal:small-8:small-6\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['link-to'] || (depth0 && depth0['link-to']),options={hash:{\n 'class': (\"login\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"login\", options) : helperMissing.call(depth0, \"link-to\", \"login\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":columns isTerminal:small-8:small-6 :right-aligned\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <button type=\\\"submit\\\" id=\\\"recover\\\" class=\\\"button primary\\\"\\n \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'disabled': (\"isProcessing\")\n },hashTypes:{'disabled': \"STRING\"},hashContexts:{'disabled': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers.unless.call(depth0, \"isProcessing\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(5, program5, data),fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </button>\\n </div>\\n </div>\\n\\n </form>\\n </div>\\n\\n <!-- NOTIFICATION -->\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":success-message successful:show:hide\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <h4 class=\\\"heading\\\">Check Your Email</h4>\\n <p>Please check your email for instructions to reset your password. For\\n security purposes this email will expire in <strong>1 hour</strong>.</p>\\n <p>Be sure to check your junk mail folders or spam filters if you don't\\n receive a message appear within a couple of minutes.</p>\\n </div>\\n\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/reset-password', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"Reset password\");\n }\n\n function program3(depth0,data) {\n \n \n data.buffer.push(\"Sending&hellip;\");\n }\n\n data.buffer.push(\"<div class=\\\"recover page\\\">\\n <div class=\\\"impos-logo-white\\\"></div>\\n <div \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":center controllers.application.isDashboard:dashboard-logo-white:terminal-logo-white\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></div>\\n <div class=\\\"recover full-screen panel center clearfix\\\">\\n <h4 class=\\\"franq form-title\\\">Reset your password.</h4>\\n <h4 class=\\\"sub-title\\\">Create your new password</h4>\\n <form data-abide id=\\\"reset-password-form\\\" class='x-acl-handled' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <div class=\\\"row\\\">\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"password\"),\n 'name': (\"newpassword\"),\n 'id': (\"newpassword\"),\n 'value': (\"password\"),\n 'placeholder': (\"New Password\"),\n 'required': (\"true\")\n },hashTypes:{'type': \"STRING\",'name': \"STRING\",'id': \"STRING\",'value': \"ID\",'placeholder': \"STRING\",'required': \"STRING\"},hashContexts:{'type': depth0,'name': depth0,'id': depth0,'value': depth0,'placeholder': depth0,'required': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">New password must not empty</small>\\n </label>\\n </div>\\n <div class=\\\"row\\\">\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'type': (\"password\"),\n 'name': (\"repeat-newpassword\"),\n 'id': (\"repeat-newpassword\"),\n 'placeholder': (\"Repeat New Password\"),\n 'data-equalto': (\"newpassword\"),\n 'required': (\"true\")\n },hashTypes:{'type': \"STRING\",'name': \"STRING\",'id': \"STRING\",'placeholder': \"STRING\",'data-equalto': \"STRING\",'required': \"STRING\"},hashContexts:{'type': depth0,'name': depth0,'id': depth0,'placeholder': depth0,'data-equalto': depth0,'required': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">The password did not match</small>\\n </label>\\n </div>\\n <div class=\\\"button-group center\\\">\\n <button type=\\\"submit\\\" id=\\\"reset-password\\\" class=\\\"button right primary\\\"\\n \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'disabled': (\"isProcessing\")\n },hashTypes:{'disabled': \"STRING\"},hashContexts:{'disabled': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers.unless.call(depth0, \"isProcessing\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </button>\\n </div>\\n </form>\\n </div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/surcharge/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"surcharge/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n \n });\n\n});","define('dashboard/templates/surcharge/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['foundation-tabs'] || (depth0 && depth0['foundation-tabs']),options={hash:{\n 'activeTab': (\"basic-details\")\n },hashTypes:{'activeTab': \"STRING\"},hashContexts:{'activeTab': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-tabs\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class='row'>\\n <div class='columns'>\\n <ul class='tabs'>\\n <li class='basic-details tab-title'><a href='#basic-details' class='x-acl-handled'>Basic Details</a></li>\\n </ul>\\n </div>\\n </div>\\n <div class='tabs-content'>\\n <div class='content active' id='basic-details'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"surcharge.form.basic\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </div>\\n </div>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"surcharge\"),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\"),\n 'submitLabel': (\"Save\"),\n 'deleteLabel': (\"Delete\"),\n 'deleteTypeName': (\"model.type\"),\n 'includeControls': (false),\n 'createLabel': (\"Add a new discount or surcharge\")\n },hashTypes:{'type': \"STRING\",'cancel': \"STRING\",'delete': \"STRING\",'submitLabel': \"STRING\",'deleteLabel': \"STRING\",'deleteTypeName': \"ID\",'includeControls': \"BOOLEAN\",'createLabel': \"STRING\"},hashContexts:{'type': depth0,'cancel': depth0,'delete': depth0,'submitLabel': depth0,'deleteLabel': depth0,'deleteTypeName': depth0,'includeControls': depth0,'createLabel': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/surcharge/form/basic', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class=\\\"condition timeofday\\\">\\n \");\n stack1 = helpers['if'].call(depth0, \"model.conditions.timeofday\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div class=\\\"condition dayofweek\\\">\\n \");\n stack1 = helpers['if'].call(depth0, \"model.conditions.dayofweek\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n <div class=\\\"condition daterange\\\">\\n \");\n stack1 = helpers['if'].call(depth0, \"model.conditions.daterange\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(12, program12, data),fn:self.program(10, program10, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <label>Time of Day <a class=\\\"remove-condition\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"removeCondition\", \"timeofday\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">[x]</a>\\n <label>From\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"tod-from\"),\n 'type': (\"text\"),\n 'value': (\"model.conditions.timeofday.from\"),\n 'required': (\"true\"),\n 'pattern': (\"time\"),\n 'placeholder': (\"From this hour\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'pattern': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'pattern': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Please enter an hour of the day</small>\\n </label>\\n <label>To\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"tod-to\"),\n 'type': (\"text\"),\n 'value': (\"model.conditions.timeofday.to\"),\n 'required': (\"true\"),\n 'pattern': (\"time\"),\n 'placeholder': (\"To this hour\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'pattern': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'pattern': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Please enter an hour of the day</small>\\n </label>\\n </label>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <a class=\\\"button reveal\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"createCondition\", \"timeofday\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">Time of Day</a>\\n \");\n return buffer;\n }\n\n function program6(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <label>Day of Week <a class=\\\"remove-condition\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"removeCondition\", \"dayofweek\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">[x]</a>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"monday\"),\n 'type': (\"checkbox\"),\n 'checked': (\"model.conditions.dayofweek.monday\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Monday\\n </label>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"tuesday\"),\n 'type': (\"checkbox\"),\n 'checked': (\"model.conditions.dayofweek.tuesday\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Tuesday\\n </label>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"wednesday\"),\n 'type': (\"checkbox\"),\n 'checked': (\"model.conditions.dayofweek.wednesday\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Wednesday\\n </label>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"thursday\"),\n 'type': (\"checkbox\"),\n 'checked': (\"model.conditions.dayofweek.thursday\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Thursday\\n </label>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"friday\"),\n 'type': (\"checkbox\"),\n 'checked': (\"model.conditions.dayofweek.friday\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Friday\\n </label>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"saturday\"),\n 'type': (\"checkbox\"),\n 'checked': (\"model.conditions.dayofweek.saturday\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Saturday\\n </label>\\n <label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"sunday\"),\n 'type': (\"checkbox\"),\n 'checked': (\"model.conditions.dayofweek.sunday\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'checked': \"ID\"},hashContexts:{'name': depth0,'type': depth0,'checked': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n Sunday\\n </label>\\n </label>\\n \");\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <a class=\\\"button reveal\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"createCondition\", \"dayofweek\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">Day of Week</a>\\n \");\n return buffer;\n }\n\n function program10(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <label>Date Range <a class=\\\"remove-condition\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"removeCondition\", \"daterange\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">[x]</a>\\n <label>From (inclusive)\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"datefield\", {hash:{\n 'date': (\"model.conditions.daterange.from\"),\n 'class': (\"date\"),\n 'name': (\"dr-from\")\n },hashTypes:{'date': \"ID\",'class': \"STRING\",'name': \"STRING\"},hashContexts:{'date': depth0,'class': depth0,'name': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </label>\\n <label>To (not inclusive)\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"datefield\", {hash:{\n 'date': (\"model.conditions.daterange.to\"),\n 'class': (\"date\"),\n 'name': (\"dr-to\"),\n 'data-abide-validator': (\"afterDate\")\n },hashTypes:{'date': \"ID\",'class': \"STRING\",'name': \"STRING\",'data-abide-validator': \"STRING\"},hashContexts:{'date': depth0,'class': depth0,'name': depth0,'data-abide-validator': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n <small class=\\\"error\\\">\\\"To\\\" date must be after \\\"From\\\" date</small>\\n </label>\\n </label>\\n \");\n return buffer;\n }\n\n function program12(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <a class=\\\"button reveal\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"createCondition\", \"daterange\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">Date Range</a>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-6 columns\\\">\\n <div class='form-controls'>\\n <label>Name.</label>\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"model.name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the name\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Name is required.</small>\\n </div>\\n <div class='form-controls'>\\n <label>Select discount or surcharge.</label>\\n <ul class=\\\"button-group discount-surcharge toggle even-2\\\">\\n <li><a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :option :discount inDiscountMode:highlight:unhighlight\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"toggleType\", \"discount\", \"surcharge\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0,depth0],types:[\"STRING\",\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">Discount</a></li>\\n <li><a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :option :surcharge inDiscountMode:unhighlight:highlight\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"toggleType\", \"surcharge\", \"discount\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0,depth0],types:[\"STRING\",\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">Surcharge</a></li>\\n </ul>\\n </div>\\n <div class='form-controls'>\\n <label>Amount.</label>\\n <ul class=\\\"amountModes absolute-percentage flex\\\">\\n <li class=\\\"mode-item\\\">\\n <a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :option :toggle :absolute model.isAbsolute:highlight:unhighlight\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"toggleSurcountType\", \"absolute\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class='icon-dollar'></i>\\n </a>\\n </li>\\n <li class=\\\"mode-item\\\">\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"surcountValue\"),\n 'type': (\"text\"),\n 'class': (\"surcountValue\"),\n 'value': (\"surcountValue\"),\n 'required': (\"true\"),\n 'data-abide-validator': (\"positiveNumber\"),\n 'placeholder': (\"Enter value\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'class': \"STRING\",'value': \"ID\",'required': \"STRING\",'data-abide-validator': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'class': depth0,'value': depth0,'required': depth0,'data-abide-validator': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Value must be a positive number.</small>\\n </li>\\n <li class=\\\"mode-item\\\">\\n <a \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'class': (\":button :option :toggle :percentage model.isPercentage:highlight:unhighlight\")\n },hashTypes:{'class': \"STRING\"},hashContexts:{'class': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"toggleSurcountType\", \"percentage\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0,depth0],types:[\"STRING\",\"STRING\"],data:data})));\n data.buffer.push(\">\\n <i class='icon-percentage'></i>\\n </a>\\n </li>\\n </ul>\\n </div>\\n <div>\\n <p>Rule when applied will \");\n stack1 = helpers._triageMustache.call(depth0, \"model.type\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\" the order by \");\n stack1 = helpers._triageMustache.call(depth0, \"model.displayValue\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</p>\\n </div>\\n \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"advanced-surcounts\", options) : helperMissing.call(depth0, \"if-feature\", \"advanced-surcounts\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </div>\\n</section>\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/surcharges/content/table', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n \n data.buffer.push(\"Decrement\");\n }\n\n function program3(depth0,data) {\n \n \n data.buffer.push(\"Increment\");\n }\n\n function program5(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"surcount.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"surcount.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td>\\n \");\n stack1 = helpers['if'].call(depth0, \"surcount.isPercentage\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td>\\n \");\n stack1 = helpers._triageMustache.call(depth0, \"surcount.readableValue\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td class='actions'>\\n \");\n stack1 = (helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'class': (\"edit\"),\n 'icon': (\"null\"),\n 'model': (\"surcount\"),\n 'typeKey': (\"view.typeKey\"),\n 'acl': (\"view.acl\")\n },hashTypes:{'class': \"STRING\",'icon': \"ID\",'model': \"ID\",'typeKey': \"ID\",'acl': \"ID\"},hashContexts:{'class': depth0,'icon': depth0,'model': depth0,'typeKey': depth0,'acl': depth0},inverse:self.noop,fn:self.program(10, program10, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n <td class='actions'>\\n \");\n stack1 = (helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'class': (\"delete\"),\n 'icon': (\"null\"),\n 'model': (\"surcount\"),\n 'action': (\"delete\"),\n 'typeKey': (\"view.typeKey\"),\n 'acl': (\"view.acl\")\n },hashTypes:{'class': \"STRING\",'icon': \"ID\",'model': \"ID\",'action': \"STRING\",'typeKey': \"ID\",'acl': \"ID\"},hashContexts:{'class': depth0,'icon': depth0,'model': depth0,'action': depth0,'typeKey': depth0,'acl': depth0},inverse:self.noop,fn:self.program(12, program12, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n function program6(depth0,data) {\n \n \n data.buffer.push(\"%\");\n }\n\n function program8(depth0,data) {\n \n \n data.buffer.push(\"$\");\n }\n\n function program10(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'icon': (\"icon-cog\"),\n 'class': (\"edit\"),\n 'circle': (true)\n },hashTypes:{'icon': \"STRING\",'class': \"STRING\",'circle': \"BOOLEAN\"},hashContexts:{'icon': depth0,'class': depth0,'circle': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program12(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['icon-button'] || (depth0 && depth0['icon-button']),options={hash:{\n 'icon': (\"icon-x-outline\"),\n 'class': (\"remove\"),\n 'circle': (true)\n },hashTypes:{'icon': \"STRING\",'class': \"STRING\",'circle': \"BOOLEAN\"},hashContexts:{'icon': depth0,'class': depth0,'circle': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"icon-button\", options))));\n data.buffer.push(\"\\n \");\n return buffer;\n }\n\n function program14(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n data.buffer.push(\"<table class='listing rounded'>\\n <col width=\\\"30%\\\">\\n <col width=\\\"20%\\\">\\n <col width=\\\"30%\\\">\\n <col width=\\\"10%\\\">\\n <col width=\\\"10%\\\">\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Name</th>\\n <th>\");\n stack1 = helpers['if'].call(depth0, \"view.isDiscount\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(3, program3, data),fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</th>\\n <th>Amount</th>\\n <th>Edit</th>\\n <th>Delete</th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"surcount\", \"in\", \"view.surcounts\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(14, program14, data),fn:self.program(5, program5, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n</table>\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/surcharges/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"surcharge/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/surcharges/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['foundation-tabs'] || (depth0 && depth0['foundation-tabs']),options={hash:{\n 'activeTab': (\"activeTab\")\n },hashTypes:{'activeTab': \"ID\"},hashContexts:{'activeTab': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-tabs\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class='row'>\\n <div class='columns'>\\n <ul class='tabs'>\\n <li class='discounts tab-title'><a href='#discounts' class='x-acl-handled'>Discounts</a></li>\\n <li class='surcharges tab-title'><a href='#surcharges' class='x-acl-handled'>Surcharges</a></li>\\n </ul>\\n </div>\\n </div>\\n <div class='tabs-content'>\\n <div class='content active' id='discounts'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"surcharges/content/table\"),\n 'surcounts': (\"discounts\"),\n 'isDiscount': (true),\n 'typeKey': (\"typeKey\"),\n 'acl': (\"acl\")\n },hashTypes:{'templateName': \"STRING\",'surcounts': \"ID\",'isDiscount': \"BOOLEAN\",'typeKey': \"ID\",'acl': \"ID\"},hashContexts:{'templateName': depth0,'surcounts': depth0,'isDiscount': depth0,'typeKey': depth0,'acl': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n <div class='content' id='surcharges'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"surcharges/content/table\"),\n 'surcounts': (\"surcharges\"),\n 'isDiscount': (false),\n 'typeKey': (\"typeKey\"),\n 'acl': (\"acl\")\n },hashTypes:{'templateName': \"STRING\",'surcounts': \"ID\",'isDiscount': \"BOOLEAN\",'typeKey': \"ID\",'acl': \"ID\"},hashContexts:{'templateName': depth0,'surcounts': depth0,'isDiscount': depth0,'typeKey': depth0,'acl': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n </div>\\n \");\n return buffer;\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\"),\n 'createLabel': (\"Add a new discount or surcharge\")\n },hashTypes:{'filterQuery': \"ID\",'createLabel': \"STRING\"},hashContexts:{'filterQuery': depth0,'createLabel': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/temp', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '';\n\n\n return buffer;\n \n });\n\n});","define('dashboard/templates/transaction-receipt', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <div class='row'>\\n <div class='small-12 columns'>\");\n stack1 = helpers._triageMustache.call(depth0, \"lineitem.product.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div>\\n <div class='small-4 columns'>\");\n data.buffer.push(escapeExpression((helper = helpers['to-price'] || (depth0 && depth0['to-price']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data},helper ? helper.call(depth0, \"lineitem.total\", options) : helperMissing.call(depth0, \"to-price\", \"lineitem.total\", options))));\n data.buffer.push(\"</div>\\n </div>\\n\");\n return buffer;\n }\n\n data.buffer.push(\"<div class='row'>\\n <div class='columns'>Order #\");\n stack1 = helpers._triageMustache.call(depth0, \"view.transaction.order.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</div>\\n</div>\\n\\n\");\n stack1 = helpers.each.call(depth0, \"lineitem\", \"in\", \"view.transaction.order.lineitems\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\\n<div class='row'>\\n <div class='small-12 columns'>Total</div>\\n <div class='small-4 columns'>\");\n data.buffer.push(escapeExpression((helper = helpers['to-price'] || (depth0 && depth0['to-price']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data},helper ? helper.call(depth0, \"view.transaction.order.total\", options) : helperMissing.call(depth0, \"to-price\", \"view.transaction.order.total\", options))));\n data.buffer.push(\"</div>\\n</div>\\n\\n<div class='row'>\\n <div class='small-12 columns'>Paid</div>\\n <div class='small-4 columns'>\");\n data.buffer.push(escapeExpression((helper = helpers['to-price'] || (depth0 && depth0['to-price']),options={hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data},helper ? helper.call(depth0, \"view.transaction.amount\", options) : helperMissing.call(depth0, \"to-price\", \"view.transaction.amount\", options))));\n data.buffer.push(\"</div>\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/unauthorised', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n \n\n\n data.buffer.push(\"<div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h2>Unauthorised</h2>\\n <p>Your permissions don't allow you to do that.</p>\\n </div>\\n</div>\\n\");\n \n });\n\n});","define('dashboard/templates/user/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h3>Edit user</h3>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-12 columns\\\">\\n <form data-abide class=\\\"form user create\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"user.form\", {hash:{\n 'templateName': (\"user/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n <div class=\\\"button-group right\\\">\\n <a class=\\\"button secondary cancel\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n <button type=\\\"submit\\\" class=\\\"button primary\\\">Save</button>\\n </div>\\n </form>\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/user/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n <div>\\n <label>Name\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"model.name\"),\n 'required': (\"true\"),\n 'disabled': (\"view.globalsImmutable\"),\n 'placeholder': (\"Enter the name\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'disabled': \"ID\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'disabled': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Name is required.</small>\\n </label>\\n </div>\\n <div>\\n <label>Email\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"email\"),\n 'type': (\"email\"),\n 'value': (\"model.email\"),\n 'required': (\"true\"),\n 'disabled': (\"view.globalsImmutable\"),\n 'placeholder': (\"Enter the email\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'disabled': \"ID\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'disabled': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Email is required.</small>\\n </label>\\n </div>\\n <div>\\n <label>Password\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"password\"),\n 'type': (\"password\"),\n 'value': (\"model.password\"),\n 'required': (\"model.isNew\"),\n 'disabled': (\"view.globalsImmutable\"),\n 'placeholder': (\"Enter the password\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"ID\",'disabled': \"ID\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'disabled': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Password is required.</small>\\n </label>\\n </div>\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"view.isCashier\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(4, program4, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n <div>\\n <label>User Code\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"usercode\"),\n 'type': (\"text\"),\n 'value': (\"model.usercode\"),\n 'required': (\"view.globalsInvisible\"),\n 'pattern': (\"number\"),\n 'placeholder': (\"Enter the usercode\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"ID\",'pattern': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'pattern': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Usercode must be numeric.</small>\\n </label>\\n </div>\\n <div>\\n <label>PIN\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"pincode\"),\n 'type': (\"text\"),\n 'value': (\"model.pincode\"),\n 'placeholder': (\"Enter the pincode\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n </label>\\n </div>\\n <div class=\\\"usergroups\\\">\\n <div class='label'>Groups\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'multiple': (true),\n 'content': (\"all.usergroups\"),\n 'selection': (\"model.usergroups\")\n },hashTypes:{'multiple': \"BOOLEAN\",'content': \"ID\",'selection': \"ID\"},hashContexts:{'multiple': depth0,'content': depth0,'selection': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n <div class=\\\"venues\\\">\\n <div class='label'>Venues\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'multiple': (true),\n 'content': (\"all.venues\"),\n 'selection': (\"model.venues\")\n },hashTypes:{'multiple': \"BOOLEAN\",'content': \"ID\",'selection': \"ID\"},hashContexts:{'multiple': depth0,'content': depth0,'selection': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <div class=\\\"cashierImage\\\">\\n <label>Image\\n <div class=\\\"userImageContainer\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"uploadImage\", {hash:{\n 'target': (\"view\"),\n 'on': (\"click\")\n },hashTypes:{'target': \"STRING\",'on': \"STRING\"},hashContexts:{'target': depth0,'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = helpers['if'].call(depth0, \"model.image\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(7, program7, data),fn:self.program(5, program5, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n </label>\\n </div>\\n \");\n return buffer;\n }\n function program5(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <img class=\\\"userImage\\\" \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'src': (\"model.imageURL\")\n },hashTypes:{'src': \"ID\"},hashContexts:{'src': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"/>\\n \");\n return buffer;\n }\n\n function program7(depth0,data) {\n \n \n data.buffer.push(\"\\n <span>Click to upload</span>\\n \");\n }\n\n data.buffer.push(\"<div>\\n \");\n stack1 = helpers['if'].call(depth0, \"view.globalsVisible\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(1, program1, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n stack1 = helpers['if'].call(depth0, \"view.organisationContext\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</div>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/usergroup/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"usergroup/form\"),\n 'label': (\"Edit user group\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/usergroup/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h3>\");\n stack1 = helpers._triageMustache.call(depth0, \"view.label\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</h3>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-12 columns\\\">\\n <form data-abide class=\\\"form group create\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <div>\\n <label>Name\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"model.name\"),\n 'required': (\"true\"),\n 'placeholder': (\"Enter the name\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"STRING\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Name is required.</small>\\n </label>\\n </div>\\n <div class=\\\"roles\\\">\\n <div class='label'>Roles\\n \");\n data.buffer.push(escapeExpression((helper = helpers['select-transformer'] || (depth0 && depth0['select-transformer']),options={hash:{\n 'multiple': (true),\n 'content': (\"props.roles\"),\n 'selection': (\"model.roles\"),\n 'optionValuePath': (\"content.id\")\n },hashTypes:{'multiple': \"BOOLEAN\",'content': \"ID\",'selection': \"ID\",'optionValuePath': \"STRING\"},hashContexts:{'multiple': depth0,'content': depth0,'selection': depth0,'optionValuePath': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"select-transformer\", options))));\n data.buffer.push(\"\\n </div>\\n </div>\\n <div class=\\\"button-group right\\\">\\n <a class=\\\"button secondary cancel\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n <button type=\\\"submit\\\" class=\\\"button primary\\\">Save</button>\\n </div>\\n </form>\\n </div>\\n </div>\\n</section>\\n\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/usergroups/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"usergroup/form\"),\n 'label': (\"Create user group\")\n },hashTypes:{'templateName': \"STRING\",'label': \"STRING\"},hashContexts:{'templateName': depth0,'label': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/usergroups/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>Group Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"usergroup\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"usergroup.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"usergroup.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"usergroup\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"usergroup\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n \n data.buffer.push(\"\\n <tr class='no-results'>\\n <td colspan='3'>No results</td>\\n </tr>\\n \");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/users/create', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(\"<section>\\n <div class=\\\"row\\\">\\n <div class=\\\"columns\\\">\\n <h3>Create a new user</h3>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"small-12 columns\\\">\\n <form data-abide class=\\\"form user create\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"user.form\", {hash:{\n 'templateName': (\"user/form\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n <div class=\\\"button-group right\\\">\\n <a class=\\\"button secondary cancel\\\" \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"cancel\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">Cancel</a>\\n <button type=\\\"submit\\\" class=\\\"button primary\\\">Save</button>\\n </div>\\n </form>\\n </div>\\n </div>\\n</section>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/users/index', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this, functionType=\"function\", blockHelperMissing=helpers.blockHelperMissing;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1;\n data.buffer.push(\"\\n <table class='listing rounded'>\\n <thead>\\n <tr>\\n <th data-sort-by='name'>User Name</th>\\n <th></th>\\n </tr>\\n </thead>\\n <tbody>\\n \");\n stack1 = helpers.each.call(depth0, \"user\", \"in\", \"results\", {hash:{},hashTypes:{},hashContexts:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),contexts:[depth0,depth0,depth0],types:[\"ID\",\"ID\",\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tbody>\\n </table>\\n\");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='item' \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'data-id': (\"user.id\")\n },hashTypes:{'data-id': \"ID\"},hashContexts:{'data-id': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\">\\n <td>\");\n stack1 = helpers._triageMustache.call(depth0, \"user.name\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"ID\"],data:data});\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"</td>\\n <td class='actions'>\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-edit-link'] || (depth0 && depth0['acl-edit-link']),options={hash:{\n 'model': (\"user\")\n },hashTypes:{'model': \"ID\"},hashContexts:{'model': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-edit-link\", options))));\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers['acl-delete-link'] || (depth0 && depth0['acl-delete-link']),options={hash:{\n 'model': (\"user\"),\n 'action': (\"delete\")\n },hashTypes:{'model': \"ID\",'action': \"STRING\"},hashContexts:{'model': depth0,'action': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"acl-delete-link\", options))));\n data.buffer.push(\"\\n </td>\\n </tr>\\n \");\n return buffer;\n }\n\n function program4(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <tr class='no-results'>\\n \");\n options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[],types:[],data:data}\n if (helper = helpers['td-fill-row']) { stack1 = helper.call(depth0, options); }\n else { helper = (depth0 && depth0['td-fill-row']); stack1 = typeof helper === functionType ? helper.call(depth0, options) : helper; }\n if (!helpers['td-fill-row']) { stack1 = blockHelperMissing.call(depth0, 'td-fill-row', {hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(5, program5, data),contexts:[],types:[],data:data}); }\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </tr>\\n \");\n return buffer;\n }\n function program5(depth0,data) {\n \n \n data.buffer.push(\"No users found.\");\n }\n\n stack1 = (helper = helpers['index-cn'] || (depth0 && depth0['index-cn']),options={hash:{\n 'filterQuery': (\"filterQuery\")\n },hashTypes:{'filterQuery': \"ID\"},hashContexts:{'filterQuery': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"index-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/venue/edit', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', escapeExpression=this.escapeExpression;\n\n\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'label': (\"Edit venue\"),\n 'templateName': (\"venue/form\")\n },hashTypes:{'label': \"STRING\",'templateName': \"STRING\"},hashContexts:{'label': depth0,'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/venue/form', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, self=this, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n function program1(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n \");\n stack1 = (helper = helpers['foundation-tabs'] || (depth0 && depth0['foundation-tabs']),options={hash:{\n 'activeTab': (\"activeTab\")\n },hashTypes:{'activeTab': \"ID\"},hashContexts:{'activeTab': depth0},inverse:self.noop,fn:self.program(2, program2, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"foundation-tabs\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n \");\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <ul class='tabs'>\\n <li class='tab-title'><a href='#venue-details'>Venue Details</a></li>\\n \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(3, program3, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"devices\", options) : helperMissing.call(depth0, \"if-feature\", \"devices\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </ul>\\n <div class='tabs-content'>\\n <div class='details content active' id='venue-details'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, \"venue/form/details\", {hash:{},hashTypes:{},hashContexts:{},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\"\\n </div>\\n \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.noop,fn:self.program(8, program8, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"devices\", options) : helperMissing.call(depth0, \"if-feature\", \"devices\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n function program3(depth0,data) {\n \n var buffer = '', stack1, helper, options;\n data.buffer.push(\"\\n <li class='tab-title'><a href='#zones-devices'>\\n \");\n stack1 = (helper = helpers['if-feature'] || (depth0 && depth0['if-feature']),options={hash:{},hashTypes:{},hashContexts:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),contexts:[depth0],types:[\"STRING\"],data:data},helper ? helper.call(depth0, \"zones\", options) : helperMissing.call(depth0, \"if-feature\", \"zones\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n </a></li>\\n \");\n return buffer;\n }\n function program4(depth0,data) {\n \n \n data.buffer.push(\"Zones &amp; Devices\\n \");\n }\n\n function program6(depth0,data) {\n \n \n data.buffer.push(\"Devices\");\n }\n\n function program8(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class='zones-devices content' id='zones-devices'>\\n \");\n data.buffer.push(escapeExpression(helpers.view.call(depth0, {hash:{\n 'templateName': (\"venue/form/zones-devices\")\n },hashTypes:{'templateName': \"STRING\"},hashContexts:{'templateName': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"\\n </div>\\n \");\n return buffer;\n }\n\n data.buffer.push(\"<form data-abide \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"submit\", {hash:{\n 'on': (\"submit\")\n },hashTypes:{'on': \"STRING\"},hashContexts:{'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n \");\n stack1 = (helper = helpers['form-cn'] || (depth0 && depth0['form-cn']),options={hash:{\n 'type': (\"venue\"),\n 'submitLabel': (\"Save all changes\"),\n 'cancelLabel': (\"Cancel all changes\"),\n 'includeControls': (false),\n 'cancel': (\"cancel\"),\n 'delete': (\"delete\")\n },hashTypes:{'type': \"STRING\",'submitLabel': \"STRING\",'cancelLabel': \"STRING\",'includeControls': \"BOOLEAN\",'cancel': \"STRING\",'delete': \"STRING\"},hashContexts:{'type': depth0,'submitLabel': depth0,'cancelLabel': depth0,'includeControls': depth0,'cancel': depth0,'delete': depth0},inverse:self.noop,fn:self.program(1, program1, data),contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"form-cn\", options));\n if(stack1 || stack1 === 0) { data.buffer.push(stack1); }\n data.buffer.push(\"\\n</form>\\n\");\n return buffer;\n \n });\n\n});","define('dashboard/templates/venue/form/details', ['exports', 'ember'], function (exports, Ember) {\n\n 'use strict';\n\n exports['default'] = Ember['default'].Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Ember['default'].Handlebars.helpers); data = data || {};\n var buffer = '', stack1, helper, options, escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;\n\n function program1(depth0,data) {\n \n var buffer = '';\n data.buffer.push(\"\\n <div class='image' \");\n data.buffer.push(escapeExpression(helpers.action.call(depth0, \"uploadImage\", {hash:{\n 'target': (\"view\"),\n 'on': (\"click\")\n },hashTypes:{'target': \"STRING\",'on': \"STRING\"},hashContexts:{'target': depth0,'on': depth0},contexts:[depth0],types:[\"STRING\"],data:data})));\n data.buffer.push(\">\\n <div class='preview'><img \");\n data.buffer.push(escapeExpression(helpers['bind-attr'].call(depth0, {hash:{\n 'src': (\"imageURL\")\n },hashTypes:{'src': \"ID\"},hashContexts:{'src': depth0},contexts:[],types:[],data:data})));\n data.buffer.push(\"></div>\\n <button class='upload' type='button'>Upload a Venue Image</button>\\n </div>\\n \");\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"name\"),\n 'type': (\"text\"),\n 'value': (\"name\"),\n 'required': (true),\n 'placeholder': (\"Enter your venue name.\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"BOOLEAN\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Venue name is required.</small>\\n \");\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"email\"),\n 'type': (\"email\"),\n 'value': (\"email\"),\n 'required': (true),\n 'placeholder': (\"Enter your Email address.\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"BOOLEAN\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Email is required.</small>\\n \");\n return buffer;\n }\n\n function program7(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"phone\"),\n 'type': (\"text\"),\n 'value': (\"phone\"),\n 'required': (true),\n 'placeholder': (\"Enter your phone number.\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"BOOLEAN\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small class=\\\"error\\\">Phone is required.</small>\\n \");\n return buffer;\n }\n\n function program9(depth0,data) {\n \n var buffer = '', helper, options;\n data.buffer.push(\"\\n \");\n data.buffer.push(escapeExpression((helper = helpers.input || (depth0 && depth0.input),options={hash:{\n 'name': (\"country\"),\n 'type': (\"text\"),\n 'value': (\"address.country\"),\n 'required': (true),\n 'placeholder': (\"Enter your country.\")\n },hashTypes:{'name': \"STRING\",'type': \"STRING\",'value': \"ID\",'required': \"BOOLEAN\",'placeholder': \"STRING\"},hashContexts:{'name': depth0,'type': depth0,'value': depth0,'required': depth0,'placeholder': depth0},contexts:[],types:[],data:data},helper ? helper.call(depth0, options) : helperMissing.call(depth0, \"input\", options))));\n data.buffer.push(\"\\n <small c
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment