Full Code of born2net/studio-lite for AI

master 60ec84ad4c25 cached
337 files
4.8 MB
1.3M tokens
3133 symbols
1 requests
Download .txt
Showing preview only (5,112K chars total). Download the full file or copy to clipboard to get everything.
Repository: born2net/studio-lite
Branch: master
Commit: 60ec84ad4c25
Files: 337
Total size: 4.8 MB

Directory structure:
gitextract_0m1po494/

├── .angular-cli.json
├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── db-design.psd
├── dev/
│   └── notes.txt
├── e2e/
│   ├── app.e2e-spec.ts
│   ├── app.po.ts
│   └── tsconfig.json
├── examples/
│   ├── adStatsSample.xml
│   ├── apps_table.txt
│   ├── calendar_google.xml
│   ├── collection.xml
│   ├── collection_scene.xml
│   ├── digg.xml
│   ├── googlesheets.xml
│   ├── instagram_feed.xml
│   ├── jsonItem.xml
│   ├── jsonPlayer.xml
│   ├── json_as3_maps.xml
│   ├── json_scenes.xml
│   ├── jsonsheets.xml
│   ├── location.xml
│   ├── player_weather_scene.xml
│   ├── reseller_sample.xml
│   ├── sceneSample.xml
│   ├── sceneSampleLayout.xml
│   ├── twitterv3.xml
│   └── worldweather.xml
├── notes.txt
├── package.json
├── src/
│   ├── Lib.ts
│   ├── app/
│   │   ├── app-component.css
│   │   ├── app-component.html
│   │   ├── app-component.ts
│   │   ├── app-module.ts
│   │   ├── appwrap.ts
│   │   ├── blocks/
│   │   │   ├── block-fabric-image.ts
│   │   │   ├── block-fabric-josn-item.ts
│   │   │   ├── block-fabric-label.ts
│   │   │   ├── block-fabric-scene.ts
│   │   │   ├── block-fabric-svg.ts
│   │   │   ├── block-fabric.ts
│   │   │   ├── block-prop-calendar.ts
│   │   │   ├── block-prop-clock.ts
│   │   │   ├── block-prop-collection.ts
│   │   │   ├── block-prop-common.ts
│   │   │   ├── block-prop-container.ts
│   │   │   ├── block-prop-fasterq.ts
│   │   │   ├── block-prop-html.ts
│   │   │   ├── block-prop-image.ts
│   │   │   ├── block-prop-instagram.ts
│   │   │   ├── block-prop-json-item.ts
│   │   │   ├── block-prop-json-player.ts
│   │   │   ├── block-prop-label.ts
│   │   │   ├── block-prop-location.ts
│   │   │   ├── block-prop-mrss.ts
│   │   │   ├── block-prop-position.ts
│   │   │   ├── block-prop-qr.ts
│   │   │   ├── block-prop-rss.ts
│   │   │   ├── block-prop-scene.ts
│   │   │   ├── block-prop-sheets.ts
│   │   │   ├── block-prop-twitter.ts
│   │   │   ├── block-prop-video.ts
│   │   │   ├── block-prop-weather.ts
│   │   │   ├── block-prop-youtube.ts
│   │   │   ├── block-prop.digg.ts
│   │   │   ├── block-service.ts
│   │   │   └── json-event-grid.ts
│   │   ├── campaigns/
│   │   │   ├── add-content.ts
│   │   │   ├── campaign-channels.ts
│   │   │   ├── campaign-duration.ts
│   │   │   ├── campaign-editor-props.ts
│   │   │   ├── campaign-editor.ts
│   │   │   ├── campaign-editors.html
│   │   │   ├── campaign-layout.ts
│   │   │   ├── campaign-list.ts
│   │   │   ├── campaign-manager.html
│   │   │   ├── campaign-manager.ts
│   │   │   ├── campaign-name.ts
│   │   │   ├── campaign-orientation.ts
│   │   │   ├── campaign-props-manager.ts
│   │   │   ├── campaign-props.ts
│   │   │   ├── campaign-resolution.ts
│   │   │   ├── campaign-sched-props.css
│   │   │   ├── campaign-sched-props.html
│   │   │   ├── campaign-sched-props.ts
│   │   │   ├── campaign-story-timeline.ts
│   │   │   ├── campaigns-navigation.ts
│   │   │   ├── campaigns.ts
│   │   │   ├── channel-block-props.ts
│   │   │   ├── channel-props.ts
│   │   │   ├── dashboard-props.ts
│   │   │   ├── index.ts
│   │   │   ├── screen-layout-editor-props.ts
│   │   │   ├── screen-layout-editor.ts
│   │   │   ├── sequencer.ts
│   │   │   ├── timeline/
│   │   │   │   ├── timeline.component.css
│   │   │   │   ├── timeline.component.html
│   │   │   │   ├── timeline.component.spec.ts
│   │   │   │   └── timeline.component.ts
│   │   │   ├── timeline-props.ts
│   │   │   └── timeline-ruler/
│   │   │       ├── timeline-ruler.component.css
│   │   │       ├── timeline-ruler.component.html
│   │   │       ├── timeline-ruler.component.spec.ts
│   │   │       └── timeline-ruler.component.ts
│   │   ├── dashboard/
│   │   │   ├── dash-panel-mini.html
│   │   │   ├── dash-panel-mini.ts
│   │   │   ├── dash-panel.html
│   │   │   ├── dash-panel.ts
│   │   │   ├── dashboard-navigation.ts
│   │   │   ├── server-avg.ts
│   │   │   └── storage-used.ts
│   │   ├── fasterq/
│   │   │   ├── fasterq-editor.html
│   │   │   ├── fasterq-editor.ts
│   │   │   ├── fasterq-line-props.ts
│   │   │   ├── fasterq-manager.ts
│   │   │   ├── fasterq-navigation.ts
│   │   │   ├── fasterq-terminal.ts
│   │   │   ├── fasterq.ts
│   │   │   └── index.ts
│   │   ├── help/
│   │   │   ├── help-navigation.ts
│   │   │   └── index.ts
│   │   ├── index.ts
│   │   ├── install/
│   │   │   ├── index.ts
│   │   │   └── install-navigation.ts
│   │   ├── live-preview/
│   │   │   └── live-preview.ts
│   │   ├── locale-selector/
│   │   │   ├── local-selector.css
│   │   │   └── local-selector.ts
│   │   ├── location/
│   │   │   ├── location-map.html
│   │   │   └── location-map.ts
│   │   ├── resources/
│   │   │   ├── index.ts
│   │   │   ├── orders.ts
│   │   │   ├── resource-props-manager.ts
│   │   │   ├── resources-list.ts
│   │   │   ├── resources-navigation.ts
│   │   │   └── resources.ts
│   │   ├── route-animation.ts
│   │   ├── scenes/
│   │   │   ├── index.ts
│   │   │   ├── scene-creator.css
│   │   │   ├── scene-creator.ts
│   │   │   ├── scene-editor.ts
│   │   │   ├── scene-list.ts
│   │   │   ├── scene-manager.ts
│   │   │   ├── scene-props-manager.ts
│   │   │   ├── scene-toolbar.ts
│   │   │   ├── scenes-navigation.ts
│   │   │   └── scenes.ts
│   │   ├── settings/
│   │   │   ├── index.ts
│   │   │   ├── settings-navigation.ts
│   │   │   └── twofactor.ts
│   │   ├── stations/
│   │   │   ├── index.ts
│   │   │   ├── stations-list.ts
│   │   │   ├── stations-navigation.ts
│   │   │   ├── stations-props-manager.html
│   │   │   ├── stations-props-manager.ts
│   │   │   └── stations.ts
│   │   └── studiopro/
│   │       ├── index.ts
│   │       ├── pro-upgrade.ts
│   │       ├── pro-upgrades.html
│   │       └── studiopro-navigation.ts
│   ├── app-routes.ts
│   ├── assets/
│   │   └── geojson.json
│   ├── comps/
│   │   ├── blurforwarder/
│   │   │   └── BlurForwarder.ts
│   │   ├── connect-form/
│   │   │   └── connect-form.ts
│   │   ├── contact-us/
│   │   │   └── contact-us.ts
│   │   ├── disable-control/
│   │   │   └── disable-control.ts
│   │   ├── draggable-list/
│   │   │   └── draggable-list.ts
│   │   ├── duration-input/
│   │   │   ├── duration-input.component.css
│   │   │   ├── duration-input.component.html
│   │   │   ├── duration-input.component.spec.ts
│   │   │   └── duration-input.component.ts
│   │   ├── entry/
│   │   │   ├── AutoLogin.ts
│   │   │   └── LoginPanel.ts
│   │   ├── font-selector/
│   │   │   └── font-selector.ts
│   │   ├── hour-counter/
│   │   │   └── hour-counter.ts
│   │   ├── imgloader/
│   │   │   └── ImgLoader.ts
│   │   ├── infobox/
│   │   │   └── Infobox.ts
│   │   ├── lazy-image/
│   │   │   └── lazy-image.ts
│   │   ├── limited-access/
│   │   │   └── limited-access.ts
│   │   ├── loading/
│   │   │   └── loading.ts
│   │   ├── logo/
│   │   │   ├── Logo.ts
│   │   │   └── reseller-logo.ts
│   │   ├── logout/
│   │   │   └── Logout.ts
│   │   ├── match-body-height/
│   │   │   └── match-body-height.ts
│   │   ├── media-player/
│   │   │   └── media-player.ts
│   │   ├── ng-menu/
│   │   │   ├── ng-menu-item.ts
│   │   │   └── ng-menu.ts
│   │   ├── panel-split/
│   │   │   ├── panel-split-container.ts
│   │   │   ├── panel-split-main.ts
│   │   │   └── panel-split-side.ts
│   │   ├── screen-template/
│   │   │   └── screen-template.ts
│   │   ├── simple-grid-module/
│   │   │   ├── SimpleGrid.css
│   │   │   ├── SimpleGrid.ts
│   │   │   ├── SimpleGridData.ts
│   │   │   ├── SimpleGridDataChecks.ts
│   │   │   ├── SimpleGridDataCurrency.ts
│   │   │   ├── SimpleGridDataDropdown.ts
│   │   │   ├── SimpleGridDataImage.ts
│   │   │   ├── SimpleGridDraggable.ts
│   │   │   ├── SimpleGridExample.txt
│   │   │   ├── SimpleGridModule.ts
│   │   │   ├── SimpleGridRecord.ts
│   │   │   ├── SimpleGridSortableHeader.ts
│   │   │   └── SimpleGridTable.ts
│   │   ├── sliderpanel/
│   │   │   ├── SliderItemContent.ts
│   │   │   ├── Slideritem.ts
│   │   │   └── Sliderpanel.ts
│   │   ├── svg-icon/
│   │   │   └── svg-icon.ts
│   │   └── tabs/
│   │       ├── tab.ts
│   │       └── tabs.ts
│   ├── create_reflection.html
│   ├── decorators/
│   │   ├── once-decorator.ts
│   │   └── timeout-decorator.ts
│   ├── environments/
│   │   ├── environment.hmr.ts
│   │   ├── environment.prod.ts
│   │   └── environment.ts
│   ├── filters/
│   │   └── filter-model-pipe.ts
│   ├── hmr.ts
│   ├── index.html
│   ├── interfaces/
│   │   ├── BlockTypeEnum.ts
│   │   ├── Consts.ts
│   │   ├── IAddContent.ts
│   │   ├── IRegisterCaller.ts
│   │   └── IScreenTemplate.ts
│   ├── libs/
│   │   ├── bootstrap-timepicker/
│   │   │   ├── CHANGELOG.md
│   │   │   ├── README.md
│   │   │   ├── bower.json
│   │   │   ├── composer.json
│   │   │   ├── css/
│   │   │   │   ├── bootstrap-timepicker.css
│   │   │   │   ├── bootstrap-timepicker.min.css
│   │   │   │   └── timepicker.less
│   │   │   ├── js/
│   │   │   │   ├── bootstrap-timepicker.js
│   │   │   │   └── bootstrap-timepicker.min.js
│   │   │   └── package.json
│   │   ├── contextmenu/
│   │   │   └── bootstrap-contextmenu.js
│   │   ├── enjoyhint/
│   │   │   └── enjoyhint.js
│   │   ├── fabric.require1-4-12.js
│   │   ├── fabric.require1-4-12.min.js
│   │   ├── fabric1-4-2.min.js
│   │   ├── flashdetect/
│   │   │   └── flashdetect.js
│   │   ├── gradient/
│   │   │   ├── colorpicker.js
│   │   │   └── jquery.gradientpicker.js
│   │   ├── jquery-ui.js
│   │   ├── jquery.base64.js
│   │   ├── jquery.knob.min.js
│   │   ├── jquery.timepicker/
│   │   │   └── jquery.timepicker.min.js
│   │   ├── minicolors/
│   │   │   ├── jquery.minicolors.css
│   │   │   └── jquery.minicolors.js
│   │   ├── qrcode/
│   │   │   └── qrcode.js
│   │   ├── rc4v1/
│   │   │   └── rc4v1.js
│   │   ├── rc4v2/
│   │   │   └── rc4v2.js
│   │   ├── ruler/
│   │   │   ├── ruler.css
│   │   │   ├── ruler.js
│   │   │   ├── rulerConstructor.js
│   │   │   ├── rulerGuideLine.js
│   │   │   └── utils.js
│   │   ├── screen-templates.json
│   │   ├── stop-watch/
│   │   │   └── stop-watch.js
│   │   └── xml2js/
│   │       └── xml2js.js
│   ├── locale/
│   │   ├── ar.xtb
│   │   ├── be.xtb
│   │   ├── bn.xtb
│   │   ├── cs.xtb
│   │   ├── da.xtb
│   │   ├── de.xtb
│   │   ├── el.xtb
│   │   ├── en.xtb
│   │   ├── eo.xtb
│   │   ├── es.xtb
│   │   ├── fr.xtb
│   │   ├── hi.xtb
│   │   ├── it.xtb
│   │   ├── iw.xtb
│   │   ├── ja.xtb
│   │   ├── ko.xtb
│   │   ├── la.xtb
│   │   ├── messages.xmb
│   │   ├── pt.xtb
│   │   ├── ru.xtb
│   │   ├── template.xtb
│   │   ├── th.xtb
│   │   ├── tl.xtb
│   │   └── zh-CN.xtb
│   ├── main.ts
│   ├── manifest.json
│   ├── models/
│   │   ├── LocationMarkModel.ts
│   │   ├── StationModel.ts
│   │   ├── StoreModel.ts
│   │   ├── StoreModelAbstract.ts
│   │   ├── UserModel.ts
│   │   ├── fasterq-analytics.ts
│   │   ├── fasterq-line-model.ts
│   │   ├── fasterq-queue-model.ts
│   │   └── live-log-model.ts
│   ├── modules/
│   │   ├── ngmslib-service.ts
│   │   └── shared.module.ts
│   ├── pipes/
│   │   ├── format-seconds-pipe.ts
│   │   └── list-to-array-pipe.ts
│   ├── polyfills.ts
│   ├── print.html
│   ├── service-worker.js
│   ├── services/
│   │   ├── AuthService.ts
│   │   ├── CommBroker.ts
│   │   ├── CreditService.ts
│   │   ├── LocalStorage.ts
│   │   ├── StoreService.ts
│   │   ├── block-factory-service.ts
│   │   ├── font-loader-service.ts
│   │   ├── global-error-handler.ts
│   │   ├── redpepper.service.ts
│   │   ├── wizard-service.ts
│   │   └── yellowpepper.service.ts
│   ├── store/
│   │   ├── actions/
│   │   │   ├── appdb.actions.ts
│   │   │   └── msdb.actions.ts
│   │   ├── application.state.ts
│   │   ├── effects/
│   │   │   ├── appdb.effects.ts
│   │   │   └── msdb.effects.ts
│   │   ├── imsdb.interfaces.ts
│   │   ├── imsdb.interfaces_auto.ts
│   │   ├── model/
│   │   │   ├── StoreModel.ts
│   │   │   └── msdb-models-extended.ts
│   │   ├── reducers/
│   │   │   ├── appdb.reducer.ts
│   │   │   └── msdb.reducer.ts
│   │   ├── signage_sdk.js
│   │   └── store.data.ts
│   ├── styles/
│   │   ├── material-design/
│   │   │   └── css/
│   │   │       ├── bootstrap-material-design.css
│   │   │       └── ripples.css
│   │   ├── style.css
│   │   └── style_dark.css
│   ├── tsconfig.json
│   ├── typings.d.ts
│   └── validators/
│       ├── NameTakenValidator.ts
│       └── StartCapValidator.ts
├── tslint.json
└── typings.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .angular-cli.json
================================================
{
  "project": {
    "version": "1.0.0-beta.32.3",
    "name": "StudioWeb"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "favicon.ico",
        "manifest.json",
        "service-worker.js"
      ],
      "index": "index.html",
      "main": "main.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.json",
      "prefix": "app",
      "mobile": false,
      "styles": [
        "../node_modules/font-awesome/css/font-awesome.css",
        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
        "../node_modules/ng2-toastr/ng2-toastr.css",
        "../node_modules/primeng/resources/themes/bootstrap/theme.css",
        "../node_modules/primeng/resources/primeng.min.css",
        "./libs/bootstrap-timepicker/css/bootstrap-timepicker.css",
        "./libs/minicolors/jquery.minicolors.css",
        "./libs/ruler/ruler.css",
        "./styles/style.css",
        "./styles/jquery.timepicker.min.css"
      ],
      "scripts": [
        "../node_modules/jquery/dist/jquery.min.js",
        "./libs/jquery.base64.js",
        "./libs/jquery-ui.js",
        "./libs/jquery.knob.min.js",
        "./libs/flashdetect/flashdetect.js",
        "./libs/rc4v1/rc4v1.js",
        "./libs/rc4v2/rc4v2.js",
        "./libs/qrcode/qrcode.js",
        "./libs/bootstrap-timepicker/js/bootstrap-timepicker.min.js",
        "./libs/jquery.timepicker/jquery.timepicker.min.js",
        "./libs/contextmenu/bootstrap-contextmenu.js",
        "./libs/stop-watch/stop-watch.js",
        "./store/signage_sdk.js",
        "../node_modules/bootstrap/dist/js/bootstrap.js",
        "../node_modules/bootbox/bootbox.js",
        "../node_modules/platform/platform.js",
        "./libs/fabric.require1-4-12.js",
        "./libs/minicolors/jquery.minicolors.js",
        "./libs/gradient/colorpicker.js",
        "./libs/xml2js/xml2js.js",
        "./libs/gradient/jquery.gradientpicker.js",
        "./libs/enjoyhint/enjoyhint.js",
        "../node_modules/xdate/src/xdate.js",
        "./libs/ruler/ruler.js"
      ],
      "environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "hmr": "environments/environment.hmr.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
  "addons": [
    "../node_modules/font-awesome/fonts/*.+(otf|eot|svg|ttf|woff|woff2)",
    "./styles/fonts//montserrat.woff2"
  ],
  "packages": [],
  "e2e": {
    "protractor": {
      "config": "./protractor.conf.js"
    }
  },
  "test": {
    "karma": {
      "config": "./karma.conf.js"
    }
  },
  "defaults": {
    "styleExt": "css",
    "prefixInterfaces": false,
    "inline": {
      "style": false,
      "template": false
    },
    "spec": {
      "class": false,
      "component": true,
      "directive": true,
      "module": false,
      "pipe": true,
      "service": true
    }
  }
}


================================================
FILE: .editorconfig
================================================
# Editor configuration, see http://editorconfig.org
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
max_line_length = off
trim_trailing_whitespace = false


================================================
FILE: .gitignore
================================================
# See http://help.github.com/ignore-files/ for more about ignoring files.



# compiled output
/dist/*.js
/dist/**
/dist
/tmp

# dependencies
/node_modules
/bower_components

# IDEs and editors
/.idea
/.idea/workspace.xml
/.vscode
.project
.classpath
.c9/
*.launch
.settings/

# misc
/.sass-cache
/documentation
/connect.lock
/coverage/*
/libpeerconnection.log
npm-debug.log
testem.log
/typings
*.log.*

#include
!index.js
!/typings


# js/map
*.js
src/**/*.js
*prod.js
src/**/*.map
#System Files
.DS_Store
Thumbs.db
workspace.xml

!signageSDK.js
!service-worker.js
!src/store/signage_sdk.js
!src/libs/*
!src/libs/**/*
!src/locale/**/*
#src/store/application.state.js
#src/store/imsdb.interfaces.js
#src/store/imsdb.interfaces_auto.js
#src/store/store.data.js
#*.xlf
#*.xmb
!temp/*.js
!temp/*.txt


================================================
FILE: LICENSE
================================================
======================================================================

                        MediaSignage Add-on license
                      to GNU GENERAL PUBLIC LICENSE V3
                                Jan 7, 2014

MediaSignage Inc SignagePlayer open source under GPL V3 modified license.
GPL V3 add-on License for MediaSignage Copyright (c) SignagePlayer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"),
to deal in the Software with some restriction as described in exhibit (A).

The SignagePlayer open source software is available without any warranty,
documentation and support. The primary purpose of this software is:

A) Educational: study of this product design and architecture
B) Security: transparency into the inner workings of the mediaCLOUD and related apps
C) All usage permitted only within the operation of the DigitalSignage.com mediaCLOUD
   and only under MediaSignage Inc related products and services.
D) Customization and modification which are governed under items A-C

Exhibit A:
==========
Usage, modification, compilation and any other benefit of the SignagePlayer
source code must come in a form of connection into the MediaSignage public mediaCLOUD
service or to a private mediaSERVER purchased from MediaSignage Inc.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE


                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.



================================================
FILE: README.md
================================================
StudioLite, Digital Signage for the rest of us
---------------------------------------

<!-- [![NPM](https://nodei.co/npm/studiolite.png)](https://nodei.co/npm/studiolite/) -->

<p align="center">  
  <img src="http://www.digitalsignage.com/files/techlogos.png">
</p>


------------------------------------------------------------------------

StudioLite is an open source, 100% FREE, Digital Signage platform that was designed with ease of use in mind.
With StudioLite anyone can have a Digital Signage solution that is entirely customizable. 
Take the source code, modify it, brand it and build a product that's right for you and your customers.
Best of all, you will take full advantage of the world's most popular Digital Signage cloud so you don't have to worry about backend programming or even setup a server, it's all done for you using the mediaCLOUD.

 - Based on the poplar SignageStudio Pro ( [MediaSignage]: http://www.DigitalSignage.com )
 - Connected to a private mediaSERVER or the public free mediaCLOUD
 - 100% open source based on GNU V3 license
 - Contributors are welcome, fork, modify and send pull requests
 - Powered by Google's Angular Framework + TypeScript +  ngrx 

Links:
------------------------------------------------------------------------
- StudioLite documentation: http://www.digitalsignage.com/lite_docs/
- Cloud web app: http://go.digitalsignage.com
- Home: http://lite.digitalsignage.com
- Docs: http://www.digitalsignage.com/msdocs/
- Support: http://script.digitalsignage.com/forum/index.php/board,9.0.html
- Developer video tutorial: http://goo.gl/nkx7wr
- StudioLite intro video: http://lite.digitalsignage.com/video1.html
- StudioLite advanced  video: http://lite.digitalsignage.com/video2.html
- Developers page: http://www.digitalsignage.com/_html/open_source_digital_signage.html
- Angular: https://angular.io/

Technical data:
------------------------------------------------------------------------
- Build on top the latest version Google's Angular framework with a clean MV* design
- Developed using the latest version of TypeScript and ngrx store
- Powered by Bootstrap using responsive design for phones, tablets and desktops
- Lazy loaded modules for best user load experience
- Driven using Soap API and includes Helper SDK
- Uses a local msdb (database) through SDK for offline work
- Support Angular AOT mode
- Support available through the MediaSignage support forum

Installation:
------------------------------------------------------------------------

StudioLite can be downloaded directly from GitHub
With git you will be able to easily update to the latest version of StudioLite as well as take advantage Angular CLI which is included in the bundle

currently the application should run under:
- typescript 2.4
- node 6.x 

to install and host:

``` npm install -g npm``` (this will ensure npm 5.4.2 >)


```
git clone https://github.com/born2net/studio-lite.git
cd studio-lite
npm install -g @angular/cli@latest
npm install
open browser to: http://localhost:4208/
```

Customization:
------------------------------------------------------------------------
Keep in mind the SignageStudio lite as well as its related SDK Pepper are often released with new updates, so you will lose any changes you make to your code if you overwrite it with our release builds.

To overcome this you can follow these guidelines:

1.	Always be sure to override files and not modify the original source file. This is true for both CSS and JavaScript code. Simply load your version of the CSS after ours to apply your latest changes. HTML files can be diffed (see below).
2.	Our code base is modulated and uses 100% object oriented design pattern. This allows you to sub class (aka inherit) from our classes and make your applied changes (use _.extend to mixin).
3.	You can also use pre-processor scripts which replace code segments automatically using directives.
4.	And finally, even while following steps 1-3 you may find that your code is broken due to design changes in the original repository. That’s when GitHub comes to the rescue. When your fork the source repository, you can always merge the tree onto your forked project. Use source control diff tool to merge the changes into your code and resolve any conflicts.

With the above steps you can ensure that your source code is fully customizable while still keeping it synchronized with our ongoing development efforts.
And if you built something wonderful, just send us a pull request so we check it out. 
If we like what you did we we will merge it into our code base, so you will always receive it when you fetch our changes.

If you are not a developer you can hire professional, inexpensive help from sites like oDesk and Freelancer.
Since Angular is an opinionated framework, any developer who is verse in Angular, will be able to quickly customize a solution for your own business logic. 

Videos:
------------------------------------------------------------------------

[![Development with StudioLite](http://img.youtube.com/vi/Znti-QVDjvg/0.jpg)](https://www.youtube.com/watch?v=Znti-QVDjvg&feature=youtu.be "Advanced angular tips and tricks")


previous version:
------------------------------------------------------------------------
If you are looking for the previous version of StudioLite which was developed using BackboneJS, go to the branch:
 - https://github.com/born2net/studio-lite/tree/studiolite-backbone

License:
------------------------------------------------------------------------
The SignageStudio Web Lite and Pepper SDK are available under GPL
 - V3 https://github.com/born2net/studio-lite/blob/master/LICENSE





================================================
FILE: dev/notes.txt
================================================
////////////// NOTES ////////////////



need to find a way to remove core-js from videoangular definitions
sed -i.bak '/core-js/d' './node_modules/videogular2/src/core/vg-media/i-playable.d.ts ; sed -i.bak '/core-js/d' './node_modules/videogular2/src/core/services/vg-api.d.ts'


reload video:
https://github.com/videogular/videogular2/issues/442


npm uninstall -g angular-cli @angular/cli
npm cache clean
npm install -g @angular/cli@latest
OR

npm install -g @angular/cli@1.2.6
npm install -g @angular/cli@8.0.2

Local project package:

rm -rf node_modules dist # use rmdir on Windows
npm install --save-dev @angular/cli@latest <<<<<<<<<<<<<<<<
npm install


ng init --ng4

==================================================================================================================


------------------------------------
>>> switch to StudioLite global env:
------------------------------------
nvm use 6.16.0 ; node --version;
rm -r -f /cygdrive/c/Program\ Files/nodejs/node_modules/typescript;
cp -r -f /cygdrive/c/Program\ Files/nodejs/node_modules/typescript-2.4.2/ /cygdrive/c/Program\ Files/nodejs/node_modules/typescript;
npm remove  -g @angular/cli ;  npm install -g @angular/cli@1.2.4;


------------------------------------
>>> switch to latest global env:
------------------------------------
nvm use 10.15.0 ; node --version;
rm -r -f /cygdrive/c/Program\ Files/nodejs/node_modules/typescript;
cp -r -f /cygdrive/c/Program\ Files/nodejs/node_modules/typescript-3.5.1/ /cygdrive/c/Program\ Files/nodejs/node_modules/typescript;
npm remove  -g @angular/cli ; npm install -g @angular/cli@8.0.2;


==================================================================================================================


debug sessions:

reflection:
    http://127.0.0.1:8080/src/create_reflection.html

local:
    http://localhost:4208/

campaigns:
    http://localhost:4208/campaigns

FasterqRemoteStatus (base64):
    http://localhost:4208/index.html?mode=remoteStatus&param=eyJjYWxsX3R5cGUiOiJFTUFJTCIsInNlcnZpY2VfaWQiOjE5LCJ2ZXJpZmljYXRpb24iOjY5NSwibGluZV9pZCI6IjIxMTAiLCJsaW5lX25hbWUiOiIgbmV3IGxpbmUgMSIsImJ1c2luZXNzX2lkIjoiMzU4NjEzIiwic21zIjoiIiwiZW1haWwiOiJib3JuMm5ldEBnbWFpbC5jb20iLCJkYXRlIjoiNC83LzIwMTcifQ==

FasterqTerminal (rc4):
    http://localhost:4208/index.html?data=5b6bcb27d4547657cfe4e021e1c6761fe8b4a33c3d62983ee8f6b0ccbded7b8a6578e47862f0aca0ca7ac070a1a27121fe17f5c496483ee08cf0a061440f277a3e49dcaaf3bb198c71033ed398d60166e3b82c9153f4c3a6d346f7d11b3016

auto-login local demo_lite
	http://localhost:4208/index.html?param=dXNlcj1kZW1vX2xpdGVAbXMuY29tLHBhc3M9cGFzc3dvcmQ=

auto-login remote demo_lite
	https://secure.digitalsignage.com/studioweb/index.html?param=dXNlcj1kZW1vX2xpdGVAbXMuY29tLHBhc3M9cGFzc3dvcmQ=

auto-login local lite22
	http://localhost:4208/index.html?param=dXNlcj1saXRlMjJAbXMuY29tLHBhc3M9MTIzMTIz

auto-login local lite90
	http://localhost:4208/index.html?param=dXNlcj1saXRlOTBAbXMuY29tLHBhc3M9MTIzMTIz

auto-login local lite28
	http://localhost:4208/index.html?param=dXNlcj1saXRlMjhAbXMuY29tLHBhc3M9MTIzMTIz

==================================================================================================================

revert webpack ng tools: npm install --save @ngtools/webpack@1.2.4


==================================================================================================================


clear cache: npm clear cache

npm install @angular/cli@latest -g
npm install -g @angular/cli


==================================================================================================================

reflection Usage:

to run this script and generate interface sdk / msdb:

run live-server inside /cygdrive/c/msweb/studiolite

open browser to:

http://127.0.0.1:8080/src/create_reflection.html


==================================================================================================================

Switching fabric versions:

add/remove import "fabric"; from app-modules.ts
add/remove form angular-cli.json:
"../node_modules/fabric/dist/fabric.js"
or 
angular-cli.json: "./libs/fabric.require1-4-12.js",
or
to load remotely:
<script src="https://secure.digitalsignage.com/studioweb/fabric1-4-2.min.js"></script>
<script src="https://secure.digitalsignage.com/studioweb/fabric.require1-4-12.min.js"></script>

==================================================================================================================


<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/shim.min.js"></script>-->
<!--<script>-->
    <!--(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){-->
            <!--(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),-->
        <!--m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)-->
    <!--})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');-->

    <!--ga('create', 'UA-36671151-9', 'auto');-->
    <!--ga('send', 'pageview');-->
<!--</script>-->

==================================================================================================================

for translation:

1. release_aot > to generate all ./dist files in english
2. x_translate > to create an english version of ./src/local/messages.xmb
3. develop_new_script > to generate ./src/local/hebrew.xtb from messages.xmb (use server API)
    https://secure.digitalsignage.com/getLocal/he/xxx/go%20find%20me%20and%20bring%20me%20here
4. release_aot_hebrew > to create new StudioLite in hebrew and upload to specific local server dir

================================================
FILE: e2e/app.e2e-spec.ts
================================================
import { NgKitchenSinkPage } from './app.po';

describe('ng-kitchen-sink App', function() {
  let page: NgKitchenSinkPage;

  beforeEach(() => {
    page = new NgKitchenSinkPage();
  });

  it('should display message saying app works', () => {
    page.navigateTo();
    expect(page.getParagraphText()).toEqual('app works!');
  });
});


================================================
FILE: e2e/app.po.ts
================================================
import { browser, element, by } from 'protractor';

export class NgKitchenSinkPage {
  navigateTo() {
    return browser.get('/');
  }

  getParagraphText() {
    return element(by.css('app-root h1')).getText();
  }
}


================================================
FILE: e2e/tsconfig.json
================================================
{
  "compileOnSave": false,
  "compilerOptions": {
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "../dist/out-tsc-e2e",
    "sourceMap": true,
    "target": "es5",
    "typeRoots": [
      "../node_modules/@types"
    ]
  }
}


================================================
FILE: examples/adStatsSample.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Report>
   <Fields>
      <ExtStat>stationId,packageId,packageContentId,packageName,contentName,day,hour,counts,duration,mph,rate</ExtStat>
      <LocalStat>stationId,localContentId,day,hour,counts,duration,mph,rate</LocalStat>
   </Fields>
   <Data>
      <Domain name="signage.me">
         <Business businessId="367626">
            <LocalStat>14,136,3,8,9,1214.9,0.221447,0</LocalStat>
            <LocalStat>14,136,3,9,14,1889.8,0.442799,0</LocalStat>
            <LocalStat>14,136,3,10,14,1856.2,0.383568,0</LocalStat>
            <LocalStat>14,136,3,11,14,1890.1,0.456984,0</LocalStat>
            <LocalStat>14,136,3,12,14,1848.5,0.41431,0</LocalStat>
            <LocalStat>14,136,3,13,13,1754.9,0.39168,0</LocalStat>
            <LocalStat>14,136,3,14,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,3,15,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,3,16,14,1890.1,0.456983,0</LocalStat>
            <LocalStat>14,136,3,17,14,1890,0.45696,0</LocalStat>
            <LocalStat>14,136,3,18,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,3,19,14,1890.1,0.456984,0</LocalStat>
            <LocalStat>14,136,3,20,14,1890,0.45696,0</LocalStat>
            <LocalStat>14,136,3,21,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,3,22,15,2025.3,0.489672,0</LocalStat>
            <LocalStat>14,136,3,23,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,4,0,14,1890.3,0.457031,0</LocalStat>
            <LocalStat>14,136,4,1,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,4,2,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,4,3,14,1890.2,0.457007,0</LocalStat>
            <LocalStat>14,136,4,4,14,1890.1,0.456984,0</LocalStat>
            <LocalStat>14,136,4,5,14,1889.9,0.42432,0</LocalStat>
            <LocalStat>14,136,4,6,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,4,7,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,4,8,14,1890.2,0.457007,0</LocalStat>
            <LocalStat>14,136,4,9,14,1890,0.45696,0</LocalStat>
            <LocalStat>14,136,4,10,15,2024.9,0.489575,0</LocalStat>
            <LocalStat>14,136,4,11,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,4,12,14,1889.7,0.42427,0</LocalStat>
            <LocalStat>14,136,4,13,14,1889.6,0.45686,0</LocalStat>
            <LocalStat>14,136,4,14,14,1890,0.456959,0</LocalStat>
            <LocalStat>14,136,4,15,14,1889.7,0.456885,0</LocalStat>
            <LocalStat>14,136,4,16,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,4,17,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,4,18,14,1890,0.45696,0</LocalStat>
            <LocalStat>14,136,4,19,15,2024.9,0.489575,0</LocalStat>
            <LocalStat>14,136,4,20,14,1889.9,0.456934,0</LocalStat>
            <LocalStat>14,136,4,21,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,4,22,14,1889.8,0.45691,0</LocalStat>
            <LocalStat>14,136,4,23,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,5,0,14,1889.9,0.456935,0</LocalStat>
            <LocalStat>14,136,5,1,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,5,2,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,5,3,14,1890,0.456959,0</LocalStat>
            <LocalStat>14,136,5,4,14,1889.7,0.456885,0</LocalStat>
            <LocalStat>14,136,5,5,14,1890.1,0.424368,0</LocalStat>
            <LocalStat>14,136,5,6,14,1890,0.45696,0</LocalStat>
            <LocalStat>14,136,5,7,14,1890,0.45696,0</LocalStat>
            <LocalStat>14,136,5,8,13,1716.2,0.349707,0</LocalStat>
            <LocalStat>14,136,5,9,14,1890.2,0.457008,0</LocalStat>
            <LocalStat>14,136,5,10,9,1215.3,0.293832,0</LocalStat>
            <LocalStat>14,136,7,12,2,27.4,0,0</LocalStat>
            <LocalStat>14,136,7,13,13,1756.2,0.391992,0</LocalStat>
            <LocalStat>14,136,7,14,14,1891.8,0.457392,0</LocalStat>
            <LocalStat>14,136,7,15,15,2026.4,0.489936,0</LocalStat>
            <LocalStat>14,136,7,16,14,1892,0.45744,0</LocalStat>
            <LocalStat>14,136,7,17,14,1892.3,0.457512,0</LocalStat>
            <LocalStat>14,136,7,18,14,1891.5,0.45732,0</LocalStat>
            <LocalStat>14,136,7,19,14,1891.2,0.457248,0</LocalStat>
            <LocalStat>14,136,7,20,14,1891.2,0.457248,0</LocalStat>
            <LocalStat>14,136,7,21,14,1891.5,0.45732,0</LocalStat>
            <LocalStat>14,136,7,22,14,1891.4,0.457296,0</LocalStat>
            <LocalStat>14,136,7,23,14,1891.5,0.45732,0</LocalStat>
            <LocalStat>14,136,8,0,14,1891.7,0.457368,0</LocalStat>
            <LocalStat>14,136,8,1,14,1891.8,0.457391,0</LocalStat>
            <LocalStat>14,136,8,2,14,1891.1,0.457224,0</LocalStat>
            <LocalStat>14,136,8,3,15,2026.7,0.490008,0</LocalStat>
            <LocalStat>14,136,8,4,13,1756.8,0.424752,0</LocalStat>
            <LocalStat>14,136,8,5,14,1889.9,0.424319,0</LocalStat>
            <LocalStat>14,136,8,6,14,1889.7,0.456884,0</LocalStat>
            <LocalStat>14,136,8,7,14,1890.1,0.456984,0</LocalStat>
            <LocalStat>14,136,8,8,13,1755,0.391703,0</LocalStat>
            <LocalStat>14,136,8,9,14,1889.8,0.45691,0</LocalStat>
            <LocalStat>14,136,8,10,15,2025,0.489599,0</LocalStat>
            <LocalStat>14,136,8,11,4,539.9,0.130535,0</LocalStat>
            <LocalStat>14,136,8,12,9,1047.5,0.195815,0</LocalStat>
            <LocalStat>14,136,8,13,2,515.1,0.124539,0</LocalStat>
            <LocalStat>14,137,3,8,8,481,0.112702,0</LocalStat>
            <LocalStat>14,137,3,9,15,901.5,0.21123,0</LocalStat>
            <LocalStat>14,137,3,10,12,699.9,0.165785,0</LocalStat>
            <LocalStat>14,137,3,11,14,841.9,0.203545,0</LocalStat>
            <LocalStat>14,137,3,12,13,781.4,0.188915,0</LocalStat>
            <LocalStat>14,137,3,13,13,781.4,0.188916,0</LocalStat>
            <LocalStat>14,137,3,14,14,841.5,0.203446,0</LocalStat>
            <LocalStat>14,137,3,15,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,137,3,16,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,3,17,15,901.8,0.218025,0</LocalStat>
            <LocalStat>14,137,3,18,14,841.3,0.203397,0</LocalStat>
            <LocalStat>14,137,3,19,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,3,20,14,841.6,0.203471,0</LocalStat>
            <LocalStat>14,137,3,21,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,3,22,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,3,23,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,137,4,0,14,841.3,0.203397,0</LocalStat>
            <LocalStat>14,137,4,1,14,841.5,0.203447,0</LocalStat>
            <LocalStat>14,137,4,2,14,841.6,0.20347,0</LocalStat>
            <LocalStat>14,137,4,3,15,901.6,0.217976,0</LocalStat>
            <LocalStat>14,137,4,4,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,137,4,5,14,841.7,0.203495,0</LocalStat>
            <LocalStat>14,137,4,6,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,4,7,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,4,8,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,4,9,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,4,10,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,4,11,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,4,12,14,813.4,0.196651,0</LocalStat>
            <LocalStat>14,137,4,13,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,4,14,15,901.2,0.217878,0</LocalStat>
            <LocalStat>14,137,4,15,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,4,16,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,4,17,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,4,18,14,841.2,0.203372,0</LocalStat>
            <LocalStat>14,137,4,19,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,4,20,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,4,21,14,841.2,0.203372,0</LocalStat>
            <LocalStat>14,137,4,22,14,840.9,0.2033,0</LocalStat>
            <LocalStat>14,137,4,23,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,5,0,15,901.3,0.217902,0</LocalStat>
            <LocalStat>14,137,5,1,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,5,2,14,841.2,0.203372,0</LocalStat>
            <LocalStat>14,137,5,3,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,137,5,4,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,5,5,13,781.3,0.18889,0</LocalStat>
            <LocalStat>14,137,5,6,15,901.4,0.217926,0</LocalStat>
            <LocalStat>14,137,5,7,14,841.2,0.203372,0</LocalStat>
            <LocalStat>14,137,5,8,11,637.2,0.154052,0</LocalStat>
            <LocalStat>14,137,5,9,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,5,10,9,540.9,0.13077,0</LocalStat>
            <LocalStat>14,137,7,13,13,782.8,0.18926,0</LocalStat>
            <LocalStat>14,137,7,14,14,843.1,0.203841,0</LocalStat>
            <LocalStat>14,137,7,15,14,842.7,0.203742,0</LocalStat>
            <LocalStat>14,137,7,16,14,842.8,0.203765,0</LocalStat>
            <LocalStat>14,137,7,17,14,842.7,0.203741,0</LocalStat>
            <LocalStat>14,137,7,18,14,842.3,0.203643,0</LocalStat>
            <LocalStat>14,137,7,19,14,842.8,0.203765,0</LocalStat>
            <LocalStat>14,137,7,20,14,843.1,0.203839,0</LocalStat>
            <LocalStat>14,137,7,21,15,904,0.218564,0</LocalStat>
            <LocalStat>14,137,7,22,14,842.6,0.203717,0</LocalStat>
            <LocalStat>14,137,7,23,14,842.7,0.203741,0</LocalStat>
            <LocalStat>14,137,8,0,14,842.5,0.203693,0</LocalStat>
            <LocalStat>14,137,8,1,14,842.9,0.203792,0</LocalStat>
            <LocalStat>14,137,8,2,14,842.3,0.203642,0</LocalStat>
            <LocalStat>14,137,8,3,14,842.8,0.203767,0</LocalStat>
            <LocalStat>14,137,8,4,14,842.1,0.203595,0</LocalStat>
            <LocalStat>14,137,8,5,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,8,6,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,8,7,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,137,8,8,13,781.2,0.188866,0</LocalStat>
            <LocalStat>14,137,8,9,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,8,10,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,137,8,11,5,300.5,0.07265,0</LocalStat>
            <LocalStat>14,137,8,12,6,360.6,0.08718,0</LocalStat>
            <LocalStat>14,137,8,13,1,60.1,0.01453,0</LocalStat>
            <LocalStat>14,138,3,8,7,420.7,0.098574,0</LocalStat>
            <LocalStat>14,138,3,9,14,841.3,0.197123,0</LocalStat>
            <LocalStat>14,138,3,10,12,721.4,0.170824,0</LocalStat>
            <LocalStat>14,138,3,11,14,841.6,0.20347,0</LocalStat>
            <LocalStat>14,138,3,12,13,781.5,0.18894,0</LocalStat>
            <LocalStat>14,138,3,13,13,781.3,0.18889,0</LocalStat>
            <LocalStat>14,138,3,14,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,138,3,15,14,841.6,0.20347,0</LocalStat>
            <LocalStat>14,138,3,16,14,841.7,0.203495,0</LocalStat>
            <LocalStat>14,138,3,17,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,3,18,14,841.6,0.203471,0</LocalStat>
            <LocalStat>14,138,3,19,15,901.8,0.218025,0</LocalStat>
            <LocalStat>14,138,3,20,14,841.6,0.20347,0</LocalStat>
            <LocalStat>14,138,3,21,14,841.5,0.203446,0</LocalStat>
            <LocalStat>14,138,3,22,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,3,23,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,138,4,0,14,841.6,0.20347,0</LocalStat>
            <LocalStat>14,138,4,1,14,841.3,0.203397,0</LocalStat>
            <LocalStat>14,138,4,2,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,3,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,138,4,4,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,138,4,5,13,781.4,0.188915,0</LocalStat>
            <LocalStat>14,138,4,6,14,841.2,0.203373,0</LocalStat>
            <LocalStat>14,138,4,7,14,841.5,0.203445,0</LocalStat>
            <LocalStat>14,138,4,8,15,901.6,0.217975,0</LocalStat>
            <LocalStat>14,138,4,9,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,10,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,138,4,11,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,12,13,781.2,0.188866,0</LocalStat>
            <LocalStat>14,138,4,13,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,138,4,14,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,15,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,138,4,16,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,138,4,17,15,901.7,0.218,0</LocalStat>
            <LocalStat>14,138,4,18,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,19,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,20,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,21,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,138,4,22,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,4,23,14,841.2,0.203372,0</LocalStat>
            <LocalStat>14,138,5,0,14,841.6,0.20347,0</LocalStat>
            <LocalStat>14,138,5,1,14,841.3,0.203396,0</LocalStat>
            <LocalStat>14,138,5,2,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,5,3,15,901.5,0.217952,0</LocalStat>
            <LocalStat>14,138,5,4,14,841.5,0.203445,0</LocalStat>
            <LocalStat>14,138,5,5,13,781.2,0.188866,0</LocalStat>
            <LocalStat>14,138,5,6,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,5,7,14,841.5,0.203445,0</LocalStat>
            <LocalStat>14,138,5,8,11,661.2,0.159855,0</LocalStat>
            <LocalStat>14,138,5,9,14,841.6,0.20347,0</LocalStat>
            <LocalStat>14,138,5,10,9,541,0.130795,0</LocalStat>
            <LocalStat>14,138,7,13,13,782.7,0.189236,0</LocalStat>
            <LocalStat>14,138,7,14,14,842.8,0.203766,0</LocalStat>
            <LocalStat>14,138,7,15,14,843.1,0.203838,0</LocalStat>
            <LocalStat>14,138,7,16,14,842.9,0.20379,0</LocalStat>
            <LocalStat>14,138,7,17,14,842.5,0.203693,0</LocalStat>
            <LocalStat>14,138,7,18,14,843.3,0.203888,0</LocalStat>
            <LocalStat>14,138,7,19,14,842.9,0.203791,0</LocalStat>
            <LocalStat>14,138,7,20,14,843.1,0.203841,0</LocalStat>
            <LocalStat>14,138,7,21,14,843,0.203814,0</LocalStat>
            <LocalStat>14,138,7,22,14,843.2,0.203865,0</LocalStat>
            <LocalStat>14,138,7,23,14,843,0.203815,0</LocalStat>
            <LocalStat>14,138,8,0,15,902.7,0.218248,0</LocalStat>
            <LocalStat>14,138,8,1,14,842.4,0.203669,0</LocalStat>
            <LocalStat>14,138,8,2,14,843.1,0.203837,0</LocalStat>
            <LocalStat>14,138,8,3,14,842.4,0.203667,0</LocalStat>
            <LocalStat>14,138,8,4,14,842.8,0.203766,0</LocalStat>
            <LocalStat>14,138,8,5,13,781.1,0.188842,0</LocalStat>
            <LocalStat>14,138,8,6,14,841.4,0.20342,0</LocalStat>
            <LocalStat>14,138,8,7,14,841.4,0.203421,0</LocalStat>
            <LocalStat>14,138,8,8,14,793.3,0.191791,0</LocalStat>
            <LocalStat>14,138,8,9,14,841.3,0.203397,0</LocalStat>
            <LocalStat>14,138,8,10,14,841.5,0.203445,0</LocalStat>
            <LocalStat>14,138,8,11,4,240.4,0.05812,0</LocalStat>
            <LocalStat>14,138,8,12,6,360.8,0.08723,0</LocalStat>
            <LocalStat>14,138,8,13,1,60.1,0.01453,0</LocalStat>
            <LocalStat>18,136,2,15,2,269.9,0.06324,0</LocalStat>
            <LocalStat>18,136,2,16,1,134.9,0.031608,0</LocalStat>
            <LocalStat>18,137,2,15,1,60,0.014058,0</LocalStat>
            <LocalStat>18,137,2,16,2,120.1,0.02814,0</LocalStat>
            <LocalStat>18,138,2,15,2,120.1,0.02814,0</LocalStat>
            <LocalStat>18,138,2,16,2,120,0.028116,0</LocalStat>
            <LocalStat>19,136,3,12,1,134.9,0,0</LocalStat>
            <LocalStat>19,136,3,13,14,1398.6,0.156452,0</LocalStat>
            <LocalStat>19,136,3,16,2,270.3,0.032736,0</LocalStat>
            <LocalStat>19,136,4,13,7,9960.4,2.301675,0</LocalStat>
            <LocalStat>19,137,3,12,1,66.1,0.015981,0</LocalStat>
            <LocalStat>19,137,3,13,5,304.1,0.073522,0</LocalStat>
            <LocalStat>19,137,3,16,1,60.5,0.014627,0</LocalStat>
            <LocalStat>19,137,4,13,4,244.5,0.059113,0</LocalStat>
            <LocalStat>19,138,3,12,1,93.9,0.022702,0</LocalStat>
            <LocalStat>19,138,3,13,5,303.3,0.073329,0</LocalStat>
            <LocalStat>19,138,3,16,1,61.2,0.014796,0</LocalStat>
            <LocalStat>19,138,4,13,4,185.6,0.044872,0</LocalStat>
         </Business>
      </Domain>
   </Data>
</Report>

================================================
FILE: examples/apps_table.txt
================================================
app_id	app_name	help_name	description	uninstallable	hidden	price	min_version
10005	Embeded Resource	""	Embeded Resource	False	True	0	4.12
10010	Scene	""	Scene	False	True	0	4.12
10020	External Resource	""	External Resource	False	False	0	4.12
10030	Label	""	Label	False	False	0	4.12
10040	Html	""	Html	False	False	0	4.12
10050	Rss Text	""	Rss Text	False	False	0	4.12
10060	Custom Rss	""	Custom Rss	False	False	0	4.12
10070	Media Rss/Podcast	""	Media Rss/Podcast	False	False	0	4.12
10080	Weather	""	Weather	False	False	0	4.12
10090	Stock	""	Stock	False	False	0	4.12
10100	Catalog	""	Catalog	False	False	0	4.12
10110	Capture/Camera	""	Capture/Camera	True	False	0	4.12
10120	Clock	""	Clock	True	False	0	4.12
10122	Countdown	""	Countdown	True	False	0	4.12
10130	Grid/Chart	""	Grid/Chart	True	False	0	4.12
10140	Ext Application	""	Ext Application	True	False	0	4.12
10145	Webkit	""	Webkit	True	False	0	4.33
10150	Advertising	""	Advertising	True	False	0	4.12
10160	QR Code	""	QR Code	True	False	0	4.12
10180	CollectionViewer	""	CollectionViewer	True	False	0	4.12
10185	Location based	""	Location based	True	False	0	4.33
10190	XML Player	""	XML Player	True	False	0	4.12
10195	JSON Player	""	JSON Player	True	False	0	4.33
10210	Twitter	""	Twitter	True	False	0	4.12
10220	YouTube	""	YouTube	True	False	0	4.12
10300	Form	""	Form	True	False	0	4.12
10400	Message	""	Message	True	False	0	4.12
10500	Label Queue	""	Label Queue	True	False	0	4.15
11000	Browser	""	Browser	True	False	0	4.33
12000	Digg	""	Digg	True	False	0	4.33
12010	World weather	""	Weather	True	False	0	4.33
12020	Facebook	""	Facebook	True	False	0	4.33
12030	Google calendar	""	Google calendar	True	False	0	4.33
12032	Google Sheets	""	Google Sheets	True	False	0	4.33
12040	Google plus	""	Google plus	True	False	0	4.33
12050	Picasa	""	Picasa	True	False	0	4.33
12060	Instagram	""	Instagram	True	False	0	4.33
12070	Google drive	""	Google drive	True	False	0	4.33
12080	500px	""	500px	True	False	0	4.33
12090	Pinterest	""	Pinterest	True	False	0	4.33
12100	FasterQ	""	FasterQ	True	False	0	4.33
12200	Tumblr	""	Tumblr	True	False	0	4.33
12210	Dropbox	""	Dropbox	True	False	0	4.33
12220	Flickr	""	Flickr	True	False	0	4.33
12230	Twitter	""	Twitter	True	False	0	4.33
12240	Yelp	""	Yelp	True	False	0	4.33
12250	Etsy	""	Etsy	True	False	0	4.33
12260	Mashape	""	Mashape	True	False	0	4.33

================================================
FILE: examples/calendar_google.xml
================================================
scene
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="Cal Scene" interactive="0" mimeType="Json.calendar" id="YmxvY2tpZDgy">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDgz">
               <Data>
                  <Layout rotation="0" x="58" y="103" width="100" height="100" />
                  <XmlItem fieldName="summary" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDg0">
               <Data>
                  <Layout rotation="0" x="145" y="234" width="100" height="100" />
                  <XmlItem fieldName="endDateTime_time" fieldType="date" dateFormat="MM/DD/YY">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDg1">
               <Data>
                  <Layout rotation="0" x="245" y="67" width="100" height="100" />
                  <XmlItem fieldName="startDateTime_time" fieldType="date" dateFormat="MM/DD/YY">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDg2">
               <Data>
                  <Layout rotation="0" x="19" y="259" width="100" height="100" />
                  <XmlItem fieldName="organizerEmail" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>




<?xml version="1.0" encoding="UTF-8"?>
<Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDgz">
   <Data>
      <Layout rotation="0" x="58" y="103" width="100" height="100" />
      <XmlItem fieldName="summary" fieldType="text">
         <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
      </XmlItem>
   </Data>
</Player>



Player
<?xml version="1.0" encoding="UTF-8"?>
<Player player="6020" label="" interactive="0">
   <Data>
      <Json providerType="calendar" itemsPath="" slideShow="1" itemInterval="5" playVideoInFull="1" randomOrder="1">
         <Player src="45" hDataSrc="16" />
         <Data token="22222222222222222222" mode="offset" before="3" after="6" startDate="1449691200000" endDate="1450209600000" />
      </Json>
   </Data>
</Player>



player
<?xml version="1.0" encoding="UTF-8"?>
<Player player="6020" label="" interactive="0">
   <Data>
      <Json providerType="calendar" itemsPath="" slideShow="1" itemInterval="5" playVideoInFull="1" randomOrder="1">
         <Player src="45" hDataSrc="16" />
         <Data token="uuuuuuuuuuuuuuuuu" mode="fixed" startDate="1450382400000" endDate="1452974400000" />
      </Json>
   </Data>
</Player>



<?xml version="1.0" encoding="UTF-8"?>
<Player player="6020" label="" interactive="0">
   <Data>
      <Json providerType="calendar" itemsPath="" slideShow="1" itemInterval="5" playVideoInFull="1" randomOrder="1">
         <Player src="45" hDataSrc="16" />
         <Data token="8c0f2d56-e77c-4977-8433-b3ba99a7eb4b" mode="offset" before="3" after="6" startDate="1449691200000" endDate="1450209600000" id="#contacts@group.v.calendar.google.com" />
      </Json>
   </Data>
</Player>


================================================
FILE: examples/collection.xml
================================================

<?xml version="1.0" encoding="UTF-8"?>
<Player player="4100" label="Collection" interactive="0">
   <Data>
      <EventCommands>
         <EventCommand from="ev1" condition="" command="firstPage" />
         <EventCommand from="ev2" condition="" command="nextPage" />
         <EventCommand from="ev3" condition="" command="lastPage" />
         <EventCommand from="ev4" condition="" command="selectPage">
            <Params>
               <Page name="page4" />
            </Params>
         </EventCommand>
         <EventCommand from="ev5" condition="" command="selectPage">
            <Params>
               <Page name="page5" />
            </Params>
         </EventCommand>
      </EventCommands>
      <Collection mode="kiosk" duration="10">
         <Page page="page1" type="resource" duration="11">
            <Player player="3130">
               <Data>
                  <Resource resource="11" hResource="4" />
               </Data>
            </Player>
            <AdLocalContent id="1" handle="0" />
         </Page>
         <Page page="page3" type="resource" duration="312">
            <Player player="3130">
               <Data>
                  <Resource resource="14" hResource="6" />
               </Data>
            </Player>
         </Page>
         <Page page="page4" type="resource" duration="22">
            <Player player="3130">
               <Data>
                  <Resource resource="15" hResource="7" />
               </Data>
            </Player>
         </Page>
         <Page page="page5" type="scene" duration="42">
            <Player src="1" hDataSrc="0" />
         </Page>
         <Page page="page2" type="resource" duration="22">
            <Player player="3130">
               <Data>
                  <Resource resource="13" hResource="5" />
               </Data>
            </Player>
         </Page>
      </Collection>
   </Data>
</Player>

================================================
FILE: examples/collection_scene.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="collection scene" interactive="0" id="YmxvY2tpZDg3">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4100" label="Collection" interactive="0" id="YmxvY2tpZDg4">
               <Data>
                  <TransitionPool handle="0" />
                  <Layout rotation="0" x="92" y="81" width="100" height="100" />
                  <Collection mode="slideshow" duration="2">
                     <Page page="page1" type="resource">
                        <Player player="3130" id="YmxvY2tpZDg5">
                           <Data>
                              <Resource resource="21" hResource="0" />
                           </Data>
                        </Player>
                     </Page>
                     <Page page="page2" type="resource">
                        <Player player="3130" id="YmxvY2tpZDkw">
                           <Data>
                              <Resource resource="22" hResource="1" />
                           </Data>
                        </Player>
                     </Page>
                     <Page page="page3" type="resource">
                        <Player player="3130" id="YmxvY2tpZDkx">
                           <Data>
                              <Resource resource="24" hResource="3" />
                           </Data>
                        </Player>
                     </Page>
                     <Page page="page4" type="resource">
                        <Player player="3130" id="YmxvY2tpZDky">
                           <Data>
                              <Resource resource="25" hResource="4" />
                           </Data>
                        </Player>
                     </Page>
                  </Collection>
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>

================================================
FILE: examples/digg.xml
================================================
Scene:
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="Digg cene" interactive="0" mimeType="Json.digg" id="YmxvY2tpZDU3">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDU4">
               <Data>
                  <Layout rotation="0" x="96" y="131" width="100" height="100" />
                  <XmlItem fieldName="title" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDU5">
               <Data>
                  <Layout rotation="0" x="232" y="102" width="100" height="100" />
                  <XmlItem fieldName="link" fieldType="resource" maintainAspectRatio="1" />
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>


Player:
<?xml version="1.0" encoding="UTF-8"?>
<Player player="6000" label="Digg" interactive="0">
   <Data>
      <Json providerType="digg" itemsPath="" slideShow="1" itemInterval="7" playVideoInFull="1" randomOrder="1">
         <Player src="33" hDataSrc="10" />
         <Data />
      </Json>
   </Data>
</Player>

================================================
FILE: examples/googlesheets.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="Sheets" interactive="0" mimeType="Json.spreadsheet" id="YmxvY2tpZDI2">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDI3">
               <Data>
                  <Layout rotation="0" x="64" y="94" width="249" height="79" />
                  <XmlItem fieldName="$cells.13.4.value" fieldType="text">
                     <Font fontSize="14" fontColor="204" fontFamily="Arial" fontWeight="bold" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>

================================================
FILE: examples/instagram_feed.xml
================================================
scene:
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="insat feed" interactive="0" mimeType="Json.instagram.feed" id="YmxvY2tpZDc3">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc4">
               <Data>
                  <Layout rotation="0" x="54" y="48" width="100" height="100" />
                  <XmlItem fieldName="title" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc5">
               <Data>
                  <Layout rotation="0" x="30" y="198" width="100" height="100" />
                  <XmlItem fieldName="video" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDgw">
               <Data>
                  <Layout rotation="0" x="218" y="36" width="100" height="100" />
                  <XmlItem fieldName="urlImage" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>

player:
<?xml version="1.0" encoding="UTF-8"?>
<Player player="6050" iconName="player6050Icon" label="">
   <Data>
      <Json providerType="instagram.feed">
         <Player src="43" hDataSrc="15" />
      </Json>
   </Data>
</Player>

================================================
FILE: examples/jsonItem.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="json scene" interactive="0" id="YmxvY2tpZDY3">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY4">
               <Data>
                  <Layout rotation="0" x="36" y="38" width="307" height="51" />
                  <XmlItem fieldName="text" fieldType="text">
                     <Font fontSize="16" fontColor="6710886" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY5">
               <Data>
                  <Layout rotation="0" x="166" y="202" width="100" height="100" />
                  <XmlItem fieldName="someResource" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDcw">
               <Data>
                  <Layout rotation="0" x="36" y="202" width="100" height="100" />
                  <XmlItem fieldName="title" fieldType="date" dateFormat="YY/EE">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>

================================================
FILE: examples/jsonPlayer.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="4300" label="json" interactive="0">
   <Data>
      <EventCommands>
         <EventCommand from="ev1" condition="" command="loadUrl">
            <Params>
               <Url name="http://www.google.com" />
            </Params>
         </EventCommand>
         <EventCommand from="ev2" condition="" command="firstPage" />
         <EventCommand from="ev3" condition="" command="firstPage" />
         <EventCommand from="ev4" condition="" command="nextPage" />
         <EventCommand from="ev5" condition="" command="lastPage" />
      </EventCommands>
      <Appearance alpha="1" blendMode="normal" />
      <Border borderThickness="0" borderColor="65535" cornerRadius="0" />
      <Background style="Gradient" gradientType="linear" angle="0" offsetX="0" offsetY="0">
         <GradientPoints>
            <Point color="4361162" opacity="1" midpoint="125" />
         </GradientPoints>
      </Background>
      <Json providerType="" itemsPath="ZZ" slideShow="1" itemInterval="12" playVideoInFull="1" randomOrder="1" url="XX">
         <Player src="7" hDataSrc="2" />
         <Data />
      </Json>
   </Data>
</Player>

================================================
FILE: examples/json_as3_maps.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<ms:PlayerPage xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   xmlns:ms="*"
			   width="100%" height="300"
	label="Json">

	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
[Bindable]  private var m_fieldCollection:ArrayCollection;

			protected override function createChildren():void
			{
				super.createChildren();
				fontCtrl.addEventListener(FontCtrl.FONT_CHANGED, onFontChanged);
			}

			protected override function commitProperties():void
			{
				super.commitProperties();
				if (m_playerLoader.player==null)
					return;

				var mimeType:String = "";
				if (m_playerLoader.parentPlayerLoader!=null)
				{
					mimeType = PlayerLoader(m_playerLoader.parentPlayerLoader).mimeType;
				}

				m_fieldCollection = new ArrayCollection();
				switch(mimeType)
				{
					case "Json.digg":
						m_fieldCollection.addItem({name:"title",type:"text",label:"Title"});
						m_fieldCollection.addItem({name:"link",type:"resource",label:"Image"});
						break;

					case "Json.weather":
						m_fieldCollection.addItem({name:"$[0].data.current_condition[0].iconPath",type:"resource",label:"current icon"});
						m_fieldCollection.addItem({name:"$[0].data.current_condition[0].temp_@",type:"text",label:"current temp"});
						m_fieldCollection.addItem({name:"$[0].data.current_condition[0].humidity",type:"text",label:"current humidity"});



						m_fieldCollection.addItem({name:"$[0].data.weather[0].iconPath",type:"resource",label:"today icon"});
						m_fieldCollection.addItem({name:"$[0].data.weather[0].mintemp@",type:"text",label:"today min temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[0].maxtemp@",type:"text",label:"today max temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[0].day",type:"text",label:"today label"});

						m_fieldCollection.addItem({name:"$[0].data.weather[1].iconPath",type:"resource",label:"today+1 icon"});
						m_fieldCollection.addItem({name:"$[0].data.weather[1].mintemp@",type:"text",label:"today+1 min temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[1].maxtemp@",type:"text",label:"today+1 max temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[1].day",type:"text",label:"today+1 label"});

						m_fieldCollection.addItem({name:"$[0].data.weather[2].iconPath",type:"resource",label:"today+2 icon"});
						m_fieldCollection.addItem({name:"$[0].data.weather[2].mintemp@",type:"text",label:"today+2 min temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[2].maxtemp@",type:"text",label:"today+2 max temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[2].day",type:"text",label:"today+2 label"});

						m_fieldCollection.addItem({name:"$[0].data.weather[3].iconPath",type:"resource",label:"today+3 icon"});
						m_fieldCollection.addItem({name:"$[0].data.weather[3].mintemp@",type:"text",label:"today+3 min temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[3].maxtemp@",type:"text",label:"today+3 max temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[3].day",type:"text",label:"today+3 label"});

						m_fieldCollection.addItem({name:"$[0].data.weather[4].iconPath",type:"resource",label:"today+4 icon"});
						m_fieldCollection.addItem({name:"$[0].data.weather[4].mintemp@",type:"text",label:"today+4 min temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[4].maxtemp@",type:"text",label:"today+4 max temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[4].day",type:"text",label:"today+4 label"});

						m_fieldCollection.addItem({name:"$[0].data.weather[5].iconPath",type:"resource",label:"today+5 icon"});
						m_fieldCollection.addItem({name:"$[0].data.weather[5].mintemp@",type:"text",label:"today+5 min temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[5].maxtemp@",type:"text",label:"today+5 max temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[5].day",type:"text",label:"today+5 label"});

						m_fieldCollection.addItem({name:"$[0].data.weather[6].iconPath",type:"resource",label:"today+6 icon"});
						m_fieldCollection.addItem({name:"$[0].data.weather[6].mintemp@",type:"text",label:"today+6 min temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[6].maxtemp@",type:"text",label:"today+6 max temp"});
						m_fieldCollection.addItem({name:"$[0].data.weather[6].day",type:"text",label:"today+6 label"});
						break;

					case "Json.facebook.wall":
						m_fieldCollection.addItem({name:"txt",type:"text",label:"Text"});
						m_fieldCollection.addItem({name:"pic",type:"resource",label:"Picture"});
						break;

					case "Json.facebook.album":
						m_fieldCollection.addItem({name:"src",type:"resource",label:"Picture"});
						break;

					case "Json.facebook.videos":
						m_fieldCollection.addItem({name:"desc",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"src",type:"resource",label:"Video"});
						break;

					case "Json.picasa":
						m_fieldCollection.addItem({name:"src",type:"resource",label:"Image"});
						break;

					case "Json.plus":
						m_fieldCollection.addItem({name:"title",type:"text",label:"Title"});
						m_fieldCollection.addItem({name:"description",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"published",type:"text",label:"Published"});
						m_fieldCollection.addItem({name:"src",type:"resource",label:"Image"});
						break;

					case "Json.calendar":
						m_fieldCollection.addItem({name:"summary",type:"text",label:"Summary"});
						m_fieldCollection.addItem({name:"description",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"organizer",type:"text",label:"Organizer name"});
						m_fieldCollection.addItem({name:"organizerEmail",type:"text",label:"Organizer email"});
						m_fieldCollection.addItem({name:"created",type:"text",label:"Created"});
						m_fieldCollection.addItem({name:"startDateTime_time",type:"date",label:"Start time"});
						m_fieldCollection.addItem({name:"endDateTime_time",type:"date",label:"End time"});
						m_fieldCollection.addItem({name:"updated",type:"text",label:"Updated"});
						break;

					case "Json.spreadsheet":
						break;

					case "Json.instagram.feed":
						m_fieldCollection.addItem({name:"urlImage",type:"resource",label:"Image"});
						m_fieldCollection.addItem({name:"video",type:"resource",label:"Video"});
						m_fieldCollection.addItem({name:"title",type:"text",label:"Title"});
						break;
					case "Json.instagram.media":
						m_fieldCollection.addItem({name:"urlImage",type:"resource",label:"Image"});
						m_fieldCollection.addItem({name:"video",type:"resource",label:"Video"});
						m_fieldCollection.addItem({name:"title",type:"text",label:"Title"});
						break;

					case "Json.500px.collection":
						m_fieldCollection.addItem({name:"name",type:"text",label:"Name"});
						m_fieldCollection.addItem({name:"description",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"image_url",type:"resource",label:"Image"});
						break;
					case "Json.500px.user":
						m_fieldCollection.addItem({name:"name",type:"text",label:"Name"});
						m_fieldCollection.addItem({name:"description",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"image_url",type:"resource",label:"Image"});
						break;

					case "Json.pinterest.user":
						m_fieldCollection.addItem({name:"boardThumb",type:"resource",label:"Thumb"});
						m_fieldCollection.addItem({name:"boardName",type:"text",label:"Name"});
						m_fieldCollection.addItem({name:"src",type:"resource",label:"Image"});
						m_fieldCollection.addItem({name:"description",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"likes",type:"text",label:"Likes"});
						break;

					case "Json.pinterest.board":
						m_fieldCollection.addItem({name:"src",type:"resource",label:"Image"});
						m_fieldCollection.addItem({name:"description",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"likes",type:"text",label:"Likes"});
						break;

					case "Json.tumblr.posts":
						m_fieldCollection.addItem({name:"date_time",type:"date",label:"Date"});
						m_fieldCollection.addItem({name:"title",type:"text",label:"Title"});
						m_fieldCollection.addItem({name:"slug",type:"text",label:"Slug"});
						m_fieldCollection.addItem({name:"body",type:"text",label:"Body"});
						break;
					case "Json.tumblr.videos":
						m_fieldCollection.addItem({name:"body",type:"text",label:"Body"});
						m_fieldCollection.addItem({name:"date_time",type:"date",label:"Date"});
						m_fieldCollection.addItem({name:"video_url",type:"resource",label:"Video"});
						m_fieldCollection.addItem({name:"slug",type:"text",label:"Slug"});
						break;

					case "Json.tumblr.photos":
						m_fieldCollection.addItem({name:"body",type:"text",label:"Body"});
						m_fieldCollection.addItem({name:"date_time",type:"date",label:"Date"});
						m_fieldCollection.addItem({name:"photo_url",type:"resource",label:"Image"});
						m_fieldCollection.addItem({name:"slug",type:"text",label:"Slug"});
						break;

					case "Json.tumblr.texts":
						m_fieldCollection.addItem({name:"date_time",type:"date",label:"Date"});
						m_fieldCollection.addItem({name:"title",type:"text",label:"Title"});
						m_fieldCollection.addItem({name:"slug",type:"text",label:"Slug"});
						m_fieldCollection.addItem({name:"body",type:"text",label:"Body"});
						break;

					case "Json.flickr":
						m_fieldCollection.addItem({name:"thumbnail",type:"resource",label:"Thumbnail"});
						m_fieldCollection.addItem({name:"large",type:"resource",label:"Image"});
						break;

					case "Json.twitter":
						m_fieldCollection.addItem({name:"name",type:"text",label:"Name"});
						m_fieldCollection.addItem({name:"text",type:"text",label:"Text"});
						m_fieldCollection.addItem({name:"screen_name",type:"text",label:"Screen name"});
						m_fieldCollection.addItem({name:"created_at",type:"text",label:"Created at"});
						m_fieldCollection.addItem({name:"profile_background_image_url",type:"resource",label:"Background image"});
						m_fieldCollection.addItem({name:"profile_image_url",type:"resource",label:"Image"});
						break;

					case "Json.drive":
						m_fieldCollection.addItem({name:"title",type:"text",label:"Name"});
						m_fieldCollection.addItem({name:"id",type:"object",label:"File"});
						break;

					case "Json.dropbox":
						m_fieldCollection.addItem({name:"file",type:"object",label:"File"});
						break;


					case "Json.yelp.info":
						m_fieldCollection.addItem({name:"$rating",type:"text",label:"Rating"});
						m_fieldCollection.addItem({name:"$name",type:"text",label:"Name"});
						m_fieldCollection.addItem({name:"$phone",type:"text",label:"Phone"});
						m_fieldCollection.addItem({name:"$snippet_text",type:"text",label:"Snippet text"});
						m_fieldCollection.addItem({name:"$snippet_image_url",type:"resource",label:"Snippet image"});
						m_fieldCollection.addItem({name:"$rating_img_url_small",type:"resource",label:"Rating image small"});
						m_fieldCollection.addItem({name:"$rating_img_url_large",type:"resource",label:"Rating image large"});
						m_fieldCollection.addItem({name:"$image_url",type:"resource",label:"Image"});
						break;

					case "Json.yelp.reviews":
						m_fieldCollection.addItem({name:"rating",type:"text",label:"Rating"});
						m_fieldCollection.addItem({name:"excerpt",type:"text",label:"Excerpt"});
						m_fieldCollection.addItem({name:"time_created",type:"date",label:"Created"});
						m_fieldCollection.addItem({name:"rating_image_url",type:"resource",label:"Rating image"})
						m_fieldCollection.addItem({name:"rating_image_small_url",type:"resource",label:"Rating image small"})
						m_fieldCollection.addItem({name:"rating_image_large_url",type:"resource",label:"Rating image large"})
						m_fieldCollection.addItem({name:"user.name",type:"text",label:"User name"});
						m_fieldCollection.addItem({name:"user.image_url",type:"resource",label:"User image"})
						break;

					case "Json.etsy.shopListings":
						m_fieldCollection.addItem({name:"title",type:"text",label:"Title"});
						m_fieldCollection.addItem({name:"description",type:"text",label:"Description"});
						m_fieldCollection.addItem({name:"quantity",type:"text",label:"Quantity"});
						m_fieldCollection.addItem({name:"price",type:"text",label:"Price"});
						m_fieldCollection.addItem({name:"currency_code",type:"text",label:"Currency"});
						m_fieldCollection.addItem({name:"image_full",type:"resource",label:"Image full"});
						m_fieldCollection.addItem({name:"image_large",type:"resource",label:"Image large"});
						m_fieldCollection.addItem({name:"image_medium",type:"resource",label:"Image medium"});
						m_fieldCollection.addItem({name:"image_small",type:"resource",label:"Image small"});
						break;

					case "Json.etsy.shopAbout":
						m_fieldCollection.addItem({name:"$story",type:"text",label:"Story"});
						m_fieldCollection.addItem({name:"$story_headline",type:"text",label:"Story headline"});
						m_fieldCollection.addItem({name:"$story_leading_paragraph",type:"text",label:"Story paragraph"});
						m_fieldCollection.addItem({name:"$status",type:"text",label:"status"});
						break;

					case "Json.etsy.userProfile":
						m_fieldCollection.addItem({name:"$first_name",type:"text",label:"First name"});
						m_fieldCollection.addItem({name:"$last_name",type:"text",label:"Last name"});
						m_fieldCollection.addItem({name:"$bio",type:"text",label:"bio"});
						m_fieldCollection.addItem({name:"$birth_day",type:"text",label:"Birth day"});
						m_fieldCollection.addItem({name:"$birth_month",type:"text",label:"Birth month"});
						m_fieldCollection.addItem({name:"$city",type:"text",label:"City"});
						m_fieldCollection.addItem({name:"$location",type:"text",label:"Location"});
						m_fieldCollection.addItem({name:"$region",type:"text",label:"Region"});
						m_fieldCollection.addItem({name:"$gender",type:"text",label:"Gender"});
						m_fieldCollection.addItem({name:"$is_seller",type:"text",label:"Seller"});
						m_fieldCollection.addItem({name:"$materials",type:"text",label:"Materials"});
						m_fieldCollection.addItem({name:"$transaction_buy_count",type:"text",label:"transaction_buy_count"});
						m_fieldCollection.addItem({name:"$transaction_sold_count",type:"text",label:"transaction_sold_count"});
						m_fieldCollection.addItem({name:"$image_url_75x75",type:"resource",label:"Image"});
						break;

					case "Json.mashape.randomQuote":
						m_fieldCollection.addItem({name:"quote",type:"text",label:"quote"});
						m_fieldCollection.addItem({name:"author",type:"text",label:"author"});
						m_fieldCollection.addItem({name:"category",type:"text",label:"category"});
						break;


					case "Json.mashape.btc":
						m_fieldCollection.addItem({name:"$currency",type:"text",label:"currency"});
						m_fieldCollection.addItem({name:"$value",type:"text",label:"value"});
						break;

					case "Json.mashape.currency":
						m_fieldCollection.addItem({name:"$from",type:"text",label:"From currency"});
						m_fieldCollection.addItem({name:"$to",type:"text",label:"To currency"});
						m_fieldCollection.addItem({name:"$from_amount",type:"text",label:"From amount"});
						m_fieldCollection.addItem({name:"$to_amount",type:"text",label:"To amount"});
						break;
				}


				fieldPath.text = BlockJsonItemPlayer(m_playerLoader.player).fieldName;


				if (mimeType=="Json.spreadsheet")
				{
					fieldComboForm.label = "Row/Column";
					fieldComboForm.visible = true;
					fieldComboForm.height = NaN;
					fieldPathForm.enabled = false;
					fieldTypeForm.enabled = false;

					fieldCombo.visible = false;
					spreadsheetFrame.visible = true;


					var fieldName:String = fieldPath.text = BlockJsonItemPlayer(m_playerLoader.player).fieldName;
					if (fieldName.substr(0, 7)=="$cells.")
					{
						fieldName = fieldName.substring(7, fieldName.length-6);
						var rowCol:Array = fieldName.split('.');
						row.value = Math.max(1, int(rowCol[0]));
						col.value = Math.max(1, int(rowCol[1]));
					}
					else
					{
						if (fieldPath.text=="title")
						{
							row.value = 1;
							col.value = 1;
							onSpreadsheetCell();
						}
					}
				}
				else if (m_fieldCollection.length>0)
				{

					for each(var item:Object in m_fieldCollection.source)
					{
						if (item.name==BlockJsonItemPlayer(m_playerLoader.player).fieldName)
						{
							fieldCombo.selectedItem = item;
							break;
						}
					}
					fieldComboForm.label = "Field name";
					fieldComboForm.visible = true;
					fieldComboForm.height = NaN;
					spreadsheetFrame.visible = false;
					fieldPathForm.enabled = false;
					fieldTypeForm.enabled = false;
					fieldCombo.visible = true;
				}
				else
				{
					fieldComboForm.label = "Field name";
					fieldComboForm.visible = false;
					fieldComboForm.height = 10;
					fieldPathForm.enabled = true;
					fieldTypeForm.enabled = true;
					fieldCombo.visible = true;
				}

				fontCtrl.fontItem = BlockJsonItemPlayer(m_playerLoader.player).fontItem;
				for each(var fieldType:Object in ArrayList(fieldTypeCombo.dataProvider).source)
				{
					if (fieldType.name==BlockJsonItemPlayer(m_playerLoader.player).fieldType)
					{
						fieldTypeCombo.selectedItem = fieldType;
						break;
					}
				}

				updateButtons();
				if (BlockJsonItemPlayer(m_playerLoader.player).fieldType=="date")
				{
					dateFormat.text = BlockJsonItemPlayer(m_playerLoader.player).dateFormat;
				}
				else if (BlockJsonItemPlayer(m_playerLoader.player).fieldType=="resource" || BlockJsonItemPlayer(m_playerLoader.player).fieldType=="object")
				{
					maintainAspectRatio.selected = BlockJsonItemPlayer(m_playerLoader.player).maintainAspectRatio;
				}
			}

			private function onFieldChanged(event:Event):void
			{
				BlockJsonItemPlayer(m_playerLoader.player).fieldType= fieldCombo.selectedItem.type;
				fieldPath.text = BlockJsonItemPlayer(m_playerLoader.player).fieldName = fieldCombo.selectedItem.name;
				if (BlockJsonItemPlayer(m_playerLoader.player).fieldType=="date")
				{
					dateFormat.text = BlockJsonItemPlayer(m_playerLoader.player).dateFormat;
				}
				else if (BlockJsonItemPlayer(m_playerLoader.player).fieldType=="resource" || BlockJsonItemPlayer(m_playerLoader.player).fieldType=="object")
				{
					maintainAspectRatio.selected = BlockJsonItemPlayer(m_playerLoader.player).maintainAspectRatio;
				}

				updateButtons();

				for each(var fieldType:Object in ArrayList(fieldTypeCombo.dataProvider).source)
				{
					if (fieldType.name==BlockJsonItemPlayer(m_playerLoader.player).fieldType)
					{
						fieldTypeCombo.selectedItem = fieldType;
						break;
					}
				}
			}

			private function onFieldPathChanged(event:Event):void
			{
				BlockJsonItemPlayer(m_playerLoader.player).fieldName = fieldPath.text;
			}


			private function onFieldType():void
			{
				BlockJsonItemPlayer(m_playerLoader.player).fieldType= fieldTypeCombo.selectedItem.name;
				updateButtons();
			}

			private function onFontChanged(event:Event):void
			{
				BlockJsonItemPlayer(m_playerLoader.player).fontItem = fontCtrl.fontItem;
			}

			private function onMaintainAspectRatio():void
			{
				BlockJsonItemPlayer(m_playerLoader.player).maintainAspectRatio = maintainAspectRatio.selected;
			}

			private function onDateFormat():void
			{
				BlockJsonItemPlayer(m_playerLoader.player).dateFormat = dateFormat.text;
			}


			private function onSpreadsheetCell():void
			{
				BlockJsonItemPlayer(m_playerLoader.player).fieldName = fieldPath.text = "$cells." + row.value + "." + col.value + ".value";
			}

			private function updateButtons():void
			{
				if (BlockJsonItemPlayer(m_playerLoader.player).fieldType=="text")
				{
					fontCtrl.visible = true;
					maintainAspectRatioForm.visible = false;
					dateFormatForm.visible = dateInfo.visible = false;
				}
				else if (BlockJsonItemPlayer(m_playerLoader.player).fieldType=="date")
				{
					fontCtrl.visible = true;
					maintainAspectRatioForm.visible = false;
					dateFormatForm.visible = dateInfo.visible = true;
				}
				else
				{
					fontCtrl.visible = false;
					maintainAspectRatioForm.visible = true;
					dateFormatForm.visible = dateInfo.visible = false;
				}
			}
		]]>
	</fx:Script>

	<fx:Declarations>
	</fx:Declarations>

	<ms:layout>
		<s:VerticalLayout/>
	</ms:layout>

	<s:Form width="100%">
		<s:FormItem width="100%" id="fieldComboForm"
			label="Field name">
			<s:layout>
				<s:BasicLayout/>
			</s:layout>
			<s:DropDownList id="fieldCombo" width="100%"
					dataProvider="{m_fieldCollection}" labelField="label"
					change="onFieldChanged(event)"/>

			<s:HGroup id="spreadsheetFrame">
				<s:NumericStepper id="row" minimum="1" maximum="10000" change="onSpreadsheetCell()"/>
				<s:Label text=":" paddingTop="5" fontWeight="bold"/>
				<s:NumericStepper id="col" minimum="1" maximum="10000" change="onSpreadsheetCell()"/>
			</s:HGroup>
		</s:FormItem>
		<s:FormItem id="fieldPathForm" width="100%"
					label="Field path">
			<s:TextInput id="fieldPath" width="100%"
						enter="onFieldPathChanged(event)" focusOut="onFieldPathChanged(event)"/>
		</s:FormItem>
		<s:FormItem id="fieldTypeForm" width="100%"
					label="Field type">
			<s:DropDownList id="fieldTypeCombo" labelField="label" width="100%"
						change="onFieldType()">
				<s:dataProvider>
					<s:ArrayList>
						<fx:Object name="text" label="Text"/>
						<fx:Object name="date" label="Date"/>
						<fx:Object name="resource" label="Resource"/>
						<fx:Object name="object" label="Object"/>
					</s:ArrayList>
				</s:dataProvider>
			</s:DropDownList>
		</s:FormItem>
		<s:FormItem id="maintainAspectRatioForm" width="100%"
					label="Maintain aspect ratio">
			<s:CheckBox id="maintainAspectRatio" change="onMaintainAspectRatio()"/>
		</s:FormItem>
		<s:FormItem id="dateFormatForm" width="100%"
					label="Date format">
			<s:TextInput id="dateFormat"
						 focusOut="onDateFormat()" enter="onDateFormat()"/>
		</s:FormItem>
	</s:Form>
	<ms:FontCtrl id="fontCtrl" width="100%"/>

	<s:VGroup id="dateInfo" width="100%" height="100%">
		<s:Line width="100%" height="1"/>

		<s:RichText>
			<s:text>
				Y Year              YY YYYY
				M Month in year     M MM MMM MMM
				D Day in month      D DD
				E Days in week      E EE EEE EEEE
				A AM/PM             AM or PM
				J Hour in Day       0-23
				H Hour in Day       1-24
				K Hour in am/pm     0-11
				L Hour in am/pm     1-12
				N Minute in hour    N NN
				S Seconds in minute SS
			</s:text>
		</s:RichText>
	</s:VGroup>

</ms:PlayerPage>


================================================
FILE: examples/json_scenes.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="6010" label="" interactive="0">
   <Data>
      <Json providerType="weather" itemsPath="" slideShow="1" itemInterval="5" playVideoInFull="1" randomOrder="1">
         <Player src="11" hDataSrc="2" />
         <Data unit="F" style="2" address="91301" />
      </Json>
   </Data>
</Player>

================================================
FILE: examples/jsonsheets.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="vanilla json" interactive="0" id="YmxvY2tpZDM3">
   <Data>
      <Appearance alpha="1.0" blendMode="normal" />
      <Border borderThickness="0" borderColor="65535" cornerRadius="0" />
      <Layout rotation="0" x="0" y="0" width="600" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="vanilla json" interactive="0" id="YmxvY2tpZDM4">
               <Data>
                  <Appearance alpha="1.0" blendMode="normal" />
                  <Background style="Gradient" gradientType="linear" angle="0" offsetX="0" offsetY="0">
                     <GradientPoints>
                        <Point color="4361162" opacity="1" midpoint="125" />
                     </GradientPoints>
                  </Background>
                  <Border borderThickness="0" borderColor="65535" cornerRadius="0" />
                  <Layout rotation="0" x="108" y="84" width="100" height="100" />
                  <XmlItem fieldName="$cells.6.3.value" fieldType="text" maintainAspectRatio="0">
                     <Font fontSize="12" fontColor="0" fontFamily="Astron Boy Video" fontWeight="normal" fontStyle="normal" textDecoration="underline" textAlign="center" />
                  </XmlItem>
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>

================================================
FILE: examples/location.xml
================================================

<?xml version="1.0" encoding="UTF-8"?>
<Player player="4105" label="Location based" interactive="0">
   <Data>
      <LocationBased duration="10">
         <GPS>
            <Page page="page2" type="resource" duration="5" lat="34.15585218402147" lng="-118.80546569824219" radios="1" priority="0">
               <Player player="3130">
                  <Data>
                     <Resource resource="350" hResource="4" />
                  </Data>
               </Player>
            </Page>
            <Page page="page3" type="resource" duration="5" lat="34.15585218402147" lng="-118.80546569824219" radios="1" priority="1">
               <Player player="3130">
                  <Data>
                     <Resource resource="352" hResource="6" />
                  </Data>
               </Player>
            </Page>
         </GPS>
         <Fixed>
            <Page page="page1" type="resource" duration="3">
               <Player player="3130">
                  <Data>
                     <Resource resource="363" hResource="15" />
                  </Data>
               </Player>
            </Page>
            <Page page="page2" type="resource" duration="3">
               <Player player="3130">
                  <Data>
                     <Resource resource="362" hResource="14" />
                  </Data>
               </Player>
            </Page>
         </Fixed>
      </LocationBased>
   </Data>
</Player>


================================================
FILE: examples/player_weather_scene.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="6010" iconName="player6010Icon" label="">
   <Data>
      <Json providerType="weather" slideShow="1">
         <Player src="15" hDataSrc="6" />
      </Json>
   </Data>
</Player>

================================================
FILE: examples/reseller_sample.xml
================================================
<!-- Galaxy app_compoenents > app_compontn / module_id -->

<BusinessInfo businessId="300762" name="XXXXXXXXXXXX" businessDescription="" accountStatus="4" archiveState="0" applicationId="3" resellerId="1" providerId="10">
	<WhiteLabel enabled="1">
		<Studio>
			<Application>
				<Logo tooltip="www.MediaSignage.com" link="http://www.mediasignage.com/b.thml" filename="XXXXXXXXLogo.png"/>
				<Links home="http://mediasignage.com" download="http://mediasignage.com/html/download.html" contact="http://mediasignage.com/html/contact.html"/>
				<CreateAccount show="1"/>
			</Application>
			<MainMenu>
				<CommandGroup id="help" label="Help" icon="helpIcon">
					<Command id="help1" label="Visit site" href="http://mediasignage.com"/>
					<Command id="help2" label="Video Tutorial" href="http://mediasignage.com/html/signage_video.html"/>
					<Command id="help3" label="Support" href="http://mediasignage.com/simplemachinesforum/index.php"/>
					<Command id="help4" label="Report a bug" href="http://mediasignage.com/simplemachinesforum/index.php?board=3.0"/>
					<Command id="about" label="About..."/>
				</CommandGroup>
			</MainMenu>
			<Banner embeddedReference="1"/>
			<Twitter show="1" link="http://twitter.com/mediasignage"/>
			<Chat show="1" link="http://messenger.providesupport.com/messenger/mediasignage.html"/>
		</Studio>
	</WhiteLabel>
	<Privileges defaultPrivilegeId="300079">
		<Privilege id="301746" name="limited">
			<Groups>
				<Group name="Global" visible="0">
					<Tables global_settings="0"/>
				</Group>
				<Group name="Screens" visible="0">
					<Tables boards="0" board_templates="0" board_template_viewers="0"/>
				</Group>
				<Group name="Resources" visible="0" resourceMode="0">
					<Tables resources="0"/>
				</Group>
				<Group name="Editors" visible="0">
					<Tables player_data="0"/>
				</Group>
				<Group name="Catalog" visible="0">
					<Tables catalog_items="0" catalog_item_infos="0" catalog_item_resources="0" catalog_item_categories="0" category_values="0"/>
				</Group>
				<Group name="Campaigns" visible="0">
					<Tables campaigns="0" campaign_events="0" campaign_timelines="0" campaign_timeline_sequences="0" campaign_timeline_schedules="0" campaign_sequences="0" campaign_sequence_timelines="0" campaign_sequence_schedules="0" campaign_timeline_channels="0" campaign_timeline_chanels="0" campaign_timeline_chanel_players="0" campaign_timeline_board_viewer_channels="0" campaign_timeline_board_viewer_chanels="0" campaign_timeline_board_templates="0" campaign_channels="0" campaign_channel_players="0" campaign_boards="0"/>
				</Group>
				<Group name="Transitions" visible="1">
					<Tables transition_pools="7" transition_pool_items="7"/>
				</Group>
				<Group name="AdLocal" visible="0">
					<Tables ad_local_packages="0" ad_local_contents="0"/>
				</Group>
				<Group name="AdOut" visible="0" globalSearch="1">
					<Tables ad_out_packages="0" ad_out_package_stations="0" ad_out_package_contents="0"/>
				</Group>
				<Group name="AdIn" visible="0">
					<Tables ad_in_domains="0" ad_in_domain_businesses="0" ad_in_domain_business_packages="0" ad_in_domain_business_package_stations="0" ad_rates="0"/>
				</Group>
				<Group name="AdRate" visible="0">
					<Tables ad_rates="0"/>
				</Group>
				<Group name="AdAnalytic" visible="0">
					<Tables/>
				</Group>
				<Group name="Music" visible="0">
					<Tables music_channels="0" music_channel_songs="0"/>
				</Group>
				<Group name="Stations" visible="1" stationsNetwork="0" updateOnSave="0" lanServer="0" zwave="0">
					<Tables branch_stations="7" station_ads="7"/>
				</Group>
				<Group name="Changelist" visible="0">
					<Tables/>
				</Group>
			</Groups>
		</Privilege>
		<Privilege id="300079" name="privilege">
			<Groups>
				<Group name="Global" visible="1">
					<Tables global_settings="7"/>
				</Group>
				<Group name="Screens" visible="1">
					<Tables boards="7" board_templates="7" board_template_viewers="7"/>
				</Group>
				<Group name="Resources" visible="1" resourceMode="0">
					<Tables resources="7"/>
				</Group>
				<Group name="Editors" visible="1">
					<Tables player_data="7"/>
				</Group>
				<Group name="Catalog" visible="1">
					<Tables catalog_items="7" catalog_item_infos="7" catalog_item_resources="7" catalog_item_categories="7" category_values="7"/>
				</Group>
				<Group name="Campaigns" visible="1">
					<Tables campaigns="7" campaign_events="7" campaign_timelines="7" campaign_timeline_sequences="7" campaign_timeline_schedules="7" campaign_sequences="7" campaign_sequence_timelines="7" campaign_sequence_schedules="7" campaign_timeline_channels="7" campaign_timeline_chanels="7" campaign_timeline_chanel_players="7" campaign_timeline_board_viewer_channels="7" campaign_timeline_board_viewer_chanels="7" campaign_timeline_board_templates="7" campaign_channels="7" campaign_channel_players="7" campaign_boards="7"/>
				</Group>
				<Group name="Transitions" visible="1">
					<Tables transition_pools="7" transition_pool_items="7"/>
				</Group>
				<Group name="AdLocal" visible="1">
					<Tables ad_local_packages="7" ad_local_contents="7"/>
				</Group>
				<Group name="AdOut" visible="1" globalSearch="1">
					<Tables ad_out_packages="7" ad_out_package_stations="7" ad_out_package_contents="7"/>
				</Group>
				<Group name="AdIn" visible="1">
					<Tables ad_in_domains="7" ad_in_domain_businesses="7" ad_in_domain_business_packages="7" ad_in_domain_business_package_stations="7" ad_rates="7"/>
				</Group>
				<Group name="AdRate" visible="1">
					<Tables ad_rates="7"/>
				</Group>
				<Group name="AdAnalytic" visible="1">
					<Tables/>
				</Group>
				<Group name="Music" visible="1">
					<Tables music_channels="7" music_channel_songs="7"/>
				</Group>
				<Group name="Stations" visible="1" stationsNetwork="1" updateOnSave="1" lanServer="1" zwave="1">
					<Tables branch_stations="7" station_ads="7"/>
				</Group>
				<Group name="Changelist" visible="1">
					<Tables/>
				</Group>
			</Groups>
		</Privilege>
		<Privilege id="301724" name="UpStat">
			<Groups>
				<Group name="Global" visible="0">
					<Tables global_settings="0"/>
				</Group>
				<Group name="Screens" visible="0">
					<Tables boards="0" board_templates="0" board_template_viewers="0"/>
				</Group>
				<Group name="Resources" visible="0" resourceMode="0">
					<Tables resources="0"/>
				</Group>
				<Group name="Editors" visible="0">
					<Tables player_data="0"/>
				</Group>
				<Group name="Catalog" visible="0">
					<Tables catalog_items="0" catalog_item_infos="0" catalog_item_resources="0" catalog_item_categories="0" category_values="0"/>
				</Group>
				<Group name="Campaigns" visible="0">
					<Tables campaigns="0" campaign_events="0" campaign_timelines="0" campaign_timeline_sequences="0" campaign_timeline_schedules="0" campaign_timeline_channels="0" campaign_timeline_chanels="0" campaign_timeline_chanel_players="0" campaign_timeline_board_viewer_channels="0" campaign_timeline_board_viewer_chanels="0" campaign_timeline_board_templates="0" campaign_channels="0" campaign_channel_players="0" campaign_boards="0"/>
				</Group>
				<Group name="Transitions" visible="1">
					<Tables transition_pools="7" transition_pool_items="7"/>
				</Group>
				<Group name="AdLocal" visible="0">
					<Tables ad_local_packages="0" ad_local_contents="0"/>
				</Group>
				<Group name="AdOut" visible="0" globalSearch="1">
					<Tables ad_out_packages="0" ad_out_package_stations="0" ad_out_package_contents="0"/>
				</Group>
				<Group name="AdIn" visible="0">
					<Tables ad_in_domains="0" ad_in_domain_businesses="0" ad_in_domain_business_packages="0" ad_in_domain_business_package_stations="0" ad_rates="0"/>
				</Group>
				<Group name="AdRate" visible="0">
					<Tables ad_rates="0"/>
				</Group>
				<Group name="AdAnalytic" visible="0">
					<Tables/>
				</Group>
				<Group name="Music" visible="0">
					<Tables music_channels="0" music_channel_songs="0"/>
				</Group>
				<Group name="Stations" visible="1" stationsNetwork="1" updateOnSave="1" lanServer="0" zwave="0">
					<Tables branch_stations="7" station_ads="7"/>
				</Group>
				<Group name="Changelist" visible="0">
					<Tables/>
				</Group>
			</Groups>
		</Privilege>
	</Privileges>
	<Themes defaultThemeId="0">
		<Theme name="White" ver="1420" studioStyles="Themes/StudioStyles2.swf" playerStyles="Themes/PlayerStyles2.swf" studioIcons="Themes/StudioIcons2.swf" playerIcons="Themes/AirPlayerIcons2.swf" componentIcons="Themes/componentIcons2.swf" id="1"/>
		<Theme name="Black" ver="1420" studioStyles="Themes/StudioStyles.swf" playerStyles="Themes/PlayerStyles.swf" studioIcons="Themes/StudioIcons.swf" playerIcons="Themes/AirPlayerIcons.swf" componentIcons="Themes/componentIcons.swf" id="0"/>
	</Themes>
	<InstalledApps>
		<App id="10500" installed="1"/>
		<App id="10140" installed="1"/>
		<App id="10050" installed="1"/>
		<App id="10400" installed="1"/>
		<App id="10220" installed="1"/>
		<App id="10130" installed="1"/>
		<App id="10040" installed="1"/>
		<App id="10300" installed="1"/>
		<App id="10210" installed="1"/>
		<App id="10120" installed="1"/>
		<App id="10030" installed="1"/>
		<App id="10200" installed="1"/>
		<App id="10110" installed="1"/>
		<App id="10020" installed="1"/>
		<App id="10190" installed="1"/>
		<App id="10100" installed="1"/>
		<App id="10010" installed="1"/>
		<App id="10005" installed="1"/>
		<App id="10180" installed="1"/>
		<App id="10090" installed="1"/>
		<App id="10080" installed="1"/>
		<App id="10060" installed="1"/>
		<App id="10160" installed="1"/>
		<App id="10070" installed="1"/>
		<App id="10150" installed="1"/>
		<App id="10122" installed="1"/>
	</InstalledApps>
</BusinessInfo>

================================================
FILE: examples/sceneSample.xml
================================================
<Player player="3510" label="my scene 1" interactive="0">
	<Data>
		<EventCommands>
			<EventCommand from="" condition="" command="redirect"/>
		</EventCommands>
		<Layout rotation="0" x="10" y="20" width="555" height="405"/>
		<Appearance alpha="0.9" blendMode="normal"/>
		<Border borderThickness="3" borderColor="16711680" cornerRadius="8"/>
		<Background style="Gradient" gradientType="linear" angle="90" offsetX="0" offsetY="0">
			<GradientPoints>
				<Point color="16769071" opacity="0.6" midpoint="5"/>
				<Point color="16772453" opacity="0.7" midpoint="46"/>
				<Point color="16777215" opacity="0.2" midpoint="181"/>
				<Point color="16515072" opacity="0.8" midpoint="227"/>
			</GradientPoints>
		</Background>
		<Scene defaultDuration="10">
			<Layout>
				<BasicLayout/>
			</Layout>
			<Players>
				<Player player="3130" label="Resource" interactive="0">
					<Data>
						<Layout rotation="0" x="51" y="189" width="153" height="46"/>
						<Resource resource="9" hResource="0">
							<AspectRatio maintain="0"/>
						</Resource>
					</Data>
				</Player>
				<Player player="3320" label="Clock" interactive="0">
					<Data>
						<Layout rotation="0" x="38" y="302" width="301" height="58"/>
						<Clock clockFormat="time" clockMask="J:NN:SS">
							<Font fontSize="72" fontColor="3355443" fontFamily="Arial Rounded MT Bold" fontWeight="bold" fontStyle="none" textDecoration="none" textAlign="left"/>
						</Clock>
					</Data>
				</Player>
				<Player player="3241" label="component name" interactive="0">
					<Data>
						<Layout rotation="0" left="64" verticalCenter="-50" width="296" height="56"/>
						<Border borderThickness="4" borderColor="16711680" cornerRadius="6"/>
						<Background style="Gradient" gradientType="linear" angle="90" offsetX="0" offsetY="0">
							<GradientPoints>
								<Point color="16733463" opacity="0.9" midpoint="7"/>
								<Point color="16777215" opacity="0.7" midpoint="59"/>
								<Point color="5240588" opacity="0.9" midpoint="117"/>
								<Point color="16777215" opacity="0.3" midpoint="176"/>
								<Point color="11942570" opacity="1" midpoint="244"/>
							</GradientPoints>
						</Background>
						<Blur blurX="2" blurY="1"/>
						<Label>
							<Text>Sean text</Text>
							<Font fontSize="48" fontColor="10027059" fontFamily="Arial" fontWeight="normal" fontStyle="italic" textDecoration="none" textAlign="left"/>
						</Label>
					</Data>
				</Player>
				<Player player="3430" label="QR Code" interactive="0">
					<Data>
						<Layout rotation="0" x="23.4" y="14.8" width="71" height="61"/>
						<Text textSource="static">I am qr</Text>
					</Data>
				</Player>
				<Player player="3345" label="Rss news" interactive="0">
					<Data>
						<Layout rotation="0" x="153.75" y="15.6" width="240" height="89"/>
						<Rss url="http://rss.news.yahoo.com/rss/tech" minRefreshTime="24" speed="20" vertical="1" rtl="0">
							<Title>
								<Font fontSize="16" fontColor="102" fontFamily="Arial" fontWeight="bold" fontStyle="normal" textDecoration="none" textAlign="left"/>
							</Title>
							<Description>
								<Font fontSize="16" fontColor="10053171" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left"/>
							</Description>
						</Rss>
					</Data>
				</Player>
				<Player player="3150" label="External video" interactive="0">
					<Data>
						<Layout rotation="0" x="259.2" y="215.15" width="100" height="56"/>
						<LINK src="http://somesite.com/vifro.flv"/>
					</Data>
				</Player>
			</Players>
		</Scene>
	</Data>
</Player>

================================================
FILE: examples/sceneSampleLayout.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="locks" interactive="0" id="YmxvY2tpZDQx">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="3130" label="Resource" interactive="0" id="YmxvY2tpZDQy">
               <Data>
                  <Layout rotation="0" left="25" right="273" top="43" bottom="255" />
                  <Resource resource="4" hResource="1">
                     <AspectRatio maintain="0" />
                  </Resource>
               </Data>
            </Player>
            <Player player="3130" label="Resource" interactive="0" id="YmxvY2tpZDQz">
               <Data>
                  <Layout rotation="0" horizontalCenter="30" verticalCenter="10" width="100" height="100" />
                  <Resource resource="7" hResource="4">
                     <AspectRatio maintain="0" />
                  </Resource>
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>

================================================
FILE: examples/twitterv3.xml
================================================
Scene
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="ywitter csns" interactive="0" mimeType="Json.twitter" id="YmxvY2tpZDYx">
   <Data>
      <Layout rotation="0" x="0" y="0" width="400" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDYy">
               <Data>
                  <Layout rotation="0" x="27" y="19" width="100" height="100" />
                  <XmlItem fieldName="name" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDYz">
               <Data>
                  <Layout rotation="0" x="251" y="19" width="100" height="100" />
                  <XmlItem fieldName="screen_name" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY0">
               <Data>
                  <Layout rotation="0" x="138" y="72" width="100" height="100" />
                  <XmlItem fieldName="profile_background_image_url" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY1">
               <Data>
                  <Layout rotation="0" x="38" y="192" width="100" height="100" />
                  <XmlItem fieldName="created_at" fieldType="text">
                     <Font fontSize="22" fontColor="255" fontFamily="Arial" fontWeight="bold" fontStyle="italic" textDecoration="underline" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY2">
               <Data>
                  <Layout rotation="0" x="138" y="36" width="100" height="100" />
                  <XmlItem fieldName="text" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY3">
               <Data>
                  <Layout rotation="0" x="251" y="72" width="100" height="100" />
                  <XmlItem fieldName="profile_image_url" fieldType="resource" maintainAspectRatio="1" />
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>


Player
<?xml version="1.0" encoding="UTF-8"?>
<Player player="6230" label="" interactive="0">
   <Data>
      <Json providerType="twitter" itemsPath="" slideShow="1" itemInterval="5" playVideoInFull="0" randomOrder="0">
         <Player src="37" hDataSrc="11" />
         <Data token="d1b05f94-df59-46d4-b5b0-05536f48ab44" screenName="" />
      </Json>
   </Data>
</Player>

================================================
FILE: examples/worldweather.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Player player="3510" label="WeatherScene" interactive="0" mimeType="Json.weather" id="YmxvY2tpZDY3">
   <Data>
      <Layout rotation="0" x="0" y="0" width="900" height="400" />
      <Scene defaultDuration="10">
         <Layout>
            <BasicLayout />
         </Layout>
         <Players>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY4">
               <Data>
                  <Layout rotation="0" x="0" y="0" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.current_condition[0].iconPath" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDY5">
               <Data>
                  <Layout rotation="0" x="100" y="0" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.current_condition[0].temp_@" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDcw">
               <Data>
                  <Layout rotation="0" x="0" y="231" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.weather[0].day" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDcx">
               <Data>
                  <Layout rotation="0" x="227" y="131" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.weather[0].maxtemp@" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDcy">
               <Data>
                  <Layout rotation="0" x="247" y="0" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.current_condition[0].humidity" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDcz">
               <Data>
                  <Layout rotation="0" x="0" y="131" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.weather[0].iconPath" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc0">
               <Data>
                  <Layout rotation="0" x="100" y="131" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.weather[0].mintemp@" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc1">
               <Data>
                  <Layout rotation="0" x="113" y="231" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.weather[1].iconPath" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc2">
               <Data>
                  <Layout rotation="0" x="270" y="250" width="100" height="100" />
                  <XmlItem fieldName="$[0].data.weather[1].mintemp@" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc3">
               <Data>
                  <Layout rotation="0" x="0" y="350" width="100" height="48" />
                  <XmlItem fieldName="$[0].data.weather[1].maxtemp@" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc4">
               <Data>
                  <Layout rotation="0" x="678" y="31" width="100" height="100" />
                  <XmlItem fieldName="link" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDc5">
               <Data>
                  <Layout rotation="0" x="678" y="168" width="100" height="100" />
                  <XmlItem fieldName="$image_url_75x75" fieldType="resource" maintainAspectRatio="0" />
               </Data>
            </Player>
            <Player player="4310" label="JSON Item" interactive="0" id="YmxvY2tpZDgw">
               <Data>
                  <Layout rotation="0" x="678" y="288" width="100" height="100" />
                  <XmlItem fieldName="$birth_month" fieldType="text">
                     <Font fontSize="16" fontColor="65280" fontFamily="Arial" fontWeight="normal" fontStyle="normal" textDecoration="none" textAlign="left" />
                  </XmlItem>
               </Data>
            </Player>
         </Players>
      </Scene>
   </Data>
</Player>



================================================
FILE: notes.txt
================================================
////////////// NOTES ////////////////



need to find a way to remove core-js from videoangular definitions
sed -i.bak '/core-js/d' './node_modules/videogular2/src/core/vg-media/i-playable.d.ts ; sed -i.bak '/core-js/d' './node_modules/videogular2/src/core/services/vg-api.d.ts'


reload video:
https://github.com/videogular/videogular2/issues/442


npm uninstall -g angular-cli @angular/cli
npm cache clean
npm install -g @angular/cli@latest
Local project package:

rm -rf node_modules dist # use rmdir on Windows
npm install --save-dev @angular/cli@latest <<<<<<<<<<<<<<<<
npm install


ng init --ng4


==================================================================================================================
debug sessions:

reflection:
    http://127.0.0.1:8080/src/create_reflection.html

local:
    http://localhost:4208/

campaigns:
    http://localhost:4208/campaigns

FasterqRemoteStatus (base64):
    http://localhost:4208/index.html?mode=remoteStatus&param=eyJjYWxsX3R5cGUiOiJFTUFJTCIsInNlcnZpY2VfaWQiOjE5LCJ2ZXJpZmljYXRpb24iOjY5NSwibGluZV9pZCI6IjIxMTAiLCJsaW5lX25hbWUiOiIgbmV3IGxpbmUgMSIsImJ1c2luZXNzX2lkIjoiMzU4NjEzIiwic21zIjoiIiwiZW1haWwiOiJib3JuMm5ldEBnbWFpbC5jb20iLCJkYXRlIjoiNC83LzIwMTcifQ==

FasterqTerminal (rc4):
    http://localhost:4208/index.html?data=5b6bcb27d4547657cfe4e021e1c6761fe8b4a33c3d62983ee8f6b0ccbded7b8a6578e47862f0aca0ca7ac070a1a27121fe17f5c496483ee08cf0a061440f277a3e49dcaaf3bb198c71033ed398d60166e3b82c9153f4c3a6d346f7d11b3016

auto-login local demo_lite
	http://localhost:4208/index.html?param=dXNlcj1kZW1vX2xpdGVAbXMuY29tLHBhc3M9cGFzc3dvcmQ=

auto-login remote demo_lite
	https://secure.digitalsignage.com/studioweb/index.html?param=dXNlcj1kZW1vX2xpdGVAbXMuY29tLHBhc3M9cGFzc3dvcmQ=

auto-login remote demo_lite
    https://goo.gl/rru309

auto-login local lite22
	http://localhost:4208/index.html?param=dXNlcj1saXRlMjJAbXMuY29tLHBhc3M9MTIzMTIz

auto-login local lite90
	http://localhost:4208/index.html?param=dXNlcj1saXRlOTBAbXMuY29tLHBhc3M9MTIzMTIz

auto-login local lite28
	http://localhost:4208/index.html?param=dXNlcj1saXRlMjhAbXMuY29tLHBhc3M9MTIzMTIz


==================================================================================================================

revert webpack ng tools: npm install --save @ngtools/webpack@1.2.4


==================================================================================================================


clear cache: npm clear cache

npm install @angular/cli@latest -g
npm install -g @angular/cli


==================================================================================================================

reflection Usage:

to run this script and generate interface sdk / msdb:

run live-server inside /cygdrive/c/msweb/studiolite

open browser to:

http://127.0.0.1:8080/src/create_reflection.html


==================================================================================================================

Switching fabric versions:

add/remove import "fabric"; from app-modules.ts
add/remove form angular-cli.json:
"../node_modules/fabric/dist/fabric.js"
or
angular-cli.json: "./libs/fabric.require1-4-12.js",
or
to load remotely:
<script src="https://secure.digitalsignage.com/studioweb/fabric1-4-2.min.js"></script>
<script src="https://secure.digitalsignage.com/studioweb/fabric.require1-4-12.min.js"></script>

==================================================================================================================


<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/shim.min.js"></script>-->
<!--<script>-->
    <!--(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){-->
            <!--(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),-->
        <!--m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)-->
    <!--})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');-->

    <!--ga('create', 'UA-36671151-9', 'auto');-->
    <!--ga('send', 'pageview');-->
<!--</script>-->





================================================
FILE: package.json
================================================
{
  "name": "studioweb",
  "version": "0.1.778",
  "license": "Modified GPL (see readme.md)",
  "angular-cli": {},
  "scripts": {
    "postinstall": "npm run dev",
    "compodoc": "./node_modules/.bin/compodoc -p src/tsconfig.json",
    "x_disk-build": "ng build && npm run sw",
    "x_disk-serve": "cd dist && live-server --port=4208 --host=localhost --entry-file=/index.html",
    "x_reg_release": "rm -r -f ./dist && npm run x_bump && npm run x_prod && npm run x_rsync",
    "x_start": "ng serve",
    "x_lint": "tslint \"src/**/*.ts\"",
    "x_prod_jit": "ng build --target=production --base-href ./ --aot fiw.alse",
    "x_prod_aot": "ng build --target=production --base-href ./ --aot true",
    "x_prod_aot_hebrew": "ng build --locale iw -i18n-file src/locale/iw.xtb --i18n-format xtb --target=production --base-href ./ --aot true",
    "x_rsync": "rsync --progress  --chmod=ug=rwx --chmod=o=rx -av --stats -e ssh /cygdrive/c/msweb/studiolite/dist/ Sean@secure.digitalsignage.com:/var/www/sites/dynasite/htdocs/_msportal/_js/_node/_studioweb",
    "x_rsync_docs": "rsync --progress  --chmod=ug=rwx --chmod=o=rx -av --stats -e ssh /cygdrive/c/msweb/studiolite/documentation/ Sean@digitalsignage.com:/var/www/sites/mediasignage.com/htdocs/lite_docs",
    "x_rsync_iw": "rsync --progress  --chmod=ug=rwx --chmod=o=rx -av --stats -e ssh /cygdrive/c/msweb/studiolite/dist/ Sean@digitalsignage.com:/var/www/sites/dynasite/htdocs/_msportal/_js/_node/_studioweb/locale/iw",
    "x_sw": "sw-precache --root=dist --config=sw-precache-config.js",
    "x_bump": "gulp x_bump",
    "x_cssDev": "gulp cssDev",
    "x_cssRelease": "gulp cssRelease",
    "x_translate": "node_modules/.bin/ng-xi18n -p src/tsconfig.json --i18nFormat=xmb",
    "x_node_copy": "cp -r -f ./node_modules/ ./dist/out-tsc/",
    "cp module": "cp ./node_modules/ng-mslib/src/myng-component.ts ./node_modules/ng-mslib/dist/",
    "generate_locale": "npm run x_node_copy && npm run x_translate",
    "hmr": "ng serve --port 4208 --aot false --hmr -e=hmr",
    "dev": "npm run x_cssDev && ng serve --port 4208 --aot false",
    "release_aot_hebrew": "npm run x_cssRelease && rm -r -f ./dist && npm run x_bump && npm run x_prod_aot_hebrew && npm run x_sw && npm run x_rsync_iw",
    "release_aot": "npm run x_cssRelease && rm -r -f ./dist && npm run x_bump && npm run x_prod_aot && npm run x_sw && npm run x_rsync",
    "release_aot_no_sync": "npm run x_cssRelease && rm -r -f ./dist && npm run x_bump && npm run x_prod_aot && npm run x_sw",
    "release_jit": "npm run x_cssRelease && rm -r -f ./dist && npm run x_bump && npm run x_prod_jit && npm run x_sw && npm run x_rsync"
  },
  "dependencies": {
    "@angular/animations": "^4.3.1",
    "@angular/common": "^4.3.1",
    "@angular/compiler": "^4.3.1",
    "@angular/core": "^4.3.1",
    "@angular/forms": "^4.3.1",
    "@angular/http": "^4.3.1",
    "@angular/platform-browser": "^4.3.1",
    "@angular/platform-browser-dynamic": "^4.3.1",
    "@angular/router": "^4.3.1",
    "@ngrx/core": "^1.2.0",
    "@ngrx/effects": "^2.0.0",
    "@ngrx/store": "^2.2.1",
    "@ngrx/store-devtools": "^3.2.3",
    "@ngtools/webpack": "^1.2.4",
    "@types/bootbox": "^4.4.30",
    "@types/gsap": "1.19.0",
    "@types/lodash": "^4.14.52",
    "@types/xdate": "^0.8.27",
    "angular-pipes": "^5.4.0",
    "angular2-fontawesome": "~0.8.0",
    "angular2-google-maps": "^0.17.0",
    "angular2-highcharts": "^0.4.1",
    "angular2-redux-util": "^0.8.86",
    "angular2-uuid": "^1.1.0",
    "bootbox": "^4.4.0",
    "bootstrap": "^3.3.7",
    "core-js": "^2.4.1",
    "fabric": "git://github.com/born2net/fabric.js.git",
    "font-awesome": "~4.7.0",
    "gsap": "1.19.1",
    "gulp-bump": "^2.5.1",
    "hammerjs": "^2.0.8",
    "immutable": "^3.8.1",
    "jquery": "^3.1.1",
    "lodash": "^4.17.4",
    "moment": "^2.17.1",
    "ng-mslib": "^1.0.109",
    "ng-validators": "^0.2.1",
    "ng2-bs3-modal": "^0.10.4",
    "ng2-toastr": "^4.1.2",
    "ngrx-store-freeze": "^0.1.6",
    "ngx-bootstrap": "^1.7.1",
    "ngx-color-picker": "^4.0.0",
    "ngx-contextmenu": "^1.0.3",
    "platform": "^1.3.3",
    "primeng": "^4.0.0-rc.2",
    "print-js": "^1.0.34",
    "redux": "^3.6.0",
    "redux-thunk": "^2.1.0",
    "reselect": "^2.5.4",
    "rxjs": "^5.4.2",
    "stacktrace-js": "^1.3.1",
    "string": "^3.3.3",
    "ts-helpers": "^1.1.1",
    "typescript": "2.4.0",
    "videogular2": "^5.2.0",
    "x2js": "^3.1.0",
    "xdate": "^0.8.0",
    "xml2js": "^0.4.17",
    "zone.js": "^0.8.12"
  },
  "devDependencies": {
    "@angular/cli": "^1.0.1",
    "@angular/compiler-cli": "^4.3.1",
    "@angular/language-service": "^4.3.1",
    "@angularclass/hmr": "^1.2.2",
    "@compodoc/compodoc": "^1.0.0-beta.9",
    "@types/core-js": "^0.9.41",
    "@types/hammerjs": "^2.0.33",
    "@types/immutable": "^3.8.6",
    "@types/jasmine": "2.5.38",
    "@types/jquery": "^2.0.34",
    "@types/node": "^6.0.42",
    "@types/x2js": "0.0.27",
    "autoprefixer": "^6.6.1",
    "co": "^4.6.0",
    "codelyzer": "~2.0.0",
    "fs-extra": "^2.1.2",
    "gulp": "^3.9.1",
    "gulp-comment-swap": "0.0.10",
    "gulp-concat": "^2.6.0",
    "gulp-git": "^1.6.0",
    "gulp-inject": "^1.3.1",
    "gulp-insert": "^0.5.0",
    "gulp-replace": "^0.5.4",
    "gulp-rimraf": "^0.2.0",
    "gulp-shell": "^0.5.2",
    "gulp-sourcemaps": "^1.6.0",
    "gulp-tslint": "^4.3.1",
    "gulp-tslint-stylish": "^1.1.1",
    "gulp-typedoc": "^1.2.1",
    "gulp-typescript": "^3.0.1",
    "gulp-uglify": "^1.2.0",
    "gulp-util": "^3.0.7",
    "gulp-watch": "^4.2.4",
    "node-fetch": "^1.6.3",
    "replace": "^0.3.0",
    "rsync": "^0.5.0",
    "run-sequence": "^1.2.2",
    "sw-precache": "4.2.1",
    "ts-node": "~2.0.0",
    "tslint": "~4.4.2",
    "webdriver-manager": "10.2.5",
    "xml2js": "^0.4.17"
  }
}


================================================
FILE: src/Lib.ts
================================================
/** Common Library **/
import {Injectable} from "@angular/core";
import * as Immutable from "immutable";
import {List, Map} from "immutable";
import * as _ from "lodash";
import * as moment from 'moment'
import {Observable} from "rxjs";
import {PartialObserver} from "rxjs/Observer";
import {AnonymousSubscription} from "rxjs/Subscription";
import {environment} from "./environments/environment";
import {FormGroup, ValidatorFn} from "@angular/forms";

export var simpleRegExp = '[\\[\\]\\-A-Za-z0-9_~=!:@\.|\ ]{3,50}';
//(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})
export var urlRegExp = `(https?:\/\/(?:www\.|(?!www))\.*)`


/** this control value must be equal to given control's value */
export function equalValueValidator(targetKey: string, toMatchKey: string): ValidatorFn {
    return (group: FormGroup): { [key: string]: any } => {
        const target = group.controls[targetKey];
        const toMatch = group.controls[toMatchKey];
        if (target.touched && toMatch.touched) {
            const isMatch = target.value === toMatch.value;
            // set equal value error on dirty controls
            if (!isMatch && target.valid && toMatch.valid) {
                toMatch.setErrors({equalValue: targetKey});
                const message = targetKey + ' != ' + toMatchKey;
                return {'equalValue': message};
            }
            if (isMatch && toMatch.hasError('equalValue')) {
                toMatch.setErrors(null);
            }
        }

        return null;
    };
}

const rxjsDebugger = true;
const rc4Key = '226a3a42f34ddd778ed2c3ba56644315';
Observable.prototype.sub = Observable.prototype.subscribe;

window['con'] = (msg, stringify) => {
    if (Lib.DevMode()) {
        if (stringify)
            msg = JSON.stringify(msg);
        console.info(`${_.uniqueId()}:${new Date().toLocaleTimeString()} ${msg}`);
    }

}

declare module 'rxjs/Observable' {
    interface Observable<T> {
        debug: (...any) => Observable<T>
    }

    // interface Observable<T> {
    //     get(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;
    // }
}

declare module "rxjs/Observable" {
    interface Observable<T> {
        sub: (observerOrNext: PartialObserver<T> | ((value: T) => void),
              error: (error: any) => void,
              complete?: () => void) => AnonymousSubscription;
    }
}

Observable.prototype.debug = function (message: string) {
    return this.do(
        nextValue => {
            if (rxjsDebugger) {
                console.debug('ObsDebug-I: ' + message, (nextValue.type || nextValue))
            }
        },
        error => {
            if (rxjsDebugger) {
                console.error('ObsDebug-E: ' + message, error)
            }
        },
        () => {
            if (rxjsDebugger) {
                console.debug('ObsDebug-C: ' + message);
                /** for DevTools colors: **/
                //console.log("%cObsDebug-C %s", "color: red", message);
            }
        }
    );
};

@Injectable()
export class Lib {

    static Con(msg: any, stringify?: boolean) {
        con(msg, stringify)
    }

    /**
     *
     * @param dateString format of date + time: /Date(1469923200000+0000)/"
     * @returns {any}
     * @constructor
     */
    static ProcessDateField(dateString: string, addDay: boolean = false): any {
        if (_.isUndefined(dateString))
            return '';
        var epoc = dateString.match(/Date\((.*)\)/)
        if (epoc[1]) {
            var date = epoc[1].split('+')[0]
            var time = epoc[1].split('+')[1]
            var result;
            //todo: adding +1 on save to server hack, need to ask Alon
            if (addDay) {
                result = moment(Number(date)).add(1, 'day');
            } else {
                result = moment(Number(date));
            }
            return moment(result).format('YYYY-MM-DD');
            /** moment examples
             var a = moment().unix().format()
             console.log(moment.now());
             console.log(moment().format('dddd'));
             console.log(moment().startOf('day').fromNow());
             **/
        }
    }

    static ToValidNumber(i_value): number {
        if (_.isNaN(i_value))
            return 0;
        if (_.isNumber(i_value))
            return i_value;
        return 0;
    }

    static Try(i_fn: () => void) {
        try {
            i_fn();
        } catch (e) {
            if (Lib.DevMode())
                console.error('Lib.Try exception in function: ' + i_fn + ' ' + e);
        }
    }

    /** deep compare two objects **/
    static IsEqual(obj1, obj2) {
        function _equals(obj1, obj2) {
            var clone = $.extend(true, {}, obj1);
            var cloneStr = JSON.stringify(clone);
            return cloneStr === JSON.stringify($.extend(true, clone, obj2));
        }

        return _equals(obj1, obj2) && _equals(obj2, obj1);
    }

    static GetThemeColor() {
        var light = true;
        if (light)
            return '#428ac9 ';
        return '#eb7c66';
    }

    static EncryptUserPass(i_user, i_pass) {
        var rc4 = new RC4(rc4Key);
        var crumb = i_user + ':SignageStudioLite:' + i_pass + ':' + ' USER'
        return rc4.doEncrypt(crumb);
    }

    static AlertOnLeave() {
        if (!Lib.DevMode()) {
            window.onbeforeunload = function (e) {
                var message = "Did you save your changes?",
                    e = e || window.event;
                // For IE and Firefox
                if (e) {
                    e.returnValue = message;
                }
                // For Safari
                return message;
            };
        }

    }

    /**
     Format a seconds value into an object broken into hours / minutes / seconds
     @method formatSecondsToObject
     @param {Number} i_totalSeconds
     @return {Object}
     **/
    static FormatSecondsToObject(i_totalSeconds) {
        var seconds: any = 0;
        var minutes: any = 0;
        var hours: any = 0;
        var totalInSeconds = i_totalSeconds;
        if (i_totalSeconds >= 3600) {
            hours = Math.floor(i_totalSeconds / 3600);
            i_totalSeconds = i_totalSeconds - (hours * 3600);
        }
        if (i_totalSeconds >= 60) {
            minutes = Math.floor(i_totalSeconds / 60);
            seconds = i_totalSeconds - (minutes * 60);
        }
        if (hours == 0 && minutes == 0)
            seconds = i_totalSeconds;
        var playbackLength = {
            hours: parseInt(hours),
            minutes: parseInt(minutes),
            seconds: parseInt(seconds),
            totalInSeconds: parseInt(totalInSeconds)
        };
        return playbackLength;
    }

    /**
     *
     * @param dateString format of date + time: /Date(1469923200000+0000)/"
     * @returns {any}
     * @constructor
     */
    static ProcessDateFieldToUnix(dateString: string, addDay: boolean = false): any {
        if (_.isUndefined(dateString))
            return '';
        //todo: adding +1 on save to server hack, need to ask Alon
        if (addDay) {
            return moment(dateString, 'YYYY-MM-DD').add(0, 'day').valueOf();
        } else {
            return moment(dateString, 'YYYY-MM-DD').valueOf();
        }
    }

    /**
     Pad zeros
     @method padZeros
     @param {Number} n value
     @param {Number} width pre-pad width
     @param {Number} z negative as in '-'
     @return {Number} zero padded string
     **/
    static PadZeros(n, width, z) {
        z = z || '0';
        n = n + '';
        return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
    }

    /**
     Convert number or string to float with double precision
     @method parseToFloatDouble
     @param {Object} i_value
     @return {Number}
     **/
    static ParseToFloatDouble(i_value: any): number {
        return parseFloat(parseFloat(i_value).toFixed(2));
    }

    /**
     Capitilize first letter
     @method capitaliseFirst
     @param {String} string
     @return {String} string
     **/
    static CapitaliseFirst(string) {
        return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
    }

    /**
     base64Encode
     @method base64Encode
     @param {String}
     @return {String}
     **/
    static Base64Encode(str) {
        var c1, c2, c3;
        var Base64 = {
            _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function (e) {
                var t = "";
                var n, r, i, s, o, u, a;
                var f = 0;
                e = Base64._utf8_encode(e);
                while (f < e.length) {
                    n = e.charCodeAt(f++);
                    r = e.charCodeAt(f++);
                    i = e.charCodeAt(f++);
                    s = n >> 2;
                    o = (n & 3) << 4 | r >> 4;
                    u = (r & 15) << 2 | i >> 6;
                    a = i & 63;
                    if (isNaN(r)) {
                        u = a = 64
                    } else if (isNaN(i)) {
                        a = 64
                    }
                    t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
                }
                return t
            }, decode: function (e) {
                var t = "";
                var n, r, i;
                var s, o, u, a;
                var f = 0;
                e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
                while (f < e.length) {
                    s = this._keyStr.indexOf(e.charAt(f++));
                    o = this._keyStr.indexOf(e.charAt(f++));
                    u = this._keyStr.indexOf(e.charAt(f++));
                    a = this._keyStr.indexOf(e.charAt(f++));
                    n = s << 2 | o >> 4;
                    r = (o & 15) << 4 | u >> 2;
                    i = (u & 3) << 6 | a;
                    t = t + String.fromCharCode(n);
                    if (u != 64) {
                        t = t + String.fromCharCode(r)
                    }
                    if (a != 64) {
                        t = t + String.fromCharCode(i)
                    }
                }
                t = Base64._utf8_decode(t);
                return t
            }, _utf8_encode: function (e) {
                e = e.replace(/\r\n/g, "\n");
                var t = "";
                for (var n = 0; n < e.length; n++) {
                    var r = e.charCodeAt(n);
                    if (r < 128) {
                        t += String.fromCharCode(r)
                    } else if (r > 127 && r < 2048) {
                        t += String.fromCharCode(r >> 6 | 192);
                        t += String.fromCharCode(r & 63 | 128)
                    } else {
                        t += String.fromCharCode(r >> 12 | 224);
                        t += String.fromCharCode(r >> 6 & 63 | 128);
                        t += String.fromCharCode(r & 63 | 128)
                    }
                }
                return t
            }, _utf8_decode: function (e) {
                var t = "";
                var n = 0;
                var r = c1 = c2 = 0;
                while (n < e.length) {
                    r = e.charCodeAt(n);
                    if (r < 128) {
                        t += String.fromCharCode(r);
                        n++
                    } else if (r > 191 && r < 224) {
                        c2 = e.charCodeAt(n + 1);
                        t += String.fromCharCode((r & 31) << 6 | c2 & 63);
                        n += 2
                    } else {
                        c2 = e.charCodeAt(n + 1);
                        c3 = e.charCodeAt(n + 2);
                        t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
                        n += 3
                    }
                }
                return t
            }
        }
        return Base64.encode(str);
    }

    /**
     base64Decode
     @method base64Decode
     @param {String}
     @return {String}
     **/
    static Base64Decode(str) {
        var c1, c2, c3;
        var Base64 = {
            _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function (e) {
                var t = "";
                var n, r, i, s, o, u, a;
                var f = 0;
                e = Base64._utf8_encode(e);
                while (f < e.length) {
                    n = e.charCodeAt(f++);
                    r = e.charCodeAt(f++);
                    i = e.charCodeAt(f++);
                    s = n >> 2;
                    o = (n & 3) << 4 | r >> 4;
                    u = (r & 15) << 2 | i >> 6;
                    a = i & 63;
                    if (isNaN(r)) {
                        u = a = 64
                    } else if (isNaN(i)) {
                        a = 64
                    }
                    t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
                }
                return t
            }, decode: function (e) {
                var t = "";
                var n, r, i;
                var s, o, u, a;
                var f = 0;
                e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
                while (f < e.length) {
                    s = this._keyStr.indexOf(e.charAt(f++));
                    o = this._keyStr.indexOf(e.charAt(f++));
                    u = this._keyStr.indexOf(e.charAt(f++));
                    a = this._keyStr.indexOf(e.charAt(f++));
                    n = s << 2 | o >> 4;
                    r = (o & 15) << 4 | u >> 2;
                    i = (u & 3) << 6 | a;
                    t = t + String.fromCharCode(n);
                    if (u != 64) {
                        t = t + String.fromCharCode(r)
                    }
                    if (a != 64) {
                        t = t + String.fromCharCode(i)
                    }
                }
                t = Base64._utf8_decode(t);
                return t
            }, _utf8_encode: function (e) {
                e = e.replace(/\r\n/g, "\n");
                var t = "";
                for (var n = 0; n < e.length; n++) {
                    var r = e.charCodeAt(n);
                    if (r < 128) {
                        t += String.fromCharCode(r)
                    } else if (r > 127 && r < 2048) {
                        t += String.fromCharCode(r >> 6 | 192);
                        t += String.fromCharCode(r & 63 | 128)
                    } else {
                        t += String.fromCharCode(r >> 12 | 224);
                        t += String.fromCharCode(r >> 6 & 63 | 128);
                        t += String.fromCharCode(r & 63 | 128)
                    }
                }
                return t
            }, _utf8_decode: function (e) {
                var t = "";
                var n = 0;
                var r = c1 = c2 = 0;
                while (n < e.length) {
                    r = e.charCodeAt(n);
                    if (r < 128) {
                        t += String.fromCharCode(r);
                        n++
                    } else if (r > 191 && r < 224) {
                        c2 = e.charCodeAt(n + 1);
                        t += String.fromCharCode((r & 31) << 6 | c2 & 63);
                        n += 2
                    } else {
                        c2 = e.charCodeAt(n + 1);
                        c3 = e.charCodeAt(n + 2);
                        t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
                        n += 3
                    }
                }
                return t
            }
        }
        return Base64.decode(str);
    }

    /**
     Simplify a string to basic character set
     @method cleanChar
     @param {String} value
     @return {String} cleaned string
     **/
    static CleanChar(value) {
        if (value == null)
            value = '';
        if ($.isNumeric(value))
            return value;
        value = value.replace(/,/g, ' ');
        value = value.replace(/\\}/g, ' ');
        value = value.replace(/{/g, ' ');
        value = value.replace(/"/g, ' ');
        value = value.replace(/'/g, ' ');
        value = value.replace(/&/g, 'and');
        value = value.replace(/>/g, ' ');
        value = value.replace(/</g, ' ');
        value = value.replace(/\[/g, ' ');
        value = value.replace(/]/g, ' ');
        return value;
    }


    /**
     Remove characters that a problemtaic to app / js
     **/
    static CleanProbCharacters(i_string: string, i_restriction: number) {
        switch (i_restriction) {
            case 1: {
                i_string = i_string.replace(/{/ig, "(");
                i_string = i_string.replace(/}/ig, ")");
            }
            case 2: {
                i_string = i_string.replace(/</ig, "(");
                i_string = i_string.replace(/>/ig, ")");
            }
            case 3: {
                i_string = i_string.replace(/&/ig, "and");
            }
            case 4: {
                i_string = i_string.replace(/"/ig, "`");
                i_string = i_string.replace(/'/ig, "`");
            }
        }
        return i_string;
    }

    static IsNumber(value) {
        if (_.isNaN(Number(value))) return false;
        return true;
    }

    static CleanCharForXml(value: any): any {
        var clean = function (value: string) {
            if (_.isUndefined(value))
                return '';
            if (_.isNull(value))
                return '';
            if (_.isNumber(value))
                return value;
            if (_.isBoolean(value))
                return value;
            value = value.replace(/\}/g, ' ');
            value = value.replace(/%/g, ' ');
            value = value.replace(/{/g, ' ');
            value = value.replace(/"/g, '`');
            value = value.replace(/'/g, '`');
            value = value.replace(/&/g, 'and');
            value = value.replace(/>/g, ' ');
            value = value.replace(/</g, ' ');
            value = value.replace(/\[/g, ' ');
            value = value.replace(/]/g, ' ');
            value = value.replace(/#/g, ' ');
            value = value.replace(/\$/g, ' ');
            value = value.replace(/\^/g, ' ');
            value = value.replace(/;/g, ' ');
            return value
        }
        if (_.isUndefined(value))
            return '';
        if (_.isNull(value))
            return '';
        if (_.isNumber(value))
            return value;
        if (_.isBoolean(value))
            return value;
        if (_.isString(value))
            return clean(value);
        _.forEach(value, (v, k) => {
            // currently we don't support / clean arrays
            if (_.isArray(value[k]))
                return value[k] = v;
            value[k] = clean(v);
        });
        return value;
    }

    static UnionList(a: List<any>, b: List<any>) {
        return a.toSet().union(b.toSet()).toList();
    }

    static ProcessHourStartEnd(value: string, key: string): any {
        if (_.isUndefined(!value))
            return '';
        if (key == 'hourStart')
            return `${value}:00`;
        return `${value}:59`;
    }

    /**
     * CheckFoundIndex will check if a return value is -1 and error out if in dev mode (list.findIndex or indexOf for example)
     * @param i_value
     * @param i_message
     * @returns {number}
     * @constructor
     */
    static CheckFoundIndex(i_value: number, i_message: string = 'CheckFoundIndex did not find index'): number {
        if (i_value === -1) {
            console.log(i_message);
            if (Lib.DevMode()) {
                alert(i_message);
                throw Error(i_message);
            }
        }
        return i_value;
    }

    // static GetCompSelector(i_constructor) {
    //     return 'need to fix 2';
    // if (!Lib.DevMode())
    //     return;
    // var annotations = Reflect.getMetadata('annotations', i_constructor);
    // var componentMetadata = annotations.find(annotation => {
    //     return (annotation instanceof Component);
    // });
    // return componentMetadata.selector;
    // }

    static BootboxHide(i_time = 1500) {
        setTimeout(() => {
            bootbox.hideAll();
        }, i_time)
    }

    static DateToAbsolute(year, month) {
        return year * 12 + month;
    }

    static DateFromAbsolute(value: number) {
        var year = Math.floor(value / 12);
        var month = value % 12 + 1;
        return {
            year,
            month
        }
    }

    static MapOfIndex(map: Map<string, any>, index: number, position: "first" | "last"): string {
        var mapJs = map.toJS();
        var mapJsPairs = _.toPairs(mapJs);
        var offset = position == 'first' ? 0 : 1;
        if (mapJsPairs[index] == undefined)
            return "0"
        return mapJsPairs[index][offset];
    }

    /**
     *  PrivilegesXmlTemplate will generate a template for priveleges in 2 possible modes
     *
     *  mode 1: just a raw template (we will ignore the values set) and this is the mode when
     *  no selPrivName and appStore params are given
     *
     *  mode 2: is when we actually serialize data to save to server and in this mode we do pass
     *  in the selPrivName and appStore which we use to retrieve current values from user appStore
     *  and generate the final XML to save to server
     *
     * @param selPrivName
     * @param appStore
     * @param callBack
     * @constructor
     */
    static Base64() {

        var _PADCHAR = "=", _ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", _VERSION = "1.0";


        function _getbyte64(s, i) {
            // This is oddly fast, except on Chrome/V8.
            // Minimal or no improvement in performance by using a
            // object with properties mapping chars to value (eg. 'A': 0)

            var idx = _ALPHA.indexOf(s.charAt(i));

            if (idx === -1) {
                throw "Cannot decode base64";
            }

            return idx;
        }


        function _decode(s) {
            var pads = 0, i, b10, imax = s.length, x = [];

            s = String(s);

            if (imax === 0) {
                return s;
            }

            if (imax % 4 !== 0) {
                throw "Cannot decode base64";
            }

            if (s.charAt(imax - 1) === _PADCHAR) {
                pads = 1;

                if (s.charAt(imax - 2) === _PADCHAR) {
                    pads = 2;
                }

                // either way, we want to ignore this last block
                imax -= 4;
            }

            for (i = 0; i < imax; i += 4) {
                b10 = ( _getbyte64(s, i) << 18 ) | ( _getbyte64(s, i + 1) << 12 ) | ( _getbyte64(s, i + 2) << 6 ) | _getbyte64(s, i + 3);
                x.push(String.fromCharCode(b10 >> 16, ( b10 >> 8 ) & 0xff, b10 & 0xff));
            }

            switch (pads) {
                case 1:
                    b10 = ( _getbyte64(s, i) << 18 ) | ( _getbyte64(s, i + 1) << 12 ) | ( _getbyte64(s, i + 2) << 6 );
                    x.push(String.fromCharCode(b10 >> 16, ( b10 >> 8 ) & 0xff));
                    break;

                case 2:
                    b10 = ( _getbyte64(s, i) << 18) | ( _getbyte64(s, i + 1) << 12 );
                    x.push(String.fromCharCode(b10 >> 16));
                    break;
            }

            return x.join("");
        }


        function _getbyte(s, i) {
            var x = s.charCodeAt(i);

            if (x > 255) {
                throw "INVALID_CHARACTER_ERR: DOM Exception 5";
            }

            return x;
        }


        function _encode(s) {
            if (arguments.length !== 1) {
                throw "SyntaxError: exactly one argument required";
            }

            s = String(s);

            var i, b10, x = [], imax = s.length - s.length % 3;

            if (s.length === 0) {
                return s;
            }

            for (i = 0; i < imax; i += 3) {
                b10 = ( _getbyte(s, i) << 16 ) | ( _getbyte(s, i + 1) << 8 ) | _getbyte(s, i + 2);
                x.push(_ALPHA.charAt(b10 >> 18));
                x.push(_ALPHA.charAt(( b10 >> 12 ) & 0x3F));
                x.push(_ALPHA.charAt(( b10 >> 6 ) & 0x3f));
                x.push(_ALPHA.charAt(b10 & 0x3f));
            }

            switch (s.length - imax) {
                case 1:
                    b10 = _getbyte(s, i) << 16;
                    x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt(( b10 >> 12 ) & 0x3F) + _PADCHAR + _PADCHAR);
                    break;

                case 2:
                    b10 = ( _getbyte(s, i) << 16 ) | ( _getbyte(s, i + 1) << 8 );
                    x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt(( b10 >> 12 ) & 0x3F) + _ALPHA.charAt(( b10 >> 6 ) & 0x3f) + _PADCHAR);
                    break;
            }

            return x.join("");
        }


        return {
            decode: _decode,
            encode: _encode,
            VERSION: _VERSION
        };
    }

    // static LoadComponentAsync(name: string, path: string) {
    //
    //     return System.import(path).then(c => c[name]);
    //
    //     //return System.import('/dist/public/out.js')
    //     //    .catch(function (e) {
    //     //        alert('prob loading out.js ' + e);
    //     //    }).then(function (e) {
    //     //        alert(e);
    //     //        alert(e[name]);
    //     //        alert(JSON.stringify(e));
    //     //        return System.import('App1').then(c => c[name]);
    //     //    });
    // }


    static ConstructImmutableFromTable(path): Array<any> {
        var arr = [];
        path.forEach((member) => {
            var obj = {};
            obj[member._attr.name] = {
                table: {}
            }
            for (var k in member._attr) {
                var value = member._attr[k]
                obj[member._attr.name][k] = value;
                for (var t in member.Tables["0"]._attr) {
                    var value = member.Tables["0"]._attr[t]
                    obj[member._attr.name]['table'][t] = value;
                }
            }
            arr.push(Immutable.fromJS(obj));
        });
        return arr;
    }

    static ComputeMask(accessMask): number {
        var bits = [1, 2, 4, 8, 16, 32, 64, 128];
        var computedAccessMask = 0;
        accessMask.forEach(value => {
            var bit = bits.shift();
            if (value) computedAccessMask = computedAccessMask + bit;

        })
        return computedAccessMask;
    }

    static ValidateEmail(email) {
        var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(email);
    }

    static GetAccessMask(accessMask): List<any> {
        var checks = List();
        var bits = [1, 2, 4, 8, 16, 32, 64, 128];
        for (var i = 0; i < bits.length; i++) {
            let checked = (bits[i] & accessMask) > 0 ? true : false;
            checks = checks.push(checked)
        }
        return checks;
    }

    static GetADaysMask(accessMask): List<any> {
        var checks = List();
        var bits = [1, 2, 4, 8, 16, 32, 64];
        for (var i = 0; i < bits.length; i++) {
            let checked = (bits[i] & accessMask) > 0 ? true : false;
            checks = checks.push(checked)
        }
        return checks;
    }

    static log(msg) {
        console.log(new Date().toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1") + ': ' + msg);
    }

    static guid(): string {
        function s4() {
            return Math.floor((1 + Math.random()) * 0x10000)
                .toString(16)
                .substring(1);
        }

        return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
    }

    /**
     Smart convert color (many) to decinal
     @method colorToDecimal
     @param {String} color
     @return {Number} decimal
     **/
    static ColorToDecimal(color) {
        if (color.match('rgb')) {
            color = this.RgbToHex(color);
            return this.HexToDecimal(color)
        }
        return this.HexToDecimal(color);
    }

    static ColorToHex(color) {
        if (color.match('#')) {
            return color;
        }
        if (color.match('rgb')) {
            return '#' + this.RgbToHex(color);
        }
        return '#' + color;
    }

    /**
     Hex to decimal converter
     @method hexToDecimal
     @param {String} h
     @return {Number} decimal
     **/
    static HexToDecimal(h) {
        function hexfix(str) {
            var v, w;
            v = parseInt(str, 16);	// in rrggbb
            if (str.length == 3) {
                // nybble colors - fix to hex colors
                //  0x00000rgb              -> 0x000r0g0b
                //  0x000r0g0b | 0x00r0g0b0 -> 0x00rrggbb
                w = ((v & 0xF00) << 8) | ((v & 0x0F0) << 4) | (v & 0x00F);
                v = w | (w << 4);
            }
            return v.toString(16).toUpperCase();
        }


        var h = h.replace(/#/gi, '');
        h = hexfix(h);
        return parseInt(h, 16);
    }

    /**
     RGB color to hex converter
     @method rgbToHex
     @param {Number} rgb
     @return {String} hex
     **/
    static RgbToHex(rgb) {
        function componentFromStr(numStr, percent) {
            var num = Math.max(0, parseInt(numStr, 10));
            return percent ?
                Math.floor(255 * Math.min(100, num) / 100) : Math.min(255, num);
        }

        var rgbRegex = /^rgb\(\s*(-?\d+)(%?)\s*,\s*(-?\d+)(%?)\s*,\s*(-?\d+)(%?)\s*\)$/;
        var result, r, g, b, hex = "";
        if ((result = rgbRegex.exec(rgb))) {
            r = componentFromStr(result[1], result[2]);
            g = componentFromStr(result[3], result[4]);
            b = componentFromStr(result[5], result[6]);
            hex = (0x1000000 + (r << 16) + (g << 8) + b).toString(16).slice(1);
        }
        return hex;
    }

    /**
     Decimal to hex converter
     @method decimalToHex
     @param {Number} d
     @return {String} hex
     **/
    static DecimalToHex(d) {
        var hex = Number(d).toString(16);
        hex = "000000".substr(0, 6 - hex.length) + hex;
        return hex;
    }

    static ReduxLoggerMiddleware = store => next => action => {
        // console.log("dispatching", action.type);
        let result = next(action);
        //console.log("next state", store.getState());
        return result
    };

    /**
     this.ngmslibService.inDevMode() uses url localhost (window.location.href.indexOf('localhost') > -1)
     while Lib.DevMode uses environment var
     */
    static DevMode(): boolean {
        if (environment.production) {
            return false;
        }
        return true;
    }

    static GetSamples(): Object {
        return {
            1019: 'Sushi Restaurant,pro',
            1029: 'food menu board,pro',
            1007: 'Home and Garden,pro',
            1009: 'Hotel Lobby,pro',
            1016: 'Coffee Shop,pro',
            1011: 'Hobby Shop,pro',
            1013: 'Sports Bar,pro',
            1014: 'Museum,pro',
            1017: 'Bank,pro',
            1018: 'Gas Station,pro',
            1020: 'Casino,pro',
            1000: 'Travel,pro',
            1021: 'Bicycle Shop,pro',
            1022: 'Tanning Salon,pro',
            1023: 'Pharmacy,pro',
            1024: 'Laser Away,pro',
            1025: 'Dentistry,pro',
            1026: 'Clothing store,pro',
            1027: 'Golf club,pro',
            1028: 'RC Heli,pro',
            1030: 'seven eleven,pro',
            1031: 'Subway,pro',
            1032: 'Super market,pro',
            1033: 'Investment Group,pro',
            1035: 'Synagogue,pro',
            1036: 'Dry Cleaning,pro',
            1037: 'Ice Cream Shop,pro',
            1038: 'Real Estate office,pro',
            1039: 'Night Club,pro',
            1040: 'Hockey,pro',
            1041: 'Train Station,pro',
            1042: 'Realtor,pro',
            1043: 'Toy Store,pro',
            1044: 'Indian Restaurant,pro',
            1045: 'Library,pro',
            1046: 'Movie Theater,pro',
            1047: 'Airport,pro',
            1048: 'LAX,pro',
            100310: 'Motel,pro',
            100301: 'Parks and Recreations,pro',
            100322: 'Corner Bakery,pro',
            100331: 'Retirement home,pro',
            100368: 'Navy recruiting office,pro',
            100397: 'Martial arts school,pro',
            100414: 'Supercuts,pro',
            100432: 'The UPS Store,pro',
            100438: 'Cruise One,pro',
            100483: 'Car service,pro',
            100503: 'fedex kinkos,pro',
            100510: 'veterinarian,pro',
            100556: 'YMCA,pro',
            100574: 'Tax services,pro',
            100589: 'Wedding planner,pro',
            100590: 'Cleaning services,pro',
            100620: 'Pet Training,pro',
            100661: 'Gymboree Kids,pro',
            100677: 'Trader Joes,pro',
            100695: 'Men Haircuts,pro',
            100722: 'Jiffy Lube,pro',
            100738: 'Toyota  car dealer,pro',
            100747: 'Winery,pro',
            100771: 'Savings and Loans,pro',
            100805: 'Nail Salon,pro',
            100822: 'Weight Watchers,pro',
            100899: 'Dollar Tree,pro',
            100938: 'Western Bagles,pro',
            100959: 'Kaiser Permanente,pro',
            300143: 'Funeral home,pro',
            205734: 'Church,pro',
            220354: 'College,pro',
            206782: 'Dr Waiting Room,pro',
            300769: 'NFL Stadium,pro',
            301814: 'University Campus,pro',
            303038: 'Day care,pro',
            304430: 'GameStop,pro',
            307713: 'Del Taco,pro',
            305333: 'General Hospital,pro',
            305206: 'Starbucks,pro',
            308283: 'training and fitness,pro',
            311519: 'High school hall,pro',
            309365: 'Winery,pro',
            310879: 'Law Firm,pro',
            1001: 'Health Club,pro',
            1002: 'Gym,pro',
            1003: 'Flower Shop,pro',
            1004: 'Car Dealership,pro',
            1012: 'Pet Shop,pro',
            1005: 'Hair Salon,pro',
            1209: 'Motorcycle shop,lite',
            1210: 'Sushi and Grill,lite',
            1211: 'the Coffee Shop,lite',
            1212: 'Pizzeria,lite',
            1213: 'Music Store,lite',
            1214: 'Diner,lite',
            1215: 'the Hair Salon,lite',
            1216: 'Dentist,lite',
            1203: 'Jewelry,lite',
            1217: 'Crossfit,lite',
            1218: 'Copy and Print shop,lite',
            1219: 'Antique Store,lite',
            1220: 'Clock Repair Store,lite',
            1221: 'Eastern Cuisine,lite',
            1222: 'the Toy Store,lite',
            1223: 'Pet Store Grooming,lite',
            1224: 'the Veterinarian,lite',
            1225: 'Tattoo Parlor,lite',
            1226: 'Camera Store,lite',
            1228: 'Bike shop,lite',
            1229: 'Gun Shop,lite',
            1230: 'Chiropractic Clinic,lite',
            1231: 'French Restaurant,lite',
            1233: 'Winery,lite',
            1232: 'Mexican Taqueria,lite',
            1234: 'Bistro Restaurant,lite',
            1235: 'Vitamin Shop,lite',
            1227: 'Tailor Shop,lite',
            1236: 'Computer Repair,lite',
            1237: 'Car Detail,lite',
            1238: 'Asian Restaurants,lite',
            1239: 'Marijuana Dispensary,lite',
            1240: 'the Church,lite',
            1241: 'Synagogue,lite',
            1242: 'Frozen Yogurt Store,lite',
            1244: 'Baby Day Care,lite',
            1052: 'Car wash,lite',
            1053: 'Smoke shop,lite',
            1054: 'Yoga place,lite',
            1055: 'Laundromat,lite',
            1056: 'Baby clothes,lite',
            1057: 'Travel agency,lite',
            1058: 'Real Estate agent,lite'
        }
    }

    static Xml2Json() {
        //https://github.com/metatribal/xmlToJSON
        var xmlToJSON = (function () {

            this.version = "1.3";

            var options = { // set up the default options
                mergeCDATA: true, // extract cdata and merge with text
                grokAttr: true, // convert truthy attributes to boolean, etc
                grokText: true, // convert truthy text/attr to boolean, etc
                normalize: true, // collapse multiple spaces to single space
                xmlns: true, // include namespaces as attribute in output
                namespaceKey: '_ns', // tag name for namespace objects
                textKey: '_text', // tag name for text nodes
                valueKey: '_value', // tag name for attribute values
                attrKey: '_attr', // tag for attr groups
                cdataKey: '_cdata', // tag for cdata nodes (ignored if mergeCDATA is true)
                attrsAsObject: true, // if false, key is used as prefix to name, set prefix to '' to merge children and attrs.
                stripAttrPrefix: true, // remove namespace prefixes from attributes
                stripElemPrefix: true, // for elements of same name in diff namespaces, you can enable namespaces and access the nskey property
                childrenAsArray: true // force children into arrays
            };

            var prefixMatch: any = new RegExp('(?!xmlns)^.*:/');
            var trimMatch: any = new RegExp('^\s+|\s+$g');

            this.grokType = function (sValue) {
                if (/^\s*$/.test(sValue)) {
                    return null;
                }
                if (/^(?:true|false)$/i.test(sValue)) {
                    return sValue.toLowerCase() === "true";
                }
                if (isFinite(sValue)) {
                    return parseFloat(sValue);
                }
                return sValue;
            };

            this.parseString = function (xmlString, opt) {
                return this.parseXML(this.stringToXML(xmlString), opt);
            }

            this.parseXML = function (oXMLParent, opt) {

                // initialize options
                for (var key in opt) {
                    options[key] = opt[key];
                }

                var vResult = {}, nLength = 0, sCollectedTxt = "";

                // parse namespace information
                if (options.xmlns && oXMLParent.namespaceURI) {
                    vResult[options.namespaceKey] = oXMLParent.namespaceURI;
                }

                // parse attributes
                // using attributes property instead of hasAttributes method to support older browsers
                if (oXMLParent.attributes && oXMLParent.attributes.length > 0) {
                    var vAttribs = {};

                    for (nLength; nLength < oXMLParent.attributes.length; nLength++) {
                        var oAttrib = oXMLParent.attributes.item(nLength);
                        vContent = {};
                        var attribName = '';

                        if (options.stripAttrPrefix) {
                            attribName = oAttrib.name.replace(prefixMatch, '');

                        } else {
                            attribName = oAttrib.name;
                        }

                        if (options.grokAttr) {
                            vContent[options.valueKey] = this.grokType(oAttrib.value.replace(trimMatch, ''));
                        } else {
                            vContent[options.valueKey] = oAttrib.value.replace(trimMatch, '');
                        }

                        if (options.xmlns && oAttrib.namespaceURI) {
                            vContent[options.namespaceKey] = oAttrib.namespaceURI;
                        }

                        if (options.attrsAsObject) { // attributes with same local name must enable prefixes
                            vAttribs[attribName] = vContent;
                        } else {
                            vResult[options.attrKey + attribName] = vContent;
                        }
                    }

                    if (options.attrsAsObject) {
                        vResult[options.attrKey] = vAttribs;
                    } else {
                    }
                }

                // iterate over the children
                if (oXMLParent.hasChildNodes()) {
                    for (var oNode, sProp, vContent, nItem = 0; nItem < oXMLParent.childNodes.length; nItem++) {
                        oNode = oXMLParent.childNodes.item(nItem);

                        if (oNode.nodeType === 4) {
                            if (options.mergeCDATA) {
                                sCollectedTxt += oNode.nodeValue;
                            } else {
                                if (vResult.hasOwnProperty(options.cdataKey)) {
                                    if (vResult[options.cdataKey].constructor !== Array) {
                                        vResult[options.cdataKey] = [vResult[options.cdataKey]];
                                    }
                                    vResult[options.cdataKey].push(oNode.nodeValue);

                                } else {
                                    if (options.childrenAsArray) {
                                        vResult[options.cdataKey] = [];
                                        vResult[options.cdataKey].push(oNode.nodeValue);
                                    } else {
                                        vResult[options.cdataKey] = oNode.nodeValue;
                                    }
                                }
                            }
                        } /* nodeType is "CDATASection" (4) */ else if (oNode.nodeType === 3) {
                            sCollectedTxt += oNode.nodeValue;
                        } /* nodeType is "Text" (3) */ else if (oNode.nodeType === 1) { /* nodeType is "Element" (1) */

                            if (nLength === 0) {
                                vResult = {};
                            }

                            // using nodeName to support browser (IE) implementation with no 'localName' property
                            if (options.stripElemPrefix) {
                                sProp = oNode.nodeName.replace(prefixMatch, '');
                            } else {
                                sProp = oNode.nodeName;
                            }

                            vContent = xmlToJSON.parseXML(oNode);

                            if (vResult.hasOwnProperty(sProp)) {
                                if (vResult[sProp].constructor !== Array) {
                                    vResult[sProp] = [vResult[sProp]];
                                }
                                vResult[sProp].push(vContent);

                            } else {
                                if (options.childrenAsArray) {
                                    vResult[sProp] = [];
                                    vResult[sProp].push(vContent);
                                } else {
                                    vResult[sProp] = vContent;
                                }
                                nLength++;
                            }
                        }
                    }
                } else if (!sCollectedTxt) { // no children and no text, return null
                    if (options.childrenAsArray) {
                        vResult[options.textKey] = [];
                        vResult[options.textKey].push(null);
                    } else {
                        vResult[options.textKey] = null;
                    }
                }

                if (sCollectedTxt) {
                    if (options.grokText) {
                        var value = this.grokType(sCollectedTxt.replace(trimMatch, ''));
                        if (value !== null && value !== undefined) {
                            vResult[options.textKey] = value;
                        }
                    } else if (options.normalize) {
                        vResult[options.textKey] = sCollectedTxt.replace(trimMatch, '').replace(/\s+/g, " ");
                    } else {
                        vResult[options.textKey] = sCollectedTxt.replace(trimMatch, '');
                    }
                }

                return vResult;
            }


            // Convert xmlDocument to a string
            // Returns null on failure
            this.xmlToString = function (xmlDoc) {
                try {
                    var xmlString = xmlDoc.xml ? xmlDoc.xml : (new XMLSerializer()).serializeToString(xmlDoc);
                    return xmlString;
                } catch (err) {
                    console.log('error ' + err);
                    return null;
                }
            }

            // Convert a string to XML Node Structure
            // Returns null on failure
            this.stringToXML = function (xmlString) {
                try {
                    var xmlDoc = null;

                    if (window['DOMParser']) {

                        var parser = new DOMParser();
                        xmlDoc = parser.parseFromString(xmlString, "text/xml");

                        return xmlDoc;
                    } else {
                        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                        xmlDoc.async = false;
                        xmlDoc.loadXML(xmlString);

                        return xmlDoc;
                    }
                } catch (e) {
                    console.log('error stringToXML ' + e);
                    return null;
                }
            }

            return this;
        }).call({});
        return xmlToJSON;
    }


}


/* tslint:disable */
// polyfill for Object.assign (not part of TS yet)
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
if (!Object.assign) {
    Object.defineProperty(Object, "assign", {
        enumerable: false,
        configurable: true,
        writable: true,
        value: function (target) {
            "use strict";
            if (target === undefined || target === null) {
                throw new TypeError("Cannot convert first argument to object");
            }

            var to = Object(target);
            for (var i = 1; i < arguments.length; i++) {
                var nextSource = arguments[i];
                if (nextSource === undefined || nextSource === null) {
                    continue;
                }
                nextSource = Object(nextSource);

                var keysArray = Object.keys(nextSource);
                for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
                    var nextKey = keysArray[nextIndex];
                    var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
                    if (desc !== undefined && desc.enumerable) {
                        to[nextKey] = nextSource[nextKey];
                    }
                }
            }
            return to;
        }
    });
}

// window['StringJS'] = ss.default;
// MyS.prototype = StringJS('')
// MyS.prototype.constructor = MyS;
// function MyS(val) {
//     this.setValue(val);
// }
//
// var formatMoney = function(n, c, d, t){
//     var c = isNaN(c = Math.abs(c)) ? 2 : c,
//         d = d == undefined ? "." : d,
//         t = t == undefined ? "," : t,
//         s = n < 0 ? "-" : "",
//         i:any = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
//         j = (j = i.length) > 3 ? j % 3 : 0;
//     return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
// };
//
// MyS.prototype.isBlank = function () {
//     var value = this.s;
//     if (_.isNaN(value))
//         return true;
//     if (_.isUndefined(value))
//         return true;
//     if (_.isNull(value))
//         return true;
//     if (_.isEmpty(String(value)))
//         return true;
//     return false;
// }
//
// MyS.prototype.isNotBlank = function () {
//     var value = this.s;
//   
Download .txt
gitextract_0m1po494/

├── .angular-cli.json
├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── db-design.psd
├── dev/
│   └── notes.txt
├── e2e/
│   ├── app.e2e-spec.ts
│   ├── app.po.ts
│   └── tsconfig.json
├── examples/
│   ├── adStatsSample.xml
│   ├── apps_table.txt
│   ├── calendar_google.xml
│   ├── collection.xml
│   ├── collection_scene.xml
│   ├── digg.xml
│   ├── googlesheets.xml
│   ├── instagram_feed.xml
│   ├── jsonItem.xml
│   ├── jsonPlayer.xml
│   ├── json_as3_maps.xml
│   ├── json_scenes.xml
│   ├── jsonsheets.xml
│   ├── location.xml
│   ├── player_weather_scene.xml
│   ├── reseller_sample.xml
│   ├── sceneSample.xml
│   ├── sceneSampleLayout.xml
│   ├── twitterv3.xml
│   └── worldweather.xml
├── notes.txt
├── package.json
├── src/
│   ├── Lib.ts
│   ├── app/
│   │   ├── app-component.css
│   │   ├── app-component.html
│   │   ├── app-component.ts
│   │   ├── app-module.ts
│   │   ├── appwrap.ts
│   │   ├── blocks/
│   │   │   ├── block-fabric-image.ts
│   │   │   ├── block-fabric-josn-item.ts
│   │   │   ├── block-fabric-label.ts
│   │   │   ├── block-fabric-scene.ts
│   │   │   ├── block-fabric-svg.ts
│   │   │   ├── block-fabric.ts
│   │   │   ├── block-prop-calendar.ts
│   │   │   ├── block-prop-clock.ts
│   │   │   ├── block-prop-collection.ts
│   │   │   ├── block-prop-common.ts
│   │   │   ├── block-prop-container.ts
│   │   │   ├── block-prop-fasterq.ts
│   │   │   ├── block-prop-html.ts
│   │   │   ├── block-prop-image.ts
│   │   │   ├── block-prop-instagram.ts
│   │   │   ├── block-prop-json-item.ts
│   │   │   ├── block-prop-json-player.ts
│   │   │   ├── block-prop-label.ts
│   │   │   ├── block-prop-location.ts
│   │   │   ├── block-prop-mrss.ts
│   │   │   ├── block-prop-position.ts
│   │   │   ├── block-prop-qr.ts
│   │   │   ├── block-prop-rss.ts
│   │   │   ├── block-prop-scene.ts
│   │   │   ├── block-prop-sheets.ts
│   │   │   ├── block-prop-twitter.ts
│   │   │   ├── block-prop-video.ts
│   │   │   ├── block-prop-weather.ts
│   │   │   ├── block-prop-youtube.ts
│   │   │   ├── block-prop.digg.ts
│   │   │   ├── block-service.ts
│   │   │   └── json-event-grid.ts
│   │   ├── campaigns/
│   │   │   ├── add-content.ts
│   │   │   ├── campaign-channels.ts
│   │   │   ├── campaign-duration.ts
│   │   │   ├── campaign-editor-props.ts
│   │   │   ├── campaign-editor.ts
│   │   │   ├── campaign-editors.html
│   │   │   ├── campaign-layout.ts
│   │   │   ├── campaign-list.ts
│   │   │   ├── campaign-manager.html
│   │   │   ├── campaign-manager.ts
│   │   │   ├── campaign-name.ts
│   │   │   ├── campaign-orientation.ts
│   │   │   ├── campaign-props-manager.ts
│   │   │   ├── campaign-props.ts
│   │   │   ├── campaign-resolution.ts
│   │   │   ├── campaign-sched-props.css
│   │   │   ├── campaign-sched-props.html
│   │   │   ├── campaign-sched-props.ts
│   │   │   ├── campaign-story-timeline.ts
│   │   │   ├── campaigns-navigation.ts
│   │   │   ├── campaigns.ts
│   │   │   ├── channel-block-props.ts
│   │   │   ├── channel-props.ts
│   │   │   ├── dashboard-props.ts
│   │   │   ├── index.ts
│   │   │   ├── screen-layout-editor-props.ts
│   │   │   ├── screen-layout-editor.ts
│   │   │   ├── sequencer.ts
│   │   │   ├── timeline/
│   │   │   │   ├── timeline.component.css
│   │   │   │   ├── timeline.component.html
│   │   │   │   ├── timeline.component.spec.ts
│   │   │   │   └── timeline.component.ts
│   │   │   ├── timeline-props.ts
│   │   │   └── timeline-ruler/
│   │   │       ├── timeline-ruler.component.css
│   │   │       ├── timeline-ruler.component.html
│   │   │       ├── timeline-ruler.component.spec.ts
│   │   │       └── timeline-ruler.component.ts
│   │   ├── dashboard/
│   │   │   ├── dash-panel-mini.html
│   │   │   ├── dash-panel-mini.ts
│   │   │   ├── dash-panel.html
│   │   │   ├── dash-panel.ts
│   │   │   ├── dashboard-navigation.ts
│   │   │   ├── server-avg.ts
│   │   │   └── storage-used.ts
│   │   ├── fasterq/
│   │   │   ├── fasterq-editor.html
│   │   │   ├── fasterq-editor.ts
│   │   │   ├── fasterq-line-props.ts
│   │   │   ├── fasterq-manager.ts
│   │   │   ├── fasterq-navigation.ts
│   │   │   ├── fasterq-terminal.ts
│   │   │   ├── fasterq.ts
│   │   │   └── index.ts
│   │   ├── help/
│   │   │   ├── help-navigation.ts
│   │   │   └── index.ts
│   │   ├── index.ts
│   │   ├── install/
│   │   │   ├── index.ts
│   │   │   └── install-navigation.ts
│   │   ├── live-preview/
│   │   │   └── live-preview.ts
│   │   ├── locale-selector/
│   │   │   ├── local-selector.css
│   │   │   └── local-selector.ts
│   │   ├── location/
│   │   │   ├── location-map.html
│   │   │   └── location-map.ts
│   │   ├── resources/
│   │   │   ├── index.ts
│   │   │   ├── orders.ts
│   │   │   ├── resource-props-manager.ts
│   │   │   ├── resources-list.ts
│   │   │   ├── resources-navigation.ts
│   │   │   └── resources.ts
│   │   ├── route-animation.ts
│   │   ├── scenes/
│   │   │   ├── index.ts
│   │   │   ├── scene-creator.css
│   │   │   ├── scene-creator.ts
│   │   │   ├── scene-editor.ts
│   │   │   ├── scene-list.ts
│   │   │   ├── scene-manager.ts
│   │   │   ├── scene-props-manager.ts
│   │   │   ├── scene-toolbar.ts
│   │   │   ├── scenes-navigation.ts
│   │   │   └── scenes.ts
│   │   ├── settings/
│   │   │   ├── index.ts
│   │   │   ├── settings-navigation.ts
│   │   │   └── twofactor.ts
│   │   ├── stations/
│   │   │   ├── index.ts
│   │   │   ├── stations-list.ts
│   │   │   ├── stations-navigation.ts
│   │   │   ├── stations-props-manager.html
│   │   │   ├── stations-props-manager.ts
│   │   │   └── stations.ts
│   │   └── studiopro/
│   │       ├── index.ts
│   │       ├── pro-upgrade.ts
│   │       ├── pro-upgrades.html
│   │       └── studiopro-navigation.ts
│   ├── app-routes.ts
│   ├── assets/
│   │   └── geojson.json
│   ├── comps/
│   │   ├── blurforwarder/
│   │   │   └── BlurForwarder.ts
│   │   ├── connect-form/
│   │   │   └── connect-form.ts
│   │   ├── contact-us/
│   │   │   └── contact-us.ts
│   │   ├── disable-control/
│   │   │   └── disable-control.ts
│   │   ├── draggable-list/
│   │   │   └── draggable-list.ts
│   │   ├── duration-input/
│   │   │   ├── duration-input.component.css
│   │   │   ├── duration-input.component.html
│   │   │   ├── duration-input.component.spec.ts
│   │   │   └── duration-input.component.ts
│   │   ├── entry/
│   │   │   ├── AutoLogin.ts
│   │   │   └── LoginPanel.ts
│   │   ├── font-selector/
│   │   │   └── font-selector.ts
│   │   ├── hour-counter/
│   │   │   └── hour-counter.ts
│   │   ├── imgloader/
│   │   │   └── ImgLoader.ts
│   │   ├── infobox/
│   │   │   └── Infobox.ts
│   │   ├── lazy-image/
│   │   │   └── lazy-image.ts
│   │   ├── limited-access/
│   │   │   └── limited-access.ts
│   │   ├── loading/
│   │   │   └── loading.ts
│   │   ├── logo/
│   │   │   ├── Logo.ts
│   │   │   └── reseller-logo.ts
│   │   ├── logout/
│   │   │   └── Logout.ts
│   │   ├── match-body-height/
│   │   │   └── match-body-height.ts
│   │   ├── media-player/
│   │   │   └── media-player.ts
│   │   ├── ng-menu/
│   │   │   ├── ng-menu-item.ts
│   │   │   └── ng-menu.ts
│   │   ├── panel-split/
│   │   │   ├── panel-split-container.ts
│   │   │   ├── panel-split-main.ts
│   │   │   └── panel-split-side.ts
│   │   ├── screen-template/
│   │   │   └── screen-template.ts
│   │   ├── simple-grid-module/
│   │   │   ├── SimpleGrid.css
│   │   │   ├── SimpleGrid.ts
│   │   │   ├── SimpleGridData.ts
│   │   │   ├── SimpleGridDataChecks.ts
│   │   │   ├── SimpleGridDataCurrency.ts
│   │   │   ├── SimpleGridDataDropdown.ts
│   │   │   ├── SimpleGridDataImage.ts
│   │   │   ├── SimpleGridDraggable.ts
│   │   │   ├── SimpleGridExample.txt
│   │   │   ├── SimpleGridModule.ts
│   │   │   ├── SimpleGridRecord.ts
│   │   │   ├── SimpleGridSortableHeader.ts
│   │   │   └── SimpleGridTable.ts
│   │   ├── sliderpanel/
│   │   │   ├── SliderItemContent.ts
│   │   │   ├── Slideritem.ts
│   │   │   └── Sliderpanel.ts
│   │   ├── svg-icon/
│   │   │   └── svg-icon.ts
│   │   └── tabs/
│   │       ├── tab.ts
│   │       └── tabs.ts
│   ├── create_reflection.html
│   ├── decorators/
│   │   ├── once-decorator.ts
│   │   └── timeout-decorator.ts
│   ├── environments/
│   │   ├── environment.hmr.ts
│   │   ├── environment.prod.ts
│   │   └── environment.ts
│   ├── filters/
│   │   └── filter-model-pipe.ts
│   ├── hmr.ts
│   ├── index.html
│   ├── interfaces/
│   │   ├── BlockTypeEnum.ts
│   │   ├── Consts.ts
│   │   ├── IAddContent.ts
│   │   ├── IRegisterCaller.ts
│   │   └── IScreenTemplate.ts
│   ├── libs/
│   │   ├── bootstrap-timepicker/
│   │   │   ├── CHANGELOG.md
│   │   │   ├── README.md
│   │   │   ├── bower.json
│   │   │   ├── composer.json
│   │   │   ├── css/
│   │   │   │   ├── bootstrap-timepicker.css
│   │   │   │   ├── bootstrap-timepicker.min.css
│   │   │   │   └── timepicker.less
│   │   │   ├── js/
│   │   │   │   ├── bootstrap-timepicker.js
│   │   │   │   └── bootstrap-timepicker.min.js
│   │   │   └── package.json
│   │   ├── contextmenu/
│   │   │   └── bootstrap-contextmenu.js
│   │   ├── enjoyhint/
│   │   │   └── enjoyhint.js
│   │   ├── fabric.require1-4-12.js
│   │   ├── fabric.require1-4-12.min.js
│   │   ├── fabric1-4-2.min.js
│   │   ├── flashdetect/
│   │   │   └── flashdetect.js
│   │   ├── gradient/
│   │   │   ├── colorpicker.js
│   │   │   └── jquery.gradientpicker.js
│   │   ├── jquery-ui.js
│   │   ├── jquery.base64.js
│   │   ├── jquery.knob.min.js
│   │   ├── jquery.timepicker/
│   │   │   └── jquery.timepicker.min.js
│   │   ├── minicolors/
│   │   │   ├── jquery.minicolors.css
│   │   │   └── jquery.minicolors.js
│   │   ├── qrcode/
│   │   │   └── qrcode.js
│   │   ├── rc4v1/
│   │   │   └── rc4v1.js
│   │   ├── rc4v2/
│   │   │   └── rc4v2.js
│   │   ├── ruler/
│   │   │   ├── ruler.css
│   │   │   ├── ruler.js
│   │   │   ├── rulerConstructor.js
│   │   │   ├── rulerGuideLine.js
│   │   │   └── utils.js
│   │   ├── screen-templates.json
│   │   ├── stop-watch/
│   │   │   └── stop-watch.js
│   │   └── xml2js/
│   │       └── xml2js.js
│   ├── locale/
│   │   ├── ar.xtb
│   │   ├── be.xtb
│   │   ├── bn.xtb
│   │   ├── cs.xtb
│   │   ├── da.xtb
│   │   ├── de.xtb
│   │   ├── el.xtb
│   │   ├── en.xtb
│   │   ├── eo.xtb
│   │   ├── es.xtb
│   │   ├── fr.xtb
│   │   ├── hi.xtb
│   │   ├── it.xtb
│   │   ├── iw.xtb
│   │   ├── ja.xtb
│   │   ├── ko.xtb
│   │   ├── la.xtb
│   │   ├── messages.xmb
│   │   ├── pt.xtb
│   │   ├── ru.xtb
│   │   ├── template.xtb
│   │   ├── th.xtb
│   │   ├── tl.xtb
│   │   └── zh-CN.xtb
│   ├── main.ts
│   ├── manifest.json
│   ├── models/
│   │   ├── LocationMarkModel.ts
│   │   ├── StationModel.ts
│   │   ├── StoreModel.ts
│   │   ├── StoreModelAbstract.ts
│   │   ├── UserModel.ts
│   │   ├── fasterq-analytics.ts
│   │   ├── fasterq-line-model.ts
│   │   ├── fasterq-queue-model.ts
│   │   └── live-log-model.ts
│   ├── modules/
│   │   ├── ngmslib-service.ts
│   │   └── shared.module.ts
│   ├── pipes/
│   │   ├── format-seconds-pipe.ts
│   │   └── list-to-array-pipe.ts
│   ├── polyfills.ts
│   ├── print.html
│   ├── service-worker.js
│   ├── services/
│   │   ├── AuthService.ts
│   │   ├── CommBroker.ts
│   │   ├── CreditService.ts
│   │   ├── LocalStorage.ts
│   │   ├── StoreService.ts
│   │   ├── block-factory-service.ts
│   │   ├── font-loader-service.ts
│   │   ├── global-error-handler.ts
│   │   ├── redpepper.service.ts
│   │   ├── wizard-service.ts
│   │   └── yellowpepper.service.ts
│   ├── store/
│   │   ├── actions/
│   │   │   ├── appdb.actions.ts
│   │   │   └── msdb.actions.ts
│   │   ├── application.state.ts
│   │   ├── effects/
│   │   │   ├── appdb.effects.ts
│   │   │   └── msdb.effects.ts
│   │   ├── imsdb.interfaces.ts
│   │   ├── imsdb.interfaces_auto.ts
│   │   ├── model/
│   │   │   ├── StoreModel.ts
│   │   │   └── msdb-models-extended.ts
│   │   ├── reducers/
│   │   │   ├── appdb.reducer.ts
│   │   │   └── msdb.reducer.ts
│   │   ├── signage_sdk.js
│   │   └── store.data.ts
│   ├── styles/
│   │   ├── material-design/
│   │   │   └── css/
│   │   │       ├── bootstrap-material-design.css
│   │   │       └── ripples.css
│   │   ├── style.css
│   │   └── style_dark.css
│   ├── tsconfig.json
│   ├── typings.d.ts
│   └── validators/
│       ├── NameTakenValidator.ts
│       └── StartCapValidator.ts
├── tslint.json
└── typings.json
Download .txt
Showing preview only (248K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3133 symbols across 212 files)

FILE: e2e/app.po.ts
  class NgKitchenSinkPage (line 3) | class NgKitchenSinkPage {
    method navigateTo (line 4) | navigateTo() {
    method getParagraphText (line 8) | getParagraphText() {

FILE: src/Lib.ts
  function equalValueValidator (line 19) | function equalValueValidator(targetKey: string, toMatchKey: string): Val...
  type Observable (line 54) | interface Observable<T> {
  type Observable (line 64) | interface Observable<T> {
  class Lib (line 94) | class Lib {
    method Con (line 96) | static Con(msg: any, stringify?: boolean) {
    method ProcessDateField (line 106) | static ProcessDateField(dateString: string, addDay: boolean = false): ...
    method ToValidNumber (line 130) | static ToValidNumber(i_value): number {
    method Try (line 138) | static Try(i_fn: () => void) {
    method IsEqual (line 148) | static IsEqual(obj1, obj2) {
    method GetThemeColor (line 158) | static GetThemeColor() {
    method EncryptUserPass (line 165) | static EncryptUserPass(i_user, i_pass) {
    method AlertOnLeave (line 171) | static AlertOnLeave() {
    method FormatSecondsToObject (line 193) | static FormatSecondsToObject(i_totalSeconds) {
    method ProcessDateFieldToUnix (line 223) | static ProcessDateFieldToUnix(dateString: string, addDay: boolean = fa...
    method PadZeros (line 242) | static PadZeros(n, width, z) {
    method ParseToFloatDouble (line 254) | static ParseToFloatDouble(i_value: any): number {
    method CapitaliseFirst (line 264) | static CapitaliseFirst(string) {
    method Base64Encode (line 274) | static Base64Encode(str) {
    method Base64Decode (line 371) | static Base64Decode(str) {
    method CleanChar (line 468) | static CleanChar(value) {
    method CleanProbCharacters (line 490) | static CleanProbCharacters(i_string: string, i_restriction: number) {
    method IsNumber (line 511) | static IsNumber(value) {
    method CleanCharForXml (line 516) | static CleanCharForXml(value: any): any {
    method UnionList (line 561) | static UnionList(a: List<any>, b: List<any>) {
    method ProcessHourStartEnd (line 565) | static ProcessHourStartEnd(value: string, key: string): any {
    method CheckFoundIndex (line 580) | static CheckFoundIndex(i_value: number, i_message: string = 'CheckFoun...
    method BootboxHide (line 602) | static BootboxHide(i_time = 1500) {
    method DateToAbsolute (line 608) | static DateToAbsolute(year, month) {
    method DateFromAbsolute (line 612) | static DateFromAbsolute(value: number) {
    method MapOfIndex (line 621) | static MapOfIndex(map: Map<string, any>, index: number, position: "fir...
    method Base64 (line 645) | static Base64() {
    method ConstructImmutableFromTable (line 781) | static ConstructImmutableFromTable(path): Array<any> {
    method ComputeMask (line 801) | static ComputeMask(accessMask): number {
    method ValidateEmail (line 812) | static ValidateEmail(email) {
    method GetAccessMask (line 817) | static GetAccessMask(accessMask): List<any> {
    method GetADaysMask (line 827) | static GetADaysMask(accessMask): List<any> {
    method log (line 837) | static log(msg) {
    method guid (line 841) | static guid(): string {
    method ColorToDecimal (line 857) | static ColorToDecimal(color) {
    method ColorToHex (line 865) | static ColorToHex(color) {
    method HexToDecimal (line 881) | static HexToDecimal(h) {
    method RgbToHex (line 907) | static RgbToHex(rgb) {
    method DecimalToHex (line 931) | static DecimalToHex(d) {
    method DevMode (line 948) | static DevMode(): boolean {
    method GetSamples (line 955) | static GetSamples(): Object {
    method Xml2Json (line 1091) | static Xml2Json() {

FILE: src/app/app-component.ts
  type MainAppShowModeEnum (line 23) | enum MainAppShowModeEnum {
  type MainAppShowStateEnum (line 30) | enum MainAppShowStateEnum {
  class AppComponent (line 54) | class AppComponent implements AfterViewInit {
    method constructor (line 69) | constructor(private router: Router,
    method ngOnInit (line 112) | ngOnInit() {
    method _onMenuIcon (line 134) | _onMenuIcon(icon, event) {
    method saveAndRestartPrompt (line 169) | saveAndRestartPrompt(i_callBack) {
    method ngAfterViewInit (line 208) | ngAfterViewInit() {
    method _onLocaleChanged (line 213) | _onLocaleChanged(i_localSelected) {
    method listenAppStateChange (line 219) | private listenAppStateChange() {
    method save (line 281) | private save(i_cb: () => void) {
    method viewMode (line 297) | private viewMode(i_mode: MainAppShowModeEnum) {
    method checkPlatform (line 319) | private checkPlatform() {
    method listenUpgradeEnterpris (line 335) | private listenUpgradeEnterpris() {
    method listenSaves (line 342) | private listenSaves() {
    method appResized (line 349) | public appResized(): void {
    method listenRouterUpdateTitle (line 370) | private listenRouterUpdateTitle() {

FILE: src/app/app-module.ts
  type JQueryStatic (line 63) | interface JQueryStatic {
  class CustomToastOption (line 73) | class CustomToastOption extends ToastOptions {
  function appReducer (line 106) | function appReducer(state: any = INITIAL_APPLICATION_STATE, action: any) {
  class AppModule (line 156) | class AppModule {
    method constructor (line 157) | constructor(private commBroker: CommBroker, private compiler: Compiler...

FILE: src/app/appwrap.ts
  class Appwrap (line 29) | class Appwrap extends Compbaser {
    method constructor (line 33) | constructor(private router: Router, private yp:YellowPepperService) {

FILE: src/app/blocks/block-fabric-image.ts
  class BlockFabricImage (line 7) | class BlockFabricImage extends BlockFabric {
    method constructor (line 14) | constructor(options, i_blockService, i_pepper) {
    method _initResourcesData (line 28) | _initResourcesData() {
    method fabricateBlock (line 48) | fabricateBlock(i_canvasScale, i_callback) {
    method getResourceID (line 100) | getResourceID() {
    method deleteBlock (line 109) | deleteBlock(i_memoryOnly) {

FILE: src/app/blocks/block-fabric-josn-item.ts
  class BlockFabricJsonItem (line 10) | class BlockFabricJsonItem extends BlockFabricLabel {
    method constructor (line 18) | constructor(options, i_blockService, i_pepper) {
    method _translateToLabel (line 327) | private _translateToLabel(i_jsonPath:string):string {
    method _mutateCustomFieldName (line 359) | private _mutateCustomFieldName():void {
    method fabricateBlock (line 387) | fabricateBlock(i_canvasScale, i_callback) {

FILE: src/app/blocks/block-fabric-label.ts
  class BlockFabricLabel (line 9) | class BlockFabricLabel extends BlockFabric {
    method constructor (line 11) | constructor(options, i_blockService, i_pepper) {
    method fabricateBlock (line 26) | fabricateBlock(i_canvasScale, i_callback) {
    method deleteBlock (line 133) | deleteBlock(i_memoryOnly) {

FILE: src/app/blocks/block-fabric-scene.ts
  class BlockFabricScene (line 8) | class BlockFabricScene extends BlockFabric {
    method constructor (line 13) | constructor(options, i_blockService, i_pepper) {
    method getBlockData (line 25) | getBlockData() {
    method _setBlockPlayerData (line 36) | _setBlockPlayerData(i_xmlDoc, i_noNotify) {
    method _getBlockPlayerData (line 61) | _getBlockPlayerData(): any {
    method _findGradientPoints (line 107) | _findGradientPoints(i_domPlayerData) {
    method _fabricApplySceneBgImage (line 116) | _fabricApplySceneBgImage(i_image) {
    method fabricSceneBg (line 126) | fabricSceneBg() {
    method setCanvas (line 159) | setCanvas(i_canvas, i_magneticGridMode) {
    method deleteBlock (line 180) | deleteBlock(i_memoryOnly) {

FILE: src/app/blocks/block-fabric-svg.ts
  class BlockFabricSvg (line 8) | class BlockFabricSvg extends BlockFabric {
    method constructor (line 13) | constructor(options, i_blockService, i_pepper) {
    method _initResourcesData (line 27) | _initResourcesData() {
    method fabricateBlock (line 49) | fabricateBlock(i_canvasScale, i_callback) {
    method getResourceID (line 133) | getResourceID() {
    method deleteBlock (line 142) | deleteBlock(i_memoryOnly) {

FILE: src/app/blocks/block-fabric.ts
  class BlockFabric (line 6) | class BlockFabric extends fabric.Group {
    method constructor (line 24) | constructor(options, i_blockService, i_pepper, i_blockType) {
    method _getBlockPlayerData (line 67) | _getBlockPlayerData(): any {
    method _findBorder (line 75) | _findBorder(i_domPlayerData) {
    method _fabricAlpha (line 82) | _fabricAlpha(i_domPlayerData) {
    method _fabricColorPoints (line 91) | _fabricColorPoints(i_domPlayerData) {
    method _fabricateBorder (line 107) | _fabricateBorder(i_options) {
    method _fabricateOptions (line 121) | _fabricateOptions(i_top, i_left, i_width, i_height, i_angle) {
    method _fabricRect (line 142) | _fabricRect(i_width, i_height, i_domPlayerData) {
    method fabricateBlock (line 163) | fabricateBlock(i_canvasScale, i_callback) {
    method _fabricLock (line 204) | _fabricLock() {
    method getBlockData (line 224) | getBlockData() {
    method setZindex (line 244) | setZindex(i_zIndex) {
    method getZindex (line 253) | getZindex(i_zIndex) {
    method deleteBlock (line 264) | deleteBlock(i_memoryOnly) {
    method _selfDestruct (line 274) | _selfDestruct() {
    method _deleteBlock (line 293) | _deleteBlock(i_memoryOnly) {

FILE: src/app/blocks/block-prop-calendar.ts
  class BlockPropCalendar (line 81) | class BlockPropCalendar extends Compbaser implements AfterViewInit {
    method constructor (line 89) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 108) | set setBlockData(i_blockData) {
    method _saveDates (line 117) | _saveDates(range) {
    method _onCalSelected (line 121) | _onCalSelected(event) {
    method _render (line 129) | private _render() {
    method _populateStartEndDates (line 150) | _populateStartEndDates(): void {
    method _setRangeDate (line 157) | _setRangeDate(i_field: 'startDate' | 'endDate', i_value): void {
    method _getRangeDate (line 165) | _getRangeDate(i_field): string {
    method _onModeChange (line 180) | _onModeChange(i_value) {
    method _getGoogleCalendars (line 189) | _getGoogleCalendars() {
    method _getFileId (line 225) | private _getFileId(): string {
    method ngAfterViewInit (line 231) | ngAfterViewInit() {
    method _onCreateToken (line 235) | _onCreateToken() {
    method saveToStore (line 244) | private saveToStore() {
    method destroy (line 258) | destroy() {

FILE: src/app/blocks/block-prop-clock.ts
  class BlockPropClock (line 36) | class BlockPropClock extends Compbaser implements AfterViewInit {
    method constructor (line 61) | constructor(private fb: FormBuilder, private rp: RedPepperService, pri...
    method setBlockData (line 66) | set setBlockData(i_blockData) {
    method _onFontChanged (line 75) | _onFontChanged(config: IFontSelector) {
    method _onFormatChanged (line 89) | _onFormatChanged(e) {
    method ngAfterViewInit (line 97) | ngAfterViewInit() {
    method _render (line 101) | _render() {
    method destroy (line 126) | destroy() {

FILE: src/app/blocks/block-prop-collection.ts
  class BlockPropCollection (line 93) | class BlockPropCollection extends Compbaser implements AfterViewInit {
    method constructor (line 103) | constructor(private fb: FormBuilder, private yp:YellowPepperService, p...
    method setBlockData (line 120) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 125) | ngAfterViewInit() {
    method _onAddNewBlock (line 129) | _onAddNewBlock() {
    method _onClosed (line 133) | _onClosed(){
    method _onDragComplete (line 143) | _onDragComplete(dragData: ISimpleGridDraggedData) {
    method _onRemoveCollectionItem (line 154) | _onRemoveCollectionItem() {
    method _onAddNewCollectionItem (line 165) | _onAddNewCollectionItem() {
    method _onDurationEdited (line 169) | _onDurationEdited(event: ISimpleGridEdit, index) {
    method _onPageNameEdited (line 178) | _onPageNameEdited(event: ISimpleGridEdit, index) {
    method _populateTableCollection (line 187) | _populateTableCollection() {
    method _populateTableEvents (line 221) | _populateTableEvents() {
    method _sortCollection (line 243) | _sortCollection(i_collection: List<StoreModel>): List<StoreModel> {
    method _render (line 254) | _render() {
    method _toggleKioskMode (line 265) | _toggleKioskMode(i_value) {
    method _onAddedContent (line 277) | _onAddedContent(i_addContents: IAddContents) {
    method saveToStore (line 306) | private saveToStore() {
    method destroy (line 316) | destroy() {

FILE: src/app/blocks/block-prop-common.ts
  class BlockPropCommon (line 82) | class BlockPropCommon extends Compbaser implements AfterViewInit {
    method constructor (line 93) | constructor(@Inject('BLOCK_PLACEMENT') private blockPlacement: string,...
    method setBlockData (line 116) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 125) | ngAfterViewInit() {
    method _render (line 134) | _render() {
    method _listenBorderChanged (line 142) | _listenBorderChanged() {
    method _toggleSceneBackground (line 176) | _toggleSceneBackground(i_checked: boolean) {
    method _toggleBorder (line 199) | _toggleBorder(i_checked: boolean) {
    method _alphaPopulate (line 223) | _alphaPopulate() {
    method _onAlphaChange (line 232) | _onAlphaChange(event) {
    method _sceneBackgroundPropsPopulate (line 241) | _sceneBackgroundPropsPopulate() {
    method _borderPropsPopulate (line 257) | _borderPropsPopulate() {
    method _sceneBackgroundPopulate (line 270) | _sceneBackgroundPopulate() {
    method _updateBorderColor (line 284) | _updateBorderColor(i_value, i_color) {
    method _updateSceneBackgroundColor (line 292) | _updateSceneBackgroundColor(i_value, i_color) {
    method _findBorder (line 304) | _findBorder(i_domPlayerData) {
    method _bgGradientWidgetInit (line 312) | _bgGradientWidgetInit() {
    method _gradientPopulate (line 342) | _gradientPopulate() {
    method _bgGradientWidgetClear (line 359) | _bgGradientWidgetClear() {
    method _gradientChanged (line 365) | _gradientChanged(e) {
    method _findGradientPoints (line 389) | _findGradientPoints(i_domPlayerData) {
    method _findGradientPointsScene (line 394) | _findGradientPointsScene(i_domPlayerData) {
    method _onRemoveBackgroundClicked (line 401) | _onRemoveBackgroundClicked() {
    method _findBackground (line 409) | _findBackground(i_domPlayerData) {
    method destroy (line 414) | destroy() {

FILE: src/app/blocks/block-prop-container.ts
  class BlockPropContainer (line 125) | class BlockPropContainer extends Compbaser implements AfterViewInit {
    method constructor (line 133) | constructor(@Inject('BLOCK_PLACEMENT') private blockPlacement: string,...
    method ngAfterViewInit (line 145) | ngAfterViewInit() {
    method _listenOnChannels (line 149) | private _listenOnChannels() {
    method _listenOnScenes (line 172) | private _listenOnScenes() {
    method toggleSettingsTab (line 194) | private toggleSettingsTab() {
    method ngOnInit (line 199) | ngOnInit() {
    method destroy (line 202) | destroy() {

FILE: src/app/blocks/block-prop-fasterq.ts
  class BlockPropFasterQ (line 66) | class BlockPropFasterQ extends Compbaser implements AfterViewInit {
    method constructor (line 75) | constructor(private fb: FormBuilder, private el: ElementRef, private b...
    method setBlockData (line 91) | set setBlockData(i_blockData) {
    method _listenColorChanged (line 100) | _listenColorChanged() {
    method ngAfterViewInit (line 114) | ngAfterViewInit() {
    method _render (line 118) | _render() {
    method _moveColorPicker (line 132) | _moveColorPicker() {
    method setNewColor (line 140) | private setNewColor(i_color) {
    method saveToStore (line 147) | private saveToStore() {
    method destroy (line 163) | destroy() {

FILE: src/app/blocks/block-prop-html.ts
  class BlockPropHtml (line 30) | class BlockPropHtml extends Compbaser implements AfterViewInit {
    method constructor (line 36) | constructor(private fb: FormBuilder, private rp: RedPepperService, pri...
    method setBlockData (line 47) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 56) | ngAfterViewInit() {
    method _render (line 60) | _render() {
    method saveToStore (line 68) | private saveToStore() {
    method destroy (line 78) | destroy() {

FILE: src/app/blocks/block-prop-image.ts
  class BlockPropImage (line 36) | class BlockPropImage extends Compbaser implements AfterViewInit {
    method constructor (line 41) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 53) | set setBlockData(i_blockData) {
    method _toggleAspectRatio (line 67) | _toggleAspectRatio(i_value) {
    method _render (line 75) | private _render() {
    method ngAfterViewInit (line 87) | ngAfterViewInit() {
    method saveToStore (line 91) | private saveToStore() {
    method destroy (line 101) | destroy() {

FILE: src/app/blocks/block-prop-instagram.ts
  class BlockPropInstagram (line 33) | class BlockPropInstagram extends Compbaser implements AfterViewInit {
    method constructor (line 38) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 51) | set setBlockData(i_blockData) {
    method _render (line 60) | private _render() {
    method ngAfterViewInit (line 67) | ngAfterViewInit() {
    method _onCreateToken (line 71) | _onCreateToken() {
    method saveToStore (line 80) | private saveToStore() {
    method destroy (line 90) | destroy() {

FILE: src/app/blocks/block-prop-json-item.ts
  class BlockPropJsonItem (line 78) | class BlockPropJsonItem extends Compbaser implements AfterViewInit {
    method constructor (line 95) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 111) | set setBlockData(i_blockData) {
    method _render (line 120) | private _render() {
    method _toggleAspectRatio (line 146) | _toggleAspectRatio(i_value) {
    method _onJsonItemTextFieldChanged (line 154) | _onJsonItemTextFieldChanged(i_event) {
    method _onJsonItemTextFieldsChanged (line 161) | _onJsonItemTextFieldsChanged(event) {
    method _onJsonItemDateFieldsChanged (line 177) | _onJsonItemDateFieldsChanged(event) {
    method _onDualNumericChanged (line 186) | _onDualNumericChanged(){
    method _onFontChanged (line 196) | _onFontChanged(config: IFontSelector) {
    method _populateMimeType (line 214) | private _populateMimeType() {
    method _populateFonts (line 273) | private _populateFonts(xSnippetFont) {
    method _populateDateFormat (line 291) | private _populateDateFormat(i_selectedFormat) {
    method _populateAspectRatio (line 322) | private _populateAspectRatio(i_aspectRatio) {
    method _populateDualNumeric (line 331) | private _populateDualNumeric() {
    method ngAfterViewInit (line 350) | ngAfterViewInit() {
    method destroy (line 649) | destroy() {

FILE: src/app/blocks/block-prop-json-player.ts
  class BlockPropJsonPlayer (line 83) | class BlockPropJsonPlayer extends Compbaser implements AfterViewInit {
    method constructor (line 92) | constructor(private fb: FormBuilder, private yp: YellowPepperService, ...
    method setBlockData (line 116) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 131) | ngAfterViewInit() {
    method _onPlayVideoInFull (line 135) | _onPlayVideoInFull(i_value) {
    method _onRandomPlay (line 143) | _onRandomPlay(i_value) {
    method _onSlideShow (line 151) | _onSlideShow(i_value) {
    method _onSceneSelectionChanged (line 160) | _onSceneSelectionChanged(i_scene_id) {
    method _initSceneDropdown (line 175) | private _initSceneDropdown() {
    method _render (line 201) | _render() {
    method saveToStore (line 217) | private saveToStore() {
    method destroy (line 228) | destroy() {

FILE: src/app/blocks/block-prop-label.ts
  class BlockPropLabel (line 32) | class BlockPropLabel extends Compbaser implements AfterViewInit {
    method constructor (line 39) | constructor(private fb: FormBuilder, private rp: RedPepperService, pri...
    method setBlockData (line 50) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 59) | ngAfterViewInit() {
    method _render (line 63) | _render() {
    method _onFontChanged (line 80) | _onFontChanged(config: IFontSelector) {
    method saveToStore (line 94) | private saveToStore() {
    method destroy (line 113) | destroy() {

FILE: src/app/blocks/block-prop-location.ts
  class BlockPropLocation (line 137) | class BlockPropLocation extends Compbaser implements AfterViewInit {
    method constructor (line 151) | constructor(private fb: FormBuilder, private yp: YellowPepperService, ...
    method setBlockData (line 209) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 214) | ngAfterViewInit() {
    method _onModelMapClosed (line 219) | _onModelMapClosed() {
    method _onDragComplete (line 223) | _onDragComplete(dragData: ISimpleGridDraggedData) {
    method _onRemoveCollectionItem (line 234) | _onRemoveCollectionItem() {
    method _onClosed (line 246) | _onClosed() {
    method _onAddNewBlock (line 250) | _onAddNewBlock(type: string) {
    method _onAddedContent (line 260) | _onAddedContent(i_addContents: IAddContents) {
    method _removeLocation (line 326) | _removeLocation() {
    method _populateTotalMapLocations (line 338) | _populateTotalMapLocations() {
    method _openMap (line 349) | _openMap() {
    method _jumpToLocation (line 357) | _jumpToLocation(i_item?) {
    method _onDurationEdited (line 433) | _onDurationEdited(event: ISimpleGridEdit, index) {
    method _onPageNameEdited (line 442) | _onPageNameEdited(event: ISimpleGridEdit, index) {
    method _populateTableCollection (line 451) | _populateTableCollection() {
    method _sortCollection (line 507) | _sortCollection(i_collection: List<StoreModel>): List<StoreModel> {
    method _render (line 518) | _render() {
    method saveToStore (line 526) | private saveToStore() {
    method destroy (line 549) | destroy() {

FILE: src/app/blocks/block-prop-mrss.ts
  class BlockPropMrss (line 41) | class BlockPropMrss extends Compbaser implements AfterViewInit {
    method constructor (line 238) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 258) | set setBlockData(i_blockData) {
    method _toggleAspectRatio (line 272) | _toggleAspectRatio(i_value) {
    method _isUrlCustom (line 280) | _isUrlCustom(i_url): boolean {
    method _onRssSelected (line 287) | _onRssSelected(event) {
    method _render (line 291) | private _render() {
    method ngAfterViewInit (line 309) | ngAfterViewInit() {
    method saveToStore (line 313) | private saveToStore() {
    method destroy (line 327) | destroy() {

FILE: src/app/blocks/block-prop-position.ts
  class BlockPropPosition (line 103) | class BlockPropPosition extends Compbaser {
    method constructor (line 111) | constructor(private fb: FormBuilder, private rp: RedPepperService, pri...
    method ngAfterViewInit (line 165) | ngAfterViewInit() {
    method saveToStoreLayout (line 184) | saveToStoreLayout() {
    method saveToStoreLock (line 220) | private saveToStoreLock(v) {
    method destroy (line 228) | destroy() {

FILE: src/app/blocks/block-prop-qr.ts
  class BlockPropQR (line 29) | class BlockPropQR extends Compbaser implements AfterViewInit {
    method constructor (line 35) | constructor(private fb: FormBuilder, private bs: BlockService) {
    method setBlockData (line 46) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 55) | ngAfterViewInit() {
    method _render (line 59) | _render() {
    method saveToStore (line 65) | private saveToStore() {
    method destroy (line 74) | destroy() {

FILE: src/app/blocks/block-prop-rss.ts
  class BlockPropRss (line 58) | class BlockPropRss extends Compbaser implements AfterViewInit {
    method constructor (line 89) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 111) | set setBlockData(i_blockData) {
    method _isUrlCustom (line 122) | _isUrlCustom(i_url): boolean {
    method _onRssSelected (line 129) | _onRssSelected(event) {
    method _onFontChanged (line 133) | _onFontChanged(config: IFontSelector) {
    method _render (line 147) | private _render() {
    method ngAfterViewInit (line 179) | ngAfterViewInit() {
    method saveToStore (line 183) | private saveToStore() {
    method destroy (line 200) | destroy() {

FILE: src/app/blocks/block-prop-scene.ts
  class BlockPropScene (line 30) | class BlockPropScene extends Compbaser implements AfterViewInit {
    method constructor (line 36) | constructor(@Inject('BLOCK_PLACEMENT') private blockPlacement, private...
    method setBlockData (line 47) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 52) | ngAfterViewInit() {
    method _render (line 56) | _render() {
    method saveToStore (line 62) | private saveToStore() {
    method destroy (line 71) | destroy() {

FILE: src/app/blocks/block-prop-sheets.ts
  class BlockPropSheets (line 47) | class BlockPropSheets extends Compbaser implements AfterViewInit {
    method constructor (line 55) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 69) | set setBlockData(i_blockData) {
    method _onSheetSelected (line 78) | _onSheetSelected(event) {
    method _render (line 86) | private _render() {
    method _getGoogleSheets (line 94) | _getGoogleSheets() {
    method _getFileId (line 131) | private _getFileId(): string {
    method ngAfterViewInit (line 137) | ngAfterViewInit() {
    method _onCreateToken (line 141) | _onCreateToken() {
    method saveToStore (line 150) | private saveToStore() {
    method destroy (line 160) | destroy() {

FILE: src/app/blocks/block-prop-twitter.ts
  class BlockPropTwitter (line 39) | class BlockPropTwitter extends Compbaser implements AfterViewInit {
    method constructor (line 44) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 58) | set setBlockData(i_blockData) {
    method _render (line 67) | private _render() {
    method ngAfterViewInit (line 74) | ngAfterViewInit() {
    method _onCreateToken (line 78) | _onCreateToken() {
    method saveToStore (line 87) | private saveToStore() {
    method destroy (line 98) | destroy() {

FILE: src/app/blocks/block-prop-video.ts
  class BlockPropVideo (line 36) | class BlockPropVideo extends Compbaser implements AfterViewInit {
    method constructor (line 41) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 55) | set setBlockData(i_blockData) {
    method _toggleAspectRatio (line 67) | _toggleAspectRatio(i_value) {
    method _render (line 75) | private _render() {
    method ngAfterViewInit (line 87) | ngAfterViewInit() {
    method saveToStore (line 91) | private saveToStore() {
    method destroy (line 101) | destroy() {

FILE: src/app/blocks/block-prop-weather.ts
  class BlockPropWeather (line 54) | class BlockPropWeather extends Compbaser implements AfterViewInit {
    method constructor (line 59) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef, pr...
    method setBlockData (line 74) | set setBlockData(i_blockData) {
    method _render (line 83) | private _render() {
    method ngAfterViewInit (line 92) | ngAfterViewInit() {
    method saveToStore (line 96) | private saveToStore() {
    method destroy (line 108) | destroy() {

FILE: src/app/blocks/block-prop-youtube.ts
  class BlockPropYouTube (line 59) | class BlockPropYouTube extends Compbaser implements AfterViewInit {
    method constructor (line 66) | constructor(private fb: FormBuilder, private bs: BlockService, private...
    method setBlockData (line 82) | set setBlockData(i_blockData) {
    method ngAfterViewInit (line 91) | ngAfterViewInit() {
    method _render (line 95) | _render() {
    method saveToStore (line 112) | private saveToStore() {
    method destroy (line 130) | destroy() {

FILE: src/app/blocks/block-prop.digg.ts
  class BlockPropDigg (line 25) | class BlockPropDigg extends Compbaser implements AfterViewInit {
    method constructor (line 30) | constructor(private fb: FormBuilder) {
    method setBlockData (line 43) | set setBlockData(i_blockData) {
    method _render (line 52) | private _render() {
    method ngAfterViewInit (line 57) | ngAfterViewInit() {
    method destroy (line 61) | destroy() {

FILE: src/app/blocks/block-service.ts
  type IDomPlayerDataJson (line 20) | interface IDomPlayerDataJson {
  type ISceneData (line 70) | interface ISceneData {
  type IBlockData (line 82) | interface IBlockData {
  class BlockService (line 114) | class BlockService {
    method constructor (line 124) | constructor(private commBroker: CommBroker, @Inject('BLOCK_PLACEMENT')...
    method getBlockNameByCode (line 754) | getBlockNameByCode(i_blockCode: number): string {
    method getCommonSceneLayout (line 764) | getCommonSceneLayout(i_placement, w ?, h ?) {
    method getCommonDefaultXML (line 777) | getCommonDefaultXML() {
    method getCommonSceneDefaultXML (line 788) | getCommonSceneDefaultXML() {
    method getCommonBorderXML (line 799) | getCommonBorderXML() {
    method getCommonBackgroundXML (line 808) | getCommonBackgroundXML() {
    method getBlockBoilerplate (line 825) | getBlockBoilerplate(i_blockID) {
    method getIconFromMimeType (line 836) | getIconFromMimeType(i_mimeType) {
    method getBlocks (line 852) | getBlocks() {
    method getBlockCodeFromFileExt (line 863) | getBlockCodeFromFileExt(i_fileExtension) {
    method getFontAwesome (line 883) | getFontAwesome(i_fontName) {
    method getFontsAwesome (line 896) | getFontsAwesome() {
    method playerDataTojson (line 907) | playerDataTojson(i_playerData) {
    method playerDataToxml (line 919) | playerDataToxml(i_playerData) {
    method getServiceType (line 925) | public getServiceType(): string {
    method getBlockDataInScene (line 929) | public getBlockDataInScene(i_sceneData: ISceneData): Observable<IBlock...
    method getBlockData (line 964) | public getBlockData(blockId): Observable<IBlockData> {
    method getBlockPlayerData (line 1080) | getBlockPlayerData(i_blockData: IBlockData): XMLDocument {
    method notifySceneBgChanged (line 1111) | notifySceneBgChanged() {
    method notifySceneBlockChanged (line 1115) | notifySceneBlockChanged(i_block: string | IBlockData) {
    method notifyReloadScene (line 1120) | notifyReloadScene(i_sceneId) {
    method setBlockPlayerData (line 1132) | setBlockPlayerData(blockData: IBlockData, i_xmlDoc: XMLDocument | stri...

FILE: src/app/blocks/json-event-grid.ts
  class JsonEventResourceModel (line 13) | class JsonEventResourceModel extends StoreModel {
    method constructor (line 14) | constructor(data: {
  class JsonEventGrid (line 62) | class JsonEventGrid extends Compbaser implements AfterViewInit {
    method constructor (line 71) | constructor(private yp: YellowPepperService, private bs: BlockService) {
    method setBlockData (line 87) | set setBlockData(i_blockData) {
    method resources (line 93) | set resources(i_jsonEventResources: Array<JsonEventResourceModel>) {
    method collectionList (line 98) | set collectionList(i_collectionList) {
    method showOption (line 103) | set showOption(i_value: 'url' | 'page') {
    method _render (line 119) | _render() {
    method _initEventTable (line 127) | _initEventTable() {
    method _setAction (line 151) | _setAction(event: ISimpleGridEdit, index: number) {
    method _onRemoveEvent (line 158) | _onRemoveEvent() {
    method _onAddNewEvent (line 166) | _onAddNewEvent() {
    method _selectedAction (line 174) | _selectedAction() {
    method _selectedResource (line 180) | _selectedResource() {
    method _onUrlEdited (line 186) | _onUrlEdited(event: ISimpleGridEdit, index) {
    method _onPageEdited (line 195) | _onPageEdited(event: ISimpleGridEdit, index) {
    method _onLabelEdited (line 204) | _onLabelEdited(event: ISimpleGridEdit, index) {
    method ngAfterViewInit (line 211) | ngAfterViewInit() {
    method ngOnInit (line 214) | ngOnInit() {
    method destroy (line 217) | destroy() {

FILE: src/app/campaigns/add-content.ts
  class AddContent (line 130) | class AddContent extends Compbaser implements AfterViewInit {
    method constructor (line 144) | constructor(@Inject('HYBRID_PRIVATE') private hybrid_private: boolean,
    method placement (line 176) | set placement(i_value) {
    method _addBlock (line 208) | _addBlock(i_addContents: IAddContents) {
    method ngAfterViewInit (line 229) | ngAfterViewInit() {
    method _onUpgEnterprise (line 233) | _onUpgEnterprise(event: MouseEvent) {
    method _onComponentSelected (line 239) | _onComponentSelected(i_component) {
    method _onResourceSelected (line 246) | _onResourceSelected(i_resource) {
    method _onSceneSelected (line 251) | _onSceneSelected(i_scene) {
    method _close (line 256) | _close() {
    method _render (line 266) | _render() {
    method _checkAllowedComponent (line 399) | _checkAllowedComponent(i_componentID) {
    method destroy (line 425) | destroy() {

FILE: src/app/campaigns/campaign-channels.ts
  class CampaignChannels (line 73) | class CampaignChannels extends Compbaser implements AfterViewInit {
    method constructor (line 80) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method ngAfterViewInit (line 87) | ngAfterViewInit() {
    method listenChannelSelected (line 94) | private listenChannelSelected() {
    method _onItemSelected (line 156) | _onItemSelected(event) {
    method _onDragComplete (line 167) | _onDragComplete(i_blocks) {
    method _sortBlock (line 171) | private _sortBlock(i_blockList: Array<IBlockData>): Array<IBlockData> {
    method _reOrderChannelBlocks (line 189) | _reOrderChannelBlocks(i_blocks) {
    method _getBlockRecord (line 207) | private _getBlockRecord(i_blockId, i_cb: (i_blockId: CampaignTimelineC...
    method ngOnInit (line 215) | ngOnInit() {
    method destroy (line 218) | destroy() {

FILE: src/app/campaigns/campaign-duration.ts
  class CampaignDuration (line 15) | class CampaignDuration extends Compbaser implements AfterViewInit {
    method constructor (line 19) | constructor(private yp: YellowPepperService, private cd:ChangeDetector...
    method ngAfterViewInit (line 23) | ngAfterViewInit() {
    method ngOnInit (line 28) | ngOnInit() {
    method destroy (line 31) | destroy() {

FILE: src/app/campaigns/campaign-editor-props.ts
  class CampaignEditorProps (line 49) | class CampaignEditorProps extends Compbaser {
    method constructor (line 52) | constructor(private yp: YellowPepperService) {
    method destroy (line 57) | destroy() {

FILE: src/app/campaigns/campaign-editor.ts
  class CampaignEditor (line 53) | class CampaignEditor extends Compbaser {
    method constructor (line 69) | constructor(private yp: YellowPepperService, private actions: AppdbAct...
    method _onAddContent (line 134) | _onAddContent() {
    method _timelineDurationChange (line 140) | _timelineDurationChange(i_duration) {
    method _campaignStoryTimelineCmd (line 148) | _campaignStoryTimelineCmd(i_cmd){
    method _onStateChanged (line 152) | _onStateChanged(state:ITimelineState){
    method _onRemoveTimeline (line 156) | _onRemoveTimeline() {
    method _changeZoom (line 191) | _changeZoom(value) {
    method _onTimelineViewMode (line 195) | _onTimelineViewMode(i_mode: StoryBoardListViewModeEnum) {
    method _onAddTimeline (line 205) | _onAddTimeline() {
    method _onEditScreenLayout (line 209) | _onEditScreenLayout() {
    method _onRemoveContent (line 222) | _onRemoveContent() {
    method _onCampaignPreview (line 236) | _onCampaignPreview() {
    method _onTimelinePreview (line 242) | _onTimelinePreview() {
    method _onGoBack (line 250) | _onGoBack() {
    method ngOnInit (line 255) | ngOnInit() {
    method destroy (line 258) | destroy() {

FILE: src/app/campaigns/campaign-layout.ts
  class CampaignLayout (line 32) | class CampaignLayout extends Compbaser {
    method constructor (line 44) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method ngAfterViewInit (line 48) | ngAfterViewInit() {
    method mouseHoverEffect (line 66) | set mouseHoverEffect(i_value) {
    method onNewCampaignMode (line 71) | set onNewCampaignMode(i_value: boolean) {
    method getNewCampaignParams (line 76) | private getNewCampaignParams() {
    method _render (line 103) | private _render() {
    method ngOnInit (line 120) | ngOnInit() {
    method destroy (line 123) | destroy() {

FILE: src/app/campaigns/campaign-list.ts
  class CampaignList (line 26) | class CampaignList extends Compbaser {
    method constructor (line 31) | constructor() {
    method campaigns (line 36) | set campaigns(i_campaigns: List<CampaignsModelExt>) {
    method _onCampaignSelected (line 49) | _onCampaignSelected(event: MouseEvent, campaign: CampaignsModelExt, in...
    method ngOnInit (line 75) | ngOnInit() {
    method destroy (line 78) | destroy() {

FILE: src/app/campaigns/campaign-manager.ts
  class CampaignManager (line 33) | class CampaignManager extends Compbaser {
    method constructor (line 40) | constructor(private el: ElementRef, private yp: YellowPepperService, p...
    method onRoute1 (line 95) | onRoute1() {
    method onRoute2 (line 99) | onRoute2() {
    method onRoute3 (line 103) | onRoute3() {
    method onRoute4 (line 107) | onRoute4() {
    method onRoute5 (line 111) | onRoute5() {
    method onRoute6 (line 115) | onRoute6() {
    method _onCampaignSelected (line 124) | _onCampaignSelected(i_uiState: IUiState) {
    method _createCampaign (line 128) | _createCampaign() {
    method _onWizard (line 134) | _onWizard() {
    method destroy (line 138) | destroy() {

FILE: src/app/campaigns/campaign-name.ts
  class CampaignName (line 18) | class CampaignName extends Compbaser {
    method constructor (line 20) | constructor(private yp: YellowPepperService) {
    method getCampaignNameChanged (line 30) | public get getCampaignNameChanged(): string {
    method _onKeyDown (line 34) | _onKeyDown(event:KeyboardEvent){
    method ngOnInit (line 40) | ngOnInit() {
    method destroy (line 43) | destroy() {

FILE: src/app/campaigns/campaign-orientation.ts
  type OrientationEnum (line 8) | enum OrientationEnum {
  class CampaignOrientation (line 47) | class CampaignOrientation extends Compbaser {
    method constructor (line 53) | constructor(@Inject(forwardRef(() => YellowPepperService)) private yp:...
    method ngOnInit (line 79) | ngOnInit() {
    method destroy (line 82) | destroy() {

FILE: src/app/campaigns/campaign-props-manager.ts
  class CampaignPropsManager (line 47) | class CampaignPropsManager extends Compbaser {
    method constructor (line 49) | constructor(private yp: YellowPepperService) {
    method ngOnInit (line 57) | ngOnInit() {
    method destroy (line 60) | destroy() {

FILE: src/app/campaigns/campaign-props.ts
  type CampaignPlaylistModeEnum (line 15) | enum CampaignPlaylistModeEnum  {
  class CampaignProps (line 128) | class CampaignProps extends Compbaser {
    method constructor (line 147) | constructor(private fb: FormBuilder, private ngmslibService: NgmslibSe...
    method _onChangePlaylistMode (line 177) | _onChangePlaylistMode(mode: number) {
    method renderFormInputs (line 195) | private renderFormInputs() {
    method renderFormInputsReactive (line 206) | private renderFormInputsReactive() {
    method listenUpdatedFormBlur (line 218) | listenUpdatedFormBlur(event) {
    method listenUpdatedFormReactive (line 223) | private listenUpdatedFormReactive() {
    method saveToStore (line 237) | private saveToStore() {
    method removeCampaign (line 248) | removeCampaign() {
    method destroy (line 278) | destroy() {

FILE: src/app/campaigns/campaign-resolution.ts
  class CampaignResolution (line 25) | class CampaignResolution extends Compbaser {
    method constructor (line 31) | constructor(private yp: YellowPepperService) {
    method getNewCampaignParams (line 57) | private getNewCampaignParams() {
    method ngOnInit (line 73) | ngOnInit() {
    method destroy (line 76) | destroy() {

FILE: src/app/campaigns/campaign-sched-props.ts
  class CampaignSchedProps (line 18) | class CampaignSchedProps extends Compbaser implements AfterViewInit {
    method constructor (line 35) | constructor(private fb: FormBuilder, private el: ElementRef, private y...
    method ngAfterViewInit (line 49) | ngAfterViewInit() {
    method _setPriority (line 65) | _setPriority(i_value: number) {
    method _onDurationChanged (line 70) | _onDurationChanged(i_value) {
    method _onStartTimeChanged (line 75) | _onStartTimeChanged(i_value) {
    method _renderCarouselPosition (line 80) | private _renderCarouselPosition() {
    method _renderConflictPriority (line 84) | private _renderConflictPriority() {
    method _renderFormInputs (line 94) | private _renderFormInputs() {
    method _initDays (line 133) | private _initDays() {
    method _initTimePicker (line 146) | private _initTimePicker() {
    method _onDaysChanged (line 163) | _onDaysChanged(checked, day: {}, i: number) {
    method _saveDates (line 177) | _saveDates(key, event: MouseEvent) {
    method _saveRepeat (line 199) | _saveRepeat() {
    method _saveToStore (line 204) | private _saveToStore(key?: string, event?: MouseEvent) {
    method destroy (line 210) | destroy() {

FILE: src/app/campaigns/campaign-story-timeline.ts
  type IChannelCollection (line 20) | interface IChannelCollection {
  type IOutputs (line 25) | interface IOutputs {
  type IChannels (line 32) | interface IChannels {
  type IItem (line 41) | interface IItem {
  type ITimelineState (line 52) | interface ITimelineState {
  class CampaignStoryTimeline (line 90) | class CampaignStoryTimeline extends Compbaser implements AfterViewInit {
    method constructor (line 160) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method zoom (line 242) | set zoom(i_zoom: number) {
    method switchMode (line 251) | set switchMode(i_mode: boolean) {
    method updateStateChannelSelection (line 256) | private updateStateChannelSelection(i_channelSelectedId: number) {
    method updateStateDuration (line 267) | private updateStateDuration(i_duration: number) {
    method updateStateChannels (line 272) | private updateStateChannels(i_channels: List<CampaignTimelineChanelsMo...
    method updateStateBlocks (line 288) | private updateStateBlocks(i_channels, i_blockIdSelected) {
    method applyState (line 330) | private applyState() {
    method _sortBlock (line 342) | private _sortBlock(i_blockList) {
    method closedGaps (line 354) | public closedGaps(){
    method resizeToLargest (line 358) | public resizeToLargest(){
    method alignLeft (line 362) | public alignLeft(){
    method alignRight (line 366) | public alignRight(){
    method remove (line 370) | remove(id) {
    method reset (line 375) | reset() {
    method add (line 379) | add() {
    method itemsMoved (line 383) | itemsMoved(event) {
    method channelAdded (line 392) | channelAdded(event) {
    method onChannelClicked (line 396) | onChannelClicked(event) {
    method handleMouseEvents (line 406) | handleMouseEvents(event: KeyboardEvent, direction) {
    method handleKeyboardEvents (line 410) | handleKeyboardEvents(event: KeyboardEvent, direction) {
    method itemsClicked (line 417) | itemsClicked(event) {
    method itemsChanged (line 432) | itemsChanged(event) {
    method itemAdded (line 440) | itemAdded(event) {
    method ngAfterViewInit (line 444) | ngAfterViewInit() {
    method ngOnInit (line 449) | ngOnInit() {
    method destroy (line 452) | destroy() {

FILE: src/app/campaigns/campaigns-navigation.ts
  class CampaignsNavigation (line 57) | class CampaignsNavigation extends Compbaser {
    method constructor (line 60) | constructor(private actions: AppdbAction, private yp: YellowPepperServ...
    method destroy (line 65) | destroy() {

FILE: src/app/campaigns/campaigns.ts
  class Campaigns (line 81) | class Campaigns extends Compbaser {
    method constructor (line 87) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _onOpenScreenLayoutEditor (line 126) | _onOpenScreenLayoutEditor() {
    method _onAddedContent (line 129) | _onAddedContent(i_addContents: IAddContents) {
    method _onLocationMapClosed (line 142) | _onLocationMapClosed(){
    method _onAddedContentClosed (line 147) | _onAddedContentClosed(){
    method _onSlideChange (line 152) | _onSlideChange(event: ISliderItemData) {
    method _addTimelineToCampaign (line 162) | private _addTimelineToCampaign(i_screenTemplateData: IScreenTemplateDa...
    method _createCampaign (line 184) | private _createCampaign(i_screenTemplateData: IScreenTemplateData) {

FILE: src/app/campaigns/channel-block-props.ts
  class ChannelBlockProps (line 24) | class ChannelBlockProps extends Compbaser implements AfterViewInit {
    method constructor (line 33) | constructor(private rp: RedPepperService, private yp: YellowPepperServ...
    method ngAfterViewInit (line 37) | ngAfterViewInit() {
    method _reOrderChannelBlocks (line 68) | _reOrderChannelBlocks() {
    method _propLengthKnobsInit (line 105) | _propLengthKnobsInit() {
    method ngOnInit (line 187) | ngOnInit() {
    method destroy (line 190) | destroy() {

FILE: src/app/campaigns/channel-props.ts
  class ChannelProps (line 97) | class ChannelProps extends Compbaser {
    method constructor (line 106) | constructor(private fb: FormBuilder, private yp: YellowPepperService, ...
    method onFormChange (line 138) | onFormChange(event) {
    method updateSore (line 143) | private updateSore() {
    method renderFormInputs (line 152) | private renderFormInputs() {
    method destroy (line 164) | destroy() {

FILE: src/app/campaigns/dashboard-props.ts
  class DashboardProps (line 30) | class DashboardProps extends Compbaser {
    method constructor (line 35) | constructor(private yp: YellowPepperService) {
    method destroy (line 53) | destroy() {

FILE: src/app/campaigns/index.ts
  constant LAZY_ROUTES (line 36) | const LAZY_ROUTES = [
  class CampaignsLazyModule (line 48) | class CampaignsLazyModule {

FILE: src/app/campaigns/screen-layout-editor-props.ts
  class ScreenLayoutEditorProps (line 67) | class ScreenLayoutEditorProps extends Compbaser {
    method constructor (line 73) | constructor(private fb: FormBuilder, private yp: YellowPepperService, ...
    method _saveToStore (line 104) | _saveToStore() {
    method renderFormInputs (line 118) | private renderFormInputs() {
    method destroy (line 126) | destroy() {

FILE: src/app/campaigns/screen-layout-editor.ts
  type selectTimelineBoardIdResult (line 16) | interface selectTimelineBoardIdResult {
  class ScreenLayoutEditor (line 58) | class ScreenLayoutEditor extends Compbaser implements AfterViewInit {
    method constructor (line 77) | constructor(private yp: YellowPepperService, private componentFactoryR...
    method ngAfterViewInit (line 88) | ngAfterViewInit() {
    method _moveViewer (line 130) | _moveViewer(i_props) {
    method _onRemoveDivision (line 149) | _onRemoveDivision() {
    method _onAddDivision (line 184) | _onAddDivision() {
    method selectView (line 231) | selectView(i_campaign_timeline_id, i_campaign_timeline_board_template_...
    method _onPushTop (line 256) | _onPushTop() {
    method _updateZorder (line 269) | _updateZorder() {
    method _onPushBottom (line 285) | _onPushBottom() {
    method _listenBackgroundSelected (line 298) | _listenBackgroundSelected() {
    method _listenObjectsOverlap (line 311) | _listenObjectsOverlap() {
    method _canvasFactory (line 334) | _canvasFactory(i_width, i_height) {
    method _enforceViewerVisible (line 398) | _enforceViewerVisible() {
    method _enforceViewerMinimums (line 437) | _enforceViewerMinimums(i_viewer) {
    method _listenObjectChanged (line 456) | _listenObjectChanged() {
    method _saveToStore (line 508) | _saveToStore(i_viewer, i_props) {
    method _selectNextDivision (line 522) | _selectNextDivision() {
    method _goBack (line 537) | _goBack() {
    method ngOnInit (line 548) | ngOnInit() {
    method destroy (line 551) | destroy() {

FILE: src/app/campaigns/sequencer.ts
  class Sequencer (line 71) | class Sequencer extends Compbaser {
    method constructor (line 85) | constructor(private el: ElementRef, private yp: YellowPepperService, p...
    method trackByFn (line 94) | trackByFn(index, item) {
    method ngAfterViewInit (line 98) | ngAfterViewInit() {
    method _onContextClicked (line 130) | _onContextClicked(cmd: string, screenTemplateData: IScreenTemplateData) {
    method onContextMenu (line 143) | public onContextMenu($event: MouseEvent, item: any): void {
    method setCampaignTimelinesModels (line 155) | set setCampaignTimelinesModels(i_campaignTimelinesModels: List<Campaig...
    method _sortTimelines (line 178) | private _sortTimelines(i_cb: (sortedTimelines: Array<CampaignTimelines...
    method _getScreenTemplate (line 205) | _getScreenTemplate(i_campaignTimelinesModel: CampaignTimelinesModel): ...
    method _onScreenTemplateSelected (line 217) | _onScreenTemplateSelected(event, screenTemplate: ScreenTemplate) {
    method _setAndNotifyIds (line 247) | private _setAndNotifyIds() {
    method _createSortable (line 264) | private _createSortable(i_selector) {
    method reSequenceTimelines (line 310) | reSequenceTimelines() {
    method _sortablePress (line 327) | private _sortablePress() {
    method _sortableDragStart (line 342) | private _sortableDragStart() {
    method _sortableDrag (line 350) | private _sortableDrag() {
    method _sortableSnap (line 377) | private _sortableSnap(y) {
    method _onDivisionDoubleClicked (line 385) | _onDivisionDoubleClicked(i_campaign_timeline_board_viewer_id) {
    method _notifyPropertySelect (line 399) | private _notifyPropertySelect(i_type) {
    method onSelectNextChannel (line 409) | public onSelectNextChannel(): Subscription {
    method getAssignedViewerIdFromChannelId (line 436) | private getAssignedViewerIdFromChannelId(timeline_channel_id) {
    method ngOnInit (line 455) | ngOnInit() {
    method destroy (line 458) | destroy() {

FILE: src/app/campaigns/timeline-props.ts
  class TimelineProps (line 80) | class TimelineProps extends Compbaser {
    method constructor (line 88) | constructor(private fb: FormBuilder, private ngmslibService: NgmslibSe...
    method onFormChange (line 112) | private onFormChange(event) {
    method updateSore (line 117) | private updateSore() {
    method renderFormInputs (line 123) | private renderFormInputs() {
    method destroy (line 133) | destroy() {

FILE: src/app/campaigns/timeline-ruler/timeline-ruler.component.ts
  class TimelineRulerComponent (line 8) | class TimelineRulerComponent implements OnInit, OnChanges {
    method constructor (line 17) | constructor() { }
    method ngOnInit (line 19) | ngOnInit() {
    method ngOnChanges (line 25) | ngOnChanges() {
    method drawScale (line 29) | drawScale() {

FILE: src/app/campaigns/timeline/timeline.component.ts
  class TimelineComponent (line 12) | class TimelineComponent implements OnInit, AfterViewChecked, OnChanges {
    method constructor (line 56) | constructor() { }
    method ngOnInit (line 58) | ngOnInit() {
    method ngOnChanges (line 67) | ngOnChanges() {
    method initializeStateChanges (line 76) | initializeStateChanges() {
    method ngAfterViewChecked (line 90) | ngAfterViewChecked() {
    method timelineDurationChange (line 374) | timelineDurationChange(dur) {
    method resetSelection (line 380) | resetSelection() {
    method drawChannels (line 387) | drawChannels() {
    method applyItemBounds (line 447) | applyItemBounds() {
    method onScroll (line 480) | onScroll(e) {
    method drag (line 484) | drag(e, type, resourceIndex) {
    method resizeToLargest (line 489) | resizeToLargest() {
    method closeGaps (line 506) | closeGaps() {
    method alignLeft (line 538) | alignLeft() {
    method alignRight (line 552) | alignRight() {
    method changeZoom (line 566) | changeZoom(e) {
    method toggleFrozen (line 579) | toggleFrozen(e) {
    method updateItemChannel (line 593) | updateItemChannel(item) {
    method moveItem (line 601) | moveItem(item, x, y, dur = 0) {
    method addChannel (line 616) | addChannel(channel) {
    method addCommonChannel (line 635) | addCommonChannel(channel) {
    method addOutput (line 654) | addOutput(output) {
    method addItem (line 677) | addItem(item) {
    method getChannelById (line 695) | getChannelById(id) {
    method updateContainerSize (line 703) | updateContainerSize() {
    method selectChannel (line 713) | selectChannel(i) {
    method selectItem (line 721) | selectItem(item) {
    method selectOutput (line 731) | selectOutput(i) {
    method resetObjectSelection (line 740) | resetObjectSelection() {
    method deleteChannel (line 750) | deleteChannel(i) {
    method deleteOutput (line 757) | deleteOutput(i) {
    method deleteItem (line 769) | deleteItem(i) {

FILE: src/app/dashboard/dash-panel-mini.ts
  class DashPanelMini (line 22) | class DashPanelMini extends Compbaser implements AfterViewInit {
    method constructor (line 31) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method ngAfterViewInit (line 50) | ngAfterViewInit() {
    method destroy (line 53) | destroy() {

FILE: src/app/dashboard/dash-panel.ts
  class DashPanel (line 25) | class DashPanel extends Compbaser implements AfterViewInit {
    method constructor (line 39) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _listenLiveLog (line 54) | _listenLiveLog() {
    method _listenLoadLines (line 63) | _listenLoadLines() {
    method _listenStationsConnection (line 68) | _listenStationsConnection() {
    method ngAfterViewInit (line 86) | ngAfterViewInit() {
    method _loadStationData (line 101) | _loadStationData() {
    method setTwitterWidth (line 105) | setTwitterWidth() {
    method destroy (line 113) | destroy() {

FILE: src/app/dashboard/dashboard-navigation.ts
  class Dashboard (line 29) | class Dashboard implements AfterViewInit {
    method constructor (line 31) | constructor(private toastr: ToastsManager) {
    method ngAfterViewInit (line 34) | ngAfterViewInit(){
    method clearToasts (line 39) | clearToasts(){

FILE: src/app/dashboard/server-avg.ts
  class ServerAvg (line 25) | class ServerAvg extends Compbaser {
    method constructor (line 30) | constructor(private _http: Http, private cd:ChangeDetectorRef) {
    method saveInstance (line 113) | saveInstance(chartInstance) {
    method serverStatus (line 117) | public serverStatus() {

FILE: src/app/dashboard/storage-used.ts
  class StorageUsed (line 30) | class StorageUsed extends Compbaser {
    method constructor (line 36) | constructor(private yp: YellowPepperService, private cd:ChangeDetector...
    method saveInstance (line 144) | saveInstance(chartInstance) {

FILE: src/app/fasterq/fasterq-editor.ts
  type IQueueSave (line 18) | interface IQueueSave {
  class FasterqEditor (line 50) | class FasterqEditor extends Compbaser {
    method constructor (line 70) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _openRemoteStatus (line 142) | _openRemoteStatus() {
    method _buildURL (line 151) | _buildURL() {
    method _selectFirst (line 162) | _selectFirst() {
    method _pollServices (line 169) | _pollServices() {
    method _updateTotalToBeServiced (line 183) | _updateTotalToBeServiced() {
    method _onQueueSelected (line 192) | _onQueueSelected(i_queue: FasterqQueueModel) {
    method _getQueueIndexByServiceId (line 205) | _getQueueIndexByServiceId(): number {
    method _scrollTo (line 218) | _scrollTo(i_index) {
    method _getQueueFromSelectedIndex (line 232) | _getQueueFromSelectedIndex(): FasterqQueueModel {
    method _selectIfDefault (line 238) | _selectIfDefault() {
    method _onCall (line 247) | _onCall() {
    method _onService (line 269) | _onService() {
    method _calcAverages (line 295) | _calcAverages() {
    method _onPrev (line 338) | _onPrev() {
    method _onNext (line 344) | _onNext() {
    method _onGoTo (line 352) | _onGoTo() {
    method _watchStart (line 366) | _watchStart() {
    method _watchStop (line 378) | _watchStop() {
    method destroy (line 384) | destroy() {

FILE: src/app/fasterq/fasterq-line-props.ts
  class FasterqLineProps (line 96) | class FasterqLineProps extends Compbaser implements AfterViewInit {
    method constructor (line 108) | constructor(private fb: FormBuilder, private yp: YellowPepperService, ...
    method saveToStore (line 143) | saveToStore() {
    method _onResetLine (line 154) | _onResetLine() {
    method _onOpenTerminal (line 172) | _onOpenTerminal() {
    method ngAfterViewInit (line 191) | ngAfterViewInit() {
    method ngOnInit (line 194) | ngOnInit() {
    method destroy (line 197) | destroy() {

FILE: src/app/fasterq/fasterq-manager.ts
  class FasterqManager (line 56) | class FasterqManager extends Compbaser {
    method constructor (line 62) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _onLineSelected (line 77) | _onLineSelected(event: MouseEvent, i_fasterqLineModel: FasterqLineMode...
    method _createNew (line 105) | _createNew() {
    method _remove (line 113) | _remove() {
    method destroy (line 129) | destroy() {

FILE: src/app/fasterq/fasterq-navigation.ts
  class FasterqNavigation (line 35) | class FasterqNavigation extends Compbaser {

FILE: src/app/fasterq/fasterq-terminal.ts
  class FasterqTerminal (line 164) | class FasterqTerminal extends Compbaser implements AfterViewInit {
    method constructor (line 181) | constructor(private toastr: ToastsManager, private http: Http, private...
    method ngOnInit (line 217) | ngOnInit() {
    method ngAfterViewInit (line 243) | ngAfterViewInit() {
    method _getServerDateTime (line 251) | _getServerDateTime(i_cb) {
    method _initServices (line 269) | _initServices(i_dateTime) {
    method _createStorage (line 305) | _createStorage(i_service_id, i_verification, i_date) {
    method _getNewSpot (line 317) | _getNewSpot() {
    method _releaseSpot (line 334) | _releaseSpot() {
    method _getServiceID (line 350) | _getServiceID() {
    method _pollNowServicing (line 378) | _pollNowServicing() {
    method _isValidEmail (line 403) | _isValidEmail(email) {
    method _createQRcode (line 413) | _createQRcode() {
    method _onCall (line 422) | _onCall($event) {
    method _onSend (line 451) | _onSend($event) {
    method _onPrint (line 481) | _onPrint(event) {
    method _printNumber (line 523) | _printNumber(i_service_id, name) {
    method createOptionArgs (line 547) | private createOptionArgs(i_urlEndPoint, i_method, i_body): RequestOpti...
    method _buildURL (line 561) | _buildURL() {

FILE: src/app/fasterq/fasterq.ts
  class Fasterq (line 29) | class Fasterq extends Compbaser {
    method constructor (line 33) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _onLocationMapClosed (line 55) | _onLocationMapClosed(){
    method _onSlideChange (line 60) | _onSlideChange(event: ISliderItemData) {

FILE: src/app/fasterq/index.ts
  constant LAZY_ROUTES (line 12) | const LAZY_ROUTES = [
  class FasterqLazyModule (line 22) | class FasterqLazyModule {

FILE: src/app/help/help-navigation.ts
  class HelpNavigation (line 114) | class HelpNavigation extends Compbaser {
    method constructor (line 126) | constructor(private yp: YellowPepperService) {
    method _onClose (line 131) | _onClose() {
    method _onPlay (line 135) | _onPlay(i_path) {
    method destroy (line 141) | destroy() {

FILE: src/app/help/index.ts
  constant LAZY_ROUTES (line 9) | const LAZY_ROUTES = [
  class HelpLazyModule (line 19) | class HelpLazyModule {

FILE: src/app/install/index.ts
  constant LAZY_ROUTES (line 7) | const LAZY_ROUTES = [
  class InstallLazyModule (line 17) | class InstallLazyModule {

FILE: src/app/install/install-navigation.ts
  class InstallNavigation (line 175) | class InstallNavigation extends Compbaser {
    method _openInNewTab (line 177) | _openInNewTab(url, event?:MouseEvent) {

FILE: src/app/live-preview/live-preview.ts
  type PreviewModeEnum (line 12) | enum PreviewModeEnum {
  class LivePreview (line 54) | class LivePreview extends Compbaser implements AfterViewInit {
    method constructor (line 56) | constructor(private cd:ChangeDetectorRef, private yp: YellowPepperServ...
    method ngAfterViewInit (line 61) | ngAfterViewInit() {
    method _onExit (line 93) | _onExit() {
    method checkFlash (line 98) | checkFlash() {
    method launchScene (line 113) | launchScene(i_sceneId) {
    method launchTimeline (line 122) | launchTimeline(i_campaignID, i_campaignTimelineID) {
    method launchCampaign (line 131) | launchCampaign(i_campaignID) {
    method ngOnInit (line 136) | ngOnInit() {
    method destroy (line 139) | destroy() {

FILE: src/app/locale-selector/local-selector.ts
  class LocaleSelector (line 37) | class LocaleSelector extends Compbaser {
    method constructor (line 73) | constructor(private yp: YellowPepperService) {
    method orientation (line 78) | set orientation(i_orientation: 'inline' | 'modal') {
    method _saveAndReload (line 85) | _saveAndReload() {
    method _onSelected (line 89) | _onSelected(i_locale) {
    method redirect (line 93) | public redirect(i_locale) {
    method destroy (line 99) | destroy() {

FILE: src/app/location/location-map.ts
  class LocationMap (line 67) | class LocationMap extends Compbaser implements AfterViewInit {
    method constructor (line 84) | constructor(private yp: YellowPepperService, private cd: ChangeDetecto...
    method ngAfterViewInit (line 102) | ngAfterViewInit() {
    method _toggleSimMode (line 146) | _toggleSimMode() {
    method _loadStationList (line 163) | _loadStationList() {
    method _onStationSelected (line 184) | _onStationSelected(event) {
    method _simulateEvent (line 195) | private _simulateEvent(i_marker: LocationMarkModel, i_inRange) {
    method _openSimUrl (line 217) | _openSimUrl() {
    method _listenOnChannels (line 229) | private _listenOnChannels() {
    method _listenOnScenes (line 244) | private _listenOnScenes() {
    method render (line 258) | render() {
    method clickedMarker (line 278) | clickedMarker(i_marker: LocationMarkModel, index: number) {
    method mapClicked (line 286) | mapClicked($event: MouseEvent) {
    method markerDragEnd (line 306) | markerDragEnd(m: LocationMarkModel, $event: MouseEvent) {
    method _close (line 310) | _close() {
    method forceUpdateUi (line 320) | public forceUpdateUi() {
    method setCenter (line 329) | public setCenter(lat, lng) {
    method destroy (line 338) | destroy() {

FILE: src/app/resources/index.ts
  constant LAZY_ROUTES (line 12) | const LAZY_ROUTES = [
  class ResourcesLazyModule (line 22) | class ResourcesLazyModule {

FILE: src/app/resources/orders.ts
  class Orders (line 53) | class Orders {

FILE: src/app/resources/resource-props-manager.ts
  class ResourcePropsManager (line 62) | class ResourcePropsManager extends Compbaser {
    method constructor (line 75) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _onUpdateResourceName (line 132) | _onUpdateResourceName(event) {
    method ngOnInit (line 140) | ngOnInit() {
    method destroy (line 143) | destroy() {

FILE: src/app/resources/resources-list.ts
  class ResourcesList (line 29) | class ResourcesList extends Compbaser {
    method constructor (line 34) | constructor(public bs: BlockService, private el: ElementRef) {
    method resources (line 39) | set resources(i_resources: List<ResourcesModel>) {
    method setViewMode (line 47) | set setViewMode(i_viewMode: 'grid' | 'list') {
    method _onSelected (line 65) | _onSelected(event: MouseEvent, i_resource: ResourcesModel, index) {
    method resetSelection (line 71) | resetSelection() {
    method ngOnInit (line 75) | ngOnInit() {
    method destroy (line 78) | destroy() {

FILE: src/app/resources/resources-navigation.ts
  class ResourcesNavigation (line 40) | class ResourcesNavigation extends Compbaser {
    method constructor (line 42) | constructor() {
    method destroy (line 46) | destroy() {

FILE: src/app/resources/resources.ts
  class Resources (line 112) | class Resources extends Compbaser {
    method constructor (line 119) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _onRemove (line 131) | _onRemove() {
    method _onFileUpload (line 150) | _onFileUpload(event) {
    method _onSelected (line 161) | _onSelected(i_resource: ResourcesModel) {

FILE: src/app/scenes/index.ts
  constant LAZY_ROUTES (line 17) | const LAZY_ROUTES = [
  class ScenesLazyModule (line 27) | class ScenesLazyModule {

FILE: src/app/scenes/scene-creator.ts
  class SceneCreator (line 59) | class SceneCreator extends Compbaser implements AfterViewInit {
    method constructor (line 69) | constructor(private yp: YellowPepperService, private bs: BlockService,...
    method ngAfterViewInit (line 80) | ngAfterViewInit() {
    method _onSceneImport (line 122) | _onSceneImport() {
    method _onTemplateSelected (line 131) | _onTemplateSelected(account) {
    method _getTemplates (line 137) | private _getTemplates() {
    method _onAddScene (line 186) | _onAddScene(category) {
    method _goBack (line 237) | _goBack() {
    method _nameScene (line 241) | private _nameScene(i_cb) {
    method ngOnInit (line 252) | ngOnInit() {
    method destroy (line 255) | destroy() {
    method _initSceneTemplates (line 258) | private _initSceneTemplates() {

FILE: src/app/scenes/scene-editor.ts
  constant ADD_NEW_BLOCK_SCENE (line 23) | const ADD_NEW_BLOCK_SCENE = 'ADD_NEW_BLOCK_SCENE';
  constant SCENE_BLOCK_CHANGE (line 24) | const SCENE_BLOCK_CHANGE = 'SCENE_BLOCK_CHANGE';
  constant SCENE_CHANGE (line 25) | const SCENE_CHANGE = 'SCENE_CHANGE';
  constant JSON_EVENT_ROW_CHANGED (line 27) | const JSON_EVENT_ROW_CHANGED = 'JSON_EVENT_ROW_CHANGED';
  constant STATIONS_POLL_TIME_CHANGED (line 28) | const STATIONS_POLL_TIME_CHANGED = 'STATIONS_POLL_TIME_CHANGED';
  constant THEME_CHANGED (line 29) | const THEME_CHANGED = 'THEME_CHANGED';
  constant SELECTED_STACK_VIEW (line 30) | const SELECTED_STACK_VIEW = 'SELECTED_STACK_VIEW';
  constant BLOCK_SELECTED (line 31) | const BLOCK_SELECTED = 'BLOCK_SELECTED';
  constant SCENE_BLOCKS_RENDERED (line 32) | const SCENE_BLOCKS_RENDERED = 'SCENE_BLOCKS_RENDERED';
  constant SCENE_EDITOR_REMOVE (line 33) | const SCENE_EDITOR_REMOVE = 'SCENE_EDITOR_REMOVE';
  constant SCENE_ITEM_REMOVE (line 34) | const SCENE_ITEM_REMOVE = 'SCENE_ITEM_REMOVE';
  constant SCENE_CANVAS_SELECTED (line 35) | const SCENE_CANVAS_SELECTED = 'SCENE_CANVAS_SELECTED';
  constant SCENE_SELECT_NEXT (line 36) | const SCENE_SELECT_NEXT = 'SCENE_SELECT_NEXT';
  constant WIZARD_EXIT (line 37) | const WIZARD_EXIT = 'WIZARD_EXIT';
  constant NEW_SCENE_ADD (line 38) | const NEW_SCENE_ADD = 'NEW_SCENE_ADD';
  constant SCENE_LIST_UPDATED (line 39) | const SCENE_LIST_UPDATED = 'SCENE_LIST_UPDATED';
  constant SCENE_UNDO (line 40) | const SCENE_UNDO = 'SCENE_UNDO';
  constant SCENE_REDO (line 41) | const SCENE_REDO = 'SCENE_REDO';
  constant REMOVING_SCENE (line 42) | const REMOVING_SCENE = 'REMOVING_SCENE';
  constant REMOVED_SCENE (line 43) | const REMOVED_SCENE = 'REMOVED_SCENE';
  constant REMOVING_RESOURCE (line 44) | const REMOVING_RESOURCE = 'REMOVING_RESOURCE';
  constant REMOVED_RESOURCE (line 45) | const REMOVED_RESOURCE = 'REMOVED_RESOURCE';
  constant ADDED_RESOURCE (line 46) | const ADDED_RESOURCE = 'ADDED_RESOURCE';
  constant MOUSE_ENTERS_CANVAS (line 47) | const MOUSE_ENTERS_CANVAS = 'MOUSE_ENTERS_CANVAS';
  constant FONT_SELECTION_CHANGED (line 48) | const FONT_SELECTION_CHANGED = 'FONT_SELECTION_CHANGED';
  constant CAMPAIGN_LIST_LOADING (line 49) | const CAMPAIGN_LIST_LOADING = 'CAMPAIGN_LIST_LOADED';
  class SceneEditor (line 95) | class SceneEditor extends Compbaser implements AfterViewInit {
    method constructor (line 125) | constructor(private zone: NgZone, private blockFactory: BlockFactorySe...
    method ngAfterViewInit (line 136) | ngAfterViewInit() {
    method ngOnInit (line 175) | ngOnInit() {
    method _onClosed (line 181) | _onClosed() {
    method _notifyScaleChange (line 186) | _notifyScaleChange() {
    method _onToolbarAction (line 191) | _onToolbarAction(event) {
    method _listenSceneSelection (line 303) | _listenSceneSelection() {
    method _listenBlockSelected (line 327) | _listenBlockSelected() {
    method _updateBlocksCount (line 372) | _updateBlocksCount() {
    method _sceneActive (line 388) | _sceneActive() {
    method _initializeCanvas (line 399) | _initializeCanvas(w, h) {
    method _initializeScene (line 414) | _initializeScene(i_selectedSceneID) {
    method _loadScene (line 425) | _loadScene() {
    method _listenSelectNextBlock (line 446) | _listenSelectNextBlock() {
    method _listenKeyboard (line 488) | _listenKeyboard() {
    method _listenSceneNew (line 531) | _listenSceneNew() {
    method _listenTotalBlocksModified (line 552) | _listenTotalBlocksModified() {
    method _listenSceneChanged (line 580) | _listenSceneChanged() {
    method _listenContextMenu (line 622) | _listenContextMenu() {
    method _onContentMenuSelection (line 664) | _onContentMenuSelection(i_command) {
    method _listenToCanvasScroll (line 787) | _listenToCanvasScroll() {
    method _listenAddBlockWizard (line 804) | _listenAddBlockWizard() {
    method _onAddedNewBlock (line 822) | _onAddedNewBlock() {
    method _sceneProcessing (line 830) | _sceneProcessing(i_status, i_callBack, from ?) {
    method _mementoInit (line 849) | _mementoInit() {
    method _mementoAddState (line 864) | _mementoAddState() {
    method _mementoLoadState (line 887) | _mementoLoadState(i_direction) {
    method _updateZorder (line 925) | _updateZorder(i_pushDirection, i_block) {
    method _preRender (line 956) | _preRender(i_domPlayerData, i_blockIDs ?) {
    method _render (line 1001) | _render(i_blockIDs) {
    method _renderPause (line 1062) | _renderPause() {
    method _renderContinue (line 1073) | _renderContinue() {
    method _createBlock (line 1087) | _createBlock(i_blockIDs) {
    method _delegateSceneBlockModified (line 1106) | _delegateSceneBlockModified() {
    method _listenAppResized (line 1120) | _listenAppResized() {
    method _sceneBlockScaled (line 1136) | _sceneBlockScaled(e) {
    method _sceneBlockMoving (line 1163) | _sceneBlockMoving(i_options) {
    method _listenBlockModified (line 1183) | _listenBlockModified() {
    method _drawGrid (line 1198) | _drawGrid() {
    method _listenCanvasSelections (line 1222) | _listenCanvasSelections() {
    method _blockSelected (line 1287) | _blockSelected(i_block) {
    method _discardSelections (line 1299) | _discardSelections() {
    method _sceneCanvasSelected (line 1310) | _sceneCanvasSelected() {
    method _onItemSelectedFromToolbar (line 1318) | _onItemSelectedFromToolbar(blockID) {
    method _updateBlockCords (line 1333) | _updateBlockCords(i_block, i_calcScale, x, y, w, h, a) {
    method _resetAllObjectScale (line 1368) | _resetAllObjectScale() {
    method _resetObjectScale (line 1381) | _resetObjectScale(i_target) {
    method _disposeBlocks (line 1397) | _disposeBlocks(i_blockID ?) {
    method _canvasUnselectable (line 1428) | _canvasUnselectable() {
    method _zoomTo (line 1449) | _zoomTo(nZooms) {
    method _zoomToBlock (line 1463) | _zoomToBlock(nZooms, block) {
    method _scrollTo (line 1477) | _scrollTo(i_top, i_left) {
    method _zoomIn (line 1487) | _zoomIn() {
    method _zoomInBlock (line 1506) | _zoomInBlock(i_block) {
    method _zoomOutBlock (line 1547) | _zoomOutBlock(i_block) {
    method _zoomOut (line 1587) | _zoomOut() {
    method _zoomReset (line 1606) | _zoomReset() {
    method disposeScene (line 1661) | disposeScene() {
    method createScene (line 1687) | createScene(i_scenePlayerData, i_stripIDs, i_loadScene, i_mimeType, i_...
    method getSelectedSceneID (line 1703) | getSelectedSceneID() {
    method destroy (line 1707) | destroy() {

FILE: src/app/scenes/scene-list.ts
  class SceneList (line 27) | class SceneList extends Compbaser {
    method constructor (line 32) | constructor(private bs: BlockService) {
    method scenes (line 37) | set scenes(i_scenes: Array<ISceneData>) {
    method _onSceneSelected (line 50) | _onSceneSelected(event: MouseEvent, scene: ISceneData, index) {
    method resetSelection (line 70) | resetSelection(){
    method ngOnInit (line 74) | ngOnInit() {
    method destroy (line 77) | destroy() {

FILE: src/app/scenes/scene-manager.ts
  class SceneManager (line 47) | class SceneManager extends Compbaser {
    method constructor (line 52) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _notifyResetSceneSelection (line 76) | _notifyResetSceneSelection(){
    method _removeScene (line 81) | _removeScene() {
    method _duplicateScene (line 104) | _duplicateScene() {
    method createScene (line 125) | private createScene(i_scenePlayerData, i_stripIDs, i_mimeType, i_name?) {
    method save (line 132) | private save() {
    method _onSceneSelected (line 143) | _onSceneSelected(i_uiState: IUiState) {
    method _newScene (line 147) | _newScene() {
    method destroy (line 154) | destroy() {

FILE: src/app/scenes/scene-props-manager.ts
  class ScenePropsManager (line 38) | class ScenePropsManager extends Compbaser {
    method constructor (line 42) | constructor(private yp: YellowPepperService, private bs: BlockService,...
    method ngOnInit (line 69) | ngOnInit() {
    method destroy (line 72) | destroy() {

FILE: src/app/scenes/scene-toolbar.ts
  class SceneToolbar (line 65) | class SceneToolbar extends Compbaser {
    method constructor (line 71) | constructor(private fb: FormBuilder, private cd: ChangeDetectorRef) {
    method blocks (line 79) | set blocks(i_blocks) {
    method _goBack (line 90) | _goBack(){
    method _onBlockSelected (line 94) | _onBlockSelected(event) {
    method ngOnInit (line 98) | ngOnInit() {
    method destroy (line 101) | destroy() {

FILE: src/app/scenes/scenes-navigation.ts
  class ScenesNavigation (line 48) | class ScenesNavigation extends Compbaser {
    method constructor (line 52) | constructor(private yp: YellowPepperService) {

FILE: src/app/scenes/scenes.ts
  class Scenes (line 40) | class Scenes extends Compbaser {
    method constructor (line 44) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _onLocationMapClosed (line 66) | _onLocationMapClosed(){
    method _onSlideChange (line 71) | _onSlideChange(event: ISliderItemData) {

FILE: src/app/settings/index.ts
  constant LAZY_ROUTES (line 9) | const LAZY_ROUTES = [
  class SettingsLazyModule (line 19) | class SettingsLazyModule {

FILE: src/app/settings/settings-navigation.ts
  class SettingsNavigation (line 26) | class SettingsNavigation extends Compbaser {
    method constructor (line 28) | constructor() {
    method destroy (line 32) | destroy() {

FILE: src/app/settings/twofactor.ts
  class Twofactor (line 55) | class Twofactor extends Compbaser {
    method constructor (line 56) | constructor(private fb: FormBuilder,
    method listenEvents (line 86) | private listenEvents() {
    method changeTwoFactorStatus (line 105) | private changeTwoFactorStatus() {
    method onActivate (line 118) | private onActivate() {
    method addQrCode (line 130) | private addQrCode() {
    method removeQrCode (line 144) | private removeQrCode() {
    method onChangeStatus (line 148) | private onChangeStatus(i_twoFactorStatus: boolean) {
    method renderFormInputs (line 158) | private renderFormInputs() {

FILE: src/app/stations/index.ts
  constant LAZY_ROUTES (line 11) | const LAZY_ROUTES = [
  class StationsLazyModule (line 21) | class StationsLazyModule {

FILE: src/app/stations/stations-list.ts
  class StationsList (line 62) | class StationsList extends Compbaser {
    method constructor (line 67) | constructor(private bs: BlockService, private el: ElementRef, private ...
    method stations (line 72) | set stations(i_stations: List<StationModel>) {
    method _onCheckedChange (line 85) | _onCheckedChange(station: StationModel) {
    method _onSelected (line 96) | _onSelected(event: MouseEvent, i_station: StationModel, index) {
    method resetSelection (line 103) | resetSelection() {
    method ngOnInit (line 107) | ngOnInit() {
    method destroy (line 110) | destroy() {

FILE: src/app/stations/stations-navigation.ts
  class StationsNavigation (line 40) | class StationsNavigation extends Compbaser {
    method constructor (line 42) | constructor() {
    method ngOnInit (line 46) | ngOnInit() {
    method destroy (line 49) | destroy() {

FILE: src/app/stations/stations-props-manager.ts
  class StationsPropsManager (line 69) | class StationsPropsManager extends Compbaser {
    method constructor (line 89) | constructor(private toast: ToastsManager, private fb: FormBuilder, pri...
    method loadImage (line 162) | loadImage(imagePath: string): Observable<HTMLImageElement> {
    method _resetSnapshotSelection (line 184) | _resetSnapshotSelection() {
    method _onMultiChangeCampaign (line 189) | _onMultiChangeCampaign(){
    method _render (line 228) | _render() {
    method _onFocus (line 241) | _onFocus(i_value) {
    method _onStationRename (line 245) | _onStationRename() {
    method _onCommand (line 249) | _onCommand(i_command) {
    method _onLoaded (line 274) | _onLoaded() {
    method _onError (line 278) | _onError() {
    method _onCompleted (line 282) | _onCompleted() {
    method _takeSnapshot (line 286) | _takeSnapshot() {
    method _onSendEvent (line 309) | _onSendEvent() {
    method saveToStore (line 317) | private saveToStore() {
    method destroy (line 331) | destroy() {

FILE: src/app/stations/stations.ts
  class Stations (line 102) | class Stations extends Compbaser {
    method constructor (line 109) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _loadData (line 136) | _loadData() {
    method _removeStation (line 145) | _removeStation() {
    method _onSelected (line 175) | _onSelected(i_station: StationModel) {
    method _onMultiSelected (line 183) | _onMultiSelected(i_stations: any) {
    method destroy (line 192) | destroy() {

FILE: src/app/studiopro/index.ts
  constant LAZY_ROUTES (line 8) | const LAZY_ROUTES = [
  class StudioProLazyModule (line 18) | class StudioProLazyModule {

FILE: src/app/studiopro/pro-upgrade.ts
  class ProUpgrade (line 31) | class ProUpgrade extends Compbaser {
    method constructor (line 36) | constructor(private fb: FormBuilder, private yp: YellowPepperService, ...
    method showMessage (line 51) | private showMessage(i_title: string, i_msg: string, i_status: boolean)...
    method _detectCardType (line 68) | _detectCardType(number) {
    method _onStartSubscription (line 109) | _onStartSubscription() {
    method destroy (line 187) | destroy() {

FILE: src/app/studiopro/studiopro-navigation.ts
  class StudioProNavigation (line 285) | class StudioProNavigation extends Compbaser {
    method constructor (line 293) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _initCustomer (line 298) | _initCustomer() {
    method _onConvert (line 306) | _onConvert(event) {
    method _onSubscribe (line 310) | _onSubscribe(event) {
    method ngOnInit (line 314) | ngOnInit() {
    method destroy (line 319) | destroy() {

FILE: src/comps/blurforwarder/BlurForwarder.ts
  class BlurForwarder (line 8) | class BlurForwarder {
    method constructor (line 9) | constructor(private elRef: ElementRef) {
    method onBlur (line 12) | onBlur($event) {

FILE: src/comps/connect-form/connect-form.ts
  constant FORM_SUBMIT_SUCCESS (line 9) | const FORM_SUBMIT_SUCCESS = 'FORM_SUBMIT_SUCCESS';
  constant FORM_SUBMIT_ERROR (line 10) | const FORM_SUBMIT_ERROR = 'FORM_SUBMIT_ERROR';
  class ConnectFormDirective (line 30) | class ConnectFormDirective {
    method constructor (line 39) | constructor(private formGroupDirective: FormGroupDirective,
    method ngOnInit (line 44) | ngOnInit() {
    method ngOnDestroy (line 80) | ngOnDestroy() {

FILE: src/comps/contact-us/contact-us.ts
  class ContactUs (line 44) | class ContactUs {
    method constructor (line 50) | constructor(private yp: YellowPepperService) {
    method onError (line 53) | onError(error) {
    method onSuccess (line 57) | onSuccess(e) {
    method ngOnInit (line 61) | ngOnInit() {
    method compareFn (line 73) | compareFn(optionOne, optionTwo): boolean {
    method submit (line 77) | submit(e) {

FILE: src/comps/disable-control/disable-control.ts
  class DisableControlDirective (line 7) | class DisableControlDirective {
    method disableControl (line 10) | set disableControl(condition: boolean) {
    method constructor (line 15) | constructor(private ngControl: NgControl) {

FILE: src/comps/draggable-list/draggable-list.ts
  class DraggableList (line 62) | class DraggableList extends Compbaser implements AfterViewInit {
    method constructor (line 68) | constructor(private el: ElementRef) {
    method items (line 78) | set items(i_items: List<any>) {
    method deselect (line 84) | public deselect() {
    method _onItemSelected (line 94) | private _onItemSelected(item, event, i) {
    method createSortable (line 105) | public createSortable() {
    method _sortablePress (line 159) | _sortablePress() {
    method _sortableDragStart (line 174) | _sortableDragStart() {
    method _sortableDrag (line 182) | _sortableDrag() {
    method _sortableSnap (line 204) | _sortableSnap(y) {
    method ngAfterViewInit (line 211) | ngAfterViewInit() {
    method ngOnInit (line 216) | ngOnInit() {
    method destroy (line 219) | destroy() {

FILE: src/comps/duration-input/duration-input.component.ts
  class DurationInputComponent (line 8) | class DurationInputComponent implements OnInit {
    method setDuration (line 22) | set setDuration(i_duration: number) {
    method constructor (line 33) | constructor() {
    method ngOnInit (line 36) | ngOnInit() {
    method calcSeconds (line 44) | calcSeconds() {
    method increment (line 53) | increment() {
    method decrement (line 85) | decrement() {
    method notifyChanges (line 116) | notifyChanges() {
    method updateDisplay (line 126) | updateDisplay() {
    method inputTime (line 132) | inputTime(e) {
    method keyUp (line 140) | keyUp(e) {
    method setFocus (line 167) | setFocus(event, field) {
    method mouseDownIncrement (line 172) | mouseDownIncrement() {
    method mouseUpIncrement (line 177) | mouseUpIncrement() {
    method mouseDownDecrement (line 181) | mouseDownDecrement() {
    method mouseUpDecrement (line 186) | mouseUpDecrement() {
    method padLeft (line 190) | padLeft(n) {

FILE: src/comps/entry/AutoLogin.ts
  class AutoLogin (line 11) | class AutoLogin extends Compbaser {

FILE: src/comps/entry/LoginPanel.ts
  type ViewMod (line 16) | enum ViewMod {
  class LoginPanel (line 174) | class LoginPanel extends Compbaser {
    method constructor (line 188) | constructor(private ngmslibService: NgmslibService, private store: Sto...
    method listenEvents (line 199) | private listenEvents() {
    method passFocus (line 245) | passFocus() {
    method onChangeBusinessName (line 250) | onChangeBusinessName(){
    method onResetPassword (line 259) | onResetPassword() {
    method onChangePassword (line 270) | onChangePassword() {
    method onClickedLogin (line 283) | onClickedLogin() {
    method isAccessAllowed (line 293) | private isAccessAllowed(i_reason: AuthenticateFlags): boolean {
    method showMessage (line 329) | private showMessage(title, message) {

FILE: src/comps/font-selector/font-selector.ts
  type IFontSelector (line 8) | interface IFontSelector {
  class FontSelector (line 110) | class FontSelector extends Compbaser implements AfterViewInit {
    method constructor (line 130) | constructor(private fontService: FontLoaderService, private el: Elemen...
    method setConfig (line 137) | set setConfig(i_config: IFontSelector) {
    method _listenColorChanged (line 148) | _listenColorChanged() {
    method _moveColorPicker (line 163) | _moveColorPicker() {
    method _onFontChanged (line 170) | _onFontChanged(e) {
    method _onFontSizeChanged (line 175) | _onFontSizeChanged(i_value) {
    method _onFontStyleToggle (line 180) | _onFontStyleToggle(i_style) {
    method _onAlignmentChange (line 185) | _onAlignmentChange(direction: 'left' | 'center' | 'right') {
    method ngAfterViewInit (line 190) | ngAfterViewInit() {
    method ngOnInit (line 194) | ngOnInit() {
    method destroy (line 197) | destroy() {

FILE: src/comps/hour-counter/hour-counter.ts
  class HourCounter (line 19) | class HourCounter {
    method constructor (line 21) | constructor(private el: ElementRef) {
    method setFocus (line 50) | setFocus(id) {
    method intIncrementStart (line 55) | intIncrementStart() {
    method intIncrementEnd (line 59) | intIncrementEnd() {
    method intDecrementStart (line 63) | intDecrementStart() {
    method intDecrementEnd (line 67) | intDecrementEnd() {
    method increment (line 71) | increment() {
    method decrement (line 109) | decrement() {
    method padLeft (line 145) | padLeft(n) {
    method validate (line 152) | validate() {

FILE: src/comps/imgloader/ImgLoader.ts
  class ImgLoader (line 18) | class ImgLoader {
    method constructor (line 20) | constructor(private cdr:ChangeDetectorRef) {
    method getImageUrl (line 37) | private getImageUrl() {
    method onImageLoaded (line 46) | private onImageLoaded() {
    method onImageError (line 50) | private onImageError() {
    method reloadImage (line 54) | public reloadImage(){

FILE: src/comps/infobox/Infobox.ts
  class Infobox (line 44) | class Infobox {

FILE: src/comps/lazy-image/lazy-image.ts
  class LazyImage (line 53) | class LazyImage {
    method constructor (line 59) | constructor(private el: ElementRef, private ngZone: NgZone) {
    method urls (line 74) | set urls(i_urls: Array<string>) {
    method setUrls (line 78) | setUrls(i_urls: Array<string>) {
    method resetToDefault (line 84) | public resetToDefault() {
    method ngAfterViewInit (line 89) | ngAfterViewInit() {
    method ngOnInit (line 93) | ngOnInit() {
    method setImage (line 96) | setImage(element: HTMLElement, i_url) {
    method loadImage (line 106) | loadImage(i_urls) {
    method destroy (line 151) | destroy() {

FILE: src/comps/limited-access/limited-access.ts
  class LimitedAccess (line 69) | class LimitedAccess {

FILE: src/comps/loading/loading.ts
  class Loading (line 34) | class Loading {
    method style (line 43) | set style(i_style: Object) {
    method size (line 48) | set size(i_size) {

FILE: src/comps/logo/Logo.ts
  class Logo (line 31) | class Logo {
    method constructor (line 32) | constructor(private elementRef: ElementRef) {
    method listenMouse (line 36) | listenMouse(): void {

FILE: src/comps/logo/reseller-logo.ts
  class ResellerLogo (line 24) | class ResellerLogo extends Compbaser implements AfterViewInit {
    method constructor (line 27) | constructor(private yp: YellowPepperService, private rp: RedPepperServ...
    method _onLoaded (line 34) | _onLoaded() {
    method _onError (line 38) | _onError() {
    method _onCompleted (line 42) | _onCompleted() {
    method ngAfterViewInit (line 46) | ngAfterViewInit() {
    method ngOnInit (line 63) | ngOnInit() {
    method destroy (line 66) | destroy() {

FILE: src/comps/logout/Logout.ts
  class Logout (line 57) | class Logout extends Compbaser {
    method constructor (line 58) | constructor(private localStorage: LocalStorage, private rp: RedPepperS...
    method _onSaveChangesLogout (line 73) | _onSaveChangesLogout(){
    method _onLogout (line 79) | _onLogout() {

FILE: src/comps/match-body-height/match-body-height.ts
  class MatchBodyHeight (line 6) | class MatchBodyHeight implements AfterContentInit {
    method constructor (line 8) | constructor(private el: ElementRef) {
    method ngAfterContentInit (line 14) | ngAfterContentInit() {
    method onResize (line 19) | onResize() {
    method ngOnDestroy (line 24) | ngOnDestroy(){

FILE: src/comps/media-player/media-player.ts
  class MediaPlayer (line 45) | class MediaPlayer {
    method constructor (line 49) | constructor() {
    method playResource (line 59) | set playResource(i_resource: string) {
    method onSwap (line 65) | onSwap(source: string, type: string) {
    method getApi (line 81) | getApi(): VgAPI {
    method onPlayerReady (line 85) | onPlayerReady(i_api: VgAPI) {

FILE: src/comps/ng-menu/ng-menu-item.ts
  class NgMenuItem (line 12) | class NgMenuItem extends Compbaser {
    method constructor (line 14) | constructor(private ngMenu:NgMenu) {
    method getTitle (line 23) | get getTitle(): string {
    method getName (line 27) | get getName(): string {
    method getFontAwesome (line 31) | get getFontAwesome(): string {
    method ngOnInit (line 36) | ngOnInit() {
    method destroy (line 39) | destroy() {

FILE: src/comps/ng-menu/ng-menu.ts
  class NgMenu (line 63) | class NgMenu extends Compbaser {
    method constructor (line 65) | constructor(private router: Router, private commBroker: CommBroker, pr...
    method ngOnInit (line 69) | ngOnInit() {
    method listenWinResize (line 80) | private listenWinResize() {
    method listenMenuSelected (line 91) | private listenMenuSelected(ngMenuItem:NgMenuItem, event: MouseEvent) {
    method addMenuItem (line 96) | public addMenuItem(i_item: NgMenuItem): void {
    method destroy (line 101) | destroy() {

FILE: src/comps/panel-split/panel-split-container.ts
  class PanelSplitContainer (line 14) | class PanelSplitContainer implements AfterViewInit {
    method constructor (line 15) | constructor(private el: ElementRef) {
    method ngAfterViewInit (line 24) | ngAfterViewInit() {

FILE: src/comps/panel-split/panel-split-main.ts
  class PanelSplitMain (line 32) | class PanelSplitMain {
    method constructor (line 34) | constructor(private el: ElementRef) {
    method setFullScreen (line 37) | setFullScreen(value) {

FILE: src/comps/panel-split/panel-split-side.ts
  class PanelSplitSide (line 53) | class PanelSplitSide {
    method constructor (line 55) | constructor(private el: ElementRef) {
    method _toggle (line 63) | _toggle(event: MouseEvent) {

FILE: src/comps/screen-template/screen-template.ts
  class ScreenTemplate (line 33) | class ScreenTemplate extends Compbaser {
    method constructor (line 39) | constructor(private el: ElementRef) {
    method ngAfterViewInit (line 43) | ngAfterViewInit(){
    method mouseHoverEffect (line 53) | set mouseHoverEffect(i_value) {
    method setTemplate (line 58) | set setTemplate(i_screenTemplateData: IScreenTemplateData) {
    method _onViewSelected (line 96) | private _onViewSelected(e, i_caller) {
    method _deselectViewers (line 120) | private _deselectViewers() {
    method _mouseOverEffect (line 135) | private _mouseOverEffect() {
    method _mouseDoubleClickDivision (line 148) | private _mouseDoubleClickDivision() {
    method getDivisions (line 177) | getDivisions() {
    method _create (line 197) | private _create() {
    method selectableFrame (line 255) | selectableFrame() {
    method campaignTimelineId (line 279) | get campaignTimelineId(){
    method selectFrame (line 289) | selectFrame() {
    method deSelectFrame (line 298) | deSelectFrame() {
    method deselectDivisons (line 310) | deselectDivisons() {
    method selectDivison (line 320) | selectDivison(i_campaign_timeline_board_viewer_id) {
    method destroy (line 328) | destroy() {

FILE: src/comps/simple-grid-module/SimpleGrid.ts
  constant SIMPLEGRID_DIRECTIVES (line 11) | const SIMPLEGRID_DIRECTIVES:Array<any> = [SimpleGridTable, SimpleGridSor...
  type ISimpleGridEdit (line 13) | interface ISimpleGridEdit {

FILE: src/comps/simple-grid-module/SimpleGridData.ts
  class SimpleGridData (line 36) | class SimpleGridData {
    method item (line 43) | set item(i_storeModel:StoreModel) {
    method field (line 48) | set field(i_field) {
    method processField (line 53) | set processField(i_processField:(storeModel:StoreModel)=>string) {
    method editable (line 58) | set editable(i_editable) {
    method onEdit (line 65) | onEdit(isEditing:boolean) {

FILE: src/comps/simple-grid-module/SimpleGridDataChecks.ts
  class SimpleGridDataChecks (line 32) | class SimpleGridDataChecks {
    method constructor (line 33) | constructor(private cdr: ChangeDetectorRef) {
    method checkboxes (line 44) | set checkboxes(i_checkboxes: List<any>) {
    method item (line 49) | set item(i_storeModel: StoreModel) {
    method onClick (line 60) | private onClick(e) {

FILE: src/comps/simple-grid-module/SimpleGridDataCurrency.ts
  class SimpleGridDataCurrency (line 18) | class SimpleGridDataCurrency {
    method item (line 23) | set item(i_storeModel:StoreModel) {
    method field (line 28) | set field(i_field) {
    method processField (line 33) | set processField(i_processField:(storeModel:StoreModel)=>string) {

FILE: src/comps/simple-grid-module/SimpleGridDataDropdown.ts
  class SimpleGridDataDropdown (line 52) | class SimpleGridDataDropdown {
    method dropdown (line 64) | set dropdown(i_dropdown: List<any>) {
    method item (line 69) | set item(i_storeModel: StoreModel) {
    method field (line 74) | set field(i_field) {
    method testSelection (line 79) | set testSelection(i_testSelection: (dropItem: any, storeModel: StoreMo...
    method onChanges (line 86) | onChanges(event) {
    method getSelected (line 90) | private getSelected(i_dropItem): string {

FILE: src/comps/simple-grid-module/SimpleGridDataImage.ts
  class SimpleGridDataImage (line 18) | class SimpleGridDataImage {
    method item (line 24) | set item(i_storeModel:StoreModel) {
    method field (line 29) | set field(i_field) {
    method color (line 34) | set color(i_color:string) {
    method onClick (line 40) | onClick(event){

FILE: src/comps/simple-grid-module/SimpleGridDraggable.ts
  type ISimpleGridDraggedData (line 18) | interface ISimpleGridDraggedData {
  class SimpleGridDraggable (line 27) | class SimpleGridDraggable {
    method constructor (line 30) | constructor(@Inject(forwardRef(() => SimpleGridTable)) i_table: Simple...
    method ngAfterViewInit (line 48) | ngAfterViewInit() {
    method _cleanSortables (line 56) | _cleanSortables() {
    method createSortable (line 65) | public createSortable() {
    method _sortablePress (line 116) | _sortablePress() {
    method _sortableDragStart (line 131) | _sortableDragStart() {
    method _sortableDrag (line 139) | _sortableDrag() {
    method _sortableSnap (line 161) | _sortableSnap(y) {
    method ngOnDestroy (line 168) | ngOnDestroy() {

FILE: src/comps/simple-grid-module/SimpleGridModule.ts
  constant SIMPLEGRID_DIRECTIVES (line 22) | const SIMPLEGRID_DIRECTIVES: Array<any> = [SimpleGridTable, SimpleGridSo...
  type ISimpleGridEdit (line 24) | interface ISimpleGridEdit {
  class SimpleGridModule (line 37) | class SimpleGridModule {
    method forRoot (line 38) | static forRoot(): ModuleWithProviders {

FILE: src/comps/simple-grid-module/SimpleGridRecord.ts
  class SimpleGridRecord (line 11) | class SimpleGridRecord {
    method constructor (line 14) | constructor(@Inject(forwardRef(() => SimpleGridTable)) i_table: Simple...
    method doubleClicked (line 39) | doubleClicked(event) {
    method onSelected (line 49) | onSelected() {
    method index (line 64) | set index(i_index:number) {
    method index (line 68) | get index() {
    method ngOnInit (line 72) | ngOnInit() {
    method setSelected (line 80) | private setSelected() {

FILE: src/comps/simple-grid-module/SimpleGridSortableHeader.ts
  class SimpleGridSortableHeader (line 21) | class SimpleGridSortableHeader {
    method headerClicked (line 30) | headerClicked(): void {

FILE: src/comps/simple-grid-module/SimpleGridTable.ts
  class SimpleGridTable (line 24) | class SimpleGridTable {
    method setSelected (line 34) | public setSelected(i_selected: SimpleGridRecord) {
    method deselect (line 41) | public deselect() {
    method getSelected (line 52) | public getSelected(): SimpleGridRecord {

FILE: src/comps/sliderpanel/SliderItemContent.ts
  type ISliderItemData (line 6) | interface ISliderItemData {
  class SlideritemContent (line 24) | class SlideritemContent extends Compbaser {
    method constructor (line 28) | constructor(private viewContainer: ViewContainerRef, protected sliderP...
    method addClass (line 50) | public addClass(i_className) {
    method hasClass (line 54) | public hasClass(i_className) {
    method getNative (line 58) | public getNative() {
    method removeClass (line 62) | public removeClass(i_className) {
    method slideTo (line 66) | public slideTo(to: string, direction: string) {
    method onNext (line 75) | public onNext() {
    method onPrev (line 79) | public onPrev() {
    method destroy (line 83) | destroy(){

FILE: src/comps/sliderpanel/Slideritem.ts
  type ISliderItemData (line 6) | interface ISliderItemData {
  class Slideritem (line 28) | class Slideritem extends Compbaser implements DoCheck {
    method constructor (line 33) | constructor(private viewContainer: ViewContainerRef, protected sliderP...
    method ngDoCheck (line 47) | ngDoCheck() {
    method addClass (line 74) | public addClass(i_className) {
    method hasClass (line 78) | public hasClass(i_className) {
    method getNative (line 82) | public getNative() {
    method removeClass (line 86) | public removeClass(i_className) {
    method slideTo (line 90) | public slideTo(to: string, direction: string) {
    method onNext (line 99) | public onNext() {
    method onPrev (line 103) | public onPrev() {
    method destroy (line 107) | destroy() {

FILE: src/comps/sliderpanel/Sliderpanel.ts
  class Sliderpanel (line 19) | class Sliderpanel {
    method constructor (line 25) | constructor(viewContainer: ViewContainerRef, @Inject(DOCUMENT) private...
    method getElementByClass (line 31) | private getElementByClass(element: string) {
    method removeAllClassesFrom (line 36) | private removeAllClassesFrom(elementClass: any, selected?: boolean) {
    method addClassesTo (line 48) | private addClassesTo(elementClass: any, classesToAdd: string[]) {
    method slideToPage (line 55) | public slideToPage(toClassName: string, i_direction: string): void {
    method addSlider (line 73) | public addSlider(i_slider) {

FILE: src/comps/svg-icon/svg-icon.ts
  class SvgIcon (line 9) | class SvgIcon {
    method path (line 11) | set path(val: string) {
    method constructor (line 19) | constructor(private http: Http, private elementRef: ElementRef) {
    method loadSvg (line 23) | loadSvg(val: string) {

FILE: src/comps/tabs/tab.ts
  class Tab (line 31) | class Tab {
    method constructor (line 33) | constructor(@Host() private tabs: Tabs) {
    method active (line 44) | public set active(value) {
    method active (line 50) | public get active() {
    method show (line 54) | public set show(value) {
    method show (line 62) | public get show() {

FILE: src/comps/tabs/tabs.ts
  class Tabs (line 17) | class Tabs {
    method constructor (line 22) | constructor() {
    method selectTab (line 26) | private selectTab(tab, event) {
    method checkActive (line 34) | public checkActive() {
    method addTab (line 39) | addTab(tab: any) {

FILE: src/decorators/once-decorator.ts
  function Once (line 2) | function Once(milliseconds: number = 0) {

FILE: src/decorators/timeout-decorator.ts
  function timeout (line 4) | function timeout( milliseconds: number = 0 ) {

FILE: src/filters/filter-model-pipe.ts
  class FilterModelPipe (line 8) | class FilterModelPipe implements PipeTransform {
    method transform (line 9) | transform(model:StoreModel, ...args:any[]):boolean {

FILE: src/interfaces/BlockTypeEnum.ts
  type BlockTypeEnum (line 1) | enum BlockTypeEnum {

FILE: src/interfaces/Consts.ts
  constant BLOCKS_LOADED (line 1) | const BLOCKS_LOADED = 'BLOCKS_LOADED';
  constant PLACEMENT_SCENE (line 2) | const PLACEMENT_SCENE = 'PLACEMENT_SCENE';
  constant PLACEMENT_CHANNEL (line 3) | const PLACEMENT_CHANNEL = 'PLACEMENT_CHANNEL';
  constant PLACEMENT_IS_SCENE (line 4) | const PLACEMENT_IS_SCENE = 'PLACEMENT_IS_SCENE';
  constant PLACEMENT_LISTS (line 5) | const PLACEMENT_LISTS = 'PLACEMENT_LISTS';
  constant FASTERQ_QUEUE_CALL_CANCLED (line 6) | const FASTERQ_QUEUE_CALL_CANCLED = 'FASTERQ_QUEUE_CALL_CANCLED';
  constant BLOCK_SERVICE (line 7) | const BLOCK_SERVICE = 'BLOCK_SERVICE';
  class Consts (line 38) | class Consts {
    method Clas (line 39) | public static Clas() {
    method Events (line 45) | public static Events() {
    method Values (line 54) | public static Values() {
    method Services (line 64) | public static Services() {

FILE: src/interfaces/IAddContent.ts
  type IAddContents (line 4) | interface IAddContents {

FILE: src/interfaces/IRegisterCaller.ts
  type IRegisterCaller (line 1) | interface IRegisterCaller {

FILE: src/interfaces/IScreenTemplate.ts
  type IScreenTemplateData (line 3) | interface IScreenTemplateData {

FILE: src/libs/enjoyhint/enjoyhint.js
  function makeSVG (line 325) | function makeSVG(tag, attrs) {
  function setArrowData (line 861) | function setArrowData(l_s, c_s, a_s) {
  function sideStatements (line 867) | function sideStatements(top_s, mid_top_s, mid_s, mid_bottom_s, bottom_s) {
  function c (line 1034) | function c(){this.constructor=a}
  function a (line 1034) | function a(i){for(b=[],c=i.length,d=0;c>d;d++)e=i[d],h++,e.nodeType!==o&...
  function a (line 1035) | function a(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}
  function b (line 1035) | function b(b,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D=b....
  function a (line 1035) | function a(a,b,c){var d=4*(c*a.width+b),e=[];return e.push(a.data[d++],a...
  function b (line 1035) | function b(a,b){return Math.sqrt(Math.pow(a[0]-b[0],2)+Math.pow(a[1]-b[1...
  function c (line 1035) | function c(a){for(var b=[0,0,0],c=0;c<a.length;c++)b[0]+=a[c][0],b[1]+=a...
  function d (line 1035) | function d(d,e){var f=a(d,0,0),g=a(d,d.width-1,0),h=a(d,0,d.height-1),i=...
  function e (line 1035) | function e(a,b){for(var c=0;c<a.width*a.height;c++)a.data[4*c+3]=b[c]}
  function f (line 1035) | function f(a,b,c){for(var d=[1,1,1,1,0,1,1,1,1],e=Math.round(Math.sqrt(d...
  function g (line 1035) | function g(a,b,c){for(var d=[1,1,1,1,1,1,1,1,1],e=Math.round(Math.sqrt(d...
  function h (line 1035) | function h(a,b,c){for(var d=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9],e=Math...
  function a (line 1035) | function a(a,b,c,d,e){var f,g=c-b,h=e-d;return 0===g?d+h/2:0===h?d:(f=(a...
  function a (line 1035) | function a(a){setTimeout(a,1e3/60)}
  function b (line 1035) | function b(){return e.apply(Kinetic.root,arguments)}
  function a (line 1036) | function a(a){a.fill()}
  function b (line 1036) | function b(a){a.stroke()}
  function c (line 1036) | function c(a){a.fill()}
  function d (line 1036) | function d(a){a.stroke()}
  function e (line 1036) | function e(){this._clearCache(f)}
  function a (line 1036) | function a(a,b){a.content.addEventListener(b,function(c){a[L+b](c)},!1)}
  function b (line 1036) | function b(e){var f=i[e],j=f.toDataURL(),k=new Kinetic.window.Image;k.on...
  function a (line 1037) | function a(a){a.fillText(this.partialText,0,0)}
  function b (line 1037) | function b(a){a.strokeText(this.partialText,0,0)}
  function j (line 1037) | function j(a){return a*a*a}
  function k (line 1037) | function k(a){return 3*a*a*(1-a)}
  function l (line 1037) | function l(a){return 3*a*(1-a)*(1-a)}
  function m (line 1037) | function m(a){return(1-a)*(1-a)*(1-a)}
  function h (line 1037) | function h(a){return a*a}
  function i (line 1037) | function i(a){return 2*a*(1-a)}
  function j (line 1037) | function j(a){return(1-a)*(1-a)}
  function a (line 1037) | function a(a){a.fillText(this.partialText,0,0)}
  function b (line 1037) | function b(a){a.strokeText(this.partialText,0,0)}
  function animate (line 1043) | function animate(a){$elem.animate(attr,g,h.easing,a&&function(){a.call(t...
  function both (line 1043) | function both(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,lef...

FILE: src/libs/fabric.require1-4-12.js
  function _removeEventListener (line 55) | function _removeEventListener(eventName, handler) {
  function observe (line 78) | function observe(eventName, handler) {
  function stopObserving (line 108) | function stopObserving(eventName, handler) {
  function fire (line 139) | function fire(eventName, options) {
  function onLoaded (line 585) | function onLoaded() {
  function arcToSegments (line 888) | function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {
  function segmentToBezier (line 949) | function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, f...
  function calcVectorAngle (line 977) | function calcVectorAngle(ux, uy, vx, vy) {
  function getBoundsOfCurve (line 1060) | function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {
  function invoke (line 1321) | function invoke(array, method) {
  function max (line 1336) | function max(array, byProperty) {
  function min (line 1349) | function min(array, byProperty) {
  function find (line 1358) | function find(array, byProperty, condition) {
  function extend (line 1403) | function extend(destination, source) {
  function clone (line 1417) | function clone(object) {
  function camelize (line 1452) | function camelize(string) {
  function capitalize (line 1467) | function capitalize(string, firstLetterOnly) {
  function escapeXml (line 1478) | function escapeXml(string) {
  function Subclass (line 1587) | function Subclass() { }
  function callSuper (line 1589) | function callSuper(methodName) {
  function createClass (line 1603) | function createClass() {
  function areHostMethods (line 1643) | function areHostMethods(object) {
  function createListener (line 1677) | function createListener(uid, handler) {
  function createWrappedHandler (line 1684) | function createWrappedHandler(uid, handler) {
  function createDispatcher (line 1690) | function createDispatcher(uid, eventName) {
  function getPointer (line 1815) | function getPointer(event, upperCanvasEl) {
  function _getPointer (line 1840) | function _getPointer(event, pageProp, clientProp) {
  function setStyle (line 1874) | function setStyle(element, styles) {
  function getById (line 1947) | function getById(id) {
  function makeElement (line 1984) | function makeElement(tagName, attributes) {
  function addClass (line 2006) | function addClass(element, className) {
  function wrapElement (line 2020) | function wrapElement(element, wrapper, attributes) {
  function getScrollLeftTop (line 2038) | function getScrollLeftTop(element, upperCanvasEl) {
  function getElementOffset (line 2086) | function getElementOffset(element) {
  function makeElementUnselectable (line 2162) | function makeElementUnselectable(element) {
  function makeElementSelectable (line 2181) | function makeElementSelectable(element) {
  function getScript (line 2206) | function getScript(url, callback) {
  function addParamToUrl (line 2247) | function addParamToUrl(url, param) {
  function emptyFn (line 2269) | function emptyFn() { }
  function request (line 2280) | function request(url, options) {
  function animate (line 2355) | function animate(options) {
  function requestAnimFrame (line 2405) | function requestAnimFrame() {
  function normalize (line 2417) | function normalize(a, c, p, s) {
  function elastic (line 2428) | function elastic(opts, t, d) {
  function easeOutCubic (line 2438) | function easeOutCubic(t, b, c, d) {
  function easeInOutCubic (line 2446) | function easeInOutCubic(t, b, c, d) {
  function easeInQuart (line 2458) | function easeInQuart(t, b, c, d) {
  function easeOutQuart (line 2466) | function easeOutQuart(t, b, c, d) {
  function easeInOutQuart (line 2474) | function easeInOutQuart(t, b, c, d) {
  function easeInQuint (line 2486) | function easeInQuint(t, b, c, d) {
  function easeOutQuint (line 2494) | function easeOutQuint(t, b, c, d) {
  function easeInOutQuint (line 2502) | function easeInOutQuint(t, b, c, d) {
  function easeInSine (line 2514) | function easeInSine(t, b, c, d) {
  function easeOutSine (line 2522) | function easeOutSine(t, b, c, d) {
  function easeInOutSine (line 2530) | function easeInOutSine(t, b, c, d) {
  function easeInExpo (line 2538) | function easeInExpo(t, b, c, d) {
  function easeOutExpo (line 2546) | function easeOutExpo(t, b, c, d) {
  function easeInOutExpo (line 2554) | function easeInOutExpo(t, b, c, d) {
  function easeInCirc (line 2572) | function easeInCirc(t, b, c, d) {
  function easeOutCirc (line 2580) | function easeOutCirc(t, b, c, d) {
  function easeInOutCirc (line 2588) | function easeInOutCirc(t, b, c, d) {
  function easeInElastic (line 2600) | function easeInElastic(t, b, c, d) {
  function easeOutElastic (line 2620) | function easeOutElastic(t, b, c, d) {
  function easeInOutElastic (line 2640) | function easeInOutElastic(t, b, c, d) {
  function easeInBack (line 2664) | function easeInBack(t, b, c, d, s) {
  function easeOutBack (line 2675) | function easeOutBack(t, b, c, d, s) {
  function easeInOutBack (line 2686) | function easeInOutBack(t, b, c, d, s) {
  function easeInBounce (line 2701) | function easeInBounce(t, b, c, d) {
  function easeOutBounce (line 2709) | function easeOutBounce(t, b, c, d) {
  function easeInOutBounce (line 2728) | function easeInOutBounce(t, b, c, d) {
  function normalizeAttr (line 2859) | function normalizeAttr(attr) {
  function normalizeValue (line 2867) | function normalizeValue(attr, value, parentAttributes) {
  function _setStrokeFillOpacity (line 2909) | function _setStrokeFillOpacity(attributes) {
  function rotateMatrix (line 2935) | function rotateMatrix(matrix, args) {
  function scaleMatrix (line 2944) | function scaleMatrix(matrix, args) {
  function skewXMatrix (line 2952) | function skewXMatrix(matrix, args) {
  function skewYMatrix (line 2956) | function skewYMatrix(matrix, args) {
  function translateMatrix (line 2960) | function translateMatrix(matrix, args) {
  function parseFontDeclaration (line 3081) | function parseFontDeclaration(value, oStyle) {
  function parseStyleString (line 3118) | function parseStyleString(style, oStyle) {
  function parseStyleObject (line 3138) | function parseStyleObject(style, oStyle) {
  function getGlobalStylesForElement (line 3160) | function getGlobalStylesForElement(element, svgUid) {
  function elementMatchesRule (line 3175) | function elementMatchesRule(element, selectors) {
  function doesSomeParentMatch (line 3185) | function doesSomeParentMatch(element, selectors) {
  function selectorMatches (line 3199) | function selectorMatches(element, selector) {
  function parseUseDirectives (line 3224) | function parseUseDirectives(doc) {
  function addSvgTransform (line 3259) | function addSvgTransform(doc, matrix) {
  function hasAncestorWithNodeName (line 3309) | function hasAncestorWithNodeName(element, nodeName) {
  function _enlivenCachedObject (line 3421) | function _enlivenCachedObject(cachedObject) {
  function _createSVGPattern (line 3436) | function _createSVGPattern(markup, canvas, property) {
  function onComplete (line 3688) | function onComplete(r) {
  function Point (line 3908) | function Point(x, y) {
  function Intersection (line 4193) | function Intersection(status) {
  function Color (line 4358) | function Color(color) {
  function hue2rgb (line 4652) | function hue2rgb(p, q, t) {
  function getColorStop (line 4826) | function getColorStop(el) {
  function getLinearCoords (line 4875) | function getLinearCoords(el) {
  function getRadialCoords (line 4884) | function getRadialCoords(el) {
  function _convertPercentUnitsToValues (line 5207) | function _convertPercentUnitsToValues(object, options, gradientUnits) {
  function getCoords (line 12173) | function getCoords(oCoords) {
  function makeEdgeToOriginGetter (line 13871) | function makeEdgeToOriginGetter(propertyNames, originValues) {
  function isValidRadius (line 14125) | function isValidRadius(attributes) {
  function renderLinesAtOffset (line 19570) | function renderLinesAtOffset(offset) {
  function request (line 22973) | function request(url, encoding, callback) {
  function requestFs (line 23016) | function requestFs(path, callback) {
  function createImageAndCallBack (line 23030) | function createImageAndCallBack(data) {

FILE: src/libs/fabric.require1-4-12.min.js
  function a (line 1) | function a(a,b){this.__eventListeners[a]&&(b?fabric.util.removeFromArray...
  function b (line 1) | function b(a,b){if(this.__eventListeners||(this.__eventListeners={}),1==...
  function c (line 1) | function c(b,c){if(this.__eventListeners){if(0===arguments.length)this._...
  function d (line 1) | function d(a,b){if(this.__eventListeners){var c=this.__eventListeners[a]...
  function e (line 1) | function e(){++g===h&&b&&b(f)}
  function e (line 1) | function e(b,c,e,h,i,j,k){var l=d.call(arguments);if(a[l])return a[l];va...
  function f (line 1) | function f(a,c,e,f,g,h,i,j,k,l,m){var n=d.call(arguments);if(b[n])return...
  function g (line 1) | function g(a,b,c,d){var e=Math.atan2(b,a),f=Math.atan2(d,c);return f>=e?...
  function h (line 1) | function h(a,b,e,f,g,h,i,j){var k=d.call(arguments);if(c[k])return c[k];...
  function b (line 1) | function b(b,c){for(var d=a.call(arguments,2),e=[],f=0,g=b.length;f<g;f+...
  function c (line 1) | function c(a,b){return e(a,b,function(a,b){return a>=b})}
  function d (line 1) | function d(a,b){return e(a,b,function(a,b){return a<b})}
  function e (line 1) | function e(a,b,c){if(a&&0!==a.length){var d=a.length-1,e=b?a[d][b]:a[d];...
  function a (line 1) | function a(a,b){for(var c in b)a[c]=b[c];return a}
  function b (line 1) | function b(b){return a({},b)}
  function a (line 1) | function a(a){return a.replace(/-+(.)?/g,function(a,b){return b?b.toUppe...
  function b (line 1) | function b(a,b){return a.charAt(0).toUpperCase()+(b?a.slice(1):a.slice(1...
  function c (line 1) | function c(a){return a.replace(/&/g,"&amp;").replace(/"/g,"&quot;").repl...
  function e (line 1) | function e(){}
  function f (line 1) | function f(b){var c=this.constructor.superclass.prototype[b];return argu...
  function g (line 1) | function g(){function h(){this.initialize.apply(this,arguments)}var c=nu...
  function b (line 1) | function b(a){var c,d,b=Array.prototype.slice.call(arguments,1),e=b.leng...
  function f (line 1) | function f(a,b){return{handler:b,wrappedHandler:g(a,b)}}
  function g (line 1) | function g(a,b){return function(d){b.call(c(a),d||fabric.window.event)}}
  function h (line 1) | function h(a,b){return function(c){if(l[a]&&l[a][b])for(var d=l[a][b],e=...
  function o (line 1) | function o(b,c){b||(b=fabric.window.event);var d=b.target||(typeof b.src...
  function r (line 1) | function r(a,b,c){var d="touchend"===a.type?"changedTouches":"touches";r...
  function a (line 1) | function a(a,b){var c=a.style;if(!c)return a;if("string"==typeof b)retur...
  function b (line 1) | function b(a){return"string"==typeof a?fabric.document.getElementById(a):a}
  function e (line 1) | function e(a,b){var c=fabric.document.createElement(a);for(var d in b)"c...
  function f (line 1) | function f(a,b){a&&(" "+a.className+" ").indexOf(" "+b+" ")===-1&&(a.cla...
  function g (line 1) | function g(a,b,c){return"string"==typeof b&&(b=e(b,c)),a.parentNode&&a.p...
  function h (line 1) | function h(a,b){var c,d,e=0,f=0,g=fabric.document.documentElement,h=fabr...
  function i (line 1) | function i(a){var b,f,c=a&&a.ownerDocument,d={left:0,top:0},e={left:0,to...
  function c (line 1) | function c(a){return"undefined"!=typeof a.onselectstart&&(a.onselectstar...
  function d (line 1) | function d(a){return"undefined"!=typeof a.onselectstart&&(a.onselectstar...
  function a (line 1) | function a(a,b){var c=fabric.document.getElementsByTagName("head")[0],d=...
  function a (line 1) | function a(a,b){return a+(/\?/.test(a)?"&":"?")+b}
  function c (line 1) | function c(){}
  function d (line 1) | function d(d,e){e||(e={});var i,f=e.method?e.method.toUpperCase():"GET",...
  function a (line 1) | function a(a){c(function(b){a||(a={});var g,d=b||+new Date,e=a.duration|...
  function c (line 1) | function c(){return b.apply(fabric.window,arguments)}
  function a (line 1) | function a(a,b,c,d){return a<Math.abs(b)?(a=b,d=c/4):d=c/(2*Math.PI)*Mat...
  function b (line 1) | function b(a,b,c){return a.a*Math.pow(2,10*(b-=1))*Math.sin((b*c-a.s)*(2...
  function c (line 1) | function c(a,b,c,d){return c*((a=a/d-1)*a*a+1)+b}
  function d (line 1) | function d(a,b,c,d){return a/=d/2,a<1?c/2*a*a*a+b:c/2*((a-=2)*a*a+2)+b}
  function e (line 1) | function e(a,b,c,d){return c*(a/=d)*a*a*a+b}
  function f (line 1) | function f(a,b,c,d){return-c*((a=a/d-1)*a*a*a-1)+b}
  function g (line 1) | function g(a,b,c,d){return a/=d/2,a<1?c/2*a*a*a*a+b:-c/2*((a-=2)*a*a*a-2...
  function h (line 1) | function h(a,b,c,d){return c*(a/=d)*a*a*a*a+b}
  function i (line 1) | function i(a,b,c,d){return c*((a=a/d-1)*a*a*a*a+1)+b}
  function j (line 1) | function j(a,b,c,d){return a/=d/2,a<1?c/2*a*a*a*a*a+b:c/2*((a-=2)*a*a*a*...
  function k (line 1) | function k(a,b,c,d){return-c*Math.cos(a/d*(Math.PI/2))+c+b}
  function l (line 1) | function l(a,b,c,d){return c*Math.sin(a/d*(Math.PI/2))+b}
  function m (line 1) | function m(a,b,c,d){return-c/2*(Math.cos(Math.PI*a/d)-1)+b}
  function n (line 1) | function n(a,b,c,d){return 0===a?b:c*Math.pow(2,10*(a/d-1))+b}
  function o (line 1) | function o(a,b,c,d){return a===d?b+c:c*(-Math.pow(2,-10*a/d)+1)+b}
  function p (line 1) | function p(a,b,c,d){return 0===a?b:a===d?b+c:(a/=d/2,a<1?c/2*Math.pow(2,...
  function q (line 1) | function q(a,b,c,d){return-c*(Math.sqrt(1-(a/=d)*a)-1)+b}
  function r (line 1) | function r(a,b,c,d){return c*Math.sqrt(1-(a=a/d-1)*a)+b}
  function s (line 1) | function s(a,b,c,d){return a/=d/2,a<1?-c/2*(Math.sqrt(1-a*a)-1)+b:c/2*(M...
  function t (line 1) | function t(c,d,e,f){var g=1.70158,h=0,i=e;if(0===c)return d;if(c/=f,1===...
  function u (line 1) | function u(b,c,d,e){var f=1.70158,g=0,h=d;if(0===b)return c;if(b/=e,1===...
  function v (line 1) | function v(c,d,e,f){var g=1.70158,h=0,i=e;if(0===c)return d;if(c/=f/2,2=...
  function w (line 1) | function w(a,b,c,d,e){return void 0===e&&(e=1.70158),c*(a/=d)*a*((e+1)*a...
  function x (line 1) | function x(a,b,c,d,e){return void 0===e&&(e=1.70158),c*((a=a/d-1)*a*((e+...
  function y (line 1) | function y(a,b,c,d,e){return void 0===e&&(e=1.70158),a/=d/2,a<1?c/2*(a*a...
  function z (line 1) | function z(a,b,c,d){return c-A(d-a,0,c,d)+b}
  function A (line 1) | function A(a,b,c,d){return(a/=d)<1/2.75?c*(7.5625*a*a)+b:a<2/2.75?c*(7.5...
  function B (line 1) | function B(a,b,c,d){return a<d/2?.5*z(2*a,0,c,d)+b:.5*A(2*a-d,0,c,d)+.5*...
  function k (line 1) | function k(a){return a in i?i[a]:a}
  function l (line 1) | function l(a,c,d){var f,e="[object Array]"===Object.prototype.toString.c...
  function m (line 1) | function m(a){for(var c in j)if(a[c]&&"undefined"!=typeof a[j[c]]&&0!==a...
  function n (line 1) | function n(a,b){var c=a.match(/(normal|italic)?\s*(normal|small-caps)?\s...
  function o (line 1) | function o(a,b){var c,d;a.replace(/;$/,"").split(";").forEach(function(a...
  function p (line 1) | function p(a,b){var c,d;for(var e in a)"undefined"!=typeof a[e]&&(c=k(e....
  function q (line 1) | function q(a,c){var d={};for(var e in b.cssRules[c])if(r(a,e.split(" "))...
  function r (line 1) | function r(a,b){var c,d=!0;return c=t(a,b.pop()),c&&b.length&&(d=s(a,b))...
  function s (line 1) | function s(a,b){for(var c,d=!0;a.parentNode&&1===a.parentNode.nodeType&&...
  function t (line 1) | function t(a,b){var f,c=a.nodeName,d=a.getAttribute("class"),e=a.getAttr...
  function u (line 1) | function u(a){for(var b=a.getElementsByTagName("use");b.length;){for(var...
  function v (line 1) | function v(a,b){if(b[3]=b[0]=b[0]>b[3]?b[3]:b[0],1!==b[0]||1!==b[3]||0!=...
  function x (line 1) | function x(a){var c=a.objects,e=a.options;return c=c.map(function(a){ret...
  function y (line 1) | function y(a,b,c){b[c]&&b[c].toSVG&&a.push('<pattern x="0" y="0" id="',c...
  function a (line 1) | function a(a,b){var c=b[0];a[0]=Math.cos(c),a[1]=Math.sin(c),a[2]=-Math....
  function c (line 1) | function c(a,b){var c=b[0],d=2===b.length?b[1]:b[0];a[0]=c,a[3]=d}
  function d (line 1) | function d(a,c){a[2]=Math.tan(b.util.degreesToRadians(c[0]))}
  function e (line 1) | function e(a,c){a[1]=Math.tan(b.util.degreesToRadians(c[0]))}
  function f (line 1) | function f(a,b){a[4]=b[0],2===b.length&&(a[5]=b[1])}
  function f (line 1) | function f(a,b){for(;a&&(a=a.parentNode);)if(b.test(a.nodeName))return!0...
  function e (line 2) | function e(e){var f=e.responseXML;f&&!f.documentElement&&b.window.Active...
  function c (line 2) | function c(a,b){this.x=a,this.y=b}
  function c (line 2) | function c(a){this.status=a,this.points=[]}
  function c (line 2) | function c(a){a?this._tryParsingColor(a):this.setSource([0,0,0,1])}
  function d (line 2) | function d(a,b,c){return c<0&&(c+=1),c>1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?...
  function a (line 2) | function a(a){var d,e,f,b=a.getAttribute("style"),c=a.getAttribute("offs...
  function b (line 2) | function b(a){return{x1:a.getAttribute("x1")||0,y1:a.getAttribute("y1")|...
  function c (line 2) | function c(a){return{x1:a.getAttribute("fx")||a.getAttribute("cx")||"50%...
  function d (line 2) | function d(a,b,c){var d,e=0,f=1,g="";for(var h in b)d=parseFloat(b[h],10...
  function b (line 4) | function b(a){return{tl:new fabric.Point(a.tl.x,a.tl.y),tr:new fabric.Po...
  function f (line 5) | function f(a,b){var c=a.origin,d=a.axis1,e=a.axis2,f=a.dimension,g=b.nea...
  function e (line 5) | function e(a){return"radius"in a&&a.radius>0}
  function e (line 6) | function e(e){for(var f=0,g=b.length;f<g;f++){var h=d._getLineWidth(a,b[...
  function request (line 7) | function request(a,b,c){var d=URL.parse(a);d.port||(d.port=0===d.protoco...
  function requestFs (line 7) | function requestFs(a,b){var c=require("fs");c.readFile(a,function(a,c){i...
  function d (line 7) | function d(d){e.src=new Buffer(d,"binary"),e._src=a,b&&b.call(c,e)}

FILE: src/libs/fabric1-4-2.min.js
  function e (line 1) | function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.remove...
  function t (line 1) | function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arg...
  function n (line 1) | function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0...
  function r (line 1) | function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListe...
  function i (line 1) | function i(){++o===u&&t&&t(s)}
  function i (line 1) | function i(t,n,i,u,a,f,l){var c=r.call(arguments);if(e[c])return e[c];va...
  function s (line 1) | function s(e,n,i,s,o,u,a,f,l,c,h){var p=r.call(arguments);if(t[p])return...
  function o (line 1) | function o(e,t,n,r){var i=Math.atan2(t,e),s=Math.atan2(r,n);return s>=i?...
  function u (line 1) | function u(e,t,i,s,o,u,a,f){var l=r.call(arguments);if(n[l])return n[l];...
  function t (line 1) | function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s<...
  function n (line 1) | function n(e,t){return i(e,t,function(e,t){return e>=t})}
  function r (line 1) | function r(e,t){return i(e,t,function(e,t){return e<t})}
  function i (line 1) | function i(e,t,n){if(!e||e.length===0)return;var r=e.length-1,i=t?e[r][t...
  function e (line 1) | function e(e,t){for(var n in t)e[n]=t[n];return e}
  function t (line 1) | function t(t){return e({},t)}
  function e (line 1) | function e(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUppe...
  function t (line 1) | function t(e,t){return e.charAt(0).toUpperCase()+(t?e.slice(1):e.slice(1...
  function n (line 1) | function n(e){return e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").repl...
  function i (line 1) | function i(){}
  function s (line 1) | function s(t){var n=this.constructor.superclass.prototype[t];return argu...
  function o (line 1) | function o(){function u(){this.initialize.apply(this,arguments)}var n=nu...
  function t (line 1) | function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.leng...
  function s (line 1) | function s(e,t){return{handler:t,wrappedHandler:o(e,t)}}
  function o (line 1) | function o(e,t){return function(r){t.call(n(e),r||fabric.window.event)}}
  function u (line 1) | function u(e,t){return function(n){if(c[e]&&c[e][t]){var r=c[e][t];for(v...
  function d (line 1) | function d(t,n){t||(t=fabric.window.event);var r=t.target||(typeof t.src...
  function g (line 1) | function g(e,t,n){var r=e.type==="touchend"?"changedTouches":"touches";r...
  function e (line 1) | function e(e,t){var n=e.style;if(!n)return e;if(typeof t=="string")retur...
  function t (line 1) | function t(e){return typeof e=="string"?fabric.document.getElementById(e...
  function s (line 1) | function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r=...
  function o (line 1) | function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.cla...
  function u (line 1) | function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e....
  function a (line 1) | function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabr...
  function f (line 1) | function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:...
  function n (line 1) | function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectsta...
  function r (line 1) | function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectsta...
  function e (line 1) | function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=...
  function e (line 1) | function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}
  function n (line 1) | function n(){}
  function r (line 1) | function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=...
  function e (line 1) | function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration|...
  function n (line 1) | function n(){return t.apply(fabric.window,arguments)}
  function e (line 1) | function e(e,t,n,r){return e<Math.abs(t)?(e=t,r=n/4):r=n/(2*Math.PI)*Mat...
  function t (line 1) | function t(e,t,n){return e.a*Math.pow(2,10*(t-=1))*Math.sin((t*n-e.s)*2*...
  function n (line 1) | function n(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}
  function r (line 1) | function r(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}
  function i (line 1) | function i(e,t,n,r){return n*(e/=r)*e*e*e+t}
  function s (line 1) | function s(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}
  function o (line 1) | function o(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2...
  function u (line 1) | function u(e,t,n,r){return n*(e/=r)*e*e*e*e+t}
  function a (line 1) | function a(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}
  function f (line 1) | function f(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*...
  function l (line 1) | function l(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}
  function c (line 1) | function c(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}
  function h (line 1) | function h(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}
  function p (line 1) | function p(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}
  function d (line 1) | function d(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}
  function v (line 1) | function v(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,...
  function m (line 1) | function m(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}
  function g (line 1) | function g(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}
  function y (line 1) | function y(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(M...
  function b (line 1) | function b(n,r,i,s){var o=1.70158,u=0,a=i;if(n===0)return r;n/=s;if(n===...
  function w (line 1) | function w(t,n,r,i){var s=1.70158,o=0,u=r;if(t===0)return n;t/=i;if(t===...
  function E (line 1) | function E(n,r,i,s){var o=1.70158,u=0,a=i;if(n===0)return r;n/=s/2;if(n=...
  function S (line 1) | function S(e,t,n,r,i){return i===undefined&&(i=1.70158),n*(e/=r)*e*((i+1...
  function x (line 1) | function x(e,t,n,r,i){return i===undefined&&(i=1.70158),n*((e=e/r-1)*e*(...
  function T (line 1) | function T(e,t,n,r,i){return i===undefined&&(i=1.70158),e/=r/2,e<1?n/2*e...
  function N (line 1) | function N(e,t,n,r){return n-C(r-e,0,n,r)+t}
  function C (line 1) | function C(e,t,n,r){return(e/=r)<1/2.75?n*7.5625*e*e+t:e<2/2.75?n*(7.562...
  function k (line 1) | function k(e,t,n,r){return e<r/2?N(e*2,0,n,r)*.5+t:C(e*2-r,0,n,r)*.5+n*....
  function l (line 1) | function l(e){return e in a?a[e]:e}
  function c (line 1) | function c(e,n,r){var i=Object.prototype.toString.call(n)==="[object Arr...
  function h (line 1) | function h(e){for(var n in f){if(!e[n]||typeof e[f[n]]=="undefined")cont...
  function p (line 1) | function p(e,t){var n=e.match(/(normal|italic)?\s*(normal|small-caps)?\s...
  function d (line 1) | function d(e,t){var n,r;e.replace(/;$/,"").split(";").forEach(function(e...
  function v (line 1) | function v(e,t){var n,r;for(var i in e){if(typeof e[i]=="undefined")cont...
  function m (line 1) | function m(e,n){var r={};for(var i in t.cssRules[n])if(g(e,i.split(" "))...
  function g (line 1) | function g(e,t){var n,r=!0;return n=b(e,t.pop()),n&&t.length&&(r=y(e,t))...
  function y (line 1) | function y(e,t){var n,r=!0;while(e.parentNode&&e.parentNode.nodeType===1...
  function b (line 1) | function b(e,t){var n=e.nodeName,r=e.getAttribute("class"),i=e.getAttrib...
  function w (line 1) | function w(e){var t=e.getElementsByTagName("use");while(t.length){var n=...
  function E (line 1) | function E(e,t){t[3]=t[0]=t[0]>t[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4...
  function x (line 1) | function x(e){var n=e.objects,i=e.options;return n=n.map(function(e){ret...
  function T (line 1) | function T(e,t,n){t[n]&&t[n].toSVG&&e.push('<pattern x="0" y="0" id="',n...
  function e (line 1) | function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math....
  function n (line 1) | function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}
  function r (line 1) | function r(e,n){e[2]=Math.tan(t.util.degreesToRadians(n[0]))}
  function i (line 1) | function i(e,n){e[1]=Math.tan(t.util.degreesToRadians(n[0]))}
  function s (line 1) | function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}
  function s (line 1) | function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0...
  function i (line 2) | function i(i){var s=i.responseXML;s&&!s.documentElement&&t.window.Active...
  function n (line 2) | function n(e,t){this.x=e,this.y=t}
  function n (line 2) | function n(e){this.status=e,this.points=[]}
  function n (line 2) | function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}
  function r (line 2) | function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?...
  function e (line 2) | function e(e){var t=e.getAttribute("style"),n=e.getAttribute("offset"),r...
  function t (line 2) | function t(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")|...
  function n (line 2) | function n(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%...
  function r (line 2) | function r(e,t,n){var r,i=0,s=1,o="";for(var u in t){r=parseFloat(t[u],1...
  function t (line 4) | function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Po...
  function s (line 4) | function s(e,t){var n=e.origin,r=e.axis1,i=e.axis2,s=e.dimension,o=t.nea...
  function i (line 5) | function i(e){return"radius"in e&&e.radius>0}
  function i (line 6) | function i(i){for(var s=0,o=t.length;s<o;s++){var u=r._getLineWidth(e,t[...
  function request (line 7) | function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.in...
  function requestFs (line 7) | function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){i...
  function r (line 7) | function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}

FILE: src/libs/gradient/jquery.gradientpicker.js
  function ctrlPtComparator (line 17) | function ctrlPtComparator(l, r) {
  function bind (line 21) | function bind(fn, ctx) {
  function GradientSelection (line 42) | function GradientSelection($el, opts) {
  function componentFromStr (line 109) | function componentFromStr(numStr, percent) {
  function hexToRgb (line 258) | function hexToRgb(hex) {
  function ControlPoint (line 267) | function ControlPoint($parentEl, initialState, orientation, listener, ct...
  function ControlPtConfig (line 358) | function ControlPtConfig($parent, opts) {

FILE: src/libs/jquery-ui.js
  function focusable (line 127) | function focusable( element, isTabIndexNotNaN ) {
  function visible (line 148) | function visible( element ) {
  function reduce (line 190) | function reduce( elem, size, border, margin ) {
  function handlerProxy (line 697) | function handlerProxy() {
  function handlerProxy (line 733) | function handlerProxy() {
  function isOverAxis (line 1921) | function isOverAxis( x, reference, size ) {
  function num (line 2277) | function num(v) {
  function isNumber (line 2281) | function isNumber(value) {
  function isOverAxis (line 3496) | function isOverAxis( x, reference, size ) {
  function clamp (line 4884) | function clamp( value, prop, allowEmpty ) {
  function stringParse (line 4910) | function stringParse( string ) {
  function hue2rgb (line 5160) | function hue2rgb( p, q, h ) {
  function getElementStyles (line 5428) | function getElementStyles( elem ) {
  function styleDifference (line 5456) | function styleDifference( oldStyle, newStyle ) {
  function _normalizeArguments (line 5774) | function _normalizeArguments( effect, options, speed, callback ) {
  function standardSpeed (line 5826) | function standardSpeed( speed ) {
  function run (line 5856) | function run( next ) {
  function Datepicker (line 7558) | function Datepicker() {
  function bindHover (line 9497) | function bindHover(dpDiv) {
  function extendRemove (line 9523) | function extendRemove(target, props) {
  function checkFocus (line 9820) | function checkFocus() {
  function filteredUi (line 9997) | function filteredUi( ui ) {
  function filteredUi (line 10039) | function filteredUi( ui ) {
  function childComplete (line 10665) | function childComplete() {
  function animComplete (line 10714) | function animComplete() {
  function escape (line 11519) | function escape( value ) {
  function getOffsets (line 11976) | function getOffsets( offsets, width, height ) {
  function parseCss (line 11983) | function parseCss( element, property ) {
  function getDimensions (line 11987) | function getDimensions( elem ) {
  function modifier (line 13241) | function modifier( fn ) {
  function checkFocus (line 13360) | function checkFocus() {
  function getNextTabId (line 13722) | function getNextTabId() {
  function isLocal (line 13726) | function isLocal( anchor ) {
  function constrain (line 13943) | function constrain() {
  function complete (line 14289) | function complete() {
  function show (line 14294) | function show() {
  function addDescribedBy (line 14554) | function addDescribedBy( elem, id ) {
  function removeDescribedBy (line 14562) | function removeDescribedBy( elem ) {
  function position (line 14783) | function position( event ) {

FILE: src/libs/jquery.base64.js
  function _getbyte64 (line 68) | function _getbyte64( s, i ) {
  function _decode (line 83) | function _decode( s ) {
  function _getbyte (line 132) | function _getbyte( s, i ) {
  function _encode (line 143) | function _encode( s ) {

FILE: src/libs/jquery.timepicker/jquery.timepicker.min.js
  function b (line 7) | function b(a){var b=a[0];return b.offsetWidth>0&&b.offsetHeight>0}
  function c (line 7) | function c(b){if(b.minTime&&(b.minTime=t(b.minTime)),b.maxTime&&(b.maxTi...
  function d (line 7) | function d(b){var c=b.data("timepicker-settings"),d=b.data("timepicker-l...
  function e (line 7) | function e(b,c){var d,e,f;return"object"==typeof b?(d=b.label,e=b.classN...
  function f (line 7) | function f(a,b){return a=b.roundingFunction(a,b),null!==a?s(a,b):void 0}
  function g (line 7) | function g(b){var c=a(b.target),d=c.closest(".ui-timepicker-input");0===...
  function h (line 7) | function h(a){var b=a.data("timepicker-settings");return(window.navigato...
  function i (line 7) | function i(b,c,d){if(!d&&0!==d)return!1;var e=b.data("timepicker-setting...
  function j (line 7) | function j(a,b){b.find("li").removeClass("ui-timepicker-selected");var c...
  function k (line 7) | function k(b,c){if(""!==this.value&&"timepicker"!=c){var d=a(this);if(!d...
  function l (line 7) | function l(a){return a.is("input")?a.val():a.data("ui-timepicker-value")}
  function m (line 7) | function m(a,b,c){if(a.is("input")){a.val(b);var d=a.data("timepicker-se...
  function n (line 7) | function n(a){switch(a.keyCode){case 13:case 9:return;default:a.preventD...
  function o (line 7) | function o(c){var d=a(this),e=d.data("timepicker-list");if(!e||!b(e)){if...
  function p (line 7) | function p(c){var d=a(this),e=d.data("timepicker-list"),f=d.data("timepi...
  function q (line 7) | function q(a){var b=a.data("timepicker-settings"),c=a.data("timepicker-l...
  function r (line 7) | function r(a,b){a=Math.abs(a);var c,d,e=Math.round(a/60),f=[];return 60>...
  function s (line 7) | function s(b,c){if("number"!=typeof b)return null;var d=parseInt(b%60),e...
  function t (line 7) | function t(a,b){if(""===a||null===a)return null;if("object"==typeof a)re...

FILE: src/libs/minicolors/jquery.minicolors.js
  function init (line 120) | function init(input, settings) {
  function destroy (line 187) | function destroy(input) {
  function show (line 204) | function show(input) {
  function hide (line 229) | function hide() {
  function move (line 247) | function move(target, event, animate) {
  function updateFromControl (line 310) | function updateFromControl(input, target) {
  function updateFromInput (line 458) | function updateFromInput(input, preserveInputValue) {
  function doChange (line 592) | function doChange(input, hex, opacity) {
  function rgbObject (line 625) | function rgbObject(input) {
  function rgbString (line 635) | function rgbString(input, alpha) {
  function convertCase (line 649) | function convertCase(string, letterCase) {
  function parseHex (line 654) | function parseHex(string, expand) {
  function keepWithin (line 664) | function keepWithin(value, min, max) {
  function hsb2rgb (line 671) | function hsb2rgb(hsb) {
  function rgb2hex (line 699) | function rgb2hex(rgb) {
  function hsb2hex (line 712) | function hsb2hex(hsb) {
  function hex2hsb (line 717) | function hex2hsb(hex) {
  function rgb2hsb (line 724) | function rgb2hsb(rgb) {
  function hex2rgb (line 752) | function hex2rgb(hex) {

FILE: src/libs/qrcode/qrcode.js
  function QR8bitByte (line 29) | function QR8bitByte(data) {
  function QRCodeModel (line 78) | function QRCodeModel(typeNumber, errorCorrectLevel) {
  function QRPolynomial (line 139) | function QRPolynomial(num,shift){if(num.length==undefined){throw new Err...
  function QRRSBlock (line 146) | function QRRSBlock(totalCount,dataCount){this.totalCount=totalCount;this...
  function QRBitBuffer (line 149) | function QRBitBuffer(){this.buffer=[];this.length=0;}
  function _isSupportCanvas (line 154) | function _isSupportCanvas() {
  function _getAndroid (line 159) | function _getAndroid() {
  function makeSVG (line 191) | function makeSVG(tag, attrs) {
  function _onMakeImage (line 276) | function _onMakeImage() {
  function _safeSetDataURI (line 310) | function _safeSetDataURI(fSuccess, fFail) {
  function _getTypeNumber (line 469) | function _getTypeNumber(sText, nCorrectLevel) {
  function _getUTF8Length (line 505) | function _getUTF8Length(sText) {

FILE: src/libs/rc4v1/rc4v1.js
  function RC4 (line 7) | function RC4(i_passkey) {

FILE: src/libs/rc4v2/rc4v2.js
  function RC4 (line 5) | function RC4() {
  function initialize (line 22) | function initialize(pwd){
  function encrypt (line 48) | function encrypt(src, key) {
  function decrypt (line 62) | function decrypt(src, key) {
  function calculate (line 76) | function calculate(plaintxt, psw){
  function charsToHex (line 100) | function charsToHex(chars) {
  function hexToChars (line 111) | function hexToChars(hex) {
  function charsToStr (line 120) | function charsToStr(chars) {
  function strToChars (line 129) | function strToChars(str) {

FILE: src/libs/ruler/ruler.js
  function cornerDraw (line 180) | function cornerDraw(container, side) {
  function mousedown (line 192) | function mousedown(e) {

FILE: src/libs/xml2js/xml2js.js
  function X2JS (line 18) | function X2JS(config) {

FILE: src/models/LocationMarkModel.ts
  class LocationMarkModel (line 2) | class LocationMarkModel extends StoreModel {
    method constructor (line 4) | constructor(data) {
    method lng (line 8) | public get lng() {
    method lat (line 12) | public get lat() {
    method radius (line 16) | public get radius() {
    method draggable (line 20) | public get draggable() {
    method setLng (line 24) | public setLng(value) {
    method setLat (line 28) | public setLat(value) {
    method seRadius (line 32) | public seRadius(value) {
    method getRadius (line 36) | public getRadius() {

FILE: src/models/StationModel.ts
  class StationModel (line 3) | class StationModel extends StoreModel implements IStation{
    method constructor (line 5) | constructor(data) {
    method id (line 9) | public get id() {
    method localAddress (line 13) | public get localAddress() {
    method publicIp (line 17) | public get publicIp() {
    method peakMemory (line 21) | public get peakMemory() {
    method appVersion (line 25) | public get appVersion() {
    method caching (line 29) | public get caching() {
    method totalMemory (line 33) | public get totalMemory() {
    method runningTime (line 37) | public get runningTime() {
    method startTime (line 41) | public get startTime() {
    method status (line 45) | public get status() {
    method watchDogConnection (line 49) | public get watchDogConnection() {
    method name (line 53) | public get name() {
    method getStationName (line 57) | public getStationName() {
    method connectionStatusChanged (line 61) | public get connectionStatusChanged() {
    method localPort (line 65) | public get localPort():number {
    method socket (line 69) | public get socket() {
    method connection (line 73) | public get connection() {
    method os (line 77) | public get os() {
    method airVersion (line 81) | public get airVersion() {
    method stationColor (line 85) | public get stationColor() {
    method lastUpdate (line 89) | public get lastUpdate() {

FILE: src/models/StoreModel.ts
  class StoreModel (line 13) | class StoreModel {
    method UniqueId (line 15) | static UniqueId(){
    method constructor (line 19) | constructor(data:any = {}) {
    method setKey (line 25) | public setKey<T>(ClassName:any, key:string, value:any):T {
    method getKey (line 29) | public getKey(key:string) {
    method setData (line 33) | public setData<T>(ClassName, data:any):T {
    method getData (line 42) | public getData():Map<string, any> {
    method listPush (line 53) | public listPush<T>(ClassName, i_key:string, i_value:string):any {

FILE: src/models/StoreModelAbstract.ts
  method UniqueId (line 19) | static UniqueId(){
  method constructor (line 23) | constructor(data: any = {}) {
  method setKey (line 29) | public setKey(key: string, value: any): T {
  method getKey (line 33) | public getKey(key: string) {
  method setData (line 37) | public setData<T>(data: any): T {
  method getData (line 42) | public getData(): Map<string, any> {
  method listPush (line 53) | public listPush<K>(i_key: string, i_value: K): T {

FILE: src/models/UserModel.ts
  class UserModel (line 2) | class UserModel extends StoreModel {
    method constructor (line 4) | constructor(data: {user: string, pass: string, authenticated: boolean,...
    method setTime (line 24) | public setTime() {
    method getTime (line 28) | public getTime() {
    method setAuthenticated (line 32) | setAuthenticated(value:boolean) {
    method setComponents (line 36) | setComponents(value) {
    method getAuthenticated (line 40) | getAuthenticated(): boolean {
    method setUser (line 44) | setUser(value:string) {
    method getUser (line 48) | getUser() {
    method resellerId (line 52) | get resellerId(){
    method user (line 56) | user() {
    method setPass (line 60) | setPass(value:string) {
    method getPass (line 64) | getPass() {
    method pass (line 68) | pass() {
    method getDomain (line 72) | getDomain() {
    method getPartialDomain (line 76) | getPartialDomain() {
    method setDomain (line 80) | setDomain(value:string) {
    method setAccountType (line 84) | setAccountType(value:number) {
    method setResellerInfo (line 88) | setResellerInfo(value:XMLDocument) {
    method setResellerId (line 92) | setResellerId(value:number) {
    method setResellerName (line 96) | setResellerName(value:string) {
    method setEri (line 100) | setEri(value:string) {
    method setResellerWhiteLabel (line 104) | setResellerWhiteLabel(value:{[key: string]: string}) {
    method resellerWhiteLabel (line 108) | get resellerWhiteLabel() {
    method getAccountType (line 112) | getAccountType() {
    method setTwoFactorRequired (line 116) | setTwoFactorRequired(value:boolean) {
    method getTwoFactorRequired (line 120) | getTwoFactorRequired(): boolean {
    method setBusinessId (line 124) | setBusinessId(value:number) {
    method getBusinessId (line 128) | getBusinessId(): number {
    method businessId (line 132) | businessId() {
    method setRememberMe (line 136) | setRememberMe(value:boolean) {
    method getRememberMe (line 140) | getRememberMe() {
    method rememberMe (line 144) | rememberMe() {

FILE: src/models/fasterq-analytics.ts
  class FasterqAnalyticsModel (line 2) | class FasterqAnalyticsModel extends StoreModel {
    method constructor (line 4) | constructor(data) {
    method lineId (line 8) | public get lineId() {
    method serviceId (line 12) | public get serviceId() {
    method queueId (line 16) | public get queueId() {
    method name (line 20) | public get name() {
    method analyticId (line 24) | public get analyticId() {
    method serviced (line 28) | public get serviced() {
    method entered (line 32) | public get entered() {
    method verification (line 36) | public get verification() {
    method called (line 40) | public get called() {
    method businessId (line 44) | public get businessId() {

FILE: src/models/fasterq-line-model.ts
  class FasterqLineModel (line 2) | class FasterqLineModel extends StoreModel {
    method constructor (line 4) | constructor(data) {
    method lineId (line 8) | public get lineId() {
    method businessId (line 12) | public get businessId() {
    method lineName (line 16) | public get lineName() {
    method serviceId (line 20) | public get serviceId() {
    method reminder (line 24) | public get reminder() {
    method callType (line 28) | public get callType():'EMAIL' | 'SMS' | 'QR' {
    method verification (line 32) | public get verification() {
    method sms (line 36) | public get sms() {
    method email (line 40) | public get email() {
    method date (line 44) | public get date() {

FILE: src/models/fasterq-queue-model.ts
  class FasterqQueueModel (line 3) | class FasterqQueueModel extends StoreModel {
    method constructor (line 5) | constructor(data) {
    method queued (line 9) | public get queued() {
    method serviceId (line 13) | public get serviceId() {
    method lineId (line 18) | public get lineId() {
    method verification (line 22) | public get verification() {
    method queueId (line 26) | public get queueId() {
    method steppedOut (line 30) | public get steppedOut() {
    method name (line 34) | public get name() {
    method analyticId (line 38) | public get analyticId() {
    method serviced (line 42) | public get serviced() {
    method entered (line 46) | public get entered() {
    method businessId (line 50) | public get businessId() {
    method calledBy (line 54) | public get calledBy() {
    method called (line 58) | public get called() {

FILE: src/models/live-log-model.ts
  class LiveLogModel (line 2) | class LiveLogModel extends StoreModel {
    method constructor (line 4) | constructor(data) {

FILE: src/modules/shared.module.ts
  class SharedModule (line 84) | class SharedModule {
    method forRoot (line 85) | static forRoot(): ModuleWithProviders {

FILE: src/pipes/format-seconds-pipe.ts
  class FormatSecondsPipe (line 5) | class FormatSecondsPipe implements PipeTransform {
    method transform (line 6) | transform(duration, ...args: any[]): any {

FILE: src/pipes/list-to-array-pipe.ts
  class ListToArrayPipe (line 7) | class ListToArrayPipe implements PipeTransform {
    method transform (line 8) | transform(items: List<StoreModel>, ...args: any[]): any {

FILE: src/services/AuthService.ts
  class AuthService (line 18) | class AuthService {
    method constructor (line 19) | constructor(private ngmslibService: NgmslibService,
    method listenEvents (line 40) | private listenEvents() {
    method ieAutoLoginPatch (line 85) | private ieAutoLoginPatch() {
    method enterApplication (line 103) | private enterApplication() {
    method start (line 120) | public start() {
    method decodeBase64 (line 164) | private decodeBase64(i_credentials) {
    method saveCredentials (line 177) | public saveCredentials(i_user, i_pass, i_remember) {
    method authUser (line 193) | public authUser(user: string, pass: string, rememberMe: boolean = fals...
    method authServerTwoFactor (line 200) | public authServerTwoFactor(token): void {
    method getLocalstoreCred (line 205) | public getLocalstoreCred(): { u: string, p: string, r: string } {
    method checkAccess (line 220) | public checkAccess(activatedRouteSnapshot: ActivatedRouteSnapshot, rou...
    method canActivate (line 230) | public canActivate(activatedRouteSnapshot: ActivatedRouteSnapshot, rou...
  constant AUTH_PROVIDERS (line 240) | const AUTH_PROVIDERS: Array<any> = [{

FILE: src/services/CommBroker.ts
  type IMessage (line 69) | interface IMessage {
  type SubjectMessage (line 77) | type SubjectMessage = Subject<IMessage>;
  type SubjectMessages (line 78) | type SubjectMessages = Subject<Array<SubjectMessage>>;
  class CommBroker (line 81) | class CommBroker {
    method constructor (line 86) | constructor() {
    method toString (line 107) | public toString() {
    method fire (line 116) | public fire(iMessage: IMessage): void {
    method onEvent (line 126) | public onEvent(event: string) {
    method onInstance (line 133) | public onInstance(instance: any) {
    method onInstanceAndEvent (line 140) | public onInstanceAndEvent(instance: any, event: string) {
    method setService (line 154) | setService(i_name, i_service) {
    method getService (line 164) | getService(i_name): any {
    method getAllServices (line 181) | getAllServices() {
    method clearServices (line 189) | clearServices() {
    method setValue (line 203) | setValue(i_name: any, i_value: any, i_fireEvent?: string): void {
    method getValue (line 223) | getValue(i_name): any {

FILE: src/services/CreditService.ts
  class CreditService (line 15) | class CreditService {
    method constructor (line 17) | constructor() {
    method validateCardNumber (line 589) | public validateCardNumber(cardNumber):boolean {
    method validateCardExpiry (line 593) | public validateCardExpiry(month, year):boolean {
    method validateCardCVC (line 597) | public validateCardCVC(cvc, type):boolean {
    method parseCardType (line 601) | public parseCardType(cardNumber):boolean {
    method parseCardExpiry (line 605) | public parseCardExpiry(value):boolean {
    method formatCardNumber (line 609) | public formatCardNumber(value):boolean {
    method formatCardExpiry (line 613) | public formatCardExpiry(expiry):boolean {

FILE: src/services/LocalStorage.ts
  class LocalStorage (line 4) | class LocalStorage {
    method getItem (line 6) | getItem(key: string, defaultValue?: any): any {
    method setItem (line 14) | setItem(key: string, value: any): void {
    method removeItem (line 18) | removeItem(key: string): void {

FILE: src/services/StoreService.ts
  class StoreService (line 9) | class StoreService {
    method constructor (line 10) | constructor(private store: Store<ApplicationState>, private appdbActio...
    method loadServices (line 23) | public loadServices() {

FILE: src/services/block-factory-service.ts
  class BlockFactoryService (line 18) | class BlockFactoryService {
    method constructor (line 21) | constructor(private rp: RedPepperService, private bs: BlockService) {
    method createBlock (line 37) | createBlock(block_id, i_player_data, i_scene_id?) {

FILE: src/services/font-loader-service.ts
  class FontLoaderService (line 5) | class FontLoaderService {
    method constructor (line 10) | constructor() {
    method getFonts (line 37) | public getFonts() {

FILE: src/services/global-error-handler.ts
  class GlobalErrorHandler (line 7) | class GlobalErrorHandler implements ErrorHandler {
    method constructor (line 8) | constructor(private injector: Injector) {
    method handleError (line 11) | handleError(error) {

FILE: src/services/redpepper.service.ts
  type IPepperUserData (line 23) | interface IPepperUserData {
  type redpepperTables (line 47) | type redpepperTables = {
  class RedPepperService (line 53) | class RedPepperService {
    method constructor (line 55) | constructor(private store: Store<ApplicationState>, private ngmslibSer...
    method dbConnect (line 74) | public dbConnect(i_user, i_pass): Observable<any> {
    method loaderManager (line 106) | public get loaderManager() {
    method save (line 115) | save(i_callback) {
    method sync (line 124) | sync(i_callBack) {
    method addPendingTables (line 128) | private addPendingTables(tables: Array<any>) {
    method getUserData (line 138) | getUserData(): IPepperUserData {
    method resetPendingTables (line 153) | private resetPendingTables() {
    method capitalizeFirstLetter (line 157) | private capitalizeFirstLetter(string) {
    method reduxCommit (line 173) | reduxCommit(tableNameTargets?: Array<string>, forceAll?: boolean): red...
    method injectPseudoScenePlayersIDs (line 238) | injectPseudoScenePlayersIDs(i_scene_id?) {
    method setScenePlayerData (line 261) | setScenePlayerData(i_scene_id, i_player_data) {
    method removeScene (line 273) | removeScene(i_scene_player_data_id) {
    method stripPlayersID (line 283) | stripPlayersID(i_domPlayerData) {
    method removeScenePlayer (line 294) | removeScenePlayer(i_scene_id, i_player_data_id) {
    method appendScenePlayerBlock (line 312) | appendScenePlayerBlock(i_scene_id, i_player_data) {
    method setScenePlayerdataBlock (line 334) | setScenePlayerdataBlock(i_scene_id, i_player_data_id, i_player_data) {
    method createScene (line 357) | createScene(i_player_data, i_mimeType, i_name) {
    method getPseudoIdFromSceneId (line 385) | getPseudoIdFromSceneId(i_scene_id) {
    method removeSceneFromBlockCollectionInScenes (line 402) | removeSceneFromBlockCollectionInScenes(i_scene_id) {
    method removeSceneFromBlockCollectionsInChannels (line 431) | removeSceneFromBlockCollectionsInChannels(i_scene_id) {
    method removeSceneFromBlockLocationInScenes (line 456) | removeSceneFromBlockLocationInScenes(i_scene_id) {
    method removeSceneFromBlockLocationInChannels (line 504) | removeSceneFromBlockLocationInChannels(i_scene_id) {
    method removeBlocksWithSceneID (line 556) | removeBlocksWithSceneID(i_scene_id) {
    method updateTemplateViewerOrder (line 574) | updateTemplateViewerOrder(i_board_template_viewer_id, i_view_order) {
    method setBoardTemplateViewer (line 587) | setBoardTemplateViewer(i_campaign_timeline_board_template_id, i_board_...
    method removeBlocksFromTimelineChannel (line 611) | removeBlocksFromTimelineChannel(i_campaign_timeline_chanel_id) {
    method updateTotalTimelineDuration (line 627) | updateTotalTimelineDuration(i_campaign_timeline_id): void {
    method getGlobalBoardFromCampaignId (line 662) | getGlobalBoardFromCampaignId(i_campaign_id) {
    method removeTimelineBoardViewerChannel (line 680) | removeTimelineBoardViewerChannel(i_board_template_viewer_id) {
    method removeBoardTemplateViewer (line 699) | removeBoardTemplateViewer(i_board_template_id, i_board_template_viewer...
    method assignViewerToTimelineChannel (line 712) | assignViewerToTimelineChannel(i_campaign_timeline_board_template_id, i...
    method removeChannelFromTimeline (line 728) | removeChannelFromTimeline(i_channel_id): number {
    method createCampaign (line 739) | createCampaign(i_campaignName): number {
    method createCampaignEntire (line 749) | createCampaignEntire(screenProps: {}, campaignName: string, resolution...
    method createTimelineChannel (line 780) | createTimelineChannel(i_campaign_timeline_id) {
    method renameCampaign (line 794) | renameCampaign(i_campaignId, i_newCampaignName): void {
    method createViewer (line 807) | createViewer(i_board_template_id, i_props) {
    method createBoard (line 829) | createBoard(i_boardName, i_width, i_height): number {
    method createNewTemplate (line 847) | createNewTemplate(i_board_id, i_screenProps): any {
    method checkAndCreateCampaignTimelineScheduler (line 887) | checkAndCreateCampaignTimelineScheduler(i_campaign_id) {
    method getSceneMime (line 911) | getSceneMime(i_sceneID) {
    method setCampaignRecord (line 932) | setCampaignRecord(i_campaign_id, i_key, i_value): void {
    method assignCampaignToBoard (line 947) | assignCampaignToBoard(i_campaign_id, i_board_id): number {
    method setResourceRecord (line 966) | setResourceRecord(i_resource_id, i_key, i_value) {
    method setCampaignTimelineChannelRecord (line 982) | setCampaignTimelineChannelRecord(i_channel_id, i_key, i_value) {
    method createNewTimeline (line 994) | createNewTimeline(i_campaign_id): number {
    method setCampaignTimelineSequencerIndex (line 1012) | setCampaignTimelineSequencerIndex(i_campaign_id, i_campaign_timeline_i...
    method getScenePlayerdataBlock (line 1045) | getScenePlayerdataBlock(i_scene_id, i_player_data_id) {
    method assignViewersToTimelineChannels (line 1063) | assignViewersToTimelineChannels(i_campaign_timeline_board_template_id,...
    method createCampaignTimelineScheduler (line 1082) | createCampaignTimelineScheduler(i_campaign_id, i_campaign_timeline_id)...
    method getStationCampaignIDs (line 1109) | getStationCampaignIDs() {
    method getCampaignIDs (line 1124) | getCampaignIDs(): Array<number> {
    method getSceneIdFromPseudoId (line 1138) | getSceneIdFromPseudoId(i_pseudo_id) {
    method getSceneMimeType (line 1155) | getSceneMimeType(i_sceneID, i_playerDataModels: List<PlayerDataModel>)...
    method assignTemplateToTimeline (line 1173) | assignTemplateToTimeline(i_campaign_timeline_id, i_board_template_id, ...
    method createTimelineChannels (line 1191) | createTimelineChannels(i_campaign_timeline_id, i_viewers): Array<any> {
    method setTimelineTotalDuration (line 1213) | setTimelineTotalDuration(i_campaign_timeline_id, i_totalDuration): void {
    method setStationRecordValue (line 1223) | setStationRecordValue(i_native_station_id, field, value) {
    method removeCampaignEntirely (line 1240) | removeCampaignEntirely(i_campaign_id): void {
    method createNewChannelPlayer (line 1278) | createNewChannelPlayer(i_campaign_timeline_chanel_id: number, i_addCon...
    method getStationRecord (line 1303) | getStationRecord(i_native_station_id) {
    method removeCampaignKeepBoards (line 1319) | removeCampaignKeepBoards(i_campaign_id): void {
    method removeCampaign (line 1349) | removeCampaign(i_campaign_id) {
    method getScenePlayerdata (line 1360) | getScenePlayerdata(i_scene_id) {
    method getCampaignTimelines (line 1371) | getCampaignTimelines(i_campaign_id): Array<number> {
    method setStationName (line 1389) | setStationName(i_stationID, i_name) {
    method getGlobalTemplateIdOfTimeline (line 1407) | getGlobalTemplateIdOfTimeline(i_campaign_timeline_id): number {
    method removeTimelineFromCampaign (line 1425) | removeTimelineFromCampaign(i_campaign_timeline_id): void {
    method removeBoardTemplateFromTimeline (line 1436) | removeBoardTemplateFromTimeline(i_timeline_id): number {
    method removeBlocksWithResourceID (line 1449) | removeBlocksWithResourceID(i_resource_id) {
    method removeBlockFromTimelineChannel (line 1472) | removeBlockFromTimelineChannel(i_block_id): void {
    method removeTimelineBoardViewerChannels (line 1483) | removeTimelineBoardViewerChannels(i_campaign_timeline_board_template_i...
    method removeBoardTemplate (line 1498) | removeBoardTemplate(i_board_template_id): number {
    method removeBoardTemplateViewers (line 1510) | removeBoardTemplateViewers(i_board_template_id): Array<number> {
    method getGlobalBoardRecFromTemplate (line 1531) | getGlobalBoardRecFromTemplate(i_campaign_timeline_board_template_id) {
    method setBlockRecord (line 1549) | setBlockRecord(i_block_id, i_key, i_value) {
    method removeTimelineFromSequences (line 1562) | removeTimelineFromSequences(i_campaign_timeline_id): void {
    method setBlockTimelineChannelBlockLength (line 1581) | setBlockTimelineChannelBlockLength(i_campaign_timeline_chanel_player_i...
    method setBlockTimelineChannelBlockNewPosition (line 1611) | setBlockTimelineChannelBlockNewPosition(i_channel, i_campaign_timeline...
    method setStationCampaignID (line 1630) | setStationCampaignID(i_native_station_id, i_campaign_id) {
    method removeSchedulerFromTime (line 1649) | removeSchedulerFromTime(i_campaign_timeline_id): void {
    method removeResource (line 1665) | removeResource(i_resource_id) {
    method removeResourceFromBlockCollectionInScenes (line 1676) | removeResourceFromBlockCollectionInScenes(i_resource_id) {
    method removeResourceFromBlockLocationInScenes (line 1700) | removeResourceFromBlockLocationInScenes(i_resource_id) {
    method removeAllScenePlayersWithResource (line 1748) | removeAllScenePlayersWithResource(i_resource_id) {
    method removeResourceFromBlockCollectionsInChannel (line 1773) | removeResourceFromBlockCollectionsInChannel(i_resource_id) {
    method removeResourceFromBlockLocationInChannel (line 1799) | removeResourceFromBlockLocationInChannel(i_resource_id) {
    method getChannelsOfTimeline (line 1852) | getChannelsOfTimeline(i_campaign_timeline_id): Array<number> {
    method getChannelBlocks (line 1871) | getChannelBlocks(i_campaign_timeline_chanel_id): Array<number> {
    method getAssignedViewerIdFromChannelId (line 1889) | getAssignedViewerIdFromChannelId(i_campaign_timeline_channel_id) {
    method setCampaignsSchedule (line 1907) | setCampaignsSchedule(i_campaign_timeline_id, i_key, i_value) {
    method removeStation (line 1924) | removeStation(i_native_station_id) {
    method setCampaignTimelineChannelPlayerRecord (line 1939) | setCampaignTimelineChannelPlayerRecord(i_player_id, i_key, i_value) {
    method removeCampaignBoard (line 1952) | removeCampaignBoard(i_campaign_id): void {
    method getCampaignBoardIdFromCampaignId (line 1968) | getCampaignBoardIdFromCampaignId(i_campaign_id) {
    method removeAllBoards (line 1983) | removeAllBoards(): void {
    method getTemplatesOfTimeline (line 1996) | getTemplatesOfTimeline(i_campaign_timeline_id): Array<number> {
    method getScenePlayerdataDom (line 2014) | getScenePlayerdataDom(i_scene_id) {
    method getProofOfPlayStats (line 2033) | getProofOfPlayStats(i_year, i_month, i_callBack) {
    method getSampleList (line 2045) | getSampleList(i_callBack) {
    method sendCommand (line 2059) | sendCommand(i_command, i_stationId, i_callBack) {
    method sendLocalEventGPS (line 2076) | sendLocalEventGPS(i_mode, i_lat, i_lng, i_id, i_ip, i_port, i_callBack) {
    method getLocalization (line 2122) | getLocalization(i_lang, i_callBack) {
    method getLocalizationNew (line 2142) | getLocalizationNew(i_lang, i_callBack) {
    method getStudioLiteURL (line 2164) | getStudioLiteURL() {
    method getStudioProURL (line 2176) | getStudioProURL() {
    method createAccount (line 2186) | createAccount(i_businessName, i_userName, i_password, i_templateBusine...
    method getAccountStatus (line 2213) | getAccountStatus(i_businessId, i_callBack) {
    method resetPassword (line 2223) | resetPassword(i_email, i_callBack) {
    method changePassword (line 2233) | changePassword(i_email, i_oldPassword, i_newPassword, i_callBack) {
    method changeBusinessName (line 2243) | changeBusinessName(i_email, i_password, i_businessName, i_callBack) {
    method getBusinessUserInfo (line 2253) | getBusinessUserInfo(i_user, i_pass, i_callBack) {
    method sendEvent (line 2265) | sendEvent(i_eventName, i_stationId, i_callBack) {
    method sendSnapshot (line 2279) | sendSnapshot(i_fileName, i_quality, i_stationId, i_callBack) {
    method _livePreviewGetLink (line 2290) | _livePreviewGetLink(i_playerParams, i_bannerMode): string {
    method livePreviewCampaign (line 2307) | livePreviewCampaign(i_campaignID, i_bannerMode) {
    method livePreviewTimeline (line 2323) | livePreviewTimeline(i_campaignID, i_timelineID, i_bannerMode) {
    method livePreviewScene (line 2337) | livePreviewScene(sceneID, i_bannerMode): string {
    method getSceneDuration (line 2351) | getSceneDuration(i_scene_id) {
    method setSceneDuration (line 2394) | setSceneDuration(i_scene_id, i_hours, i_minutes, i_seconds) {
    method getSceneNames (line 2415) | getSceneNames() {
    method xmlToStringIEfix (line 2435) | xmlToStringIEfix(i_domPlayerData) {
    method ieFixEscaped (line 2452) | ieFixEscaped(escapedHTML) {
    method generateSceneId (line 2536) | generateSceneId() {
    method sterilizePseudoId (line 2546) | sterilizePseudoId(i_id) {
    method sterilizePseudoIdFromScene (line 2557) | sterilizePseudoIdFromScene(i_id, domPlayerData: XMLDocument) {
    method stripScenePlayersIDs (line 2570) | stripScenePlayersIDs() {
    method restoreScenesWithPlayersIDs (line 2590) | restoreScenesWithPlayersIDs() {
    method getScenes (line 2602) | getScenes() {
    method getScenePlayerRecord (line 2618) | getScenePlayerRecord(i_scene_id) {
    method getFirstBoardIDofCampaign (line 2637) | getFirstBoardIDofCampaign(i_campaign_id) {
    method getBoardFromCampaignBoard (line 2656) | getBoardFromCampaignBoard(i_campaign_board_id) {
    method getCampaignIdFromCampaignBoardId (line 2667) | getCampaignIdFromCampaignBoardId(i_campaign_board_id) {
    method getCampaignPlayModeFromTimeline (line 2679) | getCampaignPlayModeFromTimeline(i_campaign_timeline_id) {
    method getBoardTemplateViewer (line 2693) | getBoardTemplateViewer(i_board_template_viewer_id) {
    method getCampaignsSchedule (line 2710) | getCampaignsSchedule(i_campaign_timeline_id) {
    method getCampaignTimelineIdOfSequencerIndex (line 2728) | getCampaignTimelineIdOfSequencerIndex(i_campaign_id, i_sequence_index) {
    method getCampaignTimelineSequencerIndex (line 2746) | getCampaignTimelineSequencerIndex(i_campaign_timeline_id) {
    method getResources (line 2764) | getResources() {
    method getResourceRecord (line 2782) | getResourceRecord(i_resource_id) {
    method getResourceType (line 2792) | getResourceType(i_resource_id) {
    method getResourceNativeID (line 2804) | getResourceNativeID(i_resource_id) {
    method getResourceName (line 2817) | getResourceName(i_resource_id) {
    method getCampaignRecord (line 2829) | getCampaignRecord(i_campaign_id) {
    method getStationNameAsync (line 2840) | getStationNameAsync(i_stationID, i_callBack) {
    method getStationBranchTotal (line 2854) | getStationBranchTotal() {
    method getStationNameSync (line 2864) | getStationNameSync(i_stationID) {
    method getAdPackContNames (line 2882) | getAdPackContNames(i_ad_local_content_id) {
    method getStationCampaignID (line 2907) | getStationCampaignID(i_native_station_id) {
    method setStationRecord (line 2926) | setStationRecord(i_native_station_id, i_record) {
    method setStationServerMode (line 2946) | setStationServerMode(i_native_station_id, i_enabled, i_lan_server_ip, ...
    method uploadResources (line 2967) | uploadResources(i_elementID, i_bs: BlockService) {
    method getTimelineTotalDuration (line 2989) | getTimelineTotalDuration(i_campaign_timeline_id) {
    method getTotalDurationOfBlocks (line 3003) | getTotalDurationOfBlocks(i_blocks) {
    method getBlockTimelineChannelBlockLength (line 3028) | getBlockTimelineChannelBlockLength(i_campaign_timeline_chanel_player_i...
    method formatObjectToSeconds (line 3041) | formatObjectToSeconds(i_object) {
    method formatSecondsToObject (line 3056) | formatSecondsToObject(i_totalSeconds) {
    method getCampaignTimelineChannelPlayerRecord (line 3086) | getCampaignTimelineChannelPlayerRecord(i_player_id) {
    method getBlockRecord (line 3096) | getBlockRecord(i_block_id) {
    method getCampaignTimelineChannelRecord (line 3106) | getCampaignTimelineChannelRecord(i_channel_id) {
    method getCampaignTimelineRecord (line 3117) | getCampaignTimelineRecord(i_campaign_timeline_id) {
    method getTemplateViewersScreenProps (line 3129) | getTemplateViewersScreenProps(i_campaign_timeline_id, i_campaign_timel...
    method setCampaignTimelineRecord (line 3176) | setCampaignTimelineRecord(i_campaign_timeline_id, i_key, i_value) {
    method getChannelIdFromCampaignTimelineBoardViewer (line 3192) | getChannelIdFromCampaignTimelineBoardViewer(i_campaign_timeline_board_...
    method populateBoardTemplate (line 3224) | populateBoardTemplate(i_campaign_timeline_board_template_id) {
    method populateCampaign (line 3263) | populateCampaign() {

FILE: src/services/wizard-service.ts
  class WizardService (line 16) | class WizardService {
    method constructor (line 509) | constructor(private router: Router, private rp: RedPepperService, priv...
    method _listenAppResized (line 525) | _listenAppResized() {
    method start (line 538) | public start() {

FILE: src/services/yellowpepper.service.ts
  class YellowPepperService (line 38) | class YellowPepperService {
    method constructor (line 42) | constructor(private store: Store<ApplicationState>) {
    method dispatch (line 54) | public dispatch(action: Action) {
    method ngrxStore (line 58) | public get ngrxStore(): Store<ApplicationState> {
    method reducePlayerDataModelsToSceneData (line 62) | private reducePlayerDataModelsToSceneData(playerDataModels: List<Playe...
    method listenMainAppState (line 82) | listenMainAppState() {
    method listenStoryBoardListViewModeSelected (line 86) | listenStoryBoardListViewModeSelected() {
    method listenChannelSelected (line 93) | listenChannelSelected(emitOnEmpty: boolean = false): Observable<Campai...
    method listenBlockChannelSelected (line 108) | listenBlockChannelSelected(emitOnEmpty: boolean = false): Observable<C...
    method listenBlockChannelSelectedOrChanged (line 123) | listenBlockChannelSelectedOrChanged(emitOnEmpty: boolean = false): Obs...
    method listenTimelineSelected (line 138) | listenTimelineSelected(emitOnEmpty: boolean = false): Observable<Campa...
    method listenSelectedSceneChanged (line 155) | listenSelectedSceneChanged(emitOnEmpty: boolean = false): Observable<P...
    method listenCampaignTimelineBoardViewerSelected (line 171) | listenCampaignTimelineBoardViewerSelected(emitOnEmpty: boolean = false...
    method listenLocationMapLoad (line 187) | listenLocationMapLoad(): Observable<any> {
    method listenAppSizeChanged (line 191) | listenAppSizeChanged(): Observable<any> {
    method listenLocationMarkerSelected (line 195) | listenLocationMarkerSelected(): Observable<LocationMarkModel> {
    method listenTimelineDurationChanged (line 201) | listenTimelineDurationChanged(emitOnEmpty: boolean = false): Observabl...
    method listenSelectedTimelineChanged (line 218) | listenSelectedTimelineChanged(): Observable<CampaignTimelinesModel> {
    method listenUserModel (line 228) | listenUserModel(): Observable<UserModel> {
    method listenCampaignTimelines (line 236) | listenCampaignTimelines(i_campaign_id: number): Observable<List<Campai...
    method listenFasterqLineSelected (line 245) | listenFasterqLineSelected(): Observable<FasterqLineModel> {
    method listenFasterqQueueModelSelected (line 256) | listenFasterqQueueModelSelected(): Observable<FasterqQueueModel> {
    method listenFasterqQueueSelected (line 267) | listenFasterqQueueSelected(): Observable<any> {
    method listenFasterqQueueLastServicedPolled (line 271) | listenFasterqQueueLastServicedPolled(): Observable<any> {
    method listenGlobalBoardSelectedChanged (line 275) | listenGlobalBoardSelectedChanged(emitOnEmpty: boolean = false): Observ...
    method listenSceneOrBlockSelected (line 289) | listenSceneOrBlockSelected(emitOnEmpty: boolean = false): Observable<I...
    method listenFabricSceneScaled (line 325) | listenFabricSceneScaled(): Observable<number> {
    method listenScene (line 334) | listenScene(scene_id): Observable<PlayerDataModel> {
    method listenSceneOrBlockSelectedChanged (line 346) | listenSceneOrBlockSelectedChanged(): Observable<ISceneData> | Observab...
    method listenSceneSelected (line 387) | listenSceneSelected(emitOnEmpty: boolean = false): Observable<ISceneDa...
    method listenCampaignSelected (line 406) | listenCampaignSelected(emitOnEmpty: boolean = false): Observable<Campa...
    method listenChannelsOfTimeline (line 419) | listenChannelsOfTimeline(i_campaign_timeline_id): Observable<List<Camp...
    method listenChannelValueChanged (line 431) | listenChannelValueChanged(emitOnEmpty: boolean = false): Observable<Ca...
    method listenResourceSelected (line 442) | listenResourceSelected(emitOnEmpty: boolean = false): Observable<Resou...
    method listenStationSelected (line 453) | listenStationSelected(): Observable<StationModel> {
    method listenStationBranchSelected (line 466) | listenStationBranchSelected(): Observable<StationModel> {
    method listenResources (line 480) | listenResources(): Observable<List<ResourcesModel>> {
    method listenStations (line 489) | listenStations(): Observable<List<StationModel>> {
    method listenCampaignValueChanged (line 496) | listenCampaignValueChanged(emitOnEmpty: boolean = false): Observable<C...
    method listenSchedulerValueChanged (line 511) | listenSchedulerValueChanged(emitOnEmpty: boolean = false): Observable<...
    method listenScenes (line 525) | listenScenes(): Observable<Array<ISceneData>> {
    method listenFasterqLines (line 532) | listenFasterqLines(): Observable<List<FasterqLineModel>> {
    method listenFasterqQueues (line 536) | listenFasterqQueues(): Observable<List<FasterqQueueModel>> {
    method listenFasterqAnalytics (line 547) | listenFasterqAnalytics(): Observable<List<FasterqAnalyticsModel>> {
    method listenStationRecord (line 554) | listenStationRecord(i_native_station_id): Observable<BranchStationsMod...
    method getTimelineTotalDurationByChannel (line 566) | getTimelineTotalDurationByChannel(i_campaign_timeline_id): Observable<...
    method getStationCampaignID (line 593) | getStationCampaignID(i_native_station_id): Observable<number> {
    method getPreviewMode (line 614) | getPreviewMode() {
    method getScenes (line 621) | getScenes(): Observable<Array<ISceneData>> {
    method getCampaigns (line 628) | getCampaigns(): Observable<List<CampaignsModelExt>> {
    method getMultiSelectedStations (line 633) | getMultiSelectedStations(): Observable<any> {
    method getTimelines (line 637) | getTimelines(): Observable<List<CampaignTimelinesModel>> {
    method getResources (line 642) | getResources(): Observable<List<ResourcesModel>> {
    method getSceneNames (line 650) | getSceneNames(): Observable<Array<any>> {
    method getTimelineTotalDuration (line 670) | getTimelineTotalDuration(i_campaign_timeline_id): Observable<string> {
    method getUserModel (line 684) | getUserModel(): Observable<UserModel> {
    method isBrandingDisabled (line 689) | isBrandingDisabled(): Observable<boolean> {
    method getNewCampaignParmas (line 703) | getNewCampaignParmas(): Observable<{}> {
    method getChannelFromCampaignTimelineBoardViewer (line 713) | getChannelFromCampaignTimelineBoardViewer(i_campaign_timeline_board_vi...
    method getChannelOfTimeline (line 727) | getChannelOfTimeline(i_campaign_timeline_chanel_id): Observable<Campai...
    method getChannelBlocks (line 739) | getChannelBlocks(i_campaign_timeline_chanel_id): Observable<Array<numb...
    method getScenePlayerdataDom (line 753) | getScenePlayerdataDom(i_scene_id): Observable<string> {
    method getScene (line 766) | getScene(scene_id): Observable<PlayerDataModelExt> {
    method sterilizePseudoId (line 781) | sterilizePseudoId(i_id): Observable<number> {
    method getSceneIdFromPseudoId (line 794) | getSceneIdFromPseudoId(i_pseudo_id): Observable<number> {
    method getChannelBlockModels (line 810) | getChannelBlockModels(i_campaign_timeline_chanel_id): Observable<List<...
    method getChannelBlockRecord (line 836) | getChannelBlockRecord(i_player_id): Observable<CampaignTimelineChanelP...
    method getResourceRecord (line 849) | getResourceRecord(i_resource_id): Observable<ResourcesModel> {
    method getChannelsOfTimeline (line 898) | getChannelsOfTimeline(i_campaign_timeline_id): Observable<any> {
    method getCampaignTimelines (line 912) | getCampaignTimelines(i_campaign_id: number): Observable<List<CampaignT...
    method getBlockTimelineChannelBlockLength (line 924) | getBlockTimelineChannelBlockLength(i_campaign_timeline_chanel_player_i...
    method getTotalDurationChannel (line 939) | getTotalDurationChannel(i_selected_campaign_timeline_chanel_id) {
    method getCampaignTimelineSequencerIndex (line 953) | getCampaignTimelineSequencerIndex(i_campaign_timeline_id): Observable<...
    method getCampaignsSchedule (line 968) | getCampaignsSchedule(i_campaign_timeline_id): Observable<CampaignTimel...
    method getGlobalTemplateIdOfTimeline (line 980) | getGlobalTemplateIdOfTimeline(i_campaign_timeline_id): Observable<Arra...
    method getTemplatesOfTimeline (line 994) | getTemplatesOfTimeline(i_campaign_timeline_id): Observable<Array<numbe...
    method getChannelFromViewer (line 1009) | getChannelFromViewer(i_selectedTimeline_id, i_campaign_timeline_board_...
    method getAssignedViewerIdFromChannelId (line 1027) | getAssignedViewerIdFromChannelId(i_campaign_timeline_channel_id): Obse...
    method getTimeline (line 1041) | getTimeline(i_campaign_timeline_id): Observable<CampaignTimelinesModel> {
    method getTemplateViewersScreenProps (line 1053) | getTemplateViewersScreenProps(i_campaign_timeline_id, i_campaign_timel...
    method getCampaign (line 1146) | getCampaign(i_campaign_id: number): Observable<CampaignsModelExt> {
    method campaignSelectedExampleMultipleLatestFromSelections (line 1160) | private campaignSelectedExampleMultipleLatestFromSelections() {
    method findCampaignByIdTest (line 1183) | private findCampaignByIdTest(i_campaignId: number): Observable<Campaig...
    method findCampaignByIdConcatTemp1 (line 1194) | private findCampaignByIdConcatTemp1(i_campaignId): Observable<Campaign...

FILE: src/store/actions/appdb.actions.ts
  constant APP_INIT (line 12) | const APP_INIT = 'APP_INIT';
  constant ACTION_INJECT_SDK (line 13) | const ACTION_INJECT_SDK = 'ACTION_INJECT_SDK';
  constant ACTION_TWO_FACTOR_REMOVED (line 14) | const ACTION_TWO_FACTOR_REMOVED = 'ACTION_TWO_FACTOR_REMOVED';
  constant ACTION_UISTATE_UPDATE (line 15) | const ACTION_UISTATE_UPDATE = 'ACTION_UISTATE_UPDATE';
  constant ACTION_LIVELOG_UPDATE (line 16) | const ACTION_LIVELOG_UPDATE = 'ACTION_LIVELOG_UPDATE';
  constant ACTION_FORM_UPDATE (line 17) | const ACTION_FORM_UPDATE = 'ACTION_FORM_UPDATE';
  type AuthenticateFlags (line 19) | enum AuthenticateFlags {
  type SideProps (line 35) | enum SideProps {
  class AppdbAction (line 55) | class AppdbAction {
    method constructor (line 57) | constructor(private store: Store<ApplicationState>, private http: Http) {
    method initAppDb (line 60) | public initAppDb() {
    method resetCampaignSelection (line 67) | public resetCampaignSelection(){
    method getQrCodeTwoFactor (line 83) | public getQrCodeTwoFactor(): Observable<string> {

FILE: src/store/application.state.ts
  type ApplicationState (line 3) | interface ApplicationState {
  constant INITIAL_APPLICATION_STATE (line 7) | const INITIAL_APPLICATION_STATE: ApplicationState = {

FILE: src/store/effects/appdb.effects.ts
  constant EFFECT_AUTH_START (line 32) | const EFFECT_AUTH_START = 'EFFECT_AUTH_START';
  constant EFFECT_AUTH_END (line 33) | const EFFECT_AUTH_END = 'EFFECT_AUTH_END';
  constant EFFECT_UPDATE_USER_MODEL (line 34) | const EFFECT_UPDATE_USER_MODEL = 'EFFECT_UPDATE_USER_MODEL';
  constant EFFECT_AUTH_STATUS (line 35) | const EFFECT_AUTH_STATUS = 'EFFECT_AUTH_STATUS';
  constant EFFECT_TWO_FACTOR_AUTH (line 36) | const EFFECT_TWO_FACTOR_AUTH = 'EFFECT_TWO_FACTOR_AUTH';
  constant EFFECT_TWO_FACTOR_UPDATING (line 37) | const EFFECT_TWO_FACTOR_UPDATING = 'EFFECT_TWO_FACTOR_UPDATING';
  constant EFFECT_TWO_FACTOR_UPDATED (line 38) | const EFFECT_TWO_FACTOR_UPDATED = 'EFFECT_TWO_FACTOR_UPDATED';
  constant EFFECT_LOAD_STATIONS (line 39) | const EFFECT_LOAD_STATIONS = 'EFFECT_LOAD_STATIONS';
  constant EFFECT_LOADING_STATIONS (line 40) | const EFFECT_LOADING_STATIONS = 'EFFECT_LOADING_STATIONS';
  constant EFFECT_LOADED_STATIONS (line 41) | const EFFECT_LOADED_STATIONS = 'EFFECT_LOADED_STATIONS';
  constant EFFECT_LOAD_FASTERQ_LINES (line 42) | const EFFECT_LOAD_FASTERQ_LINES = 'EFFECT_LOAD_FASTERQ_LINES';
  constant EFFECT_LOADED_FASTERQ_LINES (line 43) | const EFFECT_LOADED_FASTERQ_LINES = 'EFFECT_LOADED_FASTERQ_LINES';
  constant EFFECT_LOADING_FASTERQ_LINES (line 44) | const EFFECT_LOADING_FASTERQ_LINES = 'EFFECT_LOADING_FASTERQ_LINES';
  constant EFFECT_LOAD_FASTERQ_LINE (line 45) | const EFFECT_LOAD_FASTERQ_LINE = 'EFFECT_LOAD_FASTERQ_LINE';
  constant EFFECT_LOADED_FASTERQ_LINE (line 46) | const EFFECT_LOADED_FASTERQ_LINE = 'EFFECT_LOADED_FASTERQ_LINE';
  constant EFFECT_LOADING_FASTERQ_LINE (line 47) | const EFFECT_LOADING_FASTERQ_LINE = 'EFFECT_LOADING_FASTERQ_LINE';
  constant EFFECT_LOAD_FASTERQ_ANALYTICS (line 48) | const EFFECT_LOAD_FASTERQ_ANALYTICS = 'EFFECT_LOAD_FASTERQ_ANALYTICS';
  constant EFFECT_LOADED_FASTERQ_ANALYTICS (line 49) | const EFFECT_LOADED_FASTERQ_ANALYTICS = 'EFFECT_LOADED_FASTERQ_ANALYTICS';
  constant EFFECT_LOADING_FASTERQ_ANALYTICS (line 50) | const EFFECT_LOADING_FASTERQ_ANALYTICS = 'EFFECT_LOADING_FASTERQ_ANALYTI...
  constant EFFECT_LOAD_FASTERQ_QUEUES (line 51) | const EFFECT_LOAD_FASTERQ_QUEUES = 'EFFECT_LOAD_FASTERQ_QUEUES';
  constant EFFECT_LOADED_FASTERQ_QUEUES (line 52) | const EFFECT_LOADED_FASTERQ_QUEUES = 'EFFECT_LOADED_FASTERQ_QUEUES';
  constant EFFECT_LOADING_FASTERQ_QUEUES (line 53) | const EFFECT_LOADING_FASTERQ_QUEUES = 'EFFECT_LOADING_FASTERQ_QUEUES';
  constant EFFECT_UPDATE_FASTERQ_LINE (line 54) | const EFFECT_UPDATE_FASTERQ_LINE = 'EFFECT_UPDATE_FASTERQ_LINE';
  constant EFFECT_UPDATED_FASTERQ_LINE (line 55) | const EFFECT_UPDATED_FASTERQ_LINE = 'EFFECT_UPDATED_FASTERQ_LINE';
  constant EFFECT_REMOVE_FASTERQ_LINE (line 56) | const EFFECT_REMOVE_FASTERQ_LINE = 'EFFECT_REMOVE_FASTERQ_LINE';
  constant EFFECT_REMOVED_FASTERQ_LINE (line 57) | const EFFECT_REMOVED_FASTERQ_LINE = 'EFFECT_REMOVED_FASTERQ_LINE';
  constant EFFECT_ADD_FASTERQ_LINE (line 58) | const EFFECT_ADD_FASTERQ_LINE = 'EFFECT_ADD_FASTERQ_LINE';
  constant EFFECT_ADDED_FASTERQ_LINE (line 59) | const EFFECT_ADDED_FASTERQ_LINE = 'EFFECT_ADDED_FASTERQ_LINE';
  constant EFFECT_QUEUE_CALL_SAVE (line 60) | const EFFECT_QUEUE_CALL_SAVE = 'EFFECT_QUEUE_CALL_SAVE';
  constant EFFECT_QUEUE_CALL_SAVING (line 61) | const EFFECT_QUEUE_CALL_SAVING = 'EFFECT_QUEUE_CALL_SAVING';
  constant EFFECT_QUEUE_CALL_SAVED (line 62) | const EFFECT_QUEUE_CALL_SAVED = 'EFFECT_QUEUE_CALL_SAVED';
  constant EFFECT_QUEUE_SERVICE_SAVE (line 63) | const EFFECT_QUEUE_SERVICE_SAVE = 'EFFECT_QUEUE_SERVICE_SAVE';
  constant EFFECT_QUEUE_SERVICE_SAVING (line 64) | const EFFECT_QUEUE_SERVICE_SAVING = 'EFFECT_QUEUE_SERVICE_SAVING';
  constant EFFECT_QUEUE_SERVICE_SAVED (line 65) | const EFFECT_QUEUE_SERVICE_SAVED = 'EFFECT_QUEUE_SERVICE_SAVED';
  constant EFFECT_QUEUE_POLL_SERVICE (line 66) | const EFFECT_QUEUE_POLL_SERVICE = 'EFFECT_QUEUE_POLL_SERVICE';
  constant EFFECT_RESET_FASTERQ_LINE (line 67) | const EFFECT_RESET_FASTERQ_LINE = 'EFFECT_RESET_FASTERQ_LINE';
  constant EFFECT_CONTACT_US (line 68) | const EFFECT_CONTACT_US = 'EFFECT_CONTACT_US';
  class AppDbEffects (line 71) | class AppDbEffects {
    method constructor (line 77) | constructor(private actions$: Actions,
    method authTwoFactor (line 108) | private authTwoFactor(action: Action): Observable<any> {
    method updatedTwoFactor (line 138) | private updatedTwoFactor(action: Action): Observable<any> {
    method authUser (line 173) | private authUser(action: Action): Observable<any> {
    method _loadStations (line 390) | private _loadStations(action: Action): Observable<List<StationModel>> {
    method contactService (line 449) | private contactService(body: Map<any, any>) {
    method getContactUrl (line 462) | private getContactUrl(i_urlEndPoint, i_method, i_body): RequestOptions...
    method createServerCall (line 475) | private createServerCall(i_urlEndPoint, i_method, i_body): RequestOpti...
    method _loadFasterqLines (line 498) | private _loadFasterqLines(action: Action): Observable<List<FasterqLine...
    method _loadFasterqLine (line 525) | private _loadFasterqLine(action: Action): Observable<FasterqLineModel> {
    method _loadfasterqAnalytics (line 548) | private _loadfasterqAnalytics(action: Action): Observable<List<Fasterq...
    method _loadfasterqQueues (line 576) | private _loadfasterqQueues(action: Action): Observable<List<FasterqLin...
    method _savefasterqQueueCall (line 602) | private _savefasterqQueueCall(action: Action): Observable<List<Fasterq...
    method _resetFasterqLine (line 635) | private _resetFasterqLine(action: Action): Observable<{}> {
    method _savefasterqQueueService (line 656) | private _savefasterqQueueService(action: Action): Observable<List<Fast...
    method _pollServicing (line 684) | private _pollServicing(action: Action): Observable<List<FasterqLineMod...
    method _updateFasterqLine (line 704) | private _updateFasterqLine(action: Action): Observable<any> {
    method _removeFasterqLine (line 726) | private _removeFasterqLine(action: Action): Observable<any> {
    method _addFasterqLine (line 748) | private _addFasterqLine(action: Action): Observable<any> {
    method processXml (line 765) | private processXml(context, xmlData, cb) {
    method twoFactorCheck (line 773) | private twoFactorCheck(): Observable<any> {

FILE: src/store/effects/msdb.effects.ts
  constant EFFECT_INIT_REDUXIFY_MSDB (line 12) | const EFFECT_INIT_REDUXIFY_MSDB = 'EFFECT_INIT_REDUXIFY_MSDB';
  constant EFFECT_GET_STATIONS (line 13) | const EFFECT_GET_STATIONS = 'EFFECT_GET_STATIONS';
  class MsdbEffects (line 16) | class MsdbEffects {
    method constructor (line 18) | constructor(private actions$: Actions,

FILE: src/store/imsdb.interfaces.ts
  type IDataBaseManager (line 3) | interface IDataBaseManager extends IDataManager_proto {
  type IPepperConnection (line 11) | interface IPepperConnection {
  type IPepperAuthReply (line 17) | interface IPepperAuthReply {
  type DataBaseModueBase (line 23) | interface DataBaseModueBase {
  type ILoadManager (line 28) | interface ILoadManager {

FILE: src/store/imsdb.interfaces_auto.ts
  class GlobalSettingsModel (line 9) | class GlobalSettingsModel extends StoreModel {
    method constructor (line 10) | constructor(data: any = {}) {super(data);}
    method getParamId (line 12) | public getParamId() {
    method getChangelistId (line 16) | public getChangelistId() {
    method getChangeType (line 20) | public getChangeType() {
    method getParamKey (line 24) | public getParamKey() {
    method getParamValue (line 28) | public getParamValue() {
  class ResourcesModel (line 33) | class ResourcesModel extends StoreModel {
    method constructor (line 34) | constructor(data: any = {}) {super(data);}
    method getResourceId (line 36) | public getResourceId() {
    method getChangelistId (line 40) | public getChangelistId() {
    method getChangeType (line 44) | public getChangeType() {
    method getResourceName (line 48) | public getResourceName() {
    method getResourceType (line 52) | public getResourceType() {
    method getResourcePixelWidth (line 56) | public getResourcePixelWidth() {
    method getResourcePixelHeight (line 60) | public getResourcePixelHeight() {
    method getDefaultPlayer (line 64) | public getDefaultPlayer() {
    method getSnapshot (line 68) | public getSnapshot() {
    method getResourceTotalTime (line 72) | public getResourceTotalTime() {
    method getResourceDateCreated (line 76) | public getResourceDateCreated() {
    method getResourceDateModified (line 80) | public getResourceDateModified() {
    method getResourceTrust (line 84) | public getResourceTrust() {
    method getResourcePublic (line 88) | public getResourcePublic() {
    method getResourceBytesTotal (line 92) | public getResourceBytesTotal() {
    method getResourceModule (line 96) | public getResourceModule() {
    method getTreePath (line 100) | public getTreePath() {
    method getAccessKey (line 104) | public getAccessKey() {
    method getResourceHtml (line 108) | public getResourceHtml() {
    method getShortcut (line 112) | public getShortcut() {
    method getShortcutBusinessId (line 116) | public getShortcutBusinessId() {
    method getShortcutResourceId (line 120) | public getShortcutResourceId() {
  class AdLocalPackagesModel (line 125) | class AdLocalPackagesModel extends StoreModel {
    method constructor (line 126) | constructor(data: any = {}) {super(data);}
    method getAdLocalPackageId (line 128) | public getAdLocalPackageId() {
    method getChangelistId (line 132) | public getChangelistId() {
    method getChangeType (line 136) | public getChangeType() {
    method getEnabled (line 140) | public getEnabled() {
    method getPackageName (line 144) | public getPackageName() {
    method getUseDateRange (line 148) | public getUseDateRange() {
    method getStartDate (line 152) | public getStartDate() {
    method getEndDate (line 156) | public getEndDate() {
  class AdLocalContentsModel (line 161) | class AdLocalContentsModel extends StoreModel {
    method constructor (line 162) | constructor(data: any = {}) {super(data);}
    method getAdLocalContentId (line 164) | public getAdLocalContentId() {
    method getChangelistId (line 168) | public getChangelistId() {
    method getChangeType (line 172) | public getChangeType() {
    method getAdLocalPackageId (line 176) | public getAdLocalPackageId() {
    method getEnabled (line 180) | public getEnabled() {
    method getContentName (line 184) | public getContentName() {
  class CategoryValuesModel (line 189) | class CategoryValuesModel extends StoreModel {
    method constructor (line 190) | constructor(data: any = {}) {super(data);}
    method getCategoryValueId (line 192) | public getCategoryValueId() {
    method getChangelistId (line 196) | public getChangelistId() {
    method getChangeType (line 200) | public getChangeType() {
    method getParentCategoryValueId (line 204) | public getParentCategoryValueId() {
    method getCategoryValue (line 208) | public getCategoryValue() {
  class CatalogItemsModel (line 213) | class CatalogItemsModel extends StoreModel {
    method constructor (line 214) | constructor(data: any = {}) {super(data);}
    method getCatalogItemId (line 216) | public getCatalogItemId() {
    method getChangelistId (line 220) | public getChangelistId() {
    method getChangeType (line 224) | public getChangeType() {
    method getItemName (line 228) | public getItemName() {
    method getAdLocalContentId (line 232) | public getAdLocalContentId() {
  class CatalogItemInfosModel (line 237) | class CatalogItemInfosModel extends StoreModel {
    method constructor (line 238) | constructor(data: any = {}) {super(data);}
    method getCatalogItemId (line 240) | public getCatalogItemId() {
    method getChangelistId (line 244) | public getChangelistId() {
    method getChangeType (line 248) | public getChangeType() {
    method getInfo0 (line 252) | public getInfo0() {
    method getInfo1 (line 256) | public getInfo1() {
    method getInfo2 (line 260) | public getInfo2() {
    method getInfo3 (line 264) | public getInfo3() {
  class CatalogItemResourcesModel (line 269) | class CatalogItemResourcesModel extends StoreModel {
    method constructor (line 270) | constructor(data: any = {}) {super(data);}
    method getCatalogItemResourceId (line 272) | public getCatalogItemResourceId() {
    method getChangelistId (line 276) | public getChangelistId() {
    method getChangeType (line 280) | public getChangeType() {
    method getCatalogItemId (line 284) | public getCatalogItemId() {
    method getResourceId (line 288) | public getResourceId() {
    method getResourceGroup (line 292) | public getResourceGroup() {
  class CatalogItemCategoriesModel (line 297) | class CatalogItemCategoriesModel extends StoreModel {
    method constructor (line 298) | constructor(data: any = {}) {super(data);}
    method getCatalogItemCategoryId (line 300) | public getCatalogItemCategoryId() {
    method getChangelistId (line 304) | public getChangelistId() {
    method getChangeType (line 308) | public getChangeType() {
    method getCatalogItemId (line 312) | public getCatalogItemId() {
    method getCategoryValueId (line 316) | public getCategoryValueId() {
  class PlayerDataModel (line 321) | class PlayerDataModel extends StoreModel {
    method constructor (line 322) | constructor(data: any = {}) {super(data);}
    method getPlayerDataId (line 324) | public getPlayerDataId() {
    method getChangelistId (line 328) | public getChangelistId() {
    method getChangeType (line 332) | public getChangeType() {
    method getPlayerDataValue (line 336) | public getPlayerDataValue() {
    method getPlayerDataPublic (line 340) | public getPlayerDataPublic() {
    method getTreePath (line 344) | public getTreePath() {
    method getSourceCode (line 348) | public getSourceCode() {
    method getAccessKey (line 352) | public getAccessKey() {
  class BoardsModel (line 357) | class BoardsModel extends StoreModel {
    method constructor (line 358) | constructor(data: any = {}) {super(data);}
    method getBoardId (line 360) | public getBoardId() {
    method getChangelistId (line 364) | public getChangelistId() {
    method getChangeType (line 368) | public getChangeType() {
    method getBoardName (line 372) | public getBoardName() {
    method getBoardPixelWidth (line 376) | public getBoardPixelWidth() {
    method getBoardPixelHeight (line 380) | public getBoardPixelHeight() {
    method getMonitorOrientationEnabled (line 384) | public getMonitorOrientationEnabled() {
    method getMonitorOrientationIndex (line 388) | public getMonitorOrientationIndex() {
    method getAccessKey (line 392) | public getAccessKey() {
    method getTreePath (line 396) | public getTreePath() {
  class CampaignsModel (line 401) | class CampaignsModel extends StoreModel {
    method constructor (line 402) | constructor(data: any = {}) {super(data);}
    method getCampaignId (line 404) | public getCampaignId() {
    method getChangelistId (line 408) | public getChangelistId() {
    method getChangeType (line 412) | public getChangeType() {
    method getCampaignName (line 416) | public getCampaignName() {
    method getCampaignPlaylistMode (line 420) | public getCampaignPlaylistMode() {
    method getKioskMode (line 424) | public getKioskMode() {
    method getKioskKey (line 428) | public getKioskKey() {
    method getKioskTimelineId (line 432) | public getKioskTimelineId() {
    method getKioskWaitTime (line 436) | public getKioskWaitTime() {
    method getMouseInterruptMode (line 440) | public getMouseInterruptMode() {
    method getTreePath (line 444) | public getTreePath() {
    method getAccessKey (line 448) | public getAccessKey() {
  class CampaignChannelsModel (line 453) | class CampaignChannelsModel extends StoreModel {
    method constructor (line 454) | constructor(data: any = {}) {super(data);}
    method getCampaignChannelId (line 456) | public getCampaignChannelId() {
    method getChangelistId (line 460) | public getChangelistId() {
    method getChangeType (line 464) | public getChangeType() {
    method getCampaignId (line 468) | public getCampaignId() {
    method getChanelName (line 472) | public getChanelName() {
    method getChanelColor (line 476) | public getChanelColor() {
    method getRandomOrder (line 480) | public getRandomOrder() {
    method getRepeatToFit (line 484) | public getRepeatToFit() {
    method getFixedPlayersLength (line 488) | public getFixedPlayersLength() {
  class CampaignChannelPlayersModel (line 493) | class CampaignChannelPlayersModel extends StoreModel {
    method constructor (line 494) | constructor(data: any = {}) {super(data);}
    method getCampaignChannelPlayerId (line 496) | public getCampaignChannelPlayerId() {
    method getChangelistId (line 500) | public getChangelistId() {
    method getChangeType (line 504) | public getChangeType() {
    method getCampaignChannelId (line 508) | public getCampaignChannelId() {
    method getPlayerOffsetTime (line 512) | public getPlayerOffsetTime() {
    method getPlayerDuration (line 516) | public getPlayerDuration() {
    method getPlayerData (line 520) | public getPlayerData() {
    method getMouseChildren (line 524) | public getMouseChildren() {
    method getAdLocalContentId (line 528) | public getAdLocalContentId() {
  class CampaignTimelinesModel (line 533) | class CampaignTimelinesModel extends StoreModel {
    method constructor (line 534) | constructor(data: any = {}) {super(data);}
    method getCampaignTimelineId (line 536) | public getCampaignTimelineId() {
    method getChangelistId (line 540) | public getChangelistId() {
    method getChangeType (line 544) | public getChangeType() {
    method getCampaignId (line 548) | public getCampaignId() {
    method getTimelineName (line 552) | public getTimelineName() {
    method getTimelineDuration (line 556) | public getTimelineDuration() {
  class CampaignEventsModel (line 561) | class CampaignEventsModel extends StoreModel {
    method constructor (line 562) | constructor(data: any = {}) {super(data);}
    method getCampaignEventId (line 564) | public getCampaignEventId() {
    method getChangelistId (line 568) | public getChangelistId() {
    method getChangeType (line 572) | public getChangeType() {
    method getCampaignId (line 576) | public getCampaignId() {
    method getSenderName (line 580) | public getSenderName() {
    method getEventName (line 584) | public getEventName() {
    method getEventCondition (line 588) | public getEventCondition() {
    method getComm
Condensed preview — 337 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,320K chars).
[
  {
    "path": ".angular-cli.json",
    "chars": 2928,
    "preview": "{\n  \"project\": {\n    \"version\": \"1.0.0-beta.32.3\",\n    \"name\": \"StudioWeb\"\n  },\n  \"apps\": [\n    {\n      \"root\": \"src\",\n "
  },
  {
    "path": ".editorconfig",
    "chars": 245,
    "preview": "# Editor configuration, see http://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = "
  },
  {
    "path": ".gitignore",
    "chars": 797,
    "preview": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n\n\n# compiled output\n/dist/*.js\n/dist/**\n/dist"
  },
  {
    "path": "LICENSE",
    "chars": 36964,
    "preview": "======================================================================\n\n                        MediaSignage Add-on lice"
  },
  {
    "path": "README.md",
    "chars": 5653,
    "preview": "StudioLite, Digital Signage for the rest of us\n---------------------------------------\n\n<!-- [![NPM](https://nodei.co/np"
  },
  {
    "path": "dev/notes.txt",
    "chars": 5560,
    "preview": "////////////// NOTES ////////////////\n\n\n\nneed to find a way to remove core-js from videoangular definitions\nsed -i.bak '"
  },
  {
    "path": "e2e/app.e2e-spec.ts",
    "chars": 336,
    "preview": "import { NgKitchenSinkPage } from './app.po';\n\ndescribe('ng-kitchen-sink App', function() {\n  let page: NgKitchenSinkPag"
  },
  {
    "path": "e2e/app.po.ts",
    "chars": 218,
    "preview": "import { browser, element, by } from 'protractor';\n\nexport class NgKitchenSinkPage {\n  navigateTo() {\n    return browser"
  },
  {
    "path": "e2e/tsconfig.json",
    "chars": 349,
    "preview": "{\n  \"compileOnSave\": false,\n  \"compilerOptions\": {\n    \"declaration\": false,\n    \"emitDecoratorMetadata\": true,\n    \"exp"
  },
  {
    "path": "examples/adStatsSample.xml",
    "chars": 16788,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Report>\n   <Fields>\n      <ExtStat>stationId,packageId,packageContentId,packageN"
  },
  {
    "path": "examples/apps_table.txt",
    "chars": 2321,
    "preview": "app_id\tapp_name\thelp_name\tdescription\tuninstallable\thidden\tprice\tmin_version\n10005\tEmbeded Resource\t\"\"\tEmbeded Resource\t"
  },
  {
    "path": "examples/calendar_google.xml",
    "chars": 4190,
    "preview": "scene\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"Cal Scene\" interactive=\"0\" mimeType=\"Json.cale"
  },
  {
    "path": "examples/collection.xml",
    "chars": 1910,
    "preview": "\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"4100\" label=\"Collection\" interactive=\"0\">\n   <Data>\n      <Event"
  },
  {
    "path": "examples/collection_scene.xml",
    "chars": 2049,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"collection scene\" interactive=\"0\" id=\"YmxvY2tpZDg3\">"
  },
  {
    "path": "examples/digg.xml",
    "chars": 1529,
    "preview": "Scene:\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"Digg cene\" interactive=\"0\" mimeType=\"Json.dig"
  },
  {
    "path": "examples/googlesheets.xml",
    "chars": 883,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"Sheets\" interactive=\"0\" mimeType=\"Json.spreadsheet\" "
  },
  {
    "path": "examples/instagram_feed.xml",
    "chars": 1788,
    "preview": "scene:\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"insat feed\" interactive=\"0\" mimeType=\"Json.in"
  },
  {
    "path": "examples/jsonItem.xml",
    "chars": 1695,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"json scene\" interactive=\"0\" id=\"YmxvY2tpZDY3\">\n   <D"
  },
  {
    "path": "examples/jsonPlayer.xml",
    "chars": 1178,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"4300\" label=\"json\" interactive=\"0\">\n   <Data>\n      <EventCommand"
  },
  {
    "path": "examples/json_as3_maps.xml",
    "chars": 22783,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ms:PlayerPage xmlns:fx=\"http://ns.adobe.com/mxml/2009\"\n\t\t\t   xmlns:s=\"library://"
  },
  {
    "path": "examples/json_scenes.xml",
    "chars": 342,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"6010\" label=\"\" interactive=\"0\">\n   <Data>\n      <Json providerTyp"
  },
  {
    "path": "examples/jsonsheets.xml",
    "chars": 1473,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"vanilla json\" interactive=\"0\" id=\"YmxvY2tpZDM3\">\n   "
  },
  {
    "path": "examples/location.xml",
    "chars": 1440,
    "preview": "\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"4105\" label=\"Location based\" interactive=\"0\">\n   <Data>\n      <L"
  },
  {
    "path": "examples/player_weather_scene.xml",
    "chars": 233,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"6010\" iconName=\"player6010Icon\" label=\"\">\n   <Data>\n      <Json p"
  },
  {
    "path": "examples/reseller_sample.xml",
    "chars": 9715,
    "preview": "<!-- Galaxy app_compoenents > app_compontn / module_id -->\n\n<BusinessInfo businessId=\"300762\" name=\"XXXXXXXXXXXX\" busine"
  },
  {
    "path": "examples/sceneSample.xml",
    "chars": 3582,
    "preview": "<Player player=\"3510\" label=\"my scene 1\" interactive=\"0\">\n\t<Data>\n\t\t<EventCommands>\n\t\t\t<EventCommand from=\"\" condition=\""
  },
  {
    "path": "examples/sceneSampleLayout.xml",
    "chars": 1134,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"locks\" interactive=\"0\" id=\"YmxvY2tpZDQx\">\n   <Data>\n"
  },
  {
    "path": "examples/twitterv3.xml",
    "chars": 3425,
    "preview": "Scene\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"ywitter csns\" interactive=\"0\" mimeType=\"Json.t"
  },
  {
    "path": "examples/worldweather.xml",
    "chars": 6212,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Player player=\"3510\" label=\"WeatherScene\" interactive=\"0\" mimeType=\"Json.weather"
  },
  {
    "path": "notes.txt",
    "chars": 4052,
    "preview": "////////////// NOTES ////////////////\n\n\n\nneed to find a way to remove core-js from videoangular definitions\nsed -i.bak '"
  },
  {
    "path": "package.json",
    "chars": 5795,
    "preview": "{\n  \"name\": \"studioweb\",\n  \"version\": \"0.1.778\",\n  \"license\": \"Modified GPL (see readme.md)\",\n  \"angular-cli\": {},\n  \"sc"
  },
  {
    "path": "src/Lib.ts",
    "chars": 51263,
    "preview": "/** Common Library **/\nimport {Injectable} from \"@angular/core\";\nimport * as Immutable from \"immutable\";\nimport {List, M"
  },
  {
    "path": "src/app/app-component.css",
    "chars": 44,
    "preview": ".md-radio-button {\n    padding-left: 20px;\n}"
  },
  {
    "path": "src/app/app-component.html",
    "chars": 7223,
    "preview": "<div id=\"domRoot\" [ngClass]=\"{hidden: m_hidden}\">\n    <div id=\"headerPad\"></div>\n    <nav id=\"fileMenu\" class=\"navbar na"
  },
  {
    "path": "src/app/app-component.ts",
    "chars": 14779,
    "preview": "import {AfterViewInit, Component, VERSION, ViewChild, ViewContainerRef} from \"@angular/core\";\nimport \"rxjs/add/operator/"
  },
  {
    "path": "src/app/app-module.ts",
    "chars": 6514,
    "preview": "import {BrowserModule} from \"@angular/platform-browser\";\nimport {Compiler, NgModule, ErrorHandler} from \"@angular/core\";"
  },
  {
    "path": "src/app/appwrap.ts",
    "chars": 2676,
    "preview": "import {Component} from \"@angular/core\";\nimport {Router} from \"@angular/router\";\nimport {Compbaser} from \"ng-mslib\";\nimp"
  },
  {
    "path": "src/app/blocks/block-fabric-image.ts",
    "chars": 4409,
    "preview": "import {BlockFabric} from \"./block-fabric\";\nimport * as _ from \"lodash\";\nimport {BlockLabels} from \"../../interfaces/Con"
  },
  {
    "path": "src/app/blocks/block-fabric-josn-item.ts",
    "chars": 17211,
    "preview": "import {BlockFabric} from \"./block-fabric\";\nimport * as _ from \"lodash\";\nimport {Lib} from \"../../Lib\";\nimport {BlockLab"
  },
  {
    "path": "src/app/blocks/block-fabric-label.ts",
    "chars": 4591,
    "preview": "import {BlockFabric} from \"./block-fabric\";\nimport * as _ from \"lodash\";\nimport {Lib} from \"../../Lib\";\nimport {BlockLab"
  },
  {
    "path": "src/app/blocks/block-fabric-scene.ts",
    "chars": 7000,
    "preview": "import {BlockFabric} from \"./block-fabric\";\nimport * as _ from 'lodash';\nimport {Lib} from \"../../Lib\";\nimport {BlockLab"
  },
  {
    "path": "src/app/blocks/block-fabric-svg.ts",
    "chars": 5562,
    "preview": "import {BlockFabric} from \"./block-fabric\";\nimport * as _ from \"lodash\";\nimport {BlockLabels} from \"../../interfaces/Con"
  },
  {
    "path": "src/app/blocks/block-fabric.ts",
    "chars": 11345,
    "preview": "import * as _ from 'lodash';\nimport {Lib} from \"../../Lib\";\nimport {BlockService} from \"./block-service\";\nimport {RedPep"
  },
  {
    "path": "src/app/blocks/block-prop-calendar.ts",
    "chars": 11196,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-clock.ts",
    "chars": 5095,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component, Input} from \"@angular/core\";\nimport {FormBuilder} from \"@angu"
  },
  {
    "path": "src/app/blocks/block-prop-collection.ts",
    "chars": 14451,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, ViewChild} from \"@angular/c"
  },
  {
    "path": "src/app/blocks/block-prop-common.ts",
    "chars": 17540,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, Input} from \"@angular/"
  },
  {
    "path": "src/app/blocks/block-prop-container.ts",
    "chars": 10394,
    "preview": "import {AfterViewInit, ChangeDetectorRef, Component, Inject, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"n"
  },
  {
    "path": "src/app/blocks/block-prop-fasterq.ts",
    "chars": 6483,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input} from \"@angular/core\";\ni"
  },
  {
    "path": "src/app/blocks/block-prop-html.ts",
    "chars": 2781,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component, Input} from \"@angular/core\";\nimport {FormBuilder, FormControl"
  },
  {
    "path": "src/app/blocks/block-prop-image.ts",
    "chars": 4092,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-instagram.ts",
    "chars": 3444,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-json-item.ts",
    "chars": 24858,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-json-player.ts",
    "chars": 10944,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild} from \"@angular/core\";\nim"
  },
  {
    "path": "src/app/blocks/block-prop-label.ts",
    "chars": 4828,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component, Input} from \"@angular/core\";\nimport {FormBuilder, FormControl"
  },
  {
    "path": "src/app/blocks/block-prop-location.ts",
    "chars": 24373,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, ViewChild} from \"@angular/c"
  },
  {
    "path": "src/app/blocks/block-prop-mrss.ts",
    "chars": 24446,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-position.ts",
    "chars": 9953,
    "preview": "import {ChangeDetectionStrategy, ChangeDetectorRef, Component} from \"@angular/core\";\nimport {FormBuilder, FormControl, F"
  },
  {
    "path": "src/app/blocks/block-prop-qr.ts",
    "chars": 2497,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component, Input} from \"@angular/core\";\nimport {FormBuilder, FormControl"
  },
  {
    "path": "src/app/blocks/block-prop-rss.ts",
    "chars": 9773,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-scene.ts",
    "chars": 2596,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input} from \"@angular/core\";\nimpor"
  },
  {
    "path": "src/app/blocks/block-prop-sheets.ts",
    "chars": 6454,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-twitter.ts",
    "chars": 3840,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-video.ts",
    "chars": 4093,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-weather.ts",
    "chars": 4561,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop-youtube.ts",
    "chars": 6148,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-prop.digg.ts",
    "chars": 2021,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {FormB"
  },
  {
    "path": "src/app/blocks/block-service.ts",
    "chars": 77291,
    "preview": "/**\n * Block service is responsible only for procedures related to channel and scene blocks\n */\n\nimport {Inject, Injecta"
  },
  {
    "path": "src/app/blocks/json-event-grid.ts",
    "chars": 8516,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component, Input, ViewChild} from \"@angular/core\";\nimport {Compbaser} fr"
  },
  {
    "path": "src/app/campaigns/add-content.ts",
    "chars": 18779,
    "preview": "import {AfterViewInit, Component, EventEmitter, Inject, Input, Output} from \"@angular/core\";\nimport {Compbaser} from \"ng"
  },
  {
    "path": "src/app/campaigns/campaign-channels.ts",
    "chars": 10426,
    "preview": "import {AfterViewInit, ChangeDetectorRef, Component, Input, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng"
  },
  {
    "path": "src/app/campaigns/campaign-duration.ts",
    "chars": 1014,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component} from \"@angular/core\";\nimport {Compbaser} f"
  },
  {
    "path": "src/app/campaigns/campaign-editor-props.ts",
    "chars": 2183,
    "preview": "import {Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {YellowPepperService} from \"../../se"
  },
  {
    "path": "src/app/campaigns/campaign-editor.ts",
    "chars": 10761,
    "preview": "import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Output, ViewChild} from \"@angular/core\";\nim"
  },
  {
    "path": "src/app/campaigns/campaign-editors.html",
    "chars": 9656,
    "preview": "<small class=\"debug\">{{me}}</small>\n<h4 i18n>campaign editor</h4>\n<!-- todo: need to investigate as performance sometime"
  },
  {
    "path": "src/app/campaigns/campaign-layout.ts",
    "chars": 4790,
    "preview": "import {Component, EventEmitter, Input, Output} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport * as sc"
  },
  {
    "path": "src/app/campaigns/campaign-list.ts",
    "chars": 2680,
    "preview": "import {Component, ChangeDetectionStrategy, Input, Output, EventEmitter} from \"@angular/core\";\nimport {Compbaser} from \""
  },
  {
    "path": "src/app/campaigns/campaign-manager.html",
    "chars": 3201,
    "preview": "<small class=\"debug\" style=\"padding-left: 30px\">{{me}}</small>\n\n<div style=\"padding-bottom: 10px\">\n    <span i18n style="
  },
  {
    "path": "src/app/campaigns/campaign-manager.ts",
    "chars": 5383,
    "preview": "import {ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Output} from \"@angular/core\";\nimport"
  },
  {
    "path": "src/app/campaigns/campaign-name.ts",
    "chars": 1503,
    "preview": "import {Component, ChangeDetectionStrategy, Output, EventEmitter} from \"@angular/core\";\nimport {Compbaser} from \"ng-msli"
  },
  {
    "path": "src/app/campaigns/campaign-orientation.ts",
    "chars": 2895,
    "preview": "import {Component, EventEmitter, forwardRef, Inject, Output} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\ni"
  },
  {
    "path": "src/app/campaigns/campaign-props-manager.ts",
    "chars": 2262,
    "preview": "import {Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {Observable} from \"rxjs\";\nimport {Si"
  },
  {
    "path": "src/app/campaigns/campaign-props.ts",
    "chars": 13303,
    "preview": "import {Component, Input} from \"@angular/core\";\nimport {FormBuilder, FormControl, FormGroup, Validators} from \"@angular/"
  },
  {
    "path": "src/app/campaigns/campaign-resolution.ts",
    "chars": 2823,
    "preview": "import {Component, ChangeDetectionStrategy, Input, Output, EventEmitter, ViewChild, ChangeDetectorRef} from \"@angular/co"
  },
  {
    "path": "src/app/campaigns/campaign-sched-props.css",
    "chars": 911,
    "preview": ".carousel-control.left, .carousel-control.right {\n    background-image: none;\n\n}\n\n#schedulePriority img:first-child {\n  "
  },
  {
    "path": "src/app/campaigns/campaign-sched-props.html",
    "chars": 7290,
    "preview": "<div>\n    <form novalidate autocomplete=\"off\" [formGroup]=\"contGroup\">\n        <div class=\"row\">\n            <div class="
  },
  {
    "path": "src/app/campaigns/campaign-sched-props.ts",
    "chars": 10268,
    "preview": "import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, ViewChild} from \"@angular/core\";\nimport {FormBuilder, F"
  },
  {
    "path": "src/app/campaigns/campaign-story-timeline.ts",
    "chars": 15786,
    "preview": "/**\n Github repo: https://github.com/AlexWD/ds-timeline-widget\n **/\n\nimport {AfterViewInit, ChangeDetectionStrategy, Cha"
  },
  {
    "path": "src/app/campaigns/campaigns-navigation.ts",
    "chars": 2350,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {animate, state, style, transition, trigger} fr"
  },
  {
    "path": "src/app/campaigns/campaigns.ts",
    "chars": 11498,
    "preview": "import {ChangeDetectionStrategy, Component, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport "
  },
  {
    "path": "src/app/campaigns/channel-block-props.ts",
    "chars": 9526,
    "preview": "import {AfterViewInit, Component, ElementRef} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {YellowPe"
  },
  {
    "path": "src/app/campaigns/channel-props.ts",
    "chars": 7448,
    "preview": "import {Component} from \"@angular/core\";\nimport {FormBuilder, FormControl, FormGroup} from \"@angular/forms\";\nimport {Com"
  },
  {
    "path": "src/app/campaigns/dashboard-props.ts",
    "chars": 1902,
    "preview": "import {Component, Input, ChangeDetectionStrategy} from \"@angular/core\";\nimport {FormControl, FormGroup, FormBuilder} fr"
  },
  {
    "path": "src/app/campaigns/index.ts",
    "chars": 2874,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/campaigns/screen-layout-editor-props.ts",
    "chars": 5272,
    "preview": "import {Component} from \"@angular/core\";\nimport {FormBuilder, FormControl, FormGroup} from \"@angular/forms\";\nimport {Com"
  },
  {
    "path": "src/app/campaigns/screen-layout-editor.ts",
    "chars": 23471,
    "preview": "import {AfterViewInit, Component, ComponentFactoryResolver, ComponentRef, ElementRef, EventEmitter, Output, ViewChild, V"
  },
  {
    "path": "src/app/campaigns/sequencer.ts",
    "chars": 19671,
    "preview": "import {ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, QueryList, ViewChildren} from \"@ang"
  },
  {
    "path": "src/app/campaigns/timeline/timeline.component.css",
    "chars": 1648,
    "preview": "#container {\n  height: 801px;\n  overflow: visible;\n  padding: 0;\n  position: relative;\n}\n\n:host /deep/ .box {\n  backgrou"
  },
  {
    "path": "src/app/campaigns/timeline/timeline.component.html",
    "chars": 7364,
    "preview": "<div style=\"width: 100%\">\n  <div class=\"row\" style=\"padding-top:50px;padding-bottom:50px;\" *ngIf=\"dev\">\n    <button type"
  },
  {
    "path": "src/app/campaigns/timeline/timeline.component.spec.ts",
    "chars": 776,
    "preview": "/* tslint:disable:no-unused-variable */\nimport { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport"
  },
  {
    "path": "src/app/campaigns/timeline/timeline.component.ts",
    "chars": 24834,
    "preview": "import { Component, OnInit, Input, AfterViewChecked, OnChanges, EventEmitter, Output } from '@angular/core';\n\ndeclare le"
  },
  {
    "path": "src/app/campaigns/timeline-props.ts",
    "chars": 5743,
    "preview": "import {ChangeDetectorRef, Component} from \"@angular/core\";\nimport {FormBuilder, FormControl, FormGroup, Validators} fro"
  },
  {
    "path": "src/app/campaigns/timeline-ruler/timeline-ruler.component.css",
    "chars": 76,
    "preview": "#ruler {\n  border: 1px solid black;\n}\n\n#ruler-container {\n  height: 50px;\n}\n"
  },
  {
    "path": "src/app/campaigns/timeline-ruler/timeline-ruler.component.html",
    "chars": 65,
    "preview": "<div id=\"ruler-container\">\n  <canvas id=\"ruler\"></canvas>\n</div>\n"
  },
  {
    "path": "src/app/campaigns/timeline-ruler/timeline-ruler.component.spec.ts",
    "chars": 812,
    "preview": "/* tslint:disable:no-unused-variable */\nimport { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport"
  },
  {
    "path": "src/app/campaigns/timeline-ruler/timeline-ruler.component.ts",
    "chars": 2495,
    "preview": "import { Component, OnInit, Input, OnChanges } from '@angular/core';\n\n@Component({\n  selector: 'app-timeline-ruler',\n  t"
  },
  {
    "path": "src/app/dashboard/dash-panel-mini.html",
    "chars": 1577,
    "preview": "<small class=\"debug\">{{me}}</small>\n<hr/>\n<Logo class=\"pull-left\" *ngIf=\"isBrandingDisabled\" style=\"padding-left: 5px; p"
  },
  {
    "path": "src/app/dashboard/dash-panel-mini.ts",
    "chars": 1547,
    "preview": "import {AfterViewInit, Component, VERSION} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {YellowPeppe"
  },
  {
    "path": "src/app/dashboard/dash-panel.html",
    "chars": 4014,
    "preview": "<small class=\"debug\">{{me}}</small>\n\n<div class=\"row\">\n    <br/>\n    <div class=\"col-sm-4 col-lg-2\">\n        <Infobox [v"
  },
  {
    "path": "src/app/dashboard/dash-panel.ts",
    "chars": 3992,
    "preview": "import {AfterViewInit, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {YellowPepperService}"
  },
  {
    "path": "src/app/dashboard/dashboard-navigation.ts",
    "chars": 1141,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimp"
  },
  {
    "path": "src/app/dashboard/server-avg.ts",
    "chars": 4472,
    "preview": "import {ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {Http} from \"@angular/http\";\nimport * as _ fro"
  },
  {
    "path": "src/app/dashboard/storage-used.ts",
    "chars": 6036,
    "preview": "import {ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {Http} from \"@angular/http\";\nimport * as _ fro"
  },
  {
    "path": "src/app/fasterq/fasterq-editor.html",
    "chars": 5452,
    "preview": "<small class=\"debug\">{{me}}</small>\n<div id=\"fasterQManagerContainer\">\n    <button (click)=\"_openRemoteStatus()\" i18n st"
  },
  {
    "path": "src/app/fasterq/fasterq-editor.ts",
    "chars": 14845,
    "preview": "import {AfterViewInit, ChangeDetectorRef, Component, ElementRef} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib"
  },
  {
    "path": "src/app/fasterq/fasterq-line-props.ts",
    "chars": 8270,
    "preview": "import {Component, ChangeDetectionStrategy, AfterViewInit} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimp"
  },
  {
    "path": "src/app/fasterq/fasterq-manager.ts",
    "chars": 6274,
    "preview": "import {Component, EventEmitter, Output} from \"@angular/core\";\nimport {Observable} from \"rxjs\";\nimport {Compbaser} from "
  },
  {
    "path": "src/app/fasterq/fasterq-navigation.ts",
    "chars": 1088,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {animate, s"
  },
  {
    "path": "src/app/fasterq/fasterq-terminal.ts",
    "chars": 23757,
    "preview": "import {AfterViewInit, Component, ElementRef, NgZone} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {"
  },
  {
    "path": "src/app/fasterq/fasterq.ts",
    "chars": 2850,
    "preview": "import {ChangeDetectionStrategy, Component, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport "
  },
  {
    "path": "src/app/fasterq/index.ts",
    "chars": 941,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/help/help-navigation.ts",
    "chars": 6544,
    "preview": "import {ChangeDetectionStrategy, Component, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport "
  },
  {
    "path": "src/app/help/index.ts",
    "chars": 746,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/index.ts",
    "chars": 63,
    "preview": "export * from './app-component';\nexport * from './app-module';\n"
  },
  {
    "path": "src/app/install/index.ts",
    "chars": 603,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/install/install-navigation.ts",
    "chars": 12578,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {BlockServi"
  },
  {
    "path": "src/app/live-preview/live-preview.ts",
    "chars": 4695,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef} from \"@angular/core\";\nimport {"
  },
  {
    "path": "src/app/locale-selector/local-selector.css",
    "chars": 13392,
    "preview": "ul {\n    width: 290px;\n    padding-left: 0px;\n    padding-top: 50px;\n}\n\ntr {\n    cursor: pointer;\n    opacity: 1;\n}\n\ntr:"
  },
  {
    "path": "src/app/locale-selector/local-selector.ts",
    "chars": 3477,
    "preview": "import {ChangeDetectionStrategy, EventEmitter, Component, Input, Output} from \"@angular/core\";\nimport {Compbaser} from \""
  },
  {
    "path": "src/app/location/location-map.html",
    "chars": 4385,
    "preview": "<small class=\"debug\">{{me}}</small>\n<button (click)=\"_close()\" type=\"button\" class=\"openPropsButton btn btn-default btn-"
  },
  {
    "path": "src/app/location/location-map.ts",
    "chars": 15102,
    "preview": "import {AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Inject, NgZone, Output, ViewChild} from \"@angular/cor"
  },
  {
    "path": "src/app/resources/index.ts",
    "chars": 948,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/resources/orders.ts",
    "chars": 1988,
    "preview": "import {Component, ChangeDetectionStrategy} from \"@angular/core\";\n\n@Component({\n    selector: 'orders',\n    styles: [`\n "
  },
  {
    "path": "src/app/resources/resource-props-manager.ts",
    "chars": 6932,
    "preview": "import {Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {Observable} from \"rxjs\";\nimport {Si"
  },
  {
    "path": "src/app/resources/resources-list.ts",
    "chars": 2804,
    "preview": "import {ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output} from \"@angular/core\";\nimport {Compb"
  },
  {
    "path": "src/app/resources/resources-navigation.ts",
    "chars": 1324,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {animate, state, style, transition, trigger} fr"
  },
  {
    "path": "src/app/resources/resources.ts",
    "chars": 6789,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {YellowPepperService} from \"../../services/yell"
  },
  {
    "path": "src/app/route-animation.ts",
    "chars": 476,
    "preview": "// import {trigger, state, animate, style, transition} from '@angular/core';\n//\n// export function routerTransition() {\n"
  },
  {
    "path": "src/app/scenes/index.ts",
    "chars": 1259,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/scenes/scene-creator.css",
    "chars": 2051,
    "preview": "\n.profileCard {\n    margin-bottom: 20px;\n}\n\n.profileCard {\n    border-radius: 2px;\n    box-shadow: 0 2px 5px 0 rgba(0, 0"
  },
  {
    "path": "src/app/scenes/scene-creator.ts",
    "chars": 45113,
    "preview": "import {Component, ChangeDetectionStrategy, AfterViewInit, Output, EventEmitter, ViewChild} from \"@angular/core\";\nimport"
  },
  {
    "path": "src/app/scenes/scene-editor.ts",
    "chars": 69959,
    "preview": "import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild} from \"@"
  },
  {
    "path": "src/app/scenes/scene-list.ts",
    "chars": 2736,
    "preview": "import {Component, ChangeDetectionStrategy, Input, Output, EventEmitter} from \"@angular/core\";\nimport {Compbaser} from \""
  },
  {
    "path": "src/app/scenes/scene-manager.ts",
    "chars": 6324,
    "preview": "import {Component, ElementRef, EventEmitter, Output, ViewChild} from \"@angular/core\";\nimport {Observable} from \"rxjs\";\ni"
  },
  {
    "path": "src/app/scenes/scene-props-manager.ts",
    "chars": 2629,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {Observable"
  },
  {
    "path": "src/app/scenes/scene-toolbar.ts",
    "chars": 5283,
    "preview": "import {Component, ChangeDetectionStrategy, AfterViewInit, Output, EventEmitter, Input, ChangeDetectorRef} from \"@angula"
  },
  {
    "path": "src/app/scenes/scenes-navigation.ts",
    "chars": 2015,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {BlockServi"
  },
  {
    "path": "src/app/scenes/scenes.ts",
    "chars": 3657,
    "preview": "import {ChangeDetectionStrategy, Component, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport "
  },
  {
    "path": "src/app/settings/index.ts",
    "chars": 752,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/settings/settings-navigation.ts",
    "chars": 881,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {animate, s"
  },
  {
    "path": "src/app/settings/twofactor.ts",
    "chars": 6647,
    "preview": "import {Component, ChangeDetectionStrategy, ElementRef, ViewChild, ChangeDetectorRef} from \"@angular/core\";\nimport {Form"
  },
  {
    "path": "src/app/stations/index.ts",
    "chars": 894,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/stations/stations-list.ts",
    "chars": 3737,
    "preview": "import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output} from \"@angular/c"
  },
  {
    "path": "src/app/stations/stations-navigation.ts",
    "chars": 1343,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {animate, s"
  },
  {
    "path": "src/app/stations/stations-props-manager.html",
    "chars": 8601,
    "preview": "<small class=\"debug\">{{me}}</small>\n<hr/>\n<form matchBodyHeight=\"150\" style=\"overflow-y: auto; overflow-x: hidden\" noval"
  },
  {
    "path": "src/app/stations/stations-props-manager.ts",
    "chars": 12103,
    "preview": "import {ChangeDetectorRef, Component, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport {Obser"
  },
  {
    "path": "src/app/stations/stations.ts",
    "chars": 7071,
    "preview": "import {ChangeDetectionStrategy, Component} from \"@angular/core\";\nimport {YellowPepperService} from \"../../services/yell"
  },
  {
    "path": "src/app/studiopro/index.ts",
    "chars": 709,
    "preview": "import {NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {RouterModule} from \"@angul"
  },
  {
    "path": "src/app/studiopro/pro-upgrade.ts",
    "chars": 7325,
    "preview": "import {Component} from \"@angular/core\";\nimport {FormBuilder, FormGroup, Validators} from \"@angular/forms\";\nimport {Comp"
  },
  {
    "path": "src/app/studiopro/pro-upgrades.html",
    "chars": 5479,
    "preview": "<form novalidate autocomplete=\"off\" [formGroup]=\"m_contGroup\">\n    <div class=\"row\">\n        <div class=\"inner userGener"
  },
  {
    "path": "src/app/studiopro/studiopro-navigation.ts",
    "chars": 15843,
    "preview": "import {ChangeDetectionStrategy, Component, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\nimport "
  },
  {
    "path": "src/app-routes.ts",
    "chars": 3086,
    "preview": "import {PreloadAllModules, RouterModule, Routes} from \"@angular/router\";\nimport {LoginPanel} from \"./comps/entry/LoginPa"
  },
  {
    "path": "src/assets/geojson.json",
    "chars": 169213,
    "preview": "{\n  \"type\": \"FeatureCollection\",\n  \"crs\": {\n    \"type\": \"name\",\n    \"properties\": {\n      \"name\": \"urn:ogc:def:crs:EPSG:"
  },
  {
    "path": "src/comps/blurforwarder/BlurForwarder.ts",
    "chars": 707,
    "preview": "import {Directive, ElementRef, Renderer} from \"@angular/core\";\n@Directive({\n    selector: 'input,select,textarea',\n    h"
  },
  {
    "path": "src/comps/connect-form/connect-form.ts",
    "chars": 2702,
    "preview": "import {Directive, EventEmitter, Input, Output} from '@angular/core';\nimport {FormGroupDirective} from '@angular/forms';"
  },
  {
    "path": "src/comps/contact-us/contact-us.ts",
    "chars": 2856,
    "preview": "import {Component} from \"@angular/core\";\nimport {FormControl, FormGroup, Validators} from \"@angular/forms\";\nimport {Yell"
  },
  {
    "path": "src/comps/disable-control/disable-control.ts",
    "chars": 400,
    "preview": "import {NgControl} from '@angular/forms';\nimport {Directive, Input} from \"@angular/core\";\n\n@Directive({\n    selector: '["
  },
  {
    "path": "src/comps/draggable-list/draggable-list.ts",
    "chars": 6776,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, TemplateRef} from \"@"
  },
  {
    "path": "src/comps/duration-input/duration-input.component.css",
    "chars": 539,
    "preview": "div {\n    display: inline-block;\n}\n\ninput {\n    width: 22px;\n    border: none;\n    outline: 0;\n}\n\n.btn.active.focus, .bt"
  },
  {
    "path": "src/comps/duration-input/duration-input.component.html",
    "chars": 1006,
    "preview": "<div class=\"wrap\">\n    <div (mouseleave)=\"notifyChanges()\">\n        <div style=\"float: left\">\n            <input type=\"t"
  },
  {
    "path": "src/comps/duration-input/duration-input.component.spec.ts",
    "chars": 812,
    "preview": "/* tslint:disable:no-unused-variable */\nimport { async, ComponentFixture, TestBed } from '@angular/core/testing';\nimport"
  },
  {
    "path": "src/comps/duration-input/duration-input.component.ts",
    "chars": 5072,
    "preview": "import {Component, EventEmitter, Input, OnInit, Output} from \"@angular/core\";\n\n@Component({\n    selector: 'app-duration-"
  },
  {
    "path": "src/comps/entry/AutoLogin.ts",
    "chars": 398,
    "preview": "import {Component, ChangeDetectionStrategy} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\n\n@Component({\n    "
  },
  {
    "path": "src/comps/entry/LoginPanel.ts",
    "chars": 16310,
    "preview": "import {Component, ElementRef, Injectable, ViewChild} from \"@angular/core\";\nimport {animate, keyframes, state, style, tr"
  },
  {
    "path": "src/comps/font-selector/font-selector.ts",
    "chars": 7168,
    "preview": "import {AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output} from \"@angular/core\""
  },
  {
    "path": "src/comps/hour-counter/hour-counter.ts",
    "chars": 5711,
    "preview": "import {Component, ChangeDetectionStrategy, AfterViewInit, ElementRef, ViewChild, Input} from \"@angular/core\";\nimport {C"
  },
  {
    "path": "src/comps/imgloader/ImgLoader.ts",
    "chars": 1465,
    "preview": "import {Component, ChangeDetectionStrategy, ChangeDetectorRef, Input} from '@angular/core';\nimport 'rxjs/add/observable/"
  },
  {
    "path": "src/comps/infobox/Infobox.ts",
    "chars": 1641,
    "preview": "import {Component, Input, Output, EventEmitter, ChangeDetectionStrategy, OnChanges, SimpleChange} from '@angular/core'\n\n"
  },
  {
    "path": "src/comps/lazy-image/lazy-image.ts",
    "chars": 4335,
    "preview": "import {Directive, ElementRef, EventEmitter, Input, NgZone, Output} from \"@angular/core\";\nimport {Observable} from \"rxjs"
  },
  {
    "path": "src/comps/limited-access/limited-access.ts",
    "chars": 3761,
    "preview": "import {Component, ChangeDetectionStrategy, AfterViewInit} from \"@angular/core\";\nimport {Compbaser} from \"ng-mslib\";\n\n@C"
  },
  {
    "path": "src/comps/loading/loading.ts",
    "chars": 1302,
    "preview": "import {Component, Input, ChangeDetectionStrategy} from '@angular/core'\n\n@Component({\n    selector: 'loading',\n    style"
  },
  {
    "path": "src/comps/logo/Logo.ts",
    "chars": 1777,
    "preview": "import {Component, ElementRef, ChangeDetectionStrategy} from '@angular/core';\nimport {Observable} from \"rxjs/Observable\""
  },
  {
    "path": "src/comps/logo/reseller-logo.ts",
    "chars": 2167,
    "preview": "import {Component, ChangeDetectionStrategy, AfterViewInit, ViewChild} from \"@angular/core\";\nimport {Compbaser} from \"ng-"
  },
  {
    "path": "src/comps/logout/Logout.ts",
    "chars": 3305,
    "preview": "import {Component} from \"@angular/core\";\nimport {LocalStorage} from \"../../services/LocalStorage\";\nimport {RedPepperServ"
  },
  {
    "path": "src/comps/match-body-height/match-body-height.ts",
    "chars": 1150,
    "preview": "import {Directive, ElementRef, HostListener, Input, AfterContentInit} from \"@angular/core\";\n\n@Directive({\n    selector: "
  },
  {
    "path": "src/comps/media-player/media-player.ts",
    "chars": 3203,
    "preview": "import {Component, Input} from \"@angular/core\";\nimport {VgAPI} from \"videogular2/core\";\n\n@Component({\n    selector: 'med"
  },
  {
    "path": "src/comps/ng-menu/ng-menu-item.ts",
    "chars": 769,
    "preview": "import {Component, ChangeDetectionStrategy, Input} from \"@angular/core\";\nimport {NgMenu} from \"./ng-menu\";\nimport {Compb"
  },
  {
    "path": "src/comps/ng-menu/ng-menu.ts",
    "chars": 3544,
    "preview": "import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from \"@angular/core\";\nimport {NgMenuItem} from \"./"
  },
  {
    "path": "src/comps/panel-split/panel-split-container.ts",
    "chars": 1028,
    "preview": "import {Component, ChangeDetectionStrategy, ElementRef, ContentChild, AfterViewInit} from \"@angular/core\";\nimport {Panel"
  },
  {
    "path": "src/comps/panel-split/panel-split-main.ts",
    "chars": 1493,
    "preview": "import {Component, ChangeDetectionStrategy, ElementRef} from \"@angular/core\";\n\n@Component({\n    changeDetection: ChangeD"
  },
  {
    "path": "src/comps/panel-split/panel-split-side.ts",
    "chars": 2512,
    "preview": "import {Component, ChangeDetectionStrategy, ElementRef, Output, EventEmitter} from \"@angular/core\";\n\n@Component({\n    ch"
  },
  {
    "path": "src/comps/screen-template/screen-template.ts",
    "chars": 13533,
    "preview": "/**\n The class generates the UI for a template (a.k.a Screen Division) that is\n a selectable widget including the drawin"
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGrid.css",
    "chars": 76,
    "preview": ".simpleTable {\n    background-color: white;\n}\n\n* {\n    font-size: 0.9em;\n}\n\n"
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGrid.ts",
    "chars": 820,
    "preview": "import {SimpleGridData} from \"./SimpleGridData\";\nimport {SimpleGridTable} from \"./SimpleGridTable\";\nimport {SimpleGridSo"
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGridData.ts",
    "chars": 2185,
    "preview": "import {Component, Input, ChangeDetectionStrategy, Output, EventEmitter} from '@angular/core'\nimport {StoreModel} from \""
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGridDataChecks.ts",
    "chars": 2133,
    "preview": "import {Component, Input, Output, EventEmitter, ViewChildren, QueryList, ChangeDetectorRef} from \"@angular/core\";\nimport"
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGridDataCurrency.ts",
    "chars": 921,
    "preview": "import {Component, Input, ChangeDetectionStrategy, Output, EventEmitter} from '@angular/core'\nimport {StoreModel} from \""
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGridDataDropdown.ts",
    "chars": 2642,
    "preview": "import {\n    Component, Input, ChangeDetectionStrategy, Output, EventEmitter, ViewChildren, QueryList, HostListener\n} fr"
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGridDataImage.ts",
    "chars": 1005,
    "preview": "import {Component, Input, ChangeDetectionStrategy} from '@angular/core'\nimport {StoreModel} from \"../../models/StoreMode"
  },
  {
    "path": "src/comps/simple-grid-module/SimpleGridDraggable.ts",
    "chars": 5633,
    "preview": "import {\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Inject,\n    Output,\n "
  }
]

// ... and 137 more files (download for full content)

About this extraction

This page contains the full source code of the born2net/studio-lite GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 337 files (4.8 MB), approximately 1.3M tokens, and a symbol index with 3133 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!