Skip to content

Instantly share code, notes, and snippets.

@nross83
Last active April 5, 2017 14:46
Show Gist options
  • Save nross83/ab14e96ffc016ffef58ab0e59c248284 to your computer and use it in GitHub Desktop.
Save nross83/ab14e96ffc016ffef58ab0e59c248284 to your computer and use it in GitHub Desktop.
Settings for ST3
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = [email protected]:nross/sublime-config.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Unnamed repository; edit this file 'description' to name the repository.
5742c89a0825062f27a8f5d7d21439600abf7258 branch 'master' of git.corp.adobe.com:nross/sublime-config
ref: refs/heads/master
#!/bin/sh
#
# An example hook script to check the commit log message taken by
# applypatch from an e-mail message.
#
# The hook should exit with non-zero status after issuing an
# appropriate message if it wants to stop the commit. The hook is
# allowed to edit the commit message file.
#
# To enable this hook, rename this file to "applypatch-msg".
. git-sh-setup
test -x "$GIT_DIR/hooks/commit-msg" &&
exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
:
#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file
# that has the commit message. The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit. The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to "commit-msg".
# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
# This example catches duplicate Signed-off-by lines.
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
}
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
exec git update-server-info
#!/bin/sh
#
# An example hook script to verify what is about to be committed
# by applypatch from an e-mail message.
#
# The hook should exit with non-zero status after issuing an
# appropriate message if it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-applypatch".
. git-sh-setup
test -x "$GIT_DIR/hooks/pre-commit" &&
exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
:
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".
if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# If you want to allow non-ascii filenames set this variable to true.
allownonascii=$(git config hooks.allownonascii)
# Redirect output to stderr.
exec 1>&2
# Cross platform projects tend to avoid non-ascii filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
echo "Error: Attempt to add a non-ascii file name."
echo
echo "This can cause problems if you want to work"
echo "with people on other platforms."
echo
echo "To be portable it is advisable to rename the file ..."
echo
echo "If you know what you are doing you can disable this"
echo "check using:"
echo
echo " git config hooks.allownonascii true"
echo
exit 1
fi
# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --
#!/bin/sh
#
# Copyright (c) 2006, 2008 Junio C Hamano
#
# The "pre-rebase" hook is run just before "git rebase" starts doing
# its job, and can prevent the command from running by exiting with
# non-zero status.
#
# The hook is called with the following parameters:
#
# $1 -- the upstream the series was forked from.
# $2 -- the branch being rebased (or empty when rebasing the current branch).
#
# This sample shows how to prevent topic branches that are already
# merged to 'next' branch from getting rebased, because allowing it
# would result in rebasing already published history.
publish=next
basebranch="$1"
if test "$#" = 2
then
topic="refs/heads/$2"
else
topic=`git symbolic-ref HEAD` ||
exit 0 ;# we do not interrupt rebasing detached HEAD
fi
case "$topic" in
refs/heads/??/*)
;;
*)
exit 0 ;# we do not interrupt others.
;;
esac
# Now we are dealing with a topic branch being rebased
# on top of master. Is it OK to rebase it?
# Does the topic really exist?
git show-ref -q "$topic" || {
echo >&2 "No such branch $topic"
exit 1
}
# Is topic fully merged to master?
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
if test -z "$not_in_master"
then
echo >&2 "$topic is fully merged to master; better remove it."
exit 1 ;# we could allow it, but there is no point.
fi
# Is topic ever merged to next? If so you should not be rebasing it.
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
only_next_2=`git rev-list ^master ${publish} | sort`
if test "$only_next_1" = "$only_next_2"
then
not_in_topic=`git rev-list "^$topic" master`
if test -z "$not_in_topic"
then
echo >&2 "$topic is already up-to-date with master"
exit 1 ;# we could allow it, but there is no point.
else
exit 0
fi
else
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
/usr/bin/perl -e '
my $topic = $ARGV[0];
my $msg = "* $topic has commits already merged to public branch:\n";
my (%not_in_next) = map {
/^([0-9a-f]+) /;
($1 => 1);
} split(/\n/, $ARGV[1]);
for my $elem (map {
/^([0-9a-f]+) (.*)$/;
[$1 => $2];
} split(/\n/, $ARGV[2])) {
if (!exists $not_in_next{$elem->[0]}) {
if ($msg) {
print STDERR $msg;
undef $msg;
}
print STDERR " $elem->[1]\n";
}
}
' "$topic" "$not_in_next" "$not_in_master"
exit 1
fi
exit 0
################################################################
This sample hook safeguards topic branches that have been
published from being rewound.
The workflow assumed here is:
* Once a topic branch forks from "master", "master" is never
merged into it again (either directly or indirectly).
* Once a topic branch is fully cooked and merged into "master",
it is deleted. If you need to build on top of it to correct
earlier mistakes, a new topic branch is created by forking at
the tip of the "master". This is not strictly necessary, but
it makes it easier to keep your history simple.
* Whenever you need to test or publish your changes to topic
branches, merge them into "next" branch.
The script, being an example, hardcodes the publish branch name
to be "next", but it is trivial to make it configurable via
$GIT_DIR/config mechanism.
With this workflow, you would want to know:
(1) ... if a topic branch has ever been merged to "next". Young
topic branches can have stupid mistakes you would rather
clean up before publishing, and things that have not been
merged into other branches can be easily rebased without
affecting other people. But once it is published, you would
not want to rewind it.
(2) ... if a topic branch has been fully merged to "master".
Then you can delete it. More importantly, you should not
build on top of it -- other people may already want to
change things related to the topic as patches against your
"master", so if you need further changes, it is better to
fork the topic (perhaps with the same name) afresh from the
tip of "master".
Let's look at this example:
o---o---o---o---o---o---o---o---o---o "next"
/ / / /
/ a---a---b A / /
/ / / /
/ / c---c---c---c B /
/ / / \ /
/ / / b---b C \ /
/ / / / \ /
---o---o---o---o---o---o---o---o---o---o---o "master"
A, B and C are topic branches.
* A has one fix since it was merged up to "next".
* B has finished. It has been fully merged up to "master" and "next",
and is ready to be deleted.
* C has not merged to "next" at all.
We would want to allow C to be rebased, refuse A, and encourage
B to be deleted.
To compute (1):
git rev-list ^master ^topic next
git rev-list ^master next
if these match, topic has not merged in next at all.
To compute (2):
git rev-list master..topic
if this is empty, it is fully merged to "master".
#!/bin/sh
#
# An example hook script to prepare the commit log message.
# Called by "git commit" with the name of the file that has the
# commit message, followed by the description of the commit
# message's source. The hook's purpose is to edit the commit
# message file. If the hook fails with a non-zero status,
# the commit is aborted.
#
# To enable this hook, rename this file to "prepare-commit-msg".
# This hook includes three examples. The first comments out the
# "Conflicts:" part of a merge commit.
#
# The second includes the output of "git diff --name-status -r"
# into the message, just before the "git status" output. It is
# commented because it doesn't cope with --amend or with squashed
# commits.
#
# The third example adds a Signed-off-by line to the message, that can
# still be edited. This is rarely a good idea.
case "$2,$3" in
merge,)
/usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
# ,|template,)
# /usr/bin/perl -i.bak -pe '
# print "\n" . `git diff --cached --name-status -r`
# if /^#/ && $first++ == 0' "$1" ;;
*) ;;
esac
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
#!/bin/sh
#
# An example hook script to blocks unannotated tags from entering.
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
#
# To enable this hook, rename this file to "update".
#
# Config
# ------
# hooks.allowunannotated
# This boolean sets whether unannotated tags will be allowed into the
# repository. By default they won't be.
# hooks.allowdeletetag
# This boolean sets whether deleting tags will be allowed in the
# repository. By default they won't be.
# hooks.allowmodifytag
# This boolean sets whether a tag may be modified after creation. By default
# it won't be.
# hooks.allowdeletebranch
# This boolean sets whether deleting branches will be allowed in the
# repository. By default they won't be.
# hooks.denycreatebranch
# This boolean sets whether remotely creating branches will be denied
# in the repository. By default this is allowed.
#
# --- Command line
refname="$1"
oldrev="$2"
newrev="$3"
# --- Safety check
if [ -z "$GIT_DIR" ]; then
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
fi
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
# --- Config
allowunannotated=$(git config --bool hooks.allowunannotated)
allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
denycreatebranch=$(git config --bool hooks.denycreatebranch)
allowdeletetag=$(git config --bool hooks.allowdeletetag)
allowmodifytag=$(git config --bool hooks.allowmodifytag)
# check for no description
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
case "$projectdesc" in
"Unnamed repository"* | "")
echo "*** Project description file hasn't been set" >&2
exit 1
;;
esac
# --- Check types
# if $newrev is 0000...0000, it's a commit to delete a ref.
zero="0000000000000000000000000000000000000000"
if [ "$newrev" = "$zero" ]; then
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
short_refname=${refname##refs/tags/}
if [ "$allowunannotated" != "true" ]; then
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
exit 1
fi
;;
refs/tags/*,delete)
# delete tag
if [ "$allowdeletetag" != "true" ]; then
echo "*** Deleting a tag is not allowed in this repository" >&2
exit 1
fi
;;
refs/tags/*,tag)
# annotated tag
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
then
echo "*** Tag '$refname' already exists." >&2
echo "*** Modifying a tag is not allowed in this repository." >&2
exit 1
fi
;;
refs/heads/*,commit)
# branch
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
echo "*** Creating a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/heads/*,delete)
# delete branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a branch is not allowed in this repository" >&2
exit 1
fi
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
if [ "$allowdeletebranch" != "true" ]; then
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
exit 1
fi
;;
*)
# Anything else (is there anything else?)
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
esac
# --- Finished
exit 0
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.DS_Store
0000000000000000000000000000000000000000 261f43bff787d5e361be50537fb1a412871609c5 Nate Ross <[email protected]> 1351711832 -0600 clone: from [email protected]:nross/sublime-config.git
261f43bff787d5e361be50537fb1a412871609c5 f31445b5bca9fda98f28918772a5fceb6c97cec2 Nate Ross <[email protected]> 1352221026 -0700 commit: Updated dirty tabs for the Pheonix theme.
f31445b5bca9fda98f28918772a5fceb6c97cec2 708d23c6b50086b553de88a4029ae34e6847acf8 Nate Ross <[email protected]> 1352221036 -0700 pull: Merge made by the 'recursive' strategy.
708d23c6b50086b553de88a4029ae34e6847acf8 fb02a4bb58444ffbe777b37976fea6e2e24390fb Nate Ross <[email protected]> 1427236502 -0600 commit: More goodness
fb02a4bb58444ffbe777b37976fea6e2e24390fb 63d9aeaeeaad7393df073a32bf6fe563b2292b3c Nate Ross <[email protected]> 1427236568 -0600 commit (merge): Merging
0000000000000000000000000000000000000000 261f43bff787d5e361be50537fb1a412871609c5 Nate Ross <[email protected]> 1351711832 -0600 clone: from [email protected]:nross/sublime-config.git
261f43bff787d5e361be50537fb1a412871609c5 f31445b5bca9fda98f28918772a5fceb6c97cec2 Nate Ross <[email protected]> 1352221026 -0700 commit: Updated dirty tabs for the Pheonix theme.
f31445b5bca9fda98f28918772a5fceb6c97cec2 708d23c6b50086b553de88a4029ae34e6847acf8 Nate Ross <[email protected]> 1352221036 -0700 pull: Merge made by the 'recursive' strategy.
708d23c6b50086b553de88a4029ae34e6847acf8 fb02a4bb58444ffbe777b37976fea6e2e24390fb Nate Ross <[email protected]> 1427236502 -0600 commit: More goodness
fb02a4bb58444ffbe777b37976fea6e2e24390fb 63d9aeaeeaad7393df073a32bf6fe563b2292b3c Nate Ross <[email protected]> 1427236568 -0600 commit (merge): Merging
0000000000000000000000000000000000000000 261f43bff787d5e361be50537fb1a412871609c5 Nate Ross <[email protected]> 1351711832 -0600 clone: from [email protected]:nross/sublime-config.git
261f43bff787d5e361be50537fb1a412871609c5 16394770d6541f34868a8f88fe6444316ca7186b Nate Ross <[email protected]> 1352221036 -0700 pull: fast-forward
16394770d6541f34868a8f88fe6444316ca7186b 708d23c6b50086b553de88a4029ae34e6847acf8 Nate Ross <[email protected]> 1352221052 -0700 update by push
708d23c6b50086b553de88a4029ae34e6847acf8 5742c89a0825062f27a8f5d7d21439600abf7258 Nate Ross <[email protected]> 1427236512 -0600 pull: fast-forward
5742c89a0825062f27a8f5d7d21439600abf7258 63d9aeaeeaad7393df073a32bf6fe563b2292b3c Nate Ross <[email protected]> 1427236572 -0600 update by push
fb02a4bb58444ffbe777b37976fea6e2e24390fb
# pack-refs with: peeled
261f43bff787d5e361be50537fb1a412871609c5 refs/remotes/origin/master
63d9aeaeeaad7393df073a32bf6fe563b2292b3c
ref: refs/remotes/origin/master
63d9aeaeeaad7393df073a32bf6fe563b2292b3c

sublime-config

My personal Sublime Text 2 themes, configuration, and snippets. Feel free to take stuff or fork if you wish.

These files belong in ~/Library/Application Support/Sublime Text 2/Packages/User. To accept all of them wholesale, navigate to the User directory and empty all the files out. Then run the following from the terminal:

git clone [email protected]:nross/sublime-config.git ./

The trailing ./ will install into the current directory (but only if it is empty).

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Chris Kempson (http://chriskempson.com)</string>
<key>name</key>
<string>Base16 Eighties Dark</string>
<key>semanticClass</key>
<string>base16.eighties.dark</string>
<key>colorSpaceName</key>
<string>sRGB</string>
<key>gutterSettings</key>
<dict>
<key>background</key>
<string>#393939</string>
<key>divider</key>
<string>#393939</string>
<key>foreground</key>
<string>#747369</string>
<key>selectionBackground</key>
<string>#515151</string>
<key>selectionForeground</key>
<string>#a09f93</string>
</dict>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#2d2d2d</string>
<key>caret</key>
<string>#d3d0c8</string>
<key>foreground</key>
<string>#d3d0c8</string>
<key>invisibles</key>
<string>#747369</string>
<key>lineHighlight</key>
<string>#393939</string>
<key>selection</key>
<string>#515151</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Text</string>
<key>scope</key>
<string>variable.parameter.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments</string>
<key>scope</key>
<string>comment, punctuation.definition.comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#747369</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Delimiters</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operators</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keywords</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variables</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Functions</string>
<key>scope</key>
<string>entity.name.function, meta.require, support.function.any-method</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Classes</string>
<key>scope</key>
<string>support.class, entity.name.class, entity.name.type.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ffcc66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Classes</string>
<key>scope</key>
<string>meta.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2f0ec</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Methods</string>
<key>scope</key>
<string>keyword.other.special-method</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings, Inherited Class</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99cc99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Integers</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Floats</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Boolean</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constants</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tags</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attributes</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attribute IDs</string>
<key>scope</key>
<string>entity.other.attribute-name.id, punctuation.definition.entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Selector</string>
<key>scope</key>
<string>meta.selector</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Values</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Headings</string>
<key>scope</key>
<string>markup.heading punctuation.definition.heading, entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Units</string>
<key>scope</key>
<string>keyword.other.unit</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bold</string>
<key>scope</key>
<string>markup.bold, punctuation.definition.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#ffcc66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Italic</string>
<key>scope</key>
<string>markup.italic, punctuation.definition.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Code</string>
<key>scope</key>
<string>markup.raw.inline</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99cc99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Link Text</string>
<key>scope</key>
<string>string.other.link</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Link Url</string>
<key>scope</key>
<string>meta.link</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lists</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Quotes</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#515151</string>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inserted</string>
<key>scope</key>
<string>markup.inserted, markup.inserted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99cc99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deleted</string>
<key>scope</key>
<string>markup.deleted, markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Changed</string>
<key>scope</key>
<string>markup.changed, markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ignored</string>
<key>scope</key>
<string>markup.ignored, markup.ignored.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#515151</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Untracked</string>
<key>scope</key>
<string>markup.untracked, markup.untracked.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#515151</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Colors</string>
<key>scope</key>
<string>constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regular Expressions</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Escape Characters</string>
<key>scope</key>
<string>constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded</string>
<key>scope</key>
<string>punctuation.section.embedded, variable.interpolation</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d27b53</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#f2777a</string>
<key>foreground</key>
<string>#2d2d2d</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter deleted</string>
<key>scope</key>
<string>markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter inserted</string>
<key>scope</key>
<string>markup.inserted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter changed</string>
<key>scope</key>
<string>markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#967EFB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter ignored</string>
<key>scope</key>
<string>markup.ignored.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#565656</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter untracked</string>
<key>scope</key>
<string>markup.untracked.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#565656</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict></array>
<key>uuid</key>
<string>36594751-36ac-443a-9f2f-111b815085cf</string>
</dict>
</plist>
{
// Outline? (solid|outline|underline|none)
"quote_style" : "none",
"curly_style" : "underline",
"round_style" : "underline",
"square_style": "underline",
"angle_style" : "underline",
"tag_style" : "underline"
}
<snippet>
<content><![CDATA[
componentWillUpdate(nextProps, nextState) {
${0}
}
]]></content>
<tabTrigger>componentWillUpdate</tabTrigger>
<scope>source.js</scope>
<description>React: componentWillUpdate</description>
</snippet>
[
{
"button": "button1",
"count": 1
"modifiers": ["alt"],
"press_command": "drag_select",
"command": "goto_definition"
}
]
[
{ "keys": ["super+d"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"} },
{ "keys": ["super+shift+s"], "command": "save_all" },
{ "keys": ["super+alt+s"], "command": "prompt_save_as" },
{ "keys": ["super+["], "command": "next_view_in_stack" },
{ "keys": ["super+]"], "command": "prev_view_in_stack" },
{ "keys": ["alt+up"], "command": "swap_line_up" },
{ "keys": ["alt+down"], "command": "swap_line_down" },
{ "keys": ["super+alt+down"], "command": "duplicate_line" },
{ "keys": ["super+l"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} },
{ "keys": ["ctrl+shift+f"], "command": "js_format"},
{ "keys": ["ctrl+shift+c"], "command": "color_pick"},
{ "keys": ["super+b"], "command": "gulp" },
{ "keys": ["super+alt+b"], "command": "gulp_kill" },
]
[
{
"button": "button1",
"count": 1,
"modifiers": ["super", "shift"],
"press_command": "drag_select",
"command": "goto_definition"
}
]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Espresso Soda</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>caret</key>
<string>#000000</string>
<key>foreground</key>
<string>#000000</string>
<key>invisibles</key>
<string>#E0E0E0</string>
<key>lineHighlight</key>
<string>#A5A5A526</string>
<key>selection</key>
<string>#C2E8FF</string>
<key>selectionBorder</key>
<string>#AACBDF</string>
<key>inactiveSelection</key>
<string>#EDEDED</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments</string>
<key>scope</key>
<string>comment, comment punctuation</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#ADADAD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments: Preprocessor</string>
<key>scope</key>
<string>comment.block.preprocessor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#ADADAD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments: Documentation</string>
<key>scope</key>
<string>comment.documentation, comment.block.documentation</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFDF7</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BC670F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid - Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#EFCFCF</string>
<key>fontStyle</key>
<string>italic underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid - Illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F93232</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F9F2CE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operators</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#626FC9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keywords</string>
<key>scope</key>
<string>keyword, storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#61862F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Types</string>
<key>scope</key>
<string>storage.type, support.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#6700B9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Language Constants</string>
<key>scope</key>
<string>constant.language, support.constant, variable.language</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F3F2FF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7653C1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variables</string>
<key>scope</key>
<string>variable, support.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4C8FC7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variables: Punctuation</string>
<key>scope</key>
<string>variable punctuation</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4C8FC7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Functions</string>
<key>scope</key>
<string>entity.name.function, support.function, entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#61862F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Classes</string>
<key>scope</key>
<string>entity.name.type, entity.other.inherited-class, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3A1D72</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Exceptions</string>
<key>scope</key>
<string>entity.name.exception</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F93232</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Sections</string>
<key>scope</key>
<string>entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Numbers</string>
<key>scope</key>
<string>constant.numeric, constant</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F3F2FF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7653C1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings</string>
<key>scope</key>
<string>constant.character, string</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FBE9AD1A</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#BC670F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings: Punctuation</string>
<key>scope</key>
<string>string punctuation</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#E69A4C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings: Escape Sequences</string>
<key>scope</key>
<string>constant.character.escape</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FBE9ADCC</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings: Regular Expressions</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#699D36</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings: Symbols</string>
<key>scope</key>
<string>constant.other.symbol</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#E8FFD5</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source</string>
<key>scope</key>
<string>string source, text source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#434343</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>-----------------------------------</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Doctype Declaration</string>
<key>scope</key>
<string>meta.tag.sgml.doctype</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#7F7F7F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Tags</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F4FAFF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#2F6F9F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Attribute Punctuation</string>
<key>scope</key>
<string>meta.tag string punctuation</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#5FAFEF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Tag Punctuation</string>
<key>scope</key>
<string>punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4F9FCF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Entities</string>
<key>scope</key>
<string>constant.character.entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Attribute Names</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#4F9FCF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML: Attribute Values</string>
<key>scope</key>
<string>meta.tag string.quoted, meta.tag string.quoted constant.character.entity</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#D44950</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>-----------------------------------</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Selectors</string>
<key>scope</key>
<string>meta.selector, meta.selector entity, meta.selector entity punctuation, entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#3A77BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Property Names</string>
<key>scope</key>
<string>meta.property-name, support.type.property-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D4430D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: Property Values</string>
<key>scope</key>
<string>meta.property-value constant.numeric, meta.property-value constant, meta.property-value keyword</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFFF</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#43A202</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>-----------------------------------</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Markup: Changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFDD</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Deletion</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFDDDD</string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Emphasis</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Error</string>
<key>scope</key>
<string>markup.error</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F93232</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F9F2CE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Insertion</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DDFFDD</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#000000</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Output</string>
<key>scope</key>
<string>markup.output, markup.raw</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7F7F7F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Prompt</string>
<key>scope</key>
<string>markup.prompt</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#555555</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Strong</string>
<key>scope</key>
<string>markup.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Traceback</string>
<key>scope</key>
<string>markup.traceback</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F93232</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Underline</string>
<key>scope</key>
<string>markup.underline</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>-----------------------------------</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>Extra: Diff Range</string>
<key>scope</key>
<string>meta.diff.range, meta.diff.index, meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#EAF2F5</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#434343</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Extra: Diff From</string>
<key>scope</key>
<string>meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFDDDD</string>
<key>foreground</key>
<string>#434343</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Extra: Diff To</string>
<key>scope</key>
<string>meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DDFFDD</string>
<key>foreground</key>
<string>#434343</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>BF4E1964-0DB9-4E88-8142-E8F52D7EDEEC</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>PlasticCodeWrap</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#26292C</string>
<key>caret</key>
<string>#BBBCBD</string>
<key>foreground</key>
<string>#F8F8F8</string>
<key>invisibles</key>
<string>#7a8288</string>
<key>lineHighlight</key>
<string>#202325</string>
<key>selection</key>
<string>#515559</string>
<key>findHighlight</key>
<string>#ffe792</string>
<key>inactiveSelection</key>
<string>#3C3F42</string>
<key>gutterForeground</key>
<string>#73797b75</string>
<key>guide</key>
<string>#73797b30</string>
<key>activeGuide</key>
<string>#73797b60</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#798188</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Python Docstring</string>
<key>scope</key>
<string>string.quoted.double.block.python</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#798188</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b8d977</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#72AACA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#fa9a4b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F6F080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#C4E2F2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#72AACA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FB9A4B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#D8290DBF</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source</string>
<key>scope</key>
<string>text source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B0B3BA14</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source (Bright)</string>
<key>scope</key>
<string>text.html.ruby source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B1B3BA21</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity inherited-class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#B7D877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String embedded-source</string>
<key>scope</key>
<string>string.quoted source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#B7D877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B7D877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFB454</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EDEF7D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#FFB454</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#B7D877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Line</string>
<key>scope</key>
<string>other.preprocessor.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8996A8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Directive</string>
<key>scope</key>
<string>other.preprocessor.c entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AFC4DB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta.tag.A</string>
<key>scope</key>
<string>declaration.tag, declaration.tag entity, meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B7D877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5f080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css#id</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFB454</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b6d877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-name:</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#72AACA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-value;</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F6F080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F6AA11</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EDF080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EB939A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0E2231</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#D03620</string>
<key>foreground</key>
<string>#EB939A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#C4B14A</string>
<key>foreground</key>
<string>#72AACA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#41A83E</string>
<key>foreground</key>
<string>#B7D877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter deleted</string>
<key>scope</key>
<string>markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EB939A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter changed</string>
<key>scope</key>
<string>markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#72AACA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter inserted</string>
<key>scope</key>
<string>markup.inserted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B7D877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter ignored</string>
<key>scope</key>
<string>markup.ignored.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#798188</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter untracked</string>
<key>scope</key>
<string>markup.untracked.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#798188</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Annotations</string>
<key>scope</key>
<string>sublimelinter.outline.notes</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFFAA50</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Outline</string>
<key>scope</key>
<string>sublimelinter.outline.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF4A5250</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Underline</string>
<key>scope</key>
<string>sublimelinter.underline.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF000050</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning Outline</string>
<key>scope</key>
<string>sublimelinter.outline.warning</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DF940050</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning Underline</string>
<key>scope</key>
<string>sublimelinter.underline.warning</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF000050</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Violation Outline</string>
<key>scope</key>
<string>sublimelinter.outline.violation</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#ffffff33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Violation Underline</string>
<key>scope</key>
<string>sublimelinter.underline.violation</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF000050</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html id</string>
<key>scope</key>
<string>entity.other.attribute-name.id.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFB454</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html class</string>
<key>scope</key>
<string>entity.other.attribute-name.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EDF080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html punctuations tags</string>
<key>scope</key>
<string>punctuation.definition.tag.end, punctuation.definition.tag.begin, punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#65A4A4</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS @import</string>
<key>scope</key>
<string>keyword.control.at-rule.import.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f7f09d</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>LESS variables</string>
<key>scope</key>
<string>variable.other.less</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b6d877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>LESS variables</string>
<key>scope</key>
<string>entity.other.less.mixin</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b6d877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>LESS units</string>
<key>scope</key>
<string>source.css.less keyword.unit.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EB939A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Angular</string>
<key>scope</key>
<string>entity.other.attribute-name.angular.html, source.angular.embedded.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF3A83</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML Entities</string>
<key>scope</key>
<string>constant.character.entity.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F1E94B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>coffee instance var</string>
<key>scope</key>
<string>variable.other.readwrite.instance.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b6d877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>coffee brace</string>
<key>scope</key>
<string>meta.brace.round.coffee,meta.brace.square.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F6F080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>coffee embeded</string>
<key>scope</key>
<string>punctuation.section.embedded.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b6d877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Coffee vars</string>
<key>scope</key>
<string>variable.assignment.coffee variable.assignment.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Coffee dots</string>
<key>scope</key>
<string>meta.delimiter.method.period.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFAA00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Coffee curleys</string>
<key>scope</key>
<string>meta.brace.curly.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b6d877</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Doctype/XML Processing</string>
<key>scope</key>
<string>meta.tag.sgml.doctype.xml, declaration.sgml.html declaration.doctype, declaration.sgml.html declaration.doctype entity, declaration.sgml.html declaration.doctype string, declaration.xml-processing, declaration.xml-processing entity, declaration.xml-processing string, doctype</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#73817D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bracket Default</string>
<key>scope</key>
<string>brackethighlighter.default</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#72AACA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level-1</string>
<key>scope</key>
<string>level-1</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#452323</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level0</string>
<key>scope</key>
<string>level0</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#234523</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level1</string>
<key>scope</key>
<string>level1</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#232345</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level2</string>
<key>scope</key>
<string>level2</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#454523</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level3</string>
<key>scope</key>
<string>level3</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#452345</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level4</string>
<key>scope</key>
<string>level4</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#234545</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level5</string>
<key>scope</key>
<string>level5</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#634141</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level6</string>
<key>scope</key>
<string>level6</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#416341</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level7</string>
<key>scope</key>
<string>level7</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#414163</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level8</string>
<key>scope</key>
<string>level8</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#636341</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level9</string>
<key>scope</key>
<string>level9</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#634163</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Level10</string>
<key>scope</key>
<string>level10</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#416363</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict></array>
<key>uuid</key>
<string>13E579BF-40AB-42E2-9EAB-0AD3EDD88532</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Flatland - Monokai</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#26292C</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#202325</string>
<key>selection</key>
<string>#49483E</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>selectionBorder</key>
<string>#222218</string>
<key>activeGuide</key>
<string>#9D550FB0</string>
<key>bracketsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketsOptions</key>
<string>underline</string>
<key>bracketContentsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketContentsOptions</key>
<string>underline</string>
<key>tagsOptions</key>
<string>stippled_underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter deleted</string>
<key>scope</key>
<string>markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter inserted</string>
<key>scope</key>
<string>markup.inserted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter changed</string>
<key>scope</key>
<string>markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter ignored</string>
<key>scope</key>
<string>markup.ignored.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter untracked</string>
<key>scope</key>
<string>markup.untracked.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>constant.numeric.line-number.find-in-files - match</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FFA0</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>entity.name.filename.find-in-files</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict></array>
<key>uuid</key>
<string>D8D5E82E-3D5B-46B5-B38E-8C841C21347D</string>
</dict>
</plist>
{
"non_blocking": true,
"show_markers_on_untracked_file": false
}
{
"extensions":
[
"jsx",
"js"
]
}
{
"keep_function_indentation": false,
"indent_with_tabs": false
}
{
"extensions":
[
".eslintrc"
]
}
{
// "color_scheme": "Packages/MarkdownEditing/MarkdownEditor.tmTheme",
"color_scheme": "Packages/MarkdownEditing/MarkdownEditor-Dark.tmTheme"
// "color_scheme": "Packages/MarkdownEditing/MarkdownEditor-Yellow.tmTheme",
}
{
// "color_scheme": "Packages/MarkdownEditing/MarkdownEditor.tmTheme",
"color_scheme": "Packages/MarkdownEditing/MarkdownEditor-Dark.tmTheme",
// "color_scheme": "Packages/MarkdownEditing/MarkdownEditor-Yellow.tmTheme",
"word_wrap": true
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#272822</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#3E3D32</string>
<key>selection</key>
<string>#49483E</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>selectionBorder</key>
<string>#222218</string>
<key>activeGuide</key>
<string>#9D550FB0</string>
<key>bracketsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketsOptions</key>
<string>underline</string>
<key>bracketContentsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketContentsOptions</key>
<string>underline</string>
<key>tagsOptions</key>
<string>stippled_underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>constant.numeric.line-number.find-in-files - match</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FFA0</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>entity.name.filename.find-in-files</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict></array>
<key>uuid</key>
<string>D8D5E82E-3D5B-46B5-B38E-8C841C21347D</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai Soda</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#222222</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#333333</string>
<key>selection</key>
<string>#444444</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>selectionBorder</key>
<string>#1c1c1c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict></array>
<key>uuid</key>
<string>5EAF4173-5DDE-4D64-A1E8-C1671C7EE339</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai Soda</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#222222</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#333333</string>
<key>selection</key>
<string>#444444</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>selectionBorder</key>
<string>#1c1c1c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>5EAF4173-5DDE-4D64-A1E8-C1671C7EE339</string>
</dict>
</plist>
{
//"color_scheme": "Packages/MarkdownEditing/MarkdownEditor.tmTheme",
"color_scheme": "Packages/MarkdownEditing/MarkdownEditor-Dark.tmTheme"
// "color_scheme": "Packages/MarkdownEditing/MarkdownEditor-Yellow.tmTheme",
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai Soda</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#121212</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#333333</string>
<key>selection</key>
<string>#444444</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>selectionBorder</key>
<string>#1c1c1c</string>
<key>gutterForeground</key>
<string>#4d6e91</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lang Variable</string>
<key>scope</key>
<string>variable.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ff53ff</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DA2000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EDBA00</string>
</dict>
</dict></array>
<key>uuid</key>
<string>5EAF4173-5DDE-4D64-A1E8-C1671C7EE339</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai Soda</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#121212</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#333333</string>
<key>selection</key>
<string>#444444</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>selectionBorder</key>
<string>#1c1c1c</string>
<key>gutterForeground</key>
<string>#4d6e91</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>5EAF4173-5DDE-4D64-A1E8-C1671C7EE339</string>
</dict>
</plist>
{
"auto_upgrade_last_run": null,
"bootstrapped": true,
"in_process_packages":
[
],
"installed_packages":
[
"Autoprefixer",
"Babel",
"BracketHighlighter",
"Browser Refresh",
"Can I Use",
"ColorPicker",
"DocBlockr",
"EditorConfig",
"Git",
"GitGutter",
"Gradle_Language",
"Gulp",
"JsFormat",
"Markdown Preview",
"MarkdownEditing",
"Oceanic Next Color Scheme",
"Package Control",
"Predawn",
"ReactJS",
"Sass",
"SFTP",
"SideBarEnhancements",
"SublimeFixMacPath",
"SublimeLinter",
"SublimeLinter-annotations",
"SublimeLinter-csslint",
"SublimeLinter-jshint",
"Sync Settings",
"Theme - Afterglow",
"Theme - Flatland",
"Theme - Phoenix",
"Theme - Soda",
"Theme - Spacegray"
],
"repositories":
[
"https://github.com/int3h/SublimeFixMacPath"
]
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>http://chriskempson.com</string>
<key>name</key>
<string>Tomorrow Night - Eighties</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#2D2D2D</string>
<key>caret</key>
<string>#CCCCCC</string>
<key>foreground</key>
<string>#CCCCCC</string>
<key>invisibles</key>
<string>#6A6A6A</string>
<key>lineHighlight</key>
<string>#292929</string>
<key>selection</key>
<string>#191919</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#555</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Foreground</string>
<key>scope</key>
<string>keyword.operator.class, constant.other, source.php.embedded.line</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#CCCCCC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable, String Link, Tag Name</string>
<key>scope</key>
<string>variable, support.other.variable, string.other.link, entity.name.tag, entity.other.attribute-name, meta.tag, declaration.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#40bdff</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#DDD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class, markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#5697b8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AAA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#EFEFEF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage, storage.type, entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#64b2db</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F2777A</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#d23535</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#99CCCC</string>
<key>foreground</key>
<string>#CDCDCD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#CC99CC</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#CDCDCD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff foreground</string>
<key>scope</key>
<string>markup.inserted.diff, markup.deleted.diff, meta.diff.header.to-file, meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff insertion</string>
<key>scope</key>
<string>markup.inserted.diff, meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#718c00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff deletion</string>
<key>scope</key>
<string>markup.deleted.diff, meta.diff.header.from-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#c82829</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff header</string>
<key>scope</key>
<string>meta.diff.header.from-file, meta.diff.header.to-file</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
<key>background</key>
<string>#4271ae</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff range</string>
<key>scope</key>
<string>meta.diff.range</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#3e999f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict></array>
<key>uuid</key>
<string>DE477E5B-BD4D-46B0-BF80-2EA32A2814D5</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Predawn</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#282828</string>
<key>caret</key>
<string>#F18260</string>
<key>foreground</key>
<string>#F1F1F1</string>
<key>invisibles</key>
<string>#F18260</string>
<key>lineHighlight</key>
<string>#232323</string>
<key>selection</key>
<string>#4C4C4C</string>
<key>inactiveSelection</key>
<string>#3C3C3C</string>
<key>findHighlight</key>
<string>#F18260</string>
<key>gutterForeground</key>
<string>#4C4C4C</string>
<key>guide</key>
<string>#F1826025</string>
<key>activeGuide</key>
<string>#F1826050</string>
<key>minimapBorder</key>
<string>#F1826025</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Python Docstring</string>
<key>scope</key>
<string>string.quoted.double.block.python</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BDDCDC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Red</string>
<key>scope</key>
<string>invalid, keyword.other.important.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF5340</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source (Bright)</string>
<key>scope</key>
<string>text.html.ruby source</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#151515</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity inherited-class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String embedded-source</string>
<key>scope</key>
<string>string.quoted source</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Line</string>
<key>scope</key>
<string>other.preprocessor.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>C/C++ Preprocessor Directive</string>
<key>scope</key>
<string>other.preprocessor.c entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta.tag.A</string>
<key>scope</key>
<string>declaration.tag, declaration.tag entity, meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag, entity.name.tag.scss, source.scss entity.other.attribute-name.pseudo-class.scss, keyword.control.at-rule.include.scss, entity.name.tag.wildcard.scss </string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css#id</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.id, meta.selector.scss entity.other.attribute-name.id, entity.name.tag.reference.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class, source.scss entity.other.attribute-name.class.css, keyword.other.default.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-name: psuedos and attibutes</string>
<key>scope</key>
<string>support.type.property-name.css, support.type.property-name.scss, entity.other.attribute-name.pseudo-element.css, entity.other.attribute-name.pseudo-class.css, entity.other.attribute-name.attribute.css, variable.scss, meta.property-name.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-value;</string>
<key>scope</key>
<string>meta.property-group support.constant.property-value.css, meta.property-value support.constant.property-value.css, meta.property-group support.constant.property-value.scss, meta.property-value support.constant.property-value.scss, meta.property-list meta.property-value.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css, meta.property-value constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css strings and urls</string>
<key>scope</key>
<string>source.css string.quoted.single, source.scss string.quoted.single, source.css string.quoted.double, source.scss string.quoted.double, source.css variable.parameter, variable.parameter.url.scss, string.unquoted.attribute-value.scss, string.unquoted.attribute-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F18260</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#151515</string>
<key>foreground</key>
<string>#DDDDDD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#151515</string>
<key>foreground</key>
<string>#CF5340</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B4D388</string>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#151515</string>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter deleted</string>
<key>scope</key>
<string>markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF5340</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter changed</string>
<key>scope</key>
<string>markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter inserted</string>
<key>scope</key>
<string>markup.inserted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter ignored</string>
<key>scope</key>
<string>markup.ignored.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter untracked</string>
<key>scope</key>
<string>markup.untracked.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Annotations</string>
<key>scope</key>
<string>sublimelinter.outline.notes</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Outline</string>
<key>scope</key>
<string>sublimelinter.outline.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F18260</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Underline</string>
<key>scope</key>
<string>sublimelinter.underline.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#CF5340</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning Outline</string>
<key>scope</key>
<string>sublimelinter.outline.warning</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning Underline</string>
<key>scope</key>
<string>sublimelinter.underline.warning</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#CF5340</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Violation Outline</string>
<key>scope</key>
<string>sublimelinter.outline.violation</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Violation Underline</string>
<key>scope</key>
<string>sublimelinter.underline.violation</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF000050</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html id</string>
<key>scope</key>
<string>entity.other.attribute-name.id.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html class</string>
<key>scope</key>
<string>entity.other.attribute-name.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html punctuations tags</string>
<key>scope</key>
<string>punctuation.definition.tag.end, punctuation.definition.tag.begin, punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>scss terminators</string>
<key>scope</key>
<string>punctuation.section.function.scss, punctuation.terminator.rule.scss, punctuation.separator.key-value.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F1F1F1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>@-rules</string>
<key>scope</key>
<string>keyword.control.at-rule.import.css, keyword.control.at-rule.import.scss, keyword.control.at-rule.keyframes.css, keyword.control.at-rule.keyframes.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>@media</string>
<key>scope</key>
<string>meta.at-rule.media.css, meta.at-rule.media.scss</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f49d62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>LESS variables</string>
<key>scope</key>
<string>variable.other.less</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>LESS variables</string>
<key>scope</key>
<string>entity.other.less.mixin</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>LESS units</string>
<key>scope</key>
<string>source.css.less keyword.unit.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F18260</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Angular</string>
<key>scope</key>
<string>entity.other.attribute-name.angular.html, source.angular.embedded.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F18260</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML Entities</string>
<key>scope</key>
<string>constant.character.entity.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F18260</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>coffee instance var</string>
<key>scope</key>
<string>variable.other.readwrite.instance.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>coffee brace</string>
<key>scope</key>
<string>meta.brace.round.coffee,meta.brace.square.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>coffee embeded</string>
<key>scope</key>
<string>punctuation.section.embedded.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Coffee vars</string>
<key>scope</key>
<string>variable.assignment.coffee variable.assignment.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDDDDD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Coffee dots</string>
<key>scope</key>
<string>meta.delimiter.method.period.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F49D62</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Coffee curleys</string>
<key>scope</key>
<string>meta.brace.curly.coffee</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Doctype/XML Processing</string>
<key>scope</key>
<string>meta.tag.sgml.doctype.xml, declaration.sgml.html declaration.doctype, declaration.sgml.html declaration.doctype entity, declaration.sgml.html declaration.doctype string, declaration.xml-processing, declaration.xml-processing entity, declaration.xml-processing string, doctype</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#777777</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bracket Default</string>
<key>scope</key>
<string>brackethighlighter.default</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#92BFBF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Keyword</string>
<key>scope</key>
<string>keyword.control.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B4D388</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Keyword Operator</string>
<key>scope</key>
<string>keyword.operator.logical.php, keyword.operator.assignment.php, keyword.operator.class.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Variable</string>
<key>scope</key>
<string>variable.other.property.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ECEC89</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Strings</string>
<key>scope</key>
<string>string.regexp.single-quoted.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BDDCDC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict></array>
</dict>
</plist>
{
"auto_indent": true,
"auto_match_enabled": false,
"binary_file_patterns":
[
"*.min.js",
"*.min.js.map",
"*.jpg",
"*.jpeg",
"*.png",
"*.gif",
"*.ttf",
"*.tga",
"*.dds",
"*.ico",
"*.eot",
"*.pdf",
"*.swf",
"*.jar",
"*.zip",
"coverage/*",
"test-results/*",
"node_modules/*"
],
"color_scheme": "Packages/Theme - Oceanic Next/Oceanic Next (SL).tmTheme",
"detect_indentation": true,
"file_exclude_patterns":
[
"*.scssc",
"*.pyc",
"*.pyo",
"*.exe",
"*.dll",
"*.obj",
"*.o",
"*.a",
"*.lib",
"*.so",
"*.dylib",
"*.ncb",
"*.sdf",
"*.suo",
"*.pdb",
"*.idb",
".DS_Store",
"*.class",
"*.psd",
"*.db",
"*.sublime-workspace"
],
"folder_exclude_patterns":
[
".svn",
".git",
".hg",
"CVS"
],
"font_face": "SourceCodePro-Regular",
"font_options":
[
"no_round"
],
"font_size": 14.0,
"ignored_packages":
[
"Markdown",
"Vintage"
],
"spacegray_tabs_font_large": true,
"tab_size": 4,
"tabs_small": true,
"theme": "Spacegray Ocean.sublime-theme",
"trim_trailing_white_space_on_save": false,
"word_wrap": "false"
}
2013-06-24 14:26:58
Traceback (most recent call last):
File "./sftp/threads.py", line 16, in run_with_except_hook
File "./sftp/threads.py", line 101, in handler
File "./sftp/commands.py", line 264, in run
File "./sftp/commands.py", line 403, in do_operation
File "./sftp/file_transfer.py", line 25, in handler
File "./sftp/sftp_transport.py", line 565, in put
File "./sftp/file_transfer.py", line 323, in handle_put_dirs
File "./sftp/sftp_transport.py", line 298, in lcd
NotFoundError: Folder not found
2013-06-24 14:27:07
Traceback (most recent call last):
File "./sftp/threads.py", line 16, in run_with_except_hook
File "./sftp/threads.py", line 101, in handler
File "./sftp/commands.py", line 264, in run
File "./sftp/commands.py", line 403, in do_operation
File "./sftp/file_transfer.py", line 25, in handler
File "./sftp/sftp_transport.py", line 565, in put
File "./sftp/file_transfer.py", line 323, in handle_put_dirs
File "./sftp/sftp_transport.py", line 298, in lcd
NotFoundError: Folder not found
2013-06-24 14:27:31
Traceback (most recent call last):
File "./sftp/threads.py", line 16, in run_with_except_hook
File "./sftp/threads.py", line 101, in handler
File "./sftp/commands.py", line 264, in run
File "./sftp/commands.py", line 403, in do_operation
File "./sftp/file_transfer.py", line 25, in handler
File "./sftp/sftp_transport.py", line 565, in put
File "./sftp/file_transfer.py", line 323, in handle_put_dirs
File "./sftp/sftp_transport.py", line 298, in lcd
NotFoundError: Folder not found
{
"email": "[email protected]",
"product_key": "374329-8a5779-bb6cf5-a4af9c-ce6a7a"
}
{
"version": "setting no longer updated"
}
<snippet>
<content><![CDATA[
<link rel="stylesheet" href="$1">
$2
]]></content>
<tabTrigger>css-external</tabTrigger>
<description>An external css link</description>
<scope>source.html</scope>
</snippet>
<snippet>
<content><![CDATA[
<style type="text/css">
$1
</style>
]]></content>
<tabTrigger>css-inline</tabTrigger>
<description>An inline css declaration</description>
<scope>source.html</scope>
</snippet>
<snippet>
<content><![CDATA[
<script src="$1" type="text/javascript"></script>
$2
]]></content>
<tabTrigger>script-external</tabTrigger>
<description>An external script link</description>
<scope>source.html</scope>
</snippet>
<snippet>
<content><![CDATA[
<script type="text/javascript">
$1
</script>
]]></content>
<tabTrigger>script-inline</tabTrigger>
<description>An inline script tag</description>
<scope>source.html</scope>
</snippet>
<snippet>
<content><![CDATA[
${1:dvclass} = dv.Class(${2:dv.base}, {
constructor: function(options) {
if (!(this instanceof ${1:dvclass})) {
return new ${1:dvclass}(options);
}
${1:dvclass}.Super.constructor.apply(this, arguments);
},
defaults: {
},
${3}
});
]]></content>
<tabTrigger>class-dv</tabTrigger>
<description>A generic class constructor.</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
/* eslint-disable */
]]></content>
<tabTrigger>eslintDisable</tabTrigger>
<scope>source.js</scope>
<description>Eslint-disable beginning block</description>
</snippet>
<snippet>
<content><![CDATA[
/* eslint-enable */
]]></content>
<tabTrigger>eslintEnable</tabTrigger>
<scope>source.js</scope>
<description>Eslint-enable beginning block</description>
</snippet>
<snippet>
<content><![CDATA[
var i,
length = ${1:array}.length,
${2:item};
for (i = 0; i < length; i++) {
${2:item} = ${1:array}[i];
${3}
}
]]></content>
<tabTrigger>forloop</tabTrigger>
<description>A basic for loop</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
get ${1:prop}() {
return this._${1:prop};
},
]]></content>
<tabTrigger>get-es5</tabTrigger>
<description>An EcmaScript 5 compliant getter.</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
${1:prop}: function(${2:val}) {
if (!arguments.length) return this._${1:prop};
this._${1:prop} = ${2:val};
return this;
}
]]></content>
<tabTrigger>getset</tabTrigger>
<description>Basic getter-setter pair.</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
get ${1:prop}() {
return this._${1:prop};
},
set ${1:prop}(val) {
this._${1:prop} = val;
},
]]></content>
<tabTrigger>getset-es5</tabTrigger>
<description>An EcmaScript 5 compliant getter/setter pair.</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
${1:class}.${2:prop} = function(${3:val}) {
if (!arguments.length) return ${2:prop};
${2:prop} = ${3:val};
return ${1:class};
};
]]></content>
<tabTrigger>getsetfunc</tabTrigger>
<description>Basic getter-setter pair for classes.</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
if (!(this instanceof ${1:class})) {
return new ${1:class}(${2});
}
]]></content>
<tabTrigger>newforget</tabTrigger>
<description>Afraid to forget the 'new' operator?</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
constructor(props) {
super(props);
${0}
}
]]></content>
<tabTrigger>componentConstructor</tabTrigger>
<scope>source.js</scope>
<description>React - constructor</description>
</snippet>
<snippet>
<content><![CDATA[
componentDidMount() {
${0}
}
]]></content>
<tabTrigger>componentDidMount</tabTrigger>
<scope>source.js</scope>
<description>React's componentDidMount es6 class</description>
</snippet>
<snippet>
<content><![CDATA[
componentDidUpdate(prevProps, prevState) {
${0}
}
]]></content>
<tabTrigger>componentDidUpdate</tabTrigger>
<scope>source.js</scope>
<description>React: componentDidUpdate</description>
</snippet>
<snippet>
<content><![CDATA[
componentWillMount() {
${0}
}
]]></content>
<tabTrigger>componentWillMount</tabTrigger>
<scope>source.js</scope>
<description>React: componentWillMount</description>
</snippet>
<snippet>
<content><![CDATA[
componentWillReceiveProps(nextProps) {
${0}
}
]]></content>
<tabTrigger>componentWillReceiveProps</tabTrigger>
<scope>source.js</scope>
<description>React: componentWillReceiveProps</description>
</snippet>
<snippet>
<content><![CDATA[
componentWillUnmount() {
${0}
}
]]></content>
<tabTrigger>componentWillUnmount</tabTrigger>
<scope>source.js</scope>
<description>React: componentWillUnmount</description>
</snippet>
<snippet>
<content><![CDATA[
static defaultProps = {
${0}
}
]]></content>
<tabTrigger>defaultProps</tabTrigger>
<scope>source.js</scope>
<description>React: defaultProps</description>
</snippet>
<snippet>
<content><![CDATA[
e => this.${0:myHandler}(e)
]]></content>
<tabTrigger>eventHandler</tabTrigger>
<scope>source.js</scope>
<description>Adds eventHandler arrow function for React es6 classes</description>
</snippet>
<snippet>
<content><![CDATA[
const ${0} = React.findDOMNode(this.refs.${1});
]]></content>
<tabTrigger>findDOMNode</tabTrigger>
<scope>source.js</scope>
<description>React: findDOMNode</description>
</snippet>
<snippet>
<content><![CDATA[
import Coral from 'coralui-support-react';
]]></content>
<tabTrigger>importCoralReact</tabTrigger>
<scope>source.js</scope>
<description>Imports CoralUI with React bindings</description>
</snippet>
<snippet>
<content><![CDATA[
import React, { ${1:PropTypes, }Component } from 'react';
]]></content>
<tabTrigger>importReact</tabTrigger>
<scope>source.js</scope>
<description>ES6 imports for React</description>
</snippet>
<snippet>
<content><![CDATA[
state = {
${0}
}
]]></content>
<tabTrigger>initialState</tabTrigger>
<scope>source.js</scope>
<description>React initial state</description>
</snippet>
<snippet>
<content><![CDATA[
static propTypes = {
${1}
}
]]></content>
<tabTrigger>propTypes</tabTrigger>
<scope>source.js</scope>
<description>Adds es7 static property to class</description>
</snippet>
<snippet>
<content><![CDATA[
export default class ${1:${TM_FILENAME/(.+)\..+|.*/$1/:ComponentName}} extends Component {
render() {
return (
${2}
);
}
}
]]></content>
<tabTrigger>reactComponentClass</tabTrigger>
<scope>source.js -(meta)</scope>
<description>Creates a new React Component scaffold</description>
</snippet>
<snippet>
<content><![CDATA[
shouldComponentUpdate(nextProps, nextState) {
${0}
}
]]></content>
<tabTrigger>shouldComponentUpdate</tabTrigger>
<scope>source.js</scope>
<description>React: shouldComponentUpdate</description>
</snippet>
<snippet>
<content><![CDATA[
${1:dvclass}.Super.${2:func}.apply(this, ${3:arguments});
${4}
]]></content>
<tabTrigger>super-dv</tabTrigger>
<description>A generic super function call.</description>
<scope>source.js</scope>
</snippet>
<snippet>
<content><![CDATA[
var i = -1,
n = ${1:array}.length;
while (++i < n) {
${2}
}
]]></content>
<tabTrigger>whilefor</tabTrigger>
<description>A simpler for loop</description>
<scope>source.js</scope>
</snippet>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Chris Kempson (http://chriskempson.com)</string>
<key>name</key>
<string>Base16 Eighties Dark</string>
<key>semanticClass</key>
<string>base16.eighties.dark</string>
<key>colorSpaceName</key>
<string>sRGB</string>
<key>gutterSettings</key>
<dict>
<key>background</key>
<string>#393939</string>
<key>divider</key>
<string>#393939</string>
<key>foreground</key>
<string>#747369</string>
<key>selectionBackground</key>
<string>#515151</string>
<key>selectionForeground</key>
<string>#a09f93</string>
</dict>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#2d2d2d</string>
<key>caret</key>
<string>#d3d0c8</string>
<key>foreground</key>
<string>#d3d0c8</string>
<key>invisibles</key>
<string>#747369</string>
<key>lineHighlight</key>
<string>#393939</string>
<key>selection</key>
<string>#515151</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Text</string>
<key>scope</key>
<string>variable.parameter.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments</string>
<key>scope</key>
<string>comment, punctuation.definition.comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#747369</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation.definition.string, punctuation.definition.variable, punctuation.definition.string, punctuation.definition.parameters, punctuation.definition.string, punctuation.definition.array</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Delimiters</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operators</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keywords</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variables</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Functions</string>
<key>scope</key>
<string>entity.name.function, meta.require, support.function.any-method</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Classes</string>
<key>scope</key>
<string>support.class, entity.name.class, entity.name.type.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#ffcc66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Classes</string>
<key>scope</key>
<string>meta.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2f0ec</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Methods</string>
<key>scope</key>
<string>keyword.other.special-method</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Strings, Inherited Class</string>
<key>scope</key>
<string>string, constant.other.symbol, entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99cc99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Integers</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Floats</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Boolean</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constants</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tags</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attributes</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attribute IDs</string>
<key>scope</key>
<string>entity.other.attribute-name.id, punctuation.definition.entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Selector</string>
<key>scope</key>
<string>meta.selector</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Values</string>
<key>scope</key>
<string>none</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Headings</string>
<key>scope</key>
<string>markup.heading punctuation.definition.heading, entity.name.section</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#6699cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Units</string>
<key>scope</key>
<string>keyword.other.unit</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bold</string>
<key>scope</key>
<string>markup.bold, punctuation.definition.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#ffcc66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Italic</string>
<key>scope</key>
<string>markup.italic, punctuation.definition.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Code</string>
<key>scope</key>
<string>markup.raw.inline</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99cc99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Link Text</string>
<key>scope</key>
<string>string.other.link</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Link Url</string>
<key>scope</key>
<string>meta.link</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lists</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Quotes</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#515151</string>
<key>foreground</key>
<string>#d3d0c8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inserted</string>
<key>scope</key>
<string>markup.inserted, markup.inserted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99cc99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deleted</string>
<key>scope</key>
<string>markup.deleted, markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2777a</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Changed</string>
<key>scope</key>
<string>markup.changed, markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cc99cc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Ignored</string>
<key>scope</key>
<string>markup.ignored, markup.ignored.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#515151</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Untracked</string>
<key>scope</key>
<string>markup.untracked, markup.untracked.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#515151</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Colors</string>
<key>scope</key>
<string>constant.other.color</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regular Expressions</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Escape Characters</string>
<key>scope</key>
<string>constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66cccc</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded</string>
<key>scope</key>
<string>punctuation.section.embedded, variable.interpolation</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d27b53</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#f2777a</string>
<key>foreground</key>
<string>#2d2d2d</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter deleted</string>
<key>scope</key>
<string>markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter inserted</string>
<key>scope</key>
<string>markup.inserted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter changed</string>
<key>scope</key>
<string>markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#967EFB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter ignored</string>
<key>scope</key>
<string>markup.ignored.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#565656</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>GitGutter untracked</string>
<key>scope</key>
<string>markup.untracked.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#565656</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict></array>
<key>uuid</key>
<string>36594751-36ac-443a-9f2f-111b815085cf</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#272822</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#3E3D32</string>
<key>selection</key>
<string>#49483E</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>selectionBorder</key>
<string>#222218</string>
<key>activeGuide</key>
<string>#9D550FB0</string>
<key>bracketsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketsOptions</key>
<string>underline</string>
<key>bracketContentsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketContentsOptions</key>
<string>underline</string>
<key>tagsOptions</key>
<string>stippled_underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string />
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
<key>fontStyle</key>
<string />
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#AE81FF</string>
<key>foreground</key>
<string>#F8F8F0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double.json</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>constant.numeric.line-number.find-in-files - match</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FFA0</string>
</dict>
</dict>
<dict>
<key>scope</key>
<string>entity.name.filename.find-in-files</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict></array>
<key>uuid</key>
<string>D8D5E82E-3D5B-46B5-B38E-8C841C21347D</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai Phoenix</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>activeGuide</key>
<string>#9D550FB0</string>
<key>background</key>
<string>#111111</string>
<key>bracketContentsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketContentsOptions</key>
<string>underline</string>
<key>bracketsForeground</key>
<string>#F8F8F2A5</string>
<key>bracketsOptions</key>
<string>underline</string>
<key>caret</key>
<string>#F8F8F0</string>
<key>findHighlight</key>
<string>#FFE792</string>
<key>findHighlightForeground</key>
<string>#000000</string>
<key>foreground</key>
<string>#F8F8F2</string>
<key>invisibles</key>
<string>#3B3A32</string>
<key>lineHighlight</key>
<string>#3E3D32</string>
<key>selection</key>
<string>#49483E</string>
<key>selectionBorder</key>
<string>#222218</string>
<key>tagsOptions</key>
<string>stippled_underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>constant.character, constant.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FFA0</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>constant.numeric</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8A5C8DFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function arg</string>
<key>scope</key>
<string>meta.function.argument, variable.parameter, meta.parens.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FD971F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>invalid.illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#562D56BF</string>
<key>foreground</key>
<string>#FD5FF1FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.tag entity</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.arrow.function.js</string>
<key>scope</key>
<string>entity.arrow.function.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AA00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.class.error.js</string>
<key>scope</key>
<string>support.class.error.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF5522</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.class.node.js</string>
<key>scope</key>
<string>support.class.node.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#1224FE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.keyword.node.js</string>
<key>scope</key>
<string>support.keyword.node.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.module.js, variable.import.parameter.js, variable.other.class.js</string>
<key>scope</key>
<string>entity.name.module.js, variable.import.parameter.js, variable.other.class.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.accessor.js</string>
<key>scope</key>
<string>entity.name.accessor.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.method.js</string>
<key>scope</key>
<string>entity.name.method.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.method.js</string>
<key>scope</key>
<string>meta.method.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.class.js</string>
<key>scope</key>
<string>entity.name.class.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.extends.js</string>
<key>scope</key>
<string>entity.name.extends.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#00FF99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.other.attribute-name.id</string>
<key>scope</key>
<string>entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>class name</string>
<key>scope</key>
<string>meta.prototype support.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class, variable.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#66D9EF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js undefined</string>
<key>scope</key>
<string>constant.language.undefined.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>false</string>
<key>scope</key>
<string>constant.language.boolean.false</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>true</string>
<key>scope</key>
<string>constant.language.boolean.true</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js null</string>
<key>scope</key>
<string>constant.language.null.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AE81FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#A6E22E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header, entity.name.namespace</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#75715E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#420E09FF</string>
<key>foreground</key>
<string>#F92672</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4A410DFF</string>
<key>foreground</key>
<string>#E6DB74</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#253B22FF</string>
<key>foreground</key>
<string>#F8F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Log Entry</string>
<key>scope</key>
<string>meta.line.entry.logfile, meta.line.exit.logfile</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#EEEEEE29</string>
<key>foreground</key>
<string>#F8F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Log Entry Error</string>
<key>scope</key>
<string>meta.line.error.logfile</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#751012</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON String</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFCFC2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict></array>
<key>uuid</key>
<string>c29d9188-ad09-45ff-a41c-5fa3816b15ba</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Next</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>activeGuide</key>
<string>#3333FFFF</string>
<key>background</key>
<string>#000000</string>
<key>bracketsBackground</key>
<string>#FF00AA66</string>
<key>bracketsOptions</key>
<string>background</string>
<key>caret</key>
<string>#FF0099</string>
<key>foreground</key>
<string>#E6E6E6</string>
<key>guide</key>
<string>#33333388</string>
<key>gutter</key>
<string>#6600FF33</string>
<key>invisibles</key>
<string>#404040</string>
<key>lineHighlight</key>
<string>#FF009933</string>
<key>multiEditHighlight</key>
<string>#00FF0022</string>
<key>searchHighlight</key>
<string>#FF00AA99</string>
<key>selection</key>
<string>#00FFFF44</string>
<key>stackGuide</key>
<string>#333333CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>bracket.curly</string>
<key>scope</key>
<string>bracket.curly</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF44AA</string>
<key>foreground</key>
<string>#3399FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>bracket.square</string>
<key>scope</key>
<string>bracket.square</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#2266CC</string>
<key>foreground</key>
<string>#FF8800</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>bracket.round</string>
<key>scope</key>
<string>bracket.round</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#9922FF</string>
<key>foreground</key>
<string>#00FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>bracket.quote</string>
<key>scope</key>
<string>bracket.quote</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#00FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#646464FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FF000022</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#3387CCFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E28964</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>constant.numeric</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFF66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99CF50</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.modifier</string>
<key>scope</key>
<string>storage.modifier</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF5099</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.self</string>
<key>scope</key>
<string>storage.self</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#CC0033</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CF9950</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8A5C8DFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.function</string>
<key>scope</key>
<string>entity.name.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BB00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword control</string>
<key>scope</key>
<string>keyword.control</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.control.declaration</string>
<key>scope</key>
<string>keyword.control.declaration</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8888AA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.control.module</string>
<key>scope</key>
<string>keyword.control.module</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FFFF3333</string>
<key>foreground</key>
<string>#FFFF33</string>
<key>options</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.control.flow</string>
<key>scope</key>
<string>keyword.control.flow</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#110300</string>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#FF6600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.control.conditional</string>
<key>scope</key>
<string>keyword.control.conditional</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.control.trycatch</string>
<key>scope</key>
<string>keyword.control.trycatch</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF0033</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.control.loop</string>
<key>scope</key>
<string>keyword.control.loop</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#009999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.control.switch</string>
<key>scope</key>
<string>keyword.control.switch</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword operator</string>
<key>scope</key>
<string>keyword.operator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF0080</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function arg</string>
<key>scope</key>
<string>meta.function.argument, variable.parameter, meta.parens.c</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#77FF11</string>
</dict>
</dict>
<dict>
<key>name</key>
<string />
<key>scope</key>
<string>punctuation.section.embedded</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0D0D0D37</string>
<key>foreground</key>
<string>#00D3FFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>keyword.other.unit</string>
<key>scope</key>
<string>keyword.other.unit, keyword.unit.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#80FF00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>invalid.illegal</string>
<key>scope</key>
<string>invalid.illegal</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#562D56BF</string>
<key>foreground</key>
<string>#FD5FF1FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.quoted source</string>
<key>scope</key>
<string>string.quoted source</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DAEFA3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string constant</string>
<key>scope</key>
<string>string constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CFED81</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.regexp</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6FFF17</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.definition.string</string>
<key>scope</key>
<string>punctuation.definition.string</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#15151501</string>
<key>foreground</key>
<string>#B4FF82</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.regexp.special</string>
<key>scope</key>
<string>string.regexp constant.character.escape, string.regexp source.ruby.embedded, string.regexp string.regexp.arbitrary-repitition</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#00D505</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.regexp punctuation keyword</string>
<key>scope</key>
<string>string.regexp punctuation keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C559FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string variable</string>
<key>scope</key>
<string>string variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8A9A95</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FCF352FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.tag</string>
<key>scope</key>
<string>meta.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#4F9EFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.tag entity</string>
<key>scope</key>
<string>meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#157EFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>HTML/XML tag attribute value</string>
<key>scope</key>
<string>meta.tag string.quoted.double.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E07D2C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html5 tag</string>
<key>scope</key>
<string>meta.tag.block.any.html.html5</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E88BFCFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html5 tag entity</string>
<key>scope</key>
<string>meta.tag.block.any.html.html5 entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D730FAFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.tag.inline</string>
<key>scope</key>
<string>source entity.name.tag, source entity.other.attribute-name,meta.tag.inline, meta.tag.inline entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#87A7E2FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html js tag</string>
<key>scope</key>
<string>source.js.embedded.html entity.name.tag.script.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF3535</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html js tag braces</string>
<key>scope</key>
<string>source.js.embedded.html punctuation.definition.tag.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF1E1E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>html js tag url</string>
<key>scope</key>
<string>source.js.embedded.html string.quoted.double.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF9D9D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7349BEFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta Toc List</string>
<key>scope</key>
<string>meta.toc-list</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#162C1AFF</string>
<key>foreground</key>
<string>#BEFEC7FF</string>
<key>options</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js variable readwrite</string>
<key>scope</key>
<string>meta.initialization, variable.other.readwrite.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF9122</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js variable dollar</string>
<key>scope</key>
<string>meta.initialization, variable.other.dollar.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FF9122</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js object</string>
<key>scope</key>
<string>variable.other.object.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFEE00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js object with parent</string>
<key>scope</key>
<string>meta.property-name.js variable.other.object.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFF88</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.variable.property.js</string>
<key>scope</key>
<string>support.variable.property.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#3399FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.other.dot-access</string>
<key>scope</key>
<string>variable.other.dot-access</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66FFDD</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.other.property.js</string>
<key>scope</key>
<string>variable.other.property.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#37C1BE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.section.scope.square.js</string>
<key>scope</key>
<string>punctuation.section.scope.square.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF2404</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.section.scope.round.js, meta.brace.round</string>
<key>scope</key>
<string>punctuation.section.scope.round.js, meta.brace.round</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#1C38FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.definition.arrow.js</string>
<key>scope</key>
<string>punctuation.definition.arrow.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#001133</string>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#AA00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.arrow.function.js</string>
<key>scope</key>
<string>entity.arrow.function.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#001133</string>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#AA00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.language</string>
<key>scope</key>
<string>variable.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AA0044</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.language.prototype</string>
<key>scope</key>
<string>variable.language.prototype</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF6600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.class.error.js</string>
<key>scope</key>
<string>support.class.error.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF5522</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.class.builtin.js</string>
<key>scope</key>
<string>support.class.builtin.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#FFEE00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.class.node.js</string>
<key>scope</key>
<string>support.class.node.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#1224FE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.function.node.js</string>
<key>scope</key>
<string>entity.name.function.node.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D84014</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.keyword.node.js</string>
<key>scope</key>
<string>support.keyword.node.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#99EF25</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.import.destructuring.js</string>
<key>scope</key>
<string>variable.import.destructuring.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#00BBFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>other.object.key.js</string>
<key>scope</key>
<string>other.object.key.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#1C98C1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.accessor.js punctuation.definition.parameters</string>
<key>scope</key>
<string>meta.accessor.js punctuation.definition.parameters</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#005588</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type.accessor.js</string>
<key>scope</key>
<string>storage.type.accessor.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#001122</string>
<key>fontStyle</key>
<string>bold italic</string>
<key>foreground</key>
<string>#0066AA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.module.js, variable.import.parameter.js, variable.other.class.js</string>
<key>scope</key>
<string>entity.name.module.js, variable.import.parameter.js, variable.other.class.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#220011</string>
<key>foreground</key>
<string>#FF0044</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js</string>
<key>scope</key>
<string>storage.type.module.js, storage.type.export.js, storage.type.import.js, storage.type.from.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#222211</string>
<key>foreground</key>
<string>#CCCC44</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type.class.js, storage.type.extends.js</string>
<key>scope</key>
<string>storage.type.class.js, storage.type.extends.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#001122</string>
<key>foreground</key>
<string>#0044AA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.function.call.class.static.js </string>
<key>scope</key>
<string>meta.function.call.class.static.js </string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#880011</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.other.class.static.js</string>
<key>scope</key>
<string>variable.other.class.static.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AA0066</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.accessor.js</string>
<key>scope</key>
<string>entity.name.accessor.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#001122</string>
<key>fontStyle</key>
<string>bold italic</string>
<key>foreground</key>
<string>#00FFCC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.method.js</string>
<key>scope</key>
<string>entity.name.method.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#110022</string>
<key>fontStyle</key>
<string>italic bold</string>
<key>foreground</key>
<string>#AA00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.method.js</string>
<key>scope</key>
<string>meta.method.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#660099</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>storage.type.function.js</string>
<key>scope</key>
<string>storage.type.function.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#99CC44</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.quoted.single</string>
<key>scope</key>
<string>string.quoted.single</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#88FFAAAA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.other.quasi.js</string>
<key>scope</key>
<string>variable.other.quasi.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF0099</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.quasi.js</string>
<key>scope</key>
<string>string.quasi.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#00FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.quasi.element</string>
<key>scope</key>
<string>punctuation.quasi.element</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#008800</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.quasi.tag.name.js</string>
<key>scope</key>
<string>entity.quasi.tag.name.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.group.braces.square, punctuation.destructuring</string>
<key>scope</key>
<string>meta.group.braces.square string.quoted.single, punctuation.destructuring</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#47E9AC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>string.quoted.double</string>
<key>scope</key>
<string>string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#11BB11</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.section.scope.curly.js</string>
<key>scope</key>
<string>punctuation.section.scope.curly.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F9044E</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.delimiter.object.comma.js</string>
<key>scope</key>
<string>meta.delimiter.object.comma.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#00FFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.group.braces.curly string.quoted.single</string>
<key>scope</key>
<string>meta.group.braces.curly string.quoted.single</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#16B853</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support.function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B532FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.js</string>
<key>scope</key>
<string>punctuation.definition.string.begin.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D2E20C</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.js</string>
<key>scope</key>
<string>punctuation.definition.string.end.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CEA30D</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>instance constructor</string>
<key>scope</key>
<string>meta.class.inheritance, meta.instance.constructor</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic underline</string>
<key>foreground</key>
<string>#E81E41</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.class.js</string>
<key>scope</key>
<string>entity.name.class.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#00FFFF33</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#00FFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.extends.js</string>
<key>scope</key>
<string>entity.name.extends.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#00FF9933</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#00FF99</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>function call</string>
<key>scope</key>
<string>meta.function-call entity.name.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5B24FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>function call with args</string>
<key>scope</key>
<string>meta.function-call.function.with-arguments.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#33FF00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js brace</string>
<key>scope</key>
<string>meta.brace.curly.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF0099</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js paren</string>
<key>scope</key>
<string>meta.brace.round.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#000000FF</string>
<key>foreground</key>
<string>#D0C5FEFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js constant escape</string>
<key>scope</key>
<string>constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#10CF62FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>pseudo-class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.tag.pseudo-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#4FBC4B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css selectors</string>
<key>scope</key>
<string>entity.namespace.unicode.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF4F4F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.other.attribute-name.id</string>
<key>scope</key>
<string>entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0B0028FF</string>
<key>foreground</key>
<string>#F20073FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>class name</string>
<key>scope</key>
<string>meta.prototype support.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF0099</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>support object</string>
<key>scope</key>
<string>support.object</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#FFEE00</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>class name prototype</string>
<key>scope</key>
<string>meta.prototype support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF6600</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>prototype declaration</string>
<key>scope</key>
<string>meta.prototype.declaration.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js undefined</string>
<key>scope</key>
<string>constant.language.undefined.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#555588</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>variable.other.constant.js</string>
<key>scope</key>
<string>variable.other.constant.js</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#003311</string>
<key>foreground</key>
<string>#00FF33</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>false</string>
<key>scope</key>
<string>constant.language.boolean.false</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AAAA55</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>true</string>
<key>scope</key>
<string>constant.language.boolean.true</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CC7744</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>js null</string>
<key>scope</key>
<string>constant.language.null.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#558855</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css#id punctuation</string>
<key>scope</key>
<string>punctuation.definition.entity.id.css</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0B0028</string>
<key>foreground</key>
<string>#FF489F</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css.class</string>
<key>scope</key>
<string>entity.other.attribute-name.class, source.css.less entity.other.attribute-name.class.css</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0B0028</string>
<key>foreground</key>
<string>#9529B8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css.class puntuation</string>
<key>scope</key>
<string>punctuation.definition.entity.class.css</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0B0028FF</string>
<key>foreground</key>
<string>#CD87E4FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css pseudo element</string>
<key>scope</key>
<string>entity.other.attribute-name.pseudo-element.css</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0B0028FF</string>
<key>foreground</key>
<string>#FF00FFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-name</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B8EFECFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D7C271FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css color</string>
<key>scope</key>
<string>constant.other.color.rgb-value.css, support.constant.color.w3c-standard-color-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FB7720FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constants</string>
<key>scope</key>
<string>support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7CE85EFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Puncation Termination</string>
<key>scope</key>
<string>punctuation.terminator, punctuation.separator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#4BFCF8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8F9D6AFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header, entity.name.namespace</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#0E2231FF</string>
<key>foreground</key>
<string>#F8F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#420E09FF</string>
<key>foreground</key>
<string>#F8F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#4A410DFF</string>
<key>foreground</key>
<string>#F8F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#253B22FF</string>
<key>foreground</key>
<string>#F8F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Italic</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#6AD500FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Underline</string>
<key>scope</key>
<string>markup.underline</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#E18964FF</string>
<key>options</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Quote</string>
<key>scope</key>
<string>markup.quote</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#FEE09C12</string>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#E1D4B9FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Heading</string>
<key>scope</key>
<string>markup.heading, markup.heading entity</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#DE3280FF</string>
<key>foreground</key>
<string>#FFFFFFFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: List</string>
<key>scope</key>
<string>markup.list</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6657EAFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Raw</string>
<key>scope</key>
<string>markup.raw</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#B1B3BA08</string>
<key>foreground</key>
<string>#578BB3FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Comment</string>
<key>scope</key>
<string>markup comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F67B37FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markup: Separator</string>
<key>scope</key>
<string>meta.separator</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#242424FF</string>
<key>foreground</key>
<string>#60A633FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Log Entry</string>
<key>scope</key>
<string>meta.line.entry.logfile, meta.line.exit.logfile</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#EEEEEE29</string>
<key>foreground</key>
<string>#F8F8F8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Log Entry Error</string>
<key>scope</key>
<string>meta.line.error.logfile</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#751012</string>
<key>foreground</key>
<string>#F8F8F8</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON property top</string>
<key>scope</key>
<string>meta.structure.dictionary.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#111111</string>
<key>foreground</key>
<string>#1144BB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON property level 2</string>
<key>scope</key>
<string>meta.structure meta.structure.dictionary.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#1122BB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON property level 3</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#2938EB</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON property level 4</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6D7EF1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON property level 5</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#B3BBF7</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON value</string>
<key>scope</key>
<string>meta.structure.dictionary.value.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AA00AA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON value level 2</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BF00BF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON value level 3</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF00FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON value level 4</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF40FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON value level 5</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.dictionary.value.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FF80FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON value string punctuation</string>
<key>scope</key>
<string>meta.structure.dictionary.value.json string punctuation.definition.string.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8409FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON array value</string>
<key>scope</key>
<string>meta.structure.array.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5522AA</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON array value level 1</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure.array.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#7017C8FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON array value level 2</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9541E9FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON array value level 3</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BA83F1FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON array value level 4</string>
<key>scope</key>
<string>meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure meta.structure.array.json string.quoted.double</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DFC6F9FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON prop string punctuation</string>
<key>scope</key>
<string>meta.structure.dictionary.json string punctuation.definition.string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#66BBDDFF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON array string puntuation</string>
<key>scope</key>
<string>meta.structure.array.json string punctuation.definition.string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#416BE9FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON array brackets</string>
<key>scope</key>
<string>meta.structure.array.json punctuation.definition.array</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FCC401FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JSON object braces</string>
<key>scope</key>
<string>meta.structure.dictionary.json punctuation.definition.dictionary</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FEDF76FF</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict></array>
<key>uuid</key>
<string>35279c3b-adad-473e-b960-fee631f4d9a5</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>author</key>
<string>Dmitri Voronianski (http://pixelhunter.me)</string>
<key>colorSpaceName</key>
<string>sRGB</string>
<key>gutterSettings</key>
<dict>
<key>background</key>
<string>#343d46</string>
<key>divider</key>
<string>#343d46</string>
<key>foreground</key>
<string>#65737e</string>
<key>selectionBackground</key>
<string>#4f5b66</string>
<key>selectionForeground</key>
<string>#a7adba</string>
</dict>
<key>name</key>
<string>Oceanic Next</string>
<key>semanticClass</key>
<string>oceanic.next.dark</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#1B2B34</string>
<key>caret</key>
<string>#c0c5ce</string>
<key>foreground</key>
<string>#CDD3DE</string>
<key>invisibles</key>
<string>#65737e</string>
<key>lineHighlight</key>
<string>#65737e55</string>
<key>selection</key>
<string>#4f5b66</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comments</string>
<key>scope</key>
<string>comment, punctuation.definition.comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#65737e</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#CDD3DE</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword, Storage</string>
<key>scope</key>
<string>keyword, storage.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#C594C5</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator, Misc</string>
<key>scope</key>
<string>keyword.operator, constant.other.color, punctuation, meta.tag, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5FB3B3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag</string>
<key>scope</key>
<string>entity.name.tag, meta.tag.sgml, markup.deleted.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EB606B</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function, Special Method, Block Level</string>
<key>scope</key>
<string>entity.name.function, meta.function-call, support.function, keyword.other.special-method, meta.block-level</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6699CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Other Variable, String Link</string>
<key>scope</key>
<string>support.other.variable, string.other.link</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F2777A</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number, Constant, Function Argument, Tag Attribute, Embedded</string>
<key>scope</key>
<string>constant.numeric, constant.language, support.constant, constant.character, variable.parameter, punctuation.section.embedded, keyword.other.unit</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#F99157</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String, Symbols, Inherited Class, Markup Heading</string>
<key>scope</key>
<string>string, constant.other.symbol, constant.other.key, entity.other.inherited-class, markup.heading, markup.inserted.git_gutter, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>normal</string>
<key>foreground</key>
<string>#99C794</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class, Support</string>
<key>scope</key>
<string>entity.name.class, entity.name.type.class, support.type, support.class, support.orther.namespace.use.php, meta.use.php, support.other.namespace.php, markup.changed.git_gutter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FAC863</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Sub-methods</string>
<key>scope</key>
<string>entity.name.module.js, variable.import.parameter.js, variable.other.class.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EC5F67</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Language methods</string>
<key>scope</key>
<string>variable.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#EC5F67</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>entity.name.method.js</string>
<key>scope</key>
<string>entity.name.method.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D8DEE9</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>meta.method.js</string>
<key>scope</key>
<string>meta.method.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fff</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Attributes</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BB80B3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99C794</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#EC5F67</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#BB80B3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regular Expressions</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5FB3B3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Escape Characters</string>
<key>scope</key>
<string>constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#5FB3B3</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>URL</string>
<key>scope</key>
<string>*url*, *link*, *uri*</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Search Results Nums</string>
<key>scope</key>
<string>constant.numeric.line-number.find-in-files - match</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#AB7967</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Search Results Lines</string>
<key>scope</key>
<string>entity.name.filename.find-in-files</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#99C794</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Decorators</string>
<key>scope</key>
<string>tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#6699CC</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>ES7 Bind Operator</string>
<key>scope</key>
<string>source.js constant.other.object.key.js string.unquoted.label.js</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#EC5F67</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SublimeLinter Error</string>
<key>scope</key>
<string>sublimelinter.mark.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#D02000</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Gutter Mark</string>
<key>scope</key>
<string>sublimelinter.gutter-mark</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#FFFFFF</string>
</dict>
</dict><dict>
<key>name</key>
<string>SublimeLinter Warning</string>
<key>scope</key>
<string>sublimelinter.mark.warning</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#DDB700</string>
</dict>
</dict></array>
<key>uuid</key>
<string>21a3a5f5-e82f-48a8-bc8b-9aef307f6131</string>
</dict>
</plist>
{
"user": {
"debug": false,
"delay": 0.25,
"error_color": "D02000",
"gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme",
"gutter_theme_excludes": [],
"lint_mode": "background",
"linters": {
"annotations": {
"@disable": false,
"args": [],
"errors": [
"FIXME"
],
"excludes": [],
"warnings": [
"TODO",
"README"
]
},
"jshint": {
"@disable": false,
"args": [],
"excludes": []
}
},
"mark_style": "solid underline",
"no_column_highlights_line": false,
"paths": {
"linux": [],
"osx": [],
"windows": []
},
"python_paths": {
"linux": [],
"osx": [],
"windows": []
},
"rc_search_limit": 3,
"shell_timeout": 10,
"show_errors_on_save": false,
"show_marks_in_minimap": true,
"syntax_map": {
"html (django)": "html",
"html (rails)": "html",
"html 5": "html",
"php": "html",
"python django": "python"
},
"warning_color": "DDB700",
"wrap_find": true
}
}
{
"folders":
[
{
"follow_symlinks": true,
"path": "/Users/nross/Work/javascript/totem"
}
],
"settings":
{
"tab_size": 2,
"translate_tabs_to_spaces": true
}
}
This file has been truncated, but you can view the full file.
{
"auto_complete":
{
"selected_items":
[
[
"error",
"error"
],
[
"disc",
"discoveryPath"
],
[
"i",
"ignorablePromise"
],
[
"dimen",
"dimensionsPromise"
],
[
"dim",
"dimensionsPromise"
],
[
"dataS",
"dataStore"
],
[
"dataSour",
"dataSourcesService"
],
[
"unique",
"uniqueDataStores"
],
[
"getD",
"getDimensionsByDataSource"
],
[
"datas",
"dataSources"
],
[
"datasourc",
"dataSource"
],
[
"assign",
"assignDimensionUrn"
],
[
"dimensi",
"dimension"
],
[
"addDefault",
"addDefaultLineAesthetics"
],
[
"coral-Ic",
"coral-Icon--edit"
],
[
"coral-Icon-",
"coral-Icon--sizeXS"
],
[
"totem-dv-Editor-mapp",
"totem-dv-Editor-mappingTitle"
],
[
"totem-dv-ma",
"totem-dv-Editor-mappingPod"
],
[
"for",
"for for (…) {…}"
],
[
"getDim",
"getDimensionMetadataFromConfig"
],
[
"dimensionsP",
"dimensionsPromisesByDataSource"
],
[
"getDime",
"getDimensionsByDataSources"
],
[
"getMetrics",
"getMetricsAndVariablesByDataSource"
],
[
"getM",
"getMetricsAndVariablesByDataSource"
],
[
"dataSourc",
"dataSourcesDimensionsPromise"
],
[
"var",
"variables"
],
[
"dataSt",
"dataStoresPromise"
],
[
"getData",
"getDataSourceMetadata"
],
[
"vari",
"variableDimension"
],
[
"dime",
"dimensionByRefId"
],
[
"dimensionS",
"dimensionsByAesthetic"
],
[
"validate",
"validateAddLinetypeDimension"
],
[
"DE",
"DIMENSION_TYPE"
],
[
"d",
"dimensions"
],
[
"instr",
"instrumentId"
],
[
"mediaD",
"mediaDefinition"
],
[
"mediaDefinit",
"mediaDefinitionId"
],
[
"instru",
"instruments"
],
[
"insu",
"instrument"
],
[
"inst",
"instrument"
],
[
"media",
"mediaDefinition"
],
[
"mediaL",
"mediaLayout"
],
[
"mediaDe",
"mediaDefinition"
],
[
"instrumen",
"instrumentId"
],
[
"dashb",
"dashboardWorkspaceService"
],
[
"new",
"newInstrumentConfigVisible"
],
[
"action",
"actionBarHeight"
],
[
"u-totem-contentUnderE",
"u-totem-contentUnderEditActionBar"
],
[
"multip",
"multipleDataStores"
],
[
"vara",
"variableName"
],
[
"nonM",
"nonMeltColumn"
],
[
"non",
"nonMeltColumn"
],
[
"_x",
"_xFacetScale"
],
[
"brea",
"breaksAndLabels"
],
[
"_label",
"_labelMeasurementCache"
],
[
"facetk",
"facetKeys"
],
[
"avail",
"availableRenderArea"
],
[
"init",
"initializeMeasurement"
],
[
"M",
"MAX_VALUE"
],
[
"pre",
"previousX"
],
[
"valid",
"validLabelDisplays"
],
[
"L",
"LABEL_DISPLAY"
],
[
"_labelD",
"_labelData"
],
[
"ava",
"availableHeight"
],
[
"colI",
"columnIndex"
],
[
"labelM",
"labelMetrics"
],
[
"_max",
"_maxStaggerLines"
],
[
"lineSt",
"lineStaggerPositions"
],
[
"maxW",
"maxWidth"
],
[
"maxWi",
"maxWidthCap"
],
[
"meaure",
"measurements"
],
[
"largestL",
"largestLabelDimensions"
],
[
"labelXP",
"labelXPos"
],
[
"labelX",
"labelXPositions"
],
[
"O",
"ORIENTATION"
],
[
"propr",
"property"
],
[
"_break",
"_breakMetrics"
],
[
"_bre",
"_breakMetrics"
],
[
"minor",
"minorTickSize"
],
[
"normli",
"normalizedProp"
],
[
"norm",
"normalizedSlice"
],
[
"agg",
"aggregateAes"
],
[
"flat",
"flattenCollection"
],
[
"aggreg",
"aggregateAes"
],
[
"aggre",
"aggregateAes"
],
[
"mapped",
"mappedButNotAggregatedVars"
],
[
"tra",
"transform"
],
[
"index",
"itemIndex"
],
[
"extern",
"externalFunctions"
],
[
"e",
"expression"
],
[
"sli",
"slicedFrame"
],
[
"eval",
"evaluatedVars"
],
[
"defa",
"defaultFunctions"
],
[
"ev",
"evaluatedVars"
],
[
"funct",
"functions"
],
[
"varia",
"variable"
],
[
"mappedV",
"mappedVariables"
],
[
"postMess",
"postMessageService"
],
[
"post",
"postMessageBundle"
],
[
"pos",
"postMessageBundle"
],
[
"bre",
"breadcrumbVisible"
],
[
"is-",
"is-transitioning"
],
[
"T",
"TRANSITION_END"
],
[
"blackb",
"blackbarVisible"
],
[
"black",
"blackbar"
],
[
"sidepanel",
"sidepanelVisible"
],
[
"sh",
"shellVisible"
],
[
"bread",
"breadcrumbBar"
],
[
"Bread",
"BreadcrumbBar"
],
[
"dat",
"data-init"
],
[
"data-",
"data-is-closed"
],
[
"prop",
"property"
],
[
"an",
"anomalyColor"
],
[
"_validateP",
"_validatePadding"
],
[
"_vlia",
"_validateParent"
],
[
"Con",
"Continuous"
],
[
"origin",
"originsByOrientation"
],
[
"super",
"super-dv A generic super function call."
],
[
"ex",
"expandFunction"
],
[
"paddedR",
"paddedRangeMin"
],
[
"upper",
"upperRangePadding"
],
[
"paddedRan",
"paddedRangeMax"
],
[
"_vali",
"_validateRangePadding"
],
[
"_upp",
"_upperRangePadding"
],
[
"_lo",
"_lowerRangePadding"
],
[
"wid",
"widths"
],
[
"legendL",
"legendLayouts"
],
[
"legendDim",
"legendDim"
]
]
},
"buffers":
[
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/controllers/data-panel-ctrl.js",
"settings":
{
"buffer_size": 1356,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/controllers/line-ctrl.js",
"settings":
{
"buffer_size": 14324,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/adapters/rs/query-reader.js",
"settings":
{
"buffer_size": 4740,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/directives/dimension-pod.js",
"settings":
{
"buffer_size": 282,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/services/dv-config-service.js",
"settings":
{
"buffer_size": 833,
"line_ending": "Unix"
}
},
{
"file": "Preferences.sublime-settings",
"settings":
{
"buffer_size": 672,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/adapters/rs/adapter.js",
"settings":
{
"buffer_size": 558,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/adapters/rs/query-writer.js",
"settings":
{
"buffer_size": 2351,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/gulpfile.js",
"settings":
{
"buffer_size": 12423,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/README.md",
"settings":
{
"buffer_size": 2687,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/webpack.config.js",
"settings":
{
"buffer_size": 298,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/editor.js",
"settings":
{
"buffer_size": 1029,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/adapters/rs/metadata-loader.js",
"settings":
{
"buffer_size": 4057,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/server/routes/reporting-services.js",
"settings":
{
"buffer_size": 1929,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/app.js",
"settings":
{
"buffer_size": 4508,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/main.js",
"settings":
{
"buffer_size": 4456,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/common/services/q-ignorify.js",
"settings":
{
"buffer_size": 2461,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/renderer/renderer.js",
"settings":
{
"buffer_size": 9029,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/editor.html",
"settings":
{
"buffer_size": 6767,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/directives/dimension-pod.tpl.html",
"settings":
{
"buffer_size": 1032,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/instrument/directives/new-instrument-configuration.tpl.html",
"settings":
{
"buffer_size": 458,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/dashboard/views/dashboard.tpl.html",
"settings":
{
"buffer_size": 2932,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/dashboard/directives/responsive-evaluator.js",
"settings":
{
"buffer_size": 3836,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/dist/scripts/instruments.min.js",
"settings":
{
"buffer_size": 21050,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/instrument/directives/instrument.tpl.html",
"settings":
{
"buffer_size": 442,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/dist/instruments/dv/index.js",
"settings":
{
"buffer_size": 15866,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/instruments/dv/editor/editor.styl",
"settings":
{
"buffer_size": 3424,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/dashboard/controllers/dashboard-ctrl.js",
"settings":
{
"buffer_size": 4557,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/common/services/ad-hoc-service.js",
"settings":
{
"buffer_size": 14062,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/server/lib/ims.js",
"settings":
{
"buffer_size": 10932,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/server/routes/instruments.js",
"settings":
{
"buffer_size": 3709,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/server/lib/rs.js",
"settings":
{
"buffer_size": 2813,
"line_ending": "Unix"
}
},
{
"file": "/Users/nross/Work/javascript/totem/client/scripts/ad-hoc/views/validate-upload.tpl.html",
"settings":
{
"buffer_size": 3149,
"line_ending": "Unix"
}
},
{
"contents": "Searching 220 files for \"dataSourcesService\"\n\n/Users/nross/Work/javascript/totem/client/dist/scripts/totem.min.js:\n 5074 ])\n 5075 .service('rsDataAdapter', __webpack_require__(116))\n 5076: .service('dataSourcesService', __webpack_require__(107))\n 5077 .service('dvConfigService', __webpack_require__(108))\n 5078 .constant('aestheticDefaults', __webpack_require__(109))\n ....\n 6612 'use strict';\n 6613 \n 6614: module.exports = function($scope, $q, dataSourcesService) {\n 6615 var ignorablePromise;\n 6616 \n ....\n 6619 $scope.variables = [];\n 6620 \n 6621: dataSourcesService.getDataSources().then(function(dataSources) {\n 6622 $scope.dataSources = dataSources;\n 6623 \n 6624 if ($scope.dataSources && $scope.dataSources.length) {\n 6625: dataSourcesService.currentDataSource = $scope.dataSources[0];\n 6626 }\n 6627 });\n 6628 \n 6629 $scope.dataSourceChange = function() {\n 6630: dataSourcesService.currentDataSource = $scope.selectedDataSource;\n 6631 };\n 6632 \n 6633 $scope.$watch(function() {\n 6634: return dataSourcesService.currentDataSource;\n 6635 }, function(currentDataSource) {\n 6636 if (currentDataSource) {\n ....\n 6639 ignorablePromise.ignore();\n 6640 }\n 6641: ignorablePromise = dataSourcesService.getDimensionsByDataSource(currentDataSource.resourceUrn);\n 6642 ignorablePromise = $q.when(ignorablePromise).ignorify();\n 6643 ignorablePromise.then(function(dataSource) {\n ....\n 7008 };\n 7009 \n 7010: module.exports = function($scope, $q, dataSourcesService, aestheticDefaults, dvConfigService, rsDataAdapter) {\n 7011 $scope.dimensionsByAesthetic = {};\n 7012 $scope.instrument.config = $scope.instrument.config || dvConfigService.createConfig();\n ....\n 7015 if ($scope.instrument.config) {\n 7016 // Wrap the result in a promise if it didn't return one.\n 7017: $q.when(rsDataAdapter.readQuery($scope.instrument.config.source, dataSourcesService))\n 7018 .then(function(dimensionByRefId) {\n 7019 dimensionByRefId = dimensionByRefId || {};\n 7020: var aestheticMappings = getAestheticMappings($scope.instrument.config, dimensionByRefId, dataSourcesService.assignDimensionUrn);\n 7021 $scope.dimensionsByAesthetic = aestheticMappings.dimensionsByAesthetic;\n 7022 $scope.constantByAesthetic = aestheticMappings.constantByAesthetic;\n ....\n 7262 * metadata from Reporting Services. This metadata will be used to add information to the raw dimension\n 7263 * object in the query that doesn't have sufficient metadata.\n 7264: * @param {DataSourcesService} dataSourcesService A service to pull the proper dimension metadata\n 7265 * @param {Object} query The raw Reporting Services query\n 7266 * @return {Promise} Asynchronous promise\n 7267 */\n 7268: var getDimensionMetadataFromConfig = function(dataSourcesService, query) {\n 7269 var uniqueDataStores = [];\n 7270 query.filters.forEach(function(filter) {\n ....\n 7278 if (uniqueDataStores.length) {\n 7279 var defaultDataSource = uniqueDataStores[0];\n 7280: dataSourcesService.getDataSources()\n 7281 .then(function(dataSources) {\n 7282 for (var i = 0; i < dataSources.length; i++) {\n 7283 var dataSource = dataSources[i];\n 7284 if (defaultDataSource === dataSource.resourceUrn) {\n 7285: dataSourcesService.currentDataSource = dataSource;\n 7286 }\n 7287 }\n ....\n 7289 }\n 7290 \n 7291: return dataSourcesService.getDimensionsByDataSources(uniqueDataStores);\n 7292 };\n 7293 \n ....\n 7368 };\n 7369 \n 7370: module.exports = function(source, dataSourcesService) {\n 7371 var query = getQueryFromSource(source);\n 7372 if (query) {\n 7373: return getDimensionMetadataFromConfig(dataSourcesService, query)\n 7374 .then(function(dimensionsByDataStore) {\n 7375: return getRefIdDimensionMap(query, dimensionsByDataStore, dataSourcesService.assignDimensionUrn);\n 7376 });\n 7377 }\n\n/Users/nross/Work/javascript/totem/client/dist/scripts/totem.min.js.map:\n 1: {\"version\":3,\"sources\":[\"webpack:///webpack/bootstrap 6c4786d82bd4d974f2e9\",\"webpack:///./client/scripts/main.js\",\"webpack:///./client/instruments ^\\\\.\\\\/.*(\\\\/editor\\\\/editor|\\\\/renderer\\\\/renderer)$\",\"webpack:///./client/scripts/manage/controllers/manage-ctrl.js\",\"webpack:///./client/scripts/ad-hoc/controllers/ad-hoc-manage-ctrl.js\",\"webpack:///./client/scripts/ad-hoc/controllers/collection-ctrl.js\",\"webpack:///./client/scripts/ad-hoc/controllers/validate-upload-ctrl.js\",\"webpack:///./client/scripts/dashboard/controllers/dashboard-ctrl.js\",\"webpack:///./client/scripts/instrument/controllers/instrument-ctrl.js\",\"webpack:///./client/scripts/common/filters/i18n.js\",\"webpack:///./client/scripts/common/services/post-message.js\",\"webpack:///./client/scripts/common/services/q-all-settled.js\",\"webpack:///./client/scripts/common/services/q-ignorify.js\",\"webpack:///./client/scripts/common/services/exception-handler.js\",\"webpack:///./client/scripts/common/services/sso.js\",\"webpack:///./client/scripts/common/directives/app.js\",\"webpack:///./client/scripts/common/services/dashboard-service.js\",\"webpack:///./client/scripts/common/services/tag-service.js\",\"webpack:///./client/scripts/common/services/tag-enum.js\",\"webpack:///./client/scripts/common/directives/selection-table.js\",\"webpack:///./client/scripts/common/directives/sort-header.js\",\"webpack:///./client/scripts/common/services/ad-hoc-service.js\",\"webpack:///./client/scripts/common/directives/name-editor.js\",\"webpack:///./client/scripts/common/services/dashboard-workspace.js\",\"webpack:///./client/scripts/common/directives/alert.js\",\"webpack:///./client/scripts/common/directives/modal-progress-indicator.js\",\"webpack:///./client/scripts/manage/directives/manage-toolbar.js\",\"webpack:///./client/scripts/manage/directives/dashboard-search.js\",\"webpack:///./client/scripts/manage/views/manage.tpl.html\",\"webpack:///./client/scripts/ad-hoc/views/ad-hoc.tpl.html\",\"webpack:///./client/scripts/ad-hoc/views/collection.tpl.html\",\"webpack:///./client/scripts/ad-hoc/views/validate-upload.tpl.html\",\"webpack:///./client/scripts/dashboard/views/dashboard.tpl.html\",\"webpack:///./client/scripts/instrument/views/instrument.tpl.html\",\"webpack:///./client/scripts/instrument/views/render-instrument.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-manage-toolbar.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-search.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-capacity.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-data-upload.js\",\"webpack:///./client/scripts/dashboard/directives/dashboard-canvas.js\",\"webpack:///./client/scripts/dashboard/directives/dashboard-rail.js\",\"webpack:///./client/scripts/dashboard/directives/responsive-evaluator.js\",\"webpack:///./client/scripts/dashboard/directives/dashboard-instrument-chrome.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-track.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-menu.js\",\"webpack:///./client/scripts/dashboard/directives/ruler.js\",\"webpack:///./client/scripts/instrument/directives/instrument.js\",\"webpack:///./client/scripts/instrument/directives/new-instrument-configuration.js\",\"webpack:///./client/scripts/instrument/directives/instrument-editor-bootstrap.js\",\"webpack:///./client/scripts/dashboard/services/event-bus.js\",\"webpack:///./client/scripts/instrument/services/instrument-event-bus.js\",\"webpack:///./client/scripts/common/directives/app.tpl.html\",\"webpack:///./client/scripts/common/services/uuid.js\",\"webpack:///./client/scripts/common/services/dashboard-mixin.js\",\"webpack:///./client/scripts/common/services/sequence.js\",\"webpack:///./client/scripts/common/services/participable-mixin.js\",\"webpack:///./client/instruments ^\\\\.\\\\/.*\\\\/renderer\\\\/renderer$\",\"webpack:///./client/instruments ^\\\\.\\\\/.*\\\\/editor\\\\/editor$\",\"webpack:///./client/scripts/common/directives/steal-focus.js\",\"webpack:///./client/scripts/common/directives/name-editor.tpl.html\",\"webpack:///./client/scripts/common/directives/alert.tpl.html\",\"webpack:///./client/scripts/common/directives/modal-progress-indicator.tpl.html\",\"webpack:///./client/scripts/common/directives/share.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-file-upload.js\",\"webpack:///./client/scripts/common/services/debounce.js\",\"webpack:///./client/scripts/common/directives/draggable.js\",\"webpack:///./client/scripts/common/directives/resizeable.js\",\"webpack:///./client/scripts/common/directives/tap.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-range.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-rename-popover.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-delete-popover.js\",\"webpack:///./client/scripts/manage/directives/dashboard-search.tpl.html\",\"webpack:///./client/scripts/manage/directives/manage-toolbar.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-search.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-capacity.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-manage-toolbar.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-data-upload.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/dashboard-canvas.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/dashboard-instrument-chrome.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/dashboard-rail.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-track.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-menu.tpl.html\",\"webpack:///./client/scripts/instrument/directives/instrument.tpl.html\",\"webpack:///./client/scripts/instrument/directives/new-instrument-configuration.tpl.html\",\"webpack:///./common/dashboard-util.js\",\"webpack:///./client/instruments/demo-html/renderer/renderer.js\",\"webpack:///./client/instruments/dv/editor/editor.js\",\"webpack:///./client/instruments/dv/renderer/renderer.js\",\"webpack:///./client/instruments/key-metric/renderer/renderer.js\",\"webpack:///./client/instruments/starfield/renderer/renderer.js\",\"webpack:///./client/instruments/text/editor/editor.js\",\"webpack:///./client/instruments/text/renderer/renderer.js\",\"webpack:///./client/instruments/twitter-trends/renderer/renderer.js\",\"webpack:///./client/scripts/common/directives/invalid-share-action-alert.js\",\"webpack:///./client/scripts/common/directives/user-search.js\",\"webpack:///./client/scripts/common/directives/share.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-file-upload.tpl.html\",\"webpack:///./client/scripts/common/services/drag-resize-util.js\",\"webpack:///./client/scripts/common/services/auto-scroll.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-range.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-popover.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-rename-popover.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-delete-popover.tpl.html\",\"webpack:///./client/instruments/dv/editor/editor.html\",\"webpack:///./client/instruments/text/editor/editor.html\",\"webpack:///./client/instruments/text/editor/directives/quill.html\",\"webpack:///./client/instruments/text/editor/directives/quill-toolbar.html\",\"webpack:///./client/instruments/text/editor/directives/quill-editor.html\",\"webpack:///./client/instruments/dv/editor/services/data-sources-service.js\",\"webpack:///./client/instruments/dv/editor/services/dv-config-service.js\",\"webpack:///./client/instruments/dv/editor/services/aesthetic-defaults.js\",\"webpack:///./client/instruments/dv/editor/directives/y-aesthetic-configuration.js\",\"webpack:///./client/instruments/dv/editor/directives/variable-configuration.js\",\"webpack:///./client/instruments/dv/editor/directives/dimension-pod.js\",\"webpack:///./client/instruments/dv/editor/controllers/data-panel-ctrl.js\",\"webpack:///./client/instruments/dv/editor/controllers/line-ctrl.js\",\"webpack:///./client/instruments/dv/enum/melt-column.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/adapter.js\",\"webpack:///./client/scripts/common/directives/invalid-share-action-alert.tpl.html\",\"webpack:///./client/scripts/common/services/user-service.js\",\"webpack:///./client/scripts/common/directives/user-search.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-popover.tpl.html\",\"webpack:///./client/instruments/dv/enum/dimension-type.js\",\"webpack:///./client/instruments/dv/editor/directives/y-aesthetic-configuration.tpl.html\",\"webpack:///./client/instruments/dv/editor/directives/variable-configuration.tpl.html\",\"webpack:///./client/instruments/dv/editor/directives/dimension-pod.tpl.html\",\"webpack:///./client/instruments/dv/enum/filter-type.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/query-reader.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/query-writer.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/value-loader.js\"],\"names\":[],\"mappings\":\";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wC;;;;;;;ACtCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA0B,YAAY,aAAa,aAAa;AAChE;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA,2BAA0B,YAAY,aAAa,aAAa;AAChE;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA,eAAc;AACd,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,yCAAwC,gEAAgE;AACxG;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,gBAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;;;;;;AChFH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;;;;;;AC1CH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC,2EAA2E;AAC3G;AACA,UAAS;AACT;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,wCAAwC;AACvE;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA,IAAG;;;;;;;ACjFH;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO,qDAAqD;AAC5D,QAAO,qDAAqD;AAC5D,QAAO,wDAAwD;AAC/D,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,mBAAkB,8BAA8B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAkB,4BAA4B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA,IAAG;;;;;;;ACrHH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;AACL;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACrHH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,sCAAqC,uCAAuC;AAC5E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;;;;;;AC9DH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,qDAAoD;AACpD;AACA,6DAA4D;AAC5D;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACjBH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC/DH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB,YAAW;AACX,qBAAoB;AACpB,YAAW;AACX,UAAS;AACT;AACA;AACA,MAAK;AACL,IAAG;;;;;;;ACtBH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL,IAAG;;;;;;;ACpEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;;;;;;;ACzBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AC5BD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACXH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;;AAEP;AACA;;AAEA;AACA,sBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACrSH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC7FH;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACJH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACxDH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC9BH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACraH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACbH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,wBAAuB,iCAAiC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,iBAAgB,0BAA0B,EAAE;AAC5C,iBAAgB,qBAAqB,EAAE;AACvC,iBAAgB,gCAAgC;AAChD;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;;AAGH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,EAAC;;;;;;;AC5GD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC1BH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACzBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;;AAEA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb,YAAW;;AAEX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,IAAG;;;;;;;ACpNH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACjBH,2/BAA0/B,iBAAiB,yUAAyU,mBAAmB,wVAAwV,oBAAoB,wUAAwU,kBAAkB,wQAAwQ,sBAAsB,kLAAkL,oBAAoB,+0BAA+0B,6IAA6I,uIAAuI,2BAA2B,MAAM,kBAAkB,2EAA2E,6CAA6C,mKAAmK,0CAA0C,qKAAqK,oBAAoB,wPAAwP,2CAA2C,uD;;;;;;ACAx8I,85BAA65B,iBAAiB,6RAA6R,sBAAsB,yPAAyP,uBAAuB,mRAAmR,oBAAoB,kUAAkU,qBAAqB,ysBAAysB,2BAA2B,MAAM,mBAAmB,UAAU,wBAAwB,kKAAkK,iBAAiB,sEAAsE,cAAc,sEAAsE,gCAAgC,qHAAqH,qBAAqB,gBAAgB,oBAAoB,sF;;;;;;ACAz6G,qHAAoH,8BAA8B,gLAAgL,mBAAmB,uNAAuN,iBAAiB,+8CAA+8C,iBAAiB,0OAA0O,wBAAwB,uWAAuW,uBAAuB,6RAA6R,0BAA0B,gRAAgR,qBAAqB,4HAA4H,yBAAyB,uHAAuH,oBAAoB,8HAA8H,uBAAuB,wHAAwH,qBAAqB,oUAAoU,oBAAoB,uOAAuO,gCAAgC,0SAA0S,qBAAqB,gBAAgB,oBAAoB,8PAA8P,mFAAmF,yQAAyQ,iDAAiD,qGAAqG,8BAA8B,qGAAqG,4BAA4B,6gB;;;;;;ACA5oL,kMAAiM,iCAAiC,qLAAqL,mBAAmB,iKAAiK,iBAAiB,kWAAkW,sBAAsB,gOAAgO,+BAA+B,mFAAmF,+BAA+B,+MAA+M,uBAAuB,kmBAAkmB,wCAAwC,oiBAAoiB,qCAAqC,sEAAsE,SAAS,2UAA2U,2BAA2B,qE;;;;;;ACAnrG,mbAAkb,mBAAmB,mIAAmI,iBAAiB,oYAAoY,+BAA+B,6JAA6J,2BAA2B,wIAAwI,iBAAiB,wJAAwJ,eAAe,+JAA+J,qBAAqB,4JAA4J,eAAe,2eAA2e,0BAA0B,sDAAsD,0FAA0F,0hB;;;;;;ACAx+E,yRAAwR,mBAAmB,wHAAwH,iBAAiB,uH;;;;;;ACApb,sQ;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA,YAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAAyB,sCAAsC;AAC/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,kBAAkB;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC1GH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACjBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,8BAA6B,eAAe;AAC5C;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;;AAEA;AACA,uDAAsD;AACtD;AACA,qDAAoD;AACpD;AACA,6B;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACpCH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;ACdD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAe;;AAEf,qDAAoD;AACpD,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA,uBAAsB,8CAA8C,EAAE;AACtE,uBAAsB,+CAA+C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;;AAEb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA2B,yBAAyB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,gBAAe;AACf;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC1OH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AClBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACtFH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACpCH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAAyC;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC;AACzC,0CAAyC;AACzC,0CAAyC;;AAEzC;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC1MH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACnEH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,IAAG;;;;;;;AChCH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,cAAa;;AAEb;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AChGH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;AACA,IAAG;;;;;;;AC5CH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;;;;;;ACnDH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AChBH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,cAAc;AAC7B;AACA,gBAAe,cAAc;AAC7B;AACA,gBAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,0BAA0B;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB;AACA,gBAAe,cAAc;AAC7B;AACA,gBAAe,cAAc;AAC7B;AACA,gBAAe,OAAO;AACtB;AACA,kBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,cAAc;AAC7B,mBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA,IAAG;AACH;;;;;;;AClHA,sI;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;;;;;;ACTH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,0BAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oBAAmB;AACnB;AACA;AACA,iEAAgE,gCAAgC,EAAE;AAClG,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0BAAyB,yBAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;;AAEA;;AAEA,wBAAuB,yBAAyB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA,6CAA4C;AAC5C;AACA;;AAEA;AACA;;AAEA;AACA,QAAO;;AAEP;AACA;AACA,kBAAiB,OAAO;AACxB;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;;AAEA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,MAAM;AACvB;AACA;AACA,kBAAiB,MAAM;AACvB,kBAAiB,OAAO;AACxB;AACA;AACA,kBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;;;;;;AChSH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;;;;;;AChBH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,IAAG;;;;;;;ACtEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACvBH,gLAA+K,QAAQ,+S;;;;;;ACAvL,sEAAqE,0GAA0G,qVAAqV,QAAQ,kDAAkD,WAAW,iB;;;;;;ACAzkB,2EAA0E,sBAAsB,uF;;;;;;ACAhG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,+BAA8B,mCAAmC;AACjE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;;;;;;ACrIH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC/DH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,EAAC;;;;;;;ACrBD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,+BAA8B,yBAAyB;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA,0CAAyC,yBAAyB;AAClE;;AAEA;AACA;AACA,kCAAiC,WAAW;AAC5C;;AAEA;AACA;AACA;AACA,YAAW;;AAEX;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kCAAiC,uBAAuB;AACxD;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;AACf,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC7JH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,wCAAwC;AACxE;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA,4CAA2C,wCAAwC;AACnF;;AAEA;AACA;AACA,oCAAmC,wCAAwC;AAC3E;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;AACf,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACnJH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACrBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;;;;;;ACbH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,0BAAyB;;AAEzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAiC;AACjC;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC3DH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACrCH,y/D;;;;;;ACAA,4iBAA2iB,mBAAmB,8jBAA8jB,kBAAkB,mTAAmT,iBAAiB,wTAAwT,sBAAsB,opCAAopC,2BAA2B,iTAAiT,iBAAiB,0VAA0V,mBAAmB,6OAA6O,gCAAgC,2BAA2B,sCAAsC,8UAA8U,mBAAmB,oVAAoV,iCAAiC,oJAAoJ,kCAAkC,6HAA6H,iCAAiC,2BAA2B,0BAA0B,8UAA8U,mBAAmB,oVAAoV,kCAAkC,2KAA2K,mCAAmC,gD;;;;;;ACAh9L,s+D;;;;;;ACAA,2FAA0F,8BAA8B,+IAA+I,gCAAgC,wGAAwG,uCAAuC,8B;;;;;;ACAtb,6iBAA4iB,mBAAmB,gSAAgS,gBAAgB,oTAAoT,iBAAiB,4VAA4V,mBAAmB,4TAA4T,kBAAkB,+OAA+O,yBAAyB,2BAA2B,+BAA+B,8UAA8U,mBAAmB,oVAAoV,mCAAmC,4KAA4K,oCAAoC,gD;;;;;;ACA3lG,oSAAmS,kCAAkC,4JAA4J,0CAA0C,+CAA+C,wCAAwC,+CAA+C,uCAAuC,+CAA+C,2CAA2C,+CAA+C,yCAAyC,6L;;;;;;ACA12B,oEAAmE,4CAA4C,w+BAAw+B,+BAA+B,uB;;;;;;ACAtnC,4HAA2H,2DAA2D,8BAA8B,oBAAoB,wyC;;;;;;ACAxO,oUAAmU,2BAA2B,yBAAyB,4CAA4C,KAAK,kBAAkB,wC;;;;;;ACA1b,k0CAAi0C,oS;;;;;;ACAj0C,2GAA0G,oCAAoC,+CAA+C,GAAG,qjBAAqjB,wBAAwB,qMAAqM,+BAA+B,2BAA2B,GAAG,ygBAAygB,iCAAiC,2BAA2B,GAAG,q5BAAq5B,+BAA+B,2C;;;;;;ACA3gF,kRAAiR,wEAAwE,wFAAwF,8BAA8B,iB;;;;;;ACA/c,8RAA6R,qKAAqK,8D;;;;;;ACAlc;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,KAAI;AACJ,IAAG;AACH;AACA,G;;;;;;AChCA;;AAEA;AACA;AACA;AACA;;;;;;;ACLA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACtBA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0BAAyB,kBAAkB;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA,YAAW;AACX;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;;;;;;AC/QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZA;AACA;AACA;AACA;AACA;;;;;;;ACJA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA,yBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,mBAAmB;AACvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,mBAAmB;AACvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,mCAAkC,uCAAuC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;ACrSA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,qBAAqB;AAC3D;AACA,sDAAqD,YAAY,kBAAkB,YAAY;AAC/F;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,cAAa;;AAEb;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACpCH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kBAAiB;AACjB;AACA,kBAAiB;AACjB,gBAAe;AACf;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA,4BAA2B,kBAAkB;AAC7C;AACA;AACA,mCAAkC,WAAW;AAC7C;AACA;;AAEA,4BAA2B,mBAAmB;AAC9C;AACA;AACA,oCAAmC,aAAa;AAChD;AACA;;AAEA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC5GH,qEAAoE,qBAAqB,yhDAAyhD,8BAA8B,wPAAwP,qCAAqC,sHAAsH,kCAAkC,sQAAsQ,uBAAuB,2UAA2U,qCAAqC,41BAA41B,mBAAmB,+dAA+d,mBAAmB,mIAAmI,iBAAiB,gD;;;;;;ACAvsI,gSAA+R,uBAAuB,0DAA0D,kBAAkB,kB;;;;;;ACAlY;AACA;AACA;;AAEA;AACA;AACA,gBAAe,MAAM;AACrB,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,MAAM;AACrB,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe,MAAM;AACrB,gBAAe,OAAO;AACtB,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe,MAAM;AACrB,gBAAe,OAAO;AACtB,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC7DH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA,gBAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA,IAAG;;;;;;;AC3GH,yEAAwE,iDAAiD,wDAAwD,QAAQ,iF;;;;;;ACAzL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,8CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA,kBAAiB;AACjB;;AAEA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AChEH,oUAAmU,yBAAyB,kTAAkT,mBAAmB,kIAAkI,kBAAkB,gE;;;;;;ACArzB,6SAA4S,wBAAwB,wLAAwL,mBAAmB,kIAAkI,mBAAmB,gE;;;;;;ACApqB,mmCAAkmC,eAAe,2cAA2c,iBAAiB,+3K;;;;;;ACA7kD,4G;;;;;;ACAA,uG;;;;;;ACAA,m8G;;;;;;ACAA,iC;;;;;;ACAA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;;AAEL;AACA;AACA;AACA,iBAAgB,MAAM;AACtB,iBAAgB,0BAA0B,mBAAmB,EAAE;AAC/D;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT,MAAK;;AAEL;;AAEA;AACA;;AAEA;;;;;;;ACxHA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAgB,OAAO;AACvB;AACA;AACA;AACA,mBAAkB;AAClB,2BAA0B;AAC1B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC/BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AChBD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;;;;;;ACZA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;;AAEb;;AAEA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;;;;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;AC1CA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,kCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;AACnB,qBAAoB;AACpB,kBAAiB;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA6B,kBAAkB;AAC/C;;AAEA,iCAAgC;AAChC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,wCAAwC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA0B;AAC1B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA,8DAA6D;;AAE7D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;ACzcA;AACA;AACA;AACA,EAAC;;AAED;;;;;;;ACLA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACRA,+YAA8Y,WAAW,kB;;;;;;ACAzZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,IAAG;;;;;;;AC1BH,wZAAuZ,kCAAkC,kG;;;;;;ACAzb,sF;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;;;;;;ACPA,odAAmd,mBAAmB,+gB;;;;;;ACAte,qEAAoE,iBAAiB,q/BAAq/B,8fAA8f,eAAe,oGAAoG,iOAAiO,kGAAkG,2GAA2G,qBAAqB,SAAS,mGAAmG,oIAAoI,eAAe,oFAAoF,uDAAuD,kEAAkE,kDAAkD,uBAAuB,UAAU,aAAa,cAAc,eAAe,6CAA6C,yDAAyD,uBAAuB,aAAa,wBAAwB,qBAAqB,SAAS,8rBAA8rB,kDAAkD,uBAAuB,UAAU,6BAA6B,aAAa,cAAc,eAAe,qCAAqC,yDAAyD,uBAAuB,aAAa,wBAAwB,yHAAyH,QAAQ,qmBAAqmB,mBAAmB,6gB;;;;;;ACAlnJ,oQAAmQ,oLAAoL,uEAAuE,kBAAkB,6JAA6J,qBAAqB,gPAAgP,0CAA0C,yCAAyC,2BAA2B,MAAM,iBAAiB,e;;;;;;ACAvjC;AACA;AACA;AACA,EAAC;;AAED;;;;;;;ACLA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,mBAAmB;AAC/B,aAAY,OAAO;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA,aAAY,MAAM;AAClB,aAAY,OAAO;AACnB,aAAY,eAAe;AAC3B,aAAY,OAAO;AACnB;AACA;AACA;AACA,kBAAiB,6BAA6B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;;;;;;;;AClIA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;AACA,0BAAyB,oBAAoB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7FA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,+BAA8B,wBAAwB;AACtD;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA\",\"sourcesContent\":[\" \\t// The module cache\\n \\tvar installedModules = {};\\n\\n \\t// The require function\\n \\tfunction __webpack_require__(moduleId) {\\n\\n \\t\\t// Check if module is in cache\\n \\t\\tif(installedModules[moduleId])\\n \\t\\t\\treturn installedModules[moduleId].exports;\\n\\n \\t\\t// Create a new module (and put it into the cache)\\n \\t\\tvar module = installedModules[moduleId] = {\\n \\t\\t\\texports: {},\\n \\t\\t\\tid: moduleId,\\n \\t\\t\\tloaded: false\\n \\t\\t};\\n\\n \\t\\t// Execute the module function\\n \\t\\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\\n\\n \\t\\t// Flag the module as loaded\\n \\t\\tmodule.loaded = true;\\n\\n \\t\\t// Return the exports of the module\\n \\t\\treturn module.exports;\\n \\t}\\n\\n\\n \\t// expose the modules object (__webpack_modules__)\\n \\t__webpack_require__.m = modules;\\n\\n \\t// expose the module cache\\n \\t__webpack_require__.c = installedModules;\\n\\n \\t// __webpack_public_path__\\n \\t__webpack_require__.p = \\\"\\\";\\n\\n \\t// Load entry module and return exports\\n \\treturn __webpack_require__(0);\\n\\n\\n/** WEBPACK FOOTER **\\n ** webpack/bootstrap 6c4786d82bd4d974f2e9\\n **/\",\"'use strict';\\n/* global window: true */\\n\\nangular\\n .module('totem', [\\n 'ui.router',\\n 'ngCoral',\\n require('./manage/controllers/manage-ctrl').name,\\n require('./ad-hoc/controllers/ad-hoc-manage-ctrl').name,\\n require('./ad-hoc/controllers/collection-ctrl').name,\\n require('./ad-hoc/controllers/validate-upload-ctrl').name,\\n require('./dashboard/controllers/dashboard-ctrl').name,\\n require('./instrument/controllers/instrument-ctrl').name,\\n require('./common/filters/i18n').name,\\n require('./common/services/post-message').name,\\n require('./common/directives/app').name,\\n require('./common/services/q-all-settled').name,\\n require('./common/services/q-ignorify').name,\\n require('./common/services/exception-handler').name,\\n require('./common/services/sso').name\\n ])\\n .constant('gridSpacing', window.Totem ? window.Totem.config.gridSpacing : null)\\n .constant('user', window.Totem ? window.Totem.config.user : null)\\n .constant('minMediaDefinitionWidth', window.Totem ? window.Totem.config.minMediaDefinitionWidth : null)\\n .constant('minInstrumentWidth', window.Totem ? window.Totem.config.minInstrumentWidth : null)\\n .constant('minInstrumentHeight', window.Totem ? window.Totem.config.minInstrumentHeight : null)\\n .constant('duplicateInstrumentOffset', window.Totem ? window.Totem.config.duplicateInstrumentOffset : null)\\n .constant('ims', window.Totem ? window.Totem.config.ims : null)\\n .constant('env', window.Totem ? window.Totem.config.env : null)\\n .constant('externalServices', window.Totem ? window.Totem.config.externalServices : null)\\n .config(function(i18nBundleProvider, $controllerProvider, $compileProvider, $provide, $stateProvider, $urlRouterProvider, $httpProvider) {\\n i18nBundleProvider.bundle = window.i18n[window.Totem.config.locale];\\n\\n $stateProvider\\n .state('instrument', {\\n abstract: 'true',\\n url: '/dashboard/{dashboardId}/instrument/{instrumentId}',\\n template: require('./instrument/views/instrument.tpl.html'),\\n controller: 'InstrumentCtrl'\\n })\\n .state('instrument.edit', {\\n url: '/edit'\\n })\\n .state('renderInstrument', {\\n url: '/dashboard/{dashboardId}/instrument/{instrumentId}/render',\\n template: require('./instrument/views/render-instrument.tpl.html'),\\n controller: 'InstrumentCtrl'\\n })\\n .state('manage', {\\n url: '/dashboard/manage',\\n template: require('./manage/views/manage.tpl.html'),\\n controller: 'ManageCtrl'\\n })\\n .state('dashboard', {\\n abstract: true,\\n template: require('./dashboard/views/dashboard.tpl.html'),\\n controller: 'DashboardCtrl',\\n url: '/dashboard'\\n })\\n .state('dashboard.view', {\\n // If this dashboard ID param were on the parent \\\"dashboard\\\" state, it would reload the controller\\n // whenever going from viewing one dashboard to viewing another dashboard.\\n url: '/:dashboardId'\\n })\\n .state('dashboard.edit', {\\n // If this dashboard ID param were on the parent \\\"dashboard\\\" state, it would reload the controller\\n // whenever going from viewing one dashboard to viewing another dashboard.\\n url: '/:dashboardId/edit'\\n })\\n .state('ad-hoc',{\\n url: '/ad-hoc',\\n template: require('./ad-hoc/views/ad-hoc.tpl.html'),\\n controller: 'AdHocManageCtrl'\\n })\\n .state('collection', {\\n url:'/ad-hoc/:collectionId',\\n template: require('./ad-hoc/views/collection.tpl.html'),\\n controller: 'CollectionCtrl'\\n })\\n .state('validate', {\\n url:'/ad-hoc/validate/:pastebinId?collectionId',\\n template: require('./ad-hoc/views/validate-upload.tpl.html'),\\n controller: 'ValidateUploadCtrl'\\n });\\n\\n $urlRouterProvider.otherwise('dashboard/manage');\\n\\n $httpProvider.interceptors.push(function($q, sso) {\\n return {'request': sso.requestInterceptor.bind(sso)};\\n });\\n })\\n .run(function(postMessageService) {\\n // start the postMessage listeners.\\n postMessageService.listen();\\n })\\n;\\n\\n// Initialize instrument renderer and editor code. This should be done before the application is initialized since\\n// some of these instruments create angular directives, services, etc.\\nvar instrumentRequireContext = require.context('../instruments/', true, /^\\\\.\\\\/.*(\\\\/editor\\\\/editor|\\\\/renderer\\\\/renderer)$/);\\ninstrumentRequireContext.keys().forEach(instrumentRequireContext);\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/main.js\\n ** module id = 0\\n ** module chunks = 0\\n **/\",\"var map = {\\n\\t\\\"./demo-html/renderer/renderer\\\": 84,\\n\\t\\\"./dv/editor/editor\\\": 85,\\n\\t\\\"./dv/renderer/renderer\\\": 86,\\n\\t\\\"./key-metric/renderer/renderer\\\": 87,\\n\\t\\\"./starfield/renderer/renderer\\\": 88,\\n\\t\\\"./text/editor/editor\\\": 89,\\n\\t\\\"./text/renderer/renderer\\\": 90,\\n\\t\\\"./twitter-trends/renderer/renderer\\\": 91\\n};\\nfunction webpackContext(req) {\\n\\treturn __webpack_require__(webpackContextResolve(req));\\n};\\nfunction webpackContextResolve(req) {\\n\\treturn map[req] || (function() { throw new Error(\\\"Cannot find module '\\\" + req + \\\"'.\\\") }());\\n};\\nwebpackContext.keys = function webpackContextKeys() {\\n\\treturn Object.keys(map);\\n};\\nwebpackContext.resolve = webpackContextResolve;\\nmodule.exports = webpackContext;\\nwebpackContext.id = 1;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments ^\\\\.\\\\/.*(\\\\/editor\\\\/editor|\\\\/renderer\\\\/renderer)$\\n ** module id = 1\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.ManageCtrl', [\\n require('../../common/services/dashboard-service').name,\\n require('../../common/services/tag-service').name,\\n require('../../common/services/tag-enum').name,\\n require('../../common/directives/selection-table').name,\\n require('../../common/directives/sort-header').name,\\n require('../directives/manage-toolbar').name,\\n require('../directives/dashboard-search').name,\\n require('../../common/services/post-message').name\\n ])\\n .controller('ManageCtrl', function($scope, dashboardService, tagService, tagEnum, i18nFilter, postMessageService) {\\n var postTitle = function() {\\n postMessageService.post('external.pageTitle', i18nFilter('manageDashboards'));\\n };\\n\\n postTitle();\\n dashboardService.query().then(function(dashboards) {\\n $scope.dashboards = dashboards;\\n });\\n $scope.selectedDashboards = [];\\n $scope.sortPredicate = 'name';\\n $scope.sortReverse = false;\\n\\n $scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\\n // If we switch states within manage, make sure the page title remains.\\n if (fromState.name === 'manage' && toState.name !== 'manage') {\\n postTitle();\\n }\\n });\\n\\n $scope.getPluralizedOwners = function(owners) {\\n return i18nFilter('ownersValue', { OWNER: owners[0].entity.displayName, NUM_OWNERS: owners.length});\\n };\\n\\n $scope.getOwners = function(dashboard) {\\n return dashboard.getOwners();\\n };\\n\\n $scope.getFirstOwnerName = function(dashboard) {\\n var owners = dashboard.getOwners();\\n if (owners.length) {\\n return owners[0].entity.displayName;\\n }\\n return '';\\n };\\n\\n $scope.setSort = function(predicate) {\\n if ($scope.sortPredicate === predicate) {\\n $scope.sortReverse = !$scope.sortReverse;\\n } else {\\n $scope.sortReverse = false;\\n }\\n $scope.sortPredicate = predicate;\\n };\\n\\n $scope.isDashboardFavorited = function(dashboard) {\\n return dashboard.getFavoriteTag() != null;\\n };\\n\\n $scope.toggleFavorite = function(dashboard) {\\n var tag = dashboard.getFavoriteTag();\\n if (tag) {\\n dashboard.removeTag(tag);\\n tagService.destroy(tag);\\n } else {\\n tag = {dashboardId: dashboard._id, tag: tagEnum.FAVORITE};\\n dashboard.tags.push(tag);\\n tagService.save(tag);\\n }\\n };\\n\\n $scope.getSortDirection = function(predicate) {\\n if (predicate === $scope.sortPredicate) {\\n return $scope.sortReverse ? 'descending' : 'ascending';\\n }\\n\\n return null;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/controllers/manage-ctrl.js\\n ** module id = 2\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.AdHocManageCtrl', [\\n require('../../common/services/ad-hoc-service').name,\\n require('../../common/directives/selection-table').name,\\n require('../../common/directives/sort-header').name,\\n require('../directives/ad-hoc-manage-toolbar').name,\\n require('../directives/ad-hoc-search').name,\\n require('../directives/ad-hoc-capacity').name\\n ])\\n .controller('AdHocManageCtrl', function($scope, adHocService) {\\n adHocService.getAll().then(function(response) {\\n $scope.adHocCollections = response;\\n });\\n $scope.selectedAdHocCollections = [];\\n $scope.sortPredicate = 'name';\\n $scope.sortReverse = false;\\n\\n // This is really only used for sorting. Technically, straight up rowCount could be used instead, but if two\\n // different columns (records and capacity) used rowCount as their sort predicate, the sort direction icon on both\\n // columns would be active (showing) when the user sorted either of the rows. We don't want that so we have to\\n // distinguish...and why not distinguish by created a function that provides a true capacity number?\\n $scope.getCapacity = function(collection) {\\n return collection.rowCount / collection.maxRows;\\n };\\n\\n $scope.setSort = function(predicate) {\\n if ($scope.sortPredicate === predicate) {\\n $scope.sortReverse = !$scope.sortReverse;\\n } else {\\n $scope.sortReverse = false;\\n }\\n $scope.sortPredicate = predicate;\\n };\\n\\n $scope.getSortDirection = function(predicate) {\\n if (predicate === $scope.sortPredicate) {\\n return $scope.sortReverse ? 'descending' : 'ascending';\\n }\\n\\n return null;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/controllers/ad-hoc-manage-ctrl.js\\n ** module id = 3\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.CollectionCtrl', [\\n require('../../common/services/ad-hoc-service').name,\\n require('../directives/ad-hoc-data-upload').name,\\n require('../directives/ad-hoc-capacity').name\\n ])\\n .controller('CollectionCtrl', function($scope, $stateParams, $state, adHocService, eventBus, i18nFilter) {\\n if ($stateParams.collectionId) {\\n adHocService.get($stateParams.collectionId).then(function(collection) {\\n $scope.collection = collection;\\n // make sure we set the current collection for state maintenance\\n adHocService.setCurrentCollection(collection);\\n });\\n } else {\\n if(!$scope.collection) {\\n $scope.collection = adHocService.getCurrentCollection();\\n }\\n }\\n\\n $scope.saveDisabled = false;\\n $scope.showDetails = false;\\n $scope.uploadFileName = null;\\n $scope.forceUploadVisibility = false;\\n\\n // saves collection meta-data\\n $scope.saveCollection = function() {\\n // save states\\n // 1) a file is uploaded and this is a new collection\\n // -> go to validate file and build directives for upload\\n // 2) a file is uploaded and this is an existing collection\\n // -> (validate) Use directives from existing collection\\n // 3) a file is not uploaded and this is an existing collection\\n // -> simply save the meta-data\\n // 4) if a file is not uploaded and this is not an existing collection then we are in a bad state and bail out\\n if(!$scope.collection) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionSaveError'));\\n return;\\n }\\n if($scope.collection.id) {\\n if($scope.uploadFileName) {\\n $state.go('validate',{pastebinId:$scope.collection.pastebinId, collectionId:$scope.collection.id});\\n return;\\n } else {\\n adHocService.saveMetaData({\\n name:$scope.collection.name,\\n description:$scope.collection.description\\n },$stateParams.collectionId).then(function() {\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n return;\\n });\\n }\\n } else {\\n if(!$scope.uploadFileName) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionSaveError'));\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n return;\\n }\\n if(!$scope.collection.pastebinId) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionSaveError'));\\n return;\\n }\\n $state.go('validate', {pastebinId:$scope.collection.pastebinId});\\n return;\\n }\\n };\\n\\n $scope.cancelEditing = function() {\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n };\\n\\n $scope.deleteUpload = function (collection, upload) {\\n adHocService.deleteUpload(collection, upload).then(function(result) {\\n // @todo: success message?\\n }, function(reason) {\\n console.log(reason);\\n });\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/controllers/collection-ctrl.js\\n ** module id = 4\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.ValidateUploadCtrl', [\\n require('../../common/services/ad-hoc-service').name\\n ])\\n .controller('ValidateUploadCtrl', function($scope, $stateParams, $state, adHocService, i18nFilter) {\\n $scope.columnOptions = new Array(\\n {label: i18nFilter('columnTypeText'), value:'string' },\\n {label: i18nFilter('columnTypeInteger'), value:'int' },\\n {label: i18nFilter('columnTypeDecimal'), value:'decimal'},\\n {label: i18nFilter('columnTypeDate'), value:'datetime'}\\n );\\n\\n $scope.selectedTypes = [];\\n $scope.saveDisabled = true;\\n $scope.schemaEditable = !$stateParams.collectionId;\\n\\n // if we don't have a pastebin ID go back to the upload screen, something wrong has happened\\n // we may have had a refresh, in which case we have lost context and need to go back to that\\n // screen anyways\\n var collection = adHocService.getCurrentCollection();\\n var pastebinId = $stateParams.pastebinId || collection.pastebinId;\\n if(!pastebinId) {\\n var params = {};\\n if($stateParams.collectionId) {\\n params.collectionId = $stateParams.collectionId;\\n }\\n $state.go('collection', params);\\n return;\\n }\\n\\n // do a test run on the pastebin data\\n adHocService.preRunFromPastebin(pastebinId, 20, $stateParams.collectionId).then( function(data) {\\n if(!data || data.status) {\\n $scope.uploadError = true;\\n if(data.status == 409) {\\n $scope.uploadErrorMessage = i18nFilter('fileUploadConflict');\\n } else {\\n $scope.uploadErrorMessage = i18nFilter('fileUploadFailure');\\n }\\n } else {\\n $scope.saveDisabled = false;\\n $scope.adHocSchema = data.schema;\\n $scope.adHocDirectives = data.directives;\\n $scope.adHocData = data.data;\\n\\n // I am unable to bind directly to my model for the select so I am creating a proxy\\n // the model will need to be updated from the proxy before uploading\\n for(var i=0;i<data.schema.length;i++) {\\n $scope.selectedTypes[i] = $scope.getSelectedType($scope.adHocSchema[i].type);\\n }\\n }\\n });\\n\\n $scope.getSelectedType = function(type) {\\n var option = $scope.columnOptions[0];\\n for(var i=0;i<$scope.columnOptions.length;i++) {\\n if($scope.columnOptions[i].value == type) {\\n option = $scope.columnOptions[i];\\n }\\n }\\n return option;\\n };\\n\\n $scope.cancelUpload = function() {\\n var params = {};\\n if($stateParams.collectionId) {\\n params.collectionId = $stateParams.collectionId;\\n }\\n $state.go('collection', params);\\n };\\n\\n $scope.saveCollection = function() {\\n // go through the selected types and update the actual model from our proxy object\\n for(var i=0;i<$scope.adHocSchema.length;i++) {\\n if($scope.selectedTypes[i] && $scope.selectedTypes[i].value) {\\n $scope.adHocSchema[i].type = $scope.selectedTypes[i].value;\\n }\\n }\\n var err = verifySchemaAndDirectives($scope.adHocDirectives, $scope.adHocSchema);\\n if(err == null) {\\n $scope.saveDisabled = true;\\n adHocService.createFromPastebin(pastebinId, $scope.adHocDirectives, $scope.adHocSchema, $stateParams.collectionId).then(function(data) {\\n if(!data) {\\n console.log('error processing complete file');\\n }\\n // need to refresh collection cache\\n adHocService.getAll(true).then(function(result) {\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n });\\n });\\n } else {\\n // alert the customer to the error\\n $scope.uploadError = true;\\n $scope.uploadErrorMessage = err.msg;\\n }\\n };\\n\\n /**\\n * return null if valid and an error object if invalid\\n * error = {msg:i18nFilter(\\\"message\\\")}\\n */\\n var verifySchemaAndDirectives = function(directives, schema) {\\n var err = null;\\n // schema\\n for(var i=0;i<schema.length;i++) {\\n if(!schema[i].prettyName) {\\n err = {\\n msg:i18nFilter('allNameFieldsRequiredError')\\n };\\n }\\n }\\n // directives\\n // err = {msg:i18nFilter('badDirective')};\\n return err;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/controllers/validate-upload-ctrl.js\\n ** module id = 5\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.DashboardEditCtrl', [\\n require('../directives/dashboard-canvas').name,\\n require('../directives/dashboard-rail').name,\\n require('../directives/responsive-evaluator').name,\\n require('../directives/dashboard-instrument-chrome').name,\\n require('../../instrument/directives/instrument').name,\\n require('../../instrument/directives/new-instrument-configuration').name,\\n require('../../common/directives/name-editor').name,\\n require('../directives/media-definition-track').name,\\n require('../directives/media-definition-menu').name,\\n require('../directives/ruler').name,\\n require('../../common/services/dashboard-service').name,\\n require('../services/event-bus').name,\\n require('../../common/services/dashboard-workspace').name,\\n require('../../common/services/post-message').name\\n ])\\n .controller('DashboardCtrl', function($scope, $state, $window, dashboardService, dashboardWorkspaceService, i18nFilter, eventBus, postMessageService) {\\n $scope.editable = false;\\n $scope.showRail = false;\\n $scope.newInstrumentConfigVisible = false;\\n\\n $scope.toggleRail = function() {\\n $scope.showRail = !$scope.showRail;\\n eventBus.publish('resetActiveMediaDefinition');\\n };\\n\\n var updateEditable = function() {\\n $scope.editable = $state.is('dashboard.edit');\\n };\\n\\n var loadDashboard = function(dashboardId) {\\n if (!dashboardWorkspaceService.dashboard || dashboardWorkspaceService.dashboard._id !== dashboardId) {\\n postMessageService.post('external.pageTitle', i18nFilter('dashboard'));\\n dashboardService.get(dashboardId).then(function(dashboard) {\\n dashboardWorkspaceService.pristineDashboard = dashboard;\\n dashboardWorkspaceService.dashboard = angular.copy(dashboard);\\n dashboardWorkspaceService.page = dashboard.pages[0];\\n postMessageService.post('external.pageTitle', dashboard.name);\\n });\\n } else {\\n postMessageService.post('external.pageTitle', dashboardWorkspaceService.dashboard.name);\\n }\\n };\\n\\n $scope.setActiveMediaDefinition = function(mediaDefinition) {\\n dashboardWorkspaceService.mediaDefinition = mediaDefinition;\\n };\\n\\n $scope.saveDashboard = function() {\\n dashboardService.save(dashboardWorkspaceService.dashboard).then(function() {\\n dashboardWorkspaceService.updatePristineCopy();\\n $state.go('dashboard.view', {\\n dashboardId: dashboardWorkspaceService.dashboard._id\\n });\\n });\\n };\\n\\n $scope.cancelEditing = function() {\\n dashboardWorkspaceService.revertChanges();\\n $state.go('dashboard.view', {\\n dashboardId: dashboardWorkspaceService.dashboard._id\\n });\\n };\\n\\n $scope.getRailToggleText = function() {\\n return i18nFilter($scope.showRail ? 'hideDashboardRail' : 'showDashboardRail');\\n };\\n\\n $scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\\n // Would love to show the user a prompt asking if they wish to continue their navigation or stay on the\\n // edit screen but this bug prevents it from happening without super-hax:\\n // https://github.com/angular-ui/ui-router/issues/273\\n if (fromState.name === 'dashboard.edit' && toState.name !== 'instrument.edit') {\\n dashboardWorkspaceService.revertChanges();\\n }\\n });\\n\\n $scope.$on('$stateChangeSuccess', function(e, to, toParams) {\\n if (to.name.indexOf('dashboard.') === 0) {\\n updateEditable();\\n loadDashboard(toParams.dashboardId);\\n }\\n });\\n\\n updateEditable();\\n\\n angular.element($window).on('beforeunload', function() {\\n if ($state.is('dashboard.edit') &&\\n !angular.equals(dashboardWorkspaceService.dashboard, dashboardWorkspaceService.pristineDashboard)) {\\n return i18nFilter('unsavedChangesPrompt');\\n }\\n });\\n\\n $scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function(dashboard) {\\n $scope.dashboard = dashboard;\\n });\\n\\n $scope.getMeasurementsStyle = function() {\\n var largestWidth = 0;\\n\\n // Arbitrary width that provides some room for the the last media definition label.\\n var buffer = 100;\\n\\n if (dashboardWorkspaceService.dashboard) {\\n dashboardWorkspaceService.dashboard.mediaDefinitions.forEach(function(mediaDefinition) {\\n largestWidth = Math.max(largestWidth, mediaDefinition.width);\\n });\\n }\\n\\n return {\\n width: largestWidth + buffer\\n };\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/controllers/dashboard-ctrl.js\\n ** module id = 6\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.InstrumentCtrl', [\\n require('../directives/instrument').name,\\n require('../directives/instrument-editor-bootstrap').name,\\n require('../../common/directives/name-editor').name,\\n require('../services/instrument-event-bus').name\\n ])\\n .controller('InstrumentCtrl', function($scope, $stateParams, $state, $window, dashboardService, dashboardWorkspaceService, instrumentEventBus, i18nFilter) {\\n $scope.instrument = null;\\n\\n var init = function(dashboard) {\\n $scope.dashboard = dashboard;\\n $scope.dashboard.instruments.forEach(function(instrument) {\\n if (instrument._id === $stateParams.instrumentId) {\\n $scope.instrument = angular.copy(instrument);\\n $scope.pristineInstrument = instrument;\\n return false;\\n }\\n });\\n if(!$scope.instrument) {\\n $state.go('dashboard.edit', {dashboardId: $state.params.dashboardId});\\n }\\n };\\n\\n angular.element($window).on('beforeunload', function() {\\n if ($state.is('instrument.edit') &&\\n !angular.equals($scope.instrument, $scope.pristineInstrument)) {\\n return i18nFilter('unsavedChangesPrompt');\\n }\\n });\\n\\n // If the dashboard workspace's active dashboard contains the instrument we want to use it's dashboard copy since it\\n // is the working copy (instead of the pristine dashboard object). This way when the user saves instrument changes\\n // and navigates back to the dashboard view the view is properly updated because it's the same object reference.\\n if (dashboardWorkspaceService.dashboard && dashboardWorkspaceService.dashboard._id === $stateParams.dashboardId) {\\n init(dashboardWorkspaceService.dashboard);\\n } else {\\n dashboardService.get($stateParams.dashboardId).then(function(dashboard) {\\n init(dashboard);\\n });\\n }\\n\\n var navigateToDashboard = function() {\\n $state.go('dashboard.edit', {\\n dashboardId: $scope.dashboard._id\\n });\\n };\\n\\n $scope.cancel = function() {\\n $scope.instrument = angular.copy($scope.pristineInstrument);\\n navigateToDashboard();\\n };\\n\\n $scope.save = function() {\\n angular.copy($scope.instrument, $scope.pristineInstrument);\\n instrumentEventBus.publish({\\n from: $scope.instrument._id,\\n topic: 'configChanged'\\n });\\n dashboardService.save($scope.dashboard).then(navigateToDashboard);\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/controllers/instrument-ctrl.js\\n ** module id = 7\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.i18n', [])\\n .provider('i18nBundle', function() {\\n this.$get = function() {\\n return this.bundle;\\n };\\n })\\n .filter('i18n', function(i18nBundle) {\\n // If additional arguments are provided, those additional arguments will be replaced into the target string.\\n // For example, if the localized key is \\\"viewingBooks\\\" and the value is \\\"Viewing %s books\\\" then the appropriate\\n // call would be i18nFilter('viewingBooks', 15); to produce \\\"Viewing 15 books\\\".\\n // If the localized key is \\\"authors\\\" and the value is \\\"Authors %1$s and %2$s others\\\" then the appropriate\\n // call would be i18nFilter('authors', 'Bob Marley', 8); to produce \\\"Authors Bob Marley and 8 others\\\".\\n return function(key, replacements) {\\n var formatter = i18nBundle[key];\\n return formatter ? formatter(replacements) : key;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/filters/i18n.js\\n ** module id = 8\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.postMessageService', [\\n ])\\n .factory('postMessageService', function($window, $rootScope, $location, eventBus) {\\n var listen = function() {\\n var self = this;\\n\\n // Listen for state changes that external applications should know about.\\n $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\\n switch(toState.name) {\\n case 'dashboard.edit':\\n case 'instrument.edit':\\n case 'collection':\\n case 'validate':\\n self.post('external.hideShell');\\n break;\\n default:\\n self.post('external.showShell');\\n }\\n });\\n\\n $rootScope.$on('$stateChangeSuccess', function() {\\n // For some reason $location.hash() doesn't return anything. I believe it is because\\n // we are using Angular UI's UI-Router which does its own thing.\\n var hash = '#' + $location.absUrl().split('#')[1];\\n self.post('external.stateChange', hash);\\n });\\n\\n // Listen for other post messages that come across the wire.\\n $window.addEventListener('message', function(event) {\\n if (event.origin !== $window.location.origin) {\\n return;\\n }\\n self._handleMessage(event);\\n });\\n };\\n\\n var post = function(type, message) {\\n var packet = { type: type };\\n if (arguments.length > 1) {\\n packet.message = message;\\n }\\n // Need to stringify the post message because <IE10 requires the post message to only be a string\\n // and not an object.\\n // use the window's parent (the iframe parent to post into)\\n $window.parent.postMessage(JSON.stringify(packet), $window.location.origin);\\n };\\n\\n var _handleMessage = function(event) {\\n var packet = JSON.parse(event.data);\\n switch(packet.type) {\\n case 'external.viewportResize': {\\n eventBus.publish('resetActiveMediaDefinition');\\n break;\\n }\\n }\\n };\\n\\n return {\\n listen: listen,\\n post: post,\\n _handleMessage: _handleMessage\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/post-message.js\\n ** module id = 9\\n ** module chunks = 0\\n **/\",\"'use strict';\\n/**\\n * A port of Q's allSettled API. While $q.all is rejected as soon as any child promise is rejected, allSettled will\\n * allow all child promises to settle (be resolved or rejected) before resolving the master promise.\\n * The master promise will be resolved with an array of objects that represent the state of the child promises.\\n * See https://github.com/kriskowal/q/wiki/API-Reference#promiseallsettled fore more information.\\n */\\nmodule.exports = angular.module('qAllSettled', [])\\n .config(function($provide) {\\n $provide.decorator('$q', function($delegate) {\\n var $q = $delegate;\\n $q.allSettled = function(promises) {\\n return $q.all(promises.map(function(promise) {\\n return promise.then(function(value) {\\n return { state: 'fulfilled', value: value };\\n }, function(reason) {\\n return { state: 'rejected', reason: reason };\\n });\\n }));\\n };\\n return $q;\\n });\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/q-all-settled.js\\n ** module id = 10\\n ** module chunks = 0\\n **/\",\"'use strict';\\n/**\\n * A port of Q's allSettled API. While $q.all is rejected as soon as any child promise is rejected, allSettled will\\n * allow all child promises to settle (be resolved or rejected) before resolving the master promise.\\n * The master promise will be resolved with an array of objects that represent the state of the child promises.\\n * See https://github.com/kriskowal/q/wiki/API-Reference#promiseallsettled fore more information.\\n */\\nmodule.exports = angular.module('qIgnorify', [])\\n .config(function($provide) {\\n $provide.decorator('$q', function($delegate) {\\n var defer = $delegate.defer;\\n var when = $delegate.when;\\n var reject = $delegate.reject;\\n var all = $delegate.all;\\n\\n function decoratePromise(promise) {\\n promise.ignorify = function() {\\n promise._ignore = false;\\n promise._then = promise.then;\\n\\n promise.ignore = function() {\\n promise._ignore = true;\\n };\\n\\n promise.then = function(thenFn, errFn, notifyFn) {\\n return promise._then(\\n function() {\\n if (!promise._ignore) {\\n thenFn.apply(this, arguments);\\n }\\n },\\n function() {\\n if (!promise._ignore) {\\n errFn.apply(this, arguments);\\n }\\n },\\n function() {\\n if (!promise._ignore) {\\n notifyFn.apply(this, arguments);\\n }\\n }\\n );\\n };\\n return promise;\\n };\\n return promise;\\n }\\n\\n $delegate.defer = function() {\\n var deferred = defer();\\n decoratePromise(deferred.promise);\\n return deferred;\\n };\\n\\n $delegate.when = function() {\\n return decoratePromise(when.apply(this, arguments));\\n };\\n\\n $delegate.reject = function() {\\n return decoratePromise(reject.apply(this, arguments));\\n };\\n\\n $delegate.all = function() {\\n return decoratePromise(all.apply(this, arguments));\\n };\\n\\n return $delegate;\\n });\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/q-ignorify.js\\n ** module id = 11\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.exceptionHandler', [])\\n .factory('$exceptionHandler', function($log, $injector, env, uuid) {\\n return function(exception, cause) {\\n var id = uuid(),\\n $http = $injector.get('$http');\\n\\n $http.post('/ui/errorLog', {\\n id: id,\\n message: exception.message,\\n stack: exception.stack,\\n cause: cause\\n }).catch(function() {\\n if (env === 'development') {\\n $log.error('UI Error could not be logged successfully.');\\n }\\n });\\n\\n if (env === 'development') {\\n $log.error(exception);\\n } else {\\n $log.error('Error ID: ' + id);\\n }\\n };\\n });\\n\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/exception-handler.js\\n ** module id = 12\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.sso', [\\n require('../../dashboard/services/event-bus').name\\n])\\n.factory('sso', function(eventBus, i18nFilter, $window, ims) {\\n var lastChecked = null;\\n var expires = 60000;\\n return {\\n requestInterceptor: function(config) {\\n var now = new Date().getTime();\\n if(!lastChecked || now - lastChecked > expires) {\\n var url = 'https://' + ims.host + '/ims/check/v1/token?' +\\n 'callback=?' +\\n '&client_id=' + ims.clientId +\\n '&scope=AdobeID,openid' +\\n '&_=' + now\\n ;\\n $.getJSON(url, function(sessionData) {\\n if(sessionData.error || sessionData.error_flag) {\\n eventBus.publish('processFailed', i18nFilter('loggedOutError'));\\n }\\n });\\n lastChecked = now;\\n }\\n return config;\\n }\\n };\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/sso.js\\n ** module id = 13\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.app', [\\n require('./alert').name,\\n require('./modal-progress-indicator').name\\n ])\\n .directive('app', function() {\\n return {\\n restrict: 'EA',\\n template: require('./app.tpl.html')\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/app.js\\n ** module id = 14\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dashboardService', [\\n require('./tag-service').name,\\n require('./uuid').name,\\n require('./dashboard-mixin').name\\n ])\\n .factory('dashboardService', function($http, $q, user, tagService, eventBus, i18nFilter, dashboardMixin) {\\n var dashboardCache;\\n var allDashboardsPromiseById;\\n var fullDashboardPromiseById = {};\\n\\n var removeDependenciesRequestTransformer = function(data) {\\n return JSON.stringify(data, function(key, val) {\\n if (key === 'tags') {\\n return undefined;\\n }\\n return val;\\n });\\n };\\n\\n var removeFromCache = function(dashboard) {\\n if (dashboardCache) {\\n var i = dashboardCache.length;\\n while (i--) {\\n if (dashboardCache[i]._id === dashboard._id) {\\n dashboardCache.splice(i, 1);\\n }\\n // Continue looping in case the dashboard is there more than once. (shouldn't happen)\\n }\\n }\\n };\\n\\n /**\\n * Loads and joins dependencies (e.g., tags) onto dashboards.\\n * @param dashboardsPromise The promise for dashboards that are loading. This takes a promise so that dashboards\\n * can be loading in parallel to dependencies loading instead of sequentially.\\n * @returns {Promise}\\n */\\n var joinDependencies = function(dashboardsPromise) {\\n return $q.all([dashboardsPromise, tagService.query()]).then(function(responses) {\\n return joinTags(responses[0], responses[1]);\\n });\\n };\\n\\n var joinTags = function(dashboards, tags) {\\n // We convert dashboards to an array below to make it easier to work with\\n // but we want to return what the user gave us.\\n var origDashboards = dashboards;\\n\\n if (!angular.isArray(dashboards)) {\\n dashboards = [dashboards];\\n }\\n\\n var tagsByDashboardId = {};\\n tags.forEach(function(tag) {\\n var tagsWithId = tagsByDashboardId[tag.dashboardId];\\n\\n if (!tagsWithId) {\\n tagsWithId = tagsByDashboardId[tag.dashboardId] = [];\\n }\\n\\n tagsWithId.push(tag);\\n });\\n\\n dashboards.forEach(function(dashboard) {\\n dashboard.tags = tagsByDashboardId[dashboard._id] || [];\\n });\\n\\n return origDashboards;\\n };\\n\\n var getDashboardFromArray = function(dashboards, id) {\\n for (var i = 0; i < dashboards.length; i++) {\\n var candidate = dashboards[i];\\n if (candidate._id === id) {\\n return candidate;\\n }\\n }\\n };\\n\\n /**\\n * Retrieves a single dashboard. This is a full dashboard object (contains all information for the dashboard).\\n * @param id\\n * @returns {Promise}\\n */\\n var get = function(id) {\\n var promise = fullDashboardPromiseById[id];\\n\\n if (!promise) {\\n var deferred = $q.defer();\\n promise = deferred.promise;\\n\\n // Fetch all shallow dashboard objects first. It makes dealing with the cache, outstanding requests, and\\n // memory references a lot easier. The downside is that we're waiting for all shallow dashboards to load\\n // before loading the full dashboard object that's being requested so this may be room for optimization\\n // in the future.\\n query().then(function(dashboards) {\\n var cachedDashboard = getDashboardFromArray(dashboards, id);\\n\\n if (cachedDashboard.isFullDashboard()) {\\n deferred.resolve(cachedDashboard);\\n } else {\\n fullDashboardPromiseById[id] = deferred.promise;\\n\\n $http({\\n method: 'GET',\\n url: '/dashboards/' + id\\n }).then(function(response) {\\n var fullDashboard = response.data;\\n // Extend the cached dashboard instead of replacing it since other piecees of the app may have reference\\n // to the instance and we don't want to have to manage those references.\\n angular.extend(cachedDashboard, fullDashboard);\\n deferred.resolve(cachedDashboard);\\n delete fullDashboardPromiseById[id];\\n });\\n }\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n }\\n\\n return promise;\\n };\\n\\n /**\\n * Retrieves all dashboards. These are \\\"shallow\\\" dashboard objects that only include high-level information\\n * (no information regarding instruments, layout, etc).\\n * @returns {Promise}\\n */\\n var query = function() {\\n if (allDashboardsPromiseById) {\\n return allDashboardsPromiseById;\\n }\\n\\n var deferred = $q.defer();\\n\\n if (dashboardCache) {\\n deferred.resolve(dashboardCache);\\n } else {\\n allDashboardsPromiseById = deferred.promise;\\n\\n var loadPromise = $http({\\n method: 'GET',\\n url: '/dashboards'\\n }).then(function(response) {\\n var dashboards = response.data;\\n dashboards.forEach(addObjectMethods);\\n return dashboards;\\n }).catch(function(error) {\\n return $q.reject(error);\\n });\\n\\n // Pass the promise immediately instead of waiting for the promise to complete. This way dependencies can be\\n // loaded in parallel.\\n joinDependencies(loadPromise).then(function(dashboards) {\\n dashboardCache = dashboards;\\n deferred.resolve(dashboards);\\n allDashboardsPromiseById = null;\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('queryDashboardsError'));\\n deferred.reject(error);\\n });\\n }\\n\\n var promise = deferred.promise;\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var leave = function(dashboards) {\\n var promises = dashboards.map(function(dashboard, index) {\\n return $http({\\n method: 'POST',\\n url: '/dashboards/' + dashboard._id + '/leave'\\n }).then(function() {\\n dashboard.removeParticipantForEntity(user);\\n removeFromCache(dashboard);\\n return dashboard;\\n }).catch(function() {\\n return $q.reject(dashboard);\\n });\\n });\\n\\n var masterPromise = $q.allSettled(promises).then(function(resolutions) {\\n var rejectedDashboards = dashboards.filter(function(dashboard, index) {\\n return resolutions[index].state === 'rejected';\\n });\\n\\n if (rejectedDashboards.length) {\\n eventBus.publish('processFailed', i18nFilter('leaveDashboardsError'));\\n return $q.reject(rejectedDashboards);\\n } else {\\n return dashboards;\\n }\\n });\\n\\n eventBus.publish('modalProcessStarted', masterPromise);\\n\\n return masterPromise;\\n };\\n\\n var save = function(dashboard) {\\n var method = dashboard._id ? 'PUT' : 'POST';\\n var promise = $http({\\n method: method,\\n url: '/dashboards/' + dashboard._id,\\n data: dashboard,\\n transformRequest: removeDependenciesRequestTransformer\\n }).then(function() {\\n if (!dashboard.isEntityAParticipant(user)) {\\n removeFromCache(dashboard);\\n }\\n return dashboard;\\n }).catch(function() {\\n eventBus.publish('processFailed', i18nFilter('saveDashboardError'));\\n return $q.reject(dashboard);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var destroy = function(dashboards) {\\n var promises = dashboards.map(function(dashboard) {\\n return $http({\\n method: 'DELETE',\\n url: '/dashboards/' + dashboard._id\\n }).then(function() {\\n removeFromCache(dashboard);\\n return dashboard;\\n }).catch(function() {\\n return $q.reject(dashboard);\\n });\\n });\\n\\n var masterPromise = $q.allSettled(promises).then(function(resolutions) {\\n var rejectedDashboards = dashboards.filter(function(dashboard, index) {\\n return resolutions[index].state === 'rejected';\\n });\\n\\n if (rejectedDashboards.length) {\\n eventBus.publish('processFailed', i18nFilter('deleteDashboardsError'));\\n return $q.reject(rejectedDashboards);\\n } else {\\n return dashboards;\\n }\\n });\\n\\n eventBus.publish('modalProcessStarted', masterPromise);\\n\\n return masterPromise;\\n };\\n\\n var duplicate = function(dashboard) {\\n var promise = $http({\\n method: 'POST',\\n url: '/dashboards/' + dashboard._id + '/duplicate',\\n data: dashboard,\\n transformRequest: removeDependenciesRequestTransformer\\n }).then(function(response) {\\n var newDashboard = response.data;\\n addObjectMethods(newDashboard);\\n return newDashboard;\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('duplicateDashboardError'));\\n return $q.reject(error);\\n });\\n\\n promise = joinDependencies(promise).then(function(dashboard) {\\n dashboardCache.push(dashboard);\\n return dashboard;\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var addObjectMethods = function(dashboard) {\\n return angular.extend(dashboard, dashboardMixin);\\n };\\n\\n return {\\n save: save,\\n get: get,\\n query: query,\\n destroy: destroy,\\n leave: leave,\\n duplicate: duplicate\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/dashboard-service.js\\n ** module id = 15\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.tagService', [\\n require('./sequence').name\\n ])\\n .factory('tagService', function($http, $q, Sequence, eventBus, i18nFilter) {\\n var allTagsCache,\\n queryPromise,\\n sequence = new Sequence();\\n\\n var removeFromCache = function(tag) {\\n var i = allTagsCache.length;\\n while (i--) {\\n if (allTagsCache[i]._id === tag._id) {\\n allTagsCache.splice(i, 1);\\n // Continue looping in case the tag is there more than once. (shouldn't happen)\\n }\\n }\\n };\\n\\n var query = function() {\\n if (!queryPromise) {\\n var deferred = $q.defer();\\n queryPromise = deferred.promise;\\n\\n if (allTagsCache) {\\n deferred.resolve(allTagsCache);\\n } else {\\n $http({\\n method: 'GET',\\n url: '/tags'\\n }).then(function(response) {\\n allTagsCache = response.data;\\n deferred.resolve(allTagsCache);\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('queryTagsError'));\\n deferred.reject(error);\\n });\\n }\\n }\\n\\n return queryPromise;\\n };\\n\\n var save = function(tag) {\\n sequence.enqueue(function() {\\n var promise;\\n\\n if (tag._id) {\\n promise = $http({\\n method: 'PUT',\\n url: '/tags/' + tag._id,\\n data: tag\\n });\\n } else {\\n promise = $http({\\n method: 'POST',\\n url: '/tags',\\n data: tag\\n }).then(function(response) {\\n tag._id = response.data._id;\\n return tag;\\n });\\n }\\n\\n promise.catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('saveTagError'));\\n $q.reject(error);\\n });\\n\\n return promise;\\n });\\n };\\n\\n var destroy = function(tag) {\\n sequence.enqueue(function() {\\n return $http({\\n method: 'DELETE',\\n url: '/tags/' + tag._id\\n }).then(function(response) {\\n removeFromCache(tag);\\n return response;\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('deleteTagError'));\\n $q.reject(error);\\n });\\n });\\n };\\n\\n return {\\n query: query,\\n save: save,\\n destroy: destroy\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/tag-service.js\\n ** module id = 16\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.tagEnum', [])\\n .constant('tagEnum', {\\n FAVORITE: 'totem.favorite'\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/tag-enum.js\\n ** module id = 17\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.selectionTable', [])\\n .directive('selectionTable', function() {\\n return {\\n scope: {\\n rowModels: '=',\\n selectedRowModels: '=',\\n\\n /**\\n * When a row is selected, the model to add to the selectedRowModels array will come from the scope of the row.\\n * The scope of the row is typically created by ng-repeat. When using ng-repeat=\\\"dashboard in dashboards\\\",\\n * the row's scope will have a dashboard attribute with the dashboard model. In this case, selectionModelMap\\n * should be set to \\\"dashboard\\\" so it can be retrieved from the row's scope when the row is selected.\\n */\\n selectionModelMap: '@'\\n },\\n link: function(scope, element, attrs) {\\n var allCheckboxSelector = attrs.selectAllSelector || 'th:first-child input';\\n var itemCheckboxSelector = attrs.selectItemSelector || 'td:first-child input';\\n\\n var updateSelectionModel = function() {\\n var selectedCheckboxes = element.find(itemCheckboxSelector + ':checked');\\n scope.selectedRowModels = selectedCheckboxes.toArray().map(function(selectedCheckbox) {\\n return $(selectedCheckbox).scope().$eval(scope.selectionModelMap);\\n });\\n };\\n\\n var updateSelectAllCheckbox = function() {\\n var itemCheckboxes = element.find(itemCheckboxSelector);\\n var allItemsSelected = itemCheckboxes.length && itemCheckboxes.not(':checked').length === 0;\\n $(allCheckboxSelector).prop('checked', allItemsSelected);\\n };\\n\\n element.on('change', allCheckboxSelector, function(event) {\\n var selected = $(event.currentTarget).prop('checked');\\n element.find(itemCheckboxSelector).prop('checked', selected);\\n\\n if (scope.selectedRowModels && scope.selectionModelMap) {\\n scope.$apply(updateSelectionModel);\\n }\\n });\\n\\n element.on('change', itemCheckboxSelector, function() {\\n updateSelectAllCheckbox();\\n\\n if (scope.selectedRowModels && scope.selectionModelMap) {\\n scope.$apply(updateSelectionModel);\\n }\\n });\\n\\n scope.$watchCollection('rowModels', function() {\\n updateSelectAllCheckbox();\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/selection-table.js\\n ** module id = 18\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.sortHeader', [])\\n .directive('sortHeader', function() {\\n return {\\n link: function(scope, element, attrs) {\\n element.addClass('totem-SortHeaderCell');\\n }\\n };\\n })\\n .directive('sortHeaderIcon', function() {\\n return {\\n scope: {\\n sortActive: '=',\\n sortAscending: '='\\n },\\n link: function(scope, element, attrs) {\\n element.addClass('totem-SortHeaderCell-icon');\\n\\n scope.$watch('sortActive', function(sortActive) {\\n element.toggle(sortActive);\\n });\\n\\n scope.$watch('sortAscending', function(sortAscending) {\\n element\\n .toggleClass('coral-Icon--arrowUp', sortAscending)\\n .toggleClass('coral-Icon--arrowDown', !sortAscending);\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/sort-header.js\\n ** module id = 19\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.adHocService', [\\n require('./participable-mixin').name\\n ])\\n .factory('adHocService', function($http, $q, $location, ims, participableMixin, eventBus, i18nFilter, externalServices) {\\n var collectionCache = null;\\n var originalCollections = null;\\n var currentCollection = null;\\n var rsAdHocBaseUrl = externalServices.rs.host + 'adhoc/';\\n var orgId = ims.activeOrg + '@AdobeOrg';\\n\\n var get = function(id) {\\n return getAll().then(function(collections) {\\n for (var i = 0; i < collections.length; i++) {\\n var collection = collections[i];\\n if (collection.id === id) {\\n return collection;\\n }\\n }\\n return null;\\n });\\n };\\n\\n var getAll = function(forceRefresh) {\\n forceRefresh = forceRefresh || false;\\n if(collectionCache && !forceRefresh) {\\n var deferred = $q.defer();\\n deferred.resolve(collectionCache);\\n return deferred.promise;\\n }\\n\\n var promise = $http({\\n method: 'GET',\\n url: rsAdHocBaseUrl + '?depth=3&orgId='+orgId,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n // SUCCESS\\n var collectionsById = response.data;\\n\\n var collections = [];\\n for (var id in collectionsById) {\\n if (collectionsById.hasOwnProperty(id)) {\\n var collection = collectionsById[id];\\n collection.id = id;\\n angular.extend(collection, participableMixin);\\n\\n // need to add the uploadId to the upload object\\n if(collection.uploads) {\\n for(var uploadId in collection.uploads) {\\n if(collection.uploads.hasOwnProperty(uploadId)) {\\n collection.uploads[uploadId].id = uploadId;\\n }\\n }\\n }\\n\\n // make the participants array match the expected format for\\n // participable\\n var newParticipants = [];\\n for(var participantId in collection.participants) {\\n if(collection.participants.hasOwnProperty(participantId)) {\\n // @todo: this info needs to be pulled from IMS\\n // Reporting Services does not have this info\\n newParticipants.push({\\n _id:participantId,\\n entity:{\\n _id:participantId,\\n displayName:'Some Name',\\n email:'[email protected]',\\n firstName:'Some',\\n lastName:'Name',\\n type:'user'\\n },\\n isOwner:collection.participants[participantId].owner\\n });\\n }\\n }\\n collection.participants = newParticipants;\\n\\n collections.push(collection);\\n }\\n }\\n\\n collectionCache = collections;\\n originalCollections = angular.copy(collectionCache);\\n\\n return collectionCache;\\n }, function(reason) {\\n eventBus.publish('processFailed',i18nFilter('adhocGenericCollectionError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n // metaData is an object that conforms to the inputs needed by adhoc/:collectionId PUT\\n var saveMetaData = function(metaData, collectionId) {\\n var promise = $http({\\n method: 'PUT',\\n url: rsAdHocBaseUrl + collectionId + '?orgId='+orgId,\\n data: metaData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).catch(function(reason) {\\n eventBus.publish('processFailed',i18nFilter('adhocCollectionSaveError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var preRunFromPastebin = function(pastebinId, sampleSize, collectionId) {\\n sampleSize = sampleSize || 20;\\n\\n var createData = {\\n file: $location.protocol() + '://' + $location.host() + ($location.port() ? ':' + $location.port() : '') + '/pastebin/' + pastebinId\\n };\\n\\n var url = rsAdHocBaseUrl + (collectionId ? collectionId : '') + '?getDirectives=1&getSample='+sampleSize+'&noCommit=1&orgId='+orgId;\\n var promise = $http({\\n method: collectionId ? 'PUT' : 'POST',\\n url: url,\\n data: createData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocGenericCollectionError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var createFromPastebin = function(pastebinId, directives, schema, collectionId) {\\n var createData = {\\n file: $location.protocol() + '://' + $location.host() + ($location.port() ? ':' + $location.port() : '') + '/pastebin/' + pastebinId,\\n schema: schema,\\n directives: directives,\\n name: currentCollection.name,\\n description: currentCollection.description,\\n uploadFile: currentCollection.fileName\\n };\\n var url = rsAdHocBaseUrl + (collectionId ? collectionId : '') + '?orgId='+orgId;\\n\\n var promise = $http({\\n method: collectionId ? 'PUT' : 'POST',\\n url: url,\\n data: createData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionCreateError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var setCurrentCollection = function (collection) {\\n if(!collection) {\\n createNewCurrentCollection();\\n } else {\\n currentCollection = collection;\\n }\\n };\\n\\n var getCurrentCollection = function() {\\n if(!currentCollection) {\\n createNewCurrentCollection();\\n }\\n return currentCollection;\\n };\\n\\n var createNewCurrentCollection = function () {\\n currentCollection = {};\\n angular.extend(currentCollection, participableMixin);\\n };\\n\\n var resetCurrentCollection = function() {\\n currentCollection = null;\\n };\\n\\n var deleteUpload = function(collection, upload) {\\n if(!collection || !upload) {\\n return;\\n }\\n var url = rsAdHocBaseUrl + collection.id + '/uploads/' + upload.id + '?orgId='+orgId;\\n var promise = $http({\\n method: 'DELETE',\\n url: url,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n // decrement the rowCount on the collection\\n collection.rowCount -= upload.rowCount;\\n if(collection.uploads && collection.uploads[upload.id]) {\\n delete collection.uploads[upload.id];\\n }\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocUploadDeleteError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var deleteCollection = function(collection) {\\n if(!collection) {\\n eventBus.publish('processFailed', i18nFilter('adhocGenericCollectionError'));\\n return;\\n }\\n\\n var url = rsAdHocBaseUrl + collection.id + '?orgId='+orgId;\\n\\n var promise = $http({\\n method: 'DELETE',\\n url: url,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n var ind = collectionCache.indexOf(collection);\\n if(ind > -1) {\\n collectionCache.splice(ind,1);\\n }\\n return response;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionDeleteError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var savePermissions = function(collection) {\\n var oldParticipants = null;\\n originalCollections.forEach(function(col) {\\n if(col.id == collection.id) {\\n oldParticipants = col.participants;\\n }\\n });\\n\\n if(!oldParticipants) {\\n eventBus.publish('processFailed', i18nFilter('genericPermissionsChangeError'));\\n return;\\n }\\n var newParticipants = [];\\n var removedParticipants = [];\\n var changedParticipants = [];\\n var participantId = null;\\n var oldParticipantId = null;\\n var participantFound = false;\\n\\n // find removed and altered participants\\n // participants in the old array that are not in the new array have been removed\\n // participants in the old array that are different from the ones in the new array have been altered\\n for(oldParticipantId in oldParticipants) {\\n if(oldParticipants.hasOwnProperty(oldParticipantId)) {\\n participantFound = false;\\n for(participantId in collection.participants) {\\n if(collection.participants.hasOwnProperty(participantId)) {\\n if(collection.participants[participantId].entity._id == oldParticipants[oldParticipantId].entity._id) {\\n participantFound = true;\\n if(collection.participants[participantId].isOwner != oldParticipants[oldParticipantId].isOwner) {\\n oldParticipants[oldParticipantId].isOwner = collection.participants[participantId];\\n changedParticipants.push(collection.participants[participantId]);\\n }\\n }\\n }\\n }\\n if(!participantFound) {\\n removedParticipants.push(oldParticipants[oldParticipantId]);\\n }\\n }\\n }\\n\\n // find new participants\\n // participants in the new array that are not in the old array are new\\n for(participantId in collection.participants) {\\n if(collection.participants.hasOwnProperty(participantId)) {\\n participantFound = false;\\n for(oldParticipantId in oldParticipants) {\\n if(oldParticipants.hasOwnProperty(oldParticipantId)) {\\n if(collection.participants[participantId].entity._id && collection.participants[participantId].entity._id == oldParticipants[oldParticipantId].entity._id) {\\n participantFound = true;\\n }\\n }\\n }\\n if(!participantFound) {\\n newParticipants.push(collection.participants[participantId]);\\n }\\n }\\n }\\n // send alerts if any of these operations fail\\n // for creating:POST, for editing:PUT and for removing:DELETE\\n // url is rsAdHocBaseUrl + collection.id + '/participants'\\n var promises = [];\\n newParticipants.forEach(function(participant) {\\n promises.push(addParticipant(collection, participant));\\n });\\n\\n removedParticipants.forEach(function(participant) {\\n promises.push(removeParticipant(collection, participant));\\n });\\n\\n changedParticipants.forEach(function(participant) {\\n promises.push(editParticipant(collection,participant));\\n });\\n\\n $q.all(promises).catch(function(res) {\\n eventBus.publish('processFailed', i18nFilter('genericPermissionsChangeError'));\\n });\\n };\\n\\n var addParticipant = function(collection, participant)\\n {\\n var url = rsAdHocBaseUrl + collection.id + '/participants?orgId='+orgId;\\n var createData = {\\n userId:participant.entity._id,\\n owner:participant.isOwner\\n };\\n var promise = $http({\\n method: 'POST',\\n url: url,\\n data: createData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocPermissionError'));\\n return $q.reject(reason);\\n });\\n \\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var removeParticipant = function(collection, participant)\\n {\\n var url = rsAdHocBaseUrl + collection.id + '/participants/' + participant.entity._id + '?orgId='+orgId;\\n var promise = $http({\\n method: 'DELETE',\\n url: url,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocPermissionError'));\\n return $q.reject(reason);\\n });\\n \\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var editParticipant = function(collection, participant)\\n {\\n var url = rsAdHocBaseUrl + collection.id + '/participants/' + participant.entity._id + '?orgId='+orgId;\\n var editData = {\\n owner:participant.isOwner\\n };\\n var promise = $http({\\n method: 'PUT',\\n url: url,\\n data:editData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocPermissionError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n return {\\n get : get,\\n getAll : getAll,\\n saveMetaData : saveMetaData,\\n createFromPastebin: createFromPastebin,\\n preRunFromPastebin: preRunFromPastebin,\\n getCurrentCollection: getCurrentCollection,\\n setCurrentCollection: setCurrentCollection,\\n resetCurrentCollection: resetCurrentCollection,\\n deleteUpload:deleteUpload,\\n deleteCollection:deleteCollection,\\n savePermissions:savePermissions\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/ad-hoc-service.js\\n ** module id = 20\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.nameEditor', [\\n require('../../common/directives/steal-focus').name\\n ])\\n .directive('nameEditor', function() {\\n return {\\n template: require('./name-editor.tpl.html'),\\n restrict: 'E',\\n scope: {\\n name: '='\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/name-editor.js\\n ** module id = 21\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dashboardWorkspaceService', [\\n require('./uuid').name\\n])\\n.factory('dashboardWorkspaceService', function($rootScope, instrumentEventBus) {\\n var service = {\\n /**\\n * The dashboard model as it was the last time it was saved.\\n */\\n pristineDashboard: null,\\n /**\\n * The working dashboard model which may contain unsaved changes.\\n */\\n dashboard: null,\\n /**\\n * The active media definition for the workspace.\\n */\\n mediaDefinition: null,\\n /**\\n * The active page for the workspace.\\n */\\n page: null,\\n /**\\n * The active media layouts for the workspace.\\n */\\n mediaLayouts: null,\\n /**\\n * The active instruments for the workspace.\\n */\\n instruments: null,\\n\\n revertChanges: function() {\\n this.dashboard = angular.copy(this.pristineDashboard);\\n },\\n\\n updatePristineCopy: function() {\\n // Copy to pristine dashboard instead of replace since other pieces of the app might already be referencing\\n // the pristine dashboard instance and we don't want to have to manage those references.\\n angular.copy(this.dashboard, this.pristineDashboard);\\n }\\n };\\n\\n /**\\n * Finds media layouts and instruments that match the current dashboard, media definition, and page and sets\\n * them on the service.\\n */\\n var updateMediaLayoutsAndInstruments = function() {\\n if (service.mediaDefinition &&\\n service.dashboard &&\\n service.dashboard.mediaLayouts &&\\n service.dashboard.instruments) {\\n service.mediaLayouts = service.dashboard.mediaLayouts.filter(function(mediaLayout) {\\n return mediaLayout.pageId == service.page._id &&\\n mediaLayout.mediaDefinitionId == service.mediaDefinition._id;\\n });\\n service.instruments = service.dashboard.instruments.filter(function(instrument) {\\n // Only include an instrument if there's an associated media layout we're actively working with.\\n for (var i = 0; i < service.mediaLayouts.length; i++) {\\n var mediaLayout = service.mediaLayouts[i];\\n if (instrument._id == mediaLayout.instrumentId) {\\n return true;\\n }\\n }\\n return false;\\n });\\n }\\n };\\n\\n $rootScope.$watchGroup([\\n function() { return service.dashboard; },\\n function() { return service.page; },\\n function() { return service.mediaDefinition; }\\n ], updateMediaLayoutsAndInstruments);\\n\\n $rootScope.$watchCollection(function() {\\n return service.dashboard ? service.dashboard.instruments : null;\\n }, updateMediaLayoutsAndInstruments);\\n\\n $rootScope.$watchCollection(function() {\\n return service.dashboard ? service.dashboard.mediaLayouts : null;\\n }, updateMediaLayoutsAndInstruments);\\n\\n\\n var oldMediaDefinition;\\n var oldPage;\\n var oldDashboard;\\n $rootScope.$watch(function() {\\n // If the media definition is changing but not the dashboard nor page, then we need to tell the instruments\\n // that they have resized so that they will re-render (their instruments have, indeed, changed size).\\n // If we're changing pages or dashboards then we're dealing with new instruments therefore they're rendering from\\n // scratch and we don't need to notify of any resizing. While we could publish this event from all the many places\\n // where we change the media definition, this keeps the logic in a single place and ensures that it happens\\n // when it needs to.\\n if (service.mediaDefinition !== oldMediaDefinition &&\\n service.dashboard === oldDashboard &&\\n service.page === oldPage) {\\n instrumentEventBus.publish({\\n topic: 'resized'\\n });\\n }\\n\\n //console.log(oldMediaDefinition._id, service.mediaDefinition._id)\\n oldMediaDefinition = service.mediaDefinition;\\n oldPage = service.page;\\n oldDashboard = service.dashboard;\\n });\\n\\n return service;\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/dashboard-workspace.js\\n ** module id = 22\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.alert', [])\\n .directive('alert', function(eventBus) {\\n return {\\n restrict: 'EA',\\n template: require('./alert.tpl.html'),\\n scope: true,\\n link: function(scope, element, attr) {\\n scope.visible = false;\\n scope.type = '';\\n scope.content = '';\\n\\n eventBus.subscribe('processFailed', function(content) {\\n scope.type = 'error';\\n scope.content = content;\\n scope.visible = true;\\n });\\n\\n element.find('.coral-Alert-closeButton').on('click', function() {\\n scope.$apply(function() {\\n scope.visible = false;\\n });\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/alert.js\\n ** module id = 23\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.modalProgressIndicator', [])\\n .directive('modalProgressIndicator', function(eventBus) {\\n return {\\n restrict: 'EA',\\n template: require('./modal-progress-indicator.tpl.html'),\\n scope: true,\\n link: function(scope, element, attr) {\\n scope.visible = false;\\n\\n var promises = [];\\n\\n eventBus.subscribe('modalProcessStarted', function(promise) {\\n promises.push(promise);\\n promise.finally(function() {\\n promises.splice(promises.indexOf(promise), 1);\\n if (!promises.length) {\\n scope.visible = false;\\n }\\n });\\n scope.visible = true;\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/modal-progress-indicator.js\\n ** module id = 24\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.manageToolbar', [\\n require('../../common/directives/share').name,\\n require('../../common/services/dashboard-service').name\\n ])\\n .directive('manageToolbar', function(user, $state, $q, dashboardService, i18nFilter) {\\n return {\\n restrict: 'EA',\\n scope: {\\n dashboards: '=',\\n selectedDashboards: '='\\n },\\n template: require('./manage-toolbar.tpl.html'),\\n link: function(scope, element, attrs) {\\n var removeDashboardFromSelection = function(dashboard) {\\n var index = scope.selectedDashboards.indexOf(dashboard);\\n if (index > -1) {\\n scope.selectedDashboards.splice(index, 1);\\n }\\n };\\n\\n scope.showSearchField = false;\\n scope.leaveModalVisible = false;\\n scope.deleteModalVisible = false;\\n scope.deleteModalDescription = '';\\n scope.shareModalVisible = false;\\n\\n scope.viewDashboard = function() {\\n $state.go('dashboard.view', {\\n dashboardId: scope.selectedDashboards[0]._id\\n });\\n };\\n\\n scope.duplicateDashboard = function() {\\n dashboardService.duplicate(scope.selectedDashboards[0]);\\n };\\n\\n scope.leaveDashboard = function() {\\n scope.leaveModalVisible = true;\\n };\\n\\n scope.confirmLeaveDashboard = function() {\\n // Copy selection in case scope.selectedDashboards is modified by the time a response is received.\\n var dashboardsToLeave = scope.selectedDashboards.slice();\\n\\n dashboardService.leave(dashboardsToLeave).then(function() {\\n dashboardsToLeave.forEach(removeDashboardFromSelection);\\n }, function(failedDashboards) {\\n dashboardsToLeave.forEach(function(dashboard) {\\n if (failedDashboards.indexOf(dashboard) === -1) {\\n removeDashboardFromSelection(dashboard);\\n }\\n });\\n });\\n };\\n\\n scope.editDashboard = function() {\\n $state.go('dashboard.edit', {\\n dashboardId: scope.selectedDashboards[0]._id\\n });\\n };\\n\\n scope.deleteDashboard = function() {\\n // We need to find unique entity IDs here instead of participant IDs. Participant objects may not have an ID.\\n // This is the case when a user/group was just added as a participant to the dashboard since the frontend does\\n // not create an ID for new participant objects. Also, it's probably not good to assume that participant IDs\\n // and entity IDs are 1:1. We're really trying to find unique entities here anyway.\\n var affectedUserIds = [];\\n var affectedGroupIds = [];\\n\\n var addAffectedEntity = function(entity) {\\n var ids;\\n switch (entity.type) {\\n case 'group':\\n ids = affectedGroupIds;\\n break;\\n default:\\n ids = affectedUserIds;\\n }\\n\\n if (ids.indexOf(entity._id) === -1) {\\n ids.push(entity._id);\\n }\\n };\\n\\n scope.selectedDashboards.forEach(function(dashboard) {\\n dashboard.participants.forEach(function(participant) {\\n addAffectedEntity(participant.entity);\\n });\\n });\\n\\n var i18nKey = affectedUserIds.length && affectedGroupIds.length ?\\n 'deleteDashboardUsersAndGroupsDescription' :\\n 'deleteDashboardUsersOrGroupsDescription';\\n\\n scope.deleteModalDescription = i18nFilter(i18nKey, {\\n NUM_DASHBOARDS: scope.selectedDashboards.length,\\n NUM_USERS_AFFECTED: affectedUserIds.length,\\n NUM_GROUPS_AFFECTED: affectedGroupIds.length\\n });\\n\\n scope.deleteModalVisible = true;\\n };\\n\\n scope.confirmDeleteDashboard = function() {\\n // Copy selection in case scope.selectedDashboards is modified by the time a response is received.\\n var dashboardsToDelete = scope.selectedDashboards.slice();\\n\\n dashboardService.destroy(dashboardsToDelete).then(function(dashboards) {\\n dashboardsToDelete.forEach(removeDashboardFromSelection);\\n }, function(failedDashboards) {\\n dashboardsToDelete.forEach(function(dashboard) {\\n if (failedDashboards.indexOf(dashboard) === -1) {\\n removeDashboardFromSelection(dashboard);\\n }\\n });\\n });\\n };\\n\\n scope.isSearchable = function() {\\n return scope.selectedDashboards.length === 0;\\n };\\n\\n scope.isShareable = function() {\\n if (scope.selectedDashboards.length !== 1) {\\n return false;\\n }\\n\\n return scope.selectedDashboards[0].isEntityAnOwner(user);\\n };\\n\\n scope.isViewable = function() {\\n return scope.selectedDashboards.length === 1;\\n };\\n\\n scope.isDuplicable = function() {\\n return scope.selectedDashboards.length === 1;\\n };\\n\\n scope.isDownloadable = function() {\\n return scope.selectedDashboards.length === 1;\\n };\\n\\n scope.isLeavable = function() {\\n if (scope.selectedDashboards.length === 0) {\\n return false;\\n }\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n var dashboard = scope.selectedDashboards[i];\\n // If the user is the only owner of the dashboard\\n if (dashboard.isEntitySoleOwner(user)) {\\n return false;\\n }\\n }\\n\\n return true;\\n };\\n\\n scope.isLeaveViewable = function() {\\n if (scope.isLeavable()) {\\n return true;\\n }\\n\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n if (!scope.selectedDashboards[i].isEntityAnOwner(user)) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n scope.isEditable = function() {\\n return scope.selectedDashboards.length === 1 && scope.selectedDashboards[0].isEntityAnOwner(user);\\n };\\n\\n scope.isDeletable = function() {\\n var owningOnly = true;\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n if (!scope.selectedDashboards[i].isEntityAnOwner(user)) {\\n owningOnly = false;\\n }\\n }\\n return owningOnly;\\n };\\n\\n scope.isDeleteViewable = function() {\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n if (scope.selectedDashboards[i].isEntityAnOwner(user)) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n scope.share = function() {\\n scope.shareModalVisible = true;\\n };\\n\\n scope.saveDashboard = function(dashboard) {\\n dashboardService.save(dashboard);\\n };\\n\\n// Debugging.\\n// scope.$watch('dashboards', function() {\\n// if (scope.dashboards && scope.dashboards.length > 0) {\\n// scope.selectedDashboards = [scope.dashboards[0]];\\n// scope.share();\\n// }\\n// });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/directives/manage-toolbar.js\\n ** module id = 25\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardSearch', [])\\n .directive('dashboardSearch', function() {\\n return {\\n restrict: 'EA',\\n scope: {\\n dashboards: '='\\n },\\n template: require('./dashboard-search.tpl.html'),\\n link: function(scope, element, attrs) {\\n element.find('.js-coral-Autocomplete-textfield').focus();\\n element.on('change:value', function(event, payload) {\\n // TODO: Somehow change the dashboard filter.\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/directives/dashboard-search.js\\n ** module id = 26\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<manage-toolbar dashboards=\\\\\\\"dashboards\\\\\\\" selected-dashboards=\\\\\\\"selectedDashboards\\\\\\\"></manage-toolbar>\\\\n<div class=\\\\\\\"u-totem-contentUnderActionBar\\\\\\\">\\\\n <table class=\\\\\\\"coral-Table totem-ManageTable\\\\\\\" selection-table row-models=\\\\\\\"dashboards\\\\\\\" selected-row-models=\\\\\\\"selectedDashboards\\\\\\\" selection-model-map=\\\\\\\"dashboard\\\\\\\">\\\\n <thead>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--select\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-all-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--favorite\\\\\\\"></th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--name\\\\\\\" ng-click=\\\\\\\"setSort('name')\\\\\\\" sort-header>\\\\n {{ 'name' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'name'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--editors\\\\\\\" ng-click=\\\\\\\"setSort(getFirstOwnerFullName)\\\\\\\" sort-header>\\\\n {{ 'owners' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === getFirstOwnerFullName\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--viewers\\\\\\\" ng-click=\\\\\\\"setSort('participants.length')\\\\\\\" sort-header>\\\\n {{ 'viewers' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'participants.length'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--views\\\\\\\" ng-click=\\\\\\\"setSort('views')\\\\\\\" sort-header>\\\\n {{ 'views' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'views'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--scheduled\\\\\\\">{{ 'scheduled' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--updated\\\\\\\" ng-click=\\\\\\\"setSort('modified')\\\\\\\" sort-header>\\\\n {{ 'updated' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'modified'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n </tr>\\\\n </thead>\\\\n <tbody>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-repeat=\\\\\\\"dashboard in dashboards | orderBy:sortPredicate:sortReverse\\\\\\\">\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-item-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell totem-ManageTable-cell--favorite\\\\\\\"><button class=\\\\\\\"coral-MinimalButton totem-FavoriteButton\\\\\\\" ng-click=\\\\\\\"toggleFavorite(dashboard)\\\\\\\"><i class=\\\\\\\"coral-Icon totem-FavoriteIcon\\\\\\\" ng-class=\\\\\\\"{'coral-Icon--star totem-FavoriteIcon--selected': isDashboardFavorited(dashboard), 'coral-Icon--starStroke': !isDashboardFavorited(dashboard)}\\\\\\\"></i></button></td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><a class=\\\\\\\"coral-Link\\\\\\\" ui-sref=\\\\\\\"dashboard.view({dashboardId: dashboard._id})\\\\\\\">{{ dashboard.name }}</a></td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\">{{ getPluralizedOwners(getOwners(dashboard)) }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon coral-Icon--user coral-Icon--sizeXS totem-ManageTable-labelIcon\\\\\\\"></i>{{ dashboard.participants.length | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon coral-Icon--viewOn coral-Icon--sizeXS totem-ManageTable-labelIcon\\\\\\\"></i>{{ '18283' | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon coral-Icon--email coral-Icon--sizeXS totem-ManageTable-labelIcon\\\\\\\"></i>Me + 3</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell--updated\\\\\\\">{{ dashboard.modified | date: 'mediumDate' }}</td>\\\\n </tr>\\\\n </tbody>\\\\n </table>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/views/manage.tpl.html\\n ** module id = 27\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<ad-hoc-manage-toolbar collections=\\\\\\\"adHocCollections\\\\\\\" selected-collections=\\\\\\\"selectedAdHocCollections\\\\\\\"></ad-hoc-manage-toolbar>\\\\n<div class=\\\\\\\"u-totem-contentUnderActionBar\\\\\\\">\\\\n <table class=\\\\\\\"coral-Table totem-AdHocTable totem-AdHocTable--collections\\\\\\\" selection-table row-models=\\\\\\\"collections\\\\\\\" selected-row-models=\\\\\\\"selectedAdHocCollections\\\\\\\" selection-model-map=\\\\\\\"collection\\\\\\\">\\\\n <thead>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--select\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-all-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell\\\\\\\" ng-click=\\\\\\\"setSort('name')\\\\\\\" sort-header>\\\\n {{ 'name' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'name'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--createdBy\\\\\\\" sort-header>\\\\n {{ 'createdby' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--dashboardCount\\\\\\\" sort-header>\\\\n {{ 'dashboards' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--records\\\\\\\" ng-click=\\\\\\\"setSort('rowCount')\\\\\\\" sort-header>\\\\n {{ 'records' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'rowCount'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--capacity\\\\\\\" ng-click=\\\\\\\"setSort(getCapacity)\\\\\\\" sort-header>\\\\n {{ 'capacity' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === getCapacity\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n </tr>\\\\n </thead>\\\\n <tbody>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-repeat=\\\\\\\"collection in adHocCollections | orderBy:sortPredicate:sortReverse\\\\\\\">\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-item-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\"><a class=\\\\\\\"coral-Link\\\\\\\" ui-sref=\\\\\\\"collection({collectionId:collection.id})\\\\\\\">{{ collection.name }}</a><br>{{collection.description}}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon totem-ManageTable-labelIcon coral-Icon--user coral-Icon--sizeXS\\\\\\\"></i>{{ 'Travis Funk' }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\">{{ 1 | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\">{{ collection.rowCount | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell--capacity\\\\\\\">\\\\n <ad-hoc-capacity usage=\\\\\\\"{{collection.rowCount}}\\\\\\\" capacity=\\\\\\\"{{collection.maxRows}}\\\\\\\"></ad-hoc-capacity>\\\\n </td>\\\\n </tr>\\\\n </tbody>\\\\n </table>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/views/ad-hoc.tpl.html\\n ** module id = 28\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar-title\\\\\\\">\\\\n {{ 'manageCollections' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancelEditing()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-disabled=\\\\\\\"!collection.name || (!collection && !uploadFileName) || saveDisabled\\\\\\\" ng-click=\\\\\\\"saveCollection()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n</div>\\\\n<div class=\\\\\\\"u-totem-contentUnderEditTitleBar\\\\\\\">\\\\n <div class=\\\\\\\"totem-ActionBar\\\\\\\" ng-show=\\\\\\\"collection.rowCount > 0\\\\\\\">\\\\n <div class=\\\\\\\"coral-ButtonGroup\\\\\\\">\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--alias\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Export</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"forceUploadVisibility = true\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Add Data</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--delete\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Delete Data</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--tableHistogram\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">View Schema</span></a>\\\\n </div>\\\\n </div>\\\\n <section class=\\\\\\\"totem-Section\\\\\\\">\\\\n <form class=\\\\\\\"coral-Form coral-Form--vertical\\\\\\\" style=\\\\\\\"width:100%\\\\\\\">\\\\n <label class=\\\\\\\"coral-Form-fieldlabel\\\\\\\">\\\\n <span class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'name' | i18n }}</span>\\\\n <input class=\\\\\\\"coral-Form-field coral-Textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" ng-model=\\\\\\\"collection.name\\\\\\\">\\\\n </label>\\\\n\\\\n <label class=\\\\\\\"coral-Form-fieldlabel\\\\\\\">\\\\n <span class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'description' | i18n }}</span>\\\\n <input class=\\\\\\\"u-totem-noMargin coral-Form-field coral-Textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" ng-model=\\\\\\\"collection.description\\\\\\\" maxlength=\\\\\\\"255\\\\\\\">\\\\n </label>\\\\n </form>\\\\n </section>\\\\n <section class=\\\\\\\"totem-Section\\\\\\\" ng-show=\\\\\\\"forceUploadVisibility || (collection && !collection.rowCount)\\\\\\\">\\\\n <h4 class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'dataUpload' | i18n }}</h4>\\\\n <ad-hoc-data-upload save-disabled=\\\\\\\"saveDisabled\\\\\\\" upload-file-name=\\\\\\\"uploadFileName\\\\\\\" collection=\\\\\\\"collection\\\\\\\"></ad-hoc-data-upload>\\\\n </section>\\\\n <section class=\\\\\\\"totem-Section\\\\\\\" ng-show=\\\\\\\"collection.rowCount > 0\\\\\\\">\\\\n <h4 class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'uploadHistory' | i18n }}</h4>\\\\n <table class=\\\\\\\"totem-AdHocTable totem-AdHocTable--collection coral-Table coral-Table--bordered\\\\\\\">\\\\n <thead>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--name\\\\\\\">{{ 'fileName' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--dateUploaded\\\\\\\">{{ 'dateUploaded' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--records\\\\\\\">{{ 'records' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--dashboardCount\\\\\\\">{{ 'dashboards' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--capacity\\\\\\\">{{ 'capacity' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--expander\\\\\\\"></th>\\\\n </tr>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-click=\\\\\\\"showDetails = !showDetails\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\">{{ 'allData' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\"> - </th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\">{{ collection.rowCount | number }}</th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\">3</th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader totem-AdHocTable-cell--capacity\\\\\\\">\\\\n <ad-hoc-capacity usage=\\\\\\\"{{collection.rowCount}}\\\\\\\" capacity=\\\\\\\"{{collection.maxRows}}\\\\\\\"></ad-hoc-capacity>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader totem-AdHocTable-headerCell--expander\\\\\\\">\\\\n <i class=\\\\\\\"totem-ActionButton-icon coral-Icon\\\\\\\" ng-class=\\\\\\\"{ 'coral-Icon--chevronDown': showDetails, 'coral-Icon--chevronRight': !showDetails }\\\\\\\"></i>\\\\n </th>\\\\n </tr>\\\\n </thead>\\\\n <tbody ng-show='showDetails'>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-repeat=\\\\\\\"upload in collection.uploads\\\\\\\">\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">{{ upload.fileName || ('unknownFileName' | i18n) }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">{{ upload.dateUploaded | date }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">{{ upload.rowCount | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">-</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">-</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata totem-AdHocTable-cell--deleteUpload\\\\\\\" ng-click=\\\\\\\"deleteUpload(collection, upload)\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--delete\\\\\\\"></i></td>\\\\n </tr>\\\\n </tbody>\\\\n </table>\\\\n </section>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/views/collection.tpl.html\\n ** module id = 29\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<form class=\\\\\\\"coral-Form coral-Form--vertical\\\\\\\" style=\\\\\\\"width:100%\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar-title\\\\\\\">\\\\n {{ 'validateUploadedData' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancelUpload()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-disabled=\\\\\\\"saveDisabled\\\\\\\" ng-click=\\\\\\\"saveCollection()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n</form>\\\\n<div class=\\\\\\\"u-totem-contentUnderEditTitleBar\\\\\\\">\\\\n <div class=\\\\\\\"coral-Alert coral-Alert--error\\\\\\\" ng-show=\\\\\\\"uploadError\\\\\\\">\\\\n <i class=\\\\\\\"coral-Alert-typeIcon coral-Icon coral-Icon--sizeS coral-Icon--alert\\\\\\\"></i>\\\\n <strong class=\\\\\\\"coral-Alert-title\\\\\\\">Error</strong>\\\\n <div class=\\\\\\\"coral-Alert-message\\\\\\\">{{ uploadErrorMessage }}</div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-contents\\\\\\\">\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowHeaderBlock\\\\\\\" >\\\\n <!-- fixed row headers -->\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowDescriptor\\\\\\\">\\\\n {{ 'adHocAttributeName' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowDescriptor\\\\\\\">\\\\n {{ 'adHocAttributeType' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-dataSpacer\\\\\\\">\\\\n <!-- spacer -->\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowDescriptor\\\\\\\">\\\\n <!-- data header -->\\\\n {{ 'sampleData' | i18n }}\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-sampleDataContainer\\\\\\\">\\\\n <table>\\\\n <tr class=\\\\\\\"totem-AdHocValidate-nameRow\\\\\\\">\\\\n <td class=\\\\\\\"totem-AdHocValidate-metaData totem-AdHocValidate-metaData--textbox\\\\\\\" ng-repeat=\\\\\\\"(adHocColumnKey,adHocColumn) in adHocSchema\\\\\\\">\\\\n <input ng-if=\\\\\\\"schemaEditable\\\\\\\" type=\\\\\\\"text\\\\\\\" class=\\\\\\\"coral-Textfield totem-AdHocValidate-metaDataInput\\\\\\\" ng-model=\\\\\\\"adHocSchema[adHocColumnKey].prettyName\\\\\\\">\\\\n <div class=\\\\\\\"totem-AdHocValidate-metaDataInput totem-AdHocValidate-metaDataInput--noEdit\\\\\\\" ng-if=\\\\\\\"!schemaEditable\\\\\\\">{{adHocSchema[adHocColumnKey].prettyName}}</div>\\\\n </td>\\\\n </tr>\\\\n <tr>\\\\n <td class=\\\\\\\"totem-AdHocValidate-metaData totem-AdHocValidate-metaData--select\\\\\\\" ng-repeat=\\\\\\\"(adHocColumnKey,adHocColumn) in adHocSchema\\\\\\\">\\\\n <cui-select ng-if=\\\\\\\"schemaEditable\\\\\\\" class=\\\\\\\"totem-AdHocValidate-metaDataInput\\\\\\\" id='adHocTypeId' options=\\\\\\\"columnOptions\\\\\\\" label=\\\\\\\"'label'\\\\\\\" selection=\\\\\\\"selectedTypes[adHocColumnKey]\\\\\\\"></cui-select>\\\\n <div class=\\\\\\\"totem-AdHocValidate-metaDataInput totem-AdHocValidate-metaDataInput--noEdit\\\\\\\" ng-if=\\\\\\\"!schemaEditable\\\\\\\">{{selectedTypes[adHocColumnKey].label}}</div>\\\\n </td>\\\\n </tr>\\\\n <tr style=\\\\\\\"padding:0;margin:0;\\\\\\\">\\\\n <td class=\\\\\\\"totem-AdHocValidate-dataSpacer\\\\\\\" ng-repeat=\\\\\\\"adHocColumn in adHocSchema\\\\\\\"></td>\\\\n </tr>\\\\n <tr ng-repeat=\\\\\\\"dataRow in adHocData\\\\\\\">\\\\n <td class=\\\\\\\"totem-AdHocValidate-sampleData totem-AdHocValidate-sampleData--datum\\\\\\\" ng-repeat=\\\\\\\"(adHocColumnKey, adHocColumnValue) in adHocSchema\\\\\\\">{{ dataRow[adHocColumnKey] }}</td>\\\\n </tr>\\\\n </table>\\\\n </div>\\\\n </div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/views/validate-upload.tpl.html\\n ** module id = 30\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<dashboard-rail ng-show=\\\\\\\"showRail && !editable\\\\\\\"></dashboard-rail>\\\\n<div class=\\\\\\\"totem-NonRail\\\\\\\" editable=\\\\\\\"editable\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\" ng-if=\\\\\\\"editable\\\\\\\">\\\\n <name-editor name=\\\\\\\"dashboard.name\\\\\\\"></name-editor>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancelEditing()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-click=\\\\\\\"saveDashboard()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-ActionBar\\\\\\\">\\\\n <div class=\\\\\\\"coral-ButtonGroup\\\\\\\">\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"toggleRail()\\\\\\\" ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--dashboard\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ getRailToggleText(showRail) }}</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ui-sref=\\\\\\\"dashboard.edit({dashboardId: dashboard._id})\\\\\\\" ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--edit\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'edit' | i18n }}</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" href=\\\\\\\"/dashboards/{{dashboard._id}}.pdf?hour=1\\\\\\\" download ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--download\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'download' | i18n }}</span></a>\\\\n <!--<a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" href=\\\\\\\"/dashboards/{{dashboard._id}}.pptx?hour=1\\\\\\\" download ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--download\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Download PPT</span></a>-->\\\\n\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"newInstrumentConfigVisible = true\\\\\\\" ng-show=\\\\\\\"editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'addInstrument' | i18n }}</span></a>\\\\n </div>\\\\n </div>\\\\n <div ng-class=\\\\\\\"{'u-totem-contentUnderEditActionBar': editable, 'u-totem-contentUnderActionBar': !editable}\\\\\\\" responsive-evaluator editable=\\\\\\\"editable\\\\\\\">\\\\n <div class=\\\\\\\"totem-Measurements\\\\\\\" ng-if=\\\\\\\"editable\\\\\\\" ng-style=\\\\\\\"getMeasurementsStyle()\\\\\\\">\\\\n <ruler></ruler>\\\\n <media-definition-track></media-definition-track>\\\\n <media-definition-menu media-definitions=\\\\\\\"mediaDefinitions\\\\\\\"></media-definition-menu>\\\\n </div>\\\\n <dashboard-canvas editable=\\\\\\\"editable\\\\\\\"></dashboard-canvas>\\\\n </div>\\\\n <new-instrument-configuration ng-show=\\\\\\\"editable\\\\\\\" visible=\\\\\\\"newInstrumentConfigVisible\\\\\\\"></new-instrument-configuration>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/views/dashboard.tpl.html\\n ** module id = 31\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\">\\\\n <name-editor name=\\\\\\\"instrument.title\\\\\\\"></name-editor>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancel()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-click=\\\\\\\"save()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n</div>\\\\n<instrument-editor-bootstrap instrument=\\\\\\\"instrument\\\\\\\"></instrument-editor-bootstrap>\\\\n\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/views/instrument.tpl.html\\n ** module id = 32\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-InstrumentCanvas totem-InstrumentCanvas--renderOnly\\\\\\\">\\\\n <div class=\\\\\\\"totem-InstrumentCanvas-content\\\\\\\">\\\\n <instrument instrument=\\\\\\\"instrument\\\\\\\" class=\\\\\\\"totem-InstrumentCanvas-instrument\\\\\\\"></instrument>\\\\n </div>\\\\n</div>\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/views/render-instrument.tpl.html\\n ** module id = 33\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.adHocManageToolbar', [\\n require('../../common/services/ad-hoc-service').name,\\n require('../../common/directives/share').name\\n ])\\n .directive('adHocManageToolbar', function(user, $state, $q, dashboardService, i18nFilter, adHocService) {\\n return {\\n restrict: 'EA',\\n scope: {\\n collections: '=',\\n selectedCollections: '='\\n },\\n template: require('./ad-hoc-manage-toolbar.tpl.html'),\\n link: function(scope, element, attrs) {\\n scope.showSearchField = false;\\n scope.leaveModalVisible = false;\\n scope.deleteModalVisible = false;\\n scope.deleteModalDescription = '';\\n\\n scope.viewCollection = function() {\\n $state.go('collection', {\\n collectionId: scope.selectedCollections[0]._id\\n });\\n };\\n\\n scope.deleteCollections = function() {\\n scope.deleteCollectionDescription = i18nFilter('deleteCollectionDescription', {\\n NUM_COLLECTIONS: scope.selectedCollections.length\\n });\\n\\n scope.deleteCollectionTitle = i18nFilter('deleteCollectionTitle', {\\n NUM_COLLECTIONS: scope.selectedCollections.length\\n });\\n\\n scope.deleteModalVisible = true;\\n };\\n\\n scope.confirmDeleteCollection = function() {\\n var promises = [];\\n var origSelectedCollections = [];\\n scope.selectedCollections.forEach(function(collection) {\\n promises.push(adHocService.deleteCollection(collection));\\n });\\n\\n $q.all(promises).then(function(collection) {\\n scope.collections.forEach(function(collection) {\\n var index = scope.selectedCollections.indexOf(collection);\\n if (index > -1) {\\n origSelectedCollections.push(collection);\\n scope.selectedCollections.splice(index, 1);\\n }\\n });\\n });\\n };\\n\\n scope.isSearchable = function() {\\n return scope.selectedCollections.length === 0;\\n };\\n\\n scope.isViewable = function() {\\n return scope.selectedCollections.length === 1;\\n };\\n\\n scope.isEditable = function() {\\n return scope.selectedDashboards.length === 1 && scope.selectedDashboards[0].isEntityAnOwner(user);\\n };\\n\\n scope.isDeletable = function() {\\n // console.log('deleteable');\\n // var owningOnly = true;\\n // for (var i = 0; i < scope.selectedCollections.length; i++) {\\n // if (!scope.selectedCollections[i].isEntityAnOwner(user)) {\\n // owningOnly = false;\\n // }\\n // }\\n // return owningOnly;\\n return true;\\n };\\n\\n scope.isShareable = function() {\\n return scope.selectedCollections.length === 1;\\n };\\n\\n scope.isDeleteViewable = function() {\\n if(scope.selectedCollections.length > 0) {\\n return true;\\n }\\n for (var i = 0; i < scope.selectedCollections.length; i++) {\\n if (scope.selectedCollections[i].isEntityAnOwner(user)) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n scope.createCollection = function() {\\n adHocService.resetCurrentCollection();\\n $state.go('collection',{collectionId:null});\\n };\\n\\n scope.saveCollection = function(collection) {\\n adHocService.savePermissions(collection);\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-manage-toolbar.js\\n ** module id = 34\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.adHocSearch', [])\\n .directive('adHocSearch', function() {\\n return {\\n restrict: 'EA',\\n scope: {\\n dashboards: '='\\n },\\n template: require('./ad-hoc-search.tpl.html'),\\n link: function(scope, element, attrs) {\\n element.find('.js-coral-Autocomplete-textfield').focus();\\n element.on('change:value', function(event, payload) {\\n // TODO: Somehow change the dashboard filter.\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-search.js\\n ** module id = 35\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.adHocCapacity', [\\n ])\\n .directive('adHocCapacity', function() {\\n return {\\n restrict: 'E',\\n scope: {\\n capacity:'@',\\n usage:'@'\\n },\\n template: require('./ad-hoc-capacity.tpl.html'),\\n link: function (scope, element, attrs) {\\n scope.getPercent = function(precision) {\\n var percent = scope.usage / scope.capacity * 100;\\n if(percent > 100) { percent = 100; }\\n if(precision) {\\n percent = percent.toPrecision(precision);\\n } else {\\n percent = Math.round(percent);\\n }\\n return percent;\\n };\\n\\n scope.getClass = function(percent) {\\n var ret = 'totem-Capacity-barSegment--good'; // green\\n if(percent > 70) {\\n ret = 'totem-Capacity-barSegment--warn'; // yellow above 70%\\n }\\n if(percent > 90) { \\n ret = 'totem-Capacity-barSegment--danger'; // red above 90%\\n }\\n return ret;\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-capacity.js\\n ** module id = 36\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dataUpload', [\\n require('./ad-hoc-file-upload').name\\n ])\\n .directive('adHocDataUpload', function() {\\n return {\\n restrict: 'E',\\n template: require('./ad-hoc-data-upload.tpl.html'),\\n scope: {\\n collection:'=',\\n uploadFileName:'=',\\n saveDisabled:'='\\n }\\n };\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-data-upload.js\\n ** module id = 37\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardCanvas', [\\n require('../../common/directives/draggable').name,\\n require('../../common/directives/resizeable').name,\\n require('../../common/directives/tap').name,\\n require('../../common/services/dashboard-workspace').name,\\n require('../../instrument/services/instrument-event-bus').name\\n ])\\n .directive('dashboardCanvas', function(gridSpacing, eventBus, dashboardWorkspaceService, instrumentEventBus, minInstrumentWidth, minInstrumentHeight) {\\n return {\\n restrict: 'AE',\\n scope: {\\n editable: '='\\n },\\n template: require('./dashboard-canvas.tpl.html'),\\n link: function(scope, element, attrs) {\\n /**\\n * Cached map where the key is the instrument ID and the value is the corresponding media layout.\\n * This is for optimization.\\n */\\n var mediaLayoutByInstrumentId;\\n\\n scope.getGridStyle = function() {\\n if (dashboardWorkspaceService.mediaDefinition && dashboardWorkspaceService.mediaLayouts) {\\n var gridHeight;\\n\\n if (dashboardWorkspaceService.mediaLayouts.length) {\\n // Set the grid height to accommodate down to the bottom of the lowest media layout.\\n var maxY = 0;\\n\\n dashboardWorkspaceService.mediaLayouts.forEach(function(mediaLayout) {\\n maxY = Math.max(maxY, mediaLayout.y + mediaLayout.height);\\n });\\n\\n gridHeight = (maxY + 1) * gridSpacing; // + 1 just to give an arbitrary little gap at the bottom\\n } else {\\n gridHeight = 400;\\n }\\n\\n return {\\n 'background-size': gridSpacing + 'px ' + gridSpacing + 'px',\\n width: dashboardWorkspaceService.mediaDefinition.width,\\n height: gridHeight\\n };\\n }\\n return null;\\n };\\n\\n scope.getInstrumentStyle = function(instrument) {\\n var mediaLayout = mediaLayoutByInstrumentId[instrument._id];\\n if (mediaLayout) {\\n return {\\n left: mediaLayout.x * gridSpacing,\\n top: mediaLayout.y * gridSpacing,\\n width: mediaLayout.width * gridSpacing,\\n height: mediaLayout.height * gridSpacing\\n };\\n } else {\\n return {\\n visible: false\\n };\\n }\\n };\\n\\n scope.constrainDrag = function(rect) {\\n var container = element.find('.totem-DashboardCanvas');\\n var width = container.innerWidth();\\n var height = container.innerHeight();\\n\\n // Constrain to the bounds of the dashboard.\\n rect.x = Math.min(Math.max(0, rect.x), width - rect.width);\\n rect.y = Math.min(Math.max(0, rect.y), height - rect.height);\\n\\n // Adjust to grid\\n rect.x -= (rect.x % gridSpacing);\\n rect.y -= (rect.y % gridSpacing);\\n\\n return rect;\\n };\\n\\n scope.constrainResize = function(rect, origRect) {\\n var container = element.find('.totem-DashboardCanvas');\\n var containerRect = {\\n width: container.innerWidth(),\\n height: container.innerHeight(),\\n x: container.position().left,\\n y: container.position().top\\n };\\n\\n // Enforce minimum dimensions\\n rect.width = Math.max(minInstrumentWidth, rect.width);\\n rect.height = Math.max(minInstrumentWidth, rect.height);\\n if(rect.width == minInstrumentWidth) {\\n rect.x = Math.min(origRect.x + (origRect.width - rect.width), rect.x);\\n }\\n\\n // Forbid escaping the container\\n if(rect.x + rect.width > containerRect.width) {\\n rect.width = containerRect.width - rect.x;\\n }\\n if(rect.x <= 0) {\\n rect.x = 0;\\n rect.width = origRect.x + origRect.width;\\n }\\n\\n // Adjust to grid\\n rect.height -= (rect.height % gridSpacing);\\n rect.x -= (rect.x % gridSpacing);\\n if(rect.width % gridSpacing !== 0) {\\n rect.width += gridSpacing - (rect.width % gridSpacing);\\n }\\n\\n return rect;\\n };\\n\\n scope.bringToFront = function(instrument) {\\n if (!scope.editable) {\\n return;\\n }\\n\\n dashboardWorkspaceService.dashboard.bringInstrumentToFront(\\n instrument, dashboardWorkspaceService.mediaDefinition);\\n };\\n\\n var commitRect = function(instrument, rect) {\\n var mediaLayout = mediaLayoutByInstrumentId[instrument._id];\\n mediaLayout.width = rect.width / gridSpacing;\\n mediaLayout.height = rect.height / gridSpacing;\\n mediaLayout.x = rect.x / gridSpacing;\\n mediaLayout.y = rect.y / gridSpacing;\\n };\\n\\n scope.dragContinue = scope.dragComplete = commitRect;\\n\\n scope.resizeBegin = function(instrument) {\\n instrumentEventBus.publish({\\n topic: 'resizing',\\n to: instrument._id\\n });\\n };\\n\\n scope.resizeContinue = commitRect;\\n\\n scope.resizeComplete = function(instrument, rect) {\\n instrumentEventBus.publish({\\n topic: 'resized',\\n to: instrument._id\\n });\\n commitRect(instrument, rect);\\n };\\n\\n scope.$watchGroup([\\n function() { return dashboardWorkspaceService.instruments; },\\n function() { return dashboardWorkspaceService.mediaLayouts; }\\n ], function(newValues) {\\n var instruments = newValues[0];\\n var mediaLayouts = newValues[1];\\n if (instruments && mediaLayouts) {\\n mediaLayoutByInstrumentId = {};\\n instruments.forEach(function(instrument) {\\n mediaLayouts.forEach(function(mediaLayout) {\\n if (mediaLayout.instrumentId === instrument._id) {\\n mediaLayoutByInstrumentId[instrument._id] = mediaLayout;\\n return false;\\n }\\n });\\n });\\n\\n scope.instruments = instruments;\\n }\\n });\\n\\n // Watch for z-index changes within the media layout models. When we see a change, sort the instruments\\n // based on their z-index.\\n scope.$watch(function() {\\n if (dashboardWorkspaceService.mediaLayouts) {\\n var zIndexHash = '';\\n\\n var mediaLayouts = dashboardWorkspaceService.mediaLayouts;\\n for (var i = 0; i < mediaLayouts.length; i++) {\\n var mediaLayout = mediaLayouts[i];\\n // I know this looks like a hack but it's the most performant way I can think of for detecting when\\n // z-index changes on any of the active media layouts. If you can think of a better way, please feel free\\n // to change. While we could deep watch the media layouts, a change to x, y, width, or height on the\\n // media layout would trigger the watcher. While we could create an array of z-index values from the\\n // media layouts, would would have to deep compare the array. Creating this hash seems more\\n // efficient because no deep watch is necessary.\\n\\n // Media layout ID needs to be included in the hash to support the case where a user changes\\n // media definitions and the media layouts for the new media definition contain the same z-index values\\n // in the same order as the media layouts of the previous media definition. In this case we still need to\\n // execute the instrument reordering process.\\n zIndexHash += mediaLayout._id + ':' + mediaLayout.zIndex + ',';\\n }\\n\\n return zIndexHash;\\n }\\n }, function() {\\n if (scope.instruments && dashboardWorkspaceService.mediaLayouts) {\\n sortInstrumentsByZIndex(scope.instruments, dashboardWorkspaceService.mediaLayouts);\\n }\\n });\\n\\n /**\\n * Sorts instruments by the z-index of their respective media layouts.\\n *\\n * This is used for ordering instruments on screen such that they are properly stacked in the z dimension\\n * using DOM element ordering rather than CSS z-index. We prefer element ordering over CSS z-index in order to\\n * avoid conflicting with the z-index of surrounding components in the application.\\n *\\n * @param instruments\\n * @param mediaLayouts\\n * @returns {*}\\n */\\n var sortInstrumentsByZIndex = function(instruments, mediaLayouts) {\\n instruments.sort(function(instrumentA, instrumentB) {\\n var mediaLayoutA = mediaLayoutByInstrumentId[instrumentA._id];\\n var mediaLayoutB = mediaLayoutByInstrumentId[instrumentB._id];\\n if (mediaLayoutA && mediaLayoutB) {\\n if (mediaLayoutA.zIndex === undefined) {\\n return -1;\\n } else if (mediaLayoutB.zIndex === undefined) {\\n return 1;\\n } else {\\n return mediaLayoutA.zIndex - mediaLayoutB.zIndex;\\n }\\n }\\n });\\n\\n return instruments;\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-canvas.js\\n ** module id = 38\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardRail', [\\n ])\\n .directive('dashboardRail', function(dashboardService, dashboardWorkspaceService) {\\n return {\\n restrict: 'AE',\\n template: require('./dashboard-rail.tpl.html'),\\n link: function(scope, element, attrs) {\\n dashboardService.query().then(function(dashboards) {\\n scope.dashboards = dashboards;\\n });\\n\\n scope.isActiveDashboard = function(dashboard) {\\n return dashboardWorkspaceService.dashboard && dashboardWorkspaceService.dashboard._id === dashboard._id;\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-rail.js\\n ** module id = 39\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.responsiveEvaluator', [\\n require('../services/event-bus').name,\\n require('../../common/services/debounce').name,\\n require('../../common/services/dashboard-workspace').name\\n ])\\n .directive('responsiveEvaluator', function($timeout, $window, dashboardWorkspaceService, eventBus, debounce) {\\n return {\\n scope: {\\n editable: '='\\n },\\n link: function(scope, element, attrs) {\\n var debouncedWindowResize = debounce(function() {\\n scope.$apply(function() {\\n findBestFitMediaDefinition();\\n });\\n }, 30);\\n\\n var findBestFitMediaDefinition = function() {\\n if (!dashboardWorkspaceService.dashboard) {\\n return;\\n }\\n\\n var bestFit, smallestFit,\\n width = element.innerWidth();\\n\\n dashboardWorkspaceService.dashboard.mediaDefinitions.forEach(function(definition) {\\n if (definition.width < width && (!bestFit || definition.width > bestFit.width)) {\\n bestFit = definition;\\n }\\n if (!smallestFit || definition.width < smallestFit.width) {\\n smallestFit = definition;\\n }\\n });\\n\\n if(!bestFit) {\\n bestFit = smallestFit;\\n }\\n\\n // Let's say the best fit media definition is 1000px wide and the width allotted for the dashboard\\n // (derived from the container width) is 1000px. The dashboard would fit nicely. However, say that dashboard\\n // is long enough that it requires vertical scrolling. When the vertical scrollbar shows up, a horizontal\\n // scrollbar shows up as well because the content is now too wide for the container width minus\\n // the vertical scrollbar width. This is a sketchy situation. Do we bump the dashboard down to the next\\n // smallest media definition (we could calculate whether a vertical scrollbar will show up beforehand by\\n // comparing the container height with positions and heights of media layouts)? Do we show leave the\\n // horizontal scrollbar? Do we hide the horizontal scrollbar and let the vertical scrollbar just cover a bit\\n // of the dashboard? We've decided to take the last approach. However, if the active media definition is the\\n // smallest media definition, we set the horizontal scrollbar to auto since the user may legitimately need to\\n // scroll horizontally to see all the dashboard content. This is definitely subject to change.\\n if (smallestFit === bestFit) {\\n element.css('overflow-x', 'auto');\\n } else {\\n element.css('overflow-x', 'hidden');\\n }\\n\\n dashboardWorkspaceService.mediaDefinition = bestFit;\\n };\\n\\n eventBus.subscribe('resetActiveMediaDefinition', function() {\\n // http://stackoverflow.com/questions/25330149/why-is-the-asyncqueue-processed-before-watchers/25330696\\n scope.$$postDigest(function() {\\n scope.$apply(findBestFitMediaDefinition);\\n });\\n });\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function() {\\n findBestFitMediaDefinition();\\n });\\n\\n scope.$watch('editable', function(editable) {\\n if (editable) {\\n angular.element($window).off('resize.mediaDefinition');\\n } else {\\n angular.element($window).on('resize.mediaDefinition', debouncedWindowResize);\\n\\n // When the user navigates from editing a dashboard to viewing a dashboard, we want make sure we're showing\\n // the best fit media definition rather than the last media definition the user was editing.\\n findBestFitMediaDefinition();\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/responsive-evaluator.js\\n ** module id = 40\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardInstrumentChrome', [\\n require('../services/event-bus').name\\n ])\\n .directive('dashboardInstrumentChrome', function(eventBus, $stateParams, $state, dashboardWorkspaceService) {\\n return {\\n restrict: 'AE',\\n scope: {\\n editable: '=',\\n instrument: '='\\n },\\n transclude: true,\\n template: require('./dashboard-instrument-chrome.tpl.html'),\\n link: function(scope, element, attrs) {\\n scope.editInstrument = function() {\\n $state.go('instrument.edit', {\\n dashboardId: $stateParams.dashboardId,\\n instrumentId: scope.instrument._id\\n });\\n };\\n\\n scope.removeInstrument = function() {\\n dashboardWorkspaceService.dashboard.removeInstrument(scope.instrument);\\n };\\n\\n scope.duplicateInstrument = function($event) {\\n // Normally something higher in the DOM would see the click and force this instrument to be on top of other\\n // instruments. If we were to let this happen during instrument duplication, it would be forced to be on top\\n // of the new duplicate. We want the duplicate to be on top.\\n $event.stopPropagation();\\n dashboardWorkspaceService.dashboard.duplicateInstrument(scope.instrument,\\n dashboardWorkspaceService.mediaDefinition);\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-instrument-chrome.js\\n ** module id = 41\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionTrack', [\\n require('./media-definition-range').name,\\n require('./media-definition-rename-popover').name,\\n require('./media-definition-delete-popover').name,\\n require('../services/event-bus').name,\\n require('../../common/services/uuid').name,\\n require('../../common/services/dashboard-workspace').name,\\n require('../../instrument/services/instrument-event-bus').name\\n ])\\n .directive('mediaDefinitionTrack', function(eventBus, uuid, dashboardWorkspaceService, instrumentEventBus, $timeout,\\n gridSpacing, minMediaDefinitionWidth) {\\n\\n return {\\n restrict: 'AE',\\n scope: true,\\n replace: true,\\n template: require('./media-definition-track.tpl.html'),\\n link: function(scope, element, attrs) {\\n // TODO: Do this in a more Angular way?\\n var getThumbByMediaDefinition = function(mediaDefinition) {\\n var thumbs = element.find('.totem-MediaDefinitionThumb').toArray();\\n for (var i = 0; i < thumbs.length; i++) {\\n var thumb = $(thumbs[i]);\\n if (thumb.scope().mediaDefinition == mediaDefinition) {\\n return thumb;\\n }\\n }\\n };\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function(dashboard) {\\n if (dashboard) {\\n scope.mediaDefinitions = dashboard.mediaDefinitions;\\n }\\n });\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.mediaDefinition;\\n }, function(mediaDefinition) {\\n scope.activeMediaDefinition = mediaDefinition;\\n });\\n\\n scope.getRangeStyle = function(mediaDefinition) {\\n // Potential optimization point since we're sorting media definitions each time this is called (once for\\n // every media definition).\\n var mediaDefinitions = dashboardWorkspaceService.dashboard.sortMediaDefinitions();\\n var index = mediaDefinitions.indexOf(mediaDefinition);\\n if (index > 0) {\\n var previousMediaDefinition = mediaDefinitions[index - 1];\\n return {\\n left: previousMediaDefinition.width,\\n width: mediaDefinition.width - previousMediaDefinition.width\\n };\\n } else {\\n return {\\n left: 0,\\n width: mediaDefinition.width\\n };\\n }\\n };\\n\\n scope.activateMediaDefinition = function(mediaDefinition) {\\n dashboardWorkspaceService.mediaDefinition = mediaDefinition;\\n };\\n\\n scope.getThumbStyle = function(mediaDefinition) {\\n var style = {\\n left: mediaDefinition.width\\n };\\n return style;\\n };\\n\\n ///////////////////////////\\n // Thumb dragging\\n ///////////////////////////\\n\\n scope.constrainThumbDrag = function(rect) {\\n rect.y = 0;\\n rect.x = Math.min(Math.max(minMediaDefinitionWidth, rect.x), element.width());\\n rect.x -= rect.x % gridSpacing; // Snap to grid\\n return rect;\\n };\\n\\n // Media layouts pertaining to the media definition thumb being dragged.\\n var mediaLayoutsDrag,\\n // Copies of the media layouts pertaining to the media definition thumb being dragged. These contain the state\\n // as it was when the drag started.\\n mediaLayoutCopiesDragBegin,\\n // The width of the media definition being dragged as it was when the drag started.\\n mediaDefinitionWidthDragBegin;\\n\\n scope.thumbDragBegin = function(mediaDefinition) {\\n if (mediaDefinition === dashboardWorkspaceService.mediaDefinition) {\\n instrumentEventBus.publish({\\n topic: 'resizing'\\n });\\n }\\n mediaLayoutsDrag = dashboardWorkspaceService.dashboard.getMediaLayoutsForMediaDefinition(mediaDefinition);\\n mediaLayoutCopiesDragBegin = angular.copy(mediaLayoutsDrag);\\n mediaDefinitionWidthDragBegin = mediaDefinition.width;\\n };\\n\\n scope.thumbDragContinue = function(mediaDefinition, rect) {\\n mediaDefinition.width = rect.x;\\n\\n // If the name is in the format #px (which is default) then automatically update\\n // the name to match the new width.\\n if (/^\\\\d+px$/g.test(mediaDefinition.name)) {\\n mediaDefinition.name = rect.x + 'px';\\n }\\n\\n dashboardWorkspaceService.dashboard.resampleMediaLayouts(\\n mediaLayoutCopiesDragBegin,\\n mediaLayoutsDrag,\\n mediaDefinitionWidthDragBegin,\\n mediaDefinition.width);\\n };\\n\\n scope.thumbDragComplete = function(mediaDefinition) {\\n if (mediaDefinition === dashboardWorkspaceService.mediaDefinition) {\\n instrumentEventBus.publish({\\n topic: 'resized'\\n });\\n }\\n };\\n\\n ///////////////////////////\\n // Popover handling\\n ///////////////////////////\\n\\n // Unfortunately this has to be an object instead of a simple boolean in order to allow the popover directive to\\n // set the boolean and be able to see the change from within this directive. This is due to how scopes use\\n // prototypal inheritance to \\\"shadow\\\" the parent scope.\\n // Sound mysterious? See https://github.com/angular/angular.js/wiki/Understanding-Scopes for an explanation.\\n scope.renamePopoverVisibility = { visible: false };\\n scope.createPopoverVisibility = { visible: false };\\n scope.deletePopoverVisibility = { visible: false };\\n\\n var showPopover = function(mediaDefinition, popoverVisibilityName) {\\n var scrollParent = element.scrollParent(),\\n scrollParentWidth = scrollParent.width(),\\n thumbBuffer = 50; // Make sure the thumb is this many pixels away from the side of the scrollable container\\n\\n scope.popoverThumb = getThumbByMediaDefinition(mediaDefinition);\\n scope.popoverMediaDefinition = mediaDefinition;\\n\\n // Make sure the media definition thumb is visible before showing the popover.\\n var newScrollLeft;\\n\\n if (mediaDefinition.width < scrollParent[0].scrollLeft + thumbBuffer) {\\n newScrollLeft = mediaDefinition.width - thumbBuffer;\\n } else if (mediaDefinition.width > scrollParent[0].scrollLeft + scrollParentWidth - thumbBuffer) {\\n newScrollLeft = mediaDefinition.width + thumbBuffer - scrollParentWidth;\\n }\\n\\n var makeVisible = function() {\\n scope[popoverVisibilityName].visible = true;\\n };\\n\\n if (newScrollLeft !== undefined) {\\n scrollParent.animate({\\n scrollLeft: newScrollLeft\\n }, {\\n duration: 300,\\n done: function() {\\n scope.$apply(makeVisible);\\n }\\n });\\n } else {\\n makeVisible();\\n }\\n };\\n\\n eventBus.subscribe('renameMediaDefinition', function(mediaDefinition) {\\n showPopover(mediaDefinition, 'renamePopoverVisibility');\\n }, scope);\\n\\n eventBus.subscribe('addMediaDefinition', function() {\\n var previousMediaDefinition = dashboardWorkspaceService.mediaDefinition;\\n var newMediaDefinition = dashboardWorkspaceService.dashboard.createMediaDefinition(previousMediaDefinition);\\n dashboardWorkspaceService.mediaDefinition = newMediaDefinition;\\n\\n scope.cancelCreate = function() {\\n dashboardWorkspaceService.mediaDefinition = previousMediaDefinition;\\n dashboardWorkspaceService.dashboard.removeMediaDefinition(newMediaDefinition);\\n };\\n\\n // We have to wait for the thumb for the new media definition to be created before we can show\\n // the popover at its position.\\n $timeout(function() {\\n showPopover(newMediaDefinition, 'createPopoverVisibility');\\n });\\n }, scope);\\n\\n eventBus.subscribe('deleteMediaDefinition', function(mediaDefinition) {\\n showPopover(mediaDefinition, 'deletePopoverVisibility');\\n }, scope);\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-track.js\\n ** module id = 42\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionMenu', [\\n require('../services/event-bus').name,\\n require('../../common/services/dashboard-workspace').name\\n ])\\n .directive('mediaDefinitionMenu', function(eventBus, dashboardWorkspaceService) {\\n return {\\n restrict: 'AE',\\n template: require('./media-definition-menu.tpl.html'),\\n scope: true,\\n link: function(scope, element, attrs) {\\n var popover;\\n\\n scope.togglePopover = function($event) {\\n var popoverElement = $('.totem-MediaDefinitionMenu-popover');\\n popover = popoverElement.data('popover');\\n if (!popover) {\\n popover = new CUI.Popover({\\n element: popoverElement,\\n pointAt: $event.currentTarget,\\n alignFrom: 'right'\\n });\\n }\\n popover.toggleVisibility();\\n };\\n\\n scope.rowChildMouseenter = scope.rowChildFocus = function(event) {\\n $(event.currentTarget.parentNode).addClass('is-highlighted');\\n };\\n\\n scope.rowChildMouseleave = scope.rowChildBlur = function(event) {\\n var parent = $(event.currentTarget.parentNode);\\n if (!parent.children(':focus').length) {\\n parent.removeClass('is-highlighted');\\n }\\n };\\n\\n scope.activateMediaDefinition = function(mediaDefinition) {\\n popover.hide();\\n dashboardWorkspaceService.mediaDefinition = mediaDefinition;\\n };\\n\\n scope.editMediaDefinition = function(mediaDefinition) {\\n popover.hide();\\n eventBus.publish('renameMediaDefinition', mediaDefinition);\\n };\\n\\n scope.deleteMediaDefinition = function(mediaDefinition) {\\n popover.hide();\\n eventBus.publish('deleteMediaDefinition', mediaDefinition);\\n };\\n\\n scope.addMediaDefinition = function() {\\n popover.hide();\\n eventBus.publish('addMediaDefinition');\\n };\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function(dashboard) {\\n if (dashboard) {\\n scope.mediaDefinitions = dashboard.mediaDefinitions;\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-menu.js\\n ** module id = 43\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.ruler', [])\\n .directive('ruler', function() {\\n return {\\n restrict: 'AE',\\n link: function(scope, element, attrs) {\\n var tickWidth = 50;\\n\\n // How many labels should we make? Well, we could make as many as fill the width of the element,\\n // but what happens when the user makes the window larger? We could watch for window resize events\\n // and generate more. But what happens when the ruler container gets larger without the window resizing\\n // (like if a side panel gets hidden)? Rather than deal with the fringe cases, we'll go with a width which\\n // covers most resolutions or the width of the element, whichever is larger.\\n var maxWidth = Math.max(2700, element.width());\\n\\n element.addClass('totem-Ruler');\\n\\n var numLabels = Math.ceil(maxWidth / 50);\\n var label;\\n\\n for (var i = 0; i < numLabels; i++) {\\n label = angular.element('<span class=\\\"totem-Ruler-label\\\">' + (i * tickWidth) + '</span>');\\n label.css({\\n position: 'absolute',\\n top: -1,\\n left: (i * tickWidth) + 3\\n });\\n element.append(label);\\n }\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/ruler.js\\n ** module id = 44\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.instrument', [\\n require('../services/instrument-event-bus').name\\n ])\\n .directive('instrument', function(eventBus, instrumentEventBus, $compile, $q) {\\n return {\\n restrict: 'E',\\n scope: {\\n instrument: '='\\n },\\n template: require('./instrument.tpl.html'),\\n replace: true,\\n link: function(scope, element, attrs) {\\n var rendererScope;\\n\\n var content = element.find('.js-totem-DashboardInstrument-render');\\n\\n scope.showProgress = false;\\n scope.showFailure = false;\\n\\n var digestConfigChangedHandler = function() {\\n if (scope.instrument) {\\n rendererScope.config = scope.instrument.config;\\n }\\n };\\n\\n var processingHandler = function() {\\n scope.showProgress = true;\\n\\n // Assume that if there was a previous failure and the instrument is processing again\\n // that we should pull it out of a failure state.\\n scope.showFailure = false;\\n };\\n\\n var processedHandler = function() {\\n scope.showProgress = false;\\n };\\n\\n var failedHandler = function() {\\n scope.showFailure = true;\\n };\\n\\n var instrumentBus;\\n\\n scope.$watch('instrument', function(instrument) {\\n if (instrumentBus) {\\n instrumentBus.unsubscribeAll();\\n }\\n\\n if (instrument && instrument.type) {\\n instrumentEventBus.subscribe({\\n topic: 'configChanged',\\n fromPublisher: instrument._id,\\n handler: digestConfigChangedHandler\\n }, scope);\\n\\n instrumentEventBus.subscribe({\\n topic: 'processing',\\n fromPublisher: instrument._id,\\n handler: processingHandler\\n }, scope);\\n\\n instrumentEventBus.subscribe({\\n topic: 'processed',\\n fromPublisher: instrument._id,\\n handler: processedHandler\\n }, scope);\\n\\n instrumentEventBus.subscribe({\\n topic: 'failed',\\n fromPublisher: instrument._id,\\n handler: failedHandler\\n }, scope);\\n\\n var rendererFactory = require('../../../instruments/' + instrument.type + '/renderer/renderer');\\n\\n if (rendererScope) {\\n rendererScope.$destroy();\\n }\\n\\n var bus = instrumentEventBus.getInstrumentScopedInterface(instrument._id);\\n\\n var renderer = rendererFactory(instrument.config, bus);\\n\\n content.empty().append(renderer);\\n\\n // Allow instrument renderer to use AngularJS\\n rendererScope = scope.$new(true);\\n rendererScope.config = instrument.config;\\n rendererScope.eventBus = bus;\\n $compile(content.contents())(rendererScope);\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/instrument.js\\n ** module id = 45\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar dashboardUtil = require('../../../../common/dashboard-util.js');\\n\\nmodule.exports = angular.module('totem.newInstrumentConfiguration', [\\n require('../../common/services/dashboard-workspace').name\\n ])\\n .directive('newInstrumentConfiguration', function($state, uuid, dashboardWorkspaceService, gridSpacing) {\\n return {\\n restrict: 'AE',\\n scope: {\\n visible: '='\\n },\\n template: require('./new-instrument-configuration.tpl.html'),\\n link: function(scope, element, attrs) {\\n\\n /**\\n * Creates a new instrument and media layouts across all pages and media definitions. The instrument will be\\n * placed at the lowest y position available on a given media definition.\\n * @param {String} type The type of instrument we are creating\\n */\\n scope.addInstrument = function(type) {\\n var dashboard = dashboardWorkspaceService.dashboard;\\n var newInstrument = {\\n _id: uuid(),\\n title: 'New Instrument',\\n type: type\\n };\\n\\n dashboard.instruments.push(newInstrument);\\n dashboardUtil.insertInstrumentAtLayoutBottom(newInstrument, dashboard, gridSpacing, uuid);\\n\\n // TODO: Need to set timeout because the modal will not clear the backdrop if we immediately\\n // navigate to a new page. Setting a timeout allows the modal to clear the backdrop before we\\n // navigate away.\\n setTimeout(function() {\\n $state.go('instrument.edit', {\\n dashboardId: dashboard._id,\\n instrumentId: newInstrument._id\\n });\\n }, 0);\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/new-instrument-configuration.js\\n ** module id = 46\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.instrumentEditorBootstrap', [\\n require('../services/instrument-event-bus').name,\\n 'totem.dv.editor'\\n ])\\n .directive('instrumentEditorBootstrap', function(instrumentEventBus, $compile, $q) {\\n return {\\n restrict: 'E',\\n scope: {\\n instrument: '='\\n },\\n link: function(scope, element, attrs) {\\n var rendererScope, editorScope;\\n\\n var destroyScopes = function() {\\n if (rendererScope) {\\n rendererScope.$destroy();\\n }\\n\\n if (editorScope) {\\n editorScope.$destroy();\\n }\\n };\\n\\n var init = function() {\\n destroyScopes();\\n\\n if (scope.instrument && scope.instrument.type) {\\n var editorFactory = require('../../../instruments/' + scope.instrument.type + '/editor/editor');\\n\\n var eventBus = instrumentEventBus.getInstrumentScopedInterface(scope.instrument._id);\\n\\n rendererScope = scope.$new(true);\\n rendererScope.instrument = scope.instrument;\\n var renderer = $compile('<instrument instrument=\\\"instrument\\\"></instrument>')(rendererScope);\\n\\n var editor = editorFactory(renderer, scope.instrument.config, eventBus);\\n element.empty().append(editor);\\n\\n // Allow instrument editor to use AngularJS\\n editorScope = scope.$new(true);\\n editorScope.instrument = scope.instrument;\\n editorScope.eventBus = eventBus;\\n\\n $compile(editor)(editorScope);\\n }\\n };\\n\\n scope.$watch('instrument', init);\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/instrument-editor-bootstrap.js\\n ** module id = 47\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.eventBus', [])\\n .factory('eventBus', function($rootScope) {\\n return {\\n publish: function() {\\n $rootScope.$emit.apply($rootScope, arguments);\\n },\\n subscribe: function(event, callback, scope) {\\n var unbind = $rootScope.$on(event, function() {\\n callback.apply(null, Array.prototype.slice.call(arguments, 1));\\n });\\n if (scope) {\\n scope.$on('$destroy', unbind);\\n }\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/services/event-bus.js\\n ** module id = 48\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.instrumentEventBus', [])\\n .factory('instrumentEventBus', function($timeout) {\\n var subscriptionsByTopic = {};\\n\\n var bus = {};\\n\\n /**\\n * Publish a message to the event bus.\\n * @param {Object} envelope\\n * @param {String} envelope.topic The message topic.\\n * @param {String|Number} [envelope.from] The identifier of the sender. This can be used by a subscriber to filter\\n * messages by sender.\\n * @param {String|Number} [envelope.to] The identifier for the intended recipient. If excluded, the message will\\n * be sent to all topic subscribers (assuming the message is not filtered via \\\"from\\\").\\n * @param {*} [envelope.data] Any data payload to send to the subscriber.\\n */\\n bus.publish = function(envelope) {\\n // Force asynchronicity and a digest cycle. Not necessary but helpful to ensure a digest cycle happens and\\n // make everything consistently asynchronous.\\n $timeout(function() {\\n var subscriptions = subscriptionsByTopic[envelope.topic];\\n\\n if (subscriptions) {\\n for (var i = 0; i < subscriptions.length; i++) {\\n var subscription = subscriptions[i];\\n\\n // if (the subscriber doesn't care who the message is from or the message is from the desired publisher)\\n // AND (the message isn't addressed to any particular subscriber or it's addressed to this subscriber)\\n // ...then deliver the message.\\n if ((!subscription.fromPublisher || subscription.fromPublisher === envelope.from) &&\\n (!envelope.to || subscription.subscriberId === envelope.to)) {\\n subscription.handler(envelope.data);\\n }\\n }\\n }\\n });\\n };\\n\\n /**\\n * Subscribe to the event bus.\\n * @param {Object} subscription\\n * @param {String} subscription.topic The topic to subscribe to.\\n * @param {Function} subscription.handler The handling function for the message. This function will be passed any\\n * data specified on the message envelope's data attribute.\\n * @param {String|Number} [subscription.subscriberId] The subscriber's identifier. This can be used by the publisher\\n * to send messages to a specific subscriber.\\n * @param {String|Number} [subscription.fromPublisher] If specified, the subscriber will only be delivered messages that\\n * contain a from attribute with a value that matches.\\n * @param {Object} [scope] The AngularJS scope related to the subscriber. If passed, the subscriber will be\\n * automatically unsubscribed when the scope is destroyed. Useful for memory cleanup.\\n * @returns {Function} A function which, when called, will unsubscribe the subscriber.\\n */\\n bus.subscribe = function(subscription, scope) {\\n var subscriptions = subscriptionsByTopic[subscription.topic];\\n\\n if (!subscriptions) {\\n subscriptions = subscriptionsByTopic[subscription.topic] = [];\\n }\\n\\n subscriptions.push(subscription);\\n\\n var unsubscribeHandle = function() {\\n bus.unsubscribe(subscription);\\n };\\n\\n if (scope) {\\n scope.$on('$destroy', unsubscribeHandle);\\n }\\n\\n return unsubscribeHandle;\\n };\\n\\n /**\\n * Unsubscribe a subscription.\\n * @param {Object} subscription The subscription object that was used during subscription.\\n */\\n bus.unsubscribe = function(subscription) {\\n var subscriptions = subscriptionsByTopic[subscription.topic];\\n if (subscriptions) {\\n var index = subscriptions.indexOf(subscription);\\n if (index > -1) {\\n subscriptions.splice(index, 1);\\n }\\n }\\n };\\n\\n /**\\n * Returns a simplified API instruments can use for publishing and subscribing. This allows the user of the API\\n * to be blissfully unaware of the instrument's ID or the enveloping mechanism used within the instrument event bus.\\n * @param {String|Number} instrumentId\\n * @returns {{publish: Function, subscribe: Function}}\\n */\\n bus.getInstrumentScopedInterface = function(instrumentId) {\\n return {\\n publish: function(topic, data) {\\n bus.publish({\\n from: instrumentId,\\n topic: topic,\\n data: data\\n });\\n },\\n subscribe: function(topic, handler) {\\n return bus.subscribe({\\n subscriberId: instrumentId,\\n topic: topic,\\n handler: handler\\n });\\n }\\n };\\n };\\n\\n return bus;\\n })\\n;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/services/instrument-event-bus.js\\n ** module id = 49\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div ui-view class=\\\\\\\"totem-View\\\\\\\"></div>\\\\n<alert></alert>\\\\n<modal-progress-indicator></modal-progress-indicator>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/app.tpl.html\\n ** module id = 50\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.uuid', [])\\n .constant('uuid', function() {\\n /* jshint bitwise:false */\\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\\n return v.toString(16);\\n });\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/uuid.js\\n ** module id = 51\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dashboardMixin', [\\n require('./participable-mixin').name,\\n require('./tag-enum').name,\\n require('./uuid').name\\n])\\n .factory('dashboardMixin', function(participableMixin, tagEnum, uuid, gridSpacing, duplicateInstrumentOffset, minMediaDefinitionWidth) {\\n /**\\n * Methods to be used on dashboard objects. While we could make a Dashboard class, it doesn't give offer much and\\n * brings with it other hassles.\\n */\\n var objectMethods = {\\n isFullDashboard: function() {\\n return this.hasOwnProperty('instruments');\\n },\\n removeInstrument: function(instrument) {\\n if (this.instruments) {\\n var index = this.instruments.indexOf(instrument);\\n if (index > -1) {\\n this.instruments.splice(index, 1);\\n }\\n }\\n\\n if (this.mediaLayouts) {\\n var i = this.mediaLayouts.length;\\n while (i--) {\\n if (this.mediaLayouts[i].instrumentId === instrument._id) {\\n this.mediaLayouts.splice(i, 1);\\n }\\n }\\n }\\n },\\n getFavoriteTag: function() {\\n if (this.tags) {\\n for (var i = 0; i < this.tags.length; i++) {\\n var tag = this.tags[i];\\n if (tag.tag === tagEnum.FAVORITE) {\\n return tag;\\n }\\n }\\n }\\n },\\n removeTag: function(tag) {\\n if (this.tags) {\\n var i = this.tags.length;\\n while (i--) {\\n if (this.tags[i]._id === tag._id) {\\n this.tags.splice(i, 1);\\n }\\n // Continue looping in case the user is there more than once. (shouldn't happen)\\n }\\n }\\n },\\n removeMediaDefinition: function(mediaDefinition) {\\n var i = this.mediaDefinitions.length;\\n\\n while (i--) {\\n if (this.mediaDefinitions[i]._id === mediaDefinition._id) {\\n this.mediaDefinitions.splice(i, 1);\\n }\\n }\\n\\n this.removeMediaLayoutsForMediaDefinition(mediaDefinition);\\n },\\n getMediaLayoutsForMediaDefinition: function(mediaDefinition) {\\n return this.mediaLayouts.filter(function(mediaLayout) {\\n return mediaLayout.mediaDefinitionId === mediaDefinition._id;\\n });\\n },\\n removeMediaLayoutsForMediaDefinition: function(mediaDefinition) {\\n var i = this.mediaLayouts.length;\\n\\n while (i--) {\\n if (this.mediaLayouts[i].mediaDefinitionId === mediaDefinition._id) {\\n this.mediaLayouts.splice(i, 1);\\n }\\n }\\n },\\n /**\\n * Sorts media definitions smallest to biggest.\\n * @returns {Array}\\n */\\n sortMediaDefinitions: function() {\\n return this.mediaDefinitions.sort(function(def1, def2) { return def1.width - def2.width; });\\n },\\n duplicateInstrument: function(instrument) {\\n var newInstrument = angular.copy(instrument);\\n newInstrument._id = uuid();\\n this.instruments.push(newInstrument);\\n\\n this.mediaDefinitions.forEach(function(mediaDefinition) {\\n var mediaLayouts = this.getMediaLayoutsForMediaDefinition(mediaDefinition);\\n var mediaLayout;\\n\\n for (var i = 0; i < mediaLayouts.length; i++) {\\n mediaLayout = mediaLayouts[i];\\n if (mediaLayout.instrumentId === instrument._id) {\\n break;\\n }\\n }\\n\\n var newMediaLayout = angular.copy(mediaLayout);\\n newMediaLayout._id = uuid();\\n newMediaLayout.instrumentId = newInstrument._id;\\n\\n // Adjust the instrument's position so it's offset from the original. Try to adjust it to the right if the\\n // needed space is available but if the needed space is not available and there's more space to the left then\\n // adjust it to the left.\\n\\n var rightOffsetAvailable = Math.floor(mediaDefinition.width / gridSpacing) -\\n (newMediaLayout.x + newMediaLayout.width);\\n\\n var leftOffsetAvailable = newMediaLayout.x;\\n\\n if (rightOffsetAvailable > 0 &&\\n (rightOffsetAvailable >= duplicateInstrumentOffset || rightOffsetAvailable >= leftOffsetAvailable)) {\\n newMediaLayout.x += Math.min(rightOffsetAvailable, duplicateInstrumentOffset);\\n } else if (leftOffsetAvailable > 0) {\\n newMediaLayout.x -= Math.min(leftOffsetAvailable, duplicateInstrumentOffset);\\n }\\n\\n // Media definitions don't have a defined height so there's no need to check to see if there is room\\n // to dodge. We just do it.\\n newMediaLayout.y += duplicateInstrumentOffset;\\n\\n this.mediaLayouts.push(newMediaLayout);\\n this.bringInstrumentToFront(newInstrument, mediaDefinition);\\n }.bind(this));\\n },\\n bringInstrumentToFront: function(instrument, mediaDefinition) {\\n var mediaLayouts = this.getMediaLayoutsForMediaDefinition(mediaDefinition);\\n\\n var mediaLayout;\\n\\n for (var i = 0; i < mediaLayouts.length; i++) {\\n mediaLayout = mediaLayouts[i];\\n if (mediaLayout.instrumentId === instrument._id) {\\n break;\\n }\\n }\\n\\n // Remove the zIndex from the media layout, sort all others and redefine their zIndexes if they\\n // previously had one, give the media layout the next available zIndex.\\n\\n delete mediaLayout.zIndex;\\n\\n var zIndexCursor = 1;\\n mediaLayouts.sort(function(mediaLayoutA, mediaLayoutB) {\\n if (mediaLayoutA.zIndex === undefined) {\\n return -1;\\n } else if (mediaLayoutB.zIndex === undefined) {\\n return 1;\\n } else {\\n return mediaLayoutA.zIndex - mediaLayoutB.zIndex;\\n }\\n }).forEach(function(mediaLayout, i) {\\n if (mediaLayout.zIndex !== undefined) {\\n mediaLayout.zIndex = zIndexCursor++;\\n }\\n });\\n\\n mediaLayout.zIndex = zIndexCursor;\\n },\\n /**\\n * If a new media definition were created, what width should it be? This comes up with a decent width\\n * as a starting point and the user can manipulate it from there.\\n */\\n _getNewMediaDefinitionWidth: function(baseMediaDefinition) {\\n var sortedDefinitions = this.sortMediaDefinitions();\\n var activeIndex = sortedDefinitions.indexOf(baseMediaDefinition);\\n\\n var newWidth;\\n\\n // Start by getting the midpoint between the base media definition and the next smallest.\\n if (activeIndex === 0) {\\n if (baseMediaDefinition.width === minMediaDefinitionWidth) {\\n newWidth = baseMediaDefinition.width + 100;\\n } else {\\n newWidth = baseMediaDefinition.width / 2;\\n }\\n } else {\\n var nextSmallest = sortedDefinitions[activeIndex - 1];\\n newWidth = (baseMediaDefinition.width + nextSmallest.width) / 2;\\n }\\n\\n newWidth = Math.max(minMediaDefinitionWidth, newWidth);\\n\\n // This adjustment just seems to look better. This is particularly the case if the active media definition\\n // is the smallest media definition; it looks better if the new one is just offset a ways instead of midway\\n // between the media definition and the left of the viewport. This is obviously subjective.\\n newWidth = Math.max(newWidth, baseMediaDefinition.width - 100);\\n\\n // Snap to the grid.\\n newWidth = newWidth - (newWidth % gridSpacing);\\n\\n return newWidth;\\n },\\n\\n /**\\n * Creates a media definition and adds it to the dashboard.\\n * @param {Object} baseMediaDefinition The media definition the new media definition should be based on. The\\n * new media definition's instrument layout will attempt to mimic the layout from the base media definition.\\n * @returns {Object} New media definition.\\n */\\n createMediaDefinition: function(baseMediaDefinition) {\\n var newWidth = this._getNewMediaDefinitionWidth(baseMediaDefinition);\\n\\n // Create a new media definition with its corresponding media layouts based off the base\\n // media definition.\\n var newMediaDefinition = {\\n _id: uuid(),\\n // If you change the name default, be sure to change the code that automatically updates the\\n // media definition name when it's dragged and its name is in #px format.\\n name: newWidth + 'px',\\n width: newWidth\\n };\\n\\n this.mediaDefinitions.push(newMediaDefinition);\\n\\n var mediaLayouts = angular.copy(this.getMediaLayoutsForMediaDefinition(baseMediaDefinition));\\n\\n mediaLayouts.forEach(function(mediaLayout) {\\n mediaLayout._id = uuid();\\n mediaLayout.mediaDefinitionId = newMediaDefinition._id;\\n });\\n\\n this.resampleMediaLayouts(mediaLayouts, mediaLayouts, baseMediaDefinition.width, newWidth);\\n\\n this.mediaLayouts = this.mediaLayouts.concat(mediaLayouts);\\n\\n return newMediaDefinition;\\n },\\n\\n /**\\n * Resamples media layouts to appropriately fit a new media definition width. Because resampling must snap to\\n * the dashboard grid, sampling \\\"errors\\\" will likely occur. For example, if an instrument is one grid space\\n * from the side of the dashboard before resampling, it may be touching the side of the dashboard after some\\n * resampling due to having to snap to the next grid space.\\n *\\n * When resampling repetitively like when dragging a media definition thumb, it's important that the resampling\\n * is based of the initial media definition and media layout positions so that the resampling error does\\n * not compound. For example, if the user drags the thumb to the left to make the media definition smaller and drags\\n * it back to the right to where it started and the lets go of the thumb, we want to ensure everything\\n * looks as it did when the user started dragging.\\n *\\n * @param {Array} startMediaLayouts Media layout objects representing an instrument's position and dimension when\\n * the series of resamplings started. If this is a single resample and not part of a series, these objects can\\n * be the same as endMediaLayouts.\\n * @param {Array} endMediaLayouts Media layout objects that should be resampled.\\n * @param {Number} startMediaDefinitionWidth Media definition width to resample media layouts from. If this\\n * resampling is part of a series of resamplings, this should be the width of the media definition at the beginning\\n * of the series.\\n * @param {Number} endMediaDefinitionWidth Media definition width to resample media layouts to.\\n */\\n resampleMediaLayouts: function(startMediaLayouts, endMediaLayouts, startMediaDefinitionWidth, endMediaDefinitionWidth) {\\n var resamplePercent = endMediaDefinitionWidth / startMediaDefinitionWidth;\\n\\n endMediaLayouts.forEach(function(mediaLayout, i) {\\n var startMediaLayout = startMediaLayouts[i];\\n mediaLayout.width = Math.round(startMediaLayout.width * resamplePercent);\\n mediaLayout.x = Math.round(startMediaLayout.x * resamplePercent);\\n });\\n },\\n\\n /**\\n * If the provided media definition were removed, what would be the next best media definition the user would like\\n * to see?\\n * @param mediaDefinition\\n * @returns {Object} The next best media definition.\\n */\\n getNextBestMediaDefinition: function(mediaDefinition) {\\n // sorted smallest width to biggest width\\n var mediaDefinitions = this.sortMediaDefinitions();\\n var index = mediaDefinitions.indexOf(mediaDefinition);\\n\\n if (index > 0) {\\n return mediaDefinitions[index - 1];\\n } else if (index < mediaDefinitions.length - 1) {\\n return mediaDefinitions[index + 1];\\n }\\n\\n return null;\\n }\\n };\\n\\n angular.extend(objectMethods, participableMixin);\\n\\n return objectMethods;\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/dashboard-mixin.js\\n ** module id = 52\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.sequence', [])\\n .factory('Sequence', function() {\\n // A promise-based sequential queue.\\n var Sequence = function() {};\\n\\n /**\\n * Add a function to the queue. It will we be called after the promise from the previously enqueued function is\\n * resolved.\\n * @param fn A function that returns a promise that is resolved when processing is complete.\\n */\\n Sequence.prototype.enqueue = function(fn) {\\n this.tail = this.tail ? this.tail.finally(fn) : fn();\\n };\\n \\n return Sequence;\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/sequence.js\\n ** module id = 53\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.participableMixin', [])\\n .factory('participableMixin', function() {\\n /**\\n * Useful methods that can be mixed into objects with\\n * participants arrays (e.g., dashboards, ad-hoc collections).\\n */\\n return {\\n removeParticipant: function(participant) {\\n this.removeParticipantForEntity(participant.entity);\\n },\\n removeParticipantForEntity: function(entity) {\\n var i = this.participants.length;\\n while (i--) {\\n if (this.participants[i].entity._id === entity._id) {\\n this.participants.splice(i, 1);\\n }\\n // Continue looping in case the user is there more than once. (shouldn't happen)\\n }\\n },\\n isEntityAnOwner: function(entity) {\\n for (var i = 0; i < this.participants.length; i++) {\\n var participant = this.participants[i];\\n if (participant.entity._id === entity._id && participant.isOwner) {\\n return true;\\n }\\n }\\n return false;\\n },\\n isSoleOwner: function(participant) {\\n return this.isEntitySoleOwner(participant.entity);\\n },\\n isEntitySoleOwner: function(entity) {\\n var userFoundAsOwner = false;\\n for (var i = 0; i < this.participants.length; i++) {\\n var participant = this.participants[i];\\n if (participant.isOwner) {\\n if (participant.entity._id === entity._id) {\\n userFoundAsOwner = true;\\n } else {\\n return false;\\n }\\n }\\n }\\n return userFoundAsOwner;\\n },\\n isEntityAParticipant: function(entity) {\\n for (var i = 0; i < this.participants.length; i++) {\\n var participant = this.participants[i];\\n if (participant.entity._id === entity._id) {\\n return true;\\n }\\n }\\n return false;\\n },\\n getOwners: function() {\\n return this.participants.filter(function(participant) {\\n return participant.isOwner;\\n });\\n },\\n addEntityAsParticipant: function(entity) {\\n if (!this.isEntityAParticipant(entity)) {\\n this.participants.push({\\n entity: entity,\\n isOwner: false,\\n isScheduled: false\\n });\\n }\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/participable-mixin.js\\n ** module id = 54\\n ** module chunks = 0\\n **/\",\"var map = {\\n\\t\\\"./demo-html/renderer/renderer\\\": 84,\\n\\t\\\"./dv/renderer/renderer\\\": 86,\\n\\t\\\"./key-metric/renderer/renderer\\\": 87,\\n\\t\\\"./starfield/renderer/renderer\\\": 88,\\n\\t\\\"./text/renderer/renderer\\\": 90,\\n\\t\\\"./twitter-trends/renderer/renderer\\\": 91\\n};\\nfunction webpackContext(req) {\\n\\treturn __webpack_require__(webpackContextResolve(req));\\n};\\nfunction webpackContextResolve(req) {\\n\\treturn map[req] || (function() { throw new Error(\\\"Cannot find module '\\\" + req + \\\"'.\\\") }());\\n};\\nwebpackContext.keys = function webpackContextKeys() {\\n\\treturn Object.keys(map);\\n};\\nwebpackContext.resolve = webpackContextResolve;\\nmodule.exports = webpackContext;\\nwebpackContext.id = 55;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments ^\\\\.\\\\/.*\\\\/renderer\\\\/renderer$\\n ** module id = 55\\n ** module chunks = 0\\n **/\",\"var map = {\\n\\t\\\"./dv/editor/editor\\\": 85,\\n\\t\\\"./text/editor/editor\\\": 89\\n};\\nfunction webpackContext(req) {\\n\\treturn __webpack_require__(webpackContextResolve(req));\\n};\\nfunction webpackContextResolve(req) {\\n\\treturn map[req] || (function() { throw new Error(\\\"Cannot find module '\\\" + req + \\\"'.\\\") }());\\n};\\nwebpackContext.keys = function webpackContextKeys() {\\n\\treturn Object.keys(map);\\n};\\nwebpackContext.resolve = webpackContextResolve;\\nmodule.exports = webpackContext;\\nwebpackContext.id = 56;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments ^\\\\.\\\\/.*\\\\/editor\\\\/editor$\\n ** module id = 56\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\n/**\\n * Sets the focus to the element when its stealFocus attribute is set to true.\\n */\\nmodule.exports = angular.module('totem.stealFocus', [])\\n .directive('stealFocus', function($parse, $timeout) {\\n return {\\n link: function(scope, element, attr) {\\n var model = $parse(attr.stealFocus);\\n scope.$watch(model, function(value) {\\n if(value === true) {\\n $timeout(function() {\\n element[0].focus();\\n });\\n }\\n });\\n\\n\\t\\telement.bind('blur', function() {\\n scope.$apply(model.assign(scope, false));\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/steal-focus.js\\n ** module id = 57\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-NameEditor\\\\\\\">\\\\n <button class=\\\\\\\"totem-NameEditor-button coral-MinimalButton\\\\\\\" ng-click=\\\\\\\"editingTitle=true\\\\\\\" ng-show=\\\\\\\"!editingTitle\\\\\\\">{{ name }}<span class=\\\\\\\"totem-NameEditor-editIcon coral-Icon coral-Icon--edit\\\\\\\"></span></button>\\\\n <form ng-submit=\\\\\\\"editingTitle=false\\\\\\\" ng-show=\\\\\\\"editingTitle\\\\\\\">\\\\n <input type=\\\\\\\"text\\\\\\\" class=\\\\\\\"totem-NameEditor-textField coral-Textfield\\\\\\\" ng-model=\\\\\\\"name\\\\\\\" steal-focus=\\\\\\\"editingTitle\\\\\\\">\\\\n </form>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/name-editor.tpl.html\\n ** module id = 58\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-Alert coral-Alert\\\\\\\" ng-class=\\\\\\\"{'is-visible': visible, 'coral-Alert--error': type === 'error', 'coral-Alert--success': type === 'success'}\\\\\\\">\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-MinimalButton coral-Alert-closeButton\\\\\\\" title=\\\\\\\"Close\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close coral-MinimalButton-icon\\\\\\\"></i>\\\\n </button>\\\\n <i class=\\\\\\\"coral-Alert-typeIcon coral-Icon coral-Icon--sizeS coral-Icon--alert\\\\\\\"></i>\\\\n <strong class=\\\\\\\"coral-Alert-title\\\\\\\">{{ type }}</strong>\\\\n <div class=\\\\\\\"coral-Alert-message\\\\\\\">{{ content }}</div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/alert.tpl.html\\n ** module id = 59\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-ModalProgressIndicator\\\\\\\" ng-class=\\\\\\\"{'is-visible': visible}\\\\\\\">\\\\n <div class=\\\\\\\"coral-Wait coral-Wait--large coral-Wait--center\\\\\\\"></div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/modal-progress-indicator.tpl.html\\n ** module id = 60\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.share', [\\n require('./sort-header').name,\\n require('./invalid-share-action-alert').name,\\n require('./user-search').name\\n ])\\n .directive('share', function($document, $window, $timeout) {\\n var MODAL_SELECTOR = '.totem-ShareModal',\\n MODAL_BODY_SELECTOR = '.totem-ShareModal-body',\\n MODAL_BUFFER = 20;\\n\\n return {\\n restrict: 'EA',\\n scope: {\\n participable: '=',\\n visible: '=',\\n externalSave: '&save'\\n },\\n template: require('./share.tpl.html'),\\n link: function(scope, element, attrs) {\\n var participableCopy;\\n\\n scope.getParticipants = function() {\\n if (participableCopy) {\\n return participableCopy.participants;\\n }\\n };\\n\\n scope.isOwner = function(participant) {\\n return participant.isOwner;\\n };\\n\\n scope.isScheduled = function(participant) {\\n return participant.isScheduled;\\n };\\n\\n scope.setSort = function(predicate) {\\n if (scope.sortPredicate === predicate) {\\n scope.sortReverse = !scope.sortReverse;\\n } else {\\n scope.sortReverse = false;\\n }\\n scope.sortPredicate = predicate;\\n };\\n\\n scope.removeParticipant = function(participant, $event) {\\n if (participableCopy.isSoleOwner(participant)) {\\n $event.preventDefault();\\n // The event we're listening to will eventually bubble up to the document and execute our event handler\\n // if we already have one set up (done with $document.one below) which would immediately remove\\n // the invalid state. For this reason we remove any event listener previously set up and don't add\\n // a new one until the next frame.\\n $document.off('click.totem.share.invalidRemoveOwner');\\n scope.invalidRemoveOwnerParticipant = participant;\\n $timeout(function() {\\n $document.one('click.totem.share.invalidRemoveOwner', function() {\\n scope.$apply(function() {\\n scope.invalidRemoveOwnerParticipant = null;\\n });\\n });\\n });\\n } else {\\n participableCopy.removeParticipant(participant);\\n }\\n };\\n\\n scope.addParticipant = function(entity) {\\n participableCopy.addEntityAsParticipant(entity);\\n };\\n\\n scope.setOwnerRole = function(participant, $event) {\\n var setAsOwner = $event.target.checked;\\n if (!setAsOwner && participableCopy.isSoleOwner(participant)) {\\n $event.preventDefault();\\n // The event we're listening to will eventually bubble up to the document and execute our event handler\\n // if we already have one set up (done with $document.one below) which would immediately remove\\n // the invalid state. For this reason we remove any event listener previously set up and don't add\\n // a new one until the next frame.\\n $document.off('click.totem.share.invalidRevokeOwnership');\\n scope.invalidRevokeOwnershipParticipant = participant;\\n $timeout(function() {\\n $document.one('click.totem.share.invalidRevokeOwnership', function() {\\n scope.$apply(function() {\\n scope.invalidRevokeOwnershipParticipant = null;\\n });\\n });\\n });\\n } else {\\n participant.isOwner = setAsOwner;\\n }\\n };\\n\\n scope.setScheduled = function(participant, scheduled) {\\n participant.isScheduled = scheduled;\\n };\\n\\n scope.save = function() {\\n angular.copy(participableCopy, scope.participable);\\n scope.externalSave({ participable: scope.participable });\\n };\\n\\n scope.visible = false;\\n scope.sortPredicate = scope.getFullName;\\n scope.sortReverse = false;\\n scope.invalidRemoveOwnerParticipant = null;\\n scope.invalidRevokeOwnershipParticipant = null;\\n\\n scope.$watch('participable', function(participable) {\\n participableCopy = angular.copy(participable);\\n });\\n\\n // Sets a max height on the body of the modal so it scrolls when there are many users instead of the modal\\n // extending past the viewport or some other type of scrolling.\\n var setMaxHeight = function(visible) {\\n if (visible) {\\n var viewPortHeight = $($window).height();\\n // We must find the element at the document level since the modal element is shifted to be a direct\\n // descendant of <body>.\\n var modal = $(MODAL_SELECTOR);\\n var modalBody = $(MODAL_BODY_SELECTOR);\\n modal.toggle(true); // Just a quick, temporary toggle to measure. Real toggling will be done by CoralUI.\\n var modalHeight = modal.outerHeight();\\n var modalBodyHeight = modalBody.outerHeight();\\n modal.toggle(false);\\n var modalChromeHeight = modalHeight - modalBodyHeight;\\n modalBody.css('max-height', viewPortHeight - modalChromeHeight - MODAL_BUFFER);\\n }\\n };\\n\\n scope.$watch('visible', setMaxHeight);\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/share.js\\n ** module id = 61\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.adHocFileUpload',[\\n ])\\n .directive('adHocFileUpload', function(adHocService, $sce, i18nFilter, $timeout) {\\n return {\\n restrict: 'EA',\\n scope:{\\n collection:'=',\\n uploadFileName:'=',\\n saveDisabled:'='\\n },\\n replace: true,\\n template: require('./ad-hoc-file-upload.tpl.html'),\\n link: function(scope, element, attr) {\\n scope.percentProgress = null;\\n scope.uploading = false;\\n\\n scope.dropLabel = $sce.trustAsHtml(i18nFilter('dragAndDropCsv', {\\n LINK_BEFORE: '<a href=\\\"javascript:void(0)\\\" class=\\\"coral-Link coral-FileUpload-trigger totem-AdHocDataUpload-uploadLink\\\">',\\n LINK_AFTER: '</a>'\\n }));\\n\\n // We have to instantiate FileUpload on a timeout because it depends on children existing on the DOM whose\\n // existance depend on ng-if bindings which are evaluated later.\\n $timeout(function() {\\n new CUI.FileUpload({\\n name:'adHocFileUploadField',\\n element:element,\\n dropZone:element,\\n uploadUrl:'/pastebin',\\n autoStart: true\\n });\\n element\\n .on('dropzonedrop', function(e) {\\n scope.$apply(function() {\\n scope.saveDisabled = true;\\n scope.uploading = true;\\n });\\n })\\n .on('fileuploadsuccess', function(e) {\\n scope.$apply(function() {\\n var response = angular.fromJson(e.item.xhr.response);\\n var pastebinId = response._id;\\n scope.uploading = false;\\n scope.uploadFileName = e.item.fileName;\\n scope.saveDisabled = false;\\n scope.collection.pastebinId = pastebinId;\\n scope.collection.fileName = e.item.fileName;\\n });\\n })\\n .on('fileuploadprogress', function(e) {\\n scope.$apply(function() {\\n var percent = Math.round((e.originalEvent.loaded /\\te.originalEvent.total) * 100);\\n scope.percentProgress = percent;\\n });\\n })\\n .on('fileuploaderror', function(e) {\\n })\\n .on('fileRejected', function(e) {\\n });\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-file-upload.js\\n ** module id = 62\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.debounce', [])\\n.factory('debounce', function($timeout) {\\n\\treturn function(fn, timeout, apply){\\n\\t\\ttimeout = angular.isUndefined(timeout) ? 0 : timeout;\\n\\t\\tapply = angular.isUndefined(apply) ? true : apply;\\n\\t\\tvar nthCall = 0;\\n\\t\\treturn function() {\\n\\t\\t\\tvar that = this;\\n\\t\\t\\tvar argz = arguments;\\n\\t\\t\\tnthCall++;\\n\\t\\t\\tvar later = (function(version){\\n\\t\\t\\t\\treturn function(){\\n\\t\\t\\t\\t\\tif (version === nthCall){\\n\\t\\t\\t\\t\\t\\treturn fn.apply(that, argz);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t};\\n\\t\\t\\t})(nthCall);\\n\\t\\t\\treturn $timeout(later, timeout, apply);\\n\\t\\t};\\n\\t};\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/debounce.js\\n ** module id = 63\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.draggable', [\\n require('../services/drag-resize-util').name,\\n require('../services/auto-scroll').name\\n ])\\n .controller('DraggableController', function() {\\n // Methods are added from directive.\\n })\\n .directive('draggable', function($parse, dragResizeUtil, AutoScroll) {\\n return {\\n restrict: 'A',\\n controller: 'DraggableController',\\n link: function(scope, element, attr, controller) {\\n var scrollParent,\\n autoScroll = new AutoScroll();\\n\\n autoScroll.onScroll = function(event) {\\n controller.continueDrag(event);\\n };\\n\\n var originXWithinScrollParent,\\n originYWithinScrollParent,\\n originXRelativeToDraggable,\\n originYRelativeToDraggable;\\n\\n var getElementRect = function(overrides) {\\n var position;\\n\\n if (!overrides || overrides.x === undefined || overrides.y === undefined) {\\n position = element.position();\\n }\\n\\n var rect = {\\n x: overrides && overrides.x !== undefined ? overrides.x : position.left,\\n y: overrides && overrides.y !== undefined ? overrides.y : position.top,\\n width: overrides && overrides.width !== undefined ? overrides.width : element.outerWidth(),\\n height: overrides && overrides.height !== undefined ? overrides.height : element.outerHeight()\\n };\\n\\n return rect;\\n };\\n\\n controller.startDrag = function(event) {\\n scrollParent = $(event.target).scrollParent();\\n\\n originXWithinScrollParent = dragResizeUtil.getXWithinContainer(event, scrollParent);\\n originYWithinScrollParent = dragResizeUtil.getYWithinContainer(event, scrollParent);\\n\\n var rect = getElementRect();\\n originXRelativeToDraggable = rect.x;\\n originYRelativeToDraggable = rect.y;\\n\\n if (attr.dragBegin) {\\n var dragBegin = $parse(attr.dragBegin);\\n dragBegin(scope, {rect: rect, event: event});\\n }\\n\\n autoScroll.start(scrollParent);\\n };\\n\\n controller.continueDrag = function(event) {\\n var xWithinScrollParent = dragResizeUtil.getXWithinContainer(event, scrollParent),\\n yWithinScrollParent = dragResizeUtil.getYWithinContainer(event, scrollParent);\\n\\n var rect = getElementRect({\\n x: originXRelativeToDraggable + xWithinScrollParent - originXWithinScrollParent,\\n y: originYRelativeToDraggable + yWithinScrollParent - originYWithinScrollParent\\n });\\n\\n if (attr.constrainDrag) {\\n var constrainDrag = $parse(attr.constrainDrag);\\n rect = constrainDrag(scope, {rect: rect, event: event});\\n }\\n\\n if (attr.dragContinue) {\\n var dragContinue = $parse(attr.dragContinue);\\n dragContinue(scope, {rect: rect});\\n }\\n\\n element.css({\\n 'left': rect.x,\\n 'top': rect.y\\n });\\n\\n autoScroll.updatePointerLocation(event);\\n\\n return rect;\\n };\\n\\n controller.endDrag = function() {\\n autoScroll.stop();\\n\\n if (attr.dragComplete) {\\n var dragComplete = $parse(attr.dragComplete);\\n dragComplete(scope, {rect: getElementRect()});\\n }\\n\\n scrollParent = null;\\n };\\n }\\n };\\n })\\n .directive('dragHandle', function($document, $window, $parse) {\\n var namespace = function(eventName) {\\n return eventName + '.dragHandle';\\n };\\n\\n return {\\n restrict: 'A',\\n require: '^draggable',\\n link: function(scope, element, attr, draggableCtrl) {\\n var dragging = false;\\n\\n element.on([namespace('mousedown'), namespace('touchstart')].join(' '), function(event) {\\n scope.$apply(function() {\\n var shouldDrag = $parse(attr.dragHandle)(scope);\\n if (dragging || shouldDrag === false) {\\n return;\\n }\\n dragging = true;\\n\\n event.preventDefault();\\n\\n draggableCtrl.startDrag(event);\\n\\n var $documents = $document;\\n\\n // Handle the case where we're inside an iframe. Mouse events outside of the iframe would normally not\\n // be caught so we have to watch the parent document as well. This will only work if the iframe and the\\n // parent are from the same domain.\\n if ($window !== $window.parent) {\\n $documents = $documents.add($window.parent.document);\\n }\\n\\n $documents.on([namespace('mousemove'), namespace('touchmove')].join(' '), function(event) {\\n scope.$apply(function() {\\n draggableCtrl.continueDrag(event);\\n });\\n });\\n\\n $documents.on([namespace('mouseup'), namespace('touchend')].join(' '), function(event) {\\n scope.$apply(function() {\\n draggableCtrl.endDrag();\\n $documents.off([\\n namespace('mouseup'),\\n namespace('touchend'),\\n namespace('mousemove'),\\n namespace('touchmove')\\n ].join(' '));\\n dragging = false;\\n });\\n });\\n });\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/draggable.js\\n ** module id = 64\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.resizeable', [\\n require('../services/drag-resize-util').name\\n ])\\n .controller('ResizeableController', function() {\\n // Methods are added from directive.\\n })\\n .directive('resizeable', function($parse) {\\n return {\\n restrict: 'A',\\n controller: 'ResizeableController',\\n link: function(scope, element, attr, controller) {\\n var pointerOriginPageX, pointerOriginPageY;\\n var elementOriginRect = {};\\n\\n var getElementRect = function(overrides) {\\n var position;\\n\\n if (!overrides || overrides.x === undefined || overrides.y === undefined) {\\n position = element.position();\\n }\\n\\n var rect = {\\n x: overrides && overrides.x !== undefined ? overrides.x : position.left,\\n y: overrides && overrides.y !== undefined ? overrides.y : position.top,\\n width: overrides && overrides.width !== undefined ? overrides.width : element.outerWidth(),\\n height: overrides && overrides.height !== undefined ? overrides.height : element.outerHeight()\\n };\\n\\n return rect;\\n };\\n\\n controller.startDrag = function(x, y) {\\n pointerOriginPageX = x;\\n pointerOriginPageY = y;\\n\\n var rect = getElementRect();\\n elementOriginRect.width = rect.width;\\n elementOriginRect.height = rect.height;\\n elementOriginRect.x = rect.x;\\n elementOriginRect.y = rect.y;\\n\\n if (attr.resizeBegin) {\\n var resizeBegin = $parse(attr.resizeBegin);\\n resizeBegin(scope, {rect: rect, origRect: elementOriginRect});\\n }\\n\\n };\\n\\n controller.continueDrag = function(x, y, fromSide) {\\n var rect;\\n if(fromSide && fromSide === 'left') {\\n rect = getElementRect({\\n width: elementOriginRect.width + pointerOriginPageX - x,\\n height: elementOriginRect.height + y - pointerOriginPageY,\\n x: elementOriginRect.x + x - pointerOriginPageX\\n });\\n } else {\\n rect = getElementRect({\\n width: elementOriginRect.width + x - pointerOriginPageX,\\n height: elementOriginRect.height + y - pointerOriginPageY,\\n x: elementOriginRect.x\\n });\\n }\\n\\n if (attr.constrainResize) {\\n var constrainResize = $parse(attr.constrainResize);\\n rect = constrainResize(scope, {rect: rect, origRect: elementOriginRect});\\n }\\n\\n if (attr.resizeContinue) {\\n var resizeContinue = $parse(attr.resizeContinue);\\n resizeContinue(scope, {rect: rect, origRect: elementOriginRect});\\n }\\n\\n element.css({\\n 'width': rect.width,\\n 'height': rect.height,\\n 'left': rect.x\\n });\\n\\n return rect;\\n };\\n\\n controller.endDrag = function(x, y) {\\n if (attr.resizeComplete) {\\n var resizeComplete = $parse(attr.resizeComplete);\\n resizeComplete(scope, {rect: getElementRect()});\\n }\\n };\\n }\\n };\\n })\\n .directive('resizeHandle', function($document, $window, dragResizeUtil) {\\n var namespace = function(eventName) {\\n return eventName + '.resizeHandle';\\n };\\n\\n return {\\n restrict: 'A',\\n require: '^resizeable',\\n link: function(scope, element, attr, resizeableCtrl) {\\n var resizing = false;\\n\\n element.on([namespace('mousedown'), namespace('touchstart')].join(' '), function(event) {\\n scope.$apply(function() {\\n if (resizing) {\\n return;\\n }\\n resizing = true;\\n\\n event.preventDefault();\\n\\n resizeableCtrl.startDrag(dragResizeUtil.getPageX(event), dragResizeUtil.getPageY(event));\\n\\n var $documents = $document;\\n\\n // Handle the case where we're inside an iframe. Mouse events outside of the iframe would normally not\\n // be caught so we have to watch the parent document as well. This will only work if the iframe and the\\n // parent are from the same domain.\\n if ($window !== $window.parent) {\\n $documents = $documents.add($window.parent.document);\\n }\\n\\n $documents.on([namespace('mousemove'), namespace('touchmove')].join(' '), function(event) {\\n scope.$apply(function() {\\n resizeableCtrl.continueDrag(dragResizeUtil.getPageX(event), dragResizeUtil.getPageY(event), attr.resizeHandle);\\n });\\n });\\n\\n $documents.on([namespace('mouseup'), namespace('touchend')].join(' '), function(event) {\\n scope.$apply(function() {\\n resizeableCtrl.endDrag();\\n $documents.off([\\n namespace('mouseup'),\\n namespace('touchend'),\\n namespace('mousemove'),\\n namespace('touchmove')\\n ].join(' '));\\n resizing = false;\\n });\\n });\\n });\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/resizeable.js\\n ** module id = 65\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.tap', [])\\n .directive('tap', function($parse) {\\n return {\\n restrict: 'A',\\n link: function(scope, element, attr) {\\n var tapping = false;\\n element.on('touchstart', function() {\\n tapping = true;\\n }).on('touchmove', function() {\\n tapping = false;\\n }).on('touchend', function() {\\n if (tapping) {\\n scope.$apply(function() {\\n $parse(attr.tap)(scope);\\n });\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/tap.js\\n ** module id = 66\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionRange', [])\\n .directive('mediaDefinitionRange', function() {\\n return {\\n restrict: 'AE',\\n scope: {\\n name: '=',\\n isActive: '='\\n },\\n replace: true,\\n template: require('./media-definition-range.tpl.html')\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-range.js\\n ** module id = 67\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionRenamePopover', [\\n require('./media-definition-popover').name\\n ])\\n .directive('mediaDefinitionRenamePopover', function(eventBus, $timeout, i18nFilter) {\\n return {\\n restrict: 'AE',\\n scope: {\\n mediaDefinition: '=',\\n externalCancel: '&cancel',\\n externalComplete: '&complete',\\n externalHideFromClickOutside: '&hideFromClickOutside',\\n visible: '=',\\n isCreating: '=',\\n thumb: '='\\n },\\n template: require('./media-definition-rename-popover.tpl.html'),\\n link: function(scope, element, attrs) {\\n // Must be an object in order for ng-model to work correctly on the text input:\\n // http://stackoverflow.com/questions/13193929/using-ng-model-within-a-transcluded-directive-in-angularjs\\n scope.editing = { name: '' };\\n\\n scope.cancel = function() {\\n scope.visible = false;\\n scope.externalCancel();\\n };\\n\\n scope.complete = function() {\\n scope.visible = false;\\n commitName();\\n scope.externalComplete();\\n };\\n\\n var commitName = function() {\\n scope.mediaDefinition.name = scope.editing.name;\\n };\\n\\n scope.hideFromClickOutside = function() {\\n commitName();\\n scope.externalHideFromClickOutside();\\n };\\n\\n scope.$watch('visible', function(visible) {\\n if (visible) {\\n scope.editing.name = scope.mediaDefinition.name;\\n\\n // Give focus to the input. Sure we could do some sort of directive to make it more angulary but meh.\\n $timeout(function() { // Not sure why timeout is necessary here :/\\n element.find('.totem-RenameMediaDefinition-input').focus();\\n });\\n }\\n });\\n\\n scope.getSaveLabel = function() {\\n return i18nFilter(scope.isCreating ? 'create' : 'save');\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-rename-popover.js\\n ** module id = 68\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionDeletePopover', [\\n require('./media-definition-popover').name,\\n require('../../common/services/dashboard-workspace').name\\n ])\\n .directive('mediaDefinitionDeletePopover', function(dashboardWorkspaceService) {\\n return {\\n restrict: 'AE',\\n scope: {\\n mediaDefinition: '=',\\n externalCancel: '&cancel',\\n externalComplete: '&complete',\\n hideFromClickOutside: '&',\\n visible: '=',\\n thumb: '='\\n },\\n template: require('./media-definition-delete-popover.tpl.html'),\\n link: function(scope, element, attrs) {\\n scope.complete = function() {\\n scope.visible = false;\\n\\n if (dashboardWorkspaceService.mediaDefinition === scope.mediaDefinition) {\\n dashboardWorkspaceService.mediaDefinition =\\n dashboardWorkspaceService.dashboard.getNextBestMediaDefinition(scope.mediaDefinition);\\n }\\n\\n dashboardWorkspaceService.dashboard.removeMediaDefinition(scope.mediaDefinition);\\n scope.externalComplete();\\n };\\n\\n scope.cancel = function() {\\n scope.visible = false;\\n scope.externalCancel();\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-delete-popover.js\\n ** module id = 69\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"coral-Autocomplete\\\\\\\" data-init=\\\\\\\"autocomplete\\\\\\\" data-mode=\\\\\\\"contains\\\\\\\">\\\\n <span class=\\\\\\\"coral-DecoratedTextfield js-coral-Autocomplete-field\\\\\\\">\\\\n <i class=\\\\\\\"coral-DecoratedTextfield-icon coral-Icon coral-Icon--sizeXS coral-Icon--search\\\\\\\"></i>\\\\n <input class=\\\\\\\"coral-DecoratedTextfield-input coral-Textfield js-coral-Autocomplete-textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" name=\\\\\\\"name1\\\\\\\" placeholder=\\\\\\\"Searching not implemented\\\\\\\">\\\\n </span>\\\\n <ul class=\\\\\\\"coral-SelectList js-coral-Autocomplete-selectList\\\\\\\">\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--optgroup\\\\\\\">\\\\n <span class=\\\\\\\"coral-SelectList-groupHeader\\\\\\\">DASHBOARDS</span>\\\\n <ul class=\\\\\\\"coral-SelectList-sublist\\\\\\\">\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"af\\\\\\\">Afghanistan</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"bs\\\\\\\">Bahamas</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"kh\\\\\\\">Cambodia</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"dk\\\\\\\">Denmark</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"ec\\\\\\\">Ecuador</li>\\\\n </ul>\\\\n </li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--optgroup\\\\\\\">\\\\n <span class=\\\\\\\"coral-SelectList-groupHeader\\\\\\\">OWNERS</span>\\\\n <ul class=\\\\\\\"coral-SelectList-sublist\\\\\\\">\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"al\\\\\\\">Albania</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"bh\\\\\\\">Bahrain</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"cm\\\\\\\">Cameroon</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"dj\\\\\\\">Djibouti</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"eg\\\\\\\">Egypt</li>\\\\n </ul>\\\\n </li>\\\\n </ul>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/directives/dashboard-search.tpl.html\\n ** module id = 70\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-ActionBar\\\\\\\">\\\\n <dashboard-search ng-if=\\\\\\\"showSearchField && isSearchable()\\\\\\\" class=\\\\\\\"totem-ActionBar-searchField\\\\\\\" dashboards=\\\\\\\"dashboards\\\\\\\"></dashboard-search>\\\\n <div class=\\\\\\\"coral-ButtonGroup\\\\\\\">\\\\n <button ng-show=\\\\\\\"!showSearchField && isSearchable()\\\\\\\" ng-click=\\\\\\\"showSearchField = true\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--search\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'search' | i18n }}</span></button>\\\\n <!--<button class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--fullScreenExit\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Show List</span></button>-->\\\\n <button ng-show=\\\\\\\"isShareable()\\\\\\\" ng-click=\\\\\\\"share()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--share\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'share' | i18n }}</span></button>\\\\n <button ng-show=\\\\\\\"isViewable()\\\\\\\" ng-click=\\\\\\\"viewDashboard()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--viewOn\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'view' | i18n }}</span></button>\\\\n <button ng-show=\\\\\\\"isDuplicable()\\\\\\\" ng-click=\\\\\\\"duplicateDashboard()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--copy\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'duplicate' | i18n }}</span></button>\\\\n <!--<button ng-show=\\\\\\\"isDownloadable()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--download\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Download</span></button>-->\\\\n <!--<button class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--email\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Subscribe</span></button>-->\\\\n <!--<button class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--spam\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Unsubscribe</span></button>-->\\\\n <button ng-show=\\\\\\\"isLeaveViewable()\\\\\\\" ng-disabled=\\\\\\\"!isLeavable()\\\\\\\" ng-click=\\\\\\\"leaveDashboard()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--close\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'leaveDashboard' | i18n }}</span></button>\\\\n <button ng-show=\\\\\\\"isEditable()\\\\\\\" ng-click=\\\\\\\"editDashboard()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--edit\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'edit' | i18n }}</span></button>\\\\n <button ng-show=\\\\\\\"isDeleteViewable()\\\\\\\" ng-disabled=\\\\\\\"!isDeletable()\\\\\\\" ng-click=\\\\\\\"deleteDashboard()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--delete\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'delete' | i18n }}</span></button>\\\\n </div>\\\\n</div>\\\\n<share participable=\\\\\\\"selectedDashboards[0]\\\\\\\" visible=\\\\\\\"shareModalVisible\\\\\\\" save=\\\\\\\"saveDashboard(participable)\\\\\\\"></share>\\\\n<cui-modal visible=\\\\\\\"leaveModalVisible\\\\\\\" type=\\\\\\\"'notice'\\\\\\\">\\\\n <span header>{{ 'leaveDashboardTitle' | i18n }}</span>\\\\n <span content>{{ 'leaveDashboardDescription' | i18n }}</span>\\\\n <div template class=\\\\\\\"coral-Modal\\\\\\\">\\\\n <div class=\\\\\\\"coral-Modal-header\\\\\\\">\\\\n <i class=\\\\\\\"coral-Modal-typeIcon coral-Icon coral-Icon--sizeS\\\\\\\"></i>\\\\n <h2 class=\\\\\\\"coral-Modal-title coral-Heading coral-Heading--2\\\\\\\"></h2>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-MinimalButton coral-Modal-closeButton\\\\\\\" title=\\\\\\\"{{ 'cancel' | i18n }}\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close coral-MinimalButton-icon \\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <div class=\\\\\\\"coral-Modal-body\\\\\\\"></div>\\\\n <div class=\\\\\\\"coral-Modal-footer\\\\\\\">\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--quiet\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">{{ 'leaveDashboardCancel' | i18n }}</button>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--primary\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\" ng-click=\\\\\\\"confirmLeaveDashboard()\\\\\\\">{{ 'leaveDashboardConfirm' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n</cui-modal>\\\\n<cui-modal visible=\\\\\\\"deleteModalVisible\\\\\\\" type=\\\\\\\"'error'\\\\\\\">\\\\n <span header>{{ 'deleteDashboardTitle' | i18n }}</span>\\\\n <span content>{{ deleteModalDescription }}</span>\\\\n <div template class=\\\\\\\"coral-Modal\\\\\\\">\\\\n <div class=\\\\\\\"coral-Modal-header\\\\\\\">\\\\n <i class=\\\\\\\"coral-Modal-typeIcon coral-Icon coral-Icon--sizeS\\\\\\\"></i>\\\\n <h2 class=\\\\\\\"coral-Modal-title coral-Heading coral-Heading--2\\\\\\\"></h2>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-MinimalButton coral-Modal-closeButton\\\\\\\" title=\\\\\\\"{{ 'cancel' | i18n }}\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close coral-MinimalButton-icon \\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <div class=\\\\\\\"coral-Modal-body\\\\\\\"></div>\\\\n <div class=\\\\\\\"coral-Modal-footer\\\\\\\">\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--quiet\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">{{ 'deleteDashboardCancel' | i18n }}</button>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--primary coral-Button--warning\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\" ng-click=\\\\\\\"confirmDeleteDashboard()\\\\\\\">{{ 'deleteDashboardConfirm' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n</cui-modal>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/directives/manage-toolbar.tpl.html\\n ** module id = 71\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"coral-Autocomplete\\\\\\\" data-init=\\\\\\\"autocomplete\\\\\\\" data-mode=\\\\\\\"contains\\\\\\\">\\\\n <span class=\\\\\\\"coral-DecoratedTextfield js-coral-Autocomplete-field\\\\\\\">\\\\n <i class=\\\\\\\"coral-DecoratedTextfield-icon coral-Icon coral-Icon--sizeXS coral-Icon--search\\\\\\\"></i>\\\\n <input class=\\\\\\\"coral-DecoratedTextfield-input coral-Textfield js-coral-Autocomplete-textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" name=\\\\\\\"name1\\\\\\\" placeholder=\\\\\\\"Search\\\\\\\">\\\\n </span>\\\\n <ul class=\\\\\\\"coral-SelectList js-coral-Autocomplete-selectList\\\\\\\">\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--optgroup\\\\\\\">\\\\n <span class=\\\\\\\"coral-SelectList-groupHeader\\\\\\\">DASHBOARDS</span>\\\\n <ul class=\\\\\\\"coral-SelectList-sublist\\\\\\\">\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"af\\\\\\\">Afghanistan</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"bs\\\\\\\">Bahamas</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"kh\\\\\\\">Cambodia</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"dk\\\\\\\">Denmark</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"ec\\\\\\\">Ecuador</li>\\\\n </ul>\\\\n </li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--optgroup\\\\\\\">\\\\n <span class=\\\\\\\"coral-SelectList-groupHeader\\\\\\\">OWNERS</span>\\\\n <ul class=\\\\\\\"coral-SelectList-sublist\\\\\\\">\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"al\\\\\\\">Albania</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"bh\\\\\\\">Bahrain</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"cm\\\\\\\">Cameroon</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"dj\\\\\\\">Djibouti</li>\\\\n <li class=\\\\\\\"coral-SelectList-item coral-SelectList-item--option\\\\\\\" data-value=\\\\\\\"eg\\\\\\\">Egypt</li>\\\\n </ul>\\\\n </li>\\\\n </ul>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-search.tpl.html\\n ** module id = 72\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-Capacity\\\\\\\">\\\\n <div class=\\\\\\\"totem-Capacity-label\\\\\\\">{{ getPercent(1) | number : 1 }}%</div>\\\\n <div class=\\\\\\\"totem-Capacity-bar\\\\\\\">\\\\n <div class=\\\\\\\"totem-Capacity-barSegment\\\\\\\" ng-class=\\\\\\\"getClass(getPercent(0))\\\\\\\" ng-style=\\\\\\\"{ width: getPercent(0)/100 * 90 }\\\\\\\"></div>\\\\n <div class=\\\\\\\"totem-Capacity-barSegment totem-Capacity-barSegment--unused\\\\\\\" ng-style=\\\\\\\"{ width: 90 - (getPercent(0)/100 * 90) }\\\\\\\"></div>\\\\n </div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-capacity.tpl.html\\n ** module id = 73\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-ActionBar\\\\\\\">\\\\n <ad-hoc-search ng-if=\\\\\\\"showSearchField && isSearchable()\\\\\\\" class=\\\\\\\"totem-ActionBar-searchField\\\\\\\" collections=\\\\\\\"adHocCollections\\\\\\\"></ad-hoc-search>\\\\n <div class=\\\\\\\"coral-ButtonGroup\\\\\\\">\\\\n <button ng-show=\\\\\\\"!showSearchField && isSearchable()\\\\\\\" ng-click=\\\\\\\"showSearchField = true\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--search\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'search' | i18n }}</span></button>\\\\n <button ng-click=\\\\\\\"createCollection()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'new' | i18n }}</span></button>\\\\n <button ng-show=\\\\\\\"isViewable()\\\\\\\" ng-click=\\\\\\\"viewCollection()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--viewOn\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'view' | i18n }}</span></button>\\\\n <button ng-show=\\\\\\\"isDeleteViewable()\\\\\\\" ng-disabled=\\\\\\\"!isDeletable()\\\\\\\" ng-click=\\\\\\\"deleteCollections()\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--delete\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'delete' | i18n }}</span></button>\\\\n <button ng-show=\\\\\\\"isShareable()\\\\\\\" ng-click=\\\\\\\"shareModalVisible = true\\\\\\\" class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--share\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'share' | i18n }}</span></button>\\\\n </div>\\\\n</div>\\\\n<share participable=\\\\\\\"selectedCollections[0]\\\\\\\" visible=\\\\\\\"shareModalVisible\\\\\\\" save=\\\\\\\"saveCollection(participable)\\\\\\\"></share>\\\\n<cui-modal visible=\\\\\\\"deleteModalVisible\\\\\\\" type=\\\\\\\"'error'\\\\\\\">\\\\n <span header>{{ deleteCollectionTitle }}</span>\\\\n <span content>{{ deleteCollectionDescription }}</span>\\\\n <div template class=\\\\\\\"coral-Modal\\\\\\\">\\\\n <div class=\\\\\\\"coral-Modal-header\\\\\\\">\\\\n <i class=\\\\\\\"coral-Modal-typeIcon coral-Icon coral-Icon--sizeS\\\\\\\"></i>\\\\n <h2 class=\\\\\\\"coral-Modal-title coral-Heading coral-Heading--2\\\\\\\"></h2>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-MinimalButton coral-Modal-closeButton\\\\\\\" title=\\\\\\\"{{ 'cancel' | i18n }}\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close coral-MinimalButton-icon \\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <div class=\\\\\\\"coral-Modal-body\\\\\\\"></div>\\\\n <div class=\\\\\\\"coral-Modal-footer\\\\\\\">\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--quiet\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">{{ 'deleteCollectionCancel' | i18n }}</button>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--primary coral-Button--warning\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\" ng-click=\\\\\\\"confirmDeleteCollection()\\\\\\\">{{ 'deleteCollectionConfirm' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n</cui-modal>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-manage-toolbar.tpl.html\\n ** module id = 74\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-AdHocDataUpload\\\\\\\">\\\\n <div class=\\\\\\\"coral-Alert coral-Alert--info coral-Alert--large totem-AdHocDataUpload-uploadInfo\\\\\\\">\\\\n <i class=\\\\\\\"coral-Alert-typeIcon coral-Icon coral-Icon--sizeS coral-Icon--alert\\\\\\\"></i>\\\\n <strong class=\\\\\\\"coral-Alert-title\\\\\\\">{{ 'adHocFileRequirements' | i18n }}</strong>\\\\n <div class=\\\\\\\"coral-Alert-message\\\\\\\">\\\\n <ul class=\\\\\\\"coral-List totem-AdHocCollection-infoList\\\\\\\">\\\\n <li class=\\\\\\\"coral-List-item\\\\\\\">{{ 'adHocFileRequirementDelimited' | i18n }}</li>\\\\n <li class=\\\\\\\"coral-List-item\\\\\\\">{{ 'adHocFileRequirementHeaders' | i18n }}</li>\\\\n <li class=\\\\\\\"coral-List-item\\\\\\\">{{ 'adHocFileRequirementFormat' | i18n }}</li>\\\\n <li class=\\\\\\\"coral-List-item\\\\\\\">{{ 'adHocFileRequirementMaxRecords' | i18n }}</li>\\\\n <li class=\\\\\\\"coral-List-item\\\\\\\">{{ 'adHocFileRequirementComments' | i18n }}</li>\\\\n </ul>\\\\n </div>\\\\n </div>\\\\n <ad-hoc-file-upload save-disabled=\\\\\\\"saveDisabled\\\\\\\" upload-file-name=\\\\\\\"uploadFileName\\\\\\\" collection=\\\\\\\"collection\\\\\\\"></ad-hoc-file-upload>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-data-upload.tpl.html\\n ** module id = 75\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-DashboardCanvas\\\\\\\" ng-class=\\\\\\\"{'totem-DashboardCanvas--editable': editable}\\\\\\\" ng-style=\\\\\\\"getGridStyle()\\\\\\\">\\\\n <dashboard-instrument-chrome class=\\\\\\\"totem-DashboardInstrumentChrome\\\\\\\"\\\\n editable=\\\\\\\"editable\\\\\\\"\\\\n ng-repeat=\\\\\\\"instrument in instruments\\\\\\\"\\\\n ng-style=\\\\\\\"getInstrumentStyle(instrument)\\\\\\\"\\\\n instrument=\\\\\\\"instrument\\\\\\\"\\\\n draggable\\\\n constrain-drag=\\\\\\\"constrainDrag(rect)\\\\\\\"\\\\n drag-complete=\\\\\\\"dragComplete(instrument, rect)\\\\\\\"\\\\n drag-continue=\\\\\\\"dragContinue(instrument, rect)\\\\\\\"\\\\n ng-mousedown=\\\\\\\"bringToFront(instrument)\\\\\\\"\\\\n ng-click=\\\\\\\"bringToFront(instrument)\\\\\\\"\\\\n tap=\\\\\\\"bringToFront(instrument)\\\\\\\"\\\\n resizeable\\\\n constrain-resize=\\\\\\\"constrainResize(rect, origRect)\\\\\\\"\\\\n resize-begin=\\\\\\\"resizeBegin(instrument)\\\\\\\"\\\\n resize-continue=\\\\\\\"resizeContinue(instrument, rect)\\\\\\\"\\\\n resize-complete=\\\\\\\"resizeComplete(instrument, rect)\\\\\\\">\\\\n <instrument instrument=\\\\\\\"instrument\\\\\\\"/>\\\\n </dashboard-instrument-chrome>\\\\n <div ng-if=\\\\\\\"instruments.length === 0\\\\\\\" class=\\\\\\\"totem-DashboardCanvas-noContentNotice\\\\\\\">\\\\n {{ 'noDashboardContent' | i18n }}\\\\n </div>\\\\n</div>\\\\n\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-canvas.tpl.html\\n ** module id = 76\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div>\\\\n <div class=\\\\\\\"totem-DashboardInstrumentChrome-title coral-Heading coral-Heading--1\\\\\\\" ng-class=\\\\\\\"{'totem-DashboardInstrumentChrome-title--editable':editable}\\\\\\\" drag-handle=\\\\\\\"editable\\\\\\\">{{ instrument.title }}</div>\\\\n <div class=\\\\\\\"totem-DashboardInstrumentChrome-toolbar\\\\\\\" ng-if=\\\\\\\"editable\\\\\\\">\\\\n <button class=\\\\\\\"coral-Button coral-Button--quiet totem-DashboardInstrumentChrome-tool\\\\\\\" ng-click=\\\\\\\"duplicateInstrument($event)\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--copy coral-Icon--sizeM\\\\\\\"></i>\\\\n </button>\\\\n <button class=\\\\\\\"coral-Button coral-Button--quiet totem-DashboardInstrumentChrome-tool\\\\\\\" drag-handle>\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--move coral-Icon--sizeM\\\\\\\"></i>\\\\n </button>\\\\n <button class=\\\\\\\"coral-Button coral-Button--quiet totem-DashboardInstrumentChrome-tool\\\\\\\" ng-click=\\\\\\\"editInstrument()\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--edit coral-Icon--sizeM\\\\\\\"></i>\\\\n </button>\\\\n <button class=\\\\\\\"coral-Button coral-Button--quiet totem-DashboardInstrumentChrome-tool\\\\\\\" ng-click=\\\\\\\"removeInstrument()\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--delete coral-Icon--sizeM\\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <div class=\\\\\\\"totem-DashboardInstrumentChrome-content\\\\\\\" ng-transclude/>\\\\n <div class=\\\\\\\"totem-DashboardInstrumentChrome-resizeThumb totem-DashboardInstrumentChrome-resizeThumb--right\\\\\\\" ng-if=\\\\\\\"editable\\\\\\\" resize-handle/>\\\\n <div class=\\\\\\\"totem-DashboardInstrumentChrome-resizeThumb totem-DashboardInstrumentChrome-resizeThumb--left\\\\\\\" ng-if=\\\\\\\"editable\\\\\\\" resize-handle=\\\\\\\"left\\\\\\\"/>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-instrument-chrome.tpl.html\\n ** module id = 77\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-Rail totem-Rail--dashboardList\\\\\\\">\\\\n <ul class=\\\\\\\"totem-RailList coral-List coral-List--minimal\\\\\\\">\\\\n <li class=\\\\\\\"totem-RailList-item coral-List-item\\\\\\\" ng-repeat=\\\\\\\"dashboard in dashboards | orderBy:'name'\\\\\\\">\\\\n <button class=\\\\\\\"totem-RailList-itemButton\\\\\\\" ui-sref=\\\\\\\"dashboard.view({dashboardId: dashboard._id})\\\\\\\"\\\\n ng-class=\\\\\\\"{'is-selected': isActiveDashboard(dashboard)}\\\\\\\">{{ dashboard.name }}</button>\\\\n </li>\\\\n </ul>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-rail.tpl.html\\n ** module id = 78\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-MediaDefinitionTrack\\\\\\\">\\\\n <media-definition-range\\\\n ng-repeat=\\\\\\\"mediaDefinition in mediaDefinitions\\\\\\\"\\\\n is-active=\\\\\\\"mediaDefinition === activeMediaDefinition\\\\\\\"\\\\n ng-style=\\\\\\\"getRangeStyle(mediaDefinition)\\\\\\\"\\\\n name=\\\\\\\"mediaDefinition.name\\\\\\\"\\\\n ng-click=\\\\\\\"activateMediaDefinition(mediaDefinition)\\\\\\\"></media-definition-range>\\\\n <div class=\\\\\\\"totem-MediaDefinitionThumb\\\\\\\"\\\\n ng-repeat=\\\\\\\"mediaDefinition in mediaDefinitions\\\\\\\"\\\\n ng-style=\\\\\\\"getThumbStyle(mediaDefinition)\\\\\\\"\\\\n ng-disabled=\\\\\\\"true\\\\\\\"\\\\n draggable\\\\n drag-handle\\\\n drag-begin=\\\\\\\"thumbDragBegin(mediaDefinition)\\\\\\\"\\\\n drag-continue=\\\\\\\"thumbDragContinue(mediaDefinition, rect)\\\\\\\"\\\\n drag-complete=\\\\\\\"thumbDragComplete(mediaDefinition)\\\\\\\"\\\\n constrain-drag=\\\\\\\"constrainThumbDrag(rect)\\\\\\\"></div>\\\\n <media-definition-rename-popover\\\\n thumb=\\\\\\\"popoverThumb\\\\\\\"\\\\n media-definition=\\\\\\\"popoverMediaDefinition\\\\\\\"\\\\n visible=\\\\\\\"renamePopoverVisibility.visible\\\\\\\"\\\\n ng-if=\\\\\\\"renamePopoverVisibility.visible\\\\\\\"\\\\n is-creating=\\\\\\\"false\\\\\\\"></media-definition-rename-popover>\\\\n <media-definition-rename-popover\\\\n thumb=\\\\\\\"popoverThumb\\\\\\\"\\\\n media-definition=\\\\\\\"popoverMediaDefinition\\\\\\\"\\\\n visible=\\\\\\\"createPopoverVisibility.visible\\\\\\\"\\\\n ng-if=\\\\\\\"createPopoverVisibility.visible\\\\\\\"\\\\n is-creating=\\\\\\\"true\\\\\\\"\\\\n cancel=\\\\\\\"cancelCreate();\\\\\\\"></media-definition-rename-popover>\\\\n <media-definition-delete-popover\\\\n thumb=\\\\\\\"popoverThumb\\\\\\\"\\\\n media-definition=\\\\\\\"popoverMediaDefinition\\\\\\\"\\\\n visible=\\\\\\\"deletePopoverVisibility.visible\\\\\\\"\\\\n ng-if=\\\\\\\"deletePopoverVisibility.visible\\\\\\\"></media-definition-delete-popover>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-track.tpl.html\\n ** module id = 79\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<button class=\\\\\\\"totem-MediaDefinitionMenu-toggle\\\\\\\" ng-click=\\\\\\\"togglePopover($event)\\\\\\\">{{ 'mediaDefinitionMenuLabel' | i18n:{NUM_MEDIA_DEFINITIONS: mediaDefinitions.length} }}</button>\\\\n<div class=\\\\\\\"totem-MediaDefinitionMenu-popover\\\\\\\">\\\\n <div class=\\\\\\\"totem-MediaDefinitionMenu-row\\\\\\\" ng-repeat=\\\\\\\"mediaDefinition in mediaDefinitions\\\\\\\">\\\\n <button class=\\\\\\\"totem-MediaDefinitionMenu-definitionButton\\\\\\\"\\\\n ng-focus=\\\\\\\"rowChildFocus($event)\\\\\\\"\\\\n ng-blur=\\\\\\\"rowChildBlur($event)\\\\\\\"\\\\n ng-mouseenter=\\\\\\\"rowChildMouseenter($event)\\\\\\\"\\\\n ng-mouseleave=\\\\\\\"rowChildMouseleave($event)\\\\\\\"\\\\n ng-click=\\\\\\\"activateMediaDefinition(mediaDefinition)\\\\\\\">\\\\n <span class=\\\\\\\"totem-MediaDefinitionMenu-nameLabel\\\\\\\">{{ mediaDefinition.name }}</span>\\\\n </button>\\\\n <button class=\\\\\\\"totem-MediaDefinitionMenu-iconButton totem-MediaDefinitionMenu-editButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\"\\\\n title=\\\\\\\"{{ 'editMediaDefinition' | i18n:{NAME: mediaDefinition.name} }}\\\\\\\"\\\\n ng-focus=\\\\\\\"rowChildFocus($event)\\\\\\\"\\\\n ng-blur=\\\\\\\"rowChildBlur($event)\\\\\\\"\\\\n ng-mouseenter=\\\\\\\"rowChildMouseenter($event)\\\\\\\"\\\\n ng-mouseleave=\\\\\\\"rowChildMouseleave($event)\\\\\\\"\\\\n ng-click=\\\\\\\"editMediaDefinition(mediaDefinition)\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--edit\\\\\\\"></i>\\\\n </button>\\\\n <button class=\\\\\\\"totem-MediaDefinitionMenu-iconButton totem-MediaDefinitionMenu-deleteButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\"\\\\n title=\\\\\\\"{{ 'deleteMediaDefinition' | i18n:{NAME: mediaDefinition.name} }}\\\\\\\"\\\\n ng-focus=\\\\\\\"rowChildFocus($event)\\\\\\\"\\\\n ng-blur=\\\\\\\"rowChildBlur($event)\\\\\\\"\\\\n ng-mouseenter=\\\\\\\"rowChildMouseenter($event)\\\\\\\"\\\\n ng-mouseleave=\\\\\\\"rowChildMouseleave($event)\\\\\\\"\\\\n ng-click=\\\\\\\"deleteMediaDefinition(mediaDefinition)\\\\\\\"\\\\n ng-disabled=\\\\\\\"mediaDefinitions.length <= 1\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--delete\\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <div class=\\\\\\\"totem-MediaDefinitionMenu-row\\\\\\\">\\\\n <button class=\\\\\\\"totem-MediaDefinitionMenu-definitionButton\\\\\\\"\\\\n ng-focus=\\\\\\\"rowChildFocus($event)\\\\\\\"\\\\n ng-blur=\\\\\\\"rowChildBlur($event)\\\\\\\"\\\\n ng-mouseenter=\\\\\\\"rowChildMouseenter($event)\\\\\\\"\\\\n ng-mouseleave=\\\\\\\"rowChildMouseleave($event)\\\\\\\"\\\\n ng-click=\\\\\\\"addMediaDefinition(mediaDefinition)\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--add\\\\\\\"></i>\\\\n <span class=\\\\\\\"totem-MediaDefinitionMenu-addLabel\\\\\\\">{{ 'addMediaDefinition' | i18n }}</span>\\\\n </button>\\\\n </div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-menu.tpl.html\\n ** module id = 80\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-DashboardInstrument\\\\\\\">\\\\n <div class=\\\\\\\"coral-Wait coral-Wait--large coral-Wait--center\\\\\\\" ng-show=\\\\\\\"showProgress && !showFailure\\\\\\\"></div>\\\\n <div class=\\\\\\\"js-totem-DashboardInstrument-render totem-DashboardInstrument-render\\\\\\\" ng-class=\\\\\\\"{'totem-DashboardInstrument-render--hidden': showProgress || showFailure}\\\\\\\"></div>\\\\n <div class=\\\\\\\"totem-DashboardInstrument-failure\\\\\\\" ng-show=\\\\\\\"showFailure\\\\\\\">{{ 'instrumentFailure' | i18n }}</div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/instrument.tpl.html\\n ** module id = 81\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<cui-modal visible=\\\\\\\"visible\\\\\\\" backdrop=\\\\\\\"backdrop\\\\\\\" buttons=\\\\\\\"buttons\\\\\\\">\\\\n\\\\t<span header>Choose an instrument type</span>\\\\n\\\\t<div content>\\\\n\\\\t\\\\t<button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"totem-ActionButton coral-Button coral-Button-secondary\\\\\\\" ng-click=\\\\\\\"addInstrument('text');\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">Text</button>\\\\n\\\\t\\\\t<button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"totem-ActionButton coral-Button coral-Button-secondary\\\\\\\" ng-click=\\\\\\\"addInstrument('dv');\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">DV</button>\\\\n\\\\t</div>\\\\n</cui-modal>\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/new-instrument-configuration.tpl.html\\n ** module id = 82\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = {\\n\\tinsertInstrumentAtLayoutBottom: function(instrument, dashboard, gridSpacing, uuidGenerator) {\\n\\t\\tvar mediaDefinitions = dashboard.mediaDefinitions;\\n\\t\\tvar mediaLayouts = dashboard.mediaLayouts;\\n\\t\\tvar pages = dashboard.pages;\\n\\t\\tvar defaultMargin = 1;\\n\\t\\tvar defaultHeight = 40;\\n\\n\\t\\tpages.forEach(function(page) {\\n\\t\\t\\tmediaDefinitions.forEach(function(mediaDefinition) {\\n\\t\\t\\t\\tvar maxY = 0;\\n\\t\\t\\t\\tvar layoutsByDefinition = mediaLayouts.filter(function(mediaLayout) {\\n\\t\\t\\t\\t\\treturn mediaLayout.mediaDefinitionId === mediaDefinition._id;\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tlayoutsByDefinition.forEach(function(mediaLayout) {\\n\\t\\t\\t\\t\\tmaxY = Math.max(mediaLayout.y + mediaLayout.height, maxY);\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tmediaLayouts.push({\\n\\t\\t\\t\\t\\t_id: uuidGenerator(),\\n\\t\\t\\t\\t\\tinstrumentId: instrument._id,\\n\\t\\t\\t\\t\\tmediaDefinitionId: mediaDefinition._id,\\n\\t\\t\\t\\t\\tpageId: page._id,\\n\\t\\t\\t\\t\\tx: 1,\\n\\t\\t\\t\\t\\ty: maxY + defaultMargin,\\n\\t\\t\\t\\t\\twidth: mediaDefinition.width / gridSpacing - 2,\\n\\t\\t\\t\\t\\theight: defaultHeight\\n\\t\\t\\t\\t});\\n\\t\\t\\t});\\n\\t\\t});\\n\\t}\\n};\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./common/dashboard-util.js\\n ** module id = 83\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = function(config, eventBus) {\\n eventBus.publish('dataLoaded');\\n return config.html;\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/demo-html/renderer/renderer.js\\n ** module id = 84\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar moduleName = 'totem.dv.editor';\\nangular.module('totem').requires.push(moduleName);\\nangular.module(moduleName, [\\n 'adobe.drag-drop',\\n 'infinite-scroll'\\n ])\\n .service('rsDataAdapter', require('./adapters/rs/adapter'))\\n .service('dataSourcesService', require('./services/data-sources-service'))\\n .service('dvConfigService', require('./services/dv-config-service'))\\n .constant('aestheticDefaults', require('./services/aesthetic-defaults'))\\n .directive('yAestheticConfiguration', require('./directives/y-aesthetic-configuration'))\\n .directive('variableConfiguration', require('./directives/variable-configuration'))\\n .directive('dimensionPod', require('./directives/dimension-pod'))\\n .controller('DataPanelCtrl', require('./controllers/data-panel-ctrl'))\\n .controller('LineCtrl', require('./controllers/line-ctrl'));\\n\\nmodule.exports = function(renderer, config, eventBus) {\\n var editor = $(require('./editor.html'));\\n editor.find('.totem-dv-Editor-renderer').append(renderer);\\n return editor;\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/editor.js\\n ** module id = 85\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar MELT_COLUMN = require('../enum/melt-column');\\n\\nvar getMeltedColumnName = function(meltColumn, refIds) {\\n return meltColumn + refIds.join(':');\\n};\\n\\nvar moduleName = 'totem.dv.renderer';\\nangular.module('totem').requires.push(moduleName);\\nangular.module(moduleName, [])\\n .directive('dv', function($http, $q, $timeout, ims, aestheticDefaults){\\n var linker = function(scope, element, attrs) {\\n /**\\n * A $q deferreds which can be resolved in order to cancel outstanding data request.\\n */\\n var requestCanceler;\\n\\n /**\\n * The data frame object. Contains data formatted appropriately for DV.\\n */\\n var dataFrame;\\n\\n /**\\n * The parameters that were last used to request data. Used to determine if we need to load new data or if we\\n * can use data that was previously loaded and cached.\\n */\\n var previousRequestParams;\\n\\n /**\\n * The deferred created when loadData() is called. Represts the data loading process.\\n */\\n var loadDataDeferred;\\n\\n /**\\n * Whether data loading was forcefully canceled (generally by calling loadData() before the prior data loading\\n * request has been fulfilled.\\n * @type {boolean}\\n */\\n var loadDataCanceled = false;\\n\\n /**\\n * The response data.\\n */\\n var data;\\n\\n /**\\n * Create data columns object based off column sources and returned data.\\n * @param data Data returned from data service.\\n */\\n var createDataFrame = function(data) {\\n var sourceMappings = scope.config.sourceMappings;\\n\\n dataFrame = {};\\n\\n for (var key in sourceMappings) {\\n var columnName;\\n var sourceMapping = sourceMappings[key];\\n\\n if (angular.isObject(sourceMapping)) {\\n columnName = getMeltedColumnName(sourceMapping.column, sourceMapping.refIds);\\n } else {\\n columnName = sourceMapping;\\n }\\n\\n dataFrame[key] = data[columnName];\\n }\\n };\\n\\n var getMelts = function(sourceMappings) {\\n var melts = [];\\n\\n // TODO: Avoid looping?\\n var findMeltForRefIds = function(refIds) {\\n for (var i = 0; i < melts.length; i++) {\\n var melt = melts[i];\\n if (angular.equals(melt.columns, refIds)) {\\n return melt;\\n }\\n }\\n };\\n\\n for (var key in sourceMappings) {\\n var sourceMapping = sourceMappings[key];\\n var refIds = sourceMapping.refIds;\\n\\n if (angular.isObject(sourceMapping)) {\\n if (!findMeltForRefIds(refIds)) {\\n melts.push({\\n columns: sourceMapping.refIds,\\n variableName: getMeltedColumnName(MELT_COLUMN.VARIABLE, refIds),\\n valueName: getMeltedColumnName(MELT_COLUMN.VALUE, refIds)\\n });\\n }\\n }\\n }\\n\\n return melts;\\n };\\n\\n /**\\n * Loads data based on the configuration, replaces data in the dv spec, then renders the chart.\\n * @param {Function} callback A function to call when data is done loading. The callback pattern is used instead\\n * of returning a promise because $q promises are resolved asynchronously. When a user is modifying a mapping\\n * that does not require new data to be fetched from the server (for example, modifying the line size of the chart\\n * by dragging a slider) we want render to be called immediately rather than having a progress indicator\\n * show up between when loadData is called and when render is called.\\n */\\n var loadData = function() {\\n if (loadDataDeferred) {\\n loadDataDeferred.reject();\\n }\\n\\n loadDataDeferred = $q.defer();\\n\\n var cancelOutstandingRequest = function() {\\n if (requestCanceler) {\\n requestCanceler.resolve();\\n loadDataCanceled = true;\\n }\\n };\\n\\n if (scope.config.spec.data && scope.config.spec.data.frame) {\\n cancelOutstandingRequest();\\n dataFrame = scope.config.spec.data.frame;\\n loadDataDeferred = loadDataDeferred || $q.defer();\\n loadDataDeferred.resolve();\\n return loadDataDeferred.promise;\\n }\\n\\n if (!scope.config.source ||\\n !scope.config.source.query ||\\n !scope.config.source.version ||\\n !scope.config.sourceMappings) {\\n cancelOutstandingRequest();\\n scope.eventBus.publish('failed');\\n loadDataDeferred = loadDataDeferred || $q.defer();\\n loadDataDeferred.reject();\\n return loadDataDeferred.promise;\\n }\\n\\n var source = scope.config.source;\\n\\n var requestParams = {\\n query: source.query,\\n melts: getMelts(scope.config.sourceMappings)\\n };\\n\\n // If the data we're requesting is the same as the data we last requested then there's no need to\\n // re-request it. We'll return the previous promise. If it's different, reject the last promise because\\n // we'll be making a new request for the new request params.\\n if (data && previousRequestParams && angular.equals(requestParams, previousRequestParams)) {\\n // config.sourceMappings may have changed even though we're dealing with the same underling data. We'll\\n // re-create the data frame to ensure they are in sync.\\n createDataFrame(data);\\n loadDataDeferred.resolve();\\n return loadDataDeferred.promise;\\n }\\n\\n scope.eventBus.publish('processing');\\n\\n requestCanceler = $q.defer();\\n $http({\\n method: 'POST',\\n url: '/reporting-services/' + source.version + '/query/',\\n // params: {\\n // useCache: 1\\n // },\\n data: requestParams,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n },\\n timeout: requestCanceler.promise\\n }).then(function(response) {\\n data = response.data;\\n createDataFrame(data);\\n loadDataDeferred.resolve();\\n }).catch(function(response) {\\n // If we forcibly canceled data loading then it didn't technically \\\"fail\\\"\\n if (!loadDataCanceled) {\\n scope.eventBus.publish('failed');\\n loadDataDeferred.reject();\\n }\\n\\n loadDataCanceled = false;\\n });\\n\\n previousRequestParams = angular.copy(requestParams);\\n return loadDataDeferred.promise;\\n };\\n\\n /**\\n * Adds aesthetic mapping defaults where such aesthetics have not been defined. This is generally used\\n * so we don't have to rely on DV's defaults.\\n *\\n * @param spec\\n * @param layer\\n */\\n var addAestheticMappingDefaultsToLayer = function(spec, layer) {\\n var uppercaseType = layer.type.toUpperCase();\\n\\n if (aestheticDefaults[uppercaseType] && aestheticDefaults[uppercaseType].MAPPINGS) {\\n var mappingDefaults = aestheticDefaults[uppercaseType].MAPPINGS;\\n for (var mapping in mappingDefaults) {\\n if ((!spec.mappings || spec.mappings[mapping] === undefined) &&\\n (!layer.mappings || layer.mappings[mapping] === undefined)) {\\n layer.mappings = layer.mappings || {};\\n layer.mappings[mapping] = mappingDefaults[mapping];\\n }\\n }\\n }\\n };\\n\\n /**\\n * Renders the chart.\\n */\\n var render = function() {\\n if (!dataFrame) {\\n return;\\n }\\n\\n // The instrument may be in the midst of changing sizes (like when moving between media definitions). We\\n // want to wait a bit so that we render at the new element size.\\n $timeout(function(){\\n if (element.width() > 0 && element.height() > 0) {\\n var specCopy = angular.copy(scope.config.spec);\\n specCopy.parent = element[0];\\n specCopy.duration = 0;\\n specCopy.width = '100%';\\n specCopy.height = '100%';\\n specCopy.data = specCopy.data || {};\\n specCopy.data.frame = dataFrame;\\n\\n specCopy.layers.forEach(function(layer) {\\n addAestheticMappingDefaultsToLayer(specCopy, layer);\\n });\\n\\n try {\\n dv.chart(specCopy);\\n } catch (e) {\\n scope.eventBus.publish('failed');\\n throw e;\\n }\\n }\\n });\\n\\n scope.eventBus.publish('processed');\\n };\\n\\n scope.eventBus.subscribe('resizing', function() {\\n scope.eventBus.publish('processing');\\n }, scope);\\n\\n scope.eventBus.subscribe('resized', render, scope);\\n\\n scope.$watch('config', function(config) {\\n if (config) {\\n loadData().then(render);\\n }\\n }, true);\\n };\\n\\n return {\\n restrict: 'E',\\n link: linker,\\n scope: true\\n };\\n });\\n\\nmodule.exports = function(config, eventBus) {\\n return '<dv class=\\\"totem-dv-Renderer\\\"></dv>';\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/renderer/renderer.js\\n ** module id = 86\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = function(config, eventBus) {\\n var html = '' +\\n '<div class=\\\"keyMetric-Renderer\\\">' +\\n ' <div class=\\\"keyMetric-Renderer-content\\\">' +\\n ' <i class=\\\"keyMetric-Renderer-icon coral-Icon coral-Icon--thumbDown\\\"></i>' +\\n ' <span class=\\\"keyMetric-Renderer-value\\\">' + config.value + '</span>' +\\n ' <span class=\\\"keyMetric-Renderer-label\\\">' + config.label + '</span>' +\\n ' </div>' +\\n '</div>';\\n eventBus.publish('dataLoaded');\\n return html;\\n};\\n\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/key-metric/renderer/renderer.js\\n ** module id = 87\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = function(config, eventBus) {\\n eventBus.publish('dataLoaded');\\n return 'Hello from Starfield.';\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/starfield/renderer/renderer.js\\n ** module id = 88\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\n/* global Quill: true */\\n\\nvar moduleName = 'totem.text.editor';\\nangular.module('totem').requires.push(moduleName);\\nangular.module(moduleName, [])\\n .controller('TxtCtrl', function($scope, $timeout) {\\n\\n $scope.instrument.config = $scope.instrument.config || {};\\n\\n var toolbarScope = null;\\n var quill = null;\\n var formatList = [];\\n var toolbar = null;\\n\\n // Transfers cursor/selection state to toolbar controls.\\n this.sendState = function(delta, source) {\\n $scope.$apply(function() {\\n if(toolbarScope) {\\n var attributes = attributesOverRange();\\n if(attributes) {\\n toolbarScope.setState(attributes);\\n }\\n }\\n $scope.instrument.config.html = quill.getHTML();\\n }.bind(this));\\n };\\n\\n // Determines text attributes for the current cursor/selection\\n function attributesOverRange() {\\n var range = quill.getSelection();\\n if(!range) {\\n return;\\n }\\n var delta = quill.getContents();\\n var current = 0;\\n var rangeAttributes = {};\\n var inspectStart = range.start;\\n var inspectEnd = range.end;\\n if(range.isCollapsed()) {\\n inspectStart -= 1;\\n }\\n for(var i = 0; i < delta.ops.length; i++) {\\n var insertStart = current;\\n var insertEnd = current + delta.ops[i].insert.length;\\n var val, key;\\n if(insertEnd > inspectStart && insertStart < inspectEnd) {\\n for(var j = 0; j < formatList.length; j++) {\\n key = formatList[j];\\n val = undefined;\\n if(key == 'align' || key == 'bullet' || key == 'list') {\\n // Detect line styles\\n var lookahead = 1;\\n // Cursor at beginning of a new line. Look forward for format data.\\n if(delta.ops[i].insert && delta.ops[i].insert == '\\\\n' && range.isCollapsed()) {\\n lookahead = 2;\\n }\\n // There's no newline in the insert, or the selection ends after the last newline.\\n if(delta.ops[i].insert && delta.ops[i].insert.indexOf('\\\\n') == -1 || insertStart + delta.ops[i].insert.lastIndexOf('\\\\n') < inspectEnd) {\\n // Look ahead for attributes on next insert containing a newline\\n while(delta.ops[i + lookahead] && delta.ops[i + lookahead].insert) {\\n if(delta.ops[i + lookahead].insert.indexOf('\\\\n') != -1) {\\n delta.ops[i + lookahead].attributes = delta.ops[i + lookahead].attributes || {};\\n val = delta.ops[i + lookahead].attributes[key];\\n break;\\n }\\n lookahead++;\\n }\\n }\\n } else {\\n // Detect word/char styles\\n if(delta.ops[i].attributes && delta.ops[i].attributes[key]) {\\n val = delta.ops[i].attributes[key];\\n }\\n }\\n if(rangeAttributes[key]) {\\n if(rangeAttributes[key].indexOf(val) == -1) {\\n rangeAttributes[key].push(val);\\n }\\n } else {\\n rangeAttributes[key] = [val];\\n }\\n }\\n }\\n current += delta.ops[i].insert.length;\\n }\\n return rangeAttributes;\\n }\\n\\n // Sets Quill RTE instance from editor.\\n this.setQuill = function(quillInstance) {\\n quill = quillInstance;\\n quill.setHTML($scope.instrument.config.html);\\n quill.on('text-change', this.sendState.bind(this));\\n quill.on('selection-change', this.sendState.bind(this));\\n if(toolbar) {\\n quill.addModule('toolbar', {container: toolbar});\\n }\\n };\\n\\n // Sets toolbar instance from toolbar.\\n this.setToolbar = function(toolbarElem, scope, toolbarFormatList) {\\n toolbar = toolbarElem;\\n toolbarScope = scope;\\n formatList = toolbarFormatList;\\n if(quill) {\\n quill.addModule('toolbar', {container: toolbar});\\n }\\n };\\n\\n // Used by the toolbar to set formats on selected text in the editor.\\n this.applyFormat = function(format, value) {\\n if(quill) {\\n // Some listener inside quill.focus() is causing scope errors.\\n // using this temp solution\\n $timeout(function() {\\n quill.focus();\\n var range = quill.getSelection();\\n if(range && !range.isCollapsed()) {\\n quill.formatText(range.start, range.end, format, value);\\n } else if (range && range.isCollapsed()) {\\n quill.prepareFormat(format, value);\\n }\\n }, 0);\\n }\\n };\\n })\\n .directive('quill', function() {\\n return {\\n restrict: 'E',\\n controller: 'TxtCtrl',\\n transclude: true,\\n replace: true,\\n template: require('./directives/quill.html')\\n };\\n })\\n .directive('quillToolbar', function() {\\n return {\\n require: '^quill',\\n restrict: 'E',\\n transclude: true,\\n replace: true,\\n template: require('./directives/quill-toolbar.html'),\\n controller: function($scope) {\\n\\n // Used by the editor to set the state of the toolbar\\n // based on selected text/cursor position.\\n $scope.setState = function(attributes) {\\n angular.forEach(attributes, function(values, format) {\\n var newFormatValue;\\n if(attributes[format].length === 1) {\\n switch(format) {\\n case 'font':\\n case 'size':\\n case 'align':\\n if(values[0] === undefined) {\\n newFormatValue = $scope[format + 'Options'][1];\\n } else {\\n for(var i = 0; i < $scope[format + 'Options'].length; i++) {\\n if($scope[format + 'Options'][i].value === values[0].replace(/'/g, '')) {\\n newFormatValue = $scope[format + 'Options'][i];\\n }\\n }\\n }\\n break;\\n default:\\n newFormatValue = values[0];\\n }\\n }\\n $scope.format[format] = newFormatValue;\\n });\\n };\\n\\n $scope.fontOptions = [\\n {\\n label: '',\\n value: ''\\n },\\n {\\n label: 'Sans Serif',\\n value: 'sans-serif'\\n },\\n {\\n label: 'Serif',\\n value: 'serif',\\n },\\n {\\n label: 'Monospace',\\n value: 'monospace'\\n },\\n {\\n label: 'Silly',\\n value: 'Comic Sans MS'\\n },\\n {\\n label: 'Heavy',\\n value: 'Impact'\\n }\\n ];\\n\\n $scope.sizeOptions = [\\n {\\n label: '',\\n value: ''\\n },\\n {\\n label: 'Normal',\\n value: '13px',\\n },\\n {\\n label: 'Small',\\n value: '10px'\\n },\\n {\\n label: 'Large',\\n value: '18px'\\n },\\n {\\n label: 'Huge',\\n value: '32px'\\n }\\n ];\\n\\n $scope.alignOptions = [\\n {\\n label: '',\\n value: ''\\n },\\n {\\n label: 'Left',\\n value: 'left'\\n },\\n {\\n label: 'Center',\\n value: 'center'\\n },\\n {\\n label: 'Right',\\n value: 'right'\\n },\\n {\\n label: 'Justify',\\n value: 'justify'\\n }\\n ];\\n\\n $scope.format = {\\n font: $scope.fontOptions[1],\\n size: $scope.sizeOptions[1],\\n align: $scope.alignOptions[1],\\n bold: false,\\n italic: false,\\n underline: false,\\n bullet: false,\\n list: false\\n };\\n },\\n link: function(scope, element, attrs, txtCtrl) {\\n scope.$evalAsync(function(){\\n txtCtrl.setToolbar(element.get(0), scope, Object.keys(scope.format));\\n });\\n scope.applyFormat = function(name) {\\n var selectedFormat = scope.format[name];\\n if(selectedFormat.value) {\\n selectedFormat = selectedFormat.value;\\n }\\n txtCtrl.applyFormat(name, selectedFormat);\\n };\\n }\\n };\\n })\\n .directive('quillEditor', function() {\\n return {\\n require: '^quill',\\n restrict: 'E',\\n transclude: true,\\n replace: true,\\n template: require('./directives/quill-editor.html'),\\n controller: function() {\\n },\\n link: function(scope, element, attrs, txtCtrl) {\\n scope.$evalAsync(function(){\\n txtCtrl.setQuill(new Quill(element.get(0)));\\n });\\n }\\n };\\n })\\n;\\n\\nmodule.exports = function(renderer, config, eventBus) {\\n var editor = $(require('./editor.html'));\\n return editor;\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/text/editor/editor.js\\n ** module id = 89\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar moduleName = 'totem.text.renderer';\\nangular.module('totem').requires.push(moduleName);\\nangular.module(moduleName, [])\\n .directive('text', function(){\\n var linker = function(scope, element, attrs) {\\n scope.$watch('config', function(config) {\\n config = config || {};\\n element.html(config.html);\\n }, true);\\n };\\n\\n return {\\n restrict: 'E',\\n link: linker,\\n scope: true\\n };\\n });\\n\\nmodule.exports = function() {\\n return '<text class=\\\"totem-text-Renderer\\\"></text>';\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/text/renderer/renderer.js\\n ** module id = 90\\n ** module chunks = 0\\n **/\",\"'use strict';\\nvar moduleName = 'totem.twitterTrends';\\nangular.module('totem').requires.push(moduleName);\\nangular.module(moduleName, [])\\n .directive('twitterTrends', function($http){\\n var linker = function(scope, element, attrs) {\\n scope.trends = [];\\n scope.loadTrends = function(){\\n scope.eventBus.publish('dataLoading');\\n $http.jsonp('http://api.whatthetrend.com/api/v2/trends.json?woeid=' + scope.config.woeid + '&callback=JSON_CALLBACK').then(function(response){\\n scope.trends = response.data.trends;\\n scope.eventBus.publish('dataLoaded');\\n });\\n };\\n\\n scope.$watch('config', scope.loadTrends, true);\\n scope.loadTrends();\\n };\\n\\n return {\\n restrict: 'E',\\n link: linker,\\n scope: true,\\n template: '' +\\n '<div id=\\\"trends-Container\\\">' +\\n ' <h1 class=\\\"trends-Title\\\">{{config.locationName}}</h1>' +\\n ' <div class=\\\"trends-Trend\\\" ng-repeat=\\\"trend in trends\\\">' +\\n ' <a href=\\\"https://twitter.com/search?q={{trend.name}}\\\" target=\\\"_new\\\">{{trend.name}}</a>' +\\n ' </div>' +\\n '</div>'\\n };\\n });\\n\\nmodule.exports = function(config, eventBus) {\\n return '<twitter-trends />';\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/twitter-trends/renderer/renderer.js\\n ** module id = 91\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.invalidShareActionAlert', [])\\n .directive('invalidShareActionAlert', function($compile, $timeout) {\\n return {\\n restrict: 'E',\\n scope: {\\n show: '=',\\n message: '='\\n },\\n link: function(scope, element, attrs) {\\n var initialized = false;\\n scope.$watch('show', function(show) {\\n if (show && !initialized) {\\n // We deal with the template here instead of specifying a template on the directive's return\\n // object just for optimization purposes. We won't build the alert until it's actually needed.\\n var template = require('./invalid-share-action-alert.tpl.html');\\n element.empty().append($compile(template)(scope));\\n\\n // Give time for the tooltip to bind to scope.message before tooltip can be properly positioned.\\n $timeout(function() {\\n var $tooltip = element.find('.js-totem-RemoveParticipantAlert-tooltip');\\n var $icon = element.find('.js-totem-RemoveParticipantAlert-icon');\\n new CUI.Tooltip({\\n element: $tooltip,\\n target: $icon,\\n arrow: 'top'\\n });\\n $tooltip.show();\\n });\\n\\n initialized = true;\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/invalid-share-action-alert.js\\n ** module id = 92\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.userSearch', [\\n require('../services/user-service').name\\n ])\\n .directive('userSearch', function(userService, i18nFilter) {\\n\\n var getSublistElement = function(entities, header) {\\n if (entities.length) {\\n var html = '<li class=\\\"coral-SelectList-item coral-SelectList-item--optgroup\\\">' +\\n '<span class=\\\"coral-SelectList-groupHeader\\\">' + header + '</span>' +\\n '<ul class=\\\"coral-SelectList-sublist\\\">';\\n\\n for (var i = 0; i < entities.length; i++) {\\n var entity = entities[i];\\n html += '<li class=\\\"coral-SelectList-item coral-SelectList-item--option\\\" data-value=\\\"' + entity._id + '\\\">' +\\n entity.displayName + '</li>';\\n }\\n\\n html += '</ul>';\\n return $(html);\\n }\\n };\\n\\n return {\\n restrict: 'EA',\\n template: require('./user-search.tpl.html'),\\n scope: {\\n selectUser: '&',\\n selectGroup: '&'\\n },\\n link: function(scope, element, attrs) {\\n var groups;\\n var users;\\n var autocompleteElement = element.find('.coral-Autocomplete');\\n\\n var autocomplete = new CUI.Autocomplete({\\n element: autocompleteElement,\\n selectlistConfig: {\\n type: 'dynamic',\\n loadData: function() {\\n var deferred = $.Deferred();\\n\\n // dataadditional is null when the user hits the down arrow key without having entered any text\\n // into the input.\\n if (this.options.dataadditional &&\\n this.options.dataadditional.query &&\\n this.options.dataadditional.query.length) {\\n var self = this;\\n userService.search(this.options.dataadditional.query).then(function(results) {\\n users = results.users;\\n groups = results.groups;\\n\\n // Improved APIs coming!\\n // https://git.corp.adobe.com/Coral/coralui-component-selectlist/pull/11\\n\\n var $groups = getSublistElement(groups, i18nFilter('groups'));\\n\\n if ($groups) {\\n self._makeAccessibleListOption($groups);\\n self.$element.append($groups);\\n }\\n\\n var $users = getSublistElement(users, i18nFilter('users'));\\n\\n if ($users) {\\n self._makeAccessibleListOption($users);\\n self.$element.append($users);\\n }\\n\\n self._loadingComplete = true;\\n\\n deferred.resolve();\\n }).catch(function(error) {\\n deferred.reject(error);\\n });\\n } else {\\n deferred.resolve();\\n }\\n\\n return deferred.promise();\\n }\\n }\\n });\\n\\n autocompleteElement.on('change:value', function(event, payload) {\\n scope.$apply(function() {\\n var id = payload.value;\\n\\n for (var i = 0; i < users.length; i++) {\\n var user = users[i];\\n if (user._id === id) {\\n scope.selectUser({user: user});\\n }\\n }\\n\\n for (var j = 0; j < groups.length; j++) {\\n var group = groups[i];\\n if (group._id === id) {\\n scope.selectGroup({group: group});\\n }\\n }\\n\\n autocomplete.clear();\\n });\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/user-search.js\\n ** module id = 93\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<cui-modal visible=\\\\\\\"visible\\\\\\\">\\\\n <span header>{{ participable.name }}</span>\\\\n\\\\n <table content class=\\\\\\\"coral-Table totem-ShareTable\\\\\\\">\\\\n <thead>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ShareTable-headerCell--remove\\\\\\\"></th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ShareTable-headerCell--name\\\\\\\" ng-click=\\\\\\\"setSort('entity.displayName')\\\\\\\" sort-header>\\\\n Name\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'entity.displayName'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ShareTable-headerCell--owner\\\\\\\" ng-click=\\\\\\\"setSort(isOwner)\\\\\\\" sort-header>\\\\n Owner\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === isOwner\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ShareTable-headerCell--scheduled\\\\\\\" ng-click=\\\\\\\"setSort(isScheduled)\\\\\\\" sort-header ng-show=\\\\\\\"false\\\\\\\">\\\\n Scheduled\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === isScheduled\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n </tr>\\\\n </thead>\\\\n <tbody>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-repeat=\\\\\\\"participant in getParticipants() | orderBy:sortPredicate:sortReverse\\\\\\\">\\\\n <td class=\\\\\\\"coral-Table-cell totem-ShareTable-cell--remove\\\\\\\">\\\\n <button ng-click=\\\\\\\"removeParticipant(participant, $event)\\\\\\\" ng-show=\\\\\\\"invalidRemoveOwnerParticipant !== participant\\\\\\\" class=\\\\\\\"coral-Button coral-Button--square coral-Button--quiet\\\\\\\" title=\\\\\\\"{{ 'removeParticipant' | i18n }}\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close\\\\\\\"></i>\\\\n </button>\\\\n <invalid-share-action-alert show=\\\\\\\"invalidRemoveOwnerParticipant === participant\\\\\\\" message=\\\\\\\"'invalidRemoveOwnerDescription' | i18n:{NAME: participant.entity.displayName}\\\\\\\"></invalid-share-action-alert>\\\\n </td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ShareTable-cell--name\\\\\\\">{{ participant.entity.displayName }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ShareTable-cell--owner\\\\\\\">\\\\n <label class=\\\\\\\"coral-Switch\\\\\\\" ng-show=\\\\\\\"invalidRevokeOwnershipParticipant !== participant\\\\\\\">\\\\n <input class=\\\\\\\"coral-Switch-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" ng-checked=\\\\\\\"{{ participant.isOwner }}\\\\\\\" ng-click=\\\\\\\"setOwnerRole(participant, $event)\\\\\\\">\\\\n <span class=\\\\\\\"coral-Switch-offLabel\\\\\\\">No</span><span class=\\\\\\\"coral-Switch-onLabel\\\\\\\">Yes</span>\\\\n </label>\\\\n <invalid-share-action-alert show=\\\\\\\"invalidRevokeOwnershipParticipant === participant\\\\\\\" message=\\\\\\\"'invalidRevokeOwnershipDescription' | i18n:{NAME: participant.entity.displayName}\\\\\\\"></invalid-share-action-alert>\\\\n </td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ShareTable-cell--scheduled\\\\\\\" ng-show=\\\\\\\"false\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" ng-checked=\\\\\\\"participant.isScheduled\\\\\\\" ng-click=\\\\\\\"setScheduled(participant, $event.target.checked)\\\\\\\">\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </td>\\\\n </tr>\\\\n </tbody>\\\\n </table>\\\\n\\\\n <div template class=\\\\\\\"coral-Modal totem-ShareModal\\\\\\\">\\\\n <div class=\\\\\\\"coral-Modal-header totem-ShareModal-header\\\\\\\">\\\\n <i class=\\\\\\\"coral-Modal-typeIcon coral-Icon coral-Icon--sizeS\\\\\\\"></i>\\\\n <h2 class=\\\\\\\"coral-Modal-title coral-Heading coral-Heading--2\\\\\\\"></h2>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-MinimalButton coral-Modal-closeButton\\\\\\\" title=\\\\\\\"{{ 'cancel' | i18n }}\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close coral-MinimalButton-icon\\\\\\\"></i>\\\\n </button>\\\\n <user-search select-user=\\\\\\\"addParticipant(user)\\\\\\\" select-group=\\\\\\\"addParticipant(group)\\\\\\\"></user-search>\\\\n </div>\\\\n <div class=\\\\\\\"coral-Modal-body totem-ShareModal-body\\\\\\\">Content</div>\\\\n <div class=\\\\\\\"coral-Modal-footer\\\\\\\">\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--quiet\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--primary\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\" ng-click=\\\\\\\"save()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n</cui-modal>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/share.tpl.html\\n ** module id = 94\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-AdHocDataUpload-dropTarget\\\\\\\">\\\\n <span ng-if=\\\\\\\"!uploadFileName && !uploading\\\\\\\" ng-bind-html=\\\\\\\"dropLabel\\\\\\\"></span>\\\\n <div ng-if=\\\\\\\"uploading\\\\\\\" class=\\\\\\\"coral-Progress\\\\\\\"><div class=\\\\\\\"coral-Progress-bar\\\\\\\"><div class=\\\\\\\"coral-Progress-status\\\\\\\" ng-style=\\\\\\\"{width: percentProgress}\\\\\\\"></div></div></div>\\\\n <span ng-if=\\\\\\\"uploadFileName\\\\\\\">{{ uploadFileName }}</span>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-file-upload.tpl.html\\n ** module id = 95\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dragResizeUtil', [])\\n .factory('dragResizeUtil', function($document) {\\n\\n /**\\n * Gets the X position of the pointer within the page. Works with touch events.\\n * @param {Event} event\\n * @returns {Number}\\n */\\n var getPageX = function(event) {\\n return event.pageX !== undefined ? event.pageX : event.originalEvent.pageX;\\n };\\n\\n /**\\n * Gets the Y position of the pointer within the page. Works with touch events.\\n * @param {Event} event\\n * @returns {Number}\\n */\\n var getPageY = function(event) {\\n return event.pageY !== undefined ? event.pageY : event.originalEvent.pageY;\\n };\\n\\n /**\\n * Gets the X position of the pointer within a container. On a container that's scrollable, this is the X position\\n * within the scrolling content.\\n *\\n * @param {Event} event\\n * @param {jQuery} container\\n * @returns {Number}\\n */\\n var getXWithinContainer = function(event, container) {\\n var offset = container.offset();\\n var scrollLeft = container[0].scrollLeft;\\n // Check for undefined offset and scrollLeft in case container is document.\\n return getPageX(event) - (offset ? offset.left : 0) + (scrollLeft || 0);\\n };\\n\\n /**\\n * Gets the Y position of the pointer within a container. On a container that's scrollable, this is the Y position\\n * within the scrolling content.\\n *\\n * @param {Event} event\\n * @param {jQuery} container\\n * @returns {Number}\\n */\\n var getYWithinContainer = function(event, container) {\\n var offset = container.offset();\\n var scrollTop = container[0].scrollTop;\\n // Check for undefined offset and scrollTop in case container is document.\\n return getPageY(event) - (offset ? offset.top : 0) + (scrollTop || 0);\\n };\\n\\n /**\\n * A set of utilities to be used by draggable and resizable directives.\\n */\\n return {\\n getPageX: getPageX,\\n getPageY: getPageY,\\n getXWithinContainer: getXWithinContainer,\\n getYWithinContainer: getYWithinContainer\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/drag-resize-util.js\\n ** module id = 96\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.autoScroll', [\\n require('./drag-resize-util').name\\n ])\\n .factory('AutoScroll', function($interval, dragResizeUtil, $rootScope) {\\n\\n /**\\n * Provides auto-scrolling capabilities for use with drag operations. When a user is dragging an element and gets\\n * near the edge of an ancestor that scrolls, this will scroll the ancestor so that user can easily continue\\n * dragging without having to let go, manually scroll the parent container, then drag again.\\n *\\n * @param options\\n * @param {Number} options.scrollInterval The interval, in milliseconds, at which the pointer location should be\\n * evaluated to see if the container should be auto-scrolled.\\n * @param {Number} options.scrollDistance The number of pixels the container should be scrolled.\\n * @param {Number} options.edgeThreshold The number of pixels from the edge of the container that should trigger\\n * an auto-scroll.\\n * @constructor\\n */\\n var AutoScroll = function(options) {\\n angular.extend(this, {\\n scrollInterval: 30, // milliseconds to check for scrolling needs\\n scrollDistance: 15, // pixels per interval\\n edgeThreshold: 25 // pixels from the edge of the scroll parent\\n }, options);\\n };\\n\\n AutoScroll.prototype._tick = function() {\\n if (!this._lastEvent) {\\n return;\\n }\\n\\n var scrollWeight,\\n pageX = dragResizeUtil.getPageX(this._lastEvent),\\n pageY = dragResizeUtil.getPageY(this._lastEvent),\\n scrollParentOffset = this._scrollParent.offset(),\\n xOnScrollParent = pageX - scrollParentOffset.left,\\n yOnScrollParent = pageY - scrollParentOffset.top,\\n topThreshold = this.edgeThreshold,\\n bottomThreshold = this._scrollParent.height() - this.edgeThreshold,\\n leftThreshold = this.edgeThreshold,\\n rightThreshold = this._scrollParent.width() - this.edgeThreshold,\\n autoScrolled = false;\\n\\n if (yOnScrollParent < topThreshold) {\\n scrollWeight = Math.min(1 - (yOnScrollParent / topThreshold), 1);\\n this._scrollParent[0].scrollTop -= this.scrollDistance * scrollWeight;\\n autoScrolled = true;\\n } else if (yOnScrollParent > bottomThreshold) {\\n scrollWeight = Math.min((yOnScrollParent - bottomThreshold) / this.edgeThreshold, 1);\\n this._scrollParent[0].scrollTop += this.scrollDistance * scrollWeight;\\n autoScrolled = true;\\n }\\n\\n if (xOnScrollParent < leftThreshold) {\\n scrollWeight = Math.min(1 - (xOnScrollParent / leftThreshold), 1);\\n this._scrollParent[0].scrollLeft -= this.scrollDistance * scrollWeight;\\n autoScrolled = true;\\n } else if (xOnScrollParent > rightThreshold) {\\n scrollWeight = Math.min((xOnScrollParent - rightThreshold) / this.edgeThreshold, 1);\\n this._scrollParent[0].scrollLeft += this.scrollDistance * scrollWeight;\\n autoScrolled = true;\\n }\\n\\n if (autoScrolled && this.onScroll) {\\n var self = this;\\n $rootScope.$apply(function() {\\n self.onScroll(self._lastEvent);\\n });\\n }\\n };\\n\\n /**\\n * Begin monitoring for auto-scrolling needs.\\n * @param {jQuery|HTMLElement} The container that should be auto-scrolled the pointer gets close to the edge.\\n */\\n AutoScroll.prototype.start = function(scrollParent) {\\n this._scrollParent = $(scrollParent);\\n\\n if (!this._intervalPromise) {\\n // We check on an interval instead of on every mouse event because the user may not be holding the cursor\\n // steady while container needs to continue scrolling.\\n this._intervalPromise = $interval(this._tick.bind(this), this.scrollInterval, 0, false);\\n }\\n };\\n\\n /**\\n * Stop monitoring for auto-scrolling needs.\\n */\\n AutoScroll.prototype.stop = function() {\\n if (this._intervalPromise) {\\n $interval.cancel(this._intervalPromise);\\n this._intervalPromise = null;\\n }\\n this._scrollParent = null;\\n this._lastEvent = null;\\n };\\n\\n /**\\n * Notify auto-scroll of the most recent known location of the user's pointer.\\n * @param {Event} event Mouse event.\\n */\\n AutoScroll.prototype.updatePointerLocation = function(event) {\\n this._lastEvent = event;\\n };\\n\\n return AutoScroll;\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/auto-scroll.js\\n ** module id = 97\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-MediaDefinitionRange\\\\\\\" ng-class=\\\\\\\"{ 'totem-MediaDefinitionRange--active': isActive }\\\\\\\">\\\\n <div class=\\\\\\\"totem-MediaDefinitionRange-name\\\\\\\">{{ name }}</div>\\\\n <div class=\\\\\\\"totem-MediaDefinitionRange-activeStrip\\\\\\\"></div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-range.tpl.html\\n ** module id = 98\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionPopover', [])\\n .directive('mediaDefinitionPopover', function() {\\n return {\\n restrict: 'AE',\\n transclude: true,\\n scope: {\\n thumb: '=',\\n visible: '=',\\n hideFromClickOutside: '&'\\n },\\n template: require('./media-definition-popover.tpl.html'),\\n link: function(scope, element, attrs) {\\n var popover;\\n var popoverElement = element.children().eq(0);\\n\\n var nudge = function() {\\n popoverElement.css('top', '+=6px'); // Because it looks better...I guess.\\n };\\n\\n scope.$watch('visible', function(visible) {\\n if (visible) {\\n // We have to evalAsync because we can't guarantee that the contents of the popover will\\n // be populated until the end of the digest cycle. If we show the popover before then, it has a good\\n // chance of appearing mis-positioned because its width/height would likely change afterward due to\\n // content changing.\\n scope.$evalAsync(function() {\\n if (!popover) {\\n popover = new CUI.Popover({\\n element: popoverElement,\\n pointAt: scope.thumb\\n });\\n\\n popover.on('hide', function() {\\n // If visible is already false then we're probably already in a digest and reacting to it being set\\n // to false. We'd get a digest-in-progress error if we tried kicking off another digest via\\n // scope.$apply. If visible is true, then it's likely the user clicked outside of the popover\\n // and we need to let others know about the visibility change.\\n if (scope.visible) {\\n scope.$apply(function() {\\n scope.hideFromClickOutside();\\n scope.visible = false;\\n });\\n }\\n });\\n }\\n\\n popover.show();\\n nudge();\\n });\\n } else if (popover) {\\n popover.hide();\\n }\\n });\\n\\n scope.$watch('thumb', function(thumb) {\\n if (popover) {\\n popover.set('pointAt', thumb);\\n nudge();\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-popover.js\\n ** module id = 99\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<media-definition-popover thumb=\\\\\\\"thumb\\\\\\\" visible=\\\\\\\"visible\\\\\\\" hide-from-click-outside=\\\\\\\"hideFromClickOutside()\\\\\\\">\\\\n <form class=\\\\\\\"totem-RenameMediaDefinition\\\\\\\" ng-submit=\\\\\\\"complete()\\\\\\\">\\\\n <div class=\\\\\\\"totem-MediaDefinitionPopover-content\\\\\\\">\\\\n <label class=\\\\\\\"totem-RenameMediaDefinition-label\\\\\\\">{{ 'viewportName' | i18n }} <input class=\\\\\\\"totem-RenameMediaDefinition-input coral-Textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" ng-model=\\\\\\\"editing.name\\\\\\\"></label>\\\\n </div>\\\\n <div class=\\\\\\\"totem-MediaDefinitionPopover-footer\\\\\\\">\\\\n <button class=\\\\\\\"totem-MediaDefinitionPopover-footerButton coral-Button\\\\\\\" type=\\\\\\\"button\\\\\\\" ng-click=\\\\\\\"cancel()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-MediaDefinitionPopover-footerButton coral-Button coral-Button--primary\\\\\\\" type=\\\\\\\"submit\\\\\\\">{{ getSaveLabel() }}</button>\\\\n </div>\\\\n </form>\\\\n</media-definition-popover>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-rename-popover.tpl.html\\n ** module id = 100\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<media-definition-popover thumb=\\\\\\\"thumb\\\\\\\" visible=\\\\\\\"visible\\\\\\\" hide-from-click-outside=\\\\\\\"hideFromClickOutside()\\\\\\\">\\\\n <form class=\\\\\\\"totem-DeleteMediaDefinition\\\\\\\" ng-submit=\\\\\\\"complete()\\\\\\\">\\\\n <div class=\\\\\\\"totem-MediaDefinitionPopover-content totem-DeleteMediaDefinition-content\\\\\\\">{{ mediaDefinition.name }}</div>\\\\n <div class=\\\\\\\"totem-MediaDefinitionPopover-footer\\\\\\\">\\\\n <button class=\\\\\\\"totem-MediaDefinitionPopover-footerButton coral-Button\\\\\\\" type=\\\\\\\"button\\\\\\\" ng-click=\\\\\\\"cancel()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-MediaDefinitionPopover-footerButton coral-Button coral-Button--warning\\\\\\\" type=\\\\\\\"submit\\\\\\\">{{ 'delete' | i18n }}</button>\\\\n </div>\\\\n </form>\\\\n</media-definition-popover>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-delete-popover.tpl.html\\n ** module id = 101\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div ng-controller=\\\\\\\"DataPanelCtrl\\\\\\\" class=\\\\\\\"totem-dv-Editor\\\\\\\">\\\\n <div class=\\\\\\\"totem-Rail\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-DataSourceSelect\\\\\\\">\\\\n <cui-select options=\\\\\\\"dataSources\\\\\\\" label=\\\\\\\"'label'\\\\\\\" selection=\\\\\\\"selectedDataSource\\\\\\\" change=\\\\\\\"dataSourceChange()\\\\\\\" placeholder=\\\\\\\"Select a Data Store\\\\\\\"></cui-select>\\\\n </div>\\\\n <div class=\\\\\\\"totem-DimensionTabPanel coral-TabPanel\\\\\\\" data-init=\\\\\\\"tabs\\\\\\\">\\\\n <nav class=\\\\\\\"coral-TabPanel-navigation\\\\\\\">\\\\n <a class=\\\\\\\"coral-TabPanel-tab\\\\\\\" data-toggle=\\\\\\\"tab\\\\\\\">Metrics</a>\\\\n <a class=\\\\\\\"coral-TabPanel-tab\\\\\\\" data-toggle=\\\\\\\"tab\\\\\\\">Variables</a>\\\\n </nav>\\\\n <div class=\\\\\\\"totem-DimensionTabPanel-content coral-TabPanel-content\\\\\\\">\\\\n <section class=\\\\\\\"coral-TabPanel-pane\\\\\\\">\\\\n <ul class=\\\\\\\"u-totem-noPadding\\\\\\\">\\\\n <li class=\\\\\\\"totem-dv-Dimension coral-Draggable\\\\\\\" ad-draggable draggable-model=\\\\\\\"metric\\\\\\\" ng-repeat=\\\\\\\"metric in metrics\\\\\\\">\\\\n <span class=\\\\\\\"totem-dv-Dimension-itemIcon coral-Icon coral-Icon--sizeS coral-Icon--calculator\\\\\\\"></span>\\\\n <span class=\\\\\\\"totem-dv-Dimension-itemLabel\\\\\\\">{{ metric.name }}</span>\\\\n </li>\\\\n </ul>\\\\n </section>\\\\n <section class=\\\\\\\"coral-TabPanel-pane\\\\\\\">\\\\n <ul class=\\\\\\\"u-totem-noPadding\\\\\\\">\\\\n <li class=\\\\\\\"coral-Draggable\\\\\\\" ad-draggable draggable-model=\\\\\\\"variable\\\\\\\" ng-repeat=\\\\\\\"variable in variables\\\\\\\">\\\\n <span class=\\\\\\\"totem-dv-Dimension-itemIcon coral-Icon coral-Icon--sizeS coral-Icon--dimension\\\\\\\"></span>\\\\n <span class=\\\\\\\"totem-dv-Dimension-itemLabel\\\\\\\">{{ variable.name }}</span>\\\\n </li>\\\\n </ul>\\\\n </section>\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"coral-Wait coral-Wait--large coral-Wait--center\\\\\\\" ng-show=\\\\\\\"showDataSourceProgress\\\\\\\"></div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-NonRail\\\\\\\">\\\\n <div class=\\\\\\\"totem-ActionBar\\\\\\\" ng-if=\\\\\\\"!editable\\\\\\\">\\\\n <div class=\\\\\\\"coral-ButtonGroup\\\\\\\">\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--graphTrend\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Line</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Add Facets</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Add Geometry</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Add Annotation</span></a>\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-dv-Editor-content\\\\\\\" ng-controller=\\\\\\\"LineCtrl\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-leftContent\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingPod\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingTitle\\\\\\\">\\\\n Y Axis\\\\n <button class=\\\\\\\"totem-dv-Editor-editButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"yAxisConfigVisible = true\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--edit\\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <dimension-pod dimensions=\\\\\\\"dimensionsByAesthetic.y\\\\\\\"\\\\n dropzone-label=\\\\\\\"Add a Metric\\\\\\\"\\\\n enter-dimension=\\\\\\\"enterDimension('y', event, dimension)\\\\\\\"\\\\n drop-dimension=\\\\\\\"dropDimension('y', dimension)\\\\\\\"\\\\n remove-dimension=\\\\\\\"removeDimension('y', dimension)\\\\\\\"></dimension-pod>\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-dv-Editor-centerContent\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-renderer\\\\\\\"></div>\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingPod\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingTitle\\\\\\\">\\\\n X Axis\\\\n <button class=\\\\\\\"totem-dv-Editor-editButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--edit\\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <dimension-pod dimensions=\\\\\\\"dimensionsByAesthetic.x\\\\\\\"></dimension-pod>\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-dv-Editor-rightContent\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingPod\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingTitle\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-MappingSwatch totem-dv-ColorSwatch\\\\\\\"></div>\\\\n Color\\\\n <button class=\\\\\\\"totem-dv-Editor-editButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\"\\\\n ng-click=\\\\\\\"showVariableConfig('stroke')\\\\\\\"\\\\n ng-show=\\\\\\\"isVariableEditingEnabled('stroke')\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--edit\\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <dimension-pod dimensions=\\\\\\\"dimensionsByAesthetic.stroke\\\\\\\"\\\\n dropzone-label=\\\\\\\"Add a Variable\\\\\\\"\\\\n enter-dimension=\\\\\\\"enterDimension('stroke', event, dimension)\\\\\\\"\\\\n drop-dimension=\\\\\\\"dropDimension('stroke', dimension)\\\\\\\"\\\\n remove-dimension=\\\\\\\"removeDimension('stroke', dimension)\\\\\\\"></dimension-pod>\\\\n </div>\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingPod\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingTitle\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-MappingSwatch totem-dv-LineSwatch\\\\\\\"></div>\\\\n Thickness\\\\n </div>\\\\n <cui-slider ticks=\\\\\\\"true\\\\\\\" min=\\\\\\\"1\\\\\\\" max=\\\\\\\"6\\\\\\\" step=\\\\\\\"1\\\\\\\" value=\\\\\\\"size\\\\\\\" class=\\\\\\\"totem-dv-MappingSlider\\\\\\\"></cui-slider>\\\\n </div>\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingPod\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-Editor-mappingTitle\\\\\\\">\\\\n <div class=\\\\\\\"totem-dv-MappingSwatch totem-dv-LineSwatch\\\\\\\"></div>\\\\n Line Type\\\\n <button class=\\\\\\\"totem-dv-Editor-editButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\"\\\\n ng-click=\\\\\\\"showVariableConfig('linetype')\\\\\\\"\\\\n ng-show=\\\\\\\"isVariableEditingEnabled('linetype')\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--edit\\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <dimension-pod dimensions=\\\\\\\"dimensionsByAesthetic.linetype\\\\\\\"\\\\n dropzone-label=\\\\\\\"Add a Variable\\\\\\\"\\\\n enter-dimension=\\\\\\\"enterDimension('linetype', event, dimension)\\\\\\\"\\\\n drop-dimension=\\\\\\\"dropDimension('linetype', dimension)\\\\\\\"\\\\n remove-dimension=\\\\\\\"removeDimension('linetype', dimension)\\\\\\\"></dimension-pod>\\\\n </div>\\\\n </div>\\\\n <y-aesthetic-configuration visible=\\\\\\\"yAxisConfigVisible\\\\\\\"></y-aesthetic-configuration>\\\\n <variable-configuration visible=\\\\\\\"variableConfigVisible\\\\\\\" variable=\\\\\\\"variableConfigDimension\\\\\\\" metrics=\\\\\\\"dimensionsByAesthetic.y\\\\\\\" save=\\\\\\\"write()\\\\\\\"></variable-configuration>\\\\n </div>\\\\n </div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/editor.html\\n ** module id = 102\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div ng-controller=\\\\\\\"TxtCtrl\\\\\\\" class=\\\\\\\"totem-text-Editor\\\\\\\">\\\\n\\\\t<quill></quill>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/text/editor/editor.html\\n ** module id = 103\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div>\\\\n\\\\t<quill-toolbar></quill-toolbar>\\\\n\\\\t<quill-editor></quill-editor>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/text/editor/directives/quill.html\\n ** module id = 104\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div>\\\\n\\\\t<cui-select options=\\\\\\\"fontOptions\\\\\\\" label=\\\\\\\"'label'\\\\\\\" selection=\\\\\\\"format.font\\\\\\\" change=\\\\\\\"applyFormat('font')\\\\\\\"></cui-select>\\\\n\\\\t<cui-select options=\\\\\\\"sizeOptions\\\\\\\" label=\\\\\\\"'label'\\\\\\\" selection=\\\\\\\"format.size\\\\\\\" change=\\\\\\\"applyFormat('size')\\\\\\\"></cui-select>\\\\n\\\\t<div class=\\\\\\\"coral-Selector\\\\\\\">\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" ng-model=\\\\\\\"format.bold\\\\\\\" ng-change=\\\\\\\"applyFormat('bold')\\\\\\\" />\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textBold\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" ng-model=\\\\\\\"format.italic\\\\\\\" ng-change=\\\\\\\"applyFormat('italic')\\\\\\\" />\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textItalic\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" ng-model=\\\\\\\"format.underline\\\\\\\" ng-change=\\\\\\\"applyFormat('underline')\\\\\\\" />\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textUnderline\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t</div>\\\\n\\\\t<div class=\\\\\\\"coral-Selector\\\\\\\">\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"radio\\\\\\\" name=\\\\\\\"align\\\\\\\" ng-model=\\\\\\\"format.align\\\\\\\" ng-value=\\\\\\\"alignOptions[1]\\\\\\\" ng-change=\\\\\\\"applyFormat('align')\\\\\\\">\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textLeft coral-Selector-icon\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"radio\\\\\\\" name=\\\\\\\"align\\\\\\\" ng-model=\\\\\\\"format.align\\\\\\\" ng-value=\\\\\\\"alignOptions[2]\\\\\\\" ng-change=\\\\\\\"applyFormat('align')\\\\\\\">\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textCenter coral-Selector-icon\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"radio\\\\\\\" name=\\\\\\\"align\\\\\\\" ng-model=\\\\\\\"format.align\\\\\\\" ng-value=\\\\\\\"alignOptions[3]\\\\\\\"ng-change=\\\\\\\"applyFormat('align')\\\\\\\">\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textRight coral-Selector-icon\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"radio\\\\\\\" name=\\\\\\\"align\\\\\\\" ng-model=\\\\\\\"format.align\\\\\\\" ng-value=\\\\\\\"alignOptions[4]\\\\\\\"ng-change=\\\\\\\"applyFormat('align')\\\\\\\">\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textJustified coral-Selector-icon\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t</div>\\\\n\\\\t<div class=\\\\\\\"coral-Selector\\\\\\\">\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" ng-model=\\\\\\\"format.bullet\\\\\\\" ng-change=\\\\\\\"applyFormat('bullet')\\\\\\\">\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textBulleted coral-Selector-icon\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t\\\\t<label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n\\\\t\\\\t\\\\t<input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" ng-model=\\\\\\\"format.list\\\\\\\" ng-change=\\\\\\\"applyFormat('list')\\\\\\\">\\\\n\\\\t\\\\t\\\\t<span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n\\\\t\\\\t\\\\t\\\\t<i class=\\\\\\\"coral-Icon coral-Icon--textNumbered coral-Selector-icon\\\\\\\"></i>\\\\n\\\\t\\\\t\\\\t</span>\\\\n\\\\t\\\\t</label>\\\\n\\\\t</div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/text/editor/directives/quill-toolbar.html\\n ** module id = 105\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div></div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/text/editor/directives/quill-editor.html\\n ** module id = 106\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar DIMENSION_TYPE = require('../../enum/dimension-type');\\n\\nmodule.exports = function($http, $q, ims) {\\n var dimensionsPromisesByDataSource = {};\\n var dataSourcesPromise = null;\\n var rsURL = '/reporting-services/0.5';\\n\\n var assignDimensionUrn = function(dimension) {\\n if (dimension.type === 'time') {\\n // TODO: Not sure how this will end up.\\n dimension.resourceUrn = 'time';\\n } else {\\n dimension.resourceUrn = dimension.dataStore + '/' + dimension.type + '/' + dimension.id;\\n }\\n return dimension;\\n };\\n\\n return {\\n getDataSources: function() {\\n if (dataSourcesPromise) {\\n return dataSourcesPromise;\\n }\\n else {\\n var validDataSources = ['dms', 'adhoc'];\\n var promises = {};\\n\\n validDataSources.forEach(function(dataSource) {\\n promises[dataSource] = $http({\\n method: 'POST',\\n url: rsURL + '/' + dataSource + '?depth=1',\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n });\\n });\\n\\n return $q.all(promises).then(function(d) {\\n var results = [];\\n for (var sourceKey in d) {\\n var source = d[sourceKey];\\n for (var storeKey in source) {\\n var store = source[storeKey];\\n store.label = sourceKey + '/' + store.name; // TODO: this will go away once we get designs on what the label should be\\n store.resourceUrn = sourceKey + '/' + storeKey;\\n results.push(store);\\n }\\n }\\n return results;\\n });\\n }\\n },\\n\\n /**\\n * Returns metrics and variables for each data store that has been requested. Returns cached promises if\\n * results have already been fulfilled.\\n * @param {Array} dataSourceArray An array of RS data-source strings ('/dms/reportsuitename')\\n * @return {Object<data-source name, {metrics, variables}>} A collection of all report suite variables and metrics we've fetched\\n */\\n getDimensionsByDataSources: function(dataSourceArray) {\\n var dataSourcesMap = {};\\n dataSourceArray.forEach(function(dataSource) {\\n dataSourcesMap[dataSource] = this.getDimensionsByDataSource(dataSource);\\n }, this);\\n\\n return $q.all(dataSourcesMap).then(function(dataSources) {\\n return dataSources;\\n });\\n },\\n\\n getDimensionsByDataSource: function(dataSource) {\\n var query = function(dataSource, dimensionType) {\\n return $http({\\n method: 'POST',\\n url: rsURL + '/' + dataSource + '/' + dimensionType + '?depth=1',\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(\\n function(response) {\\n var data = response.data;\\n var dimensions = [];\\n for (var id in data) {\\n var dimension = data[id];\\n dimensions.push(assignDimensionUrn({\\n type: dimensionType,\\n id: id,\\n name: dimension.name,\\n dataStore: dataSource\\n }));\\n }\\n return dimensions;\\n }\\n );\\n };\\n\\n // Check if our dimensions are already cached for this dataSource.\\n var dimensionsPromise = dimensionsPromisesByDataSource[dataSource];\\n if (dimensionsPromise) {\\n return dimensionsPromise.then(function(dimensionPromises) {\\n return dimensionPromises;\\n });\\n }\\n\\n return dimensionsPromisesByDataSource[dataSource] = $q.all({\\n metric: query(dataSource, DIMENSION_TYPE.METRIC),\\n variable: query(dataSource, DIMENSION_TYPE.VARIABLE)\\n }).then(function(dimensions) {\\n return dimensions;\\n });\\n },\\n\\n assignDimensionUrn: assignDimensionUrn,\\n\\n currentDataSource: null\\n };\\n\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/services/data-sources-service.js\\n ** module id = 107\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = function() {\\n return {\\n /**\\n * Creates a new configuration object for situations where we don't already have one, like when a new DV\\n * instrument is created.\\n * @return {Config} Configuration object\\n */\\n createConfig: function() {\\n return {\\n source: {},\\n sourceMappings: {},\\n spec: {\\n data: {}\\n }\\n };\\n },\\n\\n validateConfig: function(config) {\\n if (!config.source) {\\n throw new Error('Configuration object should have a source object');\\n }\\n if (!config.spec) {\\n throw new Error('Configuration object should have a DV spec object');\\n }\\n if (!config.spec.data) {\\n throw new Error('Configuration object should have a DV spec object with a data block inside.');\\n }\\n }\\n };\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/services/dv-config-service.js\\n ** module id = 108\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\n/**\\n * Default values that should be used for geoms. These are defined here so\\n * we don't rely on DV's defaults and even if DV's defaults change we can retain\\n * consistency.\\n */\\n// Some of these values are strings where you may think they should be\\n// numbers. The controls that are used to modify aesthetics like size, for example,\\n// deal in strings so by keeping them strings here we simplify the process.\\nmodule.exports = Object.freeze({\\n LINE: {\\n MAPPINGS: {\\n SIZE: '2'\\n }\\n }\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/services/aesthetic-defaults.js\\n ** module id = 109\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = function() {\\n return {\\n restrict: 'AE',\\n scope: {\\n visible: '='\\n },\\n template: require('./y-aesthetic-configuration.tpl.html'),\\n link: function(scope, element, attrs) {\\n\\n }\\n };\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/directives/y-aesthetic-configuration.js\\n ** module id = 110\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = function(rsDataAdapter) {\\n return {\\n restrict: 'AE',\\n scope: {\\n visible: '=',\\n variable: '=',\\n metrics: '=',\\n externalSave: '&save'\\n },\\n template: require('./variable-configuration.tpl.html'),\\n controller: function($scope) {\\n $scope.deselectedValues = ['one', 'two', 'three', 'four'];\\n $scope.selectedValues = ['http://onereallylongurltosimulaterealworldcrazinesswillitwraporwillitexplode.com', 'B val', 'C val', 'D val'];\\n $scope.selectionType = 'ranked';\\n $scope.rankedCount = 4;\\n\\n var colors = [];\\n\\n for (var key in dv.COLOR) {\\n colors.push(dv.COLOR[key]);\\n }\\n\\n $scope.getSwatchColor = function(index) {\\n return colors[index % colors.length];\\n };\\n\\n $scope.allOthersColor = '#afafaf';\\n\\n $scope.selectValue = function(value) {\\n var deselectedValues = $scope.getDeselectedValues();\\n var selectedValues = $scope.getSelectedValues();\\n\\n var index = deselectedValues.indexOf(value);\\n\\n if (index > -1) {\\n deselectedValues.splice(index, 1);\\n }\\n\\n selectedValues.push(value);\\n };\\n\\n $scope.deselectValue = function(value) {\\n var deselectedValues = $scope.getDeselectedValues();\\n var selectedValues = $scope.getSelectedValues();\\n\\n var index = selectedValues.indexOf(value);\\n\\n if (index > -1) {\\n selectedValues.splice(index, 1);\\n }\\n\\n deselectedValues.push(value);\\n };\\n\\n $scope.loadingValues = false;\\n var loadedValues = [];\\n\\n var rankedDeselectedValues = [];\\n var rankedSelectedValues = [];\\n\\n var pickedDeselectedValues = [];\\n var pickedSelectedValues = [];\\n\\n $scope.getDeselectedValues = function() {\\n return $scope.selectionType === 'ranked' ? rankedDeselectedValues : pickedDeselectedValues;\\n };\\n\\n $scope.getSelectedValues = function() {\\n return $scope.selectionType === 'ranked' ? rankedSelectedValues : pickedSelectedValues;\\n };\\n\\n $scope.loadMoreValues = function() {\\n if ($scope.visible && $scope.variable && $scope.sortMetric) {\\n $scope.loadingValues = true;\\n rsDataAdapter.loadValues($scope.variable.id, $scope.sortMetric.id, loadedValues.length + 1, 50).then(function (values) {\\n loadedValues = loadedValues.concat(values);\\n\\n values.forEach(function(value) {\\n if (rankedSelectedValues.indexOf(value) === -1) {\\n rankedDeselectedValues.push(value);\\n }\\n\\n if (pickedSelectedValues.indexOf(value) === -1) {\\n pickedDeselectedValues.push(value);\\n }\\n });\\n\\n updateRankedSelectedValues();\\n\\n $scope.loadingValues = false;\\n });\\n }\\n };\\n\\n var updateRankedSelectedValues = function() {\\n rankedSelectedValues = loadedValues.slice(0, $scope.rankedCount);\\n };\\n\\n $scope.$watch('rankedCount', updateRankedSelectedValues);\\n\\n $scope.$watchGroup([\\n 'visible',\\n 'variable',\\n 'metrics'\\n ], function() {\\n if ($scope.visible && $scope.variable && $scope.metrics && $scope.metrics.length) {\\n $scope.filter = angular.copy($scope.variable.filter);\\n $scope.sortMetric = $scope.metrics[0];\\n\\n loadedValues = [];\\n rankedDeselectedValues = [];\\n rankedSelectedValues = [];\\n pickedDeselectedValues = [];\\n pickedSelectedValues = [];\\n\\n $scope.loadMoreValues();\\n $scope.infiniteScrollContainer = '#infinite-scroll-container';\\n }\\n });\\n\\n $scope.save = function() {\\n angular.copy($scope.filter, $scope.variable.filter);\\n $scope.externalSave();\\n };\\n },\\n link: function(scope, element, attrs) {\\n\\n }\\n };\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/directives/variable-configuration.js\\n ** module id = 111\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = function() {\\n return {\\n restrict: 'AE',\\n scope: {\\n dimensions: '=',\\n dropzoneLabel: '@',\\n enterDimension: '&',\\n dropDimension: '&',\\n removeDimension: '&'\\n },\\n template: require('./dimension-pod.tpl.html')\\n };\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/directives/dimension-pod.js\\n ** module id = 112\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = function($scope, $q, dataSourcesService) {\\n var ignorablePromise;\\n\\n $scope.showDataSourceProgress = true;\\n $scope.metrics = [];\\n $scope.variables = [];\\n\\n dataSourcesService.getDataSources().then(function(dataSources) {\\n $scope.dataSources = dataSources;\\n\\n if ($scope.dataSources && $scope.dataSources.length) {\\n dataSourcesService.currentDataSource = $scope.dataSources[0];\\n }\\n });\\n\\n $scope.dataSourceChange = function() {\\n dataSourcesService.currentDataSource = $scope.selectedDataSource;\\n };\\n\\n $scope.$watch(function() {\\n return dataSourcesService.currentDataSource;\\n }, function(currentDataSource) {\\n if (currentDataSource) {\\n // Ignore a previous request if it hasn't returned yet.\\n if (ignorablePromise) {\\n ignorablePromise.ignore();\\n }\\n ignorablePromise = dataSourcesService.getDimensionsByDataSource(currentDataSource.resourceUrn);\\n ignorablePromise = $q.when(ignorablePromise).ignorify();\\n ignorablePromise.then(function(dataSource) {\\n $scope.metrics = dataSource.metric;\\n $scope.variables = dataSource.variable;\\n $scope.showDataSourceProgress = false;\\n });\\n $scope.selectedDataSource = currentDataSource;\\n }\\n $scope.metrics = [];\\n $scope.variables = [];\\n $scope.showDataSourceProgress = true;\\n });\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/controllers/data-panel-ctrl.js\\n ** module id = 113\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar MELT_COLUMN = require('../../enum/melt-column'),\\n DIMENSION_TYPE = require('../../enum/dimension-type'),\\n FILTER_TYPE = require('../../enum/filter-type');\\n\\nvar getRefIdProvider = function() {\\n var refIdCounter = 1;\\n var dimensionByRefId = {};\\n var refIdByDimensionHash = {};\\n var provider = function(dimension) {\\n // Create an identifying hash for the dimension so tha we can retrieve the ref ID for the dimension\\n // later without looping. This also allows us to compare two dimension objects that aren't the same object\\n // in memory but represent the same dimension entity.\\n var hash = dimension.resourceUrn;\\n var existingRefId = refIdByDimensionHash[hash];\\n\\n if (existingRefId) {\\n return existingRefId;\\n } else {\\n var newId = 'dim' + refIdCounter++;\\n dimensionByRefId[newId] = dimension;\\n refIdByDimensionHash[hash] = newId;\\n return newId;\\n }\\n };\\n provider.getMap = function() {\\n return dimensionByRefId;\\n };\\n return provider;\\n};\\n\\nvar getNameForDimension = function(dimension) {\\n return dimension.name;\\n};\\n\\nvar addFilterToDimension = function(dimension) {\\n // Derived is handled when the data is melted. Reporting Services doesn't need a filter for it.\\n if (dimension.type !== DIMENSION_TYPE.DERIVED) {\\n dimension.filter = {\\n type: FILTER_TYPE.RANKED,\\n count: 5\\n };\\n }\\n};\\n\\nvar getGuide = function(aesthetic, dimensions) {\\n var guide = {};\\n switch (aesthetic) {\\n case 'y':\\n if (dimensions.length == 1) {\\n guide.title = dimensions[0].name;\\n } else {\\n guide.hideTitle = true;\\n }\\n return guide;\\n case 'x':\\n guide.hideTitle = true;\\n return guide;\\n default:\\n if (dimensions.length === 1) {\\n var dimension = dimensions[0];\\n if (dimension.type === DIMENSION_TYPE.DERIVED) {\\n guide.hideTitle = true;\\n guide.labels = dimension.dimensions.map(getNameForDimension);\\n } else {\\n guide.hideTitle = true; // TODO...I believe filters are going to come into play here.\\n }\\n }\\n return guide;\\n }\\n};\\n\\nvar getDataType = function(aesthetic, dimensions) {\\n switch (aesthetic) {\\n case 'y':\\n return dv.VALUE_TYPE.NUMERIC;\\n case 'x':\\n return dv.VALUE_TYPE.TIME;\\n default:\\n return dv.VALUE_TYPE.CATEGORICAL;\\n }\\n};\\n\\nvar getSourceMapping = function(aesthetic, dimensions, refIdProvider) {\\n if (dimensions.length === 1) {\\n var dimension = dimensions[0];\\n if (dimension.type === DIMENSION_TYPE.DERIVED) {\\n return {\\n refIds: dimension.dimensions.map(refIdProvider),\\n column: MELT_COLUMN.VARIABLE\\n };\\n } else {\\n return refIdProvider(dimension);\\n }\\n } else if (dimensions.length > 1) {\\n return {\\n refIds: dimensions.map(refIdProvider),\\n column: MELT_COLUMN.VALUE\\n };\\n }\\n};\\n\\nvar getLineLayer = function(spec) {\\n if (spec.layers) {\\n for (var i = 0; i < spec.layers.length; i++) {\\n var layer = spec.layers[i];\\n if (layer.type === 'line') {\\n return layer;\\n }\\n }\\n }\\n};\\n\\nvar addDefaultLineAesthetics = function(dimensionsByAesthetic, assignUrn) {\\n if (!dimensionsByAesthetic.x) {\\n var granularity = 'week';\\n dimensionsByAesthetic.x = [\\n assignUrn({\\n type: DIMENSION_TYPE.TIME,\\n name: granularity,\\n granularity: granularity\\n })\\n ];\\n }\\n};\\n\\nvar createSpec = function(dimensionsByAesthetic, constantByAesthetic) {\\n var columnIdCounter = 1,\\n mappings = {},\\n dataTypes = {},\\n guides = {},\\n aesthetic,\\n columnIdByAesthetic = {};\\n\\n for (aesthetic in constantByAesthetic) {\\n mappings[aesthetic] = constantByAesthetic[aesthetic];\\n }\\n\\n for (aesthetic in dimensionsByAesthetic) {\\n var dimensions = dimensionsByAesthetic[aesthetic];\\n\\n if (!dimensions || !dimensions.length) {\\n continue;\\n }\\n\\n var columnId = 'col' + columnIdCounter++;\\n mappings[aesthetic] = '{{' + columnId + '}}';\\n columnIdByAesthetic[aesthetic] = columnId;\\n\\n if (aesthetic !== 'group') { // Group aesthetics cannot have guides in DV\\n guides[aesthetic] = getGuide(aesthetic, dimensions);\\n }\\n\\n dataTypes[columnId] = getDataType(aesthetic, dimensions);\\n }\\n\\n var spec = {\\n data: {\\n types: dataTypes\\n },\\n layers: [\\n {\\n type: 'line',\\n mappings: mappings\\n }\\n ],\\n guides: guides\\n };\\n\\n return {\\n spec: spec,\\n columnIdByAesthetic: columnIdByAesthetic\\n };\\n};\\n\\nvar validateAddYDimension = function(dimensionsByAesthetic, dimension) {\\n return (dimension.type === DIMENSION_TYPE.METRIC);\\n};\\n\\nvar addYDimension = function(dimensionsByAesthetic, dimension) {\\n dimensionsByAesthetic.y = dimensionsByAesthetic.y || [];\\n dimensionsByAesthetic.y.push(dimension);\\n\\n dimensionsByAesthetic.stroke = dimensionsByAesthetic.stroke || [];\\n\\n // We will need a melted column if we have more than one variable mapped to y.\\n if (dimensionsByAesthetic.y.length > 1) {\\n // Preferred destinations for our melted variables column.\\n var eligibleDerivedDestinations = ['stroke', 'linetype'];\\n for (var i = 0; i < eligibleDerivedDestinations.length; i++) {\\n var mapping = eligibleDerivedDestinations[i];\\n // Does the aesthetic already have mappings? If no, let's add our melted mapping.\\n // Otherwise move on to the next eligible derived destination.\\n var mappingDimensions = dimensionsByAesthetic[mapping] || [];\\n if (!mappingDimensions.length) {\\n var add = operations[mapping].add;\\n if (add) {\\n add(dimensionsByAesthetic, {\\n type: DIMENSION_TYPE.DERIVED,\\n name: 'Y Axis Measures',\\n dimensions: dimensionsByAesthetic.y\\n });\\n break;\\n }\\n }\\n }\\n }\\n};\\n\\nvar removeYDimension = function(dimensionsByAesthetic, dimension) {\\n var yDims = dimensionsByAesthetic.y;\\n if (yDims.length > 1) {\\n yDims.splice(yDims.indexOf(dimension), 1);\\n\\n if (yDims.length === 1) {\\n // Try to find derived dimension in other aesthetics and remove it.\\n for (var aesthetic in dimensionsByAesthetic) {\\n // we are already looking at y\\n if (aesthetic === 'y') {\\n continue;\\n }\\n var dimensions = dimensionsByAesthetic[aesthetic];\\n var index = -1;\\n for (var i = 0; i < dimensions.length; i++) {\\n var dim = dimensions[i];\\n if (dim.type === DIMENSION_TYPE.DERIVED) {\\n index = i;\\n break;\\n }\\n }\\n\\n if (index >= 0) {\\n dimensionsByAesthetic[aesthetic].splice(index, 1);\\n }\\n }\\n }\\n }\\n else {\\n dimensionsByAesthetic.y = [];\\n }\\n};\\n\\nvar validateAddStrokeDimension = function(dimensionsByAesthetic, dimension) {\\n return (dimension.type === DIMENSION_TYPE.VARIABLE || dimension.type === DIMENSION_TYPE.DERIVED);\\n};\\n\\nvar addStrokeDimension = function(dimensionsByAesthetic, dimension) {\\n // Creates a new object that uses the original dimension as its prototype. We do this so we can attach a filter\\n // onto the dimension without modifying the original dimension object.\\n dimension = Object.create(dimension);\\n addFilterToDimension(dimension);\\n dimensionsByAesthetic.stroke = [dimension];\\n};\\n\\nvar removeStrokeDimension = function(dimensionsByAesthetic, dimension) {\\n dimensionsByAesthetic.stroke = [];\\n dimension.filter = null;\\n};\\n\\nvar validateAddLinetypeDimension = function(dimensionsByAesthetic, dimension) {\\n return (dimension.type === DIMENSION_TYPE.VARIABLE || dimension.type === DIMENSION_TYPE.DERIVED);\\n};\\n\\nvar addLinetypeDimension = function(dimensionsByAesthetic, dimension) {\\n // Creates a new object that uses the original dimension as its prototype. We do this so we can attach a filter\\n // onto the dimension without modifying the original dimension object.\\n dimension = Object.create(dimension);\\n addFilterToDimension(dimension);\\n dimensionsByAesthetic.linetype = [dimension];\\n};\\n\\nvar removeLinetypeDimension = function(dimensionsByAesthetic, dimension) {\\n dimensionsByAesthetic.linetype = [];\\n dimension.filter = null;\\n};\\n\\nvar getMappings = function(spec) {\\n var layer = getLineLayer(spec);\\n var layerMappings = layer ? layer.mappings : null;\\n return angular.extend({}, spec.mappings, layerMappings);\\n};\\n\\nvar getAestheticMappings = function(config, dimensionByRefId, assignUrn) {\\n var dimensionsByAesthetic = {};\\n var constantByAesthetic = {};\\n\\n // A config spec won't exist when we create a brand new instrument.\\n if (config.spec) {\\n var mappings = getMappings(config.spec);\\n\\n var getDimensionByRefId = function(refId) {\\n return dimensionByRefId[refId];\\n };\\n\\n for (var aesthetic in mappings) {\\n var mapping = mappings[aesthetic];\\n var expressionVariables = dv.expressionParser.getVariables(mapping);\\n\\n if (expressionVariables.length === 0) {\\n constantByAesthetic[aesthetic] = mapping;\\n } else if (expressionVariables.length === 1) {\\n var columnId = expressionVariables[0];\\n var sourceMapping = config.sourceMappings[columnId];\\n\\n if (angular.isObject(sourceMapping)) {\\n var dimensions = sourceMapping.refIds.map(getDimensionByRefId);\\n if (sourceMapping.column === MELT_COLUMN.VALUE) {\\n dimensionsByAesthetic[aesthetic] = dimensions;\\n } else if (sourceMapping.column === MELT_COLUMN.VARIABLE) {\\n dimensionsByAesthetic[aesthetic] = [{\\n type: DIMENSION_TYPE.DERIVED,\\n name: 'Y Axis Measures',\\n dimensions: dimensions\\n }];\\n }\\n } else {\\n dimensionsByAesthetic[aesthetic] = [getDimensionByRefId(sourceMapping)];\\n }\\n }\\n }\\n }\\n\\n addDefaultLineAesthetics(dimensionsByAesthetic, assignUrn); // TODO\\n\\n return {\\n dimensionsByAesthetic: dimensionsByAesthetic,\\n constantByAesthetic: constantByAesthetic\\n };\\n};\\n\\nvar operations = {\\n y: {\\n validateAdd: validateAddYDimension,\\n add: addYDimension,\\n remove: removeYDimension\\n },\\n stroke: {\\n validateAdd: validateAddStrokeDimension,\\n add: addStrokeDimension,\\n remove: removeStrokeDimension\\n },\\n linetype: {\\n validateAdd: validateAddLinetypeDimension,\\n add: addLinetypeDimension,\\n remove: removeLinetypeDimension\\n }\\n};\\n\\nmodule.exports = function($scope, $q, dataSourcesService, aestheticDefaults, dvConfigService, rsDataAdapter) {\\n $scope.dimensionsByAesthetic = {};\\n $scope.instrument.config = $scope.instrument.config || dvConfigService.createConfig();\\n console.log('creating config', $scope.instrument.config);\\n dvConfigService.validateConfig($scope.instrument.config);\\n if ($scope.instrument.config) {\\n // Wrap the result in a promise if it didn't return one.\\n $q.when(rsDataAdapter.readQuery($scope.instrument.config.source, dataSourcesService))\\n .then(function(dimensionByRefId) {\\n dimensionByRefId = dimensionByRefId || {};\\n var aestheticMappings = getAestheticMappings($scope.instrument.config, dimensionByRefId, dataSourcesService.assignDimensionUrn);\\n $scope.dimensionsByAesthetic = aestheticMappings.dimensionsByAesthetic;\\n $scope.constantByAesthetic = aestheticMappings.constantByAesthetic;\\n });\\n }\\n\\n $scope.enterDimension = function(aesthetic, event, dimension) {\\n var validateAdd = operations[aesthetic].validateAdd;\\n if (!validateAdd($scope.dimensionsByAesthetic, dimension)) {\\n event.preventDragDrop();\\n }\\n };\\n\\n var getSourceMappings = function(columnIdByAesthetic, refIdProvider) {\\n var sourceMappings = {};\\n\\n for (var aesthetic in columnIdByAesthetic) {\\n var columnId = columnIdByAesthetic[aesthetic];\\n sourceMappings[columnId] = getSourceMapping(aesthetic, $scope.dimensionsByAesthetic[aesthetic], refIdProvider);\\n }\\n\\n return sourceMappings;\\n };\\n\\n var write = function() {\\n var createSpecResult = createSpec($scope.dimensionsByAesthetic, $scope.constantByAesthetic);\\n $scope.instrument.config.spec = createSpecResult.spec;\\n\\n var refIdProvider = getRefIdProvider();\\n $scope.instrument.config.sourceMappings = getSourceMappings(createSpecResult.columnIdByAesthetic, refIdProvider);\\n\\n var dimensionByRefId = refIdProvider.getMap();\\n $scope.instrument.config.source = rsDataAdapter.writeQuery(dimensionByRefId);\\n };\\n\\n $scope.dropDimension = function(aesthetic, dimension) {\\n var add = operations[aesthetic].add;\\n add($scope.dimensionsByAesthetic, dimension);\\n write();\\n };\\n\\n $scope.removeDimension = function(aesthetic, dimension) {\\n var remove = operations[aesthetic].remove;\\n remove($scope.dimensionsByAesthetic, dimension);\\n write();\\n };\\n\\n $scope.showVariableConfig = function(aesthetic) {\\n var dimensions = $scope.dimensionsByAesthetic[aesthetic];\\n if (dimensions.length > 0) {\\n $scope.variableConfigDimension = dimensions[0];\\n $scope.variableConfigVisible = true;\\n }\\n };\\n\\n $scope.isVariableEditingEnabled = function(aesthetic) {\\n var yDimensions = $scope.dimensionsByAesthetic['y'],\\n aestheticDimensions = $scope.dimensionsByAesthetic[aesthetic];\\n\\n return yDimensions &&\\n yDimensions.length > 0 &&\\n aestheticDimensions &&\\n aestheticDimensions.length > 0;\\n };\\n\\n $scope.size = aestheticDefaults.LINE.MAPPINGS.SIZE;\\n\\n $scope.write = write;\\n\\n // Optimally we would make $scope.size a getter/setter so we don't have to have the two watchers below for syncing\\n // between $scope.size and $scope.constantByAesthetic.size. Unfortunately with coral-support-angular and CoralUI\\n // there's too much underlying baggage to make that a reality anytime soon.\\n $scope.$watch('size', function(size, previousSize) {\\n if (size === previousSize) {\\n return;\\n }\\n\\n if ($scope.constantByAesthetic) {\\n if (size === aestheticDefaults.LINE.MAPPINGS.SIZE) {\\n delete $scope.constantByAesthetic.size;\\n } else {\\n $scope.constantByAesthetic.size = size;\\n }\\n\\n // They'll be the same first time when the watcher is initialized. We don't want to write if it hasn't changed.\\n if (size !== previousSize) {\\n write();\\n }\\n }\\n });\\n\\n $scope.$watch('constantByAesthetic.size', function(size) {\\n if (size === undefined) {\\n $scope.size = aestheticDefaults.LINE.MAPPINGS.SIZE;\\n } else {\\n $scope.size = size;\\n }\\n });\\n};\\n\\n\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/controllers/line-ctrl.js\\n ** module id = 114\\n ** module chunks = 0\\n **/\",\"var MELT_COLUMN = Object.freeze({\\n VARIABLE: 'variable',\\n VALUE: 'value'\\n});\\n\\nmodule.exports = MELT_COLUMN;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/enum/melt-column.js\\n ** module id = 115\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = function($http, $q, $timeout) {\\n return {\\n readQuery: require('./query-reader'),\\n writeQuery: require('./query-writer'),\\n loadValues: require('./value-loader')($http, $q, $timeout)\\n };\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/adapters/rs/adapter.js\\n ** module id = 116\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-RemoveParticipantAlert\\\\\\\" ng-show=\\\\\\\"show\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeS coral-Icon--alert totem-RemoveParticipantAlert-icon js-totem-RemoveParticipantAlert-icon\\\\\\\"></i>\\\\n <span data-init=\\\\\\\"tooltip\\\\\\\" class=\\\\\\\"coral-Tooltip coral-Tooltip--error totem-RemoveParticipantAlert-tooltip js-totem-RemoveParticipantAlert-tooltip\\\\\\\" style=\\\\\\\"display: none\\\\\\\">{{ message }}</span>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/invalid-share-action-alert.tpl.html\\n ** module id = 117\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.userService', [])\\n .factory('userService', function($http, $q, eventBus, i18nFilter) {\\n var canceler;\\n var search = function(query) {\\n if (canceler) {\\n canceler.resolve();\\n }\\n\\n canceler = $q.defer();\\n\\n return $http({\\n method: 'GET',\\n url: '/share/search/' + query,\\n timeout: canceler.promise\\n }).then(function(response) {\\n return response.data;\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('userSearchError'));\\n $q.reject(error);\\n });\\n };\\n\\n return {\\n search: search\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/user-service.js\\n ** module id = 118\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"coral-Autocomplete totem-ShareModal-search\\\\\\\">\\\\n <span class=\\\\\\\"coral-DecoratedTextfield js-coral-Autocomplete-field\\\\\\\">\\\\n <i class=\\\\\\\"coral-DecoratedTextfield-icon coral-Icon coral-Icon--sizeXS coral-Icon--search\\\\\\\"></i>\\\\n <input class=\\\\\\\"coral-DecoratedTextfield-input coral-Textfield js-coral-Autocomplete-textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" name=\\\\\\\"name1\\\\\\\"\\\\n placeholder=\\\\\\\"{{ 'userSearchPlaceholder' | i18n }}\\\\\\\">\\\\n </span>\\\\n <ul class=\\\\\\\"coral-SelectList js-coral-Autocomplete-selectList\\\\\\\"></ul>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/user-search.tpl.html\\n ** module id = 119\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-MediaDefinitionPopover\\\\\\\" ng-transclude></div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-popover.tpl.html\\n ** module id = 120\\n ** module chunks = 0\\n **/\",\"var DIMENSION_TYPE = Object.freeze({\\n METRIC: 'metric',\\n VARIABLE: 'variable',\\n TIME: 'time',\\n DERIVED: 'derived'\\n});\\n\\nmodule.exports = DIMENSION_TYPE;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/enum/dimension-type.js\\n ** module id = 121\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<cui-modal visible=\\\\\\\"visible\\\\\\\">\\\\n <span header>Y-Axis Configuration</span>\\\\n <span content>\\\\n test content\\\\n </span>\\\\n <div template class=\\\\\\\"coral-Modal\\\\\\\">\\\\n <div class=\\\\\\\"coral-Modal-header\\\\\\\">\\\\n <i class=\\\\\\\"coral-Modal-typeIcon coral-Icon coral-Icon--sizeS\\\\\\\"></i>\\\\n <h2 class=\\\\\\\"coral-Modal-title coral-Heading coral-Heading--2\\\\\\\"></h2>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-MinimalButton coral-Modal-closeButton\\\\\\\" title=\\\\\\\"{{ 'cancel' | i18n }}\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close coral-MinimalButton-icon \\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <div class=\\\\\\\"coral-Modal-body\\\\\\\"></div>\\\\n <div class=\\\\\\\"coral-Modal-footer\\\\\\\">\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--quiet\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">Cancel</button>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--primary coral-Button--warning\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">Save</button>\\\\n </div>\\\\n </div>\\\\n</cui-modal>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/directives/y-aesthetic-configuration.tpl.html\\n ** module id = 122\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<cui-modal visible=\\\\\\\"visible\\\\\\\">\\\\n <span header>{{ variable.name }}</span>\\\\n <span content>\\\\n <div class=\\\\\\\"coral-Selector\\\\\\\" style=\\\\\\\"margin-bottom: 8px\\\\\\\">\\\\n <label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n <input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"radio\\\\\\\" ng-model=\\\\\\\"selectionType\\\\\\\" value=\\\\\\\"ranked\\\\\\\">\\\\n <span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n Ranked\\\\n </span>\\\\n </label>\\\\n <label class=\\\\\\\"coral-Selector-option\\\\\\\">\\\\n <input class=\\\\\\\"coral-Selector-input\\\\\\\" type=\\\\\\\"radio\\\\\\\" ng-model=\\\\\\\"selectionType\\\\\\\" value=\\\\\\\"picked\\\\\\\">\\\\n <span class=\\\\\\\"coral-Selector-description\\\\\\\">\\\\n Hand-picked\\\\n </span>\\\\n </label>\\\\n </div>\\\\n <div ng-show=\\\\\\\"selectionType === 'ranked'\\\\\\\" style=\\\\\\\"margin-bottom: 8px\\\\\\\">\\\\n Top\\\\n <cui-number-input style=\\\\\\\"vertical-align: middle\\\\\\\" value=\\\\\\\"rankedCount\\\\\\\" min=\\\\\\\"0\\\\\\\" max=\\\\\\\"10\\\\\\\" step=\\\\\\\"1\\\\\\\"></cui-number-input>\\\\n Ranked by\\\\n <cui-select options=\\\\\\\"metrics\\\\\\\" label=\\\\\\\"'name'\\\\\\\" selection=\\\\\\\"sortMetric\\\\\\\"></cui-select>\\\\n </div>\\\\n <div>\\\\n <div style=\\\\\\\"float: left; padding-right:20px\\\\\\\">\\\\n <span style=\\\\\\\"font-weight: bold\\\\\\\">Excluded Values</span>\\\\n <span class=\\\\\\\"coral-DecoratedTextfield\\\\\\\" ng-show=\\\\\\\"selectionType === 'picked'\\\\\\\" style=\\\\\\\"display: block\\\\\\\">\\\\n <i class=\\\\\\\"coral-DecoratedTextfield-icon coral-Icon coral-Icon--sizeXS coral-Icon--search\\\\\\\"></i>\\\\n <input type=\\\\\\\"text\\\\\\\" class=\\\\\\\"coral-DecoratedTextfield-input coral-Textfield\\\\\\\" placeholder=\\\\\\\"Search\\\\\\\">\\\\n </span>\\\\n <div id=\\\\\\\"infinite-scroll-container\\\\\\\" style=\\\\\\\"width: 250px; height: 300px; overflow-y: auto\\\\\\\">\\\\n <ul class=\\\\\\\"u-totem-noPadding u-totem-noMargin\\\\\\\" style=\\\\\\\"width:100%;\\\\\\\" infinite-scroll=\\\\\\\"loadMoreValues()\\\\\\\" infinite-scroll-container=\\\\\\\"infiniteScrollContainer\\\\\\\" infinite-scroll-disabled=\\\\\\\"loadingValues\\\\\\\" infinite-scroll-distance=\\\\\\\".5\\\\\\\">\\\\n <li class=\\\\\\\"coral-Draggable\\\\\\\" ng-class=\\\\\\\"{'is-disabled': selectionType === 'ranked', 'coral-Draggable--noThumb': selectionType === 'ranked'}\\\\\\\" ad-draggable draggable-model=\\\\\\\"value\\\\\\\" ng-repeat=\\\\\\\"value in getDeselectedValues()\\\\\\\" style=\\\\\\\"width: 100%;\\\\\\\">\\\\n {{ value }}\\\\n </li>\\\\n </ul>\\\\n </div>\\\\n </div>\\\\n <div style=\\\\\\\"float: left;\\\\\\\">\\\\n <span style=\\\\\\\"font-weight: bold\\\\\\\">Included Values</span>\\\\n <ul class=\\\\\\\"u-totem-noPadding\\\\\\\" style=\\\\\\\"width: 250px; margin-top: 0;\\\\\\\">\\\\n <li class=\\\\\\\"coral-Draggable coral-Draggable--removable\\\\\\\" ng-class=\\\\\\\"{'coral-Draggable--noThumb': selectionType === 'ranked'}\\\\\\\" ng-repeat=\\\\\\\"value in getSelectedValues()\\\\\\\" style=\\\\\\\"width: 100%;\\\\\\\">\\\\n <span style=\\\\\\\"position: absolute; display: inline-block; top: 7px; width: 24px; height: 24px;\\\\\\\" ng-style=\\\\\\\"{ 'background-color': getSwatchColor($index) }\\\\\\\"></span>\\\\n <span style=\\\\\\\"padding-left: 32px; display: inline-block; width: 100%; box-sizing: border-box;\\\\\\\">\\\\n {{ value }}\\\\n </span>\\\\n <button class=\\\\\\\"coral-Draggable-removeButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\"\\\\n ng-click=\\\\\\\"deselectValue(value)\\\\\\\" ng-show=\\\\\\\"selectionType === 'picked'\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--close coral-Icon--sizeXS\\\\\\\"></i>\\\\n </button>\\\\n </li>\\\\n <li class=\\\\\\\"totem-dv-Dimension coral-Dropzone\\\\\\\"\\\\n ad-drag-drop=\\\\\\\"selectValue($draggableModel)\\\\\\\"\\\\n ng-show=\\\\\\\"selectionType === 'picked'\\\\\\\">Add Value</li>\\\\n </ul>\\\\n <ul class=\\\\\\\"u-totem-noPadding u-totem-noMargin\\\\\\\">\\\\n <li class=\\\\\\\"coral-Draggable coral-Draggable--noThumb\\\\\\\" style=\\\\\\\"width: 250px;\\\\\\\">\\\\n <span style=\\\\\\\"position: absolute; display: inline-block; top: 50%; transform: translateY(-50%); width: 24px; height: 24px;\\\\\\\" ng-style=\\\\\\\"{ 'background-color': allOthersColor }\\\\\\\"></span>\\\\n <span style=\\\\\\\"padding-left: 32px; display: inline-block; width: 100%; box-sizing: border-box;\\\\\\\">\\\\n All others\\\\n </span>\\\\n <label class=\\\\\\\"coral-Switch\\\\\\\" style=\\\\\\\"position: absolute; top: 0; right: 14px\\\\\\\">\\\\n <input class=\\\\\\\"coral-Switch-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\">\\\\n <span class=\\\\\\\"coral-Switch-offLabel\\\\\\\">Off</span><span class=\\\\\\\"coral-Switch-onLabel\\\\\\\">On</span>\\\\n </label>\\\\n </li>\\\\n </ul>\\\\n </div>\\\\n </div>\\\\n </span>\\\\n <div template class=\\\\\\\"coral-Modal\\\\\\\">\\\\n <div class=\\\\\\\"coral-Modal-header\\\\\\\">\\\\n <i class=\\\\\\\"coral-Modal-typeIcon coral-Icon coral-Icon--sizeS\\\\\\\"></i>\\\\n <h2 class=\\\\\\\"coral-Modal-title coral-Heading coral-Heading--2\\\\\\\"></h2>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-MinimalButton coral-Modal-closeButton\\\\\\\" title=\\\\\\\"{{ 'cancel' | i18n }}\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--sizeXS coral-Icon--close coral-MinimalButton-icon \\\\\\\"></i>\\\\n </button>\\\\n </div>\\\\n <div class=\\\\\\\"coral-Modal-body\\\\\\\"></div>\\\\n <div class=\\\\\\\"coral-Modal-footer\\\\\\\">\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--quiet\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\">Cancel</button>\\\\n <button type=\\\\\\\"button\\\\\\\" class=\\\\\\\"coral-Button coral-Button--primary\\\\\\\" data-dismiss=\\\\\\\"modal\\\\\\\" ng-click=\\\\\\\"save()\\\\\\\">Save</button>\\\\n </div>\\\\n </div>\\\\n</cui-modal>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/directives/variable-configuration.tpl.html\\n ** module id = 123\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<ul class=\\\\\\\"u-totem-noPadding\\\\\\\">\\\\n <li class=\\\\\\\"totem-dv-Dimension coral-Draggable coral-Draggable--removable\\\\\\\" ng-repeat=\\\\\\\"dimension in dimensions\\\\\\\">\\\\n <span class=\\\\\\\"totem-dv-Dimension-itemIcon coral-Icon coral-Icon--sizeS\\\\\\\" ng-class=\\\\\\\"{ 'coral-Icon--calculator': dimension.type=='metric', 'coral-Icon--dimension': dimension.type=='variable' || dimension.type=='derived', 'coral-Icon--clock': dimension.type=='time' }\\\\\\\"></span>\\\\n <span class=\\\\\\\"totem-dv-Dimension-itemLabel\\\\\\\">\\\\n {{ dimension.name }}\\\\n </span>\\\\n <button class=\\\\\\\"coral-Draggable-removeButton coral-Button coral-Button--square coral-Button--quiet\\\\\\\"\\\\n ng-click=\\\\\\\"removeDimension({dimension: dimension})\\\\\\\" ng-if=\\\\\\\"dropzoneLabel\\\\\\\">\\\\n <i class=\\\\\\\"coral-Icon coral-Icon--close coral-Icon--sizeXS\\\\\\\"></i>\\\\n </button>\\\\n </li>\\\\n <li class=\\\\\\\"totem-dv-Dimension coral-Dropzone\\\\\\\" ng-if=\\\\\\\"dropzoneLabel\\\\\\\"\\\\n ad-drag-enter=\\\\\\\"enterDimension({event: $event, dimension: $draggableModel})\\\\\\\"\\\\n ad-drag-drop=\\\\\\\"dropDimension({dimension: $draggableModel})\\\\\\\">{{ dropzoneLabel }}</li>\\\\n</ul>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/directives/dimension-pod.tpl.html\\n ** module id = 124\\n ** module chunks = 0\\n **/\",\"var FILTER_TYPE = Object.freeze({\\n RANKED: 'ranked',\\n PICKED: 'picked'\\n});\\n\\nmodule.exports = FILTER_TYPE;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/enum/filter-type.js\\n ** module id = 125\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar DIMENSION_TYPE = require('../../../enum/dimension-type'),\\n FILTER_TYPE = require('../../../enum/filter-type');\\n\\nvar getQueryFromSource = function(source) {\\n // rawData is technically is the data and not the query, but it basically the same structure and info\\n // as the query...plus the data.\\n return source.rawData ? source.rawData : source.query;\\n};\\n\\n/**\\n * Determines the unique data stores present on a query. That information is used to pull the dimension\\n * metadata from Reporting Services. This metadata will be used to add information to the raw dimension\\n * object in the query that doesn't have sufficient metadata.\\n * @param {DataSourcesService} dataSourcesService A service to pull the proper dimension metadata\\n * @param {Object} query The raw Reporting Services query\\n * @return {Promise} Asynchronous promise\\n */\\nvar getDimensionMetadataFromConfig = function(dataSourcesService, query) {\\n var uniqueDataStores = [];\\n query.filters.forEach(function(filter) {\\n var dataStore = filter.data_store;\\n if (uniqueDataStores.indexOf(dataStore) < 0) {\\n uniqueDataStores.push(dataStore);\\n }\\n });\\n\\n // Select the first data store that we run across as the default whose metrics/variables we'll load.\\n if (uniqueDataStores.length) {\\n var defaultDataSource = uniqueDataStores[0];\\n dataSourcesService.getDataSources()\\n .then(function(dataSources) {\\n for (var i = 0; i < dataSources.length; i++) {\\n var dataSource = dataSources[i];\\n if (defaultDataSource === dataSource.resourceUrn) {\\n dataSourcesService.currentDataSource = dataSource;\\n }\\n }\\n });\\n }\\n\\n return dataSourcesService.getDimensionsByDataSources(uniqueDataStores);\\n};\\n\\n/**\\n * Determines what the pretty name of a dimension will be.\\n * @param {Array} dimensions An array of dimension objects from Reporting Services that contain pretty names and other metadata\\n * @param {String} dimensionId The id of the dimension we are looking for that exists in the query\\n * @param {DIMENSION_TYPE} dimensionType The type of dimension we are looking for (metric, variable)\\n * @return {String} The pretty name of the dimension\\n */\\nvar getDimensionName = function(dimensions, dimensionId, dimensionType) {\\n var dimensionsOfType = dimensions[dimensionType];\\n for (var i = 0; i < dimensionsOfType.length; i++) {\\n var dimension = dimensionsOfType[i];\\n if (dimension.id === dimensionId) {\\n return dimension.name;\\n }\\n }\\n throw new Error('Didn\\\\'t find a name for a dimension in the query');\\n};\\n\\nvar getRefIdDimensionMap = function(query, dimensionsByDataStore, assignUrn) {\\n var dimensionByRefId = {};\\n var type, name, dataStore;\\n\\n query.metrics.forEach(function(metric) {\\n if (metric.hasOwnProperty('ref_id')) {\\n // When the query we're inspecting is actually coming from raw data, the metric's filter reference attribute is\\n // \\\"filter_ref\\\" whereas if it's a normal query it's \\\"filters\\\". This is an unfortunate disparity that may eventually\\n // get normalized in a later Reporting Services version.\\n var filterRefAttr = metric.hasOwnProperty('filters') ? 'filters' : 'filter_ref';\\n dataStore = query.filters[metric[filterRefAttr][0]].data_store;\\n type = DIMENSION_TYPE.METRIC;\\n name = getDimensionName(dimensionsByDataStore[dataStore], metric.id, type);\\n\\n dimensionByRefId[metric.ref_id] = assignUrn({\\n type: type,\\n id: metric.id,\\n name: name,\\n dataStore: dataStore\\n });\\n }\\n });\\n\\n query.filters.forEach(function(filter) {\\n if (filter.ref_id && filter.filter_def) {\\n var filterDef = filter.filter_def[0];\\n dataStore = filter.data_store;\\n type = DIMENSION_TYPE.VARIABLE;\\n name = getDimensionName(dimensionsByDataStore[dataStore], filterDef.var, type);\\n\\n dimensionByRefId[filter.ref_id] = assignUrn({\\n type: type,\\n id: filterDef.var,\\n name: name,\\n dataStore: dataStore,\\n filter: {\\n type: FILTER_TYPE.RANKED,\\n count: 5\\n }\\n });\\n }\\n });\\n\\n if (query.dates.length) {\\n var date = query.dates[0];\\n\\n if (date.hasOwnProperty('ref_id')) {\\n dimensionByRefId[date.ref_id] = assignUrn({\\n type: DIMENSION_TYPE.TIME,\\n name: date.gran,\\n granularity: date.gran\\n });\\n }\\n }\\n\\n return dimensionByRefId;\\n};\\n\\nmodule.exports = function(source, dataSourcesService) {\\n var query = getQueryFromSource(source);\\n if (query) {\\n return getDimensionMetadataFromConfig(dataSourcesService, query)\\n .then(function(dimensionsByDataStore) {\\n return getRefIdDimensionMap(query, dimensionsByDataStore, dataSourcesService.assignDimensionUrn);\\n });\\n }\\n return null;\\n};\\n\\n\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/adapters/rs/query-reader.js\\n ** module id = 126\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar DIMENSION_TYPE = require('../../../enum/dimension-type'),\\n FILTER_TYPE = require('../../../enum/filter-type');\\n\\nmodule.exports = function(dimensionByRefId) {\\n var query = {\\n metrics: [],\\n filters: [],\\n dates: []\\n };\\n\\n var filterIndex = 0;\\n var filterIndices = [];\\n var refId;\\n var dimension;\\n\\n // Create the filters first and apply them to metrics later\\n for (refId in dimensionByRefId) {\\n dimension = dimensionByRefId[refId];\\n var filter = dimension.filter;\\n if (filter) {\\n switch (filter.type) {\\n case FILTER_TYPE.RANKED:\\n query.filters.push({\\n ref_id: refId,\\n data_store: dimension.dataStore,\\n filter_def: [{\\n var: dimension.id,\\n op: 'select',\\n val: {\\n order: [0], // TODO: What metric the results should be ordered by.\\n limit: [1, filter.count]\\n }\\n }]\\n });\\n break;\\n case FILTER_TYPE.PICKED:\\n var pickIds = filter.pickIds;\\n for (var i = 0; i < pickIds.length; i++) {\\n var id = pickIds[i];\\n query.filters.push({\\n ref_id: refId,\\n data_store: filter.dataStore,\\n filter_def: [{\\n var: filter.variableId,\\n op: 'id',\\n val: id\\n }]\\n });\\n }\\n break;\\n }\\n\\n filterIndices.push(filterIndex++);\\n }\\n }\\n\\n for (refId in dimensionByRefId) {\\n dimension = dimensionByRefId[refId];\\n switch (dimension.type) {\\n case DIMENSION_TYPE.METRIC:\\n // Handle the case of no filters that have been defined\\n // This should only run on the first encountered metric\\n if (!filterIndices.length) {\\n query.filters.push({\\n data_store: dimension.dataStore\\n });\\n filterIndices.push(0);\\n }\\n\\n query.metrics.push({\\n ref_id: refId,\\n id: dimension.id,\\n filters: filterIndices,\\n dates: [0]\\n });\\n break;\\n case DIMENSION_TYPE.TIME:\\n query.dates.push({\\n ref_id: refId,\\n start: '2014/01/01',\\n end: '2014/07/30',\\n gran: 'week'\\n });\\n break;\\n }\\n }\\n\\n return {\\n version: '0.5',\\n query: query\\n };\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/adapters/rs/query-writer.js\\n ** module id = 127\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = function($http, $q, $timeout) {\\n return function(variableId, sortMetricId, startIndex, count) {\\n // TODO: Swap with real endpoint.\\n\\n var deferred = $q.defer();\\n\\n $timeout(function() {\\n var results = [];\\n\\n for (var i = startIndex; i < startIndex + count; i++) {\\n results.push('Value ' + i);\\n }\\n\\n deferred.resolve(results);\\n }, 2000);\\n\\n return deferred.promise;\\n };\\n};\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments/dv/editor/adapters/rs/value-loader.js\\n ** module id = 128\\n ** module chunks = 0\\n **/\"],\"sourceRoot\":\"\",\"file\":\"totem.min.js\"}\n\n/Users/nross/Work/javascript/totem/client/instruments/dv/editor/adapters/rs/query-reader.js:\n 14 * metadata from Reporting Services. This metadata will be used to add information to the raw dimension\n 15 * object in the query that doesn't have sufficient metadata.\n 16: * @param {DataSourcesService} dataSourcesService A service to pull the proper dimension metadata\n 17 * @param {Object} query The raw Reporting Services query\n 18 * @return {Promise} Asynchronous promise\n 19 */\n 20: var getDimensionMetadataFromConfig = function(dataSourcesService, query) {\n 21 var uniqueDataStores = [];\n 22 query.filters.forEach(function(filter) {\n ..\n 30 if (uniqueDataStores.length) {\n 31 var defaultDataSource = uniqueDataStores[0];\n 32: dataSourcesService.getDataSources()\n 33 .then(function(dataSources) {\n 34 for (var i = 0; i < dataSources.length; i++) {\n 35 var dataSource = dataSources[i];\n 36 if (defaultDataSource === dataSource.resourceUrn) {\n 37: dataSourcesService.currentDataSource = dataSource;\n 38 }\n 39 }\n ..\n 41 }\n 42 \n 43: return dataSourcesService.getDimensionsByDataSources(uniqueDataStores);\n 44 };\n 45 \n ..\n 120 };\n 121 \n 122: module.exports = function(source, dataSourcesService) {\n 123 var query = getQueryFromSource(source);\n 124 if (query) {\n 125: return getDimensionMetadataFromConfig(dataSourcesService, query)\n 126 .then(function(dimensionsByDataStore) {\n 127: return getRefIdDimensionMap(query, dimensionsByDataStore, dataSourcesService.assignDimensionUrn);\n 128 });\n 129 }\n\n/Users/nross/Work/javascript/totem/client/instruments/dv/editor/controllers/data-panel-ctrl.js:\n 21 \n 22 $scope.$watch(function() {\n 23: return dataSourcesService.getCurrentDataSource();\n 24 }, function(currentDataSource) {\n 25 if (currentDataSource) {\n\n/Users/nross/Work/javascript/totem/client/instruments/dv/editor/controllers/line-ctrl.js:\n 348 };\n 349 \n 350: module.exports = function($scope, $q, dataSourcesService, aestheticDefaults, dvConfigService, rsDataAdapter) {\n 351 $scope.dimensionsByAesthetic = {};\n 352 $scope.instrument.config = $scope.instrument.config || dvConfigService.createConfig();\n ...\n 355 if ($scope.instrument.config) {\n 356 // Wrap the result in a promise if it didn't return one.\n 357: $q.when(rsDataAdapter.readQuery($scope.instrument.config.source, dataSourcesService))\n 358 .then(function(dimensionByRefId) {\n 359 dimensionByRefId = dimensionByRefId || {};\n 360: var aestheticMappings = getAestheticMappings($scope.instrument.config, dimensionByRefId, dataSourcesService.assignDimensionUrn);\n 361 $scope.dimensionsByAesthetic = aestheticMappings.dimensionsByAesthetic;\n 362 $scope.constantByAesthetic = aestheticMappings.constantByAesthetic;\n\n/Users/nross/Work/javascript/totem/client/instruments/dv/editor/editor.js:\n 8 ])\n 9 .service('rsDataAdapter', require('./adapters/rs/adapter'))\n 10: .service('dataSourcesService', require('./services/data-sources-service'))\n 11 .service('dvConfigService', require('./services/dv-config-service'))\n 12 .constant('aestheticDefaults', require('./services/aesthetic-defaults'))\n\n52 matches across 6 files\n\n\nSearching 220 files for \"dataSourcesService\"\n\n/Users/nross/Work/javascript/totem/client/dist/scripts/totem.min.js:\n 5074 ])\n 5075 .service('rsDataAdapter', __webpack_require__(116))\n 5076: .service('dataSourcesService', __webpack_require__(107))\n 5077 .service('dvConfigService', __webpack_require__(108))\n 5078 .constant('aestheticDefaults', __webpack_require__(109))\n ....\n 6612 'use strict';\n 6613 \n 6614: module.exports = function($scope, $q, dataSourcesService) {\n 6615 var ignorablePromise;\n 6616 \n ....\n 6619 $scope.variables = [];\n 6620 \n 6621: dataSourcesService.getDataSources().then(function(dataSources) {\n 6622 $scope.dataSources = dataSources;\n 6623 \n 6624 if ($scope.dataSources && $scope.dataSources.length) {\n 6625: dataSourcesService.currentDataSource = $scope.dataSources[0];\n 6626 }\n 6627 });\n 6628 \n 6629 $scope.dataSourceChange = function() {\n 6630: dataSourcesService.currentDataSource = $scope.selectedDataSource;\n 6631 };\n 6632 \n 6633 $scope.$watch(function() {\n 6634: return dataSourcesService.currentDataSource;\n 6635 }, function(currentDataSource) {\n 6636 if (currentDataSource) {\n ....\n 6639 ignorablePromise.ignore();\n 6640 }\n 6641: ignorablePromise = dataSourcesService.getDimensionsByDataSource(currentDataSource.resourceUrn);\n 6642 ignorablePromise = $q.when(ignorablePromise).ignorify();\n 6643 ignorablePromise.then(function(dataSource) {\n ....\n 7008 };\n 7009 \n 7010: module.exports = function($scope, $q, dataSourcesService, aestheticDefaults, dvConfigService, rsDataAdapter) {\n 7011 $scope.dimensionsByAesthetic = {};\n 7012 $scope.instrument.config = $scope.instrument.config || dvConfigService.createConfig();\n ....\n 7015 if ($scope.instrument.config) {\n 7016 // Wrap the result in a promise if it didn't return one.\n 7017: $q.when(rsDataAdapter.readQuery($scope.instrument.config.source, dataSourcesService))\n 7018 .then(function(dimensionByRefId) {\n 7019 dimensionByRefId = dimensionByRefId || {};\n 7020: var aestheticMappings = getAestheticMappings($scope.instrument.config, dimensionByRefId, dataSourcesService.assignDimensionUrn);\n 7021 $scope.dimensionsByAesthetic = aestheticMappings.dimensionsByAesthetic;\n 7022 $scope.constantByAesthetic = aestheticMappings.constantByAesthetic;\n ....\n 7262 * metadata from Reporting Services. This metadata will be used to add information to the raw dimension\n 7263 * object in the query that doesn't have sufficient metadata.\n 7264: * @param {DataSourcesService} dataSourcesService A service to pull the proper dimension metadata\n 7265 * @param {Object} query The raw Reporting Services query\n 7266 * @return {Promise} Asynchronous promise\n 7267 */\n 7268: var getDimensionMetadataFromConfig = function(dataSourcesService, query) {\n 7269 var uniqueDataStores = [];\n 7270 query.filters.forEach(function(filter) {\n ....\n 7278 if (uniqueDataStores.length) {\n 7279 var defaultDataSource = uniqueDataStores[0];\n 7280: dataSourcesService.getDataSources()\n 7281 .then(function(dataSources) {\n 7282 for (var i = 0; i < dataSources.length; i++) {\n 7283 var dataSource = dataSources[i];\n 7284 if (defaultDataSource === dataSource.resourceUrn) {\n 7285: dataSourcesService.currentDataSource = dataSource;\n 7286 }\n 7287 }\n ....\n 7289 }\n 7290 \n 7291: return dataSourcesService.getDimensionsByDataSources(uniqueDataStores);\n 7292 };\n 7293 \n ....\n 7368 };\n 7369 \n 7370: module.exports = function(source, dataSourcesService) {\n 7371 var query = getQueryFromSource(source);\n 7372 if (query) {\n 7373: return getDimensionMetadataFromConfig(dataSourcesService, query)\n 7374 .then(function(dimensionsByDataStore) {\n 7375: return getRefIdDimensionMap(query, dimensionsByDataStore, dataSourcesService.assignDimensionUrn);\n 7376 });\n 7377 }\n\n/Users/nross/Work/javascript/totem/client/dist/scripts/totem.min.js.map:\n 1: {\"version\":3,\"sources\":[\"webpack:///webpack/bootstrap 6c4786d82bd4d974f2e9\",\"webpack:///./client/scripts/main.js\",\"webpack:///./client/instruments ^\\\\.\\\\/.*(\\\\/editor\\\\/editor|\\\\/renderer\\\\/renderer)$\",\"webpack:///./client/scripts/manage/controllers/manage-ctrl.js\",\"webpack:///./client/scripts/ad-hoc/controllers/ad-hoc-manage-ctrl.js\",\"webpack:///./client/scripts/ad-hoc/controllers/collection-ctrl.js\",\"webpack:///./client/scripts/ad-hoc/controllers/validate-upload-ctrl.js\",\"webpack:///./client/scripts/dashboard/controllers/dashboard-ctrl.js\",\"webpack:///./client/scripts/instrument/controllers/instrument-ctrl.js\",\"webpack:///./client/scripts/common/filters/i18n.js\",\"webpack:///./client/scripts/common/services/post-message.js\",\"webpack:///./client/scripts/common/services/q-all-settled.js\",\"webpack:///./client/scripts/common/services/q-ignorify.js\",\"webpack:///./client/scripts/common/services/exception-handler.js\",\"webpack:///./client/scripts/common/services/sso.js\",\"webpack:///./client/scripts/common/directives/app.js\",\"webpack:///./client/scripts/common/services/dashboard-service.js\",\"webpack:///./client/scripts/common/services/tag-service.js\",\"webpack:///./client/scripts/common/services/tag-enum.js\",\"webpack:///./client/scripts/common/directives/selection-table.js\",\"webpack:///./client/scripts/common/directives/sort-header.js\",\"webpack:///./client/scripts/common/services/ad-hoc-service.js\",\"webpack:///./client/scripts/common/directives/name-editor.js\",\"webpack:///./client/scripts/common/services/dashboard-workspace.js\",\"webpack:///./client/scripts/common/directives/alert.js\",\"webpack:///./client/scripts/common/directives/modal-progress-indicator.js\",\"webpack:///./client/scripts/manage/directives/manage-toolbar.js\",\"webpack:///./client/scripts/manage/directives/dashboard-search.js\",\"webpack:///./client/scripts/manage/views/manage.tpl.html\",\"webpack:///./client/scripts/ad-hoc/views/ad-hoc.tpl.html\",\"webpack:///./client/scripts/ad-hoc/views/collection.tpl.html\",\"webpack:///./client/scripts/ad-hoc/views/validate-upload.tpl.html\",\"webpack:///./client/scripts/dashboard/views/dashboard.tpl.html\",\"webpack:///./client/scripts/instrument/views/instrument.tpl.html\",\"webpack:///./client/scripts/instrument/views/render-instrument.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-manage-toolbar.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-search.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-capacity.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-data-upload.js\",\"webpack:///./client/scripts/dashboard/directives/dashboard-canvas.js\",\"webpack:///./client/scripts/dashboard/directives/dashboard-rail.js\",\"webpack:///./client/scripts/dashboard/directives/responsive-evaluator.js\",\"webpack:///./client/scripts/dashboard/directives/dashboard-instrument-chrome.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-track.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-menu.js\",\"webpack:///./client/scripts/dashboard/directives/ruler.js\",\"webpack:///./client/scripts/instrument/directives/instrument.js\",\"webpack:///./client/scripts/instrument/directives/new-instrument-configuration.js\",\"webpack:///./client/scripts/instrument/directives/instrument-editor-bootstrap.js\",\"webpack:///./client/scripts/dashboard/services/event-bus.js\",\"webpack:///./client/scripts/instrument/services/instrument-event-bus.js\",\"webpack:///./client/scripts/common/directives/app.tpl.html\",\"webpack:///./client/scripts/common/services/uuid.js\",\"webpack:///./client/scripts/common/services/dashboard-mixin.js\",\"webpack:///./client/scripts/common/services/sequence.js\",\"webpack:///./client/scripts/common/services/participable-mixin.js\",\"webpack:///./client/instruments ^\\\\.\\\\/.*\\\\/renderer\\\\/renderer$\",\"webpack:///./client/instruments ^\\\\.\\\\/.*\\\\/editor\\\\/editor$\",\"webpack:///./client/scripts/common/directives/steal-focus.js\",\"webpack:///./client/scripts/common/directives/name-editor.tpl.html\",\"webpack:///./client/scripts/common/directives/alert.tpl.html\",\"webpack:///./client/scripts/common/directives/modal-progress-indicator.tpl.html\",\"webpack:///./client/scripts/common/directives/share.js\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-file-upload.js\",\"webpack:///./client/scripts/common/services/debounce.js\",\"webpack:///./client/scripts/common/directives/draggable.js\",\"webpack:///./client/scripts/common/directives/resizeable.js\",\"webpack:///./client/scripts/common/directives/tap.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-range.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-rename-popover.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-delete-popover.js\",\"webpack:///./client/scripts/manage/directives/dashboard-search.tpl.html\",\"webpack:///./client/scripts/manage/directives/manage-toolbar.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-search.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-capacity.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-manage-toolbar.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-data-upload.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/dashboard-canvas.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/dashboard-instrument-chrome.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/dashboard-rail.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-track.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-menu.tpl.html\",\"webpack:///./client/scripts/instrument/directives/instrument.tpl.html\",\"webpack:///./client/scripts/instrument/directives/new-instrument-configuration.tpl.html\",\"webpack:///./common/dashboard-util.js\",\"webpack:///./client/instruments/demo-html/renderer/renderer.js\",\"webpack:///./client/instruments/dv/editor/editor.js\",\"webpack:///./client/instruments/dv/renderer/renderer.js\",\"webpack:///./client/instruments/key-metric/renderer/renderer.js\",\"webpack:///./client/instruments/starfield/renderer/renderer.js\",\"webpack:///./client/instruments/text/editor/editor.js\",\"webpack:///./client/instruments/text/renderer/renderer.js\",\"webpack:///./client/instruments/twitter-trends/renderer/renderer.js\",\"webpack:///./client/scripts/common/directives/invalid-share-action-alert.js\",\"webpack:///./client/scripts/common/directives/user-search.js\",\"webpack:///./client/scripts/common/directives/share.tpl.html\",\"webpack:///./client/scripts/ad-hoc/directives/ad-hoc-file-upload.tpl.html\",\"webpack:///./client/scripts/common/services/drag-resize-util.js\",\"webpack:///./client/scripts/common/services/auto-scroll.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-range.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-popover.js\",\"webpack:///./client/scripts/dashboard/directives/media-definition-rename-popover.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-delete-popover.tpl.html\",\"webpack:///./client/instruments/dv/editor/editor.html\",\"webpack:///./client/instruments/text/editor/editor.html\",\"webpack:///./client/instruments/text/editor/directives/quill.html\",\"webpack:///./client/instruments/text/editor/directives/quill-toolbar.html\",\"webpack:///./client/instruments/text/editor/directives/quill-editor.html\",\"webpack:///./client/instruments/dv/editor/services/data-sources-service.js\",\"webpack:///./client/instruments/dv/editor/services/dv-config-service.js\",\"webpack:///./client/instruments/dv/editor/services/aesthetic-defaults.js\",\"webpack:///./client/instruments/dv/editor/directives/y-aesthetic-configuration.js\",\"webpack:///./client/instruments/dv/editor/directives/variable-configuration.js\",\"webpack:///./client/instruments/dv/editor/directives/dimension-pod.js\",\"webpack:///./client/instruments/dv/editor/controllers/data-panel-ctrl.js\",\"webpack:///./client/instruments/dv/editor/controllers/line-ctrl.js\",\"webpack:///./client/instruments/dv/enum/melt-column.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/adapter.js\",\"webpack:///./client/scripts/common/directives/invalid-share-action-alert.tpl.html\",\"webpack:///./client/scripts/common/services/user-service.js\",\"webpack:///./client/scripts/common/directives/user-search.tpl.html\",\"webpack:///./client/scripts/dashboard/directives/media-definition-popover.tpl.html\",\"webpack:///./client/instruments/dv/enum/dimension-type.js\",\"webpack:///./client/instruments/dv/editor/directives/y-aesthetic-configuration.tpl.html\",\"webpack:///./client/instruments/dv/editor/directives/variable-configuration.tpl.html\",\"webpack:///./client/instruments/dv/editor/directives/dimension-pod.tpl.html\",\"webpack:///./client/instruments/dv/enum/filter-type.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/query-reader.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/query-writer.js\",\"webpack:///./client/instruments/dv/editor/adapters/rs/value-loader.js\"],\"names\":[],\"mappings\":\";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wC;;;;;;;ACtCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA0B,YAAY,aAAa,aAAa;AAChE;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA,2BAA0B,YAAY,aAAa,aAAa;AAChE;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA,eAAc;AACd,MAAK;AACL,IAAG;AACH;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,yCAAwC,gEAAgE;AACxG;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,gBAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;;;;;;AChFH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;;;;;;AC1CH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC,2EAA2E;AAC3G;AACA,UAAS;AACT;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,wCAAwC;AACvE;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA,IAAG;;;;;;;ACjFH;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO,qDAAqD;AAC5D,QAAO,qDAAqD;AAC5D,QAAO,wDAAwD;AAC/D,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,mBAAkB,8BAA8B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAkB,4BAA4B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,mBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA,IAAG;;;;;;;ACrHH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;AACL;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACrHH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,sCAAqC,uCAAuC;AAC5E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,IAAG;;;;;;;AC9DH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,qDAAoD;AACpD;AACA,6DAA4D;AAC5D;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACjBH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC/DH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB,YAAW;AACX,qBAAoB;AACpB,YAAW;AACX,UAAS;AACT;AACA;AACA,MAAK;AACL,IAAG;;;;;;;ACtBH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAK;AACL,IAAG;;;;;;;ACpEH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;;;;;;;ACzBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AC5BD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACXH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;;AAEP;AACA;;AAEA;AACA,sBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACrSH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC7FH;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACJH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACxDH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC9BH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACraH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACbH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,wBAAuB,iCAAiC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA,iBAAgB,0BAA0B,EAAE;AAC5C,iBAAgB,qBAAqB,EAAE;AACvC,iBAAgB,gCAAgC;AAChD;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;;;AAGH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA,EAAC;;;;;;;AC5GD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC1BH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACzBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;;AAEA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb,YAAW;;AAEX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,qCAAqC;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,IAAG;;;;;;;ACpNH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACjBH,2/BAA0/B,iBAAiB,yUAAyU,mBAAmB,wVAAwV,oBAAoB,wUAAwU,kBAAkB,wQAAwQ,sBAAsB,kLAAkL,oBAAoB,+0BAA+0B,6IAA6I,uIAAuI,2BAA2B,MAAM,kBAAkB,2EAA2E,6CAA6C,mKAAmK,0CAA0C,qKAAqK,oBAAoB,wPAAwP,2CAA2C,uD;;;;;;ACAx8I,85BAA65B,iBAAiB,6RAA6R,sBAAsB,yPAAyP,uBAAuB,mRAAmR,oBAAoB,kUAAkU,qBAAqB,ysBAAysB,2BAA2B,MAAM,mBAAmB,UAAU,wBAAwB,kKAAkK,iBAAiB,sEAAsE,cAAc,sEAAsE,gCAAgC,qHAAqH,qBAAqB,gBAAgB,oBAAoB,sF;;;;;;ACAz6G,qHAAoH,8BAA8B,gLAAgL,mBAAmB,uNAAuN,iBAAiB,+8CAA+8C,iBAAiB,0OAA0O,wBAAwB,uWAAuW,uBAAuB,6RAA6R,0BAA0B,gRAAgR,qBAAqB,4HAA4H,yBAAyB,uHAAuH,oBAAoB,8HAA8H,uBAAuB,wHAAwH,qBAAqB,oUAAoU,oBAAoB,uOAAuO,gCAAgC,0SAA0S,qBAAqB,gBAAgB,oBAAoB,8PAA8P,mFAAmF,yQAAyQ,iDAAiD,qGAAqG,8BAA8B,qGAAqG,4BAA4B,6gB;;;;;;ACA5oL,kMAAiM,iCAAiC,qLAAqL,mBAAmB,iKAAiK,iBAAiB,kWAAkW,sBAAsB,gOAAgO,+BAA+B,mFAAmF,+BAA+B,+MAA+M,uBAAuB,kmBAAkmB,wCAAwC,oiBAAoiB,qCAAqC,sEAAsE,SAAS,2UAA2U,2BAA2B,qE;;;;;;ACAnrG,mbAAkb,mBAAmB,mIAAmI,iBAAiB,oYAAoY,+BAA+B,6JAA6J,2BAA2B,wIAAwI,iBAAiB,wJAAwJ,eAAe,+JAA+J,qBAAqB,4JAA4J,eAAe,2eAA2e,0BAA0B,sDAAsD,0FAA0F,0hB;;;;;;ACAx+E,yRAAwR,mBAAmB,wHAAwH,iBAAiB,uH;;;;;;ACApb,sQ;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA,YAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAAyB,sCAAsC;AAC/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,kBAAkB;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC1GH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACjBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,8BAA6B,eAAe;AAC5C;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;;AAEA;AACA,uDAAsD;AACtD;AACA,qDAAoD;AACpD;AACA,6B;AACA,uDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACpCH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;ACdD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAe;;AAEf,qDAAoD;AACpD,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA,uBAAsB,8CAA8C,EAAE;AACtE,uBAAsB,+CAA+C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;;AAEb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA2B,yBAAyB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,gBAAe;AACf;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC1OH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AClBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA,UAAS;;AAET;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACtFH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACpCH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAAyC;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC;AACzC,0CAAyC;AACzC,0CAAyC;;AAEzC;AACA;AACA;AACA,8BAA6B;;AAE7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC1MH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACnEH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,IAAG;;;;;;;AChCH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,cAAa;;AAEb;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AChGH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;AACA,IAAG;;;;;;;AC5CH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;;;;;;ACnDH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AChBH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,cAAc;AAC7B;AACA,gBAAe,cAAc;AAC7B;AACA,gBAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,0BAA0B;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB,gBAAe,SAAS;AACxB;AACA,gBAAe,cAAc;AAC7B;AACA,gBAAe,cAAc;AAC7B;AACA,gBAAe,OAAO;AACtB;AACA,kBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,cAAc;AAC7B,mBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA,IAAG;AACH;;;;;;;AClHA,sI;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;;;;;;ACTH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,0BAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,oBAAmB;AACnB;AACA;AACA,iEAAgE,gCAAgC,EAAE;AAClG,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0BAAyB,yBAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;;AAEA;;AAEA,wBAAuB,yBAAyB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;;AAET;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA,6CAA4C;AAC5C;AACA;;AAEA;AACA;;AAEA;AACA,QAAO;;AAEP;AACA;AACA,kBAAiB,OAAO;AACxB;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;;AAEA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,MAAM;AACvB;AACA;AACA,kBAAiB,MAAM;AACvB,kBAAiB,OAAO;AACxB;AACA;AACA,kBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;;AAEP;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,IAAG;;;;;;;AChSH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;;;;;;AChBH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,IAAG;;;;;;;ACtEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACvBH,gLAA+K,QAAQ,+S;;;;;;ACAvL,sEAAqE,0GAA0G,qVAAqV,QAAQ,kDAAkD,WAAW,iB;;;;;;ACAzkB,2EAA0E,sBAAsB,uF;;;;;;ACAhG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB,gBAAe;AACf,cAAa;AACb,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,+BAA8B,mCAAmC;AACjE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;;;;;;ACrIH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA,cAAa;AACb;AACA,cAAa;AACb,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC/DH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,EAAC;;;;;;;ACrBD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,+BAA8B,yBAAyB;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA,0CAAyC,yBAAyB;AAClE;;AAEA;AACA;AACA,kCAAiC,WAAW;AAC5C;;AAEA;AACA;AACA;AACA,YAAW;;AAEX;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kCAAiC,uBAAuB;AACxD;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;AACf,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC7JH;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAgC,wCAAwC;AACxE;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA,4CAA2C,wCAAwC;AACnF;;AAEA;AACA;AACA,oCAAmC,wCAAwC;AAC3E;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;AACf,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACnJH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACrBH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,IAAG;;;;;;;ACbH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,0BAAyB;;AAEzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAiC;AACjC;AACA,cAAa;AACb;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC3DH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;ACrCH,y/D;;;;;;ACAA,4iBAA2iB,mBAAmB,8jBAA8jB,kBAAkB,mTAAmT,iBAAiB,wTAAwT,sBAAsB,opCAAopC,2BAA2B,iTAAiT,iBAAiB,0VAA0V,mBAAmB,6OAA6O,gCAAgC,2BAA2B,sCAAsC,8UAA8U,mBAAmB,oVAAoV,iCAAiC,oJAAoJ,kCAAkC,6HAA6H,iCAAiC,2BAA2B,0BAA0B,8UAA8U,mBAAmB,oVAAoV,kCAAkC,2KAA2K,mCAAmC,gD;;;;;;ACAh9L,s+D;;;;;;ACAA,2FAA0F,8BAA8B,+IAA+I,gCAAgC,wGAAwG,uCAAuC,8B;;;;;;ACAtb,6iBAA4iB,mBAAmB,gSAAgS,gBAAgB,oTAAoT,iBAAiB,4VAA4V,mBAAmB,4TAA4T,kBAAkB,+OAA+O,yBAAyB,2BAA2B,+BAA+B,8UAA8U,mBAAmB,oVAAoV,mCAAmC,4KAA4K,oCAAoC,gD;;;;;;ACA3lG,oSAAmS,kCAAkC,4JAA4J,0CAA0C,+CAA+C,wCAAwC,+CAA+C,uCAAuC,+CAA+C,2CAA2C,+CAA+C,yCAAyC,6L;;;;;;ACA12B,oEAAmE,4CAA4C,w+BAAw+B,+BAA+B,uB;;;;;;ACAtnC,4HAA2H,2DAA2D,8BAA8B,oBAAoB,wyC;;;;;;ACAxO,oUAAmU,2BAA2B,yBAAyB,4CAA4C,KAAK,kBAAkB,wC;;;;;;ACA1b,k0CAAi0C,oS;;;;;;ACAj0C,2GAA0G,oCAAoC,+CAA+C,GAAG,qjBAAqjB,wBAAwB,qMAAqM,+BAA+B,2BAA2B,GAAG,ygBAAygB,iCAAiC,2BAA2B,GAAG,q5BAAq5B,+BAA+B,2C;;;;;;ACA3gF,kRAAiR,wEAAwE,wFAAwF,8BAA8B,iB;;;;;;ACA/c,8RAA6R,qKAAqK,8D;;;;;;ACAlc;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,KAAI;AACJ,IAAG;AACH;AACA,G;;;;;;AChCA;;AAEA;AACA;AACA;AACA;;;;;;;ACLA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACtBA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0BAAyB,kBAAkB;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA,YAAW;AACX;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;;AAEb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;;;;;;AC/QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACZA;AACA;AACA;AACA;AACA;;;;;;;ACJA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA,yBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,mBAAmB;AACvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAoC,mBAAmB;AACvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB,mCAAkC,uCAAuC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;ACrSA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,qBAAqB;AAC3D;AACA,sDAAqD,YAAY,kBAAkB,YAAY;AAC/F;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;;;;;;ACnCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,cAAa;;AAEb;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;ACpCH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kBAAiB;AACjB;AACA,kBAAiB;AACjB,gBAAe;AACf;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA,4BAA2B,kBAAkB;AAC7C;AACA;AACA,mCAAkC,WAAW;AAC7C;AACA;;AAEA,4BAA2B,mBAAmB;AAC9C;AACA;AACA,oCAAmC,aAAa;AAChD;AACA;;AAEA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AC5GH,qEAAoE,qBAAqB,yhDAAyhD,8BAA8B,wPAAwP,qCAAqC,sHAAsH,kCAAkC,sQAAsQ,uBAAuB,2UAA2U,qCAAqC,41BAA41B,mBAAmB,+dAA+d,mBAAmB,mIAAmI,iBAAiB,gD;;;;;;ACAvsI,gSAA+R,uBAAuB,0DAA0D,kBAAkB,kB;;;;;;ACAlY;AACA;AACA;;AAEA;AACA;AACA,gBAAe,MAAM;AACrB,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,MAAM;AACrB,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe,MAAM;AACrB,gBAAe,OAAO;AACtB,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe,MAAM;AACrB,gBAAe,OAAO;AACtB,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;;;;;;AC7DH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,OAAO;AACtB;AACA,gBAAe,OAAO;AACtB,gBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA,gBAAe,mBAAmB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA,IAAG;;;;;;;AC3GH,yEAAwE,iDAAiD,wDAAwD,QAAQ,iF;;;;;;ACAzL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,8CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA,kBAAiB;AACjB;;AAEA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;;;;;;AChEH,oUAAmU,yBAAyB,kTAAkT,mBAAmB,kIAAkI,kBAAkB,gE;;;;;;ACArzB,6SAA4S,wBAAwB,wLAAwL,mBAAmB,kIAAkI,mBAAmB,gE;;;;;;ACApqB,mmCAAkmC,eAAe,2cAA2c,iBAAiB,+3K;;;;;;ACA7kD,4G;;;;;;ACAA,uG;;;;;;ACAA,m8G;;;;;;ACAA,iC;;;;;;ACAA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,0DAAyD;AACzD;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;;AAEL;AACA;AACA;AACA,iBAAgB,MAAM;AACtB,iBAAgB,0BAA0B,mBAAmB,EAAE;AAC/D;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT,MAAK;;AAEL;;AAEA;AACA;;AAEA;;;;;;;ACxHA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAgB,OAAO;AACvB;AACA;AACA;AACA,mBAAkB;AAClB,2BAA0B;AAC1B;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC/BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AChBD;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;;;;;;ACZA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;;AAEb;;AAEA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;;;;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;;;;;ACbA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;;;;;AC1CA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,kCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;AACnB,qBAAoB;AACpB,kBAAiB;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA6B,kBAAkB;AAC/C;;AAEA,iCAAgC;AAChC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,wCAAwC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA0B;AAC1B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA,8DAA6D;;AAE7D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;;;;;;;;ACzcA;AACA;AACA;AACA,EAAC;;AAED;;;;;;;ACLA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACRA,+YAA8Y,WAAW,kB;;;;;;ACAzZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,IAAG;;;;;;;AC1BH,wZAAuZ,kCAAkC,kG;;;;;;ACAzb,sF;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED;;;;;;;ACPA,odAAmd,mBAAmB,+gB;;;;;;ACAte,qEAAoE,iBAAiB,q/BAAq/B,8fAA8f,eAAe,oGAAoG,iOAAiO,kGAAkG,2GAA2G,qBAAqB,SAAS,mGAAmG,oIAAoI,eAAe,oFAAoF,uDAAuD,kEAAkE,kDAAkD,uBAAuB,UAAU,aAAa,cAAc,eAAe,6CAA6C,yDAAyD,uBAAuB,aAAa,wBAAwB,qBAAqB,SAAS,8rBAA8rB,kDAAkD,uBAAuB,UAAU,6BAA6B,aAAa,cAAc,eAAe,qCAAqC,yDAAyD,uBAAuB,aAAa,wBAAwB,yHAAyH,QAAQ,qmBAAqmB,mBAAmB,6gB;;;;;;ACAlnJ,oQAAmQ,oLAAoL,uEAAuE,kBAAkB,6JAA6J,qBAAqB,gPAAgP,0CAA0C,yCAAyC,2BAA2B,MAAM,iBAAiB,e;;;;;;ACAvjC;AACA;AACA;AACA,EAAC;;AAED;;;;;;;ACLA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAY,mBAAmB;AAC/B,aAAY,OAAO;AACnB,aAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA,aAAY,MAAM;AAClB,aAAY,OAAO;AACnB,aAAY,eAAe;AAC3B,aAAY,OAAO;AACnB;AACA;AACA;AACA,kBAAiB,6BAA6B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;;;;;;;;AClIA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;AACA,0BAAyB,oBAAoB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC7FA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,+BAA8B,wBAAwB;AACtD;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA\",\"sourcesContent\":[\" \\t// The module cache\\n \\tvar installedModules = {};\\n\\n \\t// The require function\\n \\tfunction __webpack_require__(moduleId) {\\n\\n \\t\\t// Check if module is in cache\\n \\t\\tif(installedModules[moduleId])\\n \\t\\t\\treturn installedModules[moduleId].exports;\\n\\n \\t\\t// Create a new module (and put it into the cache)\\n \\t\\tvar module = installedModules[moduleId] = {\\n \\t\\t\\texports: {},\\n \\t\\t\\tid: moduleId,\\n \\t\\t\\tloaded: false\\n \\t\\t};\\n\\n \\t\\t// Execute the module function\\n \\t\\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\\n\\n \\t\\t// Flag the module as loaded\\n \\t\\tmodule.loaded = true;\\n\\n \\t\\t// Return the exports of the module\\n \\t\\treturn module.exports;\\n \\t}\\n\\n\\n \\t// expose the modules object (__webpack_modules__)\\n \\t__webpack_require__.m = modules;\\n\\n \\t// expose the module cache\\n \\t__webpack_require__.c = installedModules;\\n\\n \\t// __webpack_public_path__\\n \\t__webpack_require__.p = \\\"\\\";\\n\\n \\t// Load entry module and return exports\\n \\treturn __webpack_require__(0);\\n\\n\\n/** WEBPACK FOOTER **\\n ** webpack/bootstrap 6c4786d82bd4d974f2e9\\n **/\",\"'use strict';\\n/* global window: true */\\n\\nangular\\n .module('totem', [\\n 'ui.router',\\n 'ngCoral',\\n require('./manage/controllers/manage-ctrl').name,\\n require('./ad-hoc/controllers/ad-hoc-manage-ctrl').name,\\n require('./ad-hoc/controllers/collection-ctrl').name,\\n require('./ad-hoc/controllers/validate-upload-ctrl').name,\\n require('./dashboard/controllers/dashboard-ctrl').name,\\n require('./instrument/controllers/instrument-ctrl').name,\\n require('./common/filters/i18n').name,\\n require('./common/services/post-message').name,\\n require('./common/directives/app').name,\\n require('./common/services/q-all-settled').name,\\n require('./common/services/q-ignorify').name,\\n require('./common/services/exception-handler').name,\\n require('./common/services/sso').name\\n ])\\n .constant('gridSpacing', window.Totem ? window.Totem.config.gridSpacing : null)\\n .constant('user', window.Totem ? window.Totem.config.user : null)\\n .constant('minMediaDefinitionWidth', window.Totem ? window.Totem.config.minMediaDefinitionWidth : null)\\n .constant('minInstrumentWidth', window.Totem ? window.Totem.config.minInstrumentWidth : null)\\n .constant('minInstrumentHeight', window.Totem ? window.Totem.config.minInstrumentHeight : null)\\n .constant('duplicateInstrumentOffset', window.Totem ? window.Totem.config.duplicateInstrumentOffset : null)\\n .constant('ims', window.Totem ? window.Totem.config.ims : null)\\n .constant('env', window.Totem ? window.Totem.config.env : null)\\n .constant('externalServices', window.Totem ? window.Totem.config.externalServices : null)\\n .config(function(i18nBundleProvider, $controllerProvider, $compileProvider, $provide, $stateProvider, $urlRouterProvider, $httpProvider) {\\n i18nBundleProvider.bundle = window.i18n[window.Totem.config.locale];\\n\\n $stateProvider\\n .state('instrument', {\\n abstract: 'true',\\n url: '/dashboard/{dashboardId}/instrument/{instrumentId}',\\n template: require('./instrument/views/instrument.tpl.html'),\\n controller: 'InstrumentCtrl'\\n })\\n .state('instrument.edit', {\\n url: '/edit'\\n })\\n .state('renderInstrument', {\\n url: '/dashboard/{dashboardId}/instrument/{instrumentId}/render',\\n template: require('./instrument/views/render-instrument.tpl.html'),\\n controller: 'InstrumentCtrl'\\n })\\n .state('manage', {\\n url: '/dashboard/manage',\\n template: require('./manage/views/manage.tpl.html'),\\n controller: 'ManageCtrl'\\n })\\n .state('dashboard', {\\n abstract: true,\\n template: require('./dashboard/views/dashboard.tpl.html'),\\n controller: 'DashboardCtrl',\\n url: '/dashboard'\\n })\\n .state('dashboard.view', {\\n // If this dashboard ID param were on the parent \\\"dashboard\\\" state, it would reload the controller\\n // whenever going from viewing one dashboard to viewing another dashboard.\\n url: '/:dashboardId'\\n })\\n .state('dashboard.edit', {\\n // If this dashboard ID param were on the parent \\\"dashboard\\\" state, it would reload the controller\\n // whenever going from viewing one dashboard to viewing another dashboard.\\n url: '/:dashboardId/edit'\\n })\\n .state('ad-hoc',{\\n url: '/ad-hoc',\\n template: require('./ad-hoc/views/ad-hoc.tpl.html'),\\n controller: 'AdHocManageCtrl'\\n })\\n .state('collection', {\\n url:'/ad-hoc/:collectionId',\\n template: require('./ad-hoc/views/collection.tpl.html'),\\n controller: 'CollectionCtrl'\\n })\\n .state('validate', {\\n url:'/ad-hoc/validate/:pastebinId?collectionId',\\n template: require('./ad-hoc/views/validate-upload.tpl.html'),\\n controller: 'ValidateUploadCtrl'\\n });\\n\\n $urlRouterProvider.otherwise('dashboard/manage');\\n\\n $httpProvider.interceptors.push(function($q, sso) {\\n return {'request': sso.requestInterceptor.bind(sso)};\\n });\\n })\\n .run(function(postMessageService) {\\n // start the postMessage listeners.\\n postMessageService.listen();\\n })\\n;\\n\\n// Initialize instrument renderer and editor code. This should be done before the application is initialized since\\n// some of these instruments create angular directives, services, etc.\\nvar instrumentRequireContext = require.context('../instruments/', true, /^\\\\.\\\\/.*(\\\\/editor\\\\/editor|\\\\/renderer\\\\/renderer)$/);\\ninstrumentRequireContext.keys().forEach(instrumentRequireContext);\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/main.js\\n ** module id = 0\\n ** module chunks = 0\\n **/\",\"var map = {\\n\\t\\\"./demo-html/renderer/renderer\\\": 84,\\n\\t\\\"./dv/editor/editor\\\": 85,\\n\\t\\\"./dv/renderer/renderer\\\": 86,\\n\\t\\\"./key-metric/renderer/renderer\\\": 87,\\n\\t\\\"./starfield/renderer/renderer\\\": 88,\\n\\t\\\"./text/editor/editor\\\": 89,\\n\\t\\\"./text/renderer/renderer\\\": 90,\\n\\t\\\"./twitter-trends/renderer/renderer\\\": 91\\n};\\nfunction webpackContext(req) {\\n\\treturn __webpack_require__(webpackContextResolve(req));\\n};\\nfunction webpackContextResolve(req) {\\n\\treturn map[req] || (function() { throw new Error(\\\"Cannot find module '\\\" + req + \\\"'.\\\") }());\\n};\\nwebpackContext.keys = function webpackContextKeys() {\\n\\treturn Object.keys(map);\\n};\\nwebpackContext.resolve = webpackContextResolve;\\nmodule.exports = webpackContext;\\nwebpackContext.id = 1;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/instruments ^\\\\.\\\\/.*(\\\\/editor\\\\/editor|\\\\/renderer\\\\/renderer)$\\n ** module id = 1\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.ManageCtrl', [\\n require('../../common/services/dashboard-service').name,\\n require('../../common/services/tag-service').name,\\n require('../../common/services/tag-enum').name,\\n require('../../common/directives/selection-table').name,\\n require('../../common/directives/sort-header').name,\\n require('../directives/manage-toolbar').name,\\n require('../directives/dashboard-search').name,\\n require('../../common/services/post-message').name\\n ])\\n .controller('ManageCtrl', function($scope, dashboardService, tagService, tagEnum, i18nFilter, postMessageService) {\\n var postTitle = function() {\\n postMessageService.post('external.pageTitle', i18nFilter('manageDashboards'));\\n };\\n\\n postTitle();\\n dashboardService.query().then(function(dashboards) {\\n $scope.dashboards = dashboards;\\n });\\n $scope.selectedDashboards = [];\\n $scope.sortPredicate = 'name';\\n $scope.sortReverse = false;\\n\\n $scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\\n // If we switch states within manage, make sure the page title remains.\\n if (fromState.name === 'manage' && toState.name !== 'manage') {\\n postTitle();\\n }\\n });\\n\\n $scope.getPluralizedOwners = function(owners) {\\n return i18nFilter('ownersValue', { OWNER: owners[0].entity.displayName, NUM_OWNERS: owners.length});\\n };\\n\\n $scope.getOwners = function(dashboard) {\\n return dashboard.getOwners();\\n };\\n\\n $scope.getFirstOwnerName = function(dashboard) {\\n var owners = dashboard.getOwners();\\n if (owners.length) {\\n return owners[0].entity.displayName;\\n }\\n return '';\\n };\\n\\n $scope.setSort = function(predicate) {\\n if ($scope.sortPredicate === predicate) {\\n $scope.sortReverse = !$scope.sortReverse;\\n } else {\\n $scope.sortReverse = false;\\n }\\n $scope.sortPredicate = predicate;\\n };\\n\\n $scope.isDashboardFavorited = function(dashboard) {\\n return dashboard.getFavoriteTag() != null;\\n };\\n\\n $scope.toggleFavorite = function(dashboard) {\\n var tag = dashboard.getFavoriteTag();\\n if (tag) {\\n dashboard.removeTag(tag);\\n tagService.destroy(tag);\\n } else {\\n tag = {dashboardId: dashboard._id, tag: tagEnum.FAVORITE};\\n dashboard.tags.push(tag);\\n tagService.save(tag);\\n }\\n };\\n\\n $scope.getSortDirection = function(predicate) {\\n if (predicate === $scope.sortPredicate) {\\n return $scope.sortReverse ? 'descending' : 'ascending';\\n }\\n\\n return null;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/controllers/manage-ctrl.js\\n ** module id = 2\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.AdHocManageCtrl', [\\n require('../../common/services/ad-hoc-service').name,\\n require('../../common/directives/selection-table').name,\\n require('../../common/directives/sort-header').name,\\n require('../directives/ad-hoc-manage-toolbar').name,\\n require('../directives/ad-hoc-search').name,\\n require('../directives/ad-hoc-capacity').name\\n ])\\n .controller('AdHocManageCtrl', function($scope, adHocService) {\\n adHocService.getAll().then(function(response) {\\n $scope.adHocCollections = response;\\n });\\n $scope.selectedAdHocCollections = [];\\n $scope.sortPredicate = 'name';\\n $scope.sortReverse = false;\\n\\n // This is really only used for sorting. Technically, straight up rowCount could be used instead, but if two\\n // different columns (records and capacity) used rowCount as their sort predicate, the sort direction icon on both\\n // columns would be active (showing) when the user sorted either of the rows. We don't want that so we have to\\n // distinguish...and why not distinguish by created a function that provides a true capacity number?\\n $scope.getCapacity = function(collection) {\\n return collection.rowCount / collection.maxRows;\\n };\\n\\n $scope.setSort = function(predicate) {\\n if ($scope.sortPredicate === predicate) {\\n $scope.sortReverse = !$scope.sortReverse;\\n } else {\\n $scope.sortReverse = false;\\n }\\n $scope.sortPredicate = predicate;\\n };\\n\\n $scope.getSortDirection = function(predicate) {\\n if (predicate === $scope.sortPredicate) {\\n return $scope.sortReverse ? 'descending' : 'ascending';\\n }\\n\\n return null;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/controllers/ad-hoc-manage-ctrl.js\\n ** module id = 3\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.CollectionCtrl', [\\n require('../../common/services/ad-hoc-service').name,\\n require('../directives/ad-hoc-data-upload').name,\\n require('../directives/ad-hoc-capacity').name\\n ])\\n .controller('CollectionCtrl', function($scope, $stateParams, $state, adHocService, eventBus, i18nFilter) {\\n if ($stateParams.collectionId) {\\n adHocService.get($stateParams.collectionId).then(function(collection) {\\n $scope.collection = collection;\\n // make sure we set the current collection for state maintenance\\n adHocService.setCurrentCollection(collection);\\n });\\n } else {\\n if(!$scope.collection) {\\n $scope.collection = adHocService.getCurrentCollection();\\n }\\n }\\n\\n $scope.saveDisabled = false;\\n $scope.showDetails = false;\\n $scope.uploadFileName = null;\\n $scope.forceUploadVisibility = false;\\n\\n // saves collection meta-data\\n $scope.saveCollection = function() {\\n // save states\\n // 1) a file is uploaded and this is a new collection\\n // -> go to validate file and build directives for upload\\n // 2) a file is uploaded and this is an existing collection\\n // -> (validate) Use directives from existing collection\\n // 3) a file is not uploaded and this is an existing collection\\n // -> simply save the meta-data\\n // 4) if a file is not uploaded and this is not an existing collection then we are in a bad state and bail out\\n if(!$scope.collection) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionSaveError'));\\n return;\\n }\\n if($scope.collection.id) {\\n if($scope.uploadFileName) {\\n $state.go('validate',{pastebinId:$scope.collection.pastebinId, collectionId:$scope.collection.id});\\n return;\\n } else {\\n adHocService.saveMetaData({\\n name:$scope.collection.name,\\n description:$scope.collection.description\\n },$stateParams.collectionId).then(function() {\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n return;\\n });\\n }\\n } else {\\n if(!$scope.uploadFileName) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionSaveError'));\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n return;\\n }\\n if(!$scope.collection.pastebinId) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionSaveError'));\\n return;\\n }\\n $state.go('validate', {pastebinId:$scope.collection.pastebinId});\\n return;\\n }\\n };\\n\\n $scope.cancelEditing = function() {\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n };\\n\\n $scope.deleteUpload = function (collection, upload) {\\n adHocService.deleteUpload(collection, upload).then(function(result) {\\n // @todo: success message?\\n }, function(reason) {\\n console.log(reason);\\n });\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/controllers/collection-ctrl.js\\n ** module id = 4\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.ValidateUploadCtrl', [\\n require('../../common/services/ad-hoc-service').name\\n ])\\n .controller('ValidateUploadCtrl', function($scope, $stateParams, $state, adHocService, i18nFilter) {\\n $scope.columnOptions = new Array(\\n {label: i18nFilter('columnTypeText'), value:'string' },\\n {label: i18nFilter('columnTypeInteger'), value:'int' },\\n {label: i18nFilter('columnTypeDecimal'), value:'decimal'},\\n {label: i18nFilter('columnTypeDate'), value:'datetime'}\\n );\\n\\n $scope.selectedTypes = [];\\n $scope.saveDisabled = true;\\n $scope.schemaEditable = !$stateParams.collectionId;\\n\\n // if we don't have a pastebin ID go back to the upload screen, something wrong has happened\\n // we may have had a refresh, in which case we have lost context and need to go back to that\\n // screen anyways\\n var collection = adHocService.getCurrentCollection();\\n var pastebinId = $stateParams.pastebinId || collection.pastebinId;\\n if(!pastebinId) {\\n var params = {};\\n if($stateParams.collectionId) {\\n params.collectionId = $stateParams.collectionId;\\n }\\n $state.go('collection', params);\\n return;\\n }\\n\\n // do a test run on the pastebin data\\n adHocService.preRunFromPastebin(pastebinId, 20, $stateParams.collectionId).then( function(data) {\\n if(!data || data.status) {\\n $scope.uploadError = true;\\n if(data.status == 409) {\\n $scope.uploadErrorMessage = i18nFilter('fileUploadConflict');\\n } else {\\n $scope.uploadErrorMessage = i18nFilter('fileUploadFailure');\\n }\\n } else {\\n $scope.saveDisabled = false;\\n $scope.adHocSchema = data.schema;\\n $scope.adHocDirectives = data.directives;\\n $scope.adHocData = data.data;\\n\\n // I am unable to bind directly to my model for the select so I am creating a proxy\\n // the model will need to be updated from the proxy before uploading\\n for(var i=0;i<data.schema.length;i++) {\\n $scope.selectedTypes[i] = $scope.getSelectedType($scope.adHocSchema[i].type);\\n }\\n }\\n });\\n\\n $scope.getSelectedType = function(type) {\\n var option = $scope.columnOptions[0];\\n for(var i=0;i<$scope.columnOptions.length;i++) {\\n if($scope.columnOptions[i].value == type) {\\n option = $scope.columnOptions[i];\\n }\\n }\\n return option;\\n };\\n\\n $scope.cancelUpload = function() {\\n var params = {};\\n if($stateParams.collectionId) {\\n params.collectionId = $stateParams.collectionId;\\n }\\n $state.go('collection', params);\\n };\\n\\n $scope.saveCollection = function() {\\n // go through the selected types and update the actual model from our proxy object\\n for(var i=0;i<$scope.adHocSchema.length;i++) {\\n if($scope.selectedTypes[i] && $scope.selectedTypes[i].value) {\\n $scope.adHocSchema[i].type = $scope.selectedTypes[i].value;\\n }\\n }\\n var err = verifySchemaAndDirectives($scope.adHocDirectives, $scope.adHocSchema);\\n if(err == null) {\\n $scope.saveDisabled = true;\\n adHocService.createFromPastebin(pastebinId, $scope.adHocDirectives, $scope.adHocSchema, $stateParams.collectionId).then(function(data) {\\n if(!data) {\\n console.log('error processing complete file');\\n }\\n // need to refresh collection cache\\n adHocService.getAll(true).then(function(result) {\\n adHocService.resetCurrentCollection();\\n $state.go('ad-hoc');\\n });\\n });\\n } else {\\n // alert the customer to the error\\n $scope.uploadError = true;\\n $scope.uploadErrorMessage = err.msg;\\n }\\n };\\n\\n /**\\n * return null if valid and an error object if invalid\\n * error = {msg:i18nFilter(\\\"message\\\")}\\n */\\n var verifySchemaAndDirectives = function(directives, schema) {\\n var err = null;\\n // schema\\n for(var i=0;i<schema.length;i++) {\\n if(!schema[i].prettyName) {\\n err = {\\n msg:i18nFilter('allNameFieldsRequiredError')\\n };\\n }\\n }\\n // directives\\n // err = {msg:i18nFilter('badDirective')};\\n return err;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/controllers/validate-upload-ctrl.js\\n ** module id = 5\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.DashboardEditCtrl', [\\n require('../directives/dashboard-canvas').name,\\n require('../directives/dashboard-rail').name,\\n require('../directives/responsive-evaluator').name,\\n require('../directives/dashboard-instrument-chrome').name,\\n require('../../instrument/directives/instrument').name,\\n require('../../instrument/directives/new-instrument-configuration').name,\\n require('../../common/directives/name-editor').name,\\n require('../directives/media-definition-track').name,\\n require('../directives/media-definition-menu').name,\\n require('../directives/ruler').name,\\n require('../../common/services/dashboard-service').name,\\n require('../services/event-bus').name,\\n require('../../common/services/dashboard-workspace').name,\\n require('../../common/services/post-message').name\\n ])\\n .controller('DashboardCtrl', function($scope, $state, $window, dashboardService, dashboardWorkspaceService, i18nFilter, eventBus, postMessageService) {\\n $scope.editable = false;\\n $scope.showRail = false;\\n $scope.newInstrumentConfigVisible = false;\\n\\n $scope.toggleRail = function() {\\n $scope.showRail = !$scope.showRail;\\n eventBus.publish('resetActiveMediaDefinition');\\n };\\n\\n var updateEditable = function() {\\n $scope.editable = $state.is('dashboard.edit');\\n };\\n\\n var loadDashboard = function(dashboardId) {\\n if (!dashboardWorkspaceService.dashboard || dashboardWorkspaceService.dashboard._id !== dashboardId) {\\n postMessageService.post('external.pageTitle', i18nFilter('dashboard'));\\n dashboardService.get(dashboardId).then(function(dashboard) {\\n dashboardWorkspaceService.pristineDashboard = dashboard;\\n dashboardWorkspaceService.dashboard = angular.copy(dashboard);\\n dashboardWorkspaceService.page = dashboard.pages[0];\\n postMessageService.post('external.pageTitle', dashboard.name);\\n });\\n } else {\\n postMessageService.post('external.pageTitle', dashboardWorkspaceService.dashboard.name);\\n }\\n };\\n\\n $scope.setActiveMediaDefinition = function(mediaDefinition) {\\n dashboardWorkspaceService.mediaDefinition = mediaDefinition;\\n };\\n\\n $scope.saveDashboard = function() {\\n dashboardService.save(dashboardWorkspaceService.dashboard).then(function() {\\n dashboardWorkspaceService.updatePristineCopy();\\n $state.go('dashboard.view', {\\n dashboardId: dashboardWorkspaceService.dashboard._id\\n });\\n });\\n };\\n\\n $scope.cancelEditing = function() {\\n dashboardWorkspaceService.revertChanges();\\n $state.go('dashboard.view', {\\n dashboardId: dashboardWorkspaceService.dashboard._id\\n });\\n };\\n\\n $scope.getRailToggleText = function() {\\n return i18nFilter($scope.showRail ? 'hideDashboardRail' : 'showDashboardRail');\\n };\\n\\n $scope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\\n // Would love to show the user a prompt asking if they wish to continue their navigation or stay on the\\n // edit screen but this bug prevents it from happening without super-hax:\\n // https://github.com/angular-ui/ui-router/issues/273\\n if (fromState.name === 'dashboard.edit' && toState.name !== 'instrument.edit') {\\n dashboardWorkspaceService.revertChanges();\\n }\\n });\\n\\n $scope.$on('$stateChangeSuccess', function(e, to, toParams) {\\n if (to.name.indexOf('dashboard.') === 0) {\\n updateEditable();\\n loadDashboard(toParams.dashboardId);\\n }\\n });\\n\\n updateEditable();\\n\\n angular.element($window).on('beforeunload', function() {\\n if ($state.is('dashboard.edit') &&\\n !angular.equals(dashboardWorkspaceService.dashboard, dashboardWorkspaceService.pristineDashboard)) {\\n return i18nFilter('unsavedChangesPrompt');\\n }\\n });\\n\\n $scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function(dashboard) {\\n $scope.dashboard = dashboard;\\n });\\n\\n $scope.getMeasurementsStyle = function() {\\n var largestWidth = 0;\\n\\n // Arbitrary width that provides some room for the the last media definition label.\\n var buffer = 100;\\n\\n if (dashboardWorkspaceService.dashboard) {\\n dashboardWorkspaceService.dashboard.mediaDefinitions.forEach(function(mediaDefinition) {\\n largestWidth = Math.max(largestWidth, mediaDefinition.width);\\n });\\n }\\n\\n return {\\n width: largestWidth + buffer\\n };\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/controllers/dashboard-ctrl.js\\n ** module id = 6\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.InstrumentCtrl', [\\n require('../directives/instrument').name,\\n require('../directives/instrument-editor-bootstrap').name,\\n require('../../common/directives/name-editor').name,\\n require('../services/instrument-event-bus').name\\n ])\\n .controller('InstrumentCtrl', function($scope, $stateParams, $state, $window, dashboardService, dashboardWorkspaceService, instrumentEventBus, i18nFilter) {\\n $scope.instrument = null;\\n\\n var init = function(dashboard) {\\n $scope.dashboard = dashboard;\\n $scope.dashboard.instruments.forEach(function(instrument) {\\n if (instrument._id === $stateParams.instrumentId) {\\n $scope.instrument = angular.copy(instrument);\\n $scope.pristineInstrument = instrument;\\n return false;\\n }\\n });\\n if(!$scope.instrument) {\\n $state.go('dashboard.edit', {dashboardId: $state.params.dashboardId});\\n }\\n };\\n\\n angular.element($window).on('beforeunload', function() {\\n if ($state.is('instrument.edit') &&\\n !angular.equals($scope.instrument, $scope.pristineInstrument)) {\\n return i18nFilter('unsavedChangesPrompt');\\n }\\n });\\n\\n // If the dashboard workspace's active dashboard contains the instrument we want to use it's dashboard copy since it\\n // is the working copy (instead of the pristine dashboard object). This way when the user saves instrument changes\\n // and navigates back to the dashboard view the view is properly updated because it's the same object reference.\\n if (dashboardWorkspaceService.dashboard && dashboardWorkspaceService.dashboard._id === $stateParams.dashboardId) {\\n init(dashboardWorkspaceService.dashboard);\\n } else {\\n dashboardService.get($stateParams.dashboardId).then(function(dashboard) {\\n init(dashboard);\\n });\\n }\\n\\n var navigateToDashboard = function() {\\n $state.go('dashboard.edit', {\\n dashboardId: $scope.dashboard._id\\n });\\n };\\n\\n $scope.cancel = function() {\\n $scope.instrument = angular.copy($scope.pristineInstrument);\\n navigateToDashboard();\\n };\\n\\n $scope.save = function() {\\n angular.copy($scope.instrument, $scope.pristineInstrument);\\n instrumentEventBus.publish({\\n from: $scope.instrument._id,\\n topic: 'configChanged'\\n });\\n dashboardService.save($scope.dashboard).then(navigateToDashboard);\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/controllers/instrument-ctrl.js\\n ** module id = 7\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.i18n', [])\\n .provider('i18nBundle', function() {\\n this.$get = function() {\\n return this.bundle;\\n };\\n })\\n .filter('i18n', function(i18nBundle) {\\n // If additional arguments are provided, those additional arguments will be replaced into the target string.\\n // For example, if the localized key is \\\"viewingBooks\\\" and the value is \\\"Viewing %s books\\\" then the appropriate\\n // call would be i18nFilter('viewingBooks', 15); to produce \\\"Viewing 15 books\\\".\\n // If the localized key is \\\"authors\\\" and the value is \\\"Authors %1$s and %2$s others\\\" then the appropriate\\n // call would be i18nFilter('authors', 'Bob Marley', 8); to produce \\\"Authors Bob Marley and 8 others\\\".\\n return function(key, replacements) {\\n var formatter = i18nBundle[key];\\n return formatter ? formatter(replacements) : key;\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/filters/i18n.js\\n ** module id = 8\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.postMessageService', [\\n ])\\n .factory('postMessageService', function($window, $rootScope, $location, eventBus) {\\n var listen = function() {\\n var self = this;\\n\\n // Listen for state changes that external applications should know about.\\n $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {\\n switch(toState.name) {\\n case 'dashboard.edit':\\n case 'instrument.edit':\\n case 'collection':\\n case 'validate':\\n self.post('external.hideShell');\\n break;\\n default:\\n self.post('external.showShell');\\n }\\n });\\n\\n $rootScope.$on('$stateChangeSuccess', function() {\\n // For some reason $location.hash() doesn't return anything. I believe it is because\\n // we are using Angular UI's UI-Router which does its own thing.\\n var hash = '#' + $location.absUrl().split('#')[1];\\n self.post('external.stateChange', hash);\\n });\\n\\n // Listen for other post messages that come across the wire.\\n $window.addEventListener('message', function(event) {\\n if (event.origin !== $window.location.origin) {\\n return;\\n }\\n self._handleMessage(event);\\n });\\n };\\n\\n var post = function(type, message) {\\n var packet = { type: type };\\n if (arguments.length > 1) {\\n packet.message = message;\\n }\\n // Need to stringify the post message because <IE10 requires the post message to only be a string\\n // and not an object.\\n // use the window's parent (the iframe parent to post into)\\n $window.parent.postMessage(JSON.stringify(packet), $window.location.origin);\\n };\\n\\n var _handleMessage = function(event) {\\n var packet = JSON.parse(event.data);\\n switch(packet.type) {\\n case 'external.viewportResize': {\\n eventBus.publish('resetActiveMediaDefinition');\\n break;\\n }\\n }\\n };\\n\\n return {\\n listen: listen,\\n post: post,\\n _handleMessage: _handleMessage\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/post-message.js\\n ** module id = 9\\n ** module chunks = 0\\n **/\",\"'use strict';\\n/**\\n * A port of Q's allSettled API. While $q.all is rejected as soon as any child promise is rejected, allSettled will\\n * allow all child promises to settle (be resolved or rejected) before resolving the master promise.\\n * The master promise will be resolved with an array of objects that represent the state of the child promises.\\n * See https://github.com/kriskowal/q/wiki/API-Reference#promiseallsettled fore more information.\\n */\\nmodule.exports = angular.module('qAllSettled', [])\\n .config(function($provide) {\\n $provide.decorator('$q', function($delegate) {\\n var $q = $delegate;\\n $q.allSettled = function(promises) {\\n return $q.all(promises.map(function(promise) {\\n return promise.then(function(value) {\\n return { state: 'fulfilled', value: value };\\n }, function(reason) {\\n return { state: 'rejected', reason: reason };\\n });\\n }));\\n };\\n return $q;\\n });\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/q-all-settled.js\\n ** module id = 10\\n ** module chunks = 0\\n **/\",\"'use strict';\\n/**\\n * A port of Q's allSettled API. While $q.all is rejected as soon as any child promise is rejected, allSettled will\\n * allow all child promises to settle (be resolved or rejected) before resolving the master promise.\\n * The master promise will be resolved with an array of objects that represent the state of the child promises.\\n * See https://github.com/kriskowal/q/wiki/API-Reference#promiseallsettled fore more information.\\n */\\nmodule.exports = angular.module('qIgnorify', [])\\n .config(function($provide) {\\n $provide.decorator('$q', function($delegate) {\\n var defer = $delegate.defer;\\n var when = $delegate.when;\\n var reject = $delegate.reject;\\n var all = $delegate.all;\\n\\n function decoratePromise(promise) {\\n promise.ignorify = function() {\\n promise._ignore = false;\\n promise._then = promise.then;\\n\\n promise.ignore = function() {\\n promise._ignore = true;\\n };\\n\\n promise.then = function(thenFn, errFn, notifyFn) {\\n return promise._then(\\n function() {\\n if (!promise._ignore) {\\n thenFn.apply(this, arguments);\\n }\\n },\\n function() {\\n if (!promise._ignore) {\\n errFn.apply(this, arguments);\\n }\\n },\\n function() {\\n if (!promise._ignore) {\\n notifyFn.apply(this, arguments);\\n }\\n }\\n );\\n };\\n return promise;\\n };\\n return promise;\\n }\\n\\n $delegate.defer = function() {\\n var deferred = defer();\\n decoratePromise(deferred.promise);\\n return deferred;\\n };\\n\\n $delegate.when = function() {\\n return decoratePromise(when.apply(this, arguments));\\n };\\n\\n $delegate.reject = function() {\\n return decoratePromise(reject.apply(this, arguments));\\n };\\n\\n $delegate.all = function() {\\n return decoratePromise(all.apply(this, arguments));\\n };\\n\\n return $delegate;\\n });\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/q-ignorify.js\\n ** module id = 11\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.exceptionHandler', [])\\n .factory('$exceptionHandler', function($log, $injector, env, uuid) {\\n return function(exception, cause) {\\n var id = uuid(),\\n $http = $injector.get('$http');\\n\\n $http.post('/ui/errorLog', {\\n id: id,\\n message: exception.message,\\n stack: exception.stack,\\n cause: cause\\n }).catch(function() {\\n if (env === 'development') {\\n $log.error('UI Error could not be logged successfully.');\\n }\\n });\\n\\n if (env === 'development') {\\n $log.error(exception);\\n } else {\\n $log.error('Error ID: ' + id);\\n }\\n };\\n });\\n\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/exception-handler.js\\n ** module id = 12\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.sso', [\\n require('../../dashboard/services/event-bus').name\\n])\\n.factory('sso', function(eventBus, i18nFilter, $window, ims) {\\n var lastChecked = null;\\n var expires = 60000;\\n return {\\n requestInterceptor: function(config) {\\n var now = new Date().getTime();\\n if(!lastChecked || now - lastChecked > expires) {\\n var url = 'https://' + ims.host + '/ims/check/v1/token?' +\\n 'callback=?' +\\n '&client_id=' + ims.clientId +\\n '&scope=AdobeID,openid' +\\n '&_=' + now\\n ;\\n $.getJSON(url, function(sessionData) {\\n if(sessionData.error || sessionData.error_flag) {\\n eventBus.publish('processFailed', i18nFilter('loggedOutError'));\\n }\\n });\\n lastChecked = now;\\n }\\n return config;\\n }\\n };\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/sso.js\\n ** module id = 13\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.app', [\\n require('./alert').name,\\n require('./modal-progress-indicator').name\\n ])\\n .directive('app', function() {\\n return {\\n restrict: 'EA',\\n template: require('./app.tpl.html')\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/app.js\\n ** module id = 14\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dashboardService', [\\n require('./tag-service').name,\\n require('./uuid').name,\\n require('./dashboard-mixin').name\\n ])\\n .factory('dashboardService', function($http, $q, user, tagService, eventBus, i18nFilter, dashboardMixin) {\\n var dashboardCache;\\n var allDashboardsPromiseById;\\n var fullDashboardPromiseById = {};\\n\\n var removeDependenciesRequestTransformer = function(data) {\\n return JSON.stringify(data, function(key, val) {\\n if (key === 'tags') {\\n return undefined;\\n }\\n return val;\\n });\\n };\\n\\n var removeFromCache = function(dashboard) {\\n if (dashboardCache) {\\n var i = dashboardCache.length;\\n while (i--) {\\n if (dashboardCache[i]._id === dashboard._id) {\\n dashboardCache.splice(i, 1);\\n }\\n // Continue looping in case the dashboard is there more than once. (shouldn't happen)\\n }\\n }\\n };\\n\\n /**\\n * Loads and joins dependencies (e.g., tags) onto dashboards.\\n * @param dashboardsPromise The promise for dashboards that are loading. This takes a promise so that dashboards\\n * can be loading in parallel to dependencies loading instead of sequentially.\\n * @returns {Promise}\\n */\\n var joinDependencies = function(dashboardsPromise) {\\n return $q.all([dashboardsPromise, tagService.query()]).then(function(responses) {\\n return joinTags(responses[0], responses[1]);\\n });\\n };\\n\\n var joinTags = function(dashboards, tags) {\\n // We convert dashboards to an array below to make it easier to work with\\n // but we want to return what the user gave us.\\n var origDashboards = dashboards;\\n\\n if (!angular.isArray(dashboards)) {\\n dashboards = [dashboards];\\n }\\n\\n var tagsByDashboardId = {};\\n tags.forEach(function(tag) {\\n var tagsWithId = tagsByDashboardId[tag.dashboardId];\\n\\n if (!tagsWithId) {\\n tagsWithId = tagsByDashboardId[tag.dashboardId] = [];\\n }\\n\\n tagsWithId.push(tag);\\n });\\n\\n dashboards.forEach(function(dashboard) {\\n dashboard.tags = tagsByDashboardId[dashboard._id] || [];\\n });\\n\\n return origDashboards;\\n };\\n\\n var getDashboardFromArray = function(dashboards, id) {\\n for (var i = 0; i < dashboards.length; i++) {\\n var candidate = dashboards[i];\\n if (candidate._id === id) {\\n return candidate;\\n }\\n }\\n };\\n\\n /**\\n * Retrieves a single dashboard. This is a full dashboard object (contains all information for the dashboard).\\n * @param id\\n * @returns {Promise}\\n */\\n var get = function(id) {\\n var promise = fullDashboardPromiseById[id];\\n\\n if (!promise) {\\n var deferred = $q.defer();\\n promise = deferred.promise;\\n\\n // Fetch all shallow dashboard objects first. It makes dealing with the cache, outstanding requests, and\\n // memory references a lot easier. The downside is that we're waiting for all shallow dashboards to load\\n // before loading the full dashboard object that's being requested so this may be room for optimization\\n // in the future.\\n query().then(function(dashboards) {\\n var cachedDashboard = getDashboardFromArray(dashboards, id);\\n\\n if (cachedDashboard.isFullDashboard()) {\\n deferred.resolve(cachedDashboard);\\n } else {\\n fullDashboardPromiseById[id] = deferred.promise;\\n\\n $http({\\n method: 'GET',\\n url: '/dashboards/' + id\\n }).then(function(response) {\\n var fullDashboard = response.data;\\n // Extend the cached dashboard instead of replacing it since other piecees of the app may have reference\\n // to the instance and we don't want to have to manage those references.\\n angular.extend(cachedDashboard, fullDashboard);\\n deferred.resolve(cachedDashboard);\\n delete fullDashboardPromiseById[id];\\n });\\n }\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n }\\n\\n return promise;\\n };\\n\\n /**\\n * Retrieves all dashboards. These are \\\"shallow\\\" dashboard objects that only include high-level information\\n * (no information regarding instruments, layout, etc).\\n * @returns {Promise}\\n */\\n var query = function() {\\n if (allDashboardsPromiseById) {\\n return allDashboardsPromiseById;\\n }\\n\\n var deferred = $q.defer();\\n\\n if (dashboardCache) {\\n deferred.resolve(dashboardCache);\\n } else {\\n allDashboardsPromiseById = deferred.promise;\\n\\n var loadPromise = $http({\\n method: 'GET',\\n url: '/dashboards'\\n }).then(function(response) {\\n var dashboards = response.data;\\n dashboards.forEach(addObjectMethods);\\n return dashboards;\\n }).catch(function(error) {\\n return $q.reject(error);\\n });\\n\\n // Pass the promise immediately instead of waiting for the promise to complete. This way dependencies can be\\n // loaded in parallel.\\n joinDependencies(loadPromise).then(function(dashboards) {\\n dashboardCache = dashboards;\\n deferred.resolve(dashboards);\\n allDashboardsPromiseById = null;\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('queryDashboardsError'));\\n deferred.reject(error);\\n });\\n }\\n\\n var promise = deferred.promise;\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var leave = function(dashboards) {\\n var promises = dashboards.map(function(dashboard, index) {\\n return $http({\\n method: 'POST',\\n url: '/dashboards/' + dashboard._id + '/leave'\\n }).then(function() {\\n dashboard.removeParticipantForEntity(user);\\n removeFromCache(dashboard);\\n return dashboard;\\n }).catch(function() {\\n return $q.reject(dashboard);\\n });\\n });\\n\\n var masterPromise = $q.allSettled(promises).then(function(resolutions) {\\n var rejectedDashboards = dashboards.filter(function(dashboard, index) {\\n return resolutions[index].state === 'rejected';\\n });\\n\\n if (rejectedDashboards.length) {\\n eventBus.publish('processFailed', i18nFilter('leaveDashboardsError'));\\n return $q.reject(rejectedDashboards);\\n } else {\\n return dashboards;\\n }\\n });\\n\\n eventBus.publish('modalProcessStarted', masterPromise);\\n\\n return masterPromise;\\n };\\n\\n var save = function(dashboard) {\\n var method = dashboard._id ? 'PUT' : 'POST';\\n var promise = $http({\\n method: method,\\n url: '/dashboards/' + dashboard._id,\\n data: dashboard,\\n transformRequest: removeDependenciesRequestTransformer\\n }).then(function() {\\n if (!dashboard.isEntityAParticipant(user)) {\\n removeFromCache(dashboard);\\n }\\n return dashboard;\\n }).catch(function() {\\n eventBus.publish('processFailed', i18nFilter('saveDashboardError'));\\n return $q.reject(dashboard);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var destroy = function(dashboards) {\\n var promises = dashboards.map(function(dashboard) {\\n return $http({\\n method: 'DELETE',\\n url: '/dashboards/' + dashboard._id\\n }).then(function() {\\n removeFromCache(dashboard);\\n return dashboard;\\n }).catch(function() {\\n return $q.reject(dashboard);\\n });\\n });\\n\\n var masterPromise = $q.allSettled(promises).then(function(resolutions) {\\n var rejectedDashboards = dashboards.filter(function(dashboard, index) {\\n return resolutions[index].state === 'rejected';\\n });\\n\\n if (rejectedDashboards.length) {\\n eventBus.publish('processFailed', i18nFilter('deleteDashboardsError'));\\n return $q.reject(rejectedDashboards);\\n } else {\\n return dashboards;\\n }\\n });\\n\\n eventBus.publish('modalProcessStarted', masterPromise);\\n\\n return masterPromise;\\n };\\n\\n var duplicate = function(dashboard) {\\n var promise = $http({\\n method: 'POST',\\n url: '/dashboards/' + dashboard._id + '/duplicate',\\n data: dashboard,\\n transformRequest: removeDependenciesRequestTransformer\\n }).then(function(response) {\\n var newDashboard = response.data;\\n addObjectMethods(newDashboard);\\n return newDashboard;\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('duplicateDashboardError'));\\n return $q.reject(error);\\n });\\n\\n promise = joinDependencies(promise).then(function(dashboard) {\\n dashboardCache.push(dashboard);\\n return dashboard;\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var addObjectMethods = function(dashboard) {\\n return angular.extend(dashboard, dashboardMixin);\\n };\\n\\n return {\\n save: save,\\n get: get,\\n query: query,\\n destroy: destroy,\\n leave: leave,\\n duplicate: duplicate\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/dashboard-service.js\\n ** module id = 15\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.tagService', [\\n require('./sequence').name\\n ])\\n .factory('tagService', function($http, $q, Sequence, eventBus, i18nFilter) {\\n var allTagsCache,\\n queryPromise,\\n sequence = new Sequence();\\n\\n var removeFromCache = function(tag) {\\n var i = allTagsCache.length;\\n while (i--) {\\n if (allTagsCache[i]._id === tag._id) {\\n allTagsCache.splice(i, 1);\\n // Continue looping in case the tag is there more than once. (shouldn't happen)\\n }\\n }\\n };\\n\\n var query = function() {\\n if (!queryPromise) {\\n var deferred = $q.defer();\\n queryPromise = deferred.promise;\\n\\n if (allTagsCache) {\\n deferred.resolve(allTagsCache);\\n } else {\\n $http({\\n method: 'GET',\\n url: '/tags'\\n }).then(function(response) {\\n allTagsCache = response.data;\\n deferred.resolve(allTagsCache);\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('queryTagsError'));\\n deferred.reject(error);\\n });\\n }\\n }\\n\\n return queryPromise;\\n };\\n\\n var save = function(tag) {\\n sequence.enqueue(function() {\\n var promise;\\n\\n if (tag._id) {\\n promise = $http({\\n method: 'PUT',\\n url: '/tags/' + tag._id,\\n data: tag\\n });\\n } else {\\n promise = $http({\\n method: 'POST',\\n url: '/tags',\\n data: tag\\n }).then(function(response) {\\n tag._id = response.data._id;\\n return tag;\\n });\\n }\\n\\n promise.catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('saveTagError'));\\n $q.reject(error);\\n });\\n\\n return promise;\\n });\\n };\\n\\n var destroy = function(tag) {\\n sequence.enqueue(function() {\\n return $http({\\n method: 'DELETE',\\n url: '/tags/' + tag._id\\n }).then(function(response) {\\n removeFromCache(tag);\\n return response;\\n }).catch(function(error) {\\n eventBus.publish('processFailed', i18nFilter('deleteTagError'));\\n $q.reject(error);\\n });\\n });\\n };\\n\\n return {\\n query: query,\\n save: save,\\n destroy: destroy\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/tag-service.js\\n ** module id = 16\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.tagEnum', [])\\n .constant('tagEnum', {\\n FAVORITE: 'totem.favorite'\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/tag-enum.js\\n ** module id = 17\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.selectionTable', [])\\n .directive('selectionTable', function() {\\n return {\\n scope: {\\n rowModels: '=',\\n selectedRowModels: '=',\\n\\n /**\\n * When a row is selected, the model to add to the selectedRowModels array will come from the scope of the row.\\n * The scope of the row is typically created by ng-repeat. When using ng-repeat=\\\"dashboard in dashboards\\\",\\n * the row's scope will have a dashboard attribute with the dashboard model. In this case, selectionModelMap\\n * should be set to \\\"dashboard\\\" so it can be retrieved from the row's scope when the row is selected.\\n */\\n selectionModelMap: '@'\\n },\\n link: function(scope, element, attrs) {\\n var allCheckboxSelector = attrs.selectAllSelector || 'th:first-child input';\\n var itemCheckboxSelector = attrs.selectItemSelector || 'td:first-child input';\\n\\n var updateSelectionModel = function() {\\n var selectedCheckboxes = element.find(itemCheckboxSelector + ':checked');\\n scope.selectedRowModels = selectedCheckboxes.toArray().map(function(selectedCheckbox) {\\n return $(selectedCheckbox).scope().$eval(scope.selectionModelMap);\\n });\\n };\\n\\n var updateSelectAllCheckbox = function() {\\n var itemCheckboxes = element.find(itemCheckboxSelector);\\n var allItemsSelected = itemCheckboxes.length && itemCheckboxes.not(':checked').length === 0;\\n $(allCheckboxSelector).prop('checked', allItemsSelected);\\n };\\n\\n element.on('change', allCheckboxSelector, function(event) {\\n var selected = $(event.currentTarget).prop('checked');\\n element.find(itemCheckboxSelector).prop('checked', selected);\\n\\n if (scope.selectedRowModels && scope.selectionModelMap) {\\n scope.$apply(updateSelectionModel);\\n }\\n });\\n\\n element.on('change', itemCheckboxSelector, function() {\\n updateSelectAllCheckbox();\\n\\n if (scope.selectedRowModels && scope.selectionModelMap) {\\n scope.$apply(updateSelectionModel);\\n }\\n });\\n\\n scope.$watchCollection('rowModels', function() {\\n updateSelectAllCheckbox();\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/selection-table.js\\n ** module id = 18\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.sortHeader', [])\\n .directive('sortHeader', function() {\\n return {\\n link: function(scope, element, attrs) {\\n element.addClass('totem-SortHeaderCell');\\n }\\n };\\n })\\n .directive('sortHeaderIcon', function() {\\n return {\\n scope: {\\n sortActive: '=',\\n sortAscending: '='\\n },\\n link: function(scope, element, attrs) {\\n element.addClass('totem-SortHeaderCell-icon');\\n\\n scope.$watch('sortActive', function(sortActive) {\\n element.toggle(sortActive);\\n });\\n\\n scope.$watch('sortAscending', function(sortAscending) {\\n element\\n .toggleClass('coral-Icon--arrowUp', sortAscending)\\n .toggleClass('coral-Icon--arrowDown', !sortAscending);\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/sort-header.js\\n ** module id = 19\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.adHocService', [\\n require('./participable-mixin').name\\n ])\\n .factory('adHocService', function($http, $q, $location, ims, participableMixin, eventBus, i18nFilter, externalServices) {\\n var collectionCache = null;\\n var originalCollections = null;\\n var currentCollection = null;\\n var rsAdHocBaseUrl = externalServices.rs.host + 'adhoc/';\\n var orgId = ims.activeOrg + '@AdobeOrg';\\n\\n var get = function(id) {\\n return getAll().then(function(collections) {\\n for (var i = 0; i < collections.length; i++) {\\n var collection = collections[i];\\n if (collection.id === id) {\\n return collection;\\n }\\n }\\n return null;\\n });\\n };\\n\\n var getAll = function(forceRefresh) {\\n forceRefresh = forceRefresh || false;\\n if(collectionCache && !forceRefresh) {\\n var deferred = $q.defer();\\n deferred.resolve(collectionCache);\\n return deferred.promise;\\n }\\n\\n var promise = $http({\\n method: 'GET',\\n url: rsAdHocBaseUrl + '?depth=3&orgId='+orgId,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n // SUCCESS\\n var collectionsById = response.data;\\n\\n var collections = [];\\n for (var id in collectionsById) {\\n if (collectionsById.hasOwnProperty(id)) {\\n var collection = collectionsById[id];\\n collection.id = id;\\n angular.extend(collection, participableMixin);\\n\\n // need to add the uploadId to the upload object\\n if(collection.uploads) {\\n for(var uploadId in collection.uploads) {\\n if(collection.uploads.hasOwnProperty(uploadId)) {\\n collection.uploads[uploadId].id = uploadId;\\n }\\n }\\n }\\n\\n // make the participants array match the expected format for\\n // participable\\n var newParticipants = [];\\n for(var participantId in collection.participants) {\\n if(collection.participants.hasOwnProperty(participantId)) {\\n // @todo: this info needs to be pulled from IMS\\n // Reporting Services does not have this info\\n newParticipants.push({\\n _id:participantId,\\n entity:{\\n _id:participantId,\\n displayName:'Some Name',\\n email:'[email protected]',\\n firstName:'Some',\\n lastName:'Name',\\n type:'user'\\n },\\n isOwner:collection.participants[participantId].owner\\n });\\n }\\n }\\n collection.participants = newParticipants;\\n\\n collections.push(collection);\\n }\\n }\\n\\n collectionCache = collections;\\n originalCollections = angular.copy(collectionCache);\\n\\n return collectionCache;\\n }, function(reason) {\\n eventBus.publish('processFailed',i18nFilter('adhocGenericCollectionError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n // metaData is an object that conforms to the inputs needed by adhoc/:collectionId PUT\\n var saveMetaData = function(metaData, collectionId) {\\n var promise = $http({\\n method: 'PUT',\\n url: rsAdHocBaseUrl + collectionId + '?orgId='+orgId,\\n data: metaData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).catch(function(reason) {\\n eventBus.publish('processFailed',i18nFilter('adhocCollectionSaveError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var preRunFromPastebin = function(pastebinId, sampleSize, collectionId) {\\n sampleSize = sampleSize || 20;\\n\\n var createData = {\\n file: $location.protocol() + '://' + $location.host() + ($location.port() ? ':' + $location.port() : '') + '/pastebin/' + pastebinId\\n };\\n\\n var url = rsAdHocBaseUrl + (collectionId ? collectionId : '') + '?getDirectives=1&getSample='+sampleSize+'&noCommit=1&orgId='+orgId;\\n var promise = $http({\\n method: collectionId ? 'PUT' : 'POST',\\n url: url,\\n data: createData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocGenericCollectionError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var createFromPastebin = function(pastebinId, directives, schema, collectionId) {\\n var createData = {\\n file: $location.protocol() + '://' + $location.host() + ($location.port() ? ':' + $location.port() : '') + '/pastebin/' + pastebinId,\\n schema: schema,\\n directives: directives,\\n name: currentCollection.name,\\n description: currentCollection.description,\\n uploadFile: currentCollection.fileName\\n };\\n var url = rsAdHocBaseUrl + (collectionId ? collectionId : '') + '?orgId='+orgId;\\n\\n var promise = $http({\\n method: collectionId ? 'PUT' : 'POST',\\n url: url,\\n data: createData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionCreateError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var setCurrentCollection = function (collection) {\\n if(!collection) {\\n createNewCurrentCollection();\\n } else {\\n currentCollection = collection;\\n }\\n };\\n\\n var getCurrentCollection = function() {\\n if(!currentCollection) {\\n createNewCurrentCollection();\\n }\\n return currentCollection;\\n };\\n\\n var createNewCurrentCollection = function () {\\n currentCollection = {};\\n angular.extend(currentCollection, participableMixin);\\n };\\n\\n var resetCurrentCollection = function() {\\n currentCollection = null;\\n };\\n\\n var deleteUpload = function(collection, upload) {\\n if(!collection || !upload) {\\n return;\\n }\\n var url = rsAdHocBaseUrl + collection.id + '/uploads/' + upload.id + '?orgId='+orgId;\\n var promise = $http({\\n method: 'DELETE',\\n url: url,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n // decrement the rowCount on the collection\\n collection.rowCount -= upload.rowCount;\\n if(collection.uploads && collection.uploads[upload.id]) {\\n delete collection.uploads[upload.id];\\n }\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocUploadDeleteError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var deleteCollection = function(collection) {\\n if(!collection) {\\n eventBus.publish('processFailed', i18nFilter('adhocGenericCollectionError'));\\n return;\\n }\\n\\n var url = rsAdHocBaseUrl + collection.id + '?orgId='+orgId;\\n\\n var promise = $http({\\n method: 'DELETE',\\n url: url,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n var ind = collectionCache.indexOf(collection);\\n if(ind > -1) {\\n collectionCache.splice(ind,1);\\n }\\n return response;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocCollectionDeleteError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var savePermissions = function(collection) {\\n var oldParticipants = null;\\n originalCollections.forEach(function(col) {\\n if(col.id == collection.id) {\\n oldParticipants = col.participants;\\n }\\n });\\n\\n if(!oldParticipants) {\\n eventBus.publish('processFailed', i18nFilter('genericPermissionsChangeError'));\\n return;\\n }\\n var newParticipants = [];\\n var removedParticipants = [];\\n var changedParticipants = [];\\n var participantId = null;\\n var oldParticipantId = null;\\n var participantFound = false;\\n\\n // find removed and altered participants\\n // participants in the old array that are not in the new array have been removed\\n // participants in the old array that are different from the ones in the new array have been altered\\n for(oldParticipantId in oldParticipants) {\\n if(oldParticipants.hasOwnProperty(oldParticipantId)) {\\n participantFound = false;\\n for(participantId in collection.participants) {\\n if(collection.participants.hasOwnProperty(participantId)) {\\n if(collection.participants[participantId].entity._id == oldParticipants[oldParticipantId].entity._id) {\\n participantFound = true;\\n if(collection.participants[participantId].isOwner != oldParticipants[oldParticipantId].isOwner) {\\n oldParticipants[oldParticipantId].isOwner = collection.participants[participantId];\\n changedParticipants.push(collection.participants[participantId]);\\n }\\n }\\n }\\n }\\n if(!participantFound) {\\n removedParticipants.push(oldParticipants[oldParticipantId]);\\n }\\n }\\n }\\n\\n // find new participants\\n // participants in the new array that are not in the old array are new\\n for(participantId in collection.participants) {\\n if(collection.participants.hasOwnProperty(participantId)) {\\n participantFound = false;\\n for(oldParticipantId in oldParticipants) {\\n if(oldParticipants.hasOwnProperty(oldParticipantId)) {\\n if(collection.participants[participantId].entity._id && collection.participants[participantId].entity._id == oldParticipants[oldParticipantId].entity._id) {\\n participantFound = true;\\n }\\n }\\n }\\n if(!participantFound) {\\n newParticipants.push(collection.participants[participantId]);\\n }\\n }\\n }\\n // send alerts if any of these operations fail\\n // for creating:POST, for editing:PUT and for removing:DELETE\\n // url is rsAdHocBaseUrl + collection.id + '/participants'\\n var promises = [];\\n newParticipants.forEach(function(participant) {\\n promises.push(addParticipant(collection, participant));\\n });\\n\\n removedParticipants.forEach(function(participant) {\\n promises.push(removeParticipant(collection, participant));\\n });\\n\\n changedParticipants.forEach(function(participant) {\\n promises.push(editParticipant(collection,participant));\\n });\\n\\n $q.all(promises).catch(function(res) {\\n eventBus.publish('processFailed', i18nFilter('genericPermissionsChangeError'));\\n });\\n };\\n\\n var addParticipant = function(collection, participant)\\n {\\n var url = rsAdHocBaseUrl + collection.id + '/participants?orgId='+orgId;\\n var createData = {\\n userId:participant.entity._id,\\n owner:participant.isOwner\\n };\\n var promise = $http({\\n method: 'POST',\\n url: url,\\n data: createData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocPermissionError'));\\n return $q.reject(reason);\\n });\\n \\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var removeParticipant = function(collection, participant)\\n {\\n var url = rsAdHocBaseUrl + collection.id + '/participants/' + participant.entity._id + '?orgId='+orgId;\\n var promise = $http({\\n method: 'DELETE',\\n url: url,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocPermissionError'));\\n return $q.reject(reason);\\n });\\n \\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n var editParticipant = function(collection, participant)\\n {\\n var url = rsAdHocBaseUrl + collection.id + '/participants/' + participant.entity._id + '?orgId='+orgId;\\n var editData = {\\n owner:participant.isOwner\\n };\\n var promise = $http({\\n method: 'PUT',\\n url: url,\\n data:editData,\\n headers: {\\n Authorization: 'Bearer ' + ims.accessToken\\n }\\n }).then(function(response) {\\n return response.data;\\n }, function(reason) {\\n eventBus.publish('processFailed', i18nFilter('adhocPermissionError'));\\n return $q.reject(reason);\\n });\\n\\n eventBus.publish('modalProcessStarted', promise);\\n\\n return promise;\\n };\\n\\n return {\\n get : get,\\n getAll : getAll,\\n saveMetaData : saveMetaData,\\n createFromPastebin: createFromPastebin,\\n preRunFromPastebin: preRunFromPastebin,\\n getCurrentCollection: getCurrentCollection,\\n setCurrentCollection: setCurrentCollection,\\n resetCurrentCollection: resetCurrentCollection,\\n deleteUpload:deleteUpload,\\n deleteCollection:deleteCollection,\\n savePermissions:savePermissions\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/ad-hoc-service.js\\n ** module id = 20\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.nameEditor', [\\n require('../../common/directives/steal-focus').name\\n ])\\n .directive('nameEditor', function() {\\n return {\\n template: require('./name-editor.tpl.html'),\\n restrict: 'E',\\n scope: {\\n name: '='\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/name-editor.js\\n ** module id = 21\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dashboardWorkspaceService', [\\n require('./uuid').name\\n])\\n.factory('dashboardWorkspaceService', function($rootScope, instrumentEventBus) {\\n var service = {\\n /**\\n * The dashboard model as it was the last time it was saved.\\n */\\n pristineDashboard: null,\\n /**\\n * The working dashboard model which may contain unsaved changes.\\n */\\n dashboard: null,\\n /**\\n * The active media definition for the workspace.\\n */\\n mediaDefinition: null,\\n /**\\n * The active page for the workspace.\\n */\\n page: null,\\n /**\\n * The active media layouts for the workspace.\\n */\\n mediaLayouts: null,\\n /**\\n * The active instruments for the workspace.\\n */\\n instruments: null,\\n\\n revertChanges: function() {\\n this.dashboard = angular.copy(this.pristineDashboard);\\n },\\n\\n updatePristineCopy: function() {\\n // Copy to pristine dashboard instead of replace since other pieces of the app might already be referencing\\n // the pristine dashboard instance and we don't want to have to manage those references.\\n angular.copy(this.dashboard, this.pristineDashboard);\\n }\\n };\\n\\n /**\\n * Finds media layouts and instruments that match the current dashboard, media definition, and page and sets\\n * them on the service.\\n */\\n var updateMediaLayoutsAndInstruments = function() {\\n if (service.mediaDefinition &&\\n service.dashboard &&\\n service.dashboard.mediaLayouts &&\\n service.dashboard.instruments) {\\n service.mediaLayouts = service.dashboard.mediaLayouts.filter(function(mediaLayout) {\\n return mediaLayout.pageId == service.page._id &&\\n mediaLayout.mediaDefinitionId == service.mediaDefinition._id;\\n });\\n service.instruments = service.dashboard.instruments.filter(function(instrument) {\\n // Only include an instrument if there's an associated media layout we're actively working with.\\n for (var i = 0; i < service.mediaLayouts.length; i++) {\\n var mediaLayout = service.mediaLayouts[i];\\n if (instrument._id == mediaLayout.instrumentId) {\\n return true;\\n }\\n }\\n return false;\\n });\\n }\\n };\\n\\n $rootScope.$watchGroup([\\n function() { return service.dashboard; },\\n function() { return service.page; },\\n function() { return service.mediaDefinition; }\\n ], updateMediaLayoutsAndInstruments);\\n\\n $rootScope.$watchCollection(function() {\\n return service.dashboard ? service.dashboard.instruments : null;\\n }, updateMediaLayoutsAndInstruments);\\n\\n $rootScope.$watchCollection(function() {\\n return service.dashboard ? service.dashboard.mediaLayouts : null;\\n }, updateMediaLayoutsAndInstruments);\\n\\n\\n var oldMediaDefinition;\\n var oldPage;\\n var oldDashboard;\\n $rootScope.$watch(function() {\\n // If the media definition is changing but not the dashboard nor page, then we need to tell the instruments\\n // that they have resized so that they will re-render (their instruments have, indeed, changed size).\\n // If we're changing pages or dashboards then we're dealing with new instruments therefore they're rendering from\\n // scratch and we don't need to notify of any resizing. While we could publish this event from all the many places\\n // where we change the media definition, this keeps the logic in a single place and ensures that it happens\\n // when it needs to.\\n if (service.mediaDefinition !== oldMediaDefinition &&\\n service.dashboard === oldDashboard &&\\n service.page === oldPage) {\\n instrumentEventBus.publish({\\n topic: 'resized'\\n });\\n }\\n\\n //console.log(oldMediaDefinition._id, service.mediaDefinition._id)\\n oldMediaDefinition = service.mediaDefinition;\\n oldPage = service.page;\\n oldDashboard = service.dashboard;\\n });\\n\\n return service;\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/dashboard-workspace.js\\n ** module id = 22\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.alert', [])\\n .directive('alert', function(eventBus) {\\n return {\\n restrict: 'EA',\\n template: require('./alert.tpl.html'),\\n scope: true,\\n link: function(scope, element, attr) {\\n scope.visible = false;\\n scope.type = '';\\n scope.content = '';\\n\\n eventBus.subscribe('processFailed', function(content) {\\n scope.type = 'error';\\n scope.content = content;\\n scope.visible = true;\\n });\\n\\n element.find('.coral-Alert-closeButton').on('click', function() {\\n scope.$apply(function() {\\n scope.visible = false;\\n });\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/alert.js\\n ** module id = 23\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.modalProgressIndicator', [])\\n .directive('modalProgressIndicator', function(eventBus) {\\n return {\\n restrict: 'EA',\\n template: require('./modal-progress-indicator.tpl.html'),\\n scope: true,\\n link: function(scope, element, attr) {\\n scope.visible = false;\\n\\n var promises = [];\\n\\n eventBus.subscribe('modalProcessStarted', function(promise) {\\n promises.push(promise);\\n promise.finally(function() {\\n promises.splice(promises.indexOf(promise), 1);\\n if (!promises.length) {\\n scope.visible = false;\\n }\\n });\\n scope.visible = true;\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/modal-progress-indicator.js\\n ** module id = 24\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.manageToolbar', [\\n require('../../common/directives/share').name,\\n require('../../common/services/dashboard-service').name\\n ])\\n .directive('manageToolbar', function(user, $state, $q, dashboardService, i18nFilter) {\\n return {\\n restrict: 'EA',\\n scope: {\\n dashboards: '=',\\n selectedDashboards: '='\\n },\\n template: require('./manage-toolbar.tpl.html'),\\n link: function(scope, element, attrs) {\\n var removeDashboardFromSelection = function(dashboard) {\\n var index = scope.selectedDashboards.indexOf(dashboard);\\n if (index > -1) {\\n scope.selectedDashboards.splice(index, 1);\\n }\\n };\\n\\n scope.showSearchField = false;\\n scope.leaveModalVisible = false;\\n scope.deleteModalVisible = false;\\n scope.deleteModalDescription = '';\\n scope.shareModalVisible = false;\\n\\n scope.viewDashboard = function() {\\n $state.go('dashboard.view', {\\n dashboardId: scope.selectedDashboards[0]._id\\n });\\n };\\n\\n scope.duplicateDashboard = function() {\\n dashboardService.duplicate(scope.selectedDashboards[0]);\\n };\\n\\n scope.leaveDashboard = function() {\\n scope.leaveModalVisible = true;\\n };\\n\\n scope.confirmLeaveDashboard = function() {\\n // Copy selection in case scope.selectedDashboards is modified by the time a response is received.\\n var dashboardsToLeave = scope.selectedDashboards.slice();\\n\\n dashboardService.leave(dashboardsToLeave).then(function() {\\n dashboardsToLeave.forEach(removeDashboardFromSelection);\\n }, function(failedDashboards) {\\n dashboardsToLeave.forEach(function(dashboard) {\\n if (failedDashboards.indexOf(dashboard) === -1) {\\n removeDashboardFromSelection(dashboard);\\n }\\n });\\n });\\n };\\n\\n scope.editDashboard = function() {\\n $state.go('dashboard.edit', {\\n dashboardId: scope.selectedDashboards[0]._id\\n });\\n };\\n\\n scope.deleteDashboard = function() {\\n // We need to find unique entity IDs here instead of participant IDs. Participant objects may not have an ID.\\n // This is the case when a user/group was just added as a participant to the dashboard since the frontend does\\n // not create an ID for new participant objects. Also, it's probably not good to assume that participant IDs\\n // and entity IDs are 1:1. We're really trying to find unique entities here anyway.\\n var affectedUserIds = [];\\n var affectedGroupIds = [];\\n\\n var addAffectedEntity = function(entity) {\\n var ids;\\n switch (entity.type) {\\n case 'group':\\n ids = affectedGroupIds;\\n break;\\n default:\\n ids = affectedUserIds;\\n }\\n\\n if (ids.indexOf(entity._id) === -1) {\\n ids.push(entity._id);\\n }\\n };\\n\\n scope.selectedDashboards.forEach(function(dashboard) {\\n dashboard.participants.forEach(function(participant) {\\n addAffectedEntity(participant.entity);\\n });\\n });\\n\\n var i18nKey = affectedUserIds.length && affectedGroupIds.length ?\\n 'deleteDashboardUsersAndGroupsDescription' :\\n 'deleteDashboardUsersOrGroupsDescription';\\n\\n scope.deleteModalDescription = i18nFilter(i18nKey, {\\n NUM_DASHBOARDS: scope.selectedDashboards.length,\\n NUM_USERS_AFFECTED: affectedUserIds.length,\\n NUM_GROUPS_AFFECTED: affectedGroupIds.length\\n });\\n\\n scope.deleteModalVisible = true;\\n };\\n\\n scope.confirmDeleteDashboard = function() {\\n // Copy selection in case scope.selectedDashboards is modified by the time a response is received.\\n var dashboardsToDelete = scope.selectedDashboards.slice();\\n\\n dashboardService.destroy(dashboardsToDelete).then(function(dashboards) {\\n dashboardsToDelete.forEach(removeDashboardFromSelection);\\n }, function(failedDashboards) {\\n dashboardsToDelete.forEach(function(dashboard) {\\n if (failedDashboards.indexOf(dashboard) === -1) {\\n removeDashboardFromSelection(dashboard);\\n }\\n });\\n });\\n };\\n\\n scope.isSearchable = function() {\\n return scope.selectedDashboards.length === 0;\\n };\\n\\n scope.isShareable = function() {\\n if (scope.selectedDashboards.length !== 1) {\\n return false;\\n }\\n\\n return scope.selectedDashboards[0].isEntityAnOwner(user);\\n };\\n\\n scope.isViewable = function() {\\n return scope.selectedDashboards.length === 1;\\n };\\n\\n scope.isDuplicable = function() {\\n return scope.selectedDashboards.length === 1;\\n };\\n\\n scope.isDownloadable = function() {\\n return scope.selectedDashboards.length === 1;\\n };\\n\\n scope.isLeavable = function() {\\n if (scope.selectedDashboards.length === 0) {\\n return false;\\n }\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n var dashboard = scope.selectedDashboards[i];\\n // If the user is the only owner of the dashboard\\n if (dashboard.isEntitySoleOwner(user)) {\\n return false;\\n }\\n }\\n\\n return true;\\n };\\n\\n scope.isLeaveViewable = function() {\\n if (scope.isLeavable()) {\\n return true;\\n }\\n\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n if (!scope.selectedDashboards[i].isEntityAnOwner(user)) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n scope.isEditable = function() {\\n return scope.selectedDashboards.length === 1 && scope.selectedDashboards[0].isEntityAnOwner(user);\\n };\\n\\n scope.isDeletable = function() {\\n var owningOnly = true;\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n if (!scope.selectedDashboards[i].isEntityAnOwner(user)) {\\n owningOnly = false;\\n }\\n }\\n return owningOnly;\\n };\\n\\n scope.isDeleteViewable = function() {\\n for (var i = 0; i < scope.selectedDashboards.length; i++) {\\n if (scope.selectedDashboards[i].isEntityAnOwner(user)) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n scope.share = function() {\\n scope.shareModalVisible = true;\\n };\\n\\n scope.saveDashboard = function(dashboard) {\\n dashboardService.save(dashboard);\\n };\\n\\n// Debugging.\\n// scope.$watch('dashboards', function() {\\n// if (scope.dashboards && scope.dashboards.length > 0) {\\n// scope.selectedDashboards = [scope.dashboards[0]];\\n// scope.share();\\n// }\\n// });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/directives/manage-toolbar.js\\n ** module id = 25\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardSearch', [])\\n .directive('dashboardSearch', function() {\\n return {\\n restrict: 'EA',\\n scope: {\\n dashboards: '='\\n },\\n template: require('./dashboard-search.tpl.html'),\\n link: function(scope, element, attrs) {\\n element.find('.js-coral-Autocomplete-textfield').focus();\\n element.on('change:value', function(event, payload) {\\n // TODO: Somehow change the dashboard filter.\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/directives/dashboard-search.js\\n ** module id = 26\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<manage-toolbar dashboards=\\\\\\\"dashboards\\\\\\\" selected-dashboards=\\\\\\\"selectedDashboards\\\\\\\"></manage-toolbar>\\\\n<div class=\\\\\\\"u-totem-contentUnderActionBar\\\\\\\">\\\\n <table class=\\\\\\\"coral-Table totem-ManageTable\\\\\\\" selection-table row-models=\\\\\\\"dashboards\\\\\\\" selected-row-models=\\\\\\\"selectedDashboards\\\\\\\" selection-model-map=\\\\\\\"dashboard\\\\\\\">\\\\n <thead>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--select\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-all-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--favorite\\\\\\\"></th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--name\\\\\\\" ng-click=\\\\\\\"setSort('name')\\\\\\\" sort-header>\\\\n {{ 'name' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'name'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--editors\\\\\\\" ng-click=\\\\\\\"setSort(getFirstOwnerFullName)\\\\\\\" sort-header>\\\\n {{ 'owners' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === getFirstOwnerFullName\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--viewers\\\\\\\" ng-click=\\\\\\\"setSort('participants.length')\\\\\\\" sort-header>\\\\n {{ 'viewers' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'participants.length'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--views\\\\\\\" ng-click=\\\\\\\"setSort('views')\\\\\\\" sort-header>\\\\n {{ 'views' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'views'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--scheduled\\\\\\\">{{ 'scheduled' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-ManageTable-headerCell totem-ManageTable-headerCell--updated\\\\\\\" ng-click=\\\\\\\"setSort('modified')\\\\\\\" sort-header>\\\\n {{ 'updated' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'modified'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n </tr>\\\\n </thead>\\\\n <tbody>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-repeat=\\\\\\\"dashboard in dashboards | orderBy:sortPredicate:sortReverse\\\\\\\">\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-item-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell totem-ManageTable-cell--favorite\\\\\\\"><button class=\\\\\\\"coral-MinimalButton totem-FavoriteButton\\\\\\\" ng-click=\\\\\\\"toggleFavorite(dashboard)\\\\\\\"><i class=\\\\\\\"coral-Icon totem-FavoriteIcon\\\\\\\" ng-class=\\\\\\\"{'coral-Icon--star totem-FavoriteIcon--selected': isDashboardFavorited(dashboard), 'coral-Icon--starStroke': !isDashboardFavorited(dashboard)}\\\\\\\"></i></button></td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><a class=\\\\\\\"coral-Link\\\\\\\" ui-sref=\\\\\\\"dashboard.view({dashboardId: dashboard._id})\\\\\\\">{{ dashboard.name }}</a></td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\">{{ getPluralizedOwners(getOwners(dashboard)) }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon coral-Icon--user coral-Icon--sizeXS totem-ManageTable-labelIcon\\\\\\\"></i>{{ dashboard.participants.length | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon coral-Icon--viewOn coral-Icon--sizeXS totem-ManageTable-labelIcon\\\\\\\"></i>{{ '18283' | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon coral-Icon--email coral-Icon--sizeXS totem-ManageTable-labelIcon\\\\\\\"></i>Me + 3</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-ManageTable-cell--updated\\\\\\\">{{ dashboard.modified | date: 'mediumDate' }}</td>\\\\n </tr>\\\\n </tbody>\\\\n </table>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/manage/views/manage.tpl.html\\n ** module id = 27\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<ad-hoc-manage-toolbar collections=\\\\\\\"adHocCollections\\\\\\\" selected-collections=\\\\\\\"selectedAdHocCollections\\\\\\\"></ad-hoc-manage-toolbar>\\\\n<div class=\\\\\\\"u-totem-contentUnderActionBar\\\\\\\">\\\\n <table class=\\\\\\\"coral-Table totem-AdHocTable totem-AdHocTable--collections\\\\\\\" selection-table row-models=\\\\\\\"collections\\\\\\\" selected-row-models=\\\\\\\"selectedAdHocCollections\\\\\\\" selection-model-map=\\\\\\\"collection\\\\\\\">\\\\n <thead>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--select\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-all-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell\\\\\\\" ng-click=\\\\\\\"setSort('name')\\\\\\\" sort-header>\\\\n {{ 'name' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'name'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--createdBy\\\\\\\" sort-header>\\\\n {{ 'createdby' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--dashboardCount\\\\\\\" sort-header>\\\\n {{ 'dashboards' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--records\\\\\\\" ng-click=\\\\\\\"setSort('rowCount')\\\\\\\" sort-header>\\\\n {{ 'records' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === 'rowCount'\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--capacity\\\\\\\" ng-click=\\\\\\\"setSort(getCapacity)\\\\\\\" sort-header>\\\\n {{ 'capacity' | i18n }}\\\\n <i class=\\\\\\\"coral-Icon\\\\\\\" sort-header-icon sort-active=\\\\\\\"sortPredicate === getCapacity\\\\\\\" sort-ascending=\\\\\\\"!sortReverse\\\\\\\"></i>\\\\n </th>\\\\n </tr>\\\\n </thead>\\\\n <tbody>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-repeat=\\\\\\\"collection in adHocCollections | orderBy:sortPredicate:sortReverse\\\\\\\">\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\">\\\\n <label class=\\\\\\\"coral-Checkbox\\\\\\\">\\\\n <input class=\\\\\\\"coral-Checkbox-input\\\\\\\" type=\\\\\\\"checkbox\\\\\\\" select-item-checkbox>\\\\n <span class=\\\\\\\"coral-Checkbox-checkmark\\\\\\\"></span>\\\\n </label>\\\\n </td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\"><a class=\\\\\\\"coral-Link\\\\\\\" ui-sref=\\\\\\\"collection({collectionId:collection.id})\\\\\\\">{{ collection.name }}</a><br>{{collection.description}}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\"><i class=\\\\\\\"coral-Icon totem-ManageTable-labelIcon coral-Icon--user coral-Icon--sizeXS\\\\\\\"></i>{{ 'Travis Funk' }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\">{{ 1 | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell\\\\\\\">{{ collection.rowCount | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell--capacity\\\\\\\">\\\\n <ad-hoc-capacity usage=\\\\\\\"{{collection.rowCount}}\\\\\\\" capacity=\\\\\\\"{{collection.maxRows}}\\\\\\\"></ad-hoc-capacity>\\\\n </td>\\\\n </tr>\\\\n </tbody>\\\\n </table>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/views/ad-hoc.tpl.html\\n ** module id = 28\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar-title\\\\\\\">\\\\n {{ 'manageCollections' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancelEditing()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-disabled=\\\\\\\"!collection.name || (!collection && !uploadFileName) || saveDisabled\\\\\\\" ng-click=\\\\\\\"saveCollection()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n</div>\\\\n<div class=\\\\\\\"u-totem-contentUnderEditTitleBar\\\\\\\">\\\\n <div class=\\\\\\\"totem-ActionBar\\\\\\\" ng-show=\\\\\\\"collection.rowCount > 0\\\\\\\">\\\\n <div class=\\\\\\\"coral-ButtonGroup\\\\\\\">\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--alias\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Export</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"forceUploadVisibility = true\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Add Data</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--delete\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Delete Data</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--tableHistogram\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">View Schema</span></a>\\\\n </div>\\\\n </div>\\\\n <section class=\\\\\\\"totem-Section\\\\\\\">\\\\n <form class=\\\\\\\"coral-Form coral-Form--vertical\\\\\\\" style=\\\\\\\"width:100%\\\\\\\">\\\\n <label class=\\\\\\\"coral-Form-fieldlabel\\\\\\\">\\\\n <span class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'name' | i18n }}</span>\\\\n <input class=\\\\\\\"coral-Form-field coral-Textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" ng-model=\\\\\\\"collection.name\\\\\\\">\\\\n </label>\\\\n\\\\n <label class=\\\\\\\"coral-Form-fieldlabel\\\\\\\">\\\\n <span class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'description' | i18n }}</span>\\\\n <input class=\\\\\\\"u-totem-noMargin coral-Form-field coral-Textfield\\\\\\\" type=\\\\\\\"text\\\\\\\" ng-model=\\\\\\\"collection.description\\\\\\\" maxlength=\\\\\\\"255\\\\\\\">\\\\n </label>\\\\n </form>\\\\n </section>\\\\n <section class=\\\\\\\"totem-Section\\\\\\\" ng-show=\\\\\\\"forceUploadVisibility || (collection && !collection.rowCount)\\\\\\\">\\\\n <h4 class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'dataUpload' | i18n }}</h4>\\\\n <ad-hoc-data-upload save-disabled=\\\\\\\"saveDisabled\\\\\\\" upload-file-name=\\\\\\\"uploadFileName\\\\\\\" collection=\\\\\\\"collection\\\\\\\"></ad-hoc-data-upload>\\\\n </section>\\\\n <section class=\\\\\\\"totem-Section\\\\\\\" ng-show=\\\\\\\"collection.rowCount > 0\\\\\\\">\\\\n <h4 class=\\\\\\\"coral-Heading coral-Heading--4\\\\\\\">{{ 'uploadHistory' | i18n }}</h4>\\\\n <table class=\\\\\\\"totem-AdHocTable totem-AdHocTable--collection coral-Table coral-Table--bordered\\\\\\\">\\\\n <thead>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--name\\\\\\\">{{ 'fileName' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--dateUploaded\\\\\\\">{{ 'dateUploaded' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--records\\\\\\\">{{ 'records' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--dashboardCount\\\\\\\">{{ 'dashboards' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--capacity\\\\\\\">{{ 'capacity' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-headerCell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--expander\\\\\\\"></th>\\\\n </tr>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-click=\\\\\\\"showDetails = !showDetails\\\\\\\">\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\">{{ 'allData' | i18n }}</th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\"> - </th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\">{{ collection.rowCount | number }}</th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader\\\\\\\">3</th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader totem-AdHocTable-cell--capacity\\\\\\\">\\\\n <ad-hoc-capacity usage=\\\\\\\"{{collection.rowCount}}\\\\\\\" capacity=\\\\\\\"{{collection.maxRows}}\\\\\\\"></ad-hoc-capacity>\\\\n </th>\\\\n <th class=\\\\\\\"coral-Table-cell totem-AdHocTable-headerCell totem-AdHocTable-headerCell--nonheader totem-AdHocTable-headerCell--expander\\\\\\\">\\\\n <i class=\\\\\\\"totem-ActionButton-icon coral-Icon\\\\\\\" ng-class=\\\\\\\"{ 'coral-Icon--chevronDown': showDetails, 'coral-Icon--chevronRight': !showDetails }\\\\\\\"></i>\\\\n </th>\\\\n </tr>\\\\n </thead>\\\\n <tbody ng-show='showDetails'>\\\\n <tr class=\\\\\\\"coral-Table-row\\\\\\\" ng-repeat=\\\\\\\"upload in collection.uploads\\\\\\\">\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">{{ upload.fileName || ('unknownFileName' | i18n) }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">{{ upload.dateUploaded | date }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">{{ upload.rowCount | number }}</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">-</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata\\\\\\\">-</td>\\\\n <td class=\\\\\\\"coral-Table-cell totem-AdHocTable-cell totem-AdHocTable-cell--subdata totem-AdHocTable-cell--deleteUpload\\\\\\\" ng-click=\\\\\\\"deleteUpload(collection, upload)\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--delete\\\\\\\"></i></td>\\\\n </tr>\\\\n </tbody>\\\\n </table>\\\\n </section>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/views/collection.tpl.html\\n ** module id = 29\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<form class=\\\\\\\"coral-Form coral-Form--vertical\\\\\\\" style=\\\\\\\"width:100%\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar-title\\\\\\\">\\\\n {{ 'validateUploadedData' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancelUpload()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-disabled=\\\\\\\"saveDisabled\\\\\\\" ng-click=\\\\\\\"saveCollection()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n</form>\\\\n<div class=\\\\\\\"u-totem-contentUnderEditTitleBar\\\\\\\">\\\\n <div class=\\\\\\\"coral-Alert coral-Alert--error\\\\\\\" ng-show=\\\\\\\"uploadError\\\\\\\">\\\\n <i class=\\\\\\\"coral-Alert-typeIcon coral-Icon coral-Icon--sizeS coral-Icon--alert\\\\\\\"></i>\\\\n <strong class=\\\\\\\"coral-Alert-title\\\\\\\">Error</strong>\\\\n <div class=\\\\\\\"coral-Alert-message\\\\\\\">{{ uploadErrorMessage }}</div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-contents\\\\\\\">\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowHeaderBlock\\\\\\\" >\\\\n <!-- fixed row headers -->\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowDescriptor\\\\\\\">\\\\n {{ 'adHocAttributeName' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowDescriptor\\\\\\\">\\\\n {{ 'adHocAttributeType' | i18n }}\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-dataSpacer\\\\\\\">\\\\n <!-- spacer -->\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-rowDescriptor\\\\\\\">\\\\n <!-- data header -->\\\\n {{ 'sampleData' | i18n }}\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-AdHocValidate-sampleDataContainer\\\\\\\">\\\\n <table>\\\\n <tr class=\\\\\\\"totem-AdHocValidate-nameRow\\\\\\\">\\\\n <td class=\\\\\\\"totem-AdHocValidate-metaData totem-AdHocValidate-metaData--textbox\\\\\\\" ng-repeat=\\\\\\\"(adHocColumnKey,adHocColumn) in adHocSchema\\\\\\\">\\\\n <input ng-if=\\\\\\\"schemaEditable\\\\\\\" type=\\\\\\\"text\\\\\\\" class=\\\\\\\"coral-Textfield totem-AdHocValidate-metaDataInput\\\\\\\" ng-model=\\\\\\\"adHocSchema[adHocColumnKey].prettyName\\\\\\\">\\\\n <div class=\\\\\\\"totem-AdHocValidate-metaDataInput totem-AdHocValidate-metaDataInput--noEdit\\\\\\\" ng-if=\\\\\\\"!schemaEditable\\\\\\\">{{adHocSchema[adHocColumnKey].prettyName}}</div>\\\\n </td>\\\\n </tr>\\\\n <tr>\\\\n <td class=\\\\\\\"totem-AdHocValidate-metaData totem-AdHocValidate-metaData--select\\\\\\\" ng-repeat=\\\\\\\"(adHocColumnKey,adHocColumn) in adHocSchema\\\\\\\">\\\\n <cui-select ng-if=\\\\\\\"schemaEditable\\\\\\\" class=\\\\\\\"totem-AdHocValidate-metaDataInput\\\\\\\" id='adHocTypeId' options=\\\\\\\"columnOptions\\\\\\\" label=\\\\\\\"'label'\\\\\\\" selection=\\\\\\\"selectedTypes[adHocColumnKey]\\\\\\\"></cui-select>\\\\n <div class=\\\\\\\"totem-AdHocValidate-metaDataInput totem-AdHocValidate-metaDataInput--noEdit\\\\\\\" ng-if=\\\\\\\"!schemaEditable\\\\\\\">{{selectedTypes[adHocColumnKey].label}}</div>\\\\n </td>\\\\n </tr>\\\\n <tr style=\\\\\\\"padding:0;margin:0;\\\\\\\">\\\\n <td class=\\\\\\\"totem-AdHocValidate-dataSpacer\\\\\\\" ng-repeat=\\\\\\\"adHocColumn in adHocSchema\\\\\\\"></td>\\\\n </tr>\\\\n <tr ng-repeat=\\\\\\\"dataRow in adHocData\\\\\\\">\\\\n <td class=\\\\\\\"totem-AdHocValidate-sampleData totem-AdHocValidate-sampleData--datum\\\\\\\" ng-repeat=\\\\\\\"(adHocColumnKey, adHocColumnValue) in adHocSchema\\\\\\\">{{ dataRow[adHocColumnKey] }}</td>\\\\n </tr>\\\\n </table>\\\\n </div>\\\\n </div>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/views/validate-upload.tpl.html\\n ** module id = 30\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<dashboard-rail ng-show=\\\\\\\"showRail && !editable\\\\\\\"></dashboard-rail>\\\\n<div class=\\\\\\\"totem-NonRail\\\\\\\" editable=\\\\\\\"editable\\\\\\\">\\\\n <div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\" ng-if=\\\\\\\"editable\\\\\\\">\\\\n <name-editor name=\\\\\\\"dashboard.name\\\\\\\"></name-editor>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancelEditing()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-click=\\\\\\\"saveDashboard()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n </div>\\\\n <div class=\\\\\\\"totem-ActionBar\\\\\\\">\\\\n <div class=\\\\\\\"coral-ButtonGroup\\\\\\\">\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"toggleRail()\\\\\\\" ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--dashboard\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ getRailToggleText(showRail) }}</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ui-sref=\\\\\\\"dashboard.edit({dashboardId: dashboard._id})\\\\\\\" ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--edit\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'edit' | i18n }}</span></a>\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" href=\\\\\\\"/dashboards/{{dashboard._id}}.pdf?hour=1\\\\\\\" download ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--download\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'download' | i18n }}</span></a>\\\\n <!--<a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" href=\\\\\\\"/dashboards/{{dashboard._id}}.pptx?hour=1\\\\\\\" download ng-if=\\\\\\\"!editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--download\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">Download PPT</span></a>-->\\\\n\\\\n <a class=\\\\\\\"totem-ActionButton coral-ButtonGroup-item coral-Button coral-Button--secondary coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"newInstrumentConfigVisible = true\\\\\\\" ng-show=\\\\\\\"editable\\\\\\\"><i class=\\\\\\\"totem-ActionButton-icon coral-Icon coral-Icon--addCircle\\\\\\\"></i><span class=\\\\\\\"totem-ActionButton-label\\\\\\\">{{ 'addInstrument' | i18n }}</span></a>\\\\n </div>\\\\n </div>\\\\n <div ng-class=\\\\\\\"{'u-totem-contentUnderEditActionBar': editable, 'u-totem-contentUnderActionBar': !editable}\\\\\\\" responsive-evaluator editable=\\\\\\\"editable\\\\\\\">\\\\n <div class=\\\\\\\"totem-Measurements\\\\\\\" ng-if=\\\\\\\"editable\\\\\\\" ng-style=\\\\\\\"getMeasurementsStyle()\\\\\\\">\\\\n <ruler></ruler>\\\\n <media-definition-track></media-definition-track>\\\\n <media-definition-menu media-definitions=\\\\\\\"mediaDefinitions\\\\\\\"></media-definition-menu>\\\\n </div>\\\\n <dashboard-canvas editable=\\\\\\\"editable\\\\\\\"></dashboard-canvas>\\\\n </div>\\\\n <new-instrument-configuration ng-show=\\\\\\\"editable\\\\\\\" visible=\\\\\\\"newInstrumentConfigVisible\\\\\\\"></new-instrument-configuration>\\\\n</div>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/views/dashboard.tpl.html\\n ** module id = 31\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-EditTitleBar coral--dark\\\\\\\">\\\\n <name-editor name=\\\\\\\"instrument.title\\\\\\\"></name-editor>\\\\n <div class=\\\\\\\"totem-EditTitleBar-buttons\\\\\\\">\\\\n <button class=\\\\\\\"totem-EditTitleBar-cancelButton coral-Button coral-Button--quiet\\\\\\\" ng-click=\\\\\\\"cancel()\\\\\\\">{{ 'cancel' | i18n }}</button>\\\\n <button class=\\\\\\\"totem-EditTitleBar-saveButton coral-Button coral-Button--primary\\\\\\\" ng-click=\\\\\\\"save()\\\\\\\">{{ 'save' | i18n }}</button>\\\\n </div>\\\\n</div>\\\\n<instrument-editor-bootstrap instrument=\\\\\\\"instrument\\\\\\\"></instrument-editor-bootstrap>\\\\n\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/views/instrument.tpl.html\\n ** module id = 32\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div class=\\\\\\\"totem-InstrumentCanvas totem-InstrumentCanvas--renderOnly\\\\\\\">\\\\n <div class=\\\\\\\"totem-InstrumentCanvas-content\\\\\\\">\\\\n <instrument instrument=\\\\\\\"instrument\\\\\\\" class=\\\\\\\"totem-InstrumentCanvas-instrument\\\\\\\"></instrument>\\\\n </div>\\\\n</div>\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/views/render-instrument.tpl.html\\n ** module id = 33\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.adHocManageToolbar', [\\n require('../../common/services/ad-hoc-service').name,\\n require('../../common/directives/share').name\\n ])\\n .directive('adHocManageToolbar', function(user, $state, $q, dashboardService, i18nFilter, adHocService) {\\n return {\\n restrict: 'EA',\\n scope: {\\n collections: '=',\\n selectedCollections: '='\\n },\\n template: require('./ad-hoc-manage-toolbar.tpl.html'),\\n link: function(scope, element, attrs) {\\n scope.showSearchField = false;\\n scope.leaveModalVisible = false;\\n scope.deleteModalVisible = false;\\n scope.deleteModalDescription = '';\\n\\n scope.viewCollection = function() {\\n $state.go('collection', {\\n collectionId: scope.selectedCollections[0]._id\\n });\\n };\\n\\n scope.deleteCollections = function() {\\n scope.deleteCollectionDescription = i18nFilter('deleteCollectionDescription', {\\n NUM_COLLECTIONS: scope.selectedCollections.length\\n });\\n\\n scope.deleteCollectionTitle = i18nFilter('deleteCollectionTitle', {\\n NUM_COLLECTIONS: scope.selectedCollections.length\\n });\\n\\n scope.deleteModalVisible = true;\\n };\\n\\n scope.confirmDeleteCollection = function() {\\n var promises = [];\\n var origSelectedCollections = [];\\n scope.selectedCollections.forEach(function(collection) {\\n promises.push(adHocService.deleteCollection(collection));\\n });\\n\\n $q.all(promises).then(function(collection) {\\n scope.collections.forEach(function(collection) {\\n var index = scope.selectedCollections.indexOf(collection);\\n if (index > -1) {\\n origSelectedCollections.push(collection);\\n scope.selectedCollections.splice(index, 1);\\n }\\n });\\n });\\n };\\n\\n scope.isSearchable = function() {\\n return scope.selectedCollections.length === 0;\\n };\\n\\n scope.isViewable = function() {\\n return scope.selectedCollections.length === 1;\\n };\\n\\n scope.isEditable = function() {\\n return scope.selectedDashboards.length === 1 && scope.selectedDashboards[0].isEntityAnOwner(user);\\n };\\n\\n scope.isDeletable = function() {\\n // console.log('deleteable');\\n // var owningOnly = true;\\n // for (var i = 0; i < scope.selectedCollections.length; i++) {\\n // if (!scope.selectedCollections[i].isEntityAnOwner(user)) {\\n // owningOnly = false;\\n // }\\n // }\\n // return owningOnly;\\n return true;\\n };\\n\\n scope.isShareable = function() {\\n return scope.selectedCollections.length === 1;\\n };\\n\\n scope.isDeleteViewable = function() {\\n if(scope.selectedCollections.length > 0) {\\n return true;\\n }\\n for (var i = 0; i < scope.selectedCollections.length; i++) {\\n if (scope.selectedCollections[i].isEntityAnOwner(user)) {\\n return true;\\n }\\n }\\n return false;\\n };\\n\\n scope.createCollection = function() {\\n adHocService.resetCurrentCollection();\\n $state.go('collection',{collectionId:null});\\n };\\n\\n scope.saveCollection = function(collection) {\\n adHocService.savePermissions(collection);\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-manage-toolbar.js\\n ** module id = 34\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.adHocSearch', [])\\n .directive('adHocSearch', function() {\\n return {\\n restrict: 'EA',\\n scope: {\\n dashboards: '='\\n },\\n template: require('./ad-hoc-search.tpl.html'),\\n link: function(scope, element, attrs) {\\n element.find('.js-coral-Autocomplete-textfield').focus();\\n element.on('change:value', function(event, payload) {\\n // TODO: Somehow change the dashboard filter.\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-search.js\\n ** module id = 35\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.adHocCapacity', [\\n ])\\n .directive('adHocCapacity', function() {\\n return {\\n restrict: 'E',\\n scope: {\\n capacity:'@',\\n usage:'@'\\n },\\n template: require('./ad-hoc-capacity.tpl.html'),\\n link: function (scope, element, attrs) {\\n scope.getPercent = function(precision) {\\n var percent = scope.usage / scope.capacity * 100;\\n if(percent > 100) { percent = 100; }\\n if(precision) {\\n percent = percent.toPrecision(precision);\\n } else {\\n percent = Math.round(percent);\\n }\\n return percent;\\n };\\n\\n scope.getClass = function(percent) {\\n var ret = 'totem-Capacity-barSegment--good'; // green\\n if(percent > 70) {\\n ret = 'totem-Capacity-barSegment--warn'; // yellow above 70%\\n }\\n if(percent > 90) { \\n ret = 'totem-Capacity-barSegment--danger'; // red above 90%\\n }\\n return ret;\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-capacity.js\\n ** module id = 36\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dataUpload', [\\n require('./ad-hoc-file-upload').name\\n ])\\n .directive('adHocDataUpload', function() {\\n return {\\n restrict: 'E',\\n template: require('./ad-hoc-data-upload.tpl.html'),\\n scope: {\\n collection:'=',\\n uploadFileName:'=',\\n saveDisabled:'='\\n }\\n };\\n});\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/ad-hoc/directives/ad-hoc-data-upload.js\\n ** module id = 37\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardCanvas', [\\n require('../../common/directives/draggable').name,\\n require('../../common/directives/resizeable').name,\\n require('../../common/directives/tap').name,\\n require('../../common/services/dashboard-workspace').name,\\n require('../../instrument/services/instrument-event-bus').name\\n ])\\n .directive('dashboardCanvas', function(gridSpacing, eventBus, dashboardWorkspaceService, instrumentEventBus, minInstrumentWidth, minInstrumentHeight) {\\n return {\\n restrict: 'AE',\\n scope: {\\n editable: '='\\n },\\n template: require('./dashboard-canvas.tpl.html'),\\n link: function(scope, element, attrs) {\\n /**\\n * Cached map where the key is the instrument ID and the value is the corresponding media layout.\\n * This is for optimization.\\n */\\n var mediaLayoutByInstrumentId;\\n\\n scope.getGridStyle = function() {\\n if (dashboardWorkspaceService.mediaDefinition && dashboardWorkspaceService.mediaLayouts) {\\n var gridHeight;\\n\\n if (dashboardWorkspaceService.mediaLayouts.length) {\\n // Set the grid height to accommodate down to the bottom of the lowest media layout.\\n var maxY = 0;\\n\\n dashboardWorkspaceService.mediaLayouts.forEach(function(mediaLayout) {\\n maxY = Math.max(maxY, mediaLayout.y + mediaLayout.height);\\n });\\n\\n gridHeight = (maxY + 1) * gridSpacing; // + 1 just to give an arbitrary little gap at the bottom\\n } else {\\n gridHeight = 400;\\n }\\n\\n return {\\n 'background-size': gridSpacing + 'px ' + gridSpacing + 'px',\\n width: dashboardWorkspaceService.mediaDefinition.width,\\n height: gridHeight\\n };\\n }\\n return null;\\n };\\n\\n scope.getInstrumentStyle = function(instrument) {\\n var mediaLayout = mediaLayoutByInstrumentId[instrument._id];\\n if (mediaLayout) {\\n return {\\n left: mediaLayout.x * gridSpacing,\\n top: mediaLayout.y * gridSpacing,\\n width: mediaLayout.width * gridSpacing,\\n height: mediaLayout.height * gridSpacing\\n };\\n } else {\\n return {\\n visible: false\\n };\\n }\\n };\\n\\n scope.constrainDrag = function(rect) {\\n var container = element.find('.totem-DashboardCanvas');\\n var width = container.innerWidth();\\n var height = container.innerHeight();\\n\\n // Constrain to the bounds of the dashboard.\\n rect.x = Math.min(Math.max(0, rect.x), width - rect.width);\\n rect.y = Math.min(Math.max(0, rect.y), height - rect.height);\\n\\n // Adjust to grid\\n rect.x -= (rect.x % gridSpacing);\\n rect.y -= (rect.y % gridSpacing);\\n\\n return rect;\\n };\\n\\n scope.constrainResize = function(rect, origRect) {\\n var container = element.find('.totem-DashboardCanvas');\\n var containerRect = {\\n width: container.innerWidth(),\\n height: container.innerHeight(),\\n x: container.position().left,\\n y: container.position().top\\n };\\n\\n // Enforce minimum dimensions\\n rect.width = Math.max(minInstrumentWidth, rect.width);\\n rect.height = Math.max(minInstrumentWidth, rect.height);\\n if(rect.width == minInstrumentWidth) {\\n rect.x = Math.min(origRect.x + (origRect.width - rect.width), rect.x);\\n }\\n\\n // Forbid escaping the container\\n if(rect.x + rect.width > containerRect.width) {\\n rect.width = containerRect.width - rect.x;\\n }\\n if(rect.x <= 0) {\\n rect.x = 0;\\n rect.width = origRect.x + origRect.width;\\n }\\n\\n // Adjust to grid\\n rect.height -= (rect.height % gridSpacing);\\n rect.x -= (rect.x % gridSpacing);\\n if(rect.width % gridSpacing !== 0) {\\n rect.width += gridSpacing - (rect.width % gridSpacing);\\n }\\n\\n return rect;\\n };\\n\\n scope.bringToFront = function(instrument) {\\n if (!scope.editable) {\\n return;\\n }\\n\\n dashboardWorkspaceService.dashboard.bringInstrumentToFront(\\n instrument, dashboardWorkspaceService.mediaDefinition);\\n };\\n\\n var commitRect = function(instrument, rect) {\\n var mediaLayout = mediaLayoutByInstrumentId[instrument._id];\\n mediaLayout.width = rect.width / gridSpacing;\\n mediaLayout.height = rect.height / gridSpacing;\\n mediaLayout.x = rect.x / gridSpacing;\\n mediaLayout.y = rect.y / gridSpacing;\\n };\\n\\n scope.dragContinue = scope.dragComplete = commitRect;\\n\\n scope.resizeBegin = function(instrument) {\\n instrumentEventBus.publish({\\n topic: 'resizing',\\n to: instrument._id\\n });\\n };\\n\\n scope.resizeContinue = commitRect;\\n\\n scope.resizeComplete = function(instrument, rect) {\\n instrumentEventBus.publish({\\n topic: 'resized',\\n to: instrument._id\\n });\\n commitRect(instrument, rect);\\n };\\n\\n scope.$watchGroup([\\n function() { return dashboardWorkspaceService.instruments; },\\n function() { return dashboardWorkspaceService.mediaLayouts; }\\n ], function(newValues) {\\n var instruments = newValues[0];\\n var mediaLayouts = newValues[1];\\n if (instruments && mediaLayouts) {\\n mediaLayoutByInstrumentId = {};\\n instruments.forEach(function(instrument) {\\n mediaLayouts.forEach(function(mediaLayout) {\\n if (mediaLayout.instrumentId === instrument._id) {\\n mediaLayoutByInstrumentId[instrument._id] = mediaLayout;\\n return false;\\n }\\n });\\n });\\n\\n scope.instruments = instruments;\\n }\\n });\\n\\n // Watch for z-index changes within the media layout models. When we see a change, sort the instruments\\n // based on their z-index.\\n scope.$watch(function() {\\n if (dashboardWorkspaceService.mediaLayouts) {\\n var zIndexHash = '';\\n\\n var mediaLayouts = dashboardWorkspaceService.mediaLayouts;\\n for (var i = 0; i < mediaLayouts.length; i++) {\\n var mediaLayout = mediaLayouts[i];\\n // I know this looks like a hack but it's the most performant way I can think of for detecting when\\n // z-index changes on any of the active media layouts. If you can think of a better way, please feel free\\n // to change. While we could deep watch the media layouts, a change to x, y, width, or height on the\\n // media layout would trigger the watcher. While we could create an array of z-index values from the\\n // media layouts, would would have to deep compare the array. Creating this hash seems more\\n // efficient because no deep watch is necessary.\\n\\n // Media layout ID needs to be included in the hash to support the case where a user changes\\n // media definitions and the media layouts for the new media definition contain the same z-index values\\n // in the same order as the media layouts of the previous media definition. In this case we still need to\\n // execute the instrument reordering process.\\n zIndexHash += mediaLayout._id + ':' + mediaLayout.zIndex + ',';\\n }\\n\\n return zIndexHash;\\n }\\n }, function() {\\n if (scope.instruments && dashboardWorkspaceService.mediaLayouts) {\\n sortInstrumentsByZIndex(scope.instruments, dashboardWorkspaceService.mediaLayouts);\\n }\\n });\\n\\n /**\\n * Sorts instruments by the z-index of their respective media layouts.\\n *\\n * This is used for ordering instruments on screen such that they are properly stacked in the z dimension\\n * using DOM element ordering rather than CSS z-index. We prefer element ordering over CSS z-index in order to\\n * avoid conflicting with the z-index of surrounding components in the application.\\n *\\n * @param instruments\\n * @param mediaLayouts\\n * @returns {*}\\n */\\n var sortInstrumentsByZIndex = function(instruments, mediaLayouts) {\\n instruments.sort(function(instrumentA, instrumentB) {\\n var mediaLayoutA = mediaLayoutByInstrumentId[instrumentA._id];\\n var mediaLayoutB = mediaLayoutByInstrumentId[instrumentB._id];\\n if (mediaLayoutA && mediaLayoutB) {\\n if (mediaLayoutA.zIndex === undefined) {\\n return -1;\\n } else if (mediaLayoutB.zIndex === undefined) {\\n return 1;\\n } else {\\n return mediaLayoutA.zIndex - mediaLayoutB.zIndex;\\n }\\n }\\n });\\n\\n return instruments;\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-canvas.js\\n ** module id = 38\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardRail', [\\n ])\\n .directive('dashboardRail', function(dashboardService, dashboardWorkspaceService) {\\n return {\\n restrict: 'AE',\\n template: require('./dashboard-rail.tpl.html'),\\n link: function(scope, element, attrs) {\\n dashboardService.query().then(function(dashboards) {\\n scope.dashboards = dashboards;\\n });\\n\\n scope.isActiveDashboard = function(dashboard) {\\n return dashboardWorkspaceService.dashboard && dashboardWorkspaceService.dashboard._id === dashboard._id;\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-rail.js\\n ** module id = 39\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.responsiveEvaluator', [\\n require('../services/event-bus').name,\\n require('../../common/services/debounce').name,\\n require('../../common/services/dashboard-workspace').name\\n ])\\n .directive('responsiveEvaluator', function($timeout, $window, dashboardWorkspaceService, eventBus, debounce) {\\n return {\\n scope: {\\n editable: '='\\n },\\n link: function(scope, element, attrs) {\\n var debouncedWindowResize = debounce(function() {\\n scope.$apply(function() {\\n findBestFitMediaDefinition();\\n });\\n }, 30);\\n\\n var findBestFitMediaDefinition = function() {\\n if (!dashboardWorkspaceService.dashboard) {\\n return;\\n }\\n\\n var bestFit, smallestFit,\\n width = element.innerWidth();\\n\\n dashboardWorkspaceService.dashboard.mediaDefinitions.forEach(function(definition) {\\n if (definition.width < width && (!bestFit || definition.width > bestFit.width)) {\\n bestFit = definition;\\n }\\n if (!smallestFit || definition.width < smallestFit.width) {\\n smallestFit = definition;\\n }\\n });\\n\\n if(!bestFit) {\\n bestFit = smallestFit;\\n }\\n\\n // Let's say the best fit media definition is 1000px wide and the width allotted for the dashboard\\n // (derived from the container width) is 1000px. The dashboard would fit nicely. However, say that dashboard\\n // is long enough that it requires vertical scrolling. When the vertical scrollbar shows up, a horizontal\\n // scrollbar shows up as well because the content is now too wide for the container width minus\\n // the vertical scrollbar width. This is a sketchy situation. Do we bump the dashboard down to the next\\n // smallest media definition (we could calculate whether a vertical scrollbar will show up beforehand by\\n // comparing the container height with positions and heights of media layouts)? Do we show leave the\\n // horizontal scrollbar? Do we hide the horizontal scrollbar and let the vertical scrollbar just cover a bit\\n // of the dashboard? We've decided to take the last approach. However, if the active media definition is the\\n // smallest media definition, we set the horizontal scrollbar to auto since the user may legitimately need to\\n // scroll horizontally to see all the dashboard content. This is definitely subject to change.\\n if (smallestFit === bestFit) {\\n element.css('overflow-x', 'auto');\\n } else {\\n element.css('overflow-x', 'hidden');\\n }\\n\\n dashboardWorkspaceService.mediaDefinition = bestFit;\\n };\\n\\n eventBus.subscribe('resetActiveMediaDefinition', function() {\\n // http://stackoverflow.com/questions/25330149/why-is-the-asyncqueue-processed-before-watchers/25330696\\n scope.$$postDigest(function() {\\n scope.$apply(findBestFitMediaDefinition);\\n });\\n });\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function() {\\n findBestFitMediaDefinition();\\n });\\n\\n scope.$watch('editable', function(editable) {\\n if (editable) {\\n angular.element($window).off('resize.mediaDefinition');\\n } else {\\n angular.element($window).on('resize.mediaDefinition', debouncedWindowResize);\\n\\n // When the user navigates from editing a dashboard to viewing a dashboard, we want make sure we're showing\\n // the best fit media definition rather than the last media definition the user was editing.\\n findBestFitMediaDefinition();\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/responsive-evaluator.js\\n ** module id = 40\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.dashboardInstrumentChrome', [\\n require('../services/event-bus').name\\n ])\\n .directive('dashboardInstrumentChrome', function(eventBus, $stateParams, $state, dashboardWorkspaceService) {\\n return {\\n restrict: 'AE',\\n scope: {\\n editable: '=',\\n instrument: '='\\n },\\n transclude: true,\\n template: require('./dashboard-instrument-chrome.tpl.html'),\\n link: function(scope, element, attrs) {\\n scope.editInstrument = function() {\\n $state.go('instrument.edit', {\\n dashboardId: $stateParams.dashboardId,\\n instrumentId: scope.instrument._id\\n });\\n };\\n\\n scope.removeInstrument = function() {\\n dashboardWorkspaceService.dashboard.removeInstrument(scope.instrument);\\n };\\n\\n scope.duplicateInstrument = function($event) {\\n // Normally something higher in the DOM would see the click and force this instrument to be on top of other\\n // instruments. If we were to let this happen during instrument duplication, it would be forced to be on top\\n // of the new duplicate. We want the duplicate to be on top.\\n $event.stopPropagation();\\n dashboardWorkspaceService.dashboard.duplicateInstrument(scope.instrument,\\n dashboardWorkspaceService.mediaDefinition);\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/dashboard-instrument-chrome.js\\n ** module id = 41\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionTrack', [\\n require('./media-definition-range').name,\\n require('./media-definition-rename-popover').name,\\n require('./media-definition-delete-popover').name,\\n require('../services/event-bus').name,\\n require('../../common/services/uuid').name,\\n require('../../common/services/dashboard-workspace').name,\\n require('../../instrument/services/instrument-event-bus').name\\n ])\\n .directive('mediaDefinitionTrack', function(eventBus, uuid, dashboardWorkspaceService, instrumentEventBus, $timeout,\\n gridSpacing, minMediaDefinitionWidth) {\\n\\n return {\\n restrict: 'AE',\\n scope: true,\\n replace: true,\\n template: require('./media-definition-track.tpl.html'),\\n link: function(scope, element, attrs) {\\n // TODO: Do this in a more Angular way?\\n var getThumbByMediaDefinition = function(mediaDefinition) {\\n var thumbs = element.find('.totem-MediaDefinitionThumb').toArray();\\n for (var i = 0; i < thumbs.length; i++) {\\n var thumb = $(thumbs[i]);\\n if (thumb.scope().mediaDefinition == mediaDefinition) {\\n return thumb;\\n }\\n }\\n };\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function(dashboard) {\\n if (dashboard) {\\n scope.mediaDefinitions = dashboard.mediaDefinitions;\\n }\\n });\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.mediaDefinition;\\n }, function(mediaDefinition) {\\n scope.activeMediaDefinition = mediaDefinition;\\n });\\n\\n scope.getRangeStyle = function(mediaDefinition) {\\n // Potential optimization point since we're sorting media definitions each time this is called (once for\\n // every media definition).\\n var mediaDefinitions = dashboardWorkspaceService.dashboard.sortMediaDefinitions();\\n var index = mediaDefinitions.indexOf(mediaDefinition);\\n if (index > 0) {\\n var previousMediaDefinition = mediaDefinitions[index - 1];\\n return {\\n left: previousMediaDefinition.width,\\n width: mediaDefinition.width - previousMediaDefinition.width\\n };\\n } else {\\n return {\\n left: 0,\\n width: mediaDefinition.width\\n };\\n }\\n };\\n\\n scope.activateMediaDefinition = function(mediaDefinition) {\\n dashboardWorkspaceService.mediaDefinition = mediaDefinition;\\n };\\n\\n scope.getThumbStyle = function(mediaDefinition) {\\n var style = {\\n left: mediaDefinition.width\\n };\\n return style;\\n };\\n\\n ///////////////////////////\\n // Thumb dragging\\n ///////////////////////////\\n\\n scope.constrainThumbDrag = function(rect) {\\n rect.y = 0;\\n rect.x = Math.min(Math.max(minMediaDefinitionWidth, rect.x), element.width());\\n rect.x -= rect.x % gridSpacing; // Snap to grid\\n return rect;\\n };\\n\\n // Media layouts pertaining to the media definition thumb being dragged.\\n var mediaLayoutsDrag,\\n // Copies of the media layouts pertaining to the media definition thumb being dragged. These contain the state\\n // as it was when the drag started.\\n mediaLayoutCopiesDragBegin,\\n // The width of the media definition being dragged as it was when the drag started.\\n mediaDefinitionWidthDragBegin;\\n\\n scope.thumbDragBegin = function(mediaDefinition) {\\n if (mediaDefinition === dashboardWorkspaceService.mediaDefinition) {\\n instrumentEventBus.publish({\\n topic: 'resizing'\\n });\\n }\\n mediaLayoutsDrag = dashboardWorkspaceService.dashboard.getMediaLayoutsForMediaDefinition(mediaDefinition);\\n mediaLayoutCopiesDragBegin = angular.copy(mediaLayoutsDrag);\\n mediaDefinitionWidthDragBegin = mediaDefinition.width;\\n };\\n\\n scope.thumbDragContinue = function(mediaDefinition, rect) {\\n mediaDefinition.width = rect.x;\\n\\n // If the name is in the format #px (which is default) then automatically update\\n // the name to match the new width.\\n if (/^\\\\d+px$/g.test(mediaDefinition.name)) {\\n mediaDefinition.name = rect.x + 'px';\\n }\\n\\n dashboardWorkspaceService.dashboard.resampleMediaLayouts(\\n mediaLayoutCopiesDragBegin,\\n mediaLayoutsDrag,\\n mediaDefinitionWidthDragBegin,\\n mediaDefinition.width);\\n };\\n\\n scope.thumbDragComplete = function(mediaDefinition) {\\n if (mediaDefinition === dashboardWorkspaceService.mediaDefinition) {\\n instrumentEventBus.publish({\\n topic: 'resized'\\n });\\n }\\n };\\n\\n ///////////////////////////\\n // Popover handling\\n ///////////////////////////\\n\\n // Unfortunately this has to be an object instead of a simple boolean in order to allow the popover directive to\\n // set the boolean and be able to see the change from within this directive. This is due to how scopes use\\n // prototypal inheritance to \\\"shadow\\\" the parent scope.\\n // Sound mysterious? See https://github.com/angular/angular.js/wiki/Understanding-Scopes for an explanation.\\n scope.renamePopoverVisibility = { visible: false };\\n scope.createPopoverVisibility = { visible: false };\\n scope.deletePopoverVisibility = { visible: false };\\n\\n var showPopover = function(mediaDefinition, popoverVisibilityName) {\\n var scrollParent = element.scrollParent(),\\n scrollParentWidth = scrollParent.width(),\\n thumbBuffer = 50; // Make sure the thumb is this many pixels away from the side of the scrollable container\\n\\n scope.popoverThumb = getThumbByMediaDefinition(mediaDefinition);\\n scope.popoverMediaDefinition = mediaDefinition;\\n\\n // Make sure the media definition thumb is visible before showing the popover.\\n var newScrollLeft;\\n\\n if (mediaDefinition.width < scrollParent[0].scrollLeft + thumbBuffer) {\\n newScrollLeft = mediaDefinition.width - thumbBuffer;\\n } else if (mediaDefinition.width > scrollParent[0].scrollLeft + scrollParentWidth - thumbBuffer) {\\n newScrollLeft = mediaDefinition.width + thumbBuffer - scrollParentWidth;\\n }\\n\\n var makeVisible = function() {\\n scope[popoverVisibilityName].visible = true;\\n };\\n\\n if (newScrollLeft !== undefined) {\\n scrollParent.animate({\\n scrollLeft: newScrollLeft\\n }, {\\n duration: 300,\\n done: function() {\\n scope.$apply(makeVisible);\\n }\\n });\\n } else {\\n makeVisible();\\n }\\n };\\n\\n eventBus.subscribe('renameMediaDefinition', function(mediaDefinition) {\\n showPopover(mediaDefinition, 'renamePopoverVisibility');\\n }, scope);\\n\\n eventBus.subscribe('addMediaDefinition', function() {\\n var previousMediaDefinition = dashboardWorkspaceService.mediaDefinition;\\n var newMediaDefinition = dashboardWorkspaceService.dashboard.createMediaDefinition(previousMediaDefinition);\\n dashboardWorkspaceService.mediaDefinition = newMediaDefinition;\\n\\n scope.cancelCreate = function() {\\n dashboardWorkspaceService.mediaDefinition = previousMediaDefinition;\\n dashboardWorkspaceService.dashboard.removeMediaDefinition(newMediaDefinition);\\n };\\n\\n // We have to wait for the thumb for the new media definition to be created before we can show\\n // the popover at its position.\\n $timeout(function() {\\n showPopover(newMediaDefinition, 'createPopoverVisibility');\\n });\\n }, scope);\\n\\n eventBus.subscribe('deleteMediaDefinition', function(mediaDefinition) {\\n showPopover(mediaDefinition, 'deletePopoverVisibility');\\n }, scope);\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-track.js\\n ** module id = 42\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.mediaDefinitionMenu', [\\n require('../services/event-bus').name,\\n require('../../common/services/dashboard-workspace').name\\n ])\\n .directive('mediaDefinitionMenu', function(eventBus, dashboardWorkspaceService) {\\n return {\\n restrict: 'AE',\\n template: require('./media-definition-menu.tpl.html'),\\n scope: true,\\n link: function(scope, element, attrs) {\\n var popover;\\n\\n scope.togglePopover = function($event) {\\n var popoverElement = $('.totem-MediaDefinitionMenu-popover');\\n popover = popoverElement.data('popover');\\n if (!popover) {\\n popover = new CUI.Popover({\\n element: popoverElement,\\n pointAt: $event.currentTarget,\\n alignFrom: 'right'\\n });\\n }\\n popover.toggleVisibility();\\n };\\n\\n scope.rowChildMouseenter = scope.rowChildFocus = function(event) {\\n $(event.currentTarget.parentNode).addClass('is-highlighted');\\n };\\n\\n scope.rowChildMouseleave = scope.rowChildBlur = function(event) {\\n var parent = $(event.currentTarget.parentNode);\\n if (!parent.children(':focus').length) {\\n parent.removeClass('is-highlighted');\\n }\\n };\\n\\n scope.activateMediaDefinition = function(mediaDefinition) {\\n popover.hide();\\n dashboardWorkspaceService.mediaDefinition = mediaDefinition;\\n };\\n\\n scope.editMediaDefinition = function(mediaDefinition) {\\n popover.hide();\\n eventBus.publish('renameMediaDefinition', mediaDefinition);\\n };\\n\\n scope.deleteMediaDefinition = function(mediaDefinition) {\\n popover.hide();\\n eventBus.publish('deleteMediaDefinition', mediaDefinition);\\n };\\n\\n scope.addMediaDefinition = function() {\\n popover.hide();\\n eventBus.publish('addMediaDefinition');\\n };\\n\\n scope.$watch(function() {\\n return dashboardWorkspaceService.dashboard;\\n }, function(dashboard) {\\n if (dashboard) {\\n scope.mediaDefinitions = dashboard.mediaDefinitions;\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/media-definition-menu.js\\n ** module id = 43\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.ruler', [])\\n .directive('ruler', function() {\\n return {\\n restrict: 'AE',\\n link: function(scope, element, attrs) {\\n var tickWidth = 50;\\n\\n // How many labels should we make? Well, we could make as many as fill the width of the element,\\n // but what happens when the user makes the window larger? We could watch for window resize events\\n // and generate more. But what happens when the ruler container gets larger without the window resizing\\n // (like if a side panel gets hidden)? Rather than deal with the fringe cases, we'll go with a width which\\n // covers most resolutions or the width of the element, whichever is larger.\\n var maxWidth = Math.max(2700, element.width());\\n\\n element.addClass('totem-Ruler');\\n\\n var numLabels = Math.ceil(maxWidth / 50);\\n var label;\\n\\n for (var i = 0; i < numLabels; i++) {\\n label = angular.element('<span class=\\\"totem-Ruler-label\\\">' + (i * tickWidth) + '</span>');\\n label.css({\\n position: 'absolute',\\n top: -1,\\n left: (i * tickWidth) + 3\\n });\\n element.append(label);\\n }\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/directives/ruler.js\\n ** module id = 44\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nmodule.exports = angular.module('totem.instrument', [\\n require('../services/instrument-event-bus').name\\n ])\\n .directive('instrument', function(eventBus, instrumentEventBus, $compile, $q) {\\n return {\\n restrict: 'E',\\n scope: {\\n instrument: '='\\n },\\n template: require('./instrument.tpl.html'),\\n replace: true,\\n link: function(scope, element, attrs) {\\n var rendererScope;\\n\\n var content = element.find('.js-totem-DashboardInstrument-render');\\n\\n scope.showProgress = false;\\n scope.showFailure = false;\\n\\n var digestConfigChangedHandler = function() {\\n if (scope.instrument) {\\n rendererScope.config = scope.instrument.config;\\n }\\n };\\n\\n var processingHandler = function() {\\n scope.showProgress = true;\\n\\n // Assume that if there was a previous failure and the instrument is processing again\\n // that we should pull it out of a failure state.\\n scope.showFailure = false;\\n };\\n\\n var processedHandler = function() {\\n scope.showProgress = false;\\n };\\n\\n var failedHandler = function() {\\n scope.showFailure = true;\\n };\\n\\n var instrumentBus;\\n\\n scope.$watch('instrument', function(instrument) {\\n if (instrumentBus) {\\n instrumentBus.unsubscribeAll();\\n }\\n\\n if (instrument && instrument.type) {\\n instrumentEventBus.subscribe({\\n topic: 'configChanged',\\n fromPublisher: instrument._id,\\n handler: digestConfigChangedHandler\\n }, scope);\\n\\n instrumentEventBus.subscribe({\\n topic: 'processing',\\n fromPublisher: instrument._id,\\n handler: processingHandler\\n }, scope);\\n\\n instrumentEventBus.subscribe({\\n topic: 'processed',\\n fromPublisher: instrument._id,\\n handler: processedHandler\\n }, scope);\\n\\n instrumentEventBus.subscribe({\\n topic: 'failed',\\n fromPublisher: instrument._id,\\n handler: failedHandler\\n }, scope);\\n\\n var rendererFactory = require('../../../instruments/' + instrument.type + '/renderer/renderer');\\n\\n if (rendererScope) {\\n rendererScope.$destroy();\\n }\\n\\n var bus = instrumentEventBus.getInstrumentScopedInterface(instrument._id);\\n\\n var renderer = rendererFactory(instrument.config, bus);\\n\\n content.empty().append(renderer);\\n\\n // Allow instrument renderer to use AngularJS\\n rendererScope = scope.$new(true);\\n rendererScope.config = instrument.config;\\n rendererScope.eventBus = bus;\\n $compile(content.contents())(rendererScope);\\n }\\n });\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/instrument.js\\n ** module id = 45\\n ** module chunks = 0\\n **/\",\"'use strict';\\n\\nvar dashboardUtil = require('../../../../common/dashboard-util.js');\\n\\nmodule.exports = angular.module('totem.newInstrumentConfiguration', [\\n require('../../common/services/dashboard-workspace').name\\n ])\\n .directive('newInstrumentConfiguration', function($state, uuid, dashboardWorkspaceService, gridSpacing) {\\n return {\\n restrict: 'AE',\\n scope: {\\n visible: '='\\n },\\n template: require('./new-instrument-configuration.tpl.html'),\\n link: function(scope, element, attrs) {\\n\\n /**\\n * Creates a new instrument and media layouts across all pages and media definitions. The instrument will be\\n * placed at the lowest y position available on a given media definition.\\n * @param {String} type The type of instrument we are creating\\n */\\n scope.addInstrument = function(type) {\\n var dashboard = dashboardWorkspaceService.dashboard;\\n var newInstrument = {\\n _id: uuid(),\\n title: 'New Instrument',\\n type: type\\n };\\n\\n dashboard.instruments.push(newInstrument);\\n dashboardUtil.insertInstrumentAtLayoutBottom(newInstrument, dashboard, gridSpacing, uuid);\\n\\n // TODO: Need to set timeout because the modal will not clear the backdrop if we immediately\\n // navigate to a new page. Setting a timeout allows the modal to clear the backdrop before we\\n // navigate away.\\n setTimeout(function() {\\n $state.go('instrument.edit', {\\n dashboardId: dashboard._id,\\n instrumentId: newInstrument._id\\n });\\n }, 0);\\n };\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/new-instrument-configuration.js\\n ** module id = 46\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.instrumentEditorBootstrap', [\\n require('../services/instrument-event-bus').name,\\n 'totem.dv.editor'\\n ])\\n .directive('instrumentEditorBootstrap', function(instrumentEventBus, $compile, $q) {\\n return {\\n restrict: 'E',\\n scope: {\\n instrument: '='\\n },\\n link: function(scope, element, attrs) {\\n var rendererScope, editorScope;\\n\\n var destroyScopes = function() {\\n if (rendererScope) {\\n rendererScope.$destroy();\\n }\\n\\n if (editorScope) {\\n editorScope.$destroy();\\n }\\n };\\n\\n var init = function() {\\n destroyScopes();\\n\\n if (scope.instrument && scope.instrument.type) {\\n var editorFactory = require('../../../instruments/' + scope.instrument.type + '/editor/editor');\\n\\n var eventBus = instrumentEventBus.getInstrumentScopedInterface(scope.instrument._id);\\n\\n rendererScope = scope.$new(true);\\n rendererScope.instrument = scope.instrument;\\n var renderer = $compile('<instrument instrument=\\\"instrument\\\"></instrument>')(rendererScope);\\n\\n var editor = editorFactory(renderer, scope.instrument.config, eventBus);\\n element.empty().append(editor);\\n\\n // Allow instrument editor to use AngularJS\\n editorScope = scope.$new(true);\\n editorScope.instrument = scope.instrument;\\n editorScope.eventBus = eventBus;\\n\\n $compile(editor)(editorScope);\\n }\\n };\\n\\n scope.$watch('instrument', init);\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/directives/instrument-editor-bootstrap.js\\n ** module id = 47\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.eventBus', [])\\n .factory('eventBus', function($rootScope) {\\n return {\\n publish: function() {\\n $rootScope.$emit.apply($rootScope, arguments);\\n },\\n subscribe: function(event, callback, scope) {\\n var unbind = $rootScope.$on(event, function() {\\n callback.apply(null, Array.prototype.slice.call(arguments, 1));\\n });\\n if (scope) {\\n scope.$on('$destroy', unbind);\\n }\\n }\\n };\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/dashboard/services/event-bus.js\\n ** module id = 48\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.instrumentEventBus', [])\\n .factory('instrumentEventBus', function($timeout) {\\n var subscriptionsByTopic = {};\\n\\n var bus = {};\\n\\n /**\\n * Publish a message to the event bus.\\n * @param {Object} envelope\\n * @param {String} envelope.topic The message topic.\\n * @param {String|Number} [envelope.from] The identifier of the sender. This can be used by a subscriber to filter\\n * messages by sender.\\n * @param {String|Number} [envelope.to] The identifier for the intended recipient. If excluded, the message will\\n * be sent to all topic subscribers (assuming the message is not filtered via \\\"from\\\").\\n * @param {*} [envelope.data] Any data payload to send to the subscriber.\\n */\\n bus.publish = function(envelope) {\\n // Force asynchronicity and a digest cycle. Not necessary but helpful to ensure a digest cycle happens and\\n // make everything consistently asynchronous.\\n $timeout(function() {\\n var subscriptions = subscriptionsByTopic[envelope.topic];\\n\\n if (subscriptions) {\\n for (var i = 0; i < subscriptions.length; i++) {\\n var subscription = subscriptions[i];\\n\\n // if (the subscriber doesn't care who the message is from or the message is from the desired publisher)\\n // AND (the message isn't addressed to any particular subscriber or it's addressed to this subscriber)\\n // ...then deliver the message.\\n if ((!subscription.fromPublisher || subscription.fromPublisher === envelope.from) &&\\n (!envelope.to || subscription.subscriberId === envelope.to)) {\\n subscription.handler(envelope.data);\\n }\\n }\\n }\\n });\\n };\\n\\n /**\\n * Subscribe to the event bus.\\n * @param {Object} subscription\\n * @param {String} subscription.topic The topic to subscribe to.\\n * @param {Function} subscription.handler The handling function for the message. This function will be passed any\\n * data specified on the message envelope's data attribute.\\n * @param {String|Number} [subscription.subscriberId] The subscriber's identifier. This can be used by the publisher\\n * to send messages to a specific subscriber.\\n * @param {String|Number} [subscription.fromPublisher] If specified, the subscriber will only be delivered messages that\\n * contain a from attribute with a value that matches.\\n * @param {Object} [scope] The AngularJS scope related to the subscriber. If passed, the subscriber will be\\n * automatically unsubscribed when the scope is destroyed. Useful for memory cleanup.\\n * @returns {Function} A function which, when called, will unsubscribe the subscriber.\\n */\\n bus.subscribe = function(subscription, scope) {\\n var subscriptions = subscriptionsByTopic[subscription.topic];\\n\\n if (!subscriptions) {\\n subscriptions = subscriptionsByTopic[subscription.topic] = [];\\n }\\n\\n subscriptions.push(subscription);\\n\\n var unsubscribeHandle = function() {\\n bus.unsubscribe(subscription);\\n };\\n\\n if (scope) {\\n scope.$on('$destroy', unsubscribeHandle);\\n }\\n\\n return unsubscribeHandle;\\n };\\n\\n /**\\n * Unsubscribe a subscription.\\n * @param {Object} subscription The subscription object that was used during subscription.\\n */\\n bus.unsubscribe = function(subscription) {\\n var subscriptions = subscriptionsByTopic[subscription.topic];\\n if (subscriptions) {\\n var index = subscriptions.indexOf(subscription);\\n if (index > -1) {\\n subscriptions.splice(index, 1);\\n }\\n }\\n };\\n\\n /**\\n * Returns a simplified API instruments can use for publishing and subscribing. This allows the user of the API\\n * to be blissfully unaware of the instrument's ID or the enveloping mechanism used within the instrument event bus.\\n * @param {String|Number} instrumentId\\n * @returns {{publish: Function, subscribe: Function}}\\n */\\n bus.getInstrumentScopedInterface = function(instrumentId) {\\n return {\\n publish: function(topic, data) {\\n bus.publish({\\n from: instrumentId,\\n topic: topic,\\n data: data\\n });\\n },\\n subscribe: function(topic, handler) {\\n return bus.subscribe({\\n subscriberId: instrumentId,\\n topic: topic,\\n handler: handler\\n });\\n }\\n };\\n };\\n\\n return bus;\\n })\\n;\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/instrument/services/instrument-event-bus.js\\n ** module id = 49\\n ** module chunks = 0\\n **/\",\"module.exports = \\\"<div ui-view class=\\\\\\\"totem-View\\\\\\\"></div>\\\\n<alert></alert>\\\\n<modal-progress-indicator></modal-progress-indicator>\\\\n\\\"\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/directives/app.tpl.html\\n ** module id = 50\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.uuid', [])\\n .constant('uuid', function() {\\n /* jshint bitwise:false */\\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\\n return v.toString(16);\\n });\\n });\\n\\n\\n\\n/*****************\\n ** WEBPACK FOOTER\\n ** ./client/scripts/common/services/uuid.js\\n ** module id = 51\\n ** module chunks = 0\\n **/\",\"'use strict';\\nmodule.exports = angular.module('totem.dashboardMixin', [\\n require('./participable-mixin').name,\\n require('./tag-enum').name,\\n require('./uuid').name\\n])\\n .factory('dashboardMixin', function(participableMixin, tagEnum, uuid, gridSpacing, duplicateInstrumentOffset, minMediaDefinitionWidth) {\\n /**\\n * Methods to be used on dashboard objects. While we could make a Dashboard class, it doesn't give offer much and\\n * brings with it other hassles.\\n */\\n var objectMethods = {\\n isFullDashboard: function() {\\n return this.hasOwnProperty('instruments');\\n },\\n removeInstrument: function(instrument) {\\n if (this.instruments) {\\n var index = this.instruments.indexOf(instrument);\\n if (index > -1) {\\n this.instruments.splice(index, 1);\\n }\\n }\\n\\n if (this.mediaLayouts) {\\n var i = this.mediaLayouts.length;\\n while (i--) {\\n if (this.mediaLayouts[i].instrumentId === instrument._id) {\\n this.mediaLayouts.splice(i, 1);\\n }\\n }\\n }\\n },\\n getFavoriteTag: function() {\\n if (this.tags) {\\n for (var i = 0; i < this.tags.length; i++) {\\n var tag = this.tags[i];\\n if (tag.tag === tagEnum.FAVORITE) {\\n return tag;\\n }\\n }\\n }\\n },\\n removeTag: function(tag) {\\n if (this.tags) {\\n var i = this.tags.length;\\n while (i--) {\\n if (this.tags[i]._id === tag._id) {\\n this.tags.splice(i, 1);\\n }\\n // Continue looping in case the user is there more than once. (shouldn't happen)\\n }\\n }\\n },\\n removeMediaDefinition: function(mediaDefinition) {\\n var i = this.mediaDefinitions.length;\\n\\n while (i--) {\\n if (this.mediaDefinitions[i]._id === mediaDefinition._id) {\\n this.mediaDefinitions.splice(i, 1);\\n }\\n }\\n\\n this.removeMediaLayoutsForMediaDefinition(mediaDefinition);\\n },\\n getMediaLayoutsForMediaDefinition: function(mediaDefinition) {\\n return this.mediaLayouts.filter(function(mediaLayout) {\\n return mediaLayout.mediaDefinitionId === mediaDefinition._id;\\n });\\n },\\n removeMediaLayoutsForMediaDefinition: function(mediaDefinition) {\\n var i = this.mediaLayouts.length;\\n\\n while (i--) {\\n if (this.mediaLayouts[i].mediaDefinitionId === mediaDefinition._id) {\\n this.mediaLayouts.splice(i, 1);\\n }\\n }\\n },\\n /**\\n * Sorts media definitions smallest to biggest.\\n * @returns {Array}\\n */\\n sortMediaDefinitions: function() {\\n return this.mediaDefinitions.sort(function(def1, def2) { return def1.width - def2.width; });\\n },\\n duplicateInstrument: function(instrument) {\\n var newInstrument = angular.copy(instrument);\\n newInstrument._id = uuid();\\n this.instruments.push(newInstrument);\\n\\n this.mediaDefinitions.forEach(function(mediaDefinition) {\\n var mediaLayouts = this.getMediaLayoutsForMediaDefinition(mediaDefinition);\\n var mediaLayout;\\n\\n for (var i = 0; i < mediaLayouts.length; i++) {\\n mediaLayout = mediaLayouts[i];\\n if (mediaLayout.instrumentId === instrument._id) {\\n break;\\n }\\n }\\n\\n var newMediaLayout = angular.copy(mediaLayout);\\n newMediaLayout._id = uuid();\\n newMediaLayout.instrumentId = newInstrument._id;\\n\\n // Adjust the instrument's position so it's offset from the original. Try to adjust it to the right if the\\n // needed space is available but if the needed space is not available and there's more space to the left then\\n // adjust it to the left.\\n\\n var rightOffsetAvailable = Math.floor(mediaDefinition.width / gridSpacing) -\\n (newMediaLayout.x + newMediaLayout.width);\\n\\n var leftOffsetAvailable = newMediaLayout.x;\\n\\n if (rightOffsetAvailable > 0 &&\\n (rightOffsetAvailable >= duplicateInstrumentOffset || rightOffsetAvailable >= leftOffsetAvailable)) {\\n newMediaLayout.x += Math.min(rightOffsetAvailable, duplicateInstrumentOffset);\\n } else if (leftOffsetAvailable > 0) {\\n newMediaLayout.x -= Math.min(leftOffsetAvailable, duplicateInstrumentOffset);\\n }\\n\\n // Media definitions don't have a defined height so there's no need to check to see if there is room\\n // to dodge. We just do it.\\n newMediaLayout.y += duplicateInstrumentOffset;\\n\\n this.mediaLayouts.push(newMediaLayout);\\n this.bringInstrumentToFront(newInstrument, mediaDefinition);\\n }.bind(this));\\n },\\n bringInstrumentToFront: function(instrument, mediaDefinition) {\\n var mediaLayouts = this.getMediaLayoutsForMediaDefinition(mediaDefinition);\\n\\n var mediaLayout;\\n\\n for (var i = 0; i < mediaLayouts.length; i++) {\\n mediaLayout = mediaLayouts[i];\\n if (mediaLayout.instrumentId === instrument._id) {\\n break;\\n }\\n }\\n\\n // Remove the zIndex from the media layout, sort all others and redefine their zIndexes if they\\n // previously had one, give the media layout the next available zIndex.\\n\\n delete mediaLayout.zIndex;\\n\\n var zIndexCursor = 1;\\n mediaLayouts.sort(function(mediaLayoutA, mediaLayoutB) {\\n if (mediaLayoutA.zIndex === undefined) {\\n return -1;\\n } else if (mediaLayoutB.zIndex === undefined) {\\n return 1;\\n } else {\\n return mediaLayoutA.zIndex - mediaLayoutB.zIndex;\\n }\\n }).forEach(function(mediaLayout, i) {\\n if (mediaLayout.zIndex !== undefined) {\\n mediaLayout.zIndex = zIndexCursor++;\\n }\\n });\\n\\n mediaLayout.zIndex = zIndexCursor;\\n },\\n /**\\n * If a new media definition were created, what width should it be? This comes up with a decent width\\n * as a starting point and the user can manipulate it from there.\\n */\\n _getNewMediaDefinitionWidth: function(baseMediaDefinition) {\\n var sortedDefinitions = this.sortMediaDefinitions();\\n var activeIndex = sortedDefinitions.indexOf(baseMediaDefinition);\\n\\n var newWidth;\\n\\n // Start by getting the midpoint between the base media definition and the next smallest.\\n if (activeIndex === 0) {\\n if (baseMediaDefinition.width === minMediaDefinitionWidth) {\\n newWidth = baseMediaDefinition.width + 100;\\n } else {\\n newWidth = baseMediaDefinition.width / 2;\\n }\\n } else {\\n var nextSmallest = sortedDefinitions[activeIndex - 1];\\n newWidth = (baseMediaDefinition.width + nextSmallest.width) / 2;\\n }\\n\\n newWidth = Math.max(minMediaDefinitionWidth, newWidth);\\n\\n // This adjustment just seems to look better. This is particularly the case if the active media definition\\n // is the smallest media definition; it looks better if the new one is just offset a ways instead of midway\\n // between the media definition and the left of the viewport. This is obviously subjective.\\n newWidth = Math.max(newWidth, baseMediaDefinition.width - 100);\\n\\n // Snap to the grid.\\n newWidth = newWidth - (newWidth % gridSpacing);\\n\\n return newWidth;\\n },\\n\\n /**\\n * Creates a media definition and adds it to the dashboard.\\n * @param {Object} baseMediaDefinition The media definition the new media definition should be based on. The\\n * new media definition's instrument layout will attempt to mimic the layout from the base media definition.\\n * @returns {Object} New media definition.\\n */\\n createMediaDefinition: function(baseMediaDefinition) {\\n var newWidth = this._getNewMediaDefinitionWidth(baseMediaDefinition);\\n\\n // Create a new media definition with its corresponding media layouts based off the base\\n // media definition.\\n var newMediaDefinition = {\\n _id: uuid(),\\n // If you change the name default, be sure to change the code that automatically updates the\\n // media definition name when it's dragged and its name is in #px format.\\n name: newWidth + 'px',\\n width: newWidth\\n };\\n\\n this.mediaDefinitions.push(newMediaDefinition);\\n\\n var mediaLayouts = angular.copy(this.getMediaLayoutsForMediaDefinition(baseMediaDefinition));\\n\\n mediaLayouts.forEach(function(mediaLayout) {\\n mediaLayout._id = uuid();\\n mediaLayout.mediaDefinitionId = newMediaDefinition._id;\\n });\\n\\n this.resampleMediaLayouts(mediaLayouts, mediaLayouts, baseMediaDefinition.width, newWidth);\\n\\n this.mediaLayouts = this.mediaLayouts.concat(mediaLayouts);\\n\\n return newMediaDefinition;\\n },\\n\\n /**\\n * Resamples media layouts to appropriately fit a new media definition width. Because resampling must snap to\\n * the dashboard grid, sampling \\\"errors\\\" will likely occur. For example, if an instrument is one grid space\\n * from the side of the dashboard before resampling, it may be touching the side of the dashboard after some\\n * resampling due to having to snap to the next grid space.\\n *\\n * When resampling repetitively like when dragging a media definition thumb, it's important that the resampling\\n * is based of the initial media definition and media layout positions so that the resampling error does\\n * not compound. For example, if the user drags the thumb to the left to make the media definition smaller and drags\\n * it back to the right to where it started and the lets go of the thumb, we want to ensure everything\\n * looks as it did when the user started dragging.\\n *\\n * @param {Array} startMediaLayouts Media layout objects representing an instrument's position and dimension when\\n * the series of resamplings started. If this is a single resample and not part of a series, these objects can\\n * be the same as endMediaLayouts.\\n * @param {Array} endMediaLayouts Media layout objects that should be resampled.\\n * @param {Number} startMediaDefinitionWidth Media definition width to resample media layouts from. If this\\n * resampling is part of a series of resamplings, this should be the width of the media definition at the beginning\\n * of the series.\\n * @param {Number} endMediaDefinitionWidth Media definition width to resample media layouts to.\\n */\\n resampleMediaLayouts: function(startMediaLayouts, endMediaLayouts, startMediaDefinitionWidth, endMediaDefinitionWidth) {\\n var resamplePercent = endMediaDefinitionWidth / startMediaDefinitionWidth;\\n\\n endMediaLayouts.forEach(function(mediaLayout, i) {\\n var startMediaLayout = startMediaLayouts[i];\\n mediaLayout.width = Math.round(startMediaLayout.width * resamplePercent);\\n mediaLayout.x = Math.round(startMediaLayout.x * resamplePercent);\\n });\\n },\\n\\n /**\\n * If the provided media definition were removed, what would be the next best media definition the user would like\\n * to see?\\n * @param mediaDefinition\\n * @returns {Object} The next best media definition.\\n */\\n getNextBestMediaDefinition: function(mediaDefinition) {\\n // sorted smallest
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment