Skip to content

Instantly share code, notes, and snippets.

@simonexmachina
Created February 6, 2015 11:00
Show Gist options
  • Save simonexmachina/a64fa5ff67768a0894f6 to your computer and use it in GitHub Desktop.
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.[]\", \"[email protected]\", \"[email protected]\", \"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.[]\", \"[email protected]\")\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\", \"[email protected]\", \"[email protected]\", \"[email protected]\", \"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\", \"[email protected]\"),\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\", \"[email protected]\", \"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(\"[email protected]\"),\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.[]\", \"[email protected]\", \"[email protected]\", \"[email protected]\", \"[email protected]\", \"[email protected]\"),\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(\"[email protected]\"),\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 + \"[email protected]\" : 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(\"[email protected]\")\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(\"[email protected]\"),\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(\"[email protected]\"),\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(\"[email protected]_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.[]\", \"[email protected]\")\n },\n\n \"cart-control-1\": {\n shouldUpdateProductQuantity: (function () {\n this.notifyPropertyChange(\"quantityForProductChanged\");\n }).observes(\"[email protected]\"),\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 + \"[email protected]\", 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(\"[email protected].[]\"),\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(\"[email protected].[]\"),\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.[]\", \"[email protected]\")\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(\"[email protected]\"),\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.[]\", \"[email protected]\", \"[email protected]\"),\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.[]\", \"[email protected]\", \"[email protected]\", \"[email protected]\")\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 '[email protected]', '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 '[email protected]', '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.[]\", \"[email protected]\", \"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