{
    "project": {
        "name": "Ember-FW-GC",
        "url": "https://bitbucket.org/linformatics/ember-fw-gc",
        "description": "A set of components, controllers, routes, and helpers used in all FW Kit applications.",
        "indexModule": "Introduction",
        "logo": "./assets/img/fw-logo.png",
        "primaryColor": "#7E3DB7",
        "version": "2.1.16.5e99b10c"
    },
    "files": {
        "addon\\adapters\\fw-app.js": {
            "name": "addon\\adapters\\fw-app.js",
            "modules": {},
            "classes": {
                "FwAppAdapter": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\adapters\\fw-optional-app.js": {
            "name": "addon\\adapters\\fw-optional-app.js",
            "modules": {},
            "classes": {
                "OptionalAppAdapter": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\authenticators\\group-control.js": {
            "name": "addon\\authenticators\\group-control.js",
            "modules": {},
            "classes": {
                "GroupControlAuthenticator": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\modals\\about-app.js": {
            "name": "addon\\components\\modals\\about-app.js",
            "modules": {},
            "classes": {
                "AboutAppModal": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\modals\\app-switch.js": {
            "name": "addon\\components\\modals\\app-switch.js",
            "modules": {},
            "classes": {
                "AppSwitchModal": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\modals\\change-password.js": {
            "name": "addon\\components\\modals\\change-password.js",
            "modules": {},
            "classes": {
                "ChangePasswordModal": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\modals\\re-login.js": {
            "name": "addon\\components\\modals\\re-login.js",
            "modules": {},
            "classes": {
                "ReLoginModal": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\auth-block.js": {
            "name": "addon\\components\\auth-block.js",
            "modules": {},
            "classes": {
                "AuthBlock": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\auth-button.js": {
            "name": "addon\\components\\auth-button.js",
            "modules": {},
            "classes": {
                "AuthButton": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\fw-app-link.js": {
            "name": "addon\\components\\fw-app-link.js",
            "modules": {},
            "classes": {
                "FwAppLink": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\fw-doc-link.js": {
            "name": "addon\\components\\fw-doc-link.js",
            "modules": {},
            "classes": {
                "FwDocLink": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\fw-gc-nav.js": {
            "name": "addon\\components\\fw-gc-nav.js",
            "modules": {},
            "classes": {
                "FwGcNav": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\components\\fw-header.js": {
            "name": "addon\\components\\fw-header.js",
            "modules": {},
            "classes": {
                "FwHeaderGc": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\controllers\\forgot.js": {
            "name": "addon\\controllers\\forgot.js",
            "modules": {},
            "classes": {
                "ForgotPage": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\controllers\\login.js": {
            "name": "addon\\controllers\\login.js",
            "modules": {},
            "classes": {
                "LoginPage": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\controllers\\profile.js": {
            "name": "addon\\controllers\\profile.js",
            "modules": {},
            "classes": {
                "ProfilePage": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\controllers\\reset.js": {
            "name": "addon\\controllers\\reset.js",
            "modules": {},
            "classes": {
                "ResetPage": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\helpers\\has-app.js": {
            "name": "addon\\helpers\\has-app.js",
            "modules": {},
            "classes": {
                "HasApp": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\helpers\\has-department.js": {
            "name": "addon\\helpers\\has-department.js",
            "modules": {},
            "classes": {
                "HasDepartment": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\helpers\\has-role.js": {
            "name": "addon\\helpers\\has-role.js",
            "modules": {},
            "classes": {
                "HasRole": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\application-controller.js": {
            "name": "addon\\mixins\\application-controller.js",
            "modules": {},
            "classes": {
                "ApplicationControllerMixin": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\auth-check.js": {
            "name": "addon\\mixins\\auth-check.js",
            "modules": {},
            "classes": {
                "AuthCheckMixin": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\auth-component.js": {
            "name": "addon\\mixins\\auth-component.js",
            "modules": {},
            "classes": {
                "AuthComponentMixin": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\auth-route.js": {
            "name": "addon\\mixins\\auth-route.js",
            "modules": {},
            "classes": {
                "AuthRouteMixin": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\department-transition.js": {
            "name": "addon\\mixins\\department-transition.js",
            "modules": {},
            "classes": {
                "DepartmentTransitionMixin": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\index-route.js": {
            "name": "addon\\mixins\\index-route.js",
            "modules": {},
            "classes": {
                "MixinIndexRoute": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\permissions.js": {
            "name": "addon\\mixins\\permissions.js",
            "modules": {},
            "classes": {
                "PermissionsMixin": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\mixins\\restricted-route.js": {
            "name": "addon\\mixins\\restricted-route.js",
            "modules": {},
            "classes": {
                "RestrictedRouteMixin": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\models\\user.js": {
            "name": "addon\\models\\user.js",
            "modules": {},
            "classes": {
                "UserModel": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\objects\\app-meta.js": {
            "name": "addon\\objects\\app-meta.js",
            "modules": {},
            "classes": {
                "AppMeta": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\routes\\auth.js": {
            "name": "addon\\routes\\auth.js",
            "modules": {},
            "classes": {
                "AuthRoute-Addon": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\services\\ajax.js": {
            "name": "addon\\services\\ajax.js",
            "modules": {},
            "classes": {
                "AjaxService": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\services\\app-meta.js": {
            "name": "addon\\services\\app-meta.js",
            "modules": {},
            "classes": {
                "AppMetaService": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\services\\config.js": {
            "name": "addon\\services\\config.js",
            "modules": {},
            "classes": {
                "ConfigService": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\services\\current-user.js": {
            "name": "addon\\services\\current-user.js",
            "modules": {},
            "classes": {
                "CurrentUserService": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\services\\jokes.js": {
            "name": "addon\\services\\jokes.js",
            "modules": {},
            "classes": {
                "JokesService": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\utils\\match.js": {
            "name": "addon\\utils\\match.js",
            "modules": {},
            "classes": {
                "MatchUtil": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "addon\\documentation.js": {
            "name": "addon\\documentation.js",
            "modules": {
                "Miscellaneous": 1,
                "Components": 1,
                "Pages": 1,
                "Helpers": 1,
                "Mixins": 1,
                "Models": 1,
                "Services": 1,
                "Utils": 1,
                "Introduction": 1
            },
            "classes": {},
            "fors": {},
            "namespaces": {}
        },
        "app\\routes\\auth.js": {
            "name": "app\\routes\\auth.js",
            "modules": {},
            "classes": {
                "AuthRoute": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "app\\routes\\restricted.js": {
            "name": "app\\routes\\restricted.js",
            "modules": {},
            "classes": {
                "RestrictedRoute": 1
            },
            "fors": {},
            "namespaces": {}
        },
        "app\\session-stores\\application.js": {
            "name": "app\\session-stores\\application.js",
            "modules": {},
            "classes": {},
            "fors": {},
            "namespaces": {}
        }
    },
    "modules": {
        "Miscellaneous": {
            "name": "Miscellaneous",
            "submodules": {},
            "elements": {},
            "classes": {
                "AppMeta": 1,
                "FwAppAdapter": 1,
                "OptionalAppAdapter": 1,
                "GroupControlAuthenticator": 1,
                "AuthRoute-Addon": 1,
                "AuthRoute": 1,
                "RestrictedRoute": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "app\\routes\\restricted.js",
            "line": 4,
            "description": "Miscellaneous catch-all module for things which don't neetly fit into the other modules.",
            "itemtype": "main"
        },
        "Components": {
            "name": "Components",
            "submodules": {},
            "elements": {},
            "classes": {
                "AboutAppModal": 1,
                "AppSwitchModal": 1,
                "ChangePasswordModal": 1,
                "ReLoginModal": 1,
                "AuthBlock": 1,
                "AuthButton": 1,
                "FwAppLink": 1,
                "FwDocLink": 1,
                "FwGcNav": 1,
                "FwHeaderGc": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\components\\fw-header.js",
            "line": 10,
            "description": "Components defined by Ember FW GC.",
            "itemtype": "main"
        },
        "Pages": {
            "name": "Pages",
            "submodules": {},
            "elements": {},
            "classes": {
                "ForgotPage": 1,
                "LoginPage": 1,
                "ProfilePage": 1,
                "ResetPage": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\controllers\\reset.js",
            "line": 26,
            "description": "Pages defined by Ember FW GC.",
            "itemtype": "main"
        },
        "Helpers": {
            "name": "Helpers",
            "submodules": {},
            "elements": {},
            "classes": {
                "HasApp": 1,
                "HasDepartment": 1,
                "HasRole": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\helpers\\has-role.js",
            "line": 4,
            "description": "Helpers defined by Ember FW GC.",
            "itemtype": "main"
        },
        "Mixins": {
            "name": "Mixins",
            "submodules": {},
            "elements": {},
            "classes": {
                "ApplicationControllerMixin": 1,
                "AuthCheckMixin": 1,
                "AuthComponentMixin": 1,
                "AuthRouteMixin": 1,
                "DepartmentTransitionMixin": 1,
                "MixinIndexRoute": 1,
                "PermissionsMixin": 1,
                "RestrictedRouteMixin": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\mixins\\restricted-route.js",
            "line": 4,
            "description": "Mixins defined by Ember FW GC.",
            "itemtype": "main"
        },
        "Models": {
            "name": "Models",
            "submodules": {},
            "elements": {},
            "classes": {
                "UserModel": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\models\\user.js",
            "line": 6,
            "description": "Models defined by Ember FW GC.",
            "itemtype": "main"
        },
        "Services": {
            "name": "Services",
            "submodules": {},
            "elements": {},
            "classes": {
                "AjaxService": 1,
                "AppMetaService": 1,
                "ConfigService": 1,
                "CurrentUserService": 1,
                "JokesService": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\services\\jokes.js",
            "line": 3,
            "description": "Services defined by Ember FW GC.",
            "itemtype": "main"
        },
        "Utils": {
            "name": "Utils",
            "submodules": {},
            "elements": {},
            "classes": {
                "MatchUtil": 1
            },
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\utils\\match.js",
            "line": 3,
            "description": "Utils defined by Ember FW GC.",
            "itemtype": "main"
        },
        "Introduction": {
            "name": "Introduction",
            "submodules": {},
            "elements": {},
            "classes": {},
            "fors": {},
            "namespaces": {},
            "tag": "main",
            "file": "addon\\documentation.js",
            "line": 2,
            "description": "The primary purpose of ember-fw-gc is to integrate Group Control Elements into a Group Control dependent app.\nThis documentation is designed just to be the API docs, which can aid in developers. For a more comprehensive\nguide to Ember FW GC, see our [Ember FW GC](https://linformatics.bitbucket.io/docs/addons/client/ember-fw-gc) docs.",
            "itemtype": "main"
        }
    },
    "classes": {
        "FwAppAdapter": {
            "name": "FwAppAdapter",
            "shortname": "FwAppAdapter",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Miscellaneous",
            "file": "addon\\adapters\\fw-app.js",
            "line": 3,
            "description": "Extension of the [base FW adapter](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/FwAdapter.html) for models that need to be fetched from a dependency app. Currently, this app adapter should only be used for Group Control models,\nsince that is the only app that is a dependency app, thus the appId is automatically set to `gc`. Most often this will be used for the GC user model, so you need to make an adapter file, `adapters/user.js`,\nand then that file is merely set to:\n\n```js\nexport {default} from '@bennerinformatics/ember-fw-gc/adapters/fw-app';\n```\n\nProvided you have the model file setup right (as documented in the [user model](UserModel.html)), it should now pull the data from GC app instead of your base app.",
            "extends": "FwAdapter"
        },
        "OptionalAppAdapter": {
            "name": "OptionalAppAdapter",
            "shortname": "OptionalAppAdapter",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Miscellaneous",
            "namespace": "",
            "file": "addon\\adapters\\fw-optional-app.js",
            "line": 6,
            "description": "Extension of the [base FW adapter](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/FwAdapter.html) for models that need to be fetched from a\nnon-dependency app. The reason for the difference is that if it is a non-dependency app, you need to handle the possibility that that app is not currently installed on\nyour current system, and use the model accordingly. This also means that you will need to define specifically the `appId` for the app this is the model of. This is used much\nless commonly than the FwAppAdapter, so it will have varied use cases (ie using Tally models in Substitutions or EmployeeDb models in Message Center). Again, your file will need to\nbe named identically as the model you are copying, then you set up that adapter like this:\n\n```js\nimport OptionalAppAdapter from '@bennerinformatics/ember-fw-gc/adapters/fw-optional-app';\n\nexport default OptionalAppAdapter.extend({\n     appId: 'empdb'\n});\n```\n\nProvided you have the model file setup right, it should now pull the data from the optional app instead of your base app.",
            "extends": "FWAdapter"
        },
        "GroupControlAuthenticator": {
            "name": "GroupControlAuthenticator",
            "shortname": "GroupControlAuthenticator",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Miscellaneous",
            "namespace": "",
            "file": "addon\\authenticators\\group-control.js",
            "line": 4,
            "description": "This authenticator is used by Ember-Simple-Auth to authenticate\na user on the client.\n\nExample Usage:\n\n```javascript\nimport Ember from 'ember';\n\nexport default Ember.Object.extend({\n    session: Ember.inject.service(),\n\n    login(username, password) {\n        let session = this.get('session');\n\n        session.authenticate('authenticator:group-control', username, password);\n    }\n});\n```\n\nTo extend in an application:\n\n```javascript\nimport GCAuthenticator from '@bennerinformatics/ember-fw-gc/authenticators/group-control';\n\nexport default GCAuthenticator.extend({\n    // ... your custom code here\n});\n```\n\nFor more example on using this in an application or extending it,\nvisit Ember Simple Auth's [website](http://ember-simple-auth.com/).",
            "access": "public",
            "tagname": "",
            "extends": "EmberSimpleAuth.BaseAuthenticator"
        },
        "AboutAppModal": {
            "name": "AboutAppModal",
            "shortname": "AboutAppModal",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\modals\\about-app.js",
            "line": 8,
            "description": "The About Modal is a modal which gives very basic information about your app. This does not need to be called by you, as it is called for you by the `FwHeader`. The About Modal can be called from the dropdown to the right of the header.\nNothing displayed in the modal can be configured by passing information into the model attribute, but the information is all dynamic and can be configured by looking at two places: Group Control or `fw.json`.\n\n Some of the information is pulled directly from Group Control, namely, the App Name, App Description and More Information Link (Link field on App model). This can hypothetically be changed per database, though\n it is not advised that you would change the defaults set by the initial database migration. The More Information Link is the one of these three values which is not set by default in the database migration, so that\n each database must edit the link field on the app to cause this link to show up.\n\nThe rest of the information is set by the values of `fw.json`, including:\n\n- `version` will display under the title, and this is the current version of the app.\n- `authors`, `maintainers`, and `previousMaintainers` should all be set as arrays in `fw.json`, and they will be displayed in the About modal under these names as a string separated by a '|' between each value"
        },
        "AppSwitchModal": {
            "name": "AppSwitchModal",
            "shortname": "AppSwitchModal",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\modals\\app-switch.js",
            "line": 6,
            "description": "The App Switcher Modal is a modal that allows you to switch your current app. It loads the logos and names of each app, downloaded to the server, which the current user has any role in, and clicking\none of those apps will open a new tab in the browser and load that app. There is no configuration for this modal, and you do not need to call it yourself, as it is automatically built into the `FwHeader`\ncomponent (no way to turn it off from that component either) that has no configuration necessary. The only way to configure this modal would be to change a certain users roles for certain apps in Group Control."
        },
        "ChangePasswordModal": {
            "name": "ChangePasswordModal",
            "shortname": "ChangePasswordModal",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\modals\\change-password.js",
            "line": 32,
            "description": "A modal which allows you to change your current password. It has three textfields: Current Password, New Password, and Confirm Password. It will invalidate if current password is not\npassed in or if it is the wrong password, or if new password and confirm password do not match. This modal is called from the FwHeader component (if they have a GC generated\npassword, they will be forced to select a \"secure\" password) and the Profile page. There is no configuration needed for this modal, and you do not need to call it, since it is handled by\ncomponents within Ember FW GC."
        },
        "ReLoginModal": {
            "name": "ReLoginModal",
            "shortname": "ReLoginModal",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\modals\\re-login.js",
            "line": 13,
            "description": "The re-login modal is a modal which will appear any time the session expires, and will allow you to simply put in your password to relogin, rather than taking you to\nthe login page. Each app needs to call it in the `application.hbs` file, so that it can be called on any page. It should be set to be the `sm` modal size, per our\nInformatics modal policies, [here](https://apps.bennerlibrary.com/kb/#/entry/1205). This is what it should look like:\n\n```handlebars\n<FwFullscreenModal @modal=\"re-login\" @size=\"sm\" @model={{hash attemptedTransition=attemptedTransition}} @close={{action \"closeLoginModal\"}} />\n```\n\nThe `shouldRender` boolean should be `showLoginModal`, which is the boolean which is changed by the `ApplicationControllerMixin`, so the if statement should look like:\n```handlebars\n{{#if showLoginModal}}\n     {{!-- Fullscreen Modal Re-Login information here --}}\n{{/if}}\n```\nThen, so long as you use the [ApplicationControllerMixin](../classes/ApplicationControllerMixin.html) as directed on your `application.js` controller, everything should work properly.\nThis should be set up for you by the Generator FW, so you should already have these things set up for you in your app, but it is important to note that the re-login modal is the one\nmodal which needs to be called in the application template by each app."
        },
        "AuthBlock": {
            "name": "AuthBlock",
            "shortname": "AuthBlock",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\auth-block.js",
            "line": 4,
            "description": "For Ember deprecation notice, [click here](https://deprecations.emberjs.com/id/ember-component-is-visible/). This component is used to show or hide various behavior\nbased on a certain permission level or department. It is a more robust way of\ndoing the same thing that is accomplished by the [has-role](../classes/HasRole.html)\nor the [has-department](../classes/HasDepartment.html) helpers.\n\nBasic Usage:\n\n```handlebars\n<AuthBlock @perm=\"admin\">\n    {{!-- block of handlebars which will be displayed based on permissions given--}}\n</AuthBlock>\n```\n\nSee the docs for [AuthComponentMixin](../classes/AuthComponentMixin.html)\nfor more details on how you can use this component.",
            "access": "public",
            "tagname": "",
            "uses": [
                "AuthComponentMixin"
            ],
            "deprecated": true,
            "deprecationMessage": "Ember Component isVisible has been deprecated by Ember. Use has-role or has-department helper instead."
        },
        "AuthButton": {
            "name": "AuthButton",
            "shortname": "AuthButton",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\auth-button.js",
            "line": 5,
            "description": "For Ember deprecation notice, [click here](https://deprecations.emberjs.com/id/ember-component-is-visible/). This component is used to show or hide a button\nbased on a certain permission level or department. It is similar to the same\nfunction as [has-role](../classes/HasRole.html) or [has-department](../classes/HasDepartment.html) helpers,\nexcept more robust, and designed only for a button itself.\n\nBasic Usage:\n\n```handlebars\n<AuthButton @perm=\"admin\" @type=\"button\" @class=\"btn btn-sm btn-default\" @click={{action \"click\"}}>\n    Click me if you're an admin!\n</AuthBlock>\n```\n\nSee the docs for [AuthComponentMixin](../classes/AuthComponentMixin.html)\nfor more details on how you can use this component.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Component",
            "uses": [
                "AuthComponentMixin"
            ],
            "deprecated": true,
            "deprecationMessage": "Ember Component isVisible has been deprecated by Ember. Use has-role or has-department helper instead."
        },
        "FwAppLink": {
            "name": "FwAppLink",
            "shortname": "FwAppLink",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\fw-app-link.js",
            "line": 8,
            "description": "This component is used to create a link to another FW app. It is used similarly to the Ember `LinkTo` helper.\n\nTo use inline, parameters must be provided for the link name, the app ID, and the route name.\nAn optional query parameters object can be added at the end. See the [Ember docs](https://guides.emberjs.com/v3.12.0/templates/links/#toc_setting-query-params) for more information on query params\n\n```handlebars\n<FwAppLink @title='Link Text' @appId='appId' @route='route.name' />\n<FwAppLink @title='Link Text' @appId='appId' @route='route.name' @query={{hash key=value}} />\n```\n\nWhen used in block format, the block contents are used in place of link text, so the first parameter is the app ID.\nAn optional block parameter is passed containing the app metadata:\n\n```handlebars\n<FwAppLink @appId='appId' @route='route.name' as |app|>\n    <i>{{app.name}}</i>\n</FwAppLink>\n<FwAppLink @appId='appId' @route='route.name' @query={{hash key=value}}>\n    <i>Block text</i>\n</FwAppLink>\n```\n\nIf the app is missing or the user does not have access to the app, no HTML will be rendered.\nUse the `has-app` helper to show content when the app is missing.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Component"
        },
        "FwDocLink": {
            "name": "FwDocLink",
            "shortname": "FwDocLink",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\fw-doc-link.js",
            "line": 6,
            "description": "Documentation Link Component. This component simply links to the documentation set in GC for the current app.\n\nJust call the component, there is no configuration:\n```handlebars\n<FwDocLink />\n```",
            "access": "public",
            "tagname": ""
        },
        "FwGcNav": {
            "name": "FwGcNav",
            "shortname": "FwGcNav",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\fw-gc-nav.js",
            "line": 5,
            "description": "This component extends [FwNav](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/FwNav.html). It retains all the basic features of the navigation implemented by `FwNav`, but it also changes depending upon whether the user is authenticated\nor not. If the session is authenticated and the user has roles within the app, `FwGcNav` will yield what is passed into it into the `FwNav` component. If however, the session is authenticated and the user has no roles, the only page which will be displayed\nin the navigation is Index. If the session has not been authenticated, the Login page will be the only page displayed in the navigation bar. For more information about the login page, [click here](../classes/LoginPage.html).\n\nThe usage of `FwGcNav` is identical to `FwNav`:\n```handlebars\n<FwGcNav>\n   <ul>\n       <li>\n           <LinkTo @route=\"myPage\">My Page</LinkTo>\n   </ul>\n</FwGcNav>\n```",
            "extends": "FwNav"
        },
        "FwHeaderGc": {
            "name": "FwHeaderGc",
            "shortname": "FwHeaderGc",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Components",
            "namespace": "",
            "file": "addon\\components\\fw-header.js",
            "line": 10,
            "description": "Page Header Component. This extends [Ember FW's FwHeader](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/FwHeader.html).\nIn addition to the logo and App Name rendered by Ember FW's FwHeader, Ember FW GC also adds information about the user, such as the app switcher,\ncurrent department and dropdown on the right side of the header. It also is responsible for calling the following modals: about, app-switch, and change-password.\n\nIt is called in an identical way as Ember FW's `FwHeader`:\n```handlebars\n<FwHeader />\n```\n\nThere is no configuration for this component, so everything is documented as private.",
            "access": "public",
            "tagname": "",
            "extends": "FwHeader"
        },
        "ForgotPage": {
            "name": "ForgotPage",
            "shortname": "ForgotPage",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Pages",
            "namespace": "",
            "file": "addon\\controllers\\forgot.js",
            "line": 21,
            "description": "The Forgot Page is the page which will be displayed when you click on the forgot button on the login page. It is a page with a single textbox, email and two buttons: back and\nSend Reset Email. It will simply send a reset email button with a link to the email put in the textbox if there is a user set up for that email.\n\nEverything is set up for you, from the route to the controller to the template. There is nothing you need to do to configure this (so long as you already imported the router as instructed\nin the setup instructions for [Ember FW GC](https://linformatics.bitbucket.io/docs/addons/client/ember-fw-gc/setup))."
        },
        "LoginPage": {
            "name": "LoginPage",
            "shortname": "LoginPage",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Pages",
            "namespace": "",
            "file": "addon\\controllers\\login.js",
            "line": 5,
            "description": "The Login Page is the page which loads in to every app when the user has not been authenticated. It is a very simple looking page which has a username and password textbox, with a\nlogin button and a \"forgot password\" button. The only other thing on this page is the \"Joke of the Day\", which if there are jokes set up in the database appears underneath the\npassword text field. The very simple function of this page is just to login, so it implements the group-control authenticator and properly authenticates the user.\n\nEverything is set up for you, from the route to the controller to the template. There is nothing you need to do to configure this (so long as you already imported the router as instructed\nin the setup instructions for [Ember FW GC](https://linformatics.bitbucket.io/docs/addons/client/ember-fw-gc/setup))."
        },
        "ProfilePage": {
            "name": "ProfilePage",
            "shortname": "ProfilePage",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Pages",
            "namespace": "",
            "file": "addon\\controllers\\profile.js",
            "line": 5,
            "description": "The Profile Page is a page which is designed for a user, who does not have access to Group Control to change aspects about their Group Control user.\nIt allows you to change `nameFirst`, `namePref`, `nameLast`, and `email` for the currently authenticated user. It is able to be accessed through the\n`FwGcNav` component by clicking the name in the right and then clicking \"profile\" in the dropdown that appears.\n\nEverything is set up for you, from the route to the controller to the template to even the link to click in the dropdown to call it.\nThere is nothing you need to do to configure this (so long as you already imported the router as instructed in the setup instructions for\n[Ember FW GC](https://linformatics.bitbucket.io/docs/addons/client/ember-fw-gc/setup))."
        },
        "ResetPage": {
            "name": "ResetPage",
            "shortname": "ResetPage",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Pages",
            "namespace": "",
            "file": "addon\\controllers\\reset.js",
            "line": 26,
            "description": "The Reset Page is the page which will only be displayed if you sent yourself a reset email and click the link in the email. The page loads with two textfields\npassword and confirm password. If you type both of them in and they match (even if it is the same password as the last password), your password will be reset,\nand then the user will be automatically authenticated. It uses a randomly generated \"token\" query parameter to distinguish which user's password you are attempting to\nreset. The only way to make this token is to use the forgot password page.\n\nEverything is set up for you, from the route to the controller to the template. There is nothing you need to do to configure this (so long as you already imported the router as instructed\nin the setup instructions for [Ember FW GC](https://linformatics.bitbucket.io/docs/addons/client/ember-fw-gc/setup))."
        },
        "HasApp": {
            "name": "HasApp",
            "shortname": "HasApp",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Helpers",
            "namespace": "",
            "file": "addon\\helpers\\has-app.js",
            "line": 5,
            "description": "Checks if a user has access to a specific app. Uses the [match](../classes/MatchUtil.html)\nutility, so anything passed in for the app will be passed to the match function. The `needle`\nis a flat list of all user apps, and the `haystack` is what you pass into the component. You are\nable to check one or multiple apps, as in the example below.\n\nUsage:\n```handlebars\n{{has-app 'appId'}} <!-- if the user has access to the \"appId\" app, this returns true -->\n{{has-app (array 'appId1' 'appId2')}} <!-- if the user has access to both apps, this returns true -->\n{{has-app (array (array 'appId1' 'appId2'))}} <!-- if the user has access to either of the apps, this returns true -->\n```",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Helper"
        },
        "HasDepartment": {
            "name": "HasDepartment",
            "shortname": "HasDepartment",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Helpers",
            "namespace": "",
            "file": "addon\\helpers\\has-department.js",
            "line": 4,
            "description": "This helper can be used to determine if the user is part of a specific department.\nIt does *not* extend match, so it will not take an either/or array. It will only take\na single string. Then the helper returns a boolean value based on whether or not the\nuser is in the department.\n\nUsage:\n```handlebars\n{{has-department 'test'}} <!-- if the user is in the \"test\" department, this returns true -->\n```",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Helper"
        },
        "HasRole": {
            "name": "HasRole",
            "shortname": "HasRole",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Helpers",
            "namespace": "",
            "file": "addon\\helpers\\has-role.js",
            "line": 4,
            "description": "Checks if a user has a specific role. Uses the [match](../classes/MatchUtil.html)\nutility, so anything passed in for the role will be passed to the match function. The `needle`\nis a flat list of all user roles, and the `haystack` is what you pass into the component. Thus,\nyou are able to pass an and/or array into the this for more complicated role checks.\n\nUsage:\n```handlebars\n<!-- if the match function returns true this will return true -->\n{{has-role 'admin'}} <!-- Checks for 'admin' role -->\n{{has-role (array 'admin' 'stats')}} <!-- Checks for 'admin' OR 'stats' role -->\n{{has-role (array (array 'admin' 'stats'))}} <!-- Checks for 'admin' AND 'stats' role -->\n```",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Helper"
        },
        "ApplicationControllerMixin": {
            "name": "ApplicationControllerMixin",
            "shortname": "ApplicationControllerMixin",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\application-controller.js",
            "line": 4,
            "description": "Mixin that the application controller needs to use in order\nto be able to use certain things like the login modal functionality\n\nUsage: (in controllers/application.js)\n```javascript\nimport Ember from 'ember';\nimport ApplicationControllerMixin from '@bennerinformatics/ember-fw-gc/mixins/application-controller';\n\nexport default Ember.Controller.extend(ApplicationControllerMixin, {\n    // more code here\n});\n```\n\nThis should be already added for you in the application controller, as this is added by default by the Generator FW.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Mixin"
        },
        "AuthCheckMixin": {
            "name": "AuthCheckMixin",
            "shortname": "AuthCheckMixin",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [
                "AuthRoute-Addon"
            ],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\auth-check.js",
            "line": 4,
            "description": "A mixin designed to be used by routes that wish to check if the user\nis still logged in before transitioning to a new route.\n\nUsage: (in a routes/*.js file)\n```javascript\nimport Ember from 'ember';\nimport AuthCheckMixin from '@bennerinformatics/ember-fw-gc/mixin/auth-check';\n\nexport default Ember.Route.extend(AuthCheckMixin, {\n    // route code here\n});\n```\nThis mixin is used by the addon AuthRoute, which is extended by both [AuthRoute](AuthRoute.html) and [RestrictedRoute](RestrictedRoute.html), so then, this mixin\nis incorporated behind the scenes into all the routes used in the Informatics Apps.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Mixin"
        },
        "AuthComponentMixin": {
            "name": "AuthComponentMixin",
            "shortname": "AuthComponentMixin",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [
                "AuthBlock",
                "AuthButton"
            ],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\auth-component.js",
            "line": 6,
            "description": "For Ember deprecation notice, [click here](https://deprecations.emberjs.com/id/ember-component-is-visible/). Basic mixin to be implemented in various components\nthat enables showing or hiding it based on auth permissions\n\nTo use in a component:\n```javascript\n// app/components/some-component.js\nimport Ember from 'ember';\nimport AuthComponentMixin from '@bennerinformatics/ember-fw-gc/mixins/auth-component';\n\nexport default Ember.Component.extend(AuthComponentMixin, {\n    // your code here....\n});\n```\nThis is used in the [AuthBlock](AuthBlock.html) and [AuthButton](AuthButton.html) components. You are able to\nuse this in your own components too, but it is likely that you will never call this component directly.",
            "access": "public",
            "tagname": "",
            "deprecated": true,
            "deprecationMessage": "Ember Component isVisible has been deprecated by Ember. Use has-role or has-department helper instead."
        },
        "AuthRouteMixin": {
            "name": "AuthRouteMixin",
            "shortname": "AuthRouteMixin",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [
                "AuthRoute"
            ],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\auth-route.js",
            "line": 4,
            "description": "Mixin that encapsulates some of the route authentication behavior.\n\nIf the user is logged into an app, but has no app roles, this will redirect them to index.\nThis is as opposed to the default ember-simple-auth logic which only checks logged in, not roles\n\nUsage: (in a routes file)\n```javascript\nimport Route from '@ember/routing/route';\nimport AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';\nimport AuthCheckMixin from '@bennerinformatics/ember-fw-gc/mixins/auth-check';\nimport AuthRouteMixin from '@bennerinformatics/ember-fw-gc/mixins/auth-route';\n\nexport default Route.extend(AuthenticatedRouteMixin, AuthCheckMixin, AuthRouteMixin, {\n    // your code here\n});\n```\nThis mixin is used by the [AuthRoute](AuthRoute.html) in your app, which means that any route which extends `AuthRoute` in the\nInformatics Apps incorporates this mixin.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Mixin"
        },
        "DepartmentTransitionMixin": {
            "name": "DepartmentTransitionMixin",
            "shortname": "DepartmentTransitionMixin",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\department-transition.js",
            "line": 6,
            "description": "A mixin designed to be used by the application route to change the user's department based on the query parameter `setdept` if they have access to that department.\nIn practice, this means that after this mixin is properly set up in application route, passing `?setdept=info` to the end of any url in any app, will change the department\nto Informatics before loading the page.\n\nThis is how it would be set up in `routes/application.js`:\n\n```javascript\nimport Ember from 'ember';\nimport DepartmentTransitionMixin from '@bennerinformatics/ember-fw-gc/mixins/department-transition';\n\nexport default Ember.Route.extend(DepartmentTransitionMixin, {\n    // route code here\n});\n```\n\nThis mixin is incorporated into the application route by default in the Generator FW, so it should already be in your app. If it is not, please add it to `routes/application.js`\nas described.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Mixin"
        },
        "MixinIndexRoute": {
            "name": "MixinIndexRoute",
            "shortname": "MixinIndexRoute",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\index-route.js",
            "line": 5,
            "description": "Mixing to handle common index route logic.\nAllows redirecting the user to a specified route, conditionally upon them having no roles.\nThe purpose is to allow for an error page to display if the user has no permissions within the\ncurrent app.\n\nUsage: (in a routes file)\n```javascript\nimport Route from '@ember/routing/route';\nimport IndexMixin from '@bennerinformatics/ember-fw-gc/mixins/index-route';\n\nexport default Route.extend(IndexMixin, {\n     mainRoute: 'main'\n    // your code here\n});\n```\nThis should be incorporated into every app's `route/index.js`. In practice, this means that the main page of your\napp should be called something other than `index`, so that index can be used properly for displaying the no\npermissions page.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Mixin"
        },
        "PermissionsMixin": {
            "name": "PermissionsMixin",
            "shortname": "PermissionsMixin",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [
                "AuthRoute-Addon"
            ],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\permissions.js",
            "line": 5,
            "description": "Creates a basic `permit` function that will check\na user's roles against a list of provided roles using the\nmatch function. Designed to be used by a route.\n\nUsage: (in a route file)\n```javascript\nimport Ember from 'ember';\nimport PermissionsMixin from '@bennerinformatics/ember-fw-gc/mixin/permissions';\n\nexport default Ember.Route.extend(PermissionsMixin, {\n    // your code here\n});\n```\n\nThis mixin is used by the addon AuthRoute, which is extended by both [AuthRoute](AuthRoute.html) and [RestrictedRoute](RestrictedRoute.html), so then, this mixin\nis incorporated behind the scenes into all the routes used in the Informatics Apps (whether `AuthRoute` or `RestrictedRoute`).",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Mixin"
        },
        "RestrictedRouteMixin": {
            "name": "RestrictedRouteMixin",
            "shortname": "RestrictedRouteMixin",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [
                "RestrictedRoute"
            ],
            "module": "Mixins",
            "namespace": "",
            "file": "addon\\mixins\\restricted-route.js",
            "line": 4,
            "description": "Mixin that encapsulates some of the route restriction behavior.\n\nIf a roles array and a rejectedRoute property are specified, this mixin\nwill ensure the user has adequate permissions before proceeding to the route.\n\nMixin designed to be used by a route. Routes that use this mixin **MUST**\nalso use the PermissionsMixin\n\nUsage: (in a routes file)\n```javascript\nimport Ember from 'ember';\nimport PermissionsMixin from '@bennerinformatics/ember-fw-gc/mixins/permissions';\nimport RestrictedRouteMixin from '@bennerinformatics/ember-fw-gc/mixins/restricted-route';\n\nexport default Ember.Route.extend(PermissionsMixin, RestrictedRouteMixin, {\n    // your code here\n});\n```\n\nThis mixin is used by the [RestrictedRoute](RestrictedRoute.html) in your app, which means that any route which extends `RestrictedRoute` in the\nInformatics Apps automatically incorporates this mixin.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Mixin"
        },
        "UserModel": {
            "name": "UserModel",
            "shortname": "UserModel",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Models",
            "namespace": "",
            "file": "addon\\models\\user.js",
            "line": 6,
            "description": "This user model is used in order to access the GC User model within the app, which depends on Group Control. This has abundant use cases, and all of our current apps use\nthe user model. To make sure that any changes to the GC User model are accommodated within the apps, you must import this user model rather than defining your own. That can be done\nby making a `model/user.js` file in your app, and setting it to the following export statment:\n\n```js\nexport {default} from '@bennerinformatics/ember-fw-gc/models/user';\n```\n\nAdditionally, in order to properly make this model work, you must accompany it with the proper adapter (so that it doesn't look for a User Serverside Model in your own app).\nSee [fw-app](../classes/FwAppAdapter.html) if you need more information about that.\n\nAfter you have done these two steps, you can use user as any other Ember model, and it will properly get the data from Group Control.",
            "access": "public",
            "tagname": ""
        },
        "AppMeta": {
            "name": "AppMeta",
            "shortname": "AppMeta",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Miscellaneous",
            "namespace": "",
            "file": "addon\\objects\\app-meta.js",
            "line": 3,
            "description": "This object defines the properties contained in an app meta object. AppMeta is essentially the information that is saved about the app in the `fw.json` file.\nThis object stores that information. It is used in tandem with the [AppMeta Service](AppMetaService.html), and should probably not be called directly. But this is\nthe internal \"app-meta\" object, so you can know when using the service, what properties are available for each app.",
            "access": "public",
            "tagname": "",
            "extends": "EmberObject"
        },
        "AuthRoute-Addon": {
            "name": "AuthRoute-Addon",
            "shortname": "AuthRoute-Addon",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Miscellaneous",
            "namespace": "",
            "file": "addon\\routes\\auth.js",
            "line": 6,
            "description": "Route that includes several of the auth-related mixins already included,\nmade for convenience.\n\nUsage: (in a routes file)\n```javascript\nimport AuthRoute from '@bennerinformatics/ember-fw-gc/routes/auth';\n\nexport default AuthRoute.extend({\n    // your code here...\n});\n```\n\nThis AuthRoute is extended by both the [AuthRoute](AuthRoute.html) and the [RestrictedRoute](RestrictedRoute.html), both of which are routes you can access within\nyour app. Thus all the mixins incorporated into this route is used by both of those as well. You should hardly ever import this AuthRoute instead of the AuthRoute accessible\ndirectly.",
            "access": "public",
            "tagname": "",
            "extends": "BaseRoute",
            "uses": [
                "AuthenticatedRouteMixin",
                "AuthCheckMixin",
                "PermissionsMixin"
            ]
        },
        "AjaxService": {
            "name": "AjaxService",
            "shortname": "AjaxService",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Services",
            "namespace": "",
            "file": "addon\\services\\ajax.js",
            "line": 6,
            "description": "This service extends both [Ember-FW's AjaxService](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/AjaxService.html),\nand the [Ember AjaxService](https://github.com/ember-cli/ember-ajax#ember-ajax), which is Ember-FW's base. The main thing that Ember FW GC's AjaxService\nadds to these other two is functionality with Group Control authentication. It rewrites all of the\n[HTTP-verbed methods](https://github.com/ember-cli/ember-ajax?tab=readme-ov-file#http-verbed-methods) to account for Group Control authentication,\nand throws an `UnauthorizedError` if the user is not logged in. For the developer within the apps, however, the AjaxService will function almost identically\nto the EmberAjaxService, and the Ember-FW AjaxService. Because of this there is no need to document each of the methods, which are documented by EmberAjaxService.\nThe only thing that is added for the developer to call different than EmberAjaxService is the third parameter `defaultBehavior` (default is false), which was added\nto all the HTTP-verbed methods. All this will do is skip the user authentication added by Ember FW GC, and instead use the default HTTP-verbed method from\nEmberAjaxService.\n\nFor a basic example of how to implement the config (and ajax) service at the basic level, see our\n[Conceptual Introduction - Advanced Topics](https://linformatics.bitbucket.io/docs/training/intro/advanced/#ajax-requests).",
            "access": "public",
            "tagname": "",
            "extends": "@bennerinformatics/ember-fw/services/ajax"
        },
        "AppMetaService": {
            "name": "AppMetaService",
            "shortname": "AppMetaService",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Services",
            "namespace": "",
            "file": "addon\\services\\app-meta.js",
            "line": 8,
            "description": "This service is a simple cache of app metas, as we need information from app\nmetas for a few inter app compoments.\nThis is done as a service instead of using ember data reduce dependencies and\nprevent model conflicts (plus meta does not conform to a JSON model).\n\nAfter you inject this service, you have four public methods which can be used to retrieve\nappMetas.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Service"
        },
        "ConfigService": {
            "name": "ConfigService",
            "shortname": "ConfigService",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Services",
            "namespace": "",
            "file": "addon\\services\\config.js",
            "line": 6,
            "description": "At its base, the config service is used to form the proper ajax url to be used with the\n[Ajax Service](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw-gc/classes/AppMeta.html) to\nmake a direct network call. Ember FW GC's config service extends Ember FW's config service, which can be found\n[here](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/ConfigService.html). The basic usage\nof calling a network request within the app you are currently logged into is described there (with `formUrl`).\nEmber FW GC only adds a couple of functions to allow more complicated forming of url (such as forming a url\nfor another app). See the couple added functions below.\n\nFor a detailed example of how to implement the config (and ajax) service at the basic level, see our\n[Conceptual Introduction - Advanced Topics](https://linformatics.bitbucket.io/docs/training/intro/advanced/#ajax-requests).",
            "access": "public",
            "tagname": "",
            "extends": "@bennerinformatics/services/config"
        },
        "CurrentUserService": {
            "name": "CurrentUserService",
            "shortname": "CurrentUserService",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Services",
            "namespace": "",
            "file": "addon\\services\\current-user.js",
            "line": 11,
            "description": "This service handles various functionality that deals with logged in\nuser management. This is one of the most used services in Ember FW GC,\nand once injected has various properties and methods which can be called upon it\nwhich are invaluable to various aspects of the department.\n\n**Note**: This is different from the user model in that this deals with the currently logged\nin user, rather than an array of user models from Group Control. Because this is a service\nand not a user model, it should not be used as such. For example, a property expecting a user\nmodel, should not be set in the following way:\n```javascript\nthis.set('user', this.get('currentUser'));\n```\n\nBut rather using the id to find the actual user model from a user array:\n\n```javascript\nthis.set('user', this.get('users').findBy('id', this.get('currentUser.userId')));\n```\n\nThat being said the CurrentUser service is indispensable to a proper integration of Group Control with\nthe apps. For a list of all available properties and methods, see below.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Service",
            "uses": [
                "Ember.Evented"
            ]
        },
        "JokesService": {
            "name": "JokesService",
            "shortname": "JokesService",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Services",
            "namespace": "",
            "file": "addon\\services\\jokes.js",
            "line": 3,
            "description": "This service allows access to the joke which has been generated/fetched by the login page and displayed there.\nIt does not handle the actual fetching from Group Control of the joke, but merely sets or gets the joke, which\nthe Login page loaded. It should probably not be used externally to ember-fw-gc.",
            "access": "public",
            "tagname": "",
            "extends": "Ember.Service"
        },
        "MatchUtil": {
            "name": "MatchUtil",
            "shortname": "MatchUtil",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Utils",
            "namespace": "",
            "file": "addon\\utils\\match.js",
            "line": 3,
            "description": "This util defines a single function `match`. It is used internally, expecially by the current user service\n(in `currentUser.match()`), but there is no reason that this cannot also be imported by your app if it is\nrequired. To import this function, use the following code:\n\n```js\nimport match from '@bennerinformatics/ember-fw-gc/utils/match';\n```\n\nThe function itself matches a permission array (`haystack`) to a flat list of\navailable items the user has (`needle`), and thus these are its two parameters:\n\n- `needle` - flat array of available roles/apps/depts (of the current user)\n- `haystack` - array of roles/apps/depts to check against\n\nThis function can be used to check for apps, roles or departments the user has access to.\nHow this function works: the roles/list of roles passed in via `haystack`\nare matched using an 'and/or' setup. If `haystack` is an array, it treats each role\nin `haystack` as an \"OR\" requirement. If roles is an array and one of the items in\nthat array is a sub-array of roles, that sub-array is treated with an \"AND\" rule.\n\nExample:\n```javascript\n// say in this example that the needle of user roles is both 'admin' and 'base'\nmatch(needle, ['admin', 'supervisor']); // needle must contain either 'admin' OR 'supervisor'. RETURNS true\nmatch(needle, [['admin', 'supervisor']]); // needle must contain both 'admin' AND 'supervisor'. RETURNS false\nmatch(needle, [['stats', 'supervisor'], 'admin']); // needle must contain both 'supervisor' AND 'stats' OR 'admin'. RETURNS true\n ```"
        },
        "AuthRoute": {
            "name": "AuthRoute",
            "shortname": "AuthRoute",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Miscellaneous",
            "namespace": "",
            "file": "app\\routes\\auth.js",
            "line": 4,
            "description": "Convenience route that bundles some of the auth route mixins. It essentially handles redirects and everything to ensure that only users who are authenticated can\naccess the route. It also handles redirecting to index route if the user has no roles within the app.\n\nUsage: (in a routes file)\n```javascript\nimport AuthRoute from './auth';\n\nexport default AuthRoute.extend({\n    // your code here...\n});\n```\nBasically all of the routes in your app should extend `AuthRoute` (or `RestrictedRoute` if only certain roles have access to that page) unless you want the route to be accessible\neven if the user is not logged in.",
            "extends": "AuthRoute-Addon",
            "uses": [
                "AuthRouteMixin"
            ]
        },
        "RestrictedRoute": {
            "name": "RestrictedRoute",
            "shortname": "RestrictedRoute",
            "classitems": [],
            "plugins": [],
            "extensions": [],
            "plugin_for": [],
            "extension_for": [],
            "module": "Miscellaneous",
            "namespace": "",
            "file": "app\\routes\\restricted.js",
            "line": 4,
            "description": "Convenience route that bundles some of the restricted route mixins. It extends the basic functionality of the AuthRoute, except it adds to it one more factor:\nit allows you to filter which roles have access to this page. It also allows you to specify a `rejectedRoute` to transition to when the user does not have the\nproper roles. This is used most commonly within the apps for the admin pages (which are restricted to `admin` and `global-admin`) roles. For more information see\nthe RestrictedRouteMixin.\n\nUsage: (in a routes file)\n```javascript\nimport RestrictedRoute from './restricted';\n\nexport default RestrictedRoute.extend({\n    // your code here...\n});\n```",
            "extends": "AuthRoute-Addon",
            "uses": [
                "RestrictedRouteMixin"
            ]
        }
    },
    "elements": {},
    "classitems": [
        {
            "file": "addon\\adapters\\fw-app.js",
            "line": 19,
            "description": "ID of the app containing this model",
            "type": "{string}",
            "itemtype": "property",
            "name": "appId",
            "default": "'gc'",
            "class": "FwAppAdapter",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\adapters\\fw-optional-app.js",
            "line": 28,
            "description": "ID of the app containing this model",
            "type": "{string}",
            "itemtype": "property",
            "name": "appId",
            "class": "OptionalAppAdapter",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\authenticators\\group-control.js",
            "line": 44,
            "description": "Injected Config service",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "config",
            "type": "ConfigService",
            "class": "GroupControlAuthenticator",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\authenticators\\group-control.js",
            "line": 53,
            "description": "Injected Current User service",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "currentUser",
            "type": "CurrentUserService",
            "class": "GroupControlAuthenticator",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\authenticators\\group-control.js",
            "line": 62,
            "description": "Injected Ajax service",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "ajax",
            "type": "AjaxService",
            "class": "GroupControlAuthenticator",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\authenticators\\group-control.js",
            "line": 71,
            "description": "Injected Notifications service",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "notifications",
            "type": "NotificationsService",
            "class": "GroupControlAuthenticator",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\authenticators\\group-control.js",
            "line": 80,
            "description": "Overrides Ember-Simple-Auth's `restore` method.\n\nRestores user data on page reload. If the session has expired, automatically\nlogout the user.",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "restore",
            "return": {
                "description": "Promise that resolves on successful restoration, otherwise rejects",
                "type": "Promise"
            },
            "class": "GroupControlAuthenticator",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\authenticators\\group-control.js",
            "line": 100,
            "description": "Authenticates a user given a username and password.",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "authenticate",
            "params": [
                {
                    "name": "user",
                    "description": "Username to attempt login with",
                    "type": "String"
                },
                {
                    "name": "pass",
                    "description": "User-provided password to attempt login with",
                    "type": "String"
                },
                {
                    "name": "department",
                    "description": "Query parameter preferred department",
                    "type": "String"
                }
            ],
            "return": {
                "description": "Promise that resolves upon successful login, otherwise rejects",
                "type": "Promise"
            },
            "class": "GroupControlAuthenticator",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\authenticators\\group-control.js",
            "line": 132,
            "description": "Invalidates a user's session. Called on logout.",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "invalidate",
            "return": {
                "description": "",
                "type": "Promise"
            },
            "class": "GroupControlAuthenticator",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\components\\modals\\re-login.js",
            "line": 55,
            "class": "ReLoginModal",
            "module": "Components"
        },
        {
            "file": "addon\\components\\modals\\re-login.js",
            "line": 90,
            "class": "ReLoginModal",
            "module": "Components"
        },
        {
            "file": "addon\\components\\modals\\re-login.js",
            "line": 116,
            "class": "ReLoginModal",
            "module": "Components"
        },
        {
            "file": "addon\\components\\auth-button.js",
            "line": 33,
            "description": "Whether or not to mark the button as 'disabled'\nSee <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-disabled\">here</a>\nfor more details",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "disabled",
            "type": "{Boolean}",
            "class": "AuthButton",
            "module": "Components"
        },
        {
            "file": "addon\\components\\auth-button.js",
            "line": 44,
            "description": "What the type of the button is\nSee <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-type\">here</a>\nfor more details",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "type",
            "type": "{String}",
            "class": "AuthButton",
            "module": "Components"
        },
        {
            "file": "addon\\components\\auth-button.js",
            "line": 58,
            "description": "Action to be called when the button is clicked.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "click",
            "type": "{Action}",
            "class": "AuthButton",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 45,
            "description": "Dynamic parameters array. ***This is deprecated and should not be used. Specify all your parameters***",
            "itemtype": "property",
            "name": "params",
            "type": "{Array}",
            "deprecated": true,
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 52,
            "description": "Link title, will be null in block form",
            "itemtype": "property",
            "name": "title",
            "type": "{String}",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 59,
            "description": "Shortcode of app",
            "itemtype": "property",
            "name": "appId",
            "type": "{String}",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 66,
            "description": "Route within the app you are linking to",
            "itemtype": "property",
            "name": "route",
            "type": "{String}",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 73,
            "description": "App meta object for the related app. Will be null if the app is not found. Set by `didReceiveAttrs`.",
            "itemtype": "property",
            "name": "app",
            "type": "{EmberObject}",
            "access": "private",
            "tagname": "",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 81,
            "description": "This is deprecated. Query parameters for the link. It was set if using the params array and\npassed query params using the `query-params` helper, but the preferred method is using the `@query`\nproperty, as is described [here](https://guides.emberjs.com/release/routing/query-params/#toc_linkto--component)",
            "itemtype": "property",
            "name": "queryParams",
            "type": "{Object}",
            "deprecated": true,
            "access": "private",
            "tagname": "",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 93,
            "description": "Computed property of URL encoded query params. This is again deprecated as it relies on the `params` order of the old way\nrather than specified values, as is with the new syntax.",
            "itemtype": "property",
            "name": "queryString",
            "type": "{Computed String}",
            "deprecated": true,
            "access": "private",
            "tagname": "",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 115,
            "description": "Computed property of link URL within the other app.",
            "itemtype": "property",
            "name": "url",
            "type": "{Computed String}",
            "access": "private",
            "tagname": "",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-app-link.js",
            "line": 129,
            "description": "All this stuff about params is deprecated and just there for backwards compatibility. Don't remove,\nbut you really shouldn't be using the params attribute in any other app.",
            "class": "FwAppLink",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 41,
            "description": "Deprecated. This property actually does nothing and should be deleted from your FwHeader",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "showAboutLink",
            "type": "{Boolean}",
            "deprecated": true,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 51,
            "description": "Flags for whether modals are shown or not. Contains: about, apps, and change booleans within it.",
            "itemtype": "property",
            "name": "modals",
            "type": "{Object}",
            "access": "private",
            "tagname": "",
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 63,
            "description": "Whether or not the dropdown is currently shown. Internal.",
            "itemtype": "property",
            "name": "showDropdown",
            "type": "{Boolean}",
            "access": "private",
            "tagname": "",
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 71,
            "description": "Whether or not the logged in user needs a password change",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "needSecureChangePassword",
            "type": "{Boolean}",
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 105,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 121,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 130,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 136,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 141,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 148,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 156,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 162,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 170,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\components\\fw-header.js",
            "line": 176,
            "class": "FwHeaderGc",
            "module": "Components"
        },
        {
            "file": "addon\\mixins\\auth-component.js",
            "line": 29,
            "description": "This is the default visibility of the component which uses this mixin. This is used if neither `perm`\nnor `department` are set.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "defaultVisibility",
            "type": "{Boolean}",
            "default": "true",
            "class": "AuthComponentMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\auth-component.js",
            "line": 40,
            "description": "Permission value. This will be passed directly to the [match](MatchUtil.html) function.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "perm",
            "type": "{String|Array}",
            "class": "AuthComponentMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\auth-component.js",
            "line": 49,
            "description": "If supplied, the mixin checks this against a user's departments.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "department",
            "type": "{String}",
            "class": "AuthComponentMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\auth-component.js",
            "line": 58,
            "description": "If supplied, this will be checked against the user's roles using\nthe [match](MatchUtil.html) function. If it passes,\nit will ignore the `department` property.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "override",
            "type": "{String}",
            "class": "AuthComponentMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\auth-component.js",
            "line": 72,
            "description": "This sets the isVisible property, computed based on all the other properties passed in.",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "isVisible",
            "type": "{Computed Boolean}",
            "class": "AuthComponentMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\auth-route.js",
            "line": 33,
            "description": "Route to transition to if the check (for authentication and having roles) fails. This should ordinarily be left to the default, but could be overwritten if the need arose.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "rejectedRoute",
            "type": "{String}",
            "default": "index",
            "class": "AuthRouteMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\index-route.js",
            "line": 34,
            "description": "Route to transition to if the condition succeeds. This should be set in every index route.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "mainRoute",
            "type": "{String}",
            "class": "MixinIndexRoute",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\permissions.js",
            "line": 32,
            "description": "Checks a role or list of roles against a user's available roles.\nIf the check fails, the app will transition to the route specified.",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "permit",
            "params": [
                {
                    "name": "roles",
                    "description": "Roles to check",
                    "type": "String|Array"
                },
                {
                    "name": "goTo",
                    "description": "Route to transition to if the check fails",
                    "type": "String"
                }
            ],
            "return": {
                "description": "",
                "type": "Ember.Transition|null"
            },
            "class": "PermissionsMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\restricted-route.js",
            "line": 33,
            "description": "Array of roles to be passed to the match function",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "roles",
            "type": "{Array}",
            "class": "RestrictedRouteMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\mixins\\restricted-route.js",
            "line": 42,
            "description": "Route to transition to if the roles check fails. This may have more use case to override than in AuthRoute.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "rejectedRoute",
            "type": "{String}",
            "default": "index",
            "class": "RestrictedRouteMixin",
            "module": "Mixins"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 27,
            "description": "This property is saved in Group Control and is a string of the first name of the user.",
            "itemtype": "property",
            "name": "nameFirst",
            "type": "{String}",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 33,
            "description": "This property is saved in Group Control and is a string of the last name of the user.",
            "itemtype": "property",
            "name": "nameLast",
            "type": "{String}",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 39,
            "description": "This property is saved in Group Control and is a string of the preferred name (nickname) of the user.",
            "itemtype": "property",
            "name": "namePref",
            "type": "{String}",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 45,
            "description": "This property is saved in Group Control and a boolean of whether the user is in the current department\n(as a regular user, not a guest user). This is used to filter dropdowns so not all users show up in them\n(you should almost always filter all your dropdowns by inDept = true, unless you have a clear reason for wanting\nall possible users).",
            "itemtype": "property",
            "name": "inDept",
            "type": "{String}",
            "default": "true",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 58,
            "description": "nameSort is a computed property, which returns the preferred first name (so `namePref` if it is defined or `nameFirst` if it isn't).\nThis is used by the `nameFull` property.",
            "itemtype": "property",
            "name": "nameSort",
            "type": "{Computed}",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 70,
            "description": "nameFull is a computed property, which returns the full name of the user ({nameSort nameLast}). If either nameSort or nameLast is empty,\nit will return the userId instead.",
            "itemtype": "property",
            "name": "nameFull",
            "type": "{Computed}",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 85,
            "description": "nameFullLower is a computed property used in `nameMatches` and other lookups, which is simply the lowercase version of `nameFull`.",
            "itemtype": "property",
            "name": "nameFullLower",
            "type": "{Computed}",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 94,
            "description": "nameFormalLower is a computed property used in `nameMatches` and other lookups, which is simply the lowercase version of the user's formal name (ie {nameFirst nameLast}\nregardless if there is a namePref defined or not).",
            "itemtype": "property",
            "name": "nameFormalLower",
            "type": "{Computed}",
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\models\\user.js",
            "line": 105,
            "description": "Checks if the passed in name matches this user. Used for search functionality.",
            "itemtype": "method",
            "name": "nameMatches",
            "params": [
                {
                    "name": "name",
                    "description": "Name to check",
                    "type": "String"
                }
            ],
            "return": {
                "description": "True if the name matches this user's id, full name, or full name without preferred name",
                "type": "Boolean"
            },
            "class": "UserModel",
            "module": "Models"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 14,
            "description": "App ID",
            "itemtype": "property",
            "name": "appId",
            "type": "{String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 20,
            "description": "Name of the app",
            "itemtype": "property",
            "name": "name",
            "type": "{String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 26,
            "description": "App version",
            "itemtype": "property",
            "name": "version",
            "type": "{String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 32,
            "description": "Git repository",
            "itemtype": "property",
            "name": "repo",
            "type": "{String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 38,
            "description": "App URL relative to webroot",
            "itemtype": "property",
            "name": "url",
            "type": "{Array}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 44,
            "description": "Computed URL with no trailing slash. Used by `FwAppLink`.",
            "itemtype": "property",
            "name": "urlClean",
            "type": "{Computed String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 53,
            "description": "Relative app logo path",
            "itemtype": "property",
            "name": "logo",
            "type": "{String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 59,
            "description": "App logo relative to the webroot. Computed.",
            "itemtype": "property",
            "name": "",
            "type": "{Computed String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 68,
            "description": "Relative api path",
            "itemtype": "property",
            "name": "api",
            "type": "{String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 74,
            "description": "API path relative to the webroot. computed.",
            "itemtype": "property",
            "name": "apiUrl",
            "type": "{Computed String}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 83,
            "description": "Author of the app.",
            "itemtype": "property",
            "name": "author",
            "type": "{Array}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 89,
            "description": "Array of current maintainers of the app.",
            "itemtype": "property",
            "name": "maintainers",
            "type": "{Array}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\objects\\app-meta.js",
            "line": 95,
            "description": "Array of previous maintainers for the app.",
            "itemtype": "property",
            "name": "previousMaintainers",
            "type": "{Array}",
            "class": "AppMeta",
            "module": "Miscellaneous"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 26,
            "description": "Cache of app metas previously fetched.\nShould not be directly accessed, but can be watched",
            "access": "protected",
            "tagname": "",
            "itemtype": "property",
            "name": "cache",
            "type": "{EmberObject}",
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 35,
            "description": "App promises that have not yet resolved",
            "access": "private",
            "tagname": "",
            "itemtype": "property",
            "name": "_promises",
            "type": "{EmberObject}",
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 43,
            "description": "Fetches the meta for an app",
            "access": "public",
            "tagname": "",
            "params": [
                {
                    "name": "app",
                    "description": "App ID",
                    "type": "String"
                }
            ],
            "return": {
                "description": "Javascript object of app metadata, {size: 0} if no meta found, or null if not fetched",
                "type": "Object"
            },
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 53,
            "description": "Fetches the metadata for a list of apps",
            "params": [
                {
                    "name": "ids",
                    "description": "Array of string app IDs",
                    "type": "Array"
                }
            ],
            "return": {
                "description": "Array of coorsponding app IDs",
                "type": "Array"
            },
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 62,
            "description": "Internal function to store an array of apps to the cache",
            "access": "private",
            "tagname": "",
            "params": [
                {
                    "name": "apps",
                    "description": "Array of app meta",
                    "type": "Array"
                },
                {
                    "name": "ids",
                    "description": "Array of IDs to ensure are stored",
                    "type": "Array"
                }
            ],
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 86,
            "description": "Internal function to request an app meta. Prevents making multiple requests for the same piece of data",
            "access": "private",
            "tagname": "",
            "params": [
                {
                    "name": "id",
                    "description": "App ID to fetch",
                    "type": "String"
                }
            ],
            "return": {
                "description": "Promise that resolves to app meta",
                "type": "Promise"
            },
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 111,
            "description": "Fetches the meta from the server for the specified app",
            "params": [
                {
                    "name": "id",
                    "description": "App ID to fetch",
                    "type": "String"
                },
                {
                    "name": "reload",
                    "description": "If true, fetches the data even if loaded. False returns cached data if present",
                    "type": "Boolean",
                    "optional": true,
                    "optdefault": "false"
                }
            ],
            "return": {
                "description": "Promise that resolves to app meta, or resolves to null if no access to the app",
                "type": "Promise"
            },
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\app-meta.js",
            "line": 131,
            "description": "Fetches the meta from the server for the specified app",
            "params": [
                {
                    "name": "ids",
                    "description": "App IDs to fetch",
                    "type": "Array"
                },
                {
                    "name": "reload",
                    "description": "If true, fetches the data even if loaded. False returns cached data if present",
                    "type": "Boolean",
                    "optional": true,
                    "optdefault": "false"
                }
            ],
            "return": {
                "description": "Promise that resolves to app meta",
                "type": "Promise"
            },
            "class": "AppMetaService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\config.js",
            "line": 26,
            "description": "Forms a request to group control, expected to be an app dependency of this app. Automatically handles being in group control.\nSame arguments and usage as [formUrl](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/ConfigService.html#method_formUrl).",
            "itemtype": "method",
            "name": "formGCUrl",
            "return": {
                "description": "AJAX url for an Group Control Ajax request",
                "type": "String"
            },
            "class": "ConfigService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\config.js",
            "line": 41,
            "description": "Same arguments and usage as [formUrl](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/ConfigService.html#method_formUrl),\nexcept it sends to another app besides the current one.",
            "itemtype": "method",
            "name": "formAppUrl",
            "params": [
                {
                    "name": "app",
                    "description": "App to send request to. Should be loaded using AppMetaService.findMeta",
                    "type": "String"
                }
            ],
            "return": {
                "description": "AJAX url for an inter-app ajax request",
                "type": "String"
            },
            "class": "ConfigService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\config.js",
            "line": 62,
            "description": "Same arguments and usage as [formUrl](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/ConfigService.html#method_formUrl),\nexcept instead of returning the URL, returns a promise that resolves to the URL.",
            "itemtype": "method",
            "name": "promiseAppUrl",
            "params": [
                {
                    "name": "app",
                    "description": "App to send request to",
                    "type": "String"
                }
            ],
            "return": {
                "description": "Promise that returns an AJAX url for an inter-app ajax request",
                "type": "Promise"
            },
            "class": "ConfigService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 41,
            "description": "Username of the logged in user.",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "userId",
            "type": "{String}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 50,
            "description": "Array of apps the user has access to",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "apps",
            "type": "{Array}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 59,
            "description": "Array of roles the user has for the current app and department",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "roles",
            "type": "{Array}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 68,
            "description": "If true, the user has roles in this app",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "hasRoles",
            "type": "{boolean}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 77,
            "description": "Array of departments the user has access to for the current app",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "departments",
            "type": "{Array}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 86,
            "description": "If true, the user has at least one department",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "hasRoles",
            "type": "{boolean}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 95,
            "description": "Current department the user is viewing the application as",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "currentDept",
            "type": "{String}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 104,
            "description": "First name of the user",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "nameFirst",
            "type": "{String}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 113,
            "description": "Last name of the user",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "nameLast",
            "type": "{String}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 122,
            "description": "Preferred first name (nickname) of the user",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "namePref",
            "type": "{String}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 131,
            "description": "Email of the user",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "email",
            "type": "{String}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 143,
            "description": "Full name of the user, using the user's first, last, and\npreferred name (if available)",
            "access": "public",
            "tagname": "",
            "itemtype": "property",
            "name": "nameFull",
            "type": "{String}",
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 158,
            "description": "Checks if the user is currently viewing the application as\na particular department",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "checkDepartment",
            "params": [
                {
                    "name": "department",
                    "description": "department to check",
                    "type": "String"
                }
            ],
            "return": {
                "description": "whether or not the current department matches the provided one",
                "type": "Boolean"
            },
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 171,
            "description": "Changes the department the user is currently viewing the department as.",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "changeDepartment",
            "params": [
                {
                    "name": "newDept",
                    "description": "new department to view",
                    "type": "String"
                }
            ],
            "return": {
                "description": "Promise that resolves when the request has been made successfully",
                "type": "Promise"
            },
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 191,
            "description": "Checks if the user is still logged in.",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "check",
            "return": {
                "description": "Promise that resolves with the current user's status",
                "type": "Promise"
            },
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 214,
            "description": "Reloads the user's roles",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "reload",
            "return": {
                "description": "Promise that resolves when the request has completed.",
                "type": "Promise"
            },
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 230,
            "description": "Checks if the user's roles match the provided list of roles.\nUses the [match](../classes/MatchUtil.html) utility to match users\ncurrent roles. Note the use of arrays to match with AND/OR\n(a single array is OR, a double array is AND).",
            "access": "public",
            "tagname": "",
            "params": [
                {
                    "name": "roles",
                    "description": "Roles to check in either and/or array or string.",
                    "type": "Array|String"
                }
            ],
            "return": {
                "description": "Whether or not the given roles match the user's roles",
                "type": "Boolean"
            },
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\current-user.js",
            "line": 244,
            "description": "Shortcut to trigger the change-password trigger",
            "access": "private",
            "tagname": "",
            "itemtype": "method",
            "name": "changePassword",
            "params": [
                {
                    "name": "needSecure",
                    "description": "Whether or the user needs to change this password for security reasons.",
                    "type": "Boolean"
                }
            ],
            "class": "CurrentUserService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\jokes.js",
            "line": 17,
            "description": "Internal joke model. Easiest to use the getter and setters provided rather than calling\ndirectly.",
            "access": "protected",
            "tagname": "",
            "itemtype": "property",
            "name": "joke",
            "type": "{DS.Model}",
            "class": "JokesService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\jokes.js",
            "line": 26,
            "description": "This function will take a model which is returned from the network request and set the internal joke property",
            "itemtype": "method",
            "name": "setJoke",
            "params": [
                {
                    "name": "joke",
                    "description": "The joke model that was returned from the network request to Group Control",
                    "type": "DS.Model"
                }
            ],
            "class": "JokesService",
            "module": "Services"
        },
        {
            "file": "addon\\services\\jokes.js",
            "line": 37,
            "description": "This function returns the current internal joke model, which has been previously set.",
            "itemtype": "method",
            "name": "getJoke",
            "return": {
                "description": "The model of the joke which is currently being displayed on the login screen.",
                "type": "DS.Model"
            },
            "class": "JokesService",
            "module": "Services"
        },
        {
            "file": "addon\\utils\\match.js",
            "line": 34,
            "description": "See description above",
            "access": "public",
            "tagname": "",
            "itemtype": "method",
            "name": "match",
            "params": [
                {
                    "name": "needle",
                    "description": "flat array of available roles",
                    "type": "Array"
                },
                {
                    "name": "haystack",
                    "description": "array of role rules to check",
                    "type": "Array|String"
                }
            ],
            "class": "MatchUtil",
            "module": "Utils"
        },
        {
            "file": "app\\session-stores\\application.js",
            "line": 12,
            "description": "We override this method in order to log in the user regardless of whether or not\nthe frontend thinks they are. As long as they are logged in on the backend,\nthis will force a user login",
            "class": "",
            "module": "Miscellaneous"
        }
    ],
    "warnings": [
        {
            "message": "replacing incorrect tag: prop with property",
            "line": " addon\\adapters\\fw-app.js:19"
        },
        {
            "message": "replacing incorrect tag: prop with property",
            "line": " addon\\adapters\\fw-optional-app.js:28"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\modals\\re-login.js:55"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\modals\\re-login.js:90"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\modals\\re-login.js:116"
        },
        {
            "message": "Missing item type\nAll this stuff about params is deprecated and just there for backwards compatibility. Don't remove,\nbut you really shouldn't be using the params attribute in any other app.",
            "line": " addon\\components\\fw-app-link.js:129"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:105"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:121"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:130"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:136"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:141"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:148"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:156"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:162"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:170"
        },
        {
            "message": "Missing item type",
            "line": " addon\\components\\fw-header.js:176"
        },
        {
            "message": "Missing item type\nFetches the meta for an app",
            "line": " addon\\services\\app-meta.js:43"
        },
        {
            "message": "Missing item type\nFetches the metadata for a list of apps",
            "line": " addon\\services\\app-meta.js:53"
        },
        {
            "message": "Missing item type\nInternal function to store an array of apps to the cache",
            "line": " addon\\services\\app-meta.js:62"
        },
        {
            "message": "Missing item type\nInternal function to request an app meta. Prevents making multiple requests for the same piece of data",
            "line": " addon\\services\\app-meta.js:86"
        },
        {
            "message": "Missing item type\nFetches the meta from the server for the specified app",
            "line": " addon\\services\\app-meta.js:111"
        },
        {
            "message": "Missing item type\nFetches the meta from the server for the specified app",
            "line": " addon\\services\\app-meta.js:131"
        },
        {
            "message": "Missing item type\nChecks if the user's roles match the provided list of roles.\nUses the [match](../classes/MatchUtil.html) utility to match users\ncurrent roles. Note the use of arrays to match with AND/OR\n(a single array is OR, a double array is AND).",
            "line": " addon\\services\\current-user.js:230"
        },
        {
            "message": "Missing item type\nWe override this method in order to log in the user regardless of whether or not\nthe frontend thinks they are. As long as they are logged in on the backend,\nthis will force a user login",
            "line": " app\\session-stores\\application.js:12"
        }
    ]
}