You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@senssoft.apache.org by ar...@apache.org on 2016/10/21 16:11:54 UTC
[01/48] incubator-senssoft-tap git commit: Merge master endpoint code
in vagrant
Repository: incubator-senssoft-tap
Updated Branches:
refs/heads/master 5a9708918 -> acea1d31b
Merge master endpoint code in vagrant
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/ccbf0696
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/ccbf0696
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/ccbf0696
Branch: refs/heads/master
Commit: ccbf0696de6e8630dcea762e7f09e56fccca00e8
Parents: 041547e
Author: Fei Sun <fe...@utexas.edu>
Authored: Wed Jun 29 12:32:04 2016 -0400
Committer: Fei Sun <fe...@utexas.edu>
Committed: Wed Jun 29 12:32:04 2016 -0400
----------------------------------------------------------------------
Vagrantfile | 77 ++++++++++++++++++++++++++++++++++++
app_mgr/views.py | 13 +++---
requirements.txt | 3 ++
tap/templates/index.html | 17 ++++++++
tap/urls.py | 2 +
vagrant/bash_aliases | 3 ++
vagrant/provision_as_root.sh | 34 ++++++++++++++++
vagrant/provision_as_vagrant.sh | 72 +++++++++++++++++++++++++++++++++
vagrant/provision_databases.sh | 9 +++++
9 files changed, 224 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/Vagrantfile
----------------------------------------------------------------------
diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 0000000..5e7c632
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,77 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# All Vagrant configuration is done below. The "2" in Vagrant.configure
+# configures the configuration version (we support older styles for
+# backwards compatibility). Please don't change it unless you know what
+# you're doing.
+Vagrant.configure("2") do |config|
+ # The most common configuration options are documented and commented below.
+ # For a complete reference, please see the online documentation at
+ # https://docs.vagrantup.com.
+
+ # Every Vagrant development environment requires a box. You can search for
+ # boxes at https://atlas.hashicorp.com/search.
+ config.vm.box = "ubuntu/trusty64"
+
+ # Disable automatic box update checking. If you disable this, then
+ # boxes will only be checked for updates when the user runs
+ # `vagrant box outdated`. This is not recommended.
+ # config.vm.box_check_update = false
+
+ # Create a forwarded port mapping which allows access to a specific port
+ # within the machine from a port on the host machine. In the example below,
+ # accessing "localhost:8080" will access port 80 on the guest machine.
+ # config.vm.network "forwarded_port", guest: 80, host: 8080
+
+ # Create a private network, which allows host-only access to the machine
+ # using a specific IP.
+ config.vm.network "private_network", ip: "192.168.33.10"
+
+ # Create a public network, which generally matched to bridged network.
+ # Bridged networks make the machine appear as another physical device on
+ # your network.
+ # config.vm.network "public_network"
+
+ # Share an additional folder to the guest VM. The first argument is
+ # the path on the host to the actual folder. The second argument is
+ # the path on the guest to mount the folder. And the optional third
+ # argument is a set of non-required options.
+ # config.vm.synced_folder "../data", "/vagrant_data"
+
+ # Provider-specific configuration so you can fine-tune various
+ # backing providers for Vagrant. These expose provider-specific options.
+ # Example for VirtualBox:
+ #
+ config.vm.provider "virtualbox" do |vb|
+ # # Display the VirtualBox GUI when booting the machine
+ # vb.gui = true
+ #
+ # # Customize the amount of memory on the VM:
+ vb.memory = "1024"
+ vb.cpus = 2
+ end
+ #
+ # View the documentation for the provider you are using for more
+ # information on available options.
+
+ # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
+ # such as FTP and Heroku are also available. See the documentation at
+ # https://docs.vagrantup.com/v2/push/atlas.html for more information.
+ # config.push.define "atlas" do |push|
+ # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
+ # end
+
+ # Enable provisioning with a shell script. Additional provisioners such as
+ # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
+ # documentation for more information about their specific syntax and use.
+ # config.vm.provision "shell", inline: <<-SHELL
+ # apt-get update
+ # apt-get install -y apache2
+ # SHELL
+ config.vm.provision "file", source: "vagrant/bash_aliases", destination: ".bash_aliases"
+
+ config.vm.provision "shell", path: "vagrant/provision_as_root.sh"
+ config.vm.provision "shell", path: "vagrant/provision_as_vagrant.sh", privileged: false
+ config.vm.provision "shell", path: "vagrant/provision_databases.sh"
+end
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index b17c2f0..86b6a72 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -70,22 +70,22 @@ class UserProfileInstanceView(generics.RetrieveUpdateDestroyAPIView):
def get(self, request, *args, **kwargs):
if kwargs['pk'] == 'current':
- self.kwargs['pk'] = unicode(request.user.id)
+ self.kwargs['pk'] = str(request.user.id)
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
if kwargs['pk'] == 'current':
- self.kwargs['pk'] = unicode(request.user.id)
+ self.kwargs['pk'] = str(request.user.id)
return self.update(request, *args, **kwargs)
def patch(self, request, *args, **kwargs):
if kwargs['pk'] == 'current':
- self.kwargs['pk'] = unicode(request.user.id)
+ self.kwargs['pk'] = str(request.user.id)
return self.partial_update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
if kwargs['pk'] == 'current':
- self.kwargs['pk'] = unicode(request.user.id)
+ self.kwargs['pk'] = str(request.user.id)
return self.destroy(request, *args, **kwargs)
class OrganizationInstanceView(generics.RetrieveUpdateDestroyAPIView):
@@ -173,7 +173,8 @@ def register(request):
registrationSuccessful = True
# add some logic to log events, log in users directly
- print "successful registration of " + request.POST['email'] +" "+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ #print "successful registration of " + request.POST['email'] +" "+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ print( "successful registration of {0} {1}".format(request.POST['email'], datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) )
request.POST['email_to'] = user.email
request.POST['email_subject'] = 'Welcome to TAP'
request.POST['email_message'] = 'Your registration was successful!\n\nIn case you forget your password, please go to the following page and reset your password:\n\nhttps://' + get_current_site(request).domain + '/app_mgr/reset/\n\nYour username, in case you\'ve forgotten, is the email address this message was sent to.\n\nThanks for using our site!\n\nThe ' + get_current_site(request).name + ' team'
@@ -224,7 +225,7 @@ def login_user(request):
return HttpResponse("Your TAP account is disabled.")
else:
# Bad login details were provided. So we can't log the user in.
- print "Invalid login details: {0}, {1}".format(email, password)
+ print( "Invalid login details: {0}, {1}".format(email, password) )
return HttpResponse("Invalid login details supplied.")
# The request is not a HTTP POST, so display the login form.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/requirements.txt
----------------------------------------------------------------------
diff --git a/requirements.txt b/requirements.txt
index a620e48..befdd67 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,5 +6,8 @@ django-grappelli==2.8.1
django-guardian==1.4.4
djangorestframework==3.3.3
gunicorn==19.6.0
+httpie==0.9.3
psycopg2==2.6.1
+Pygments==2.1.3
+requests==2.10.0
six==1.10.0
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/tap/templates/index.html
----------------------------------------------------------------------
diff --git a/tap/templates/index.html b/tap/templates/index.html
new file mode 100644
index 0000000..b25cad7
--- /dev/null
+++ b/tap/templates/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Tap Home</title>
+ <!-- <link href="{{ STATIC_URL }}js/components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> -->
+</head>
+<body>
+ <div class="container">
+ <h1>Hello Tap!</h1>
+ <div class="react-container"></div>
+ </div>
+ <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
+ <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
+ <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+</body>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/tap/urls.py
----------------------------------------------------------------------
diff --git a/tap/urls.py b/tap/urls.py
index 5ed5261..05b102f 100644
--- a/tap/urls.py
+++ b/tap/urls.py
@@ -14,6 +14,7 @@ Including another URLconf
"""
from django.conf.urls import include, url
from django.contrib import admin
+from django.views.generic import TemplateView
from rest_framework.authtoken import views as token_views
@@ -23,4 +24,5 @@ urlpatterns = [
url(r'^app_mgr/', include('app_mgr.urls', namespace='app_mgr')),
#url(r'^api-auth/', include('rest_framework.urls')),
url(r'^api-token-auth/', token_views.obtain_auth_token),
+ url(r'', TemplateView.as_view(template_name='index.html')),
]
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/vagrant/bash_aliases
----------------------------------------------------------------------
diff --git a/vagrant/bash_aliases b/vagrant/bash_aliases
new file mode 100644
index 0000000..4e2a12e
--- /dev/null
+++ b/vagrant/bash_aliases
@@ -0,0 +1,3 @@
+alias runserver='cd /vagrant; /vagrant/manage.py runserver 0.0.0.0:8000'
+
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/vagrant/provision_as_root.sh
----------------------------------------------------------------------
diff --git a/vagrant/provision_as_root.sh b/vagrant/provision_as_root.sh
new file mode 100644
index 0000000..5d0458b
--- /dev/null
+++ b/vagrant/provision_as_root.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+date >> /etc/vagrant_provisioned_at
+
+# PostgreSQL server
+sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
+wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
+sudo apt-get update
+
+sudo apt-get install -y postgresql-9.5 postgresql-contrib-9.5 postgresql-server-dev-9.5 libpq-dev
+PGSQL_DB_PASSWORD="Dr@p3rUs3r"
+sudo -u postgres psql -c "CREATE DATABASE tapdb"
+sudo -u postgres psql -c "CREATE USER tapuser WITH PASSWORD '$PGSQL_DB_PASSWORD'"
+sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE tapdb TO tapuser"
+
+# Essentials
+#sudo apt-get update -q
+echo "Installing Essentials ..."
+sudo apt-get install -y git build-essential libssl-dev
+echo "Done"
+
+# Python
+sudo apt-get install -y python-pip python-dev python3-dev
+#sudo pip install virtualenv virtualenvwrapper
+
+echo "Installing Python virtualenv ..."
+sudo pip install --upgrade virtualenv
+
+virtualenv --python=$(which python3) /home/vagrant/tappy3
+sudo chown -hR vagrant:vagrant /home/vagrant/tappy3
+echo "Done."
+
+# Restart services
+service postgresql restart
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/vagrant/provision_as_vagrant.sh
----------------------------------------------------------------------
diff --git a/vagrant/provision_as_vagrant.sh b/vagrant/provision_as_vagrant.sh
new file mode 100644
index 0000000..8016e5a
--- /dev/null
+++ b/vagrant/provision_as_vagrant.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+BASHRC="/home/vagrant/.bashrc"
+PROFILE="/home/vagrant/.profile"
+
+sed -i 's/#force_color_prompt/force_color_prompt/' $BASHRC
+
+# Django
+cd /vagrant
+echo "Installing Python Tool and Django"
+CMD="source /home/vagrant/tappy3/bin/activate"
+$CMD
+pip install --upgrade pip
+pip install --upgrade setuptools
+#pip install --upgrade pip-tools
+#pip-sync
+#pip install django psycopg2 djangorestframework
+pip install -r /vagrant/requirements.txt
+deactivate
+grep -q -F "$CMD" $BASHRC || echo "$CMD" >> $BASHRC
+cd ~
+echo "Done"
+
+# NodeJS via nvm
+if [ ! -d /home/vagrant/.nvm ]; then
+ echo "Installing Node ..."
+ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
+ CMD="source /home/vagrant/.nvm/nvm.sh"
+ grep -q -F "$CMD" $PROFILE || echo "$CMD" >> $PROFILE
+ source $PROFILE
+ nvm install 4.4.5 > /dev/null 2>&1
+ nvm alias default 4.4.5
+ npm install -g bower gulp
+else
+ echo "Node is already installed."
+fi
+echo "Done."
+
+# package.json
+# cd /vagrant
+# if [ ! -d /vagrant/node_modules ]; then
+# echo "Installing Node packages ..."
+# npm install
+# else
+# echo "Node packages are already installed."
+# fi
+# cd ~
+# echo "Done."
+
+# bower.json
+# cd /vagrant
+# if [ ! -d /vagrant/static/js/components ]; then
+# echo "Installing Bower packages ..."
+# bower install
+# else
+# echo "Bower packages are already installed."
+# fi
+# cd ~
+# echo "Done."
+
+# tap/settings.py
+# echo "Restoring Django tap/settings.py ..."
+# if [ ! -f /vagrant/tap/settings.py ]; then
+# cp /vagrant/vagrant/settings.py /vagrant/tap/settings.py
+# fi
+# echo "Done."
+
+# secret.py
+echo "Restoring Django secret.py ..."
+if [ ! -f /vagrant/secret.py ]; then
+ cp /vagrant/vagrant/secret.py /vagrant/secret.py
+fi
+echo "Done."
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/ccbf0696/vagrant/provision_databases.sh
----------------------------------------------------------------------
diff --git a/vagrant/provision_databases.sh b/vagrant/provision_databases.sh
new file mode 100644
index 0000000..0944264
--- /dev/null
+++ b/vagrant/provision_databases.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# Restore Django PostgreSQL database
+# tapadmin, tapadmin@draper.com, Dr@perAdm1n!
+echo "Restoring Django database ..."
+sudo -u postgres psql tapdb < /vagrant/vagrant/sql/appmgr.sql > /dev/null 2>&1
+echo "Done."
+
+
[24/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/collections/menu.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/collections/menu.overrides b/semantic/src/themes/chubby/collections/menu.overrides
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/collections/menu.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/collections/menu.variables b/semantic/src/themes/chubby/collections/menu.variables
new file mode 100644
index 0000000..f3149d5
--- /dev/null
+++ b/semantic/src/themes/chubby/collections/menu.variables
@@ -0,0 +1,40 @@
+/*******************************
+ Menu
+*******************************/
+
+@background: @darkWhite;
+@boxShadow: none;
+@dividerSize: 0px;
+
+@verticalBoxShadow: 0px 0px 0px 2px @borderColor inset;
+@verticalActiveBoxShadow: none;
+
+@itemVerticalPadding: 1.25em;
+@itemHorizontalPadding: 2em;
+@itemFontWeight: bold;
+
+@activeItemBackground: @primaryColor;
+@activeItemTextColor: @white;
+@activeHoverItemBackground: @primaryColorHover;
+@activeHoverItemColor: @white;
+
+@secondaryItemPadding: @relativeSmall @relativeMedium;
+
+@secondaryActiveItemBackground: @primaryColor;
+@secondaryActiveItemColor: @white;
+@secondaryActiveHoverItemBackground: @primaryColorHover;
+@secondaryActiveHoverItemColor: @white;
+
+@secondaryPointingBorderWidth: 4px;
+@secondaryPointingActiveBorderColor: @primaryColor;
+@secondaryPointingActiveTextColor: @primaryColor;
+
+@arrowSize: 1em;
+@arrowActiveColor: @primaryColor;
+@arrowActiveHoverColor: @primaryColorHover;
+@arrowBorder: transparent;
+
+@paginationActiveBackground: @lightGrey;
+
+@borderColor: @darkWhite;
+@tabularBorderWidth: 2px;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/elements/button.overrides b/semantic/src/themes/chubby/elements/button.overrides
new file mode 100644
index 0000000..9edb0b9
--- /dev/null
+++ b/semantic/src/themes/chubby/elements/button.overrides
@@ -0,0 +1,21 @@
+/*******************************
+ Overrides
+*******************************/
+
+@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro);
+
+.ui.labeled.icon.buttons > .button > .icon,
+.ui.labeled.icon.button > .icon {
+ box-shadow:
+ -1px 0px 0px 0px rgba(255, 255, 255, 0.2) inset,
+ -1px 0px 0px 0px rgba(0, 0, 0, 0.05) inset
+ ;
+}
+
+.ui.right.labeled.icon.buttons .button .icon,
+.ui.right.labeled.icon.button .icon {
+ box-shadow:
+ 1px 0px 0px 0px rgba(255, 255, 255, 0.2) inset,
+ 1px 0px 0px 0px rgba(0, 0, 0, 0.05) inset
+ ;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/elements/button.variables b/semantic/src/themes/chubby/elements/button.variables
new file mode 100644
index 0000000..03ed2f8
--- /dev/null
+++ b/semantic/src/themes/chubby/elements/button.variables
@@ -0,0 +1,57 @@
+/*-------------------
+ Button Variables
+--------------------*/
+
+/* Button Variables */
+@pageFont: 'Source Sans Pro', Arial, sans-serif;
+
+@textTransform: none;
+@fontWeight: normal;
+@textColor: #333333;
+
+@verticalPadding: 1.1em;
+@horizontalPadding: 2.5em;
+@invertedBorderSize: 3px;
+
+@basicBorderRadius: 0.4em;
+@basicFontWeight: bold;
+@basicTextTransform: uppercase;
+
+@blue: #4A88CB;
+@primaryColor: @blue;
+
+@borderRadius: 0.25em;
+
+@backgroundColor: #E6EAED;
+@backgroundImage: none;
+@boxShadow: none;
+
+@hoverBackgroundColor: #DDDDDD;
+@hoverBackgroundImage: none;
+@hoverBoxShadow: none;
+
+@downBackgroundColor: #D0D0D0;
+@downBackgroundImage: none;
+@downBoxShadow: none;
+
+@activeBackgroundColor: #CCCCCC;
+@activeBackgroundImage: none;
+@activeBoxShadow: none;
+
+@verticalBoxShadow: none;
+
+@loadingBackgroundColor: #F0F0F0;
+
+@compactVerticalPadding: (@verticalPadding * 0.5);
+@compactHorizontalPadding: (@horizontalPadding * 0.5);
+
+@labeledIconBackgroundColor: transparent;
+
+@mini: 0.7rem;
+@tiny: 0.75rem;
+@small: 0.8rem;
+@medium: 0.92rem;
+@large: 1rem;
+@big: 1.125rem;
+@huge: 1.2rem;
+@massive: 1.3rem;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/elements/header.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/elements/header.overrides b/semantic/src/themes/chubby/elements/header.overrides
new file mode 100644
index 0000000..51c147b
--- /dev/null
+++ b/semantic/src/themes/chubby/elements/header.overrides
@@ -0,0 +1,5 @@
+/*******************************
+ Overrides
+*******************************/
+
+@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/elements/header.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/elements/header.variables b/semantic/src/themes/chubby/elements/header.variables
new file mode 100644
index 0000000..ac86908
--- /dev/null
+++ b/semantic/src/themes/chubby/elements/header.variables
@@ -0,0 +1,21 @@
+/*-------------------
+ Header
+--------------------*/
+
+@headerFont : 'Source Sans Pro', Helvetica Neue, Helvetica, Arial, sans-serif;
+@fontWeight: bold;
+@textTransform: none;
+
+/* HTML Headings */
+@h1: 1.33rem;
+@h2: 1.2rem;
+@h3: 1rem;
+@h4: 0.9rem;
+@h5: 0.8rem;
+
+/* Sizing */
+@hugeFontSize: 1.33em;
+@largeFontSize: 1.2em;
+@mediumFontSize: 1em;
+@smallFontSize: 0.9em;
+@tinyFontSize: 0.8em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/modules/accordion.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/modules/accordion.overrides b/semantic/src/themes/chubby/modules/accordion.overrides
new file mode 100644
index 0000000..441e72a
--- /dev/null
+++ b/semantic/src/themes/chubby/modules/accordion.overrides
@@ -0,0 +1,7 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.styled.accordion .accordion .active.title {
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/modules/accordion.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/modules/accordion.variables b/semantic/src/themes/chubby/modules/accordion.variables
new file mode 100644
index 0000000..fccb9ff
--- /dev/null
+++ b/semantic/src/themes/chubby/modules/accordion.variables
@@ -0,0 +1,15 @@
+/*-------------------
+ Accordion Variables
+--------------------*/
+
+@iconMargin: 0em 0.5em 0em 0em;
+
+@styledActiveTitleBackground: @subtleGradient;
+@styledActiveTitleColor: @primaryColor;
+
+@styledActiveChildTitleBackground: transparent;
+
+@styledTitlePadding: 1.25em;
+@styledTitleFontWeight: bold;
+@styledContentPadding: 1.5em 3.25em;
+@styledChildContentPadding: @styledContentPadding;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/views/comment.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/views/comment.overrides b/semantic/src/themes/chubby/views/comment.overrides
new file mode 100644
index 0000000..d9276d5
--- /dev/null
+++ b/semantic/src/themes/chubby/views/comment.overrides
@@ -0,0 +1,12 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.comments .comment {
+ border-radius: 0.5em;
+ box-shadow: 0px 1px 1px 1px rgba(0, 0, 0, 0.1);
+}
+.ui.comments .comment .comments .comment {
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ box-shadow: none;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/views/comment.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/views/comment.variables b/semantic/src/themes/chubby/views/comment.variables
new file mode 100644
index 0000000..c0780f4
--- /dev/null
+++ b/semantic/src/themes/chubby/views/comment.variables
@@ -0,0 +1,46 @@
+/*******************************
+ Comments
+*******************************/
+
+/*-------------------
+ Elements
+--------------------*/
+
+/* Comment */
+@commentBackground: #FFFFFF;
+@commentMargin: 1em 0em 0em;
+@commentPadding: 1em 1.5em;
+@commentBorder: 1px solid rgba(0, 0, 0, 0.1);
+@commentDivider: 1px solid rgba(0, 0, 0, 0.1);
+@firstCommentMargin: 1em;
+@firstCommentPadding: 1em;
+
+/* Nested Comment */
+@nestedCommentsMargin: 0em 0em 0.5em 0.5em;
+@nestedCommentsPadding: 1em 0em 0em 1em;
+@nestedCommentBackground: #F0F0F0;
+
+/* Avatar */
+@avatarWidth: 3.5em;
+@avatarSpacing: 1.5em;
+@avatarBorderRadius: @circularRadius;
+
+/* Content */
+@contentMargin: @avatarWidth + @avatarSpacing;
+
+/* Author */
+@authorFontSize: 1em;
+@authorColor: @primaryColor;
+@authorHoverColor: @primaryColorHover;
+@authorFontWeight: bold;
+
+@metadataDisplay: block;
+@metadataSpacing: 0em;
+@metadataColor: @textColor;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Threaded */
+@threadedCommentMargin: -1.5em 0 -1em (@avatarWidth / 2);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/collections/table.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/collections/table.overrides b/semantic/src/themes/classic/collections/table.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/classic/collections/table.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/collections/table.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/collections/table.variables b/semantic/src/themes/classic/collections/table.variables
new file mode 100644
index 0000000..21760fc
--- /dev/null
+++ b/semantic/src/themes/classic/collections/table.variables
@@ -0,0 +1,14 @@
+/*******************************
+ Table
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@boxShadow: @subtleGradient;
+
+@headerBackground: @subtleGradient;
+@headerBoxShadow: @subtleShadow;
+@footerBoxShadow: 0px -1px 1px 0px rgba(0, 0, 0, 0.05);
+@footerBackground: rgba(0, 0, 0, 0.05);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/elements/button.overrides b/semantic/src/themes/classic/elements/button.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/classic/elements/button.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/elements/button.variables b/semantic/src/themes/classic/elements/button.variables
new file mode 100644
index 0000000..ded0bdb
--- /dev/null
+++ b/semantic/src/themes/classic/elements/button.variables
@@ -0,0 +1,96 @@
+/*******************************
+ Button
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+/* Shadow */
+@shadowDistance: 0em;
+@shadowOffset: (@shadowDistance / 2);
+@shadowBoxShadow: 0px -@shadowDistance 0px 0px @borderColor inset;
+@backgroundColor: #FAFAFA;
+@backgroundImage: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.09));
+@boxShadow:
+ 0px 0px 0px 1px @borderColor inset,
+ @shadowBoxShadow
+;
+
+/* Padding */
+@verticalPadding: 0.8em;
+@horizontalPadding: 1.5em;
+
+
+/*-------------------
+ Group
+--------------------*/
+
+@groupBoxShadow: none;
+@groupButtonBoxShadow:
+ 0px 0px 0px 1px @borderColor inset,
+ @shadowBoxShadow
+;
+@verticalBoxShadow: 0px 0px 0px 1px @borderColor inset;
+@groupButtonOffset: 0px 0px 0px -1px;
+@verticalGroupOffset: 0px 0px -1px 0px;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Hovered */
+@hoverBackgroundColor: '';
+@hoverBackgroundImage: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.13));
+@hoverBoxShadow: '';
+@hoverColor: @hoveredTextColor;
+@iconHoverOpacity: 0.85;
+
+/* Focused */
+@focusBackgroundColor: '';
+@focusBackgroundImage: '';
+@focusBoxShadow:
+ 0px 0px 1px rgba(81, 167, 232, 0.8) inset,
+ 0px 0px 3px 2px rgba(81, 167, 232, 0.8)
+;
+@focusColor: @hoveredTextColor;
+@iconFocusOpacity: 0.85;
+
+/* Pressed Down */
+@downBackgroundColor: #F1F1F1;
+@downBackgroundImage: '';
+@downBoxShadow:
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,
+ 0px 1px 4px 0px rgba(0, 0, 0, 0.1) inset !important
+;
+@downColor: @pressedTextColor;
+
+/* Active */
+@activeBackgroundColor: #DADADA;
+@activeBackgroundImage: none;
+@activeColor: @selectedTextColor;
+@activeBoxShadow:
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,
+ 0px 1px 4px 0px rgba(0, 0, 0, 0.1) inset !important
+;
+
+/* Active + Hovered */
+@activeHoverBackgroundColor: #DADADA;
+@activeHoverBackgroundImage: none;
+@activeHoverBoxShadow:
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,
+ 0px 1px 4px 0px rgba(0, 0, 0, 0.1) inset !important
+;
+@activeHoverColor: @selectedTextColor;
+
+/* Loading */
+@loadingBackgroundColor: #FFFFFF;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Labeled Icon */
+@labeledIconBackgroundColor: rgba(0, 0, 0, 0.05);
+@labeledIconLeftShadow: -1px 0px 0px 0px @labeledIconBorder inset;
+@labeledIconRightShadow: 1px 0px 0px 0px @labeledIconBorder inset;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/elements/header.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/elements/header.overrides b/semantic/src/themes/classic/elements/header.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/classic/elements/header.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/elements/header.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/elements/header.variables b/semantic/src/themes/classic/elements/header.variables
new file mode 100644
index 0000000..b963e19
--- /dev/null
+++ b/semantic/src/themes/classic/elements/header.variables
@@ -0,0 +1,12 @@
+/*******************************
+ Button
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@headerFont: 'Open Sans', Arial, sans-serif;
+
+@blockBackground: @offWhite @subtleGradient;
+@blockBoxShadow: @subtleShadow;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/modules/progress.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/modules/progress.overrides b/semantic/src/themes/classic/modules/progress.overrides
new file mode 100644
index 0000000..cdba171
--- /dev/null
+++ b/semantic/src/themes/classic/modules/progress.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Progress
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/modules/progress.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/modules/progress.variables b/semantic/src/themes/classic/modules/progress.variables
new file mode 100644
index 0000000..95f752a
--- /dev/null
+++ b/semantic/src/themes/classic/modules/progress.variables
@@ -0,0 +1,9 @@
+/*******************************
+ Progress
+*******************************/
+
+@background: rgba(0, 0, 0, 0.05);
+@boxShadow: 0px 0px 4px rgba(0, 0, 0, 0.1) inset;
+@barBackground: @subtleGradient #888888;
+@border: 1px solid @borderColor;
+@padding: @relative3px;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/views/card.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/views/card.overrides b/semantic/src/themes/classic/views/card.overrides
new file mode 100644
index 0000000..03a88d1
--- /dev/null
+++ b/semantic/src/themes/classic/views/card.overrides
@@ -0,0 +1,98 @@
+/*******************************
+ Item
+*******************************/
+/*-------------------
+ View
+--------------------*/
+
+/* Item */
+@background: #FFFFFF;
+@borderRadius: 0.325rem;
+@display: block;
+@float: left;
+@margin: 0em @horizontalSpacing @rowSpacing;
+@minHeight: 0px;
+@padding: 0em;
+@width: 300px;
+@boxShadow:
+ 0px 0px 0px 1px @borderColor,
+ 0px 3px 0px 0px @borderColor
+;
+@border: none;
+@zIndex: '';
+
+/* Item Group */
+@horizontalSpacing: 0.5em;
+@rowSpacing: 2.5em;
+@groupMargin: 1em -@horizontalSpacing;
+
+/*-------------------
+ Content
+--------------------*/
+
+/* Image */
+@imageBackground: @transparentBlack;
+@imagePadding: 0em;
+@imageBorderRadius: @borderRadius @borderRadius 0em 0em;
+@imageBoxShadow: none;
+@imageBorder: none;
+
+/* Content */
+@contentMargin: 0em;
+@contentPadding: 0.75em 1em;
+@contentFontSize: 1em;
+@contentBorder: none;
+@contentBorderRadius: 0em;
+@contentBoxShadow: none;
+
+/* Title */
+@titleMargin: 0em;
+@titleFont: @headerFont;
+@titleFontWeight: bold;
+@titleFontSize: 1.25em;
+@titleColor: @darkTextColor;
+
+/* Metadata */
+@metaColor: @lightTextColor;
+
+/* Description */
+@descriptionDistance: 0.75em;
+@descriptionColor: @lightTextColor;
+
+/* Image */
+@imageSpacing: 0.25em;
+@contentImageWidth: 2em;
+@contentImageVerticalAlign: middle;
+
+/* Paragraph */
+@paragraphDistance: 0.1em;
+
+/* Additional Content */
+@extraDisplay: absolute;
+@extraTop: 100%;
+@extraLeft: 0em;
+@extraWidth: 100%;
+
+@extraPadding: 0.5em 0.75em;
+@extraColor: @lightTextColor;
+@extraTransition: color @defaultDuration @defaultEasing;
+
+/*-------------------
+ States
+--------------------*/
+
+@hoverCursor: pointer;
+@hoverZIndex: 5;
+@hoverBorder: none;
+@hoverBoxShadow:
+ 0px 0px 0px 1px @selectedBorderColor,
+ 0px 3px 0px 0px @selectedBorderColor
+;
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Sizes */
+@medium: 1em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/classic/views/card.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/classic/views/card.variables b/semantic/src/themes/classic/views/card.variables
new file mode 100644
index 0000000..629fd4f
--- /dev/null
+++ b/semantic/src/themes/classic/views/card.variables
@@ -0,0 +1,22 @@
+/*******************************
+ Card
+*******************************/
+
+/*-------------------
+ View
+--------------------*/
+
+/* Shadow */
+@shadowDistance: 0em;
+@padding: 0em;
+
+/*-------------------
+ Content
+--------------------*/
+
+/* Additional Content */
+@extraDivider: 1px solid rgba(0, 0, 0, 0.05);
+@extraBackground: #FAFAFA @subtleGradient;
+@extraPadding: 0.75em 1em;
+@extraBoxShadow: 0 1px 1px rgba(0, 0, 0, 0.15);
+@extraColor: @lightTextColor;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/colored/modules/checkbox.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/colored/modules/checkbox.overrides b/semantic/src/themes/colored/modules/checkbox.overrides
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/colored/modules/checkbox.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/colored/modules/checkbox.variables b/semantic/src/themes/colored/modules/checkbox.variables
new file mode 100644
index 0000000..1689c22
--- /dev/null
+++ b/semantic/src/themes/colored/modules/checkbox.variables
@@ -0,0 +1,29 @@
+/* Checkbox */
+@checkboxActiveBackground: @primaryColor;
+@checkboxActiveBorderColor: @primaryColor;
+@checkboxActiveCheckColor: @white;
+
+@checkboxActiveFocusBackground: @primaryColorFocus;
+@checkboxActiveFocusBorderColor: @primaryColorFocus;
+@checkboxActiveFocusCheckColor: @white;
+
+@checkboxTransition: none;
+
+/* Radio */
+@radioActiveBackground: @white;
+@radioActiveBorderColor: @primaryColor;
+@radioActiveBulletColor: @primaryColor;
+
+@radioActiveFocusBackground: @white;
+@radioActiveFocusBorderColor: @primaryColorFocus;
+@radioActiveFocusBulletColor: @primaryColorFocus;
+
+/* Slider */
+@sliderOnLineColor: @primaryColor;
+@sliderOnFocusLineColor: @primaryColorFocus;
+
+/* Handle */
+@handleBackground: @white @subtleGradient;
+@handleBoxShadow:
+ 0px 0px 0px 1px @selectedBorderColor inset
+;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/assets/fonts/icons.eot
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/assets/fonts/icons.eot b/semantic/src/themes/default/assets/fonts/icons.eot
new file mode 100644
index 0000000..c7b00d2
Binary files /dev/null and b/semantic/src/themes/default/assets/fonts/icons.eot differ
[05/48] incubator-senssoft-tap git commit: changed print to python 3
format
Posted by ar...@apache.org.
changed print to python 3 format
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/b27a8e77
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/b27a8e77
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/b27a8e77
Branch: refs/heads/master
Commit: b27a8e779f459c4cac4d8084617106c03f51f0c7
Parents: acf33e0
Author: Stephen York <Stephen York>
Authored: Thu Jun 30 03:16:57 2016 -0400
Committer: Stephen York <Stephen York>
Committed: Thu Jun 30 03:16:57 2016 -0400
----------------------------------------------------------------------
app_mgr/apps.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/b27a8e77/app_mgr/apps.py
----------------------------------------------------------------------
diff --git a/app_mgr/apps.py b/app_mgr/apps.py
index fba4f88..f613fa4 100644
--- a/app_mgr/apps.py
+++ b/app_mgr/apps.py
@@ -5,5 +5,5 @@ class AppMgrConfig(AppConfig):
verbose_name = "Application Manager"
def ready(self):
- print 'Loading', self.verbose_name
+ print('Loading', self.verbose_name)
import app_mgr.signals.handlers
[08/48] incubator-senssoft-tap git commit: Fixed bug for signing out
then logging in urls
Posted by ar...@apache.org.
Fixed bug for signing out then logging in urls
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/28307677
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/28307677
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/28307677
Branch: refs/heads/master
Commit: 2830767790c3e9b4e22b12872ff94463c55e869a
Parents: 5d7e522
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Wed Jul 20 13:52:19 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Wed Jul 20 13:52:19 2016 -0400
----------------------------------------------------------------------
app_mgr/views.py | 4 ++--
tap/urls.py | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/28307677/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index d3f8336..0fc88c6 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -227,7 +227,7 @@ def logout_user(request):
Log users out and re-direct them to the main page.
"""
logout(request)
- return HttpResponseRedirect('/app_mgr/login')
+ return HttpResponseRedirect('/app_mgr/login/')
@watch_login
def login_user(request):
@@ -290,7 +290,7 @@ def reset(request):
def reset_sent(request):
return render(request, 'registration/reset_password_done.html')
-@login_required(login_url='/app_mgr/login')
+@login_required(login_url='/app_mgr/login/')
def view_profile(request):
user = request.user
return render(request, 'user_profile.html',
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/28307677/tap/urls.py
----------------------------------------------------------------------
diff --git a/tap/urls.py b/tap/urls.py
index 05b102f..8db0a4e 100644
--- a/tap/urls.py
+++ b/tap/urls.py
@@ -22,7 +22,7 @@ urlpatterns = [
url(r'^grappelli/', include('grappelli.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^app_mgr/', include('app_mgr.urls', namespace='app_mgr')),
- #url(r'^api-auth/', include('rest_framework.urls')),
+ #url(r'^api-auth/', include('rest_framework.urls')), #used for basic authentication (cookies)
url(r'^api-token-auth/', token_views.obtain_auth_token),
url(r'', TemplateView.as_view(template_name='index.html')),
]
[47/48] incubator-senssoft-tap git commit: Endpoints updates for
front end connections
Posted by ar...@apache.org.
Endpoints updates for front end connections
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/9cd21f5b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/9cd21f5b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/9cd21f5b
Branch: refs/heads/master
Commit: 9cd21f5bb1bfc9d5eb139d771e19b6a8ced63b54
Parents: 39ef689
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Tue Oct 11 15:04:26 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Tue Oct 11 15:04:26 2016 -0400
----------------------------------------------------------------------
.gitignore | 2 +
app_mgr/__init__.py | 1 +
app_mgr/admin.py | 1 +
app_mgr/apps.py | 1 +
app_mgr/distillviews.py | 15 +
app_mgr/migrations/0001_initial.py | 1 +
app_mgr/migrations/0002_membership_is_admin.py | 1 +
app_mgr/migrations/0003_auto_20160629_0112.py | 1 +
app_mgr/migrations/0004_auto_20160629_0252.py | 1 +
app_mgr/models.py | 14 -
app_mgr/permissions.py | 1 +
app_mgr/serializers.py | 1 +
app_mgr/signals/handlers.py | 1 +
app_mgr/templates/index.html | 22 +
app_mgr/templates/main.html | 22 +
app_mgr/templates/registration/login.html | 1 +
app_mgr/templates/registration/register.html | 1 +
.../registration/reset_password_confirm.html | 1 +
.../registration/reset_password_done.html | 1 +
.../registration/reset_password_email.html | 1 +
.../registration/reset_password_form.html | 1 +
app_mgr/templates/user_profile.html | 1 +
app_mgr/templates/userpage.html | 1 +
app_mgr/tests.py | 14 -
app_mgr/urls.py | 3 +-
app_mgr/views.py | 1 +
public/actions/app.js | 3 +-
public/components/AppProfile.js | 40 ++
public/components/AppResults.jsx | 90 ++--
public/components/Profile.js | 39 ++
public/components/Settings.js | 53 +++
public/components/UserProfile.js | 30 ++
public/components/UserSettings.js | 25 ++
public/components/visualizations/Counts.jsx | 2 +-
public/containers/App.js | 40 ++
requirements.txt | 1 +
semantic.json | 2 +-
semantic/src/definitions/modules/accordion.less | 438 +++++++++----------
semantic/src/definitions/modules/dimmer.js | 5 +-
semantic/src/definitions/modules/dropdown.less | 2 +-
semantic/src/definitions/modules/shape.js | 32 +-
tap/settings.py | 135 ++++++
tap/settings/archive/secret2.py | 12 +
tap/settings/archive/settings2.py | 135 ++++++
tap/settings/dev.py | 3 +-
tap/settings/production.py | 1 +
tap/settings/settings.py | 181 ++++++++
tap/urls.py | 10 +-
tap/wsgi.py | 1 +
templates/main.html | 22 +
vagrant/settings.py | 135 ++++++
51 files changed, 1249 insertions(+), 299 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 2c1979d..9df8927 100755
--- a/.gitignore
+++ b/.gitignore
@@ -26,5 +26,7 @@ build
static/*
!static/admin/
+archive/*
+
/public/neon_counts.js
/public/neon_graph.js
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/__init__.py
----------------------------------------------------------------------
diff --git a/app_mgr/__init__.py b/app_mgr/__init__.py
index f6f9a61..8df9d62 100644
--- a/app_mgr/__init__.py
+++ b/app_mgr/__init__.py
@@ -12,4 +12,5 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
default_app_config = 'app_mgr.apps.AppMgrConfig'
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/admin.py
----------------------------------------------------------------------
diff --git a/app_mgr/admin.py b/app_mgr/admin.py
index 023c186..1b519a4 100644
--- a/app_mgr/admin.py
+++ b/app_mgr/admin.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/apps.py
----------------------------------------------------------------------
diff --git a/app_mgr/apps.py b/app_mgr/apps.py
index b9e48b3..dd4b7e6 100644
--- a/app_mgr/apps.py
+++ b/app_mgr/apps.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
from django.apps import AppConfig
class AppMgrConfig(AppConfig):
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/distillviews.py
----------------------------------------------------------------------
diff --git a/app_mgr/distillviews.py b/app_mgr/distillviews.py
index 080b0f2..c021819 100644
--- a/app_mgr/distillviews.py
+++ b/app_mgr/distillviews.py
@@ -1,3 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.sites.shortcuts import get_current_site
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0001_initial.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0001_initial.py b/app_mgr/migrations/0001_initial.py
index 3b1e58a..c3bf762 100644
--- a/app_mgr/migrations/0001_initial.py
+++ b/app_mgr/migrations/0001_initial.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-23 22:51
from __future__ import unicode_literals
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0002_membership_is_admin.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0002_membership_is_admin.py b/app_mgr/migrations/0002_membership_is_admin.py
index 718ad4a..59c1cb8 100644
--- a/app_mgr/migrations/0002_membership_is_admin.py
+++ b/app_mgr/migrations/0002_membership_is_admin.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-28 04:39
from __future__ import unicode_literals
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0003_auto_20160629_0112.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0003_auto_20160629_0112.py b/app_mgr/migrations/0003_auto_20160629_0112.py
index 2207716..6a0fe37 100644
--- a/app_mgr/migrations/0003_auto_20160629_0112.py
+++ b/app_mgr/migrations/0003_auto_20160629_0112.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-29 05:12
from __future__ import unicode_literals
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/migrations/0004_auto_20160629_0252.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0004_auto_20160629_0252.py b/app_mgr/migrations/0004_auto_20160629_0252.py
index d3b0a34..04629c6 100644
--- a/app_mgr/migrations/0004_auto_20160629_0252.py
+++ b/app_mgr/migrations/0004_auto_20160629_0252.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-29 06:52
from __future__ import unicode_literals
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/models.py
----------------------------------------------------------------------
diff --git a/app_mgr/models.py b/app_mgr/models.py
old mode 100644
new mode 100755
index f2d084e..ca7d735
--- a/app_mgr/models.py
+++ b/app_mgr/models.py
@@ -1,17 +1,3 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
from django.db import models
from django.conf import settings
from django.contrib.postgres.fields import JSONField
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/permissions.py
----------------------------------------------------------------------
diff --git a/app_mgr/permissions.py b/app_mgr/permissions.py
index 2cc7477..180fe43 100644
--- a/app_mgr/permissions.py
+++ b/app_mgr/permissions.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
from rest_framework.permissions import DjangoObjectPermissions
from django.http import Http404
from guardian.shortcuts import get_perms, get_perms_for_model, get_users_with_perms
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/serializers.py
----------------------------------------------------------------------
diff --git a/app_mgr/serializers.py b/app_mgr/serializers.py
index f7fcc07..2e8bd0e 100644
--- a/app_mgr/serializers.py
+++ b/app_mgr/serializers.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
from rest_framework import serializers
from django.contrib.auth import get_user_model
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/signals/handlers.py
----------------------------------------------------------------------
diff --git a/app_mgr/signals/handlers.py b/app_mgr/signals/handlers.py
index 91fe1c1..20a4b2a 100644
--- a/app_mgr/signals/handlers.py
+++ b/app_mgr/signals/handlers.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
from django.contrib.auth.models import Group
from django.conf import settings
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/index.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/index.html b/app_mgr/templates/index.html
new file mode 100644
index 0000000..fc706b4
--- /dev/null
+++ b/app_mgr/templates/index.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Tap Home</title>
+ {% load staticfiles %}
+ <link rel="stylesheet" href="{% static "semantic.min.css" %}">
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
+ <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
+ <script src="{% static "semantic.min.js" %}"></script>
+ <link href="{% static "styles.min.css" %}" rel="stylesheet">
+</head>
+<body>
+ <div id="main-container">
+ <div id="react-container" />
+ </div>
+ <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
+ <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
+ <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+ <script src="{% static "app.js" %}"></script>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/main.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/main.html b/app_mgr/templates/main.html
new file mode 100644
index 0000000..fc706b4
--- /dev/null
+++ b/app_mgr/templates/main.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Tap Home</title>
+ {% load staticfiles %}
+ <link rel="stylesheet" href="{% static "semantic.min.css" %}">
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
+ <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
+ <script src="{% static "semantic.min.js" %}"></script>
+ <link href="{% static "styles.min.css" %}" rel="stylesheet">
+</head>
+<body>
+ <div id="main-container">
+ <div id="react-container" />
+ </div>
+ <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
+ <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
+ <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+ <script src="{% static "app.js" %}"></script>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/login.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/login.html b/app_mgr/templates/registration/login.html
index 684ea00..79f1676 100755
--- a/app_mgr/templates/registration/login.html
+++ b/app_mgr/templates/registration/login.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% extends "main.html" %}
{% block container %}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/register.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/register.html b/app_mgr/templates/registration/register.html
index 87cd580..5039fcf 100755
--- a/app_mgr/templates/registration/register.html
+++ b/app_mgr/templates/registration/register.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% extends "main.html" %}
{% block container %}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_confirm.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_confirm.html b/app_mgr/templates/registration/reset_password_confirm.html
index 4c73a62..4435740 100644
--- a/app_mgr/templates/registration/reset_password_confirm.html
+++ b/app_mgr/templates/registration/reset_password_confirm.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% extends "main.html" %}
{% block title %}Reset Password{% endblock %}
{% block container %}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_done.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_done.html b/app_mgr/templates/registration/reset_password_done.html
index 1077f9a..941bdf4 100644
--- a/app_mgr/templates/registration/reset_password_done.html
+++ b/app_mgr/templates/registration/reset_password_done.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% extends "main.html" %}
{% block title %}Password Reset In Progress{% endblock %}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_email.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_email.html b/app_mgr/templates/registration/reset_password_email.html
index 4f74fb6..8ce89c7 100644
--- a/app_mgr/templates/registration/reset_password_email.html
+++ b/app_mgr/templates/registration/reset_password_email.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% autoescape off %}
You're receiving this email because you requested a password reset for your user account at {{ site_name }}.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/registration/reset_password_form.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/registration/reset_password_form.html b/app_mgr/templates/registration/reset_password_form.html
index 6eceae8..bb8175b 100644
--- a/app_mgr/templates/registration/reset_password_form.html
+++ b/app_mgr/templates/registration/reset_password_form.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% extends "main.html" %}
{% block title %}Reset Password{% endblock %}
{% block container %}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/user_profile.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/user_profile.html b/app_mgr/templates/user_profile.html
index 6d15eb6..bd8daed 100644
--- a/app_mgr/templates/user_profile.html
+++ b/app_mgr/templates/user_profile.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% extends "userpage.html" %}
{% block content %}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/templates/userpage.html
----------------------------------------------------------------------
diff --git a/app_mgr/templates/userpage.html b/app_mgr/templates/userpage.html
index 795a91b..700c8ff 100644
--- a/app_mgr/templates/userpage.html
+++ b/app_mgr/templates/userpage.html
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
+
{% extends "page.html" %}
{% block side_block %}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/tests.py
----------------------------------------------------------------------
diff --git a/app_mgr/tests.py b/app_mgr/tests.py
old mode 100644
new mode 100755
index c98fdeb..7ce503c
--- a/app_mgr/tests.py
+++ b/app_mgr/tests.py
@@ -1,17 +1,3 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
from django.test import TestCase
# Create your tests here.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/urls.py
----------------------------------------------------------------------
diff --git a/app_mgr/urls.py b/app_mgr/urls.py
index 7992345..6698228 100644
--- a/app_mgr/urls.py
+++ b/app_mgr/urls.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
"""tap URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
@@ -52,7 +53,7 @@ urlpatterns = [
url(r'^org/(?P<pk>[\d]+)/$', views.OrganizationInstanceView.as_view(), name='org-instance'),
url(r'^app/(?P<pk>[\d]+)/$', views.ApplicationInstanceView.as_view(), name='app-instance'),
- url(r'^app/(?P<pk>current+)/$', views.AliasListView.as_view(), name='alias-list'),
+ #url(r'^app/(?P<pk>current+)/$', views.AliasListView.as_view(), name='alias-list'),
url(r'^appresults/(?P<appId>[0-9]{1,2})/(?P<searchType>\w+)/$', distillviews.app_results, name='app-results'),
url(r'^appresults/(?P<appName>\w+)/(?P<searchType>\w+)/$', distillviews.app_results_byname, name='app-results'),
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index 7ce3dfa..8973be8 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.decorators import login_required
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/actions/app.js
----------------------------------------------------------------------
diff --git a/public/actions/app.js b/public/actions/app.js
index 7c1254e..3badb05 100644
--- a/public/actions/app.js
+++ b/public/actions/app.js
@@ -1,4 +1,5 @@
-import { REQUEST_APP, RECEIVE_APP, REQUEST_APP_UPDATE, CONFIRM_APP_UPDATE, REQUEST_APP_RESULTS, RECEIVE_APP_RESULTS } from '../constants/ActionTypes';
+import { REQUEST_APP, RECEIVE_APP, REQUEST_APP_UPDATE, CONFIRM_APP_UPDATE, REQUEST_APP_RESULTS, RECEIVE_APP_RESULTS }
+ from '../constants/ActionTypes';
export function fetchApp () {
return { type : REQUEST_APP };
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/AppProfile.js
----------------------------------------------------------------------
diff --git a/public/components/AppProfile.js b/public/components/AppProfile.js
new file mode 100644
index 0000000..1615194
--- /dev/null
+++ b/public/components/AppProfile.js
@@ -0,0 +1,40 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+import Profile from './Profile';
+
+class AppProfile extends Component {
+ render () {
+ const { id, name, users } = this.props;
+
+ return (
+ <div className='ui text container'>
+ <div className='ui vertical basic page segment'>
+ <div className='ui large header'>
+ {name}
+ </div>
+ <Link to={`/app/${id}/settings`}>
+ <div className='ui brown button'>
+ Settings
+ </div>
+ </Link>
+ <Link to={`/app/${id}/results`}>
+ <div className='ui brown button'>
+ Results
+ </div>
+ </Link>
+ </div>
+
+ <Profile feed={['a', 1, 'c']} firstSide={users} firstType={'user'} />
+ </div>
+ );
+ }
+}
+
+AppProfile.propTypes = {
+ id : PropTypes.number,
+ name : PropTypes.string,
+ users : PropTypes.array,
+};
+
+export default AppProfile;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/AppResults.jsx
----------------------------------------------------------------------
diff --git a/public/components/AppResults.jsx b/public/components/AppResults.jsx
index c8671f0..f5d3b84 100644
--- a/public/components/AppResults.jsx
+++ b/public/components/AppResults.jsx
@@ -9,14 +9,14 @@ class AppResults extends Component {
this.state = {
result : 'counts',
metric : 'out_degree',
- ethnicities : [1, 2, 3, 4, 5, 6, 7],
+ educationlevels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
gender : 0,
ab : false,
};
}
componentDidMount() {
- $('#ethnicity-accordion').accordion({
+ $('#education-accordion').accordion({
collapsible : true,
});
$('#results-controls').accordion({
@@ -37,13 +37,13 @@ class AppResults extends Component {
},
});
- $('.ui.ethnicity.checkbox').checkbox({
+ $('.ui.education.checkbox').checkbox({
onChange : () => {
- let ethnicities = [];
- $('input[name=ethnicity]:checked').each((i, el) => {
- ethnicities.push(+$(el).val());
+ let educationlevels = [];
+ $('input[name=education]:checked').each((i, el) => {
+ educationlevels.push(+$(el).val());
});
- this.setState({ ethnicities : ethnicities });
+ this.setState({ educationlevels : educationlevels });
},
});
@@ -93,55 +93,85 @@ class AppResults extends Component {
</div>
<div className='field'>
- <div id='ethnicity-accordion' className='accordion'>
+ <div id='education-accordion' className='accordion'>
<div className='title'>
<i className='dropdown icon'></i>
- Ethnicity
+ Highest Education Level
</div>
<div className='content'>
<div className='ui form'>
<div className='grouped fields'>
<div className='field'>
- <div className='ui ethnicity checkbox'>
- <input type='checkbox' name='ethnicity' value='1' defaultChecked></input>
- <label>Asian</label>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='1' defaultChecked></input>
+ <label>No schooling completed</label>
</div>
</div>
<div className='field'>
- <div className='ui ethnicity checkbox'>
- <input type='checkbox' name='ethnicity' value='2' defaultChecked></input>
- <label>Pacific Islander</label>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='2' defaultChecked></input>
+ <label>Nursery school to 8th grade</label>
</div>
</div>
<div className='field'>
- <div className='ui ethnicity checkbox'>
- <input type='checkbox' name='ethnicity' value='3' defaultChecked></input>
- <label>African American/Of African Descent</label>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='3' defaultChecked></input>
+ <label>9th, 10th, or 11th grade</label>
</div>
</div>
<div className='field'>
- <div className='ui ethnicity checkbox'>
- <input type='checkbox' name='ethnicity' value='4' defaultChecked></input>
- <label>White/Caucasian</label>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='4' defaultChecked></input>
+ <label>12th grade, or no diploma</label>
</div>
</div>
<div className='field'>
- <div className='ui ethnicity checkbox'>
- <input type='checkbox' name='ethnicity' value='5' defaultChecked></input>
- <label>Native American</label>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='5' defaultChecked></input>
+ <label>High school graduate</label>
</div>
</div>
<div className='field'>
- <div className='ui ethnicity checkbox'>
- <input type='checkbox' name='ethnicity' value='6' defaultChecked></input>
- <label>Indian</label>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='6' defaultChecked></input>
+ <label>Some college credit</label>
</div>
</div>
<div className='field'>
- <div className='ui ethnicity checkbox'>
- <input type='checkbox' name='ethnicity' value='7' defaultChecked></input>
- <label>Decline to State</label>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='7' defaultChecked></input>
+ <label>1 or more years of college</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='8' defaultChecked></input>
+ <label>Associate degree</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='9' defaultChecked></input>
+ <label>Bachelors degree</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='10' defaultChecked></input>
+ <label>Masters degree</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='11' defaultChecked></input>
+ <label>Professional degree</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui education checkbox'>
+ <input type='checkbox' name='education' value='12' defaultChecked></input>
+ <label>Doctorate degree</label>
</div>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/Profile.js
----------------------------------------------------------------------
diff --git a/public/components/Profile.js b/public/components/Profile.js
new file mode 100644
index 0000000..528166a
--- /dev/null
+++ b/public/components/Profile.js
@@ -0,0 +1,39 @@
+import React, { Component, PropTypes } from 'react';
+
+import Feed from './Feed';
+import Sidebox from './Sidebox';
+
+class Profile extends Component {
+ render() {
+ const { feed, firstSide, secondSide, firstType, secondType } = this.props;
+
+ return(
+ <div className='ui padded grid'>
+ <div className='ten wide column'>
+ <Feed feed={feed} />
+ </div>
+
+ <div className='six wide column'>
+ <Sidebox type={firstType} content={firstSide} />
+ {(() => {
+ if (secondSide) {
+ return(
+ <Sidebox type={secondType} content={secondSide} />
+ );
+ }
+ })()}
+ </div>
+ </div>
+ );
+ }
+}
+
+Profile.propTypes = {
+ feed : PropTypes.array,
+ firstSide : PropTypes.array,
+ firstType : PropTypes.string,
+ secondSide : PropTypes.array,
+ secondType : PropTypes.string,
+};
+
+export default Profile;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/Settings.js
----------------------------------------------------------------------
diff --git a/public/components/Settings.js b/public/components/Settings.js
new file mode 100644
index 0000000..0194d43
--- /dev/null
+++ b/public/components/Settings.js
@@ -0,0 +1,53 @@
+import React, { Component, PropTypes } from 'react';
+
+class Settings extends Component {
+ componentDidMount() {
+ let $settingsControls = $('#settings-menu .item');
+ $settingsControls.on('click', (e) => {
+ $settingsControls.removeClass('active');
+ $(e.target).addClass('active');
+ });
+ }
+
+ render() {
+ const { settings } = this.props;
+
+ return (
+ <div className='ui grid'>
+ <div className='four wide column'>
+ <div id='settings-menu' className='ui vertical fluid tabular menu'>
+ <a className='item active'>
+ Account
+ </a>
+ <a className='item'>
+ Notifications
+ </a>
+ <a className='item'>
+ Organizations
+ </a>
+ </div>
+ </div>
+
+ <div className='twelve wide stretched column'>
+ <div className='ui segment'>
+ <ul>
+ {Object.keys(settings).map((setting, index) => {
+ return (
+ <li key={index}>
+ {setting}, {settings[setting].toString()}
+ </li>
+ );
+ })}
+ </ul>
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
+
+Settings.propTypes = {
+ settings : PropTypes.object,
+};
+
+export default Settings;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/UserProfile.js
----------------------------------------------------------------------
diff --git a/public/components/UserProfile.js b/public/components/UserProfile.js
new file mode 100644
index 0000000..384fe03
--- /dev/null
+++ b/public/components/UserProfile.js
@@ -0,0 +1,30 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+import Profile from './Profile';
+
+class UserProfile extends Component {
+ render () {
+ const { email, orgs, apps } = this.props;
+
+ return (
+ <div className='ui text container'>
+ <div className='ui vertical basic page segment'>
+ <div className='ui large header'>
+ {`${email}'s Profile`}
+ </div>
+ </div>
+
+ <Profile feed={['a', 1, 'c']} firstSide={orgs} firstType={'org'} secondSide={apps} secondType={'app'} />
+ </div>
+ );
+ }
+}
+
+UserProfile.propTypes = {
+ email : PropTypes.string,
+ orgs : PropTypes.array,
+ apps : PropTypes.array,
+};
+
+export default UserProfile;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/UserSettings.js
----------------------------------------------------------------------
diff --git a/public/components/UserSettings.js b/public/components/UserSettings.js
new file mode 100644
index 0000000..51dface
--- /dev/null
+++ b/public/components/UserSettings.js
@@ -0,0 +1,25 @@
+import React, { Component, PropTypes } from 'react';
+
+import Settings from './Settings';
+
+class UserSettings extends Component {
+ render () {
+ const { email, settings } = this.props;
+
+ return (
+ <div className='ui text container'>
+ <div className='ui large header'>
+ Settings for {email}
+ </div>
+ <Settings settings={settings} />
+ </div>
+ );
+ }
+}
+
+UserSettings.propTypes = {
+ email : PropTypes.string,
+ settings : PropTypes.object,
+};
+
+export default UserSettings;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/components/visualizations/Counts.jsx
----------------------------------------------------------------------
diff --git a/public/components/visualizations/Counts.jsx b/public/components/visualizations/Counts.jsx
index a1a2d6e..1540878 100644
--- a/public/components/visualizations/Counts.jsx
+++ b/public/components/visualizations/Counts.jsx
@@ -100,7 +100,7 @@ function subset(data, filters) {
preprocessData(data);
var dataSubset = data.filter((p) => {
- return (filters.gender === 0 || filters.gender == p.intake_data.demographics.Gender) && (filters.ethnicities.includes(+p.intake_data.demographics.Ethnicity));
+ return (filters.gender === 0 || filters.gender == p.intake_data.demographics.Gender) && (filters.educationlevels.includes(+p.intake_data.education["Most school completed"]));
});
var logs = {};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/public/containers/App.js
----------------------------------------------------------------------
diff --git a/public/containers/App.js b/public/containers/App.js
new file mode 100644
index 0000000..5110ee0
--- /dev/null
+++ b/public/containers/App.js
@@ -0,0 +1,40 @@
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+
+class App extends Component {
+ render() {
+ const { children, id, name, settings, results, users } = this.props;
+
+ return(
+ <div>
+ {React.cloneElement(children, {
+ id,
+ name,
+ settings,
+ results,
+ users,
+ })}
+ </div>
+ );
+ }
+}
+
+App.propTypes = {
+ id : PropTypes.number,
+ name : PropTypes.string,
+ settings : PropTypes.object,
+ results : PropTypes.object,
+ users : PropTypes.array,
+};
+
+function mapStateToProps(state, ownProps) {
+ return {
+ id : state.app.id,
+ name : state.app.name,
+ settings : state.app.settings,
+ results : state.app.results,
+ users : state.app.users,
+ };
+}
+
+export default connect(mapStateToProps)(App);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/requirements.txt
----------------------------------------------------------------------
diff --git a/requirements.txt b/requirements.txt
index befdd67..235fdb0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -11,3 +11,4 @@ psycopg2==2.6.1
Pygments==2.1.3
requests==2.10.0
six==1.10.0
+django-webpack-loader==0.3.3
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic.json
----------------------------------------------------------------------
diff --git a/semantic.json b/semantic.json
index edb31cc..17c42f5 100644
--- a/semantic.json
+++ b/semantic.json
@@ -18,5 +18,5 @@
"permission": false,
"autoInstall": false,
"rtl": false,
- "version": "2.2.1"
+ "version": "2.2.2"
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/accordion.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/accordion.less b/semantic/src/definitions/modules/accordion.less
index eaf0776..835f490 100755
--- a/semantic/src/definitions/modules/accordion.less
+++ b/semantic/src/definitions/modules/accordion.less
@@ -1,219 +1,219 @@
-/*!
- * # Semantic UI - Accordion
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-
-/*******************************
- Theme
-*******************************/
-
-@type : 'module';
-@element : 'accordion';
-
-@import (multiple) '../../theme.config';
-
-/*******************************
- Accordion
-*******************************/
-
-.ui.accordion,
-.ui.accordion .accordion {
- max-width: 100%;
-}
-.ui.accordion .accordion {
- margin: @childAccordionMargin;
- padding: @childAccordionPadding;
-}
-
-/* Title */
-.ui.accordion .title,
-.ui.accordion .accordion .title {
- cursor: pointer;
-}
-
-/* Default Styling */
-.ui.accordion .title:not(.ui) {
- padding: @titlePadding;
- font-family: @titleFont;
- font-size: @titleFontSize;
- color: @titleColor;
-}
-
-/* Content */
-.ui.accordion .title ~ .content,
-.ui.accordion .accordion .title ~ .content {
- display: none;
-}
-
-/* Default Styling */
-.ui.accordion:not(.styled) .title ~ .content:not(.ui),
-.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {
- margin: @contentMargin;
- padding: @contentPadding;
-}
-.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {
- padding-bottom: 0em;
-}
-
-/* Arrow */
-.ui.accordion .title .dropdown.icon,
-.ui.accordion .accordion .title .dropdown.icon {
- display: @iconDisplay;
- float: @iconFloat;
- opacity: @iconOpacity;
- width: @iconWidth;
- height: @iconHeight;
- margin: @iconMargin;
- padding: @iconPadding;
- font-size: @iconFontSize;
- transition: @iconTransition;
- vertical-align: @iconVerticalAlign;
- transform: @iconTransform;
-}
-
-/*--------------
- Coupling
----------------*/
-
-/* Menu */
-.ui.accordion.menu .item .title {
- display: block;
- padding: @menuTitlePadding;
-}
-.ui.accordion.menu .item .title > .dropdown.icon {
- float: @menuIconFloat;
- margin: @menuIconMargin;
- transform: @menuIconTransform;
-}
-
-/* Header */
-.ui.accordion .ui.header .dropdown.icon {
- font-size: @iconFontSize;
- margin: @iconMargin;
-}
-
-/*******************************
- States
-*******************************/
-
-.ui.accordion .active.title .dropdown.icon,
-.ui.accordion .accordion .active.title .dropdown.icon {
- transform: @activeIconTransform;
-}
-
-.ui.accordion.menu .item .active.title > .dropdown.icon {
- transform: @activeIconTransform;
-}
-
-/*******************************
- Types
-*******************************/
-
-/*--------------
- Styled
----------------*/
-
-.ui.styled.accordion {
- width: @styledWidth;
-}
-
-.ui.styled.accordion,
-.ui.styled.accordion .accordion {
- border-radius: @styledBorderRadius;
- background: @styledBackground;
- box-shadow: @styledBoxShadow;
-}
-.ui.styled.accordion .title,
-.ui.styled.accordion .accordion .title {
- margin: @styledTitleMargin;
- padding: @styledTitlePadding;
- color: @styledTitleColor;
- font-weight: @styledTitleFontWeight;
- border-top: @styledTitleBorder;
- transition: @styledTitleTransition;
-}
-.ui.styled.accordion > .title:first-child,
-.ui.styled.accordion .accordion .title:first-child {
- border-top: none;
-}
-
-
-/* Content */
-.ui.styled.accordion .content,
-.ui.styled.accordion .accordion .content {
- margin: @styledContentMargin;
- padding: @styledContentPadding;
-}
-.ui.styled.accordion .accordion .content {
- padding: @styledChildContentMargin;
- padding: @styledChildContentPadding;
-}
-
-
-/* Hover */
-.ui.styled.accordion .title:hover,
-.ui.styled.accordion .active.title,
-.ui.styled.accordion .accordion .title:hover,
-.ui.styled.accordion .accordion .active.title {
- background: @styledTitleHoverBackground;
- color: @styledTitleHoverColor;
-}
-.ui.styled.accordion .accordion .title:hover,
-.ui.styled.accordion .accordion .active.title {
- background: @styledHoverChildTitleBackground;
- color: @styledHoverChildTitleColor;
-}
-
-
-/* Active */
-.ui.styled.accordion .active.title {
- background: @styledActiveTitleBackground;
- color: @styledActiveTitleColor;
-}
-.ui.styled.accordion .accordion .active.title {
- background: @styledActiveChildTitleBackground;
- color: @styledActiveChildTitleColor;
-}
-
-
-/*******************************
- States
-*******************************/
-
-/*--------------
- Active
----------------*/
-
-.ui.accordion .active.content,
-.ui.accordion .accordion .active.content {
- display: block;
-}
-
-/*******************************
- Variations
-*******************************/
-
-/*--------------
- Fluid
----------------*/
-
-.ui.fluid.accordion,
-.ui.fluid.accordion .accordion {
- width: 100%;
-}
-
-/*--------------
- Inverted
----------------*/
-
-.ui.inverted.accordion .title:not(.ui) {
- color: @invertedTitleColor;
-}
-
-.loadUIOverrides();
-
+/*!
+ * # Semantic UI - Accordion
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'accordion';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Accordion
+*******************************/
+
+.ui.accordion,
+.ui.accordion .accordion {
+ max-width: 100%;
+}
+.ui.accordion .accordion {
+ margin: @childAccordionMargin;
+ padding: @childAccordionPadding;
+}
+
+/* Title */
+.ui.accordion .title,
+.ui.accordion .accordion .title {
+ cursor: pointer;
+}
+
+/* Default Styling */
+.ui.accordion .title:not(.ui) {
+ padding: @titlePadding;
+ font-family: @titleFont;
+ font-size: @titleFontSize;
+ color: @titleColor;
+}
+
+/* Content */
+.ui.accordion .title ~ .content,
+.ui.accordion .accordion .title ~ .content {
+ display: none;
+}
+
+/* Default Styling */
+.ui.accordion:not(.styled) .title ~ .content:not(.ui),
+.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {
+ margin: @contentMargin;
+ padding: @contentPadding;
+}
+.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {
+ padding-bottom: 0em;
+}
+
+/* Arrow */
+.ui.accordion .title .dropdown.icon,
+.ui.accordion .accordion .title .dropdown.icon {
+ display: @iconDisplay;
+ float: @iconFloat;
+ opacity: @iconOpacity;
+ width: @iconWidth;
+ height: @iconHeight;
+ margin: @iconMargin;
+ padding: @iconPadding;
+ font-size: @iconFontSize;
+ transition: @iconTransition;
+ vertical-align: @iconVerticalAlign;
+ transform: @iconTransform;
+}
+
+/*--------------
+ Coupling
+---------------*/
+
+/* Menu */
+.ui.accordion.menu .item .title {
+ display: block;
+ padding: @menuTitlePadding;
+}
+.ui.accordion.menu .item .title > .dropdown.icon {
+ float: @menuIconFloat;
+ margin: @menuIconMargin;
+ transform: @menuIconTransform;
+}
+
+/* Header */
+.ui.accordion .ui.header .dropdown.icon {
+ font-size: @iconFontSize;
+ margin: @iconMargin;
+}
+
+/*******************************
+ States
+*******************************/
+
+.ui.accordion .active.title .dropdown.icon,
+.ui.accordion .accordion .active.title .dropdown.icon {
+ transform: @activeIconTransform;
+}
+
+.ui.accordion.menu .item .active.title > .dropdown.icon {
+ transform: @activeIconTransform;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Styled
+---------------*/
+
+.ui.styled.accordion {
+ width: @styledWidth;
+}
+
+.ui.styled.accordion,
+.ui.styled.accordion .accordion {
+ border-radius: @styledBorderRadius;
+ background: @styledBackground;
+ box-shadow: @styledBoxShadow;
+}
+.ui.styled.accordion .title,
+.ui.styled.accordion .accordion .title {
+ margin: @styledTitleMargin;
+ padding: @styledTitlePadding;
+ color: @styledTitleColor;
+ font-weight: @styledTitleFontWeight;
+ border-top: @styledTitleBorder;
+ transition: @styledTitleTransition;
+}
+.ui.styled.accordion > .title:first-child,
+.ui.styled.accordion .accordion .title:first-child {
+ border-top: none;
+}
+
+
+/* Content */
+.ui.styled.accordion .content,
+.ui.styled.accordion .accordion .content {
+ margin: @styledContentMargin;
+ padding: @styledContentPadding;
+}
+.ui.styled.accordion .accordion .content {
+ padding: @styledChildContentMargin;
+ padding: @styledChildContentPadding;
+}
+
+
+/* Hover */
+.ui.styled.accordion .title:hover,
+.ui.styled.accordion .active.title,
+.ui.styled.accordion .accordion .title:hover,
+.ui.styled.accordion .accordion .active.title {
+ background: @styledTitleHoverBackground;
+ color: @styledTitleHoverColor;
+}
+.ui.styled.accordion .accordion .title:hover,
+.ui.styled.accordion .accordion .active.title {
+ background: @styledHoverChildTitleBackground;
+ color: @styledHoverChildTitleColor;
+}
+
+
+/* Active */
+.ui.styled.accordion .active.title {
+ background: @styledActiveTitleBackground;
+ color: @styledActiveTitleColor;
+}
+.ui.styled.accordion .accordion .active.title {
+ background: @styledActiveChildTitleBackground;
+ color: @styledActiveChildTitleColor;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Active
+---------------*/
+
+.ui.accordion .active.content,
+.ui.accordion .accordion .active.content {
+ display: block;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Fluid
+---------------*/
+
+.ui.fluid.accordion,
+.ui.fluid.accordion .accordion {
+ width: 100%;
+}
+
+/*--------------
+ Inverted
+---------------*/
+
+.ui.inverted.accordion .title:not(.ui) {
+ color: @invertedTitleColor;
+}
+
+.loadUIOverrides();
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/dimmer.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dimmer.js b/semantic/src/definitions/modules/dimmer.js
index 604141e..2feb915 100644
--- a/semantic/src/definitions/modules/dimmer.js
+++ b/semantic/src/definitions/modules/dimmer.js
@@ -83,6 +83,7 @@ $.fn.dimmer = function(parameters) {
else {
$dimmer = module.create();
}
+ module.set.variation();
}
},
@@ -173,10 +174,6 @@ $.fn.dimmer = function(parameters) {
var
$element = $( settings.template.dimmer() )
;
- if(settings.variation) {
- module.debug('Creating dimmer with variation', settings.variation);
- $element.addClass(settings.variation);
- }
if(settings.dimmerName) {
module.debug('Creating named dimmer', settings.dimmerName);
$element.addClass(settings.dimmerName);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/dropdown.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dropdown.less b/semantic/src/definitions/modules/dropdown.less
index c726781..b968213 100755
--- a/semantic/src/definitions/modules/dropdown.less
+++ b/semantic/src/definitions/modules/dropdown.less
@@ -547,7 +547,7 @@ select.ui.dropdown {
background: none transparent !important;
border: none !important;
box-shadow: none !important;
- cursor: pointer;
+ cursor: text;
top: 0em;
left: 0em;
width: 100%;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/semantic/src/definitions/modules/shape.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/shape.js b/semantic/src/definitions/modules/shape.js
index d86791a..d399046 100644
--- a/semantic/src/definitions/modules/shape.js
+++ b/semantic/src/definitions/modules/shape.js
@@ -244,6 +244,11 @@ $.fn.shape = function(parameters) {
var
$clone = $module.clone().addClass(className.loading),
$activeSide = $clone.find('.' + settings.className.active),
+ $nextSide = (nextIndex)
+ ? $clone.find(selector.side).eq(nextIndex)
+ : ( $activeSide.next(selector.side).length > 0 )
+ ? $activeSide.next(selector.side)
+ : $clone.find(selector.side).first(),
newWidth = (settings.width == 'next')
? $nextSide.outerWidth(true)
: (settings.width == 'initial')
@@ -253,12 +258,7 @@ $.fn.shape = function(parameters) {
? $nextSide.outerHeight(true)
: (settings.height == 'initial')
? $module.height()
- : settings.height,
- $nextSide = (nextIndex)
- ? $clone.find(selector.side).eq(nextIndex)
- : ( $activeSide.next(selector.side).length > 0 )
- ? $activeSide.next(selector.side)
- : $clone.find(selector.side).first()
+ : settings.height
;
$activeSide.removeClass(className.active);
$nextSide.addClass(className.active);
@@ -307,9 +307,12 @@ $.fn.shape = function(parameters) {
}
if( !module.is.animating()) {
module.debug('Flipping up', $nextSide);
+ var
+ transform = module.get.transform.up()
+ ;
module.set.stageSize();
module.stage.above();
- module.animate( module.get.transform.up() );
+ module.animate(transform);
}
else {
module.queue('flip up');
@@ -323,9 +326,12 @@ $.fn.shape = function(parameters) {
}
if( !module.is.animating()) {
module.debug('Flipping down', $nextSide);
+ var
+ transform = module.get.transform.down()
+ ;
module.set.stageSize();
module.stage.below();
- module.animate( module.get.transform.down() );
+ module.animate(transform);
}
else {
module.queue('flip down');
@@ -339,9 +345,12 @@ $.fn.shape = function(parameters) {
}
if( !module.is.animating()) {
module.debug('Flipping left', $nextSide);
+ var
+ transform = module.get.transform.left()
+ ;
module.set.stageSize();
module.stage.left();
- module.animate(module.get.transform.left() );
+ module.animate(transform);
}
else {
module.queue('flip left');
@@ -355,9 +364,12 @@ $.fn.shape = function(parameters) {
}
if( !module.is.animating()) {
module.debug('Flipping right', $nextSide);
+ var
+ transform = module.get.transform.right()
+ ;
module.set.stageSize();
module.stage.right();
- module.animate(module.get.transform.right() );
+ module.animate(transform);
}
else {
module.queue('flip right');
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings.py
----------------------------------------------------------------------
diff --git a/tap/settings.py b/tap/settings.py
new file mode 100644
index 0000000..8f66901
--- /dev/null
+++ b/tap/settings.py
@@ -0,0 +1,135 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+#SECRET_KEY = 'm^7q3z0x9q%)fb6^lo(=%=$=5+g7h2(w8pfhxi0pw_#)xnw(!9'
+SECRET_KEY = 'ro4o76lktk+x)0^fwp^(tua76p2y$p_2*19$gnk8+!)k^er0p='
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'appmgr.apps.AppmgrConfig',
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+]
+
+MIDDLEWARE_CLASSES = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'tap.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [
+ os.path.join(BASE_DIR, 'templates'),
+ ],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
+ 'NAME': 'tapdb',
+ 'USER': 'tapuser',
+ 'PASSWORD': 'Dr@p3rUs3r',
+ 'HOST': 'localhost',
+ 'PORT': '',
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.9/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.9/howto/static-files/
+
+STATIC_URL = '/static/'
+
+# STATIC_ROOT = os.path.join(BASE_DIR, "static/")
+
+STATICFILES_DIRS = (
+ os.path.join(BASE_DIR, "static"),
+)
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/archive/secret2.py
----------------------------------------------------------------------
diff --git a/tap/settings/archive/secret2.py b/tap/settings/archive/secret2.py
new file mode 100644
index 0000000..492f0d6
--- /dev/null
+++ b/tap/settings/archive/secret2.py
@@ -0,0 +1,12 @@
+"""
+Secret Django settings for tap project.
+"""
+
+# SECURITY WARNING: keep the secret key used in production secret!
+MY_SECRET_KEY = 'ro4o76lktk+x)0^fwp^(tua76p2y$p_2*19$gnk8+!)k^er0p='
+MY_DB_NAME = 'tapdb'
+MY_DB_USER = 'tapuser'
+MY_DB_PASSWORD = 'Dr@p3rUs3r'
+
+MY_EMAIL_PASSWORD =''
+ADMIN_EMAILS = (('Steve', 'syork@draper.com'))
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/archive/settings2.py
----------------------------------------------------------------------
diff --git a/tap/settings/archive/settings2.py b/tap/settings/archive/settings2.py
new file mode 100644
index 0000000..92626d3
--- /dev/null
+++ b/tap/settings/archive/settings2.py
@@ -0,0 +1,135 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'm^7q3z0x9q%)fb6^lo(=%=$=5+g7h2(w8pfhxi0pw_#)xnw(!9'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'appmgr.apps.AppmgrConfig',
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ #'grappelli',
+]
+
+MIDDLEWARE_CLASSES = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'tap.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [
+ os.path.join(BASE_DIR, 'templates'),
+ ],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
+ 'NAME': 'tapdb',
+ 'USER': 'tapuser',
+ 'PASSWORD': 'Dr@perUs3r!',
+ 'HOST': 'localhost',
+ 'PORT': '',
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.9/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.9/howto/static-files/
+
+STATIC_URL = '/static/'
+
+# STATIC_ROOT = os.path.join(BASE_DIR, "static/")
+
+STATICFILES_DIRS = (
+ os.path.join(BASE_DIR, "static"),
+)
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/dev.py
----------------------------------------------------------------------
diff --git a/tap/settings/dev.py b/tap/settings/dev.py
index ef49e67..9847fd0 100644
--- a/tap/settings/dev.py
+++ b/tap/settings/dev.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
"""
Django settings for tap project.
@@ -24,7 +25,7 @@ https://docs.djangoproject.com/en/1.8/ref/settings/
import os
-from base import *
+from settings import *
INSTALLED_APPS += (
'django_extensions',
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/production.py
----------------------------------------------------------------------
diff --git a/tap/settings/production.py b/tap/settings/production.py
index 28495cc..4fbfaa5 100644
--- a/tap/settings/production.py
+++ b/tap/settings/production.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
"""
Django settings for tap project.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/settings/settings.py
----------------------------------------------------------------------
diff --git a/tap/settings/settings.py b/tap/settings/settings.py
new file mode 100755
index 0000000..1011853
--- /dev/null
+++ b/tap/settings/settings.py
@@ -0,0 +1,181 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+import os
+from secret import *
+
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = MY_SECRET_KEY
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = ['*']
+
+SITE_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
+
+SITE_ID = 1
+
+# Email integration setup
+EMAIL_USE_TLS = True
+EMAIL_HOST = 'email-smtp.us-east-1.amazonaws.com'
+EMAIL_PORT = 587
+EMAIL_HOST_USER = 'AKIAJJDM2ZC67STGF4IA'
+EMAIL_HOST_PASSWORD = MY_EMAIL_PASSWORD
+
+# Configurable email addresses
+# These are addresses where mail is sent from...
+EMAIL_FROM_NOMINAL_ADDRESS = "onlinetesting@xdataonline.com"
+EMAIL_FROM_ERROR_ADDRESS = "no-reply@xdataonline.com"
+# These are addresses used to send mail to...
+EMAIL_TO_ERROR_ADDRESS = "errors@xdataonline.com"
+
+
+# Application definition
+
+INSTALLED_APPS = (
+ 'grappelli', # must be before django.contrib.admin
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.sites',
+ 'django.contrib.staticfiles',
+ 'custom_user',
+ 'app_mgr',
+ 'axes',
+ 'rest_framework',
+ 'rest_framework.authtoken',
+ 'guardian',
+ 'webpack_loader',
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+ 'django.middleware.security.SecurityMiddleware',
+)
+
+ROOT_URLCONF = 'tap.urls'
+
+AUTHENTICATION_BACKENDS = (
+ 'django.contrib.auth.backends.ModelBackend',
+ 'guardian.backends.ObjectPermissionBackend',
+ )
+GUARDIAN_MONKEY_PATCH = False
+
+AUTH_USER_MODEL = 'app_mgr.UserProfile'
+
+REST_FRAMEWORK = {
+ 'DEFAULT_AUTHENTICATION_CLASSES': (
+ 'rest_framework.authentication.TokenAuthentication',
+ )
+}
+LOGIN_REDIRECT_URL = '/app_mgr/users'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [os.path.join(SITE_ROOT, 'templates')],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
+ 'NAME': MY_DB_NAME,
+ 'USER': MY_DB_USER,
+ 'PASSWORD': MY_DB_PASSWORD,
+ 'HOST': 'localhost',
+ 'PORT': '',
+ }
+}
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.8/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'America/New_York'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+#STATIC_ROOT = os.path.join(BASE_DIR, '../static')
+
+STATIC_URL = '/static/'
+
+STATICFILES_DIRS = [
+ os.path.join(BASE_DIR, '../static'),
+]
+
+LOGGING = {
+ 'version': 1,
+ 'disable_existing_loggers': True,
+ 'formatters': {
+ 'verbose': {
+ 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
+ },
+ },
+ 'handlers': {
+ 'console': {
+ 'level': 'NOTSET',
+ 'class': 'logging.StreamHandler',
+ 'formatter': 'verbose'
+ }
+ },
+ 'loggers': {
+ '': {
+ 'handlers': ['console'],
+ 'level': 'NOTSET',
+ },
+ 'django.request': {
+ 'handlers': ['console'],
+ 'propagate': False,
+ 'level': 'ERROR'
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/urls.py
----------------------------------------------------------------------
diff --git a/tap/urls.py b/tap/urls.py
index 582735a..eee23c2 100644
--- a/tap/urls.py
+++ b/tap/urls.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
"""tap URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
@@ -26,6 +27,8 @@ Class-based views
Including another URLconf
1. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
+from django.conf import settings
+from django.conf.urls.static import static
from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import TemplateView
@@ -38,5 +41,8 @@ urlpatterns = [
url(r'^app_mgr/', include('app_mgr.urls', namespace='app_mgr')),
#url(r'^api-auth/', include('rest_framework.urls')), #used for basic authentication (cookies)
url(r'^api-token-auth/', token_views.obtain_auth_token),
- url(r'', TemplateView.as_view(template_name='index.html')),
-]
+ url(r'^$', TemplateView.as_view(template_name='index.html')),
+ ##below are test views
+ url(r'^view2/', TemplateView.as_view(template_name='view2.html')),
+ url(r'^view1/', TemplateView.as_view(template_name='view1.html')),
+] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/tap/wsgi.py
----------------------------------------------------------------------
diff --git a/tap/wsgi.py b/tap/wsgi.py
index c79164d..88859a5 100644
--- a/tap/wsgi.py
+++ b/tap/wsgi.py
@@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+
"""
WSGI config for tap project.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/templates/main.html
----------------------------------------------------------------------
diff --git a/templates/main.html b/templates/main.html
new file mode 100644
index 0000000..fc706b4
--- /dev/null
+++ b/templates/main.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Tap Home</title>
+ {% load staticfiles %}
+ <link rel="stylesheet" href="{% static "semantic.min.css" %}">
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
+ <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
+ <script src="{% static "semantic.min.js" %}"></script>
+ <link href="{% static "styles.min.css" %}" rel="stylesheet">
+</head>
+<body>
+ <div id="main-container">
+ <div id="react-container" />
+ </div>
+ <!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
+ <script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
+ <script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+ <script src="{% static "app.js" %}"></script>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/9cd21f5b/vagrant/settings.py
----------------------------------------------------------------------
diff --git a/vagrant/settings.py b/vagrant/settings.py
new file mode 100644
index 0000000..caa6344
--- /dev/null
+++ b/vagrant/settings.py
@@ -0,0 +1,135 @@
+"""
+Django settings for tap project.
+
+Generated by 'django-admin startproject' using Django 1.9.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.9/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.9/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'm^7q3z0x9q%)fb6^lo(=%=$=5+g7h2(w8pfhxi0pw_#)xnw(!9'
+#ro4o76lktk+x)0^fwp^(tua76p2y$p_2*19$gnk8+!)k^er0p='
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = [
+ 'appmgr.apps.AppmgrConfig',
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+]
+
+MIDDLEWARE_CLASSES = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'tap.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [
+ os.path.join(BASE_DIR, 'templates'),
+ ],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'tap.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
+ 'NAME': 'tapdb',
+ 'USER': 'tapuser',
+ 'PASSWORD': 'Dr@p3rUs3r',
+ 'HOST': 'localhost',
+ 'PORT': '',
+ }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.9/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.9/howto/static-files/
+
+STATIC_URL = '/static/'
+
+STATIC_ROOT = os.path.join(BASE_DIR, "static")
+
+STATICFILES_DIRS = (
+ os.path.join(BASE_DIR, "static"),
+)
[45/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
Cherry pick front end bundle
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/db97ec6f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/db97ec6f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/db97ec6f
Branch: refs/heads/master
Commit: db97ec6f27469c23a3069fd668f7fff5bb559505
Parents: 1c688a7
Author: Clay Gimenez <cg...@draper.com>
Authored: Sun Jul 24 17:51:24 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Tue Oct 11 14:40:09 2016 -0400
----------------------------------------------------------------------
.babelrc | 4 +
.gitignore | 11 +
Vagrantfile | 4 +-
gulpfile.babel.js | 45 +
package.json | 98 +
public/actions/app.js | 25 +
public/actions/auth.js | 9 +
public/actions/index.js | 4 +
public/actions/org.js | 17 +
public/actions/user.js | 17 +
public/components/AppProfile.jsx | 40 +
public/components/AppResults.jsx | 234 ++
public/components/AppSettings.jsx | 25 +
public/components/Feed.jsx | 35 +
public/components/Home.jsx | 72 +
public/components/OrgProfile.jsx | 37 +
public/components/OrgSettings.jsx | 26 +
public/components/Profile.jsx | 39 +
public/components/Settings.jsx | 53 +
public/components/Sidebox.jsx | 37 +
public/components/UserProfile.jsx | 30 +
public/components/UserSettings.jsx | 25 +
public/components/visualizations/Counts.jsx | 206 +
.../components/visualizations/GraphMetrics.jsx | 404 ++
.../components/visualizations/HorizontalBar.jsx | 170 +
.../components/visualizations/VerticalBar.jsx | 170 +
public/constants/ActionTypes.js | 16 +
public/containers/App.jsx | 40 +
public/containers/Main.jsx | 89 +
public/containers/Org.jsx | 43 +
public/containers/User.jsx | 37 +
public/index.jsx | 63 +
public/reducers/app.js | 99 +
public/reducers/auth.js | 17 +
public/reducers/index.js | 15 +
public/reducers/org.js | 46 +
public/reducers/user.js | 46 +
public/store/configureStore.js | 15 +
semantic.json | 22 +
semantic/gulpfile.js | 72 +
semantic/src/definitions/behaviors/api.js | 1167 ++++++
semantic/src/definitions/behaviors/colorize.js | 280 ++
semantic/src/definitions/behaviors/form.js | 1552 ++++++++
semantic/src/definitions/behaviors/state.js | 708 ++++
.../src/definitions/behaviors/visibility.js | 1283 ++++++
semantic/src/definitions/behaviors/visit.js | 525 +++
.../src/definitions/collections/breadcrumb.less | 122 +
semantic/src/definitions/collections/form.less | 1045 +++++
semantic/src/definitions/collections/grid.less | 1920 +++++++++
semantic/src/definitions/collections/menu.less | 1972 ++++++++++
.../src/definitions/collections/message.less | 478 +++
semantic/src/definitions/collections/table.less | 1114 ++++++
semantic/src/definitions/elements/button.less | 3432 ++++++++++++++++
.../src/definitions/elements/container.less | 143 +
semantic/src/definitions/elements/divider.less | 255 ++
semantic/src/definitions/elements/flag.less | 52 +
semantic/src/definitions/elements/header.less | 708 ++++
semantic/src/definitions/elements/icon.less | 477 +++
semantic/src/definitions/elements/image.less | 324 ++
semantic/src/definitions/elements/input.less | 507 +++
semantic/src/definitions/elements/label.less | 1257 ++++++
semantic/src/definitions/elements/list.less | 951 +++++
semantic/src/definitions/elements/loader.less | 332 ++
semantic/src/definitions/elements/rail.less | 154 +
semantic/src/definitions/elements/reveal.less | 265 ++
semantic/src/definitions/elements/segment.less | 768 ++++
semantic/src/definitions/elements/step.less | 562 +++
semantic/src/definitions/globals/reset.less | 40 +
semantic/src/definitions/globals/site.js | 487 +++
semantic/src/definitions/globals/site.less | 166 +
semantic/src/definitions/modules/accordion.js | 610 +++
semantic/src/definitions/modules/accordion.less | 219 ++
semantic/src/definitions/modules/checkbox.js | 831 ++++
semantic/src/definitions/modules/checkbox.less | 595 +++
semantic/src/definitions/modules/dimmer.js | 711 ++++
semantic/src/definitions/modules/dimmer.less | 189 +
semantic/src/definitions/modules/dropdown.js | 3717 ++++++++++++++++++
semantic/src/definitions/modules/dropdown.less | 1352 +++++++
semantic/src/definitions/modules/embed.js | 696 ++++
semantic/src/definitions/modules/embed.less | 163 +
semantic/src/definitions/modules/modal.js | 907 +++++
semantic/src/definitions/modules/modal.less | 484 +++
semantic/src/definitions/modules/nag.js | 507 +++
semantic/src/definitions/modules/nag.less | 158 +
semantic/src/definitions/modules/popup.js | 1473 +++++++
semantic/src/definitions/modules/popup.less | 712 ++++
semantic/src/definitions/modules/progress.js | 910 +++++
semantic/src/definitions/modules/progress.less | 503 +++
semantic/src/definitions/modules/rating.js | 508 +++
semantic/src/definitions/modules/rating.less | 191 +
semantic/src/definitions/modules/search.js | 1398 +++++++
semantic/src/definitions/modules/search.less | 417 ++
semantic/src/definitions/modules/shape.js | 909 +++++
semantic/src/definitions/modules/shape.less | 150 +
semantic/src/definitions/modules/sidebar.js | 1036 +++++
semantic/src/definitions/modules/sidebar.less | 552 +++
semantic/src/definitions/modules/sticky.js | 936 +++++
semantic/src/definitions/modules/sticky.less | 74 +
semantic/src/definitions/modules/tab.js | 928 +++++
semantic/src/definitions/modules/tab.less | 94 +
semantic/src/definitions/modules/transition.js | 1090 +++++
.../src/definitions/modules/transition.less | 78 +
semantic/src/definitions/views/ad.less | 268 ++
semantic/src/definitions/views/card.less | 1059 +++++
semantic/src/definitions/views/comment.less | 255 ++
semantic/src/definitions/views/feed.less | 278 ++
semantic/src/definitions/views/item.less | 464 +++
semantic/src/definitions/views/statistic.less | 557 +++
semantic/src/semantic.less | 66 +
.../src/site/collections/breadcrumb.overrides | 3 +
.../src/site/collections/breadcrumb.variables | 3 +
semantic/src/site/collections/form.overrides | 3 +
semantic/src/site/collections/form.variables | 3 +
semantic/src/site/collections/grid.overrides | 3 +
semantic/src/site/collections/grid.variables | 3 +
semantic/src/site/collections/menu.overrides | 3 +
semantic/src/site/collections/menu.variables | 3 +
semantic/src/site/collections/message.overrides | 3 +
semantic/src/site/collections/message.variables | 3 +
semantic/src/site/collections/table.overrides | 3 +
semantic/src/site/collections/table.variables | 3 +
semantic/src/site/elements/button.overrides | 3 +
semantic/src/site/elements/button.variables | 3 +
semantic/src/site/elements/container.overrides | 3 +
semantic/src/site/elements/container.variables | 3 +
semantic/src/site/elements/divider.overrides | 3 +
semantic/src/site/elements/divider.variables | 3 +
semantic/src/site/elements/flag.overrides | 3 +
semantic/src/site/elements/flag.variables | 3 +
semantic/src/site/elements/header.overrides | 3 +
semantic/src/site/elements/header.variables | 3 +
semantic/src/site/elements/icon.overrides | 3 +
semantic/src/site/elements/icon.variables | 3 +
semantic/src/site/elements/image.overrides | 3 +
semantic/src/site/elements/image.variables | 3 +
semantic/src/site/elements/input.overrides | 3 +
semantic/src/site/elements/input.variables | 3 +
semantic/src/site/elements/label.overrides | 3 +
semantic/src/site/elements/label.variables | 3 +
semantic/src/site/elements/list.overrides | 3 +
semantic/src/site/elements/list.variables | 3 +
semantic/src/site/elements/loader.overrides | 3 +
semantic/src/site/elements/loader.variables | 3 +
semantic/src/site/elements/rail.overrides | 3 +
semantic/src/site/elements/rail.variables | 3 +
semantic/src/site/elements/reveal.overrides | 3 +
semantic/src/site/elements/reveal.variables | 3 +
semantic/src/site/elements/segment.overrides | 3 +
semantic/src/site/elements/segment.variables | 3 +
semantic/src/site/elements/step.overrides | 3 +
semantic/src/site/elements/step.variables | 3 +
semantic/src/site/globals/reset.overrides | 3 +
semantic/src/site/globals/reset.variables | 3 +
semantic/src/site/globals/site.overrides | 3 +
semantic/src/site/globals/site.variables | 16 +
semantic/src/site/modules/accordion.overrides | 3 +
semantic/src/site/modules/accordion.variables | 3 +
semantic/src/site/modules/chatroom.overrides | 3 +
semantic/src/site/modules/chatroom.variables | 3 +
semantic/src/site/modules/checkbox.overrides | 3 +
semantic/src/site/modules/checkbox.variables | 3 +
semantic/src/site/modules/dimmer.overrides | 3 +
semantic/src/site/modules/dimmer.variables | 3 +
semantic/src/site/modules/dropdown.overrides | 3 +
semantic/src/site/modules/dropdown.variables | 3 +
semantic/src/site/modules/embed.overrides | 3 +
semantic/src/site/modules/embed.variables | 0
semantic/src/site/modules/modal.overrides | 3 +
semantic/src/site/modules/modal.variables | 3 +
semantic/src/site/modules/nag.overrides | 3 +
semantic/src/site/modules/nag.variables | 3 +
semantic/src/site/modules/popup.overrides | 3 +
semantic/src/site/modules/popup.variables | 3 +
semantic/src/site/modules/progress.overrides | 3 +
semantic/src/site/modules/progress.variables | 3 +
semantic/src/site/modules/rating.overrides | 3 +
semantic/src/site/modules/rating.variables | 3 +
semantic/src/site/modules/search.overrides | 3 +
semantic/src/site/modules/search.variables | 3 +
semantic/src/site/modules/shape.overrides | 3 +
semantic/src/site/modules/shape.variables | 3 +
semantic/src/site/modules/sidebar.overrides | 3 +
semantic/src/site/modules/sidebar.variables | 3 +
semantic/src/site/modules/sticky.overrides | 3 +
semantic/src/site/modules/sticky.variables | 3 +
semantic/src/site/modules/tab.overrides | 3 +
semantic/src/site/modules/tab.variables | 3 +
semantic/src/site/modules/transition.overrides | 3 +
semantic/src/site/modules/transition.variables | 3 +
semantic/src/site/views/ad.overrides | 3 +
semantic/src/site/views/ad.variables | 3 +
semantic/src/site/views/card.overrides | 3 +
semantic/src/site/views/card.variables | 3 +
semantic/src/site/views/comment.overrides | 3 +
semantic/src/site/views/comment.variables | 3 +
semantic/src/site/views/feed.overrides | 3 +
semantic/src/site/views/feed.variables | 3 +
semantic/src/site/views/item.overrides | 3 +
semantic/src/site/views/item.variables | 3 +
semantic/src/site/views/statistic.overrides | 3 +
semantic/src/site/views/statistic.variables | 3 +
semantic/src/theme.config | 92 +
semantic/src/theme.less | 61 +
.../src/themes/amazon/elements/button.overrides | 46 +
.../src/themes/amazon/elements/button.variables | 58 +
.../src/themes/amazon/globals/site.variables | 43 +
.../src/themes/basic/assets/fonts/icons.eot | Bin 0 -> 40166 bytes
.../src/themes/basic/assets/fonts/icons.svg | 450 +++
.../src/themes/basic/assets/fonts/icons.ttf | Bin 0 -> 39924 bytes
.../src/themes/basic/assets/fonts/icons.woff | Bin 0 -> 24676 bytes
.../themes/basic/collections/table.overrides | 4 +
.../themes/basic/collections/table.variables | 11 +
.../src/themes/basic/elements/button.overrides | 4 +
.../src/themes/basic/elements/button.variables | 44 +
.../src/themes/basic/elements/icon.overrides | 189 +
.../src/themes/basic/elements/icon.variables | 12 +
.../src/themes/basic/elements/step.overrides | 10 +
.../src/themes/basic/elements/step.variables | 18 +
.../src/themes/basic/globals/reset.overrides | 5 +
.../src/themes/basic/globals/reset.variables | 3 +
.../src/themes/basic/modules/progress.overrides | 3 +
.../src/themes/basic/modules/progress.variables | 15 +
semantic/src/themes/basic/views/card.overrides | 4 +
semantic/src/themes/basic/views/card.variables | 35 +
.../themes/bookish/elements/header.overrides | 15 +
.../themes/bookish/elements/header.variables | 37 +
.../themes/bootstrap3/elements/button.overrides | 0
.../themes/bootstrap3/elements/button.variables | 63 +
.../themes/chubby/collections/form.overrides | 16 +
.../themes/chubby/collections/form.variables | 9 +
.../themes/chubby/collections/menu.overrides | 0
.../themes/chubby/collections/menu.variables | 40 +
.../src/themes/chubby/elements/button.overrides | 21 +
.../src/themes/chubby/elements/button.variables | 57 +
.../src/themes/chubby/elements/header.overrides | 5 +
.../src/themes/chubby/elements/header.variables | 21 +
.../themes/chubby/modules/accordion.overrides | 7 +
.../themes/chubby/modules/accordion.variables | 15 +
.../src/themes/chubby/views/comment.overrides | 12 +
.../src/themes/chubby/views/comment.variables | 46 +
.../themes/classic/collections/table.overrides | 3 +
.../themes/classic/collections/table.variables | 14 +
.../themes/classic/elements/button.overrides | 3 +
.../themes/classic/elements/button.variables | 96 +
.../themes/classic/elements/header.overrides | 3 +
.../themes/classic/elements/header.variables | 12 +
.../themes/classic/modules/progress.overrides | 3 +
.../themes/classic/modules/progress.variables | 9 +
.../src/themes/classic/views/card.overrides | 98 +
.../src/themes/classic/views/card.variables | 22 +
.../themes/colored/modules/checkbox.overrides | 0
.../themes/colored/modules/checkbox.variables | 29 +
.../src/themes/default/assets/fonts/icons.eot | Bin 0 -> 76518 bytes
.../src/themes/default/assets/fonts/icons.svg | 685 ++++
.../src/themes/default/assets/fonts/icons.ttf | Bin 0 -> 152796 bytes
.../src/themes/default/assets/fonts/icons.woff | Bin 0 -> 90412 bytes
.../src/themes/default/assets/fonts/icons.woff2 | Bin 0 -> 71896 bytes
.../src/themes/default/assets/images/flags.png | Bin 0 -> 28123 bytes
.../default/collections/breadcrumb.overrides | 3 +
.../default/collections/breadcrumb.variables | 33 +
.../themes/default/collections/form.overrides | 3 +
.../themes/default/collections/form.variables | 195 +
.../themes/default/collections/grid.overrides | 4 +
.../themes/default/collections/grid.variables | 103 +
.../themes/default/collections/menu.overrides | 3 +
.../themes/default/collections/menu.variables | 458 +++
.../default/collections/message.overrides | 3 +
.../default/collections/message.variables | 157 +
.../themes/default/collections/table.overrides | 0
.../themes/default/collections/table.variables | 246 ++
.../themes/default/elements/button.overrides | 3 +
.../themes/default/elements/button.variables | 358 ++
.../themes/default/elements/container.overrides | 3 +
.../themes/default/elements/container.variables | 58 +
.../themes/default/elements/divider.overrides | 18 +
.../themes/default/elements/divider.variables | 53 +
.../src/themes/default/elements/flag.overrides | 986 +++++
.../src/themes/default/elements/flag.variables | 13 +
.../themes/default/elements/header.overrides | 4 +
.../themes/default/elements/header.variables | 151 +
.../src/themes/default/elements/icon.overrides | 942 +++++
.../src/themes/default/elements/icon.variables | 62 +
.../src/themes/default/elements/image.overrides | 3 +
.../src/themes/default/elements/image.variables | 44 +
.../src/themes/default/elements/input.overrides | 3 +
.../src/themes/default/elements/input.variables | 101 +
.../src/themes/default/elements/label.overrides | 3 +
.../src/themes/default/elements/label.variables | 254 ++
.../src/themes/default/elements/list.overrides | 3 +
.../src/themes/default/elements/list.variables | 224 ++
.../themes/default/elements/loader.overrides | 3 +
.../themes/default/elements/loader.variables | 72 +
.../src/themes/default/elements/rail.overrides | 3 +
.../src/themes/default/elements/rail.variables | 34 +
.../themes/default/elements/reveal.overrides | 3 +
.../themes/default/elements/reveal.variables | 17 +
.../themes/default/elements/segment.overrides | 3 +
.../themes/default/elements/segment.variables | 139 +
.../src/themes/default/elements/step.overrides | 16 +
.../src/themes/default/elements/step.variables | 130 +
.../src/themes/default/globals/reset.overrides | 429 ++
.../src/themes/default/globals/reset.variables | 3 +
.../src/themes/default/globals/site.overrides | 3 +
.../src/themes/default/globals/site.variables | 936 +++++
.../themes/default/modules/accordion.overrides | 28 +
.../themes/default/modules/accordion.variables | 100 +
.../themes/default/modules/chatroom.overrides | 3 +
.../themes/default/modules/chatroom.variables | 3 +
.../themes/default/modules/checkbox.overrides | 36 +
.../themes/default/modules/checkbox.variables | 189 +
.../src/themes/default/modules/dimmer.overrides | 3 +
.../src/themes/default/modules/dimmer.variables | 61 +
.../themes/default/modules/dropdown.overrides | 62 +
.../themes/default/modules/dropdown.variables | 373 ++
.../src/themes/default/modules/embed.overrides | 3 +
.../src/themes/default/modules/embed.variables | 53 +
.../src/themes/default/modules/modal.overrides | 3 +
.../src/themes/default/modules/modal.variables | 151 +
.../src/themes/default/modules/nag.overrides | 3 +
.../src/themes/default/modules/nag.variables | 74 +
.../src/themes/default/modules/popup.overrides | 3 +
.../src/themes/default/modules/popup.variables | 137 +
.../themes/default/modules/progress.overrides | 3 +
.../themes/default/modules/progress.variables | 113 +
.../src/themes/default/modules/rating.overrides | 68 +
.../src/themes/default/modules/rating.variables | 103 +
.../src/themes/default/modules/search.overrides | 3 +
.../src/themes/default/modules/search.variables | 158 +
.../src/themes/default/modules/shape.overrides | 3 +
.../src/themes/default/modules/shape.variables | 40 +
.../themes/default/modules/sidebar.overrides | 3 +
.../themes/default/modules/sidebar.variables | 45 +
.../src/themes/default/modules/sticky.overrides | 3 +
.../src/themes/default/modules/sticky.variables | 7 +
.../src/themes/default/modules/tab.overrides | 3 +
.../src/themes/default/modules/tab.variables | 11 +
.../themes/default/modules/transition.overrides | 910 +++++
.../themes/default/modules/transition.variables | 10 +
semantic/src/themes/default/views/ad.overrides | 3 +
semantic/src/themes/default/views/ad.variables | 13 +
.../src/themes/default/views/card.overrides | 3 +
.../src/themes/default/views/card.variables | 220 ++
.../src/themes/default/views/comment.overrides | 3 +
.../src/themes/default/views/comment.variables | 104 +
.../src/themes/default/views/feed.overrides | 3 +
.../src/themes/default/views/feed.variables | 141 +
.../src/themes/default/views/item.overrides | 3 +
.../src/themes/default/views/item.variables | 154 +
.../themes/default/views/statistic.overrides | 3 +
.../themes/default/views/statistic.variables | 98 +
.../src/themes/duo/elements/loader.overrides | 3 +
.../src/themes/duo/elements/loader.variables | 6 +
.../fixed-width/collections/grid.overrides | 3 +
.../fixed-width/collections/grid.variables | 23 +
.../themes/fixed-width/modules/modal.overrides | 3 +
.../themes/fixed-width/modules/modal.variables | 37 +
.../src/themes/flat/collections/form.overrides | 28 +
.../src/themes/flat/collections/form.variables | 73 +
semantic/src/themes/flat/globals/site.overrides | 3 +
semantic/src/themes/flat/globals/site.variables | 107 +
.../github/assets/fonts/octicons-local.ttf | Bin 0 -> 53604 bytes
.../src/themes/github/assets/fonts/octicons.svg | 200 +
.../src/themes/github/assets/fonts/octicons.ttf | Bin 0 -> 31740 bytes
.../themes/github/assets/fonts/octicons.woff | Bin 0 -> 17772 bytes
.../github/collections/breadcrumb.variables | 11 +
.../themes/github/collections/form.overrides | 16 +
.../themes/github/collections/form.variables | 40 +
.../themes/github/collections/grid.variables | 2 +
.../themes/github/collections/menu.overrides | 7 +
.../themes/github/collections/menu.variables | 61 +
.../themes/github/collections/message.overrides | 11 +
.../themes/github/collections/message.variables | 29 +
.../themes/github/collections/table.variables | 8 +
.../src/themes/github/elements/button.overrides | 4 +
.../src/themes/github/elements/button.variables | 77 +
.../src/themes/github/elements/header.variables | 9 +
.../src/themes/github/elements/icon.overrides | 208 +
.../src/themes/github/elements/icon.variables | 13 +
.../src/themes/github/elements/image.variables | 5 +
.../src/themes/github/elements/input.overrides | 32 +
.../src/themes/github/elements/input.variables | 16 +
.../src/themes/github/elements/label.overrides | 9 +
.../src/themes/github/elements/label.variables | 4 +
.../themes/github/elements/segment.overrides | 3 +
.../themes/github/elements/segment.variables | 40 +
.../src/themes/github/elements/step.overrides | 26 +
.../src/themes/github/elements/step.variables | 26 +
.../src/themes/github/globals/site.variables | 47 +
.../themes/github/modules/dropdown.overrides | 53 +
.../themes/github/modules/dropdown.variables | 35 +
.../src/themes/github/modules/popup.variables | 12 +
.../themes/gmail/collections/message.overrides | 0
.../themes/gmail/collections/message.variables | 15 +
.../src/themes/instagram/views/card.overrides | 12 +
.../src/themes/instagram/views/card.variables | 23 +
.../themes/material/collections/menu.overrides | 1 +
.../themes/material/collections/menu.variables | 10 +
.../themes/material/elements/button.overrides | 15 +
.../themes/material/elements/button.variables | 97 +
.../themes/material/elements/header.overrides | 15 +
.../themes/material/elements/header.variables | 21 +
.../src/themes/material/globals/site.overrides | 0
.../src/themes/material/globals/site.variables | 120 +
.../themes/material/modules/dropdown.overrides | 5 +
.../themes/material/modules/dropdown.variables | 20 +
.../src/themes/material/modules/modal.overrides | 6 +
.../src/themes/material/modules/modal.variables | 15 +
.../src/themes/pulsar/elements/loader.overrides | 70 +
.../src/themes/pulsar/elements/loader.variables | 7 +
.../src/themes/raised/elements/button.overrides | 3 +
.../src/themes/raised/elements/button.variables | 27 +
.../src/themes/resetcss/globals/reset.overrides | 52 +
.../src/themes/resetcss/globals/reset.variables | 3 +
.../src/themes/round/elements/button.overrides | 0
.../src/themes/round/elements/button.variables | 138 +
semantic/src/themes/rtl/globals/site.overrides | 6 +
semantic/src/themes/rtl/globals/site.variables | 14 +
.../themes/striped/modules/progress.overrides | 29 +
.../themes/striped/modules/progress.variables | 3 +
.../src/themes/timeline/views/feed.overrides | 27 +
.../src/themes/timeline/views/feed.variables | 36 +
.../themes/twitter/elements/button.overrides | 13 +
.../themes/twitter/elements/button.variables | 44 +
semantic/tasks/README.md | 17 +
semantic/tasks/admin/components/create.js | 332 ++
semantic/tasks/admin/components/init.js | 170 +
semantic/tasks/admin/components/update.js | 184 +
semantic/tasks/admin/distributions/create.js | 219 ++
semantic/tasks/admin/distributions/init.js | 169 +
semantic/tasks/admin/distributions/update.js | 179 +
semantic/tasks/admin/publish.js | 25 +
semantic/tasks/admin/register.js | 55 +
semantic/tasks/admin/release.js | 29 +
semantic/tasks/build.js | 50 +
semantic/tasks/check-install.js | 28 +
semantic/tasks/clean.js | 14 +
semantic/tasks/collections/README.md | 16 +
semantic/tasks/collections/admin.js | 49 +
semantic/tasks/collections/build.js | 19 +
semantic/tasks/collections/internal.js | 227 ++
semantic/tasks/collections/rtl.js | 16 +
semantic/tasks/config/admin/github.js | 37 +
semantic/tasks/config/admin/oauth.example.js | 11 +
semantic/tasks/config/admin/release.js | 111 +
semantic/tasks/config/admin/templates/README.md | 32 +
.../tasks/config/admin/templates/bower.json | 29 +
.../config/admin/templates/component-package.js | 14 +
.../tasks/config/admin/templates/composer.json | 20 +
.../tasks/config/admin/templates/css-package.js | 34 +
.../config/admin/templates/less-package.js | 21 +
.../tasks/config/admin/templates/package.json | 17 +
semantic/tasks/config/defaults.js | 117 +
semantic/tasks/config/docs.js | 32 +
semantic/tasks/config/npm/gulpfile.js | 72 +
semantic/tasks/config/project/config.js | 141 +
semantic/tasks/config/project/install.js | 763 ++++
semantic/tasks/config/project/release.js | 65 +
semantic/tasks/config/tasks.js | 164 +
semantic/tasks/config/user.js | 58 +
semantic/tasks/docs/build.js | 189 +
semantic/tasks/docs/metadata.js | 138 +
semantic/tasks/docs/serve.js | 255 ++
semantic/tasks/install.js | 457 +++
semantic/tasks/rtl/build.js | 132 +
semantic/tasks/rtl/watch.js | 221 ++
semantic/tasks/version.js | 11 +
semantic/tasks/watch.js | 231 ++
stylesheets/main.scss | 59 +
tap/templates/index.html | 15 +-
tasks/build.js | 41 +
tasks/django.js | 28 +
tasks/filesystem.js | 15 +
tasks/styles.js | 98 +
tasks/test.js | 26 +
474 files changed, 71665 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/.babelrc
----------------------------------------------------------------------
diff --git a/.babelrc b/.babelrc
new file mode 100644
index 0000000..86e2bb7
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,4 @@
+{
+ "presets": [ "es2015" ],
+ "retainLines": true
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 4b8a3bf..2c1979d 100755
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,14 @@ uploads/migrations/*
secret.py
static/results/*
+/semantic/dist/*
+npm-debug.log
+.tmp
+node_modules
+build
+
+static/*
+!static/admin/
+
+/public/neon_counts.js
+/public/neon_graph.js
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/Vagrantfile
----------------------------------------------------------------------
diff --git a/Vagrantfile b/Vagrantfile
index 5e7c632..8f4ce73 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -17,7 +17,7 @@ Vagrant.configure("2") do |config|
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
- # config.vm.box_check_update = false
+ config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
@@ -48,7 +48,7 @@ Vagrant.configure("2") do |config|
# vb.gui = true
#
# # Customize the amount of memory on the VM:
- vb.memory = "1024"
+ vb.memory = "2048"
vb.cpus = 2
end
#
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/gulpfile.babel.js
----------------------------------------------------------------------
diff --git a/gulpfile.babel.js b/gulpfile.babel.js
new file mode 100644
index 0000000..237ba50
--- /dev/null
+++ b/gulpfile.babel.js
@@ -0,0 +1,45 @@
+import gulp from 'gulp';
+import path from 'path';
+import del from 'del';
+import requireDir from 'require-dir';
+import runSequence from 'run-sequence';
+import gulpLoadPlugins from 'gulp-load-plugins';
+// import browserSync from 'browser-sync';
+
+requireDir('./tasks');
+
+const plugins = gulpLoadPlugins();
+// const reload = browserSync.reload;
+
+
+gulp.task('sync', () => {
+ // Include browsersync here
+});
+
+
+gulp.task('build', () => {
+ return runSequence(
+ 'clean',
+ [
+ 'styles:build',
+ 'js'
+ ],
+ 'symlink'
+ );
+});
+
+
+gulp.task('dev', () => {
+ return runSequence(
+ 'clean',
+ [
+ 'styles:build'
+ ],
+ [
+ // 'django',
+ // 'test',
+ 'styles',
+ 'js'
+ ]
+ );
+});
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..883cac9
--- /dev/null
+++ b/package.json
@@ -0,0 +1,98 @@
+{
+ "name": "tap",
+ "description": "Tap, The Software as a Sensor portal and visualization component",
+ "version": "0.1.0",
+ "private": true,
+ "license": "Apache-2.0",
+ "author": "Draper",
+ "contributors": [
+ "Clay Gimenez <cg...@draper.com>",
+ "Steven York <sy...@draper.com>",
+ "Fei Sun <fs...@draper.com>",
+ "Joshua Poore <jp...@draper.com>",
+ "Laura Mariano <lm...@draper.com>",
+ "Michelle Beard <mb...@draper.com>",
+ "Arthi Vezhavendan <av...@draper.com>"
+ ],
+ "homepage": "https://github.com/draperlaboratory/tap#readme",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/draperlaboratory/tap.git"
+ },
+ "bugs": {
+ "url": "https://github.com/draperlaboratory/tap/issues"
+ },
+ "keywords": [
+ "Tap"
+ ],
+ "engines": {
+ "node": ">= 4.4.5"
+ },
+ "dependencies": {
+ "better-console": "^0.2.4",
+ "d3": "^4.1.1",
+ "extend": "^3.0.0",
+ "gulp-chmod": "^1.3.0",
+ "gulp-clone": "^1.0.0",
+ "gulp-concat-css": "^2.3.0",
+ "gulp-copy": "0.0.2",
+ "gulp-dedupe": "0.0.2",
+ "gulp-flatten": "^0.3.0",
+ "gulp-header": "^1.8.7",
+ "gulp-help": "^1.6.1",
+ "gulp-if": "^2.0.1",
+ "gulp-less": "^3.1.0",
+ "gulp-minify-css": "^1.2.4",
+ "gulp-notify": "^2.2.0",
+ "gulp-plumber": "^1.1.0",
+ "gulp-print": "^2.0.1",
+ "gulp-rename": "^1.2.2",
+ "gulp-replace": "^0.5.4",
+ "gulp-rtlcss": "^1.0.0",
+ "gulp-watch": "^4.3.8",
+ "lodash": "^4.13.1",
+ "map-stream": "0.0.6",
+ "react": "^15.2.0",
+ "react-dom": "^15.2.0",
+ "react-redux": "^4.4.5",
+ "react-router": "^2.5.2",
+ "redux": "^3.5.2",
+ "redux-thunk": "^2.1.0",
+ "require-dot-file": "^0.4.0",
+ "semantic-ui": "^2.2.1",
+ "yamljs": "^0.2.8"
+ },
+ "devDependencies": {
+ "babel-core": "^6.10.4",
+ "babel-preset-es2015": "^6.9.0",
+ "babel-preset-react": "^6.11.1",
+ "babelify": "^7.3.0",
+ "browser-sync": "^2.13.0",
+ "browserify": "^13.0.1",
+ "chai": "^3.5.0",
+ "del": "^2.2.1",
+ "gulp": "^3.9.1",
+ "gulp-autoprefixer": "^3.1.0",
+ "gulp-concat": "^2.6.0",
+ "gulp-cssnano": "^2.1.2",
+ "gulp-eslint": "^3.0.1",
+ "gulp-load-plugins": "^1.2.4",
+ "gulp-mocha": "^2.2.0",
+ "gulp-newer": "^1.2.0",
+ "gulp-sass": "^2.3.2",
+ "gulp-size": "^2.1.0",
+ "gulp-sourcemaps": "^1.6.0",
+ "gulp-uglify": "^1.5.4",
+ "gulp-util": "^3.0.7",
+ "lodash.assign": "^4.0.9",
+ "redux-logger": "^2.6.1",
+ "require-dir": "^0.3.0",
+ "run-sequence": "^1.2.2",
+ "vinyl-buffer": "^1.0.0",
+ "vinyl-source-stream": "^1.1.0",
+ "watchify": "^3.7.0"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/actions/app.js
----------------------------------------------------------------------
diff --git a/public/actions/app.js b/public/actions/app.js
new file mode 100644
index 0000000..7c1254e
--- /dev/null
+++ b/public/actions/app.js
@@ -0,0 +1,25 @@
+import { REQUEST_APP, RECEIVE_APP, REQUEST_APP_UPDATE, CONFIRM_APP_UPDATE, REQUEST_APP_RESULTS, RECEIVE_APP_RESULTS } from '../constants/ActionTypes';
+
+export function fetchApp () {
+ return { type : REQUEST_APP };
+}
+
+export function receivedApp (app) {
+ return { type : RECEIVE_APP, app : app };
+}
+
+export function updateApp (update) {
+ return { type : REQUEST_APP_UPDATE, update : update };
+}
+
+export function confirmAppUpdate (success) {
+ return { type : CONFIRM_APP_UPDATE, saved : success };
+}
+
+export function fetchAppResults () {
+ return { type : REQUEST_APP_RESULTS };
+}
+
+export function receivedAppResults (results) {
+ return { type : RECEIVE_APP_RESULTS, results : results };
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/actions/auth.js
----------------------------------------------------------------------
diff --git a/public/actions/auth.js b/public/actions/auth.js
new file mode 100644
index 0000000..8dc9ec6
--- /dev/null
+++ b/public/actions/auth.js
@@ -0,0 +1,9 @@
+import { LOG_IN, LOG_OUT } from '../constants/ActionTypes';
+
+export function logIn () {
+ return { type : LOG_IN };
+}
+
+export function logOut () {
+ return { type : LOG_OUT };
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/actions/index.js
----------------------------------------------------------------------
diff --git a/public/actions/index.js b/public/actions/index.js
new file mode 100644
index 0000000..27914c4
--- /dev/null
+++ b/public/actions/index.js
@@ -0,0 +1,4 @@
+export * from './auth';
+export * from './user';
+export * from './org';
+export * from './app';
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/actions/org.js
----------------------------------------------------------------------
diff --git a/public/actions/org.js b/public/actions/org.js
new file mode 100644
index 0000000..95091ae
--- /dev/null
+++ b/public/actions/org.js
@@ -0,0 +1,17 @@
+import { REQUEST_ORG, RECEIVE_ORG, REQUEST_ORG_UPDATE, CONFIRM_ORG_UPDATE } from '../constants/ActionTypes';
+
+export function fetchOrg () {
+ return { type : REQUEST_ORG };
+}
+
+export function receivedOrg (org) {
+ return { type : RECEIVE_ORG, org : org };
+}
+
+export function updateOrg (update) {
+ return { type : REQUEST_ORG_UPDATE, update : update };
+}
+
+export function confirmOrgUpdate (success) {
+ return { type : CONFIRM_ORG_UPDATE, saved : success };
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/actions/user.js
----------------------------------------------------------------------
diff --git a/public/actions/user.js b/public/actions/user.js
new file mode 100644
index 0000000..8bb69a3
--- /dev/null
+++ b/public/actions/user.js
@@ -0,0 +1,17 @@
+import { REQUEST_USER, RECEIVE_USER, REQUEST_USER_UPDATE, CONFIRM_USER_UPDATE } from '../constants/ActionTypes';
+
+export function fetchUser () {
+ return { type : REQUEST_USER };
+}
+
+export function receivedUser (user) {
+ return { type : RECEIVE_USER, user : user };
+}
+
+export function updateUser (update) {
+ return { type : REQUEST_USER_UPDATE, update : update };
+}
+
+export function confirmUserUpdate (success) {
+ return { type : CONFIRM_USER_UPDATE, saved : success };
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/AppProfile.jsx
----------------------------------------------------------------------
diff --git a/public/components/AppProfile.jsx b/public/components/AppProfile.jsx
new file mode 100644
index 0000000..1615194
--- /dev/null
+++ b/public/components/AppProfile.jsx
@@ -0,0 +1,40 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+import Profile from './Profile';
+
+class AppProfile extends Component {
+ render () {
+ const { id, name, users } = this.props;
+
+ return (
+ <div className='ui text container'>
+ <div className='ui vertical basic page segment'>
+ <div className='ui large header'>
+ {name}
+ </div>
+ <Link to={`/app/${id}/settings`}>
+ <div className='ui brown button'>
+ Settings
+ </div>
+ </Link>
+ <Link to={`/app/${id}/results`}>
+ <div className='ui brown button'>
+ Results
+ </div>
+ </Link>
+ </div>
+
+ <Profile feed={['a', 1, 'c']} firstSide={users} firstType={'user'} />
+ </div>
+ );
+ }
+}
+
+AppProfile.propTypes = {
+ id : PropTypes.number,
+ name : PropTypes.string,
+ users : PropTypes.array,
+};
+
+export default AppProfile;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/AppResults.jsx
----------------------------------------------------------------------
diff --git a/public/components/AppResults.jsx b/public/components/AppResults.jsx
new file mode 100644
index 0000000..c8671f0
--- /dev/null
+++ b/public/components/AppResults.jsx
@@ -0,0 +1,234 @@
+import React, { Component, PropTypes } from 'react';
+
+import Counts from './visualizations/Counts';
+import GraphMetrics from './visualizations/GraphMetrics';
+
+class AppResults extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ result : 'counts',
+ metric : 'out_degree',
+ ethnicities : [1, 2, 3, 4, 5, 6, 7],
+ gender : 0,
+ ab : false,
+ };
+ }
+
+ componentDidMount() {
+ $('#ethnicity-accordion').accordion({
+ collapsible : true,
+ });
+ $('#results-controls').accordion({
+ collapsible : false,
+ });
+
+ $('.main-controls.title').on('click', (e) => {
+ let result = e.currentTarget.id;
+ if (result !== this.state.result) {
+ this.setState({ result : result });
+ }
+ });
+
+ $('.ui.radio.checkbox').checkbox({
+ onChange : () => {
+ let metric = $('input[name=metric]:checked').val();
+ this.setState({ metric : metric });
+ },
+ });
+
+ $('.ui.ethnicity.checkbox').checkbox({
+ onChange : () => {
+ let ethnicities = [];
+ $('input[name=ethnicity]:checked').each((i, el) => {
+ ethnicities.push(+$(el).val());
+ });
+ this.setState({ ethnicities : ethnicities });
+ },
+ });
+
+ $('#gender-select').dropdown({
+ onChange : (val) => {
+ this.setState({ gender : val });
+ },
+ });
+
+ $('#ab-toggle').checkbox({
+ onChange : () => {
+ this.setState({ ab : $('input[name=a-b]').is(':checked') });
+ },
+ });
+ }
+
+ render() {
+ return(
+ <div className='ui container'>
+ <div className='ui large header'>
+ Log Analysis for {this.props.name}
+ </div>
+
+ <div className='ui padded grid'>
+
+ <div className='four wide column'>
+ <div id='results-controls' className='ui vertical fluid accordion menu'>
+ <div className='item'>
+ <a id='counts' className='active main-controls title'>
+ <i className='dropdown icon'></i>
+ Activity Counts
+ </a>
+ <div className='active content'>
+ <div className='ui form'>
+
+ <div className='field'>
+ <div id='gender-select' className='ui fluid selection dropdown'>
+ <input type='hidden' name='gender'></input>
+ <i className='dropdown icon'></i>
+ <div className='default text'>Gender</div>
+ <div className='menu'>
+ <div className='item' data-value='0'>Both</div>
+ <div className='item' data-value='2'>Male</div>
+ <div className='item' data-value='1'>Female</div>
+ </div>
+ </div>
+ </div>
+
+ <div className='field'>
+ <div id='ethnicity-accordion' className='accordion'>
+ <div className='title'>
+ <i className='dropdown icon'></i>
+ Ethnicity
+ </div>
+ <div className='content'>
+
+ <div className='ui form'>
+ <div className='grouped fields'>
+ <div className='field'>
+ <div className='ui ethnicity checkbox'>
+ <input type='checkbox' name='ethnicity' value='1' defaultChecked></input>
+ <label>Asian</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui ethnicity checkbox'>
+ <input type='checkbox' name='ethnicity' value='2' defaultChecked></input>
+ <label>Pacific Islander</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui ethnicity checkbox'>
+ <input type='checkbox' name='ethnicity' value='3' defaultChecked></input>
+ <label>African American/Of African Descent</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui ethnicity checkbox'>
+ <input type='checkbox' name='ethnicity' value='4' defaultChecked></input>
+ <label>White/Caucasian</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui ethnicity checkbox'>
+ <input type='checkbox' name='ethnicity' value='5' defaultChecked></input>
+ <label>Native American</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui ethnicity checkbox'>
+ <input type='checkbox' name='ethnicity' value='6' defaultChecked></input>
+ <label>Indian</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui ethnicity checkbox'>
+ <input type='checkbox' name='ethnicity' value='7' defaultChecked></input>
+ <label>Decline to State</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div className='field'>
+ <div id='ab-toggle' className='ui toggle checkbox'>
+ <input type='checkbox' name='a-b'></input>
+ <label>A/B</label>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div className='item'>
+ <a id='graph' className='main-controls title'>
+ <i className='dropdown icon'></i>
+ Graph Metrics
+ </a>
+ <div className='content'>
+ <div className='ui form'>
+ <div className='grouped fields'>
+ <div className='field'>
+ <div className='ui radio checkbox'>
+ <input type='radio' name='metric' value='out_degree' defaultChecked></input>
+ <label>Out Degree</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui radio checkbox'>
+ <input type='radio' name='metric' value='in_degree'></input>
+ <label>In Degree</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui radio checkbox'>
+ <input type='radio' name='metric' value='betweenness_cent_dir_weighted'></input>
+ <label>Weighted Betweenness</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui radio checkbox'>
+ <input type='radio' name='metric' value='closeness_cent_dir_weighted'></input>
+ <label>Weighted Closeness</label>
+ </div>
+ </div>
+ <div className='field'>
+ <div className='ui radio checkbox'>
+ <input type='radio' name='metric' value='closeness_cent_dir_unweighted'></input>
+ <label>Unweighted Closeness</label>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div className='twelve wide column'>
+ <div className='ui basic row segment'>
+ {(() => {
+ switch (this.state.result) {
+ case 'graph':
+ return <GraphMetrics metric={this.state.metric} element={'graph-metrics-viz'} data={this.props.results.graph} />;
+ case 'counts':
+ default:
+ return <Counts filters={this.state} data={this.props.results.counts} />;
+ }
+ })()}
+
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
+
+AppResults.propTypes = {
+ name : PropTypes.string,
+ results : PropTypes.object,
+};
+
+export default AppResults;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/AppSettings.jsx
----------------------------------------------------------------------
diff --git a/public/components/AppSettings.jsx b/public/components/AppSettings.jsx
new file mode 100644
index 0000000..6eb4432
--- /dev/null
+++ b/public/components/AppSettings.jsx
@@ -0,0 +1,25 @@
+import React, { Component, PropTypes } from 'react';
+
+import Settings from './Settings';
+
+class AppSettings extends Component {
+ render() {
+ const { name, settings } = this.props;
+
+ return(
+ <div className='ui text container'>
+ <div className='ui large header'>
+ Settings for {name}
+ </div>
+ <Settings settings={settings} />
+ </div>
+ );
+ }
+}
+
+AppSettings.propTypes = {
+ name : PropTypes.string,
+ settings : PropTypes.object,
+};
+
+export default AppSettings;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/Feed.jsx
----------------------------------------------------------------------
diff --git a/public/components/Feed.jsx b/public/components/Feed.jsx
new file mode 100644
index 0000000..f7b15f5
--- /dev/null
+++ b/public/components/Feed.jsx
@@ -0,0 +1,35 @@
+import React, { Component, PropTypes } from 'react';
+
+class Feed extends Component {
+ render() {
+ return(
+ <div className='ui segment'>
+ <div className='ui feed'>
+ {this.props.feed.map((ev, index) => {
+ return(
+ <div key={index} className='event'>
+ <div className='label'>
+ <i className='comment outline icon'></i>
+ </div>
+ <div className='content'>
+ <div className='summary'>
+ {ev}
+ <div className='date'>
+ {ev.date ? ev.date.toString() : 'Today'}
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+ })}
+ </div>
+ </div>
+ );
+ }
+}
+
+Feed.propTypes = {
+ feed : PropTypes.array,
+};
+
+export default Feed;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/Home.jsx
----------------------------------------------------------------------
diff --git a/public/components/Home.jsx b/public/components/Home.jsx
new file mode 100644
index 0000000..be8a2c6
--- /dev/null
+++ b/public/components/Home.jsx
@@ -0,0 +1,72 @@
+import React, { Component } from 'react';
+
+export default class Home extends Component {
+ render () {
+ return (
+ <div id='homepage-container'>
+
+ <div id='main-masthead' className='ui masthead center aligned brown inverted vertical segment'>
+ <h1 className='ui header'>Tap</h1>
+ <h2 className='ui header'>Registration and Visualization Portal</h2>
+ </div>
+
+ <div className="ui container">
+
+ <div className="ui center aligned vertical very padded basic page segment">
+
+ <div className="ui large header">How It Works</div>
+
+ <div className="ui center aligned equal width stackable grid">
+
+ <div className="stackable column">
+ <i className="huge red code icon"></i>
+ <div className="ui medium header">1. Register your app</div>
+ </div>
+
+ <div className="stackable column">
+ <i className="huge green record icon"></i>
+ <div className="ui medium header">2. Instrument your app</div>
+ </div>
+
+ <div className="stackable column">
+ <i className="huge blue bar chart icon"></i>
+ <div className="ui medium header">3. See your results</div>
+ </div>
+
+ </div>
+
+ </div>
+
+ <div className="ui divider"></div>
+
+ <div className="ui center aligned vertical very padded basic page segment">
+
+ <div className="ui large header">Deploying Tap</div>
+
+ <p>
+ Tap is a React app driven by a Django back end.
+ </p>
+
+ </div>
+
+ <div className="ui divider"></div>
+
+ <div className="ui center aligned vertical very padded basic page segment">
+
+ <div className="ui large header">About Tap</div>
+
+ <p>
+ Tap is developed at <a href="http://www.draper.com">Draper</a> as part of the Software as a Sensor™ suite of products.
+ <br></br>
+ It's released under the Apache v2.0 License.
+ </p>
+
+ </div>
+
+ </div>
+
+
+ </div>
+ );
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/OrgProfile.jsx
----------------------------------------------------------------------
diff --git a/public/components/OrgProfile.jsx b/public/components/OrgProfile.jsx
new file mode 100644
index 0000000..331cb9f
--- /dev/null
+++ b/public/components/OrgProfile.jsx
@@ -0,0 +1,37 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+import Profile from './Profile';
+
+class OrgProfile extends Component {
+ render() {
+ const { id, name, description, apps, users } = this.props;
+
+ return(
+ <div className='ui text container'>
+ <div className='ui vertical basic page segment'>
+ <div className='ui large header'>
+ {name}
+ </div>
+ <Link to={`/org/${id}/settings`}>
+ <div className='ui brown button'>
+ Settings
+ </div>
+ </Link>
+ </div>
+
+ <Profile feed={['a', 1, 'c']} firstSide={apps} firstType={'app'} secondSide={users} secondType={'user'} />
+ </div>
+ );
+ }
+}
+
+OrgProfile.propTypes = {
+ id : PropTypes.number,
+ name : PropTypes.string,
+ description : PropTypes.string,
+ apps : PropTypes.array,
+ users : PropTypes.array,
+};
+
+export default OrgProfile;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/OrgSettings.jsx
----------------------------------------------------------------------
diff --git a/public/components/OrgSettings.jsx b/public/components/OrgSettings.jsx
new file mode 100644
index 0000000..e5c2b51
--- /dev/null
+++ b/public/components/OrgSettings.jsx
@@ -0,0 +1,26 @@
+import React, { Component, PropTypes } from 'react';
+
+import Settings from './Settings';
+
+class OrgSettings extends Component {
+ render() {
+ const { name, settings } = this.props;
+
+ return(
+ <div className='ui text container'>
+ <div className='ui large header'>
+ Settings for {name}
+ </div>
+
+ <Settings settings={settings} />
+ </div>
+ );
+ }
+}
+
+OrgSettings.propTypes = {
+ name : PropTypes.string,
+ settings : PropTypes.object,
+};
+
+export default OrgSettings;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/Profile.jsx
----------------------------------------------------------------------
diff --git a/public/components/Profile.jsx b/public/components/Profile.jsx
new file mode 100644
index 0000000..528166a
--- /dev/null
+++ b/public/components/Profile.jsx
@@ -0,0 +1,39 @@
+import React, { Component, PropTypes } from 'react';
+
+import Feed from './Feed';
+import Sidebox from './Sidebox';
+
+class Profile extends Component {
+ render() {
+ const { feed, firstSide, secondSide, firstType, secondType } = this.props;
+
+ return(
+ <div className='ui padded grid'>
+ <div className='ten wide column'>
+ <Feed feed={feed} />
+ </div>
+
+ <div className='six wide column'>
+ <Sidebox type={firstType} content={firstSide} />
+ {(() => {
+ if (secondSide) {
+ return(
+ <Sidebox type={secondType} content={secondSide} />
+ );
+ }
+ })()}
+ </div>
+ </div>
+ );
+ }
+}
+
+Profile.propTypes = {
+ feed : PropTypes.array,
+ firstSide : PropTypes.array,
+ firstType : PropTypes.string,
+ secondSide : PropTypes.array,
+ secondType : PropTypes.string,
+};
+
+export default Profile;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/Settings.jsx
----------------------------------------------------------------------
diff --git a/public/components/Settings.jsx b/public/components/Settings.jsx
new file mode 100644
index 0000000..0194d43
--- /dev/null
+++ b/public/components/Settings.jsx
@@ -0,0 +1,53 @@
+import React, { Component, PropTypes } from 'react';
+
+class Settings extends Component {
+ componentDidMount() {
+ let $settingsControls = $('#settings-menu .item');
+ $settingsControls.on('click', (e) => {
+ $settingsControls.removeClass('active');
+ $(e.target).addClass('active');
+ });
+ }
+
+ render() {
+ const { settings } = this.props;
+
+ return (
+ <div className='ui grid'>
+ <div className='four wide column'>
+ <div id='settings-menu' className='ui vertical fluid tabular menu'>
+ <a className='item active'>
+ Account
+ </a>
+ <a className='item'>
+ Notifications
+ </a>
+ <a className='item'>
+ Organizations
+ </a>
+ </div>
+ </div>
+
+ <div className='twelve wide stretched column'>
+ <div className='ui segment'>
+ <ul>
+ {Object.keys(settings).map((setting, index) => {
+ return (
+ <li key={index}>
+ {setting}, {settings[setting].toString()}
+ </li>
+ );
+ })}
+ </ul>
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
+
+Settings.propTypes = {
+ settings : PropTypes.object,
+};
+
+export default Settings;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/Sidebox.jsx
----------------------------------------------------------------------
diff --git a/public/components/Sidebox.jsx b/public/components/Sidebox.jsx
new file mode 100644
index 0000000..db4a5ed
--- /dev/null
+++ b/public/components/Sidebox.jsx
@@ -0,0 +1,37 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+class Sidebox extends Component {
+ render() {
+ return(
+ <div className='ui segment'>
+ <ul>
+ {this.props.content.map((element) => {
+ if (this.props.type !== 'user') {
+ return(
+ <Link key={element.id} to={`/${this.props.type}/${element.id}`}>
+ <li>
+ {element.id}, {element.name}
+ </li>
+ </Link>
+ );
+ } else {
+ return(
+ <li key={element.id}>
+ {element.id}, {element.email}
+ </li>
+ );
+ }
+ })}
+ </ul>
+ </div>
+ );
+ }
+}
+
+Sidebox.propTypes = {
+ content : PropTypes.array,
+ type : PropTypes.string,
+};
+
+export default Sidebox;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/UserProfile.jsx
----------------------------------------------------------------------
diff --git a/public/components/UserProfile.jsx b/public/components/UserProfile.jsx
new file mode 100644
index 0000000..384fe03
--- /dev/null
+++ b/public/components/UserProfile.jsx
@@ -0,0 +1,30 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+
+import Profile from './Profile';
+
+class UserProfile extends Component {
+ render () {
+ const { email, orgs, apps } = this.props;
+
+ return (
+ <div className='ui text container'>
+ <div className='ui vertical basic page segment'>
+ <div className='ui large header'>
+ {`${email}'s Profile`}
+ </div>
+ </div>
+
+ <Profile feed={['a', 1, 'c']} firstSide={orgs} firstType={'org'} secondSide={apps} secondType={'app'} />
+ </div>
+ );
+ }
+}
+
+UserProfile.propTypes = {
+ email : PropTypes.string,
+ orgs : PropTypes.array,
+ apps : PropTypes.array,
+};
+
+export default UserProfile;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/UserSettings.jsx
----------------------------------------------------------------------
diff --git a/public/components/UserSettings.jsx b/public/components/UserSettings.jsx
new file mode 100644
index 0000000..51dface
--- /dev/null
+++ b/public/components/UserSettings.jsx
@@ -0,0 +1,25 @@
+import React, { Component, PropTypes } from 'react';
+
+import Settings from './Settings';
+
+class UserSettings extends Component {
+ render () {
+ const { email, settings } = this.props;
+
+ return (
+ <div className='ui text container'>
+ <div className='ui large header'>
+ Settings for {email}
+ </div>
+ <Settings settings={settings} />
+ </div>
+ );
+ }
+}
+
+UserSettings.propTypes = {
+ email : PropTypes.string,
+ settings : PropTypes.object,
+};
+
+export default UserSettings;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/visualizations/Counts.jsx
----------------------------------------------------------------------
diff --git a/public/components/visualizations/Counts.jsx b/public/components/visualizations/Counts.jsx
new file mode 100644
index 0000000..a1a2d6e
--- /dev/null
+++ b/public/components/visualizations/Counts.jsx
@@ -0,0 +1,206 @@
+import React, { Component, PropTypes } from 'react';
+
+import VerticalBar from './VerticalBar';
+import HorizontalBar from './HorizontalBar';
+
+class Counts extends Component {
+ constructor(props) {
+ super(props);
+
+ this.state = {
+ selectedGroup : '',
+ selectedActivity : '',
+ };
+
+ this.selectGroup = this.selectGroup.bind(this);
+ this.selectActivity = this.selectActivity.bind(this);
+ }
+
+ selectGroup(group) {
+ this.setState({ selectedGroup : group, selectedActivity : '' });
+ }
+
+ selectActivity(activity) {
+ this.setState({ selectedActivity : activity });
+ }
+
+ render() {
+ var dataSubset = subset(this.props.data, this.props.filters);
+
+ var selectedGroup = this.state.selectedGroup;
+ if (selectedGroup == '') {
+ selectedGroup = Object.keys(dataSubset)[0];
+ }
+
+ var selectedActivity = this.state.selectedActivity;
+ if (selectedActivity == '') {
+ selectedActivity = Object.keys(dataSubset[selectedGroup].activities)[0];
+ }
+
+ var activity = dataSubset[selectedGroup].activities[selectedActivity];
+
+ return(
+ <div className='ui grid'>
+ <div className='sixteen wide column'>
+ <VerticalBar grouped={this.props.filters.ab} select={this.selectGroup} data={(() => {
+ var groupData = [];
+
+ $.each(dataSubset, (group, logs) => {
+ groupData.push({
+ id : group,
+ selected : (selectedGroup == group),
+ ot1 : logs.ot1count,
+ ot2 : logs.ot2count,
+ });
+ });
+
+ return groupData;
+ })()} />
+ </div>
+
+ <div className='ten wide column'>
+ <HorizontalBar grouped={this.props.filters.ab} select={this.selectActivity} data={(() => {
+ var activityData = [];
+
+ $.each(dataSubset[selectedGroup].activities, (id, log) => {
+ activityData.push({
+ id : id,
+ name : log.ele,
+ selected : (selectedActivity == id),
+ ot1 : log.ot1count,
+ ot2 : log.ot2count,
+ });
+ });
+
+ return activityData;
+ })()} />
+ </div>
+
+ <div className='six wide column'>
+ <div id='counts-details' className='ui segment'>
+ Activity Details
+ <br></br>
+ Name: {activity.name}
+ <br></br>
+ Element: {activity.ele}
+ <br></br>
+ Group: {activity.group}
+ <br></br>
+ OT1: {activity.ot1count}
+ <br></br>
+ OT2: {activity.ot2count}
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
+
+function subset(data, filters) {
+ preprocessData(data);
+
+ var dataSubset = data.filter((p) => {
+ return (filters.gender === 0 || filters.gender == p.intake_data.demographics.Gender) && (filters.ethnicities.includes(+p.intake_data.demographics.Ethnicity));
+ });
+
+ var logs = {};
+
+ dataSubset.forEach((p) => {
+ $.each(p.ot1logs, (id, log) => {
+ if (!logs.hasOwnProperty(log.group)) {
+ logs[log.group] = {
+ group : log.group,
+ ot1count : 0,
+ ot2count : 0,
+ activities : {},
+ };
+ }
+
+ if (!logs[log.group].activities.hasOwnProperty(log.id)) {
+ logs[log.group].activities[log.id] = {
+ id : id,
+ ot1count : 0,
+ ot2count : 0,
+ name : log.name,
+ ele : log.ele,
+ group : log.group,
+ }
+ }
+
+ logs[log.group].ot1count += log.count;
+ logs[log.group].activities[log.id].ot1count += log.count;
+ });
+
+ $.each(p.ot2logs, (id, log) => {
+ if (!logs.hasOwnProperty(log.group)) {
+ logs[log.group] = {
+ group : log.group,
+ ot1count : 0,
+ ot2count : 0,
+ activities : {},
+ };
+ }
+
+ if (!logs[log.group].activities.hasOwnProperty(log.id)) {
+ logs[log.group].activities[log.id] = {
+ id : id,
+ ot1count : 0,
+ ot2count : 0,
+ name : log.name,
+ ele : log.ele,
+ group : log.group,
+ }
+ }
+
+ logs[log.group].ot2count += log.count;
+ logs[log.group].activities[log.id].ot2count += log.count;
+ });
+ });
+
+ return logs;
+}
+
+function preprocessData(data) {
+ data.forEach(function (p) {
+ var ot1logs = {};
+ var ot2logs = {};
+
+ p.log_data.OT1.logs.log_id.forEach(function (id, i) {
+ if (ot1logs.hasOwnProperty(id)) {
+ ot1logs[id].count += p.log_data.OT1.logs.count[i];
+ } else {
+ ot1logs[id] = {
+ 'id' : id,
+ 'count' : p.log_data.OT1.logs.count[i],
+ 'name' : p.log_data.OT1.logs.log_strings[i],
+ 'ele' : p.log_data.OT1.logs.elementId[i],
+ 'group' : p.log_data.OT1.logs.elementGroup[i]
+ };
+ }
+ });
+
+ p.log_data.OT2.logs.log_id.forEach(function (id, i) {
+ if (ot2logs.hasOwnProperty(id)) {
+ ot2logs[id].count += p.log_data.OT2.logs.count[i];
+ } else {
+ ot2logs[id] = {
+ 'id' : id,
+ 'count' : p.log_data.OT2.logs.count[i],
+ 'name' : p.log_data.OT2.logs.log_strings[i],
+ 'ele' : p.log_data.OT2.logs.elementId[i],
+ 'group' : p.log_data.OT2.logs.elementGroup[i]
+ };
+ }
+ });
+
+ p.ot1logs = ot1logs;
+ p.ot2logs = ot2logs;
+
+ });
+}
+
+Counts.propTypes = {
+ data : PropTypes.array,
+};
+
+export default Counts;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/visualizations/GraphMetrics.jsx
----------------------------------------------------------------------
diff --git a/public/components/visualizations/GraphMetrics.jsx b/public/components/visualizations/GraphMetrics.jsx
new file mode 100644
index 0000000..43db112
--- /dev/null
+++ b/public/components/visualizations/GraphMetrics.jsx
@@ -0,0 +1,404 @@
+import React, { Component, PropTypes } from 'react';
+import * as d3 from 'd3';
+
+
+class GraphMetrics extends Component {
+ constructor(props) {
+ super(props);
+ this.d3element = props.element;
+ }
+
+ componentDidMount() {
+ this.create();
+ }
+
+ shouldComponentUpdate() {
+ setTimeout(this.update.bind(this), 0);
+ return false;
+ }
+
+ render() {
+ return(
+ <div id={this.d3element}></div>
+ );
+ }
+
+ // D3 initialization (scales, axes, etc.)
+ create() {
+ this.margin = {
+ top : 20,
+ right : 20,
+ bottom : 20,
+ left : 20,
+ };
+ this.fullWidth = 600;
+ this.fullHeight = 400;
+ this.width = this.fullWidth - this.margin.left - this.margin.right;
+ this.height = this.fullHeight - this.margin.top - this.margin.bottom;
+ this.mainRadius = 280;
+
+ this.color = d3.scaleOrdinal()
+ .range([
+ '#A7003C', // Red
+ '#00A76B', // Green
+ '#0090A7', // Teal
+ '#003DA7', // Blue
+ '#6B00A7' // Purple
+ ]);
+
+ this.arc = d3.arc()
+ // .padAngle(0.002)
+ .innerRadius(this.mainRadius - 50)
+ .outerRadius(this.mainRadius);
+
+ this.ribbon = d3.ribbon();
+
+ this.graphFlow = graphFlow()
+ .radius(this.mainRadius - 50)
+ .innerRadius(this.mainRadius - 150);
+
+ this.svg = d3.select(`#${this.d3element}`).append('svg')
+ .attr('width', this.fullWidth)
+ .attr('height', this.fullHeight)
+ .append('g')
+ .attr('transform', `translate(${this.margin.left + this.width / 2},${this.margin.top + this.height / 2})`);
+
+ this.tooltip = d3.select('body').append('div')
+ .attr('class', 'tooltip')
+ .style('opacity', 0);
+
+ this.update();
+ }
+
+ // D3 render
+ update() {
+ let data = this.props.data[this.props.metric];
+ let layout = this.graphFlow(data);
+
+ let t = d3.transition()
+ .duration(500);
+
+ this.arcs = this.svg.selectAll('.arc')
+ .data(layout.inArcs.concat(layout.outArcs), (d) => d.type + d.index);
+
+ this.arcs.exit()
+ .attr('class', 'exit')
+ .transition(t)
+ .style('fill-opacity', 0)
+ .remove();
+
+ this.arcs = this.arcs.enter()
+ .append('path')
+ .attr('class', 'arc')
+ .merge(this.arcs);
+
+ this.arcs
+ .on('mouseover', (d) => {
+ this.highlight(d, 'arc');
+ this.showTooltip(data.in[d.index], d3.event.pageX, d3.event.pageY);
+ })
+ .on('mouseout', (d) => {
+ this.restore();
+ this.hideTooltip();
+ })
+ .transition(t)
+ // TODO : add arc tweens
+ .attr('d', this.arc)
+ .style('fill', (d) => this.color(data.in[d.index].elementGroup));
+
+ this.chords = this.svg.selectAll('.chord')
+ .data(layout.inChords.concat(layout.outChords), (d) => d.index + d.type + d.subindex);
+
+ this.chords.exit()
+ .attr('class', 'exit')
+ .transition(t)
+ .style('fill-opacity', 0)
+ .remove();
+
+ this.chords = this.chords.enter()
+ .append('path')
+ .attr('class', 'chord')
+ .style('fill', '#A76B00')
+ .merge(this.chords);
+
+ this.chords
+ .transition(t)
+ .attr('d', this.ribbon)
+ .style('fill-opacity', 0.5);
+
+ this.circles = this.svg.selectAll('.node')
+ .data($.map(layout.blt, (val, key) => val), (d) => d.index);
+
+ this.circles.exit()
+ .attr('class', 'exit')
+ .transition(t)
+ .attr('r', 0)
+ .remove();
+
+ this.circles = this.circles.enter()
+ .append('circle')
+ .attr('class', 'node')
+ .merge(this.circles);
+
+ this.circles
+ .on('mouseover', (d) => {
+ this.highlight(d, 'circle');
+ this.showTooltip(data.in[d.index], d3.event.pageX, d3.event.pageY);
+ })
+ .on('mouseout', (d) => {
+ this.restore();
+ this.hideTooltip();
+ })
+ .transition(t)
+ .attr('r', (d) => d.r)
+ .attr('cx', (d) => d.x)
+ .attr('cy', (d) => d.y)
+ .style('fill', (d) => this.color(data.in[d.index].elementGroup))
+ .style('fill-opacity', 0.75);
+
+ }
+
+ hideTooltip() {
+ this.tooltip.transition()
+ .duration(350)
+ .style('opacity', 0);
+ }
+
+ showTooltip(activity, x, y) {
+ this.tooltip.transition()
+ .duration(350)
+ .style('opacity', 0.9);
+
+ this.tooltip
+ .style('left', (x + 6) + 'px')
+ .style('top', (y - 28) + 'px')
+ .html(`Action: ${activity.action}<br>Id: ${activity.elementId}<br>Group: ${activity.elementGroup}`);
+ }
+
+ highlight(d, type) {
+ var indices = [];
+
+ if (type === 'arc') {
+ this.chords.style('fill-opacity', (c) => {
+ if (c.index !== d.index || c.type !== d.type) {
+ return 0.1;
+ } else {
+ indices.push(c.subindex);
+ return 0.5;
+ }
+ });
+
+ this.circles.style('fill-opacity', (c) => indices.includes(c.index) ? 0.75 : 0.1);
+ this.arcs.style('fill-opacity', (c) => c === d ? 1 : 0.25);
+ } else if (type === 'circle') {
+ this.chords.style('fill-opacity', (c) => {
+ if (c.subindex !== d.index) {
+ return 0.1;
+ } else {
+ indices.push(c.index);
+ return 0.5;
+ }
+ });
+
+ this.circles.style('fill-opacity', (c) => c === d ? 0.75 : 0.25);
+ this.arcs.style('fill-opacity', (c) => indices.includes(c.index) ? 1 : 0.1);
+ }
+ }
+
+ restore() {
+ this.chords.style('fill-opacity', 0.5);
+ this.circles.style('fill-opacity', 0.75);
+ this.arcs.style('fill-opacity', 1);
+ }
+}
+
+
+// Custom layout function for graph viz
+// Converts input data into return arrays of component svg elements
+function graphFlow() {
+ const tau = Math.PI * 2;
+
+ var padAngle = 0;
+ var spaceAngle = tau / 4;
+ var radius = 0;
+ var innerRadius = 0;
+
+ function layout(data) {
+ var result = {};
+
+ result.in = arrayToObj(data.in);
+ result.out = arrayToObj(data.out);
+ result.blt = arrayToObj(circleLayout(data.blt, innerRadius));
+
+ var arcAngle = (tau - (spaceAngle * 2)) / 2;
+ var inStart = (tau + spaceAngle) / 2;
+ var outStart = spaceAngle / 2;
+
+ var inSide = sideLayout(data.inMatrix, result.blt, inStart, arcAngle, padAngle, radius, 'in');
+ var outSide = sideLayout(data.outMatrix, result.blt, outStart, arcAngle, padAngle, radius, 'out');
+
+ result.inArcs = inSide[0];
+ result.inChords = inSide[1];
+ result.outArcs = outSide[0];
+ result.outChords = outSide[1];
+
+ return result;
+ }
+
+ layout.padAngle = (value) => {
+ return value ? (padAngle = value, layout) : padAngle;
+ };
+
+ layout.spaceAngle = (value) => {
+ return value ? (spaceAngle = value, layout) : spaceAngle;
+ };
+
+ layout.radius = (value) => {
+ return value ? (radius = value, layout) : radius;
+ };
+
+ layout.innerRadius = (value) => {
+ return value ? (innerRadius = value, layout) : innerRadius;
+ };
+
+ return layout;
+}
+
+function sideLayout(matrix, circles, startAngle, angle, padAngle, radius, type) {
+ var n = matrix.length;
+ var m = matrix[0].length;
+ var groupSums = [];
+ var total = 0;
+ var arcs = new Array(n);
+ var chordTemp = new Array(n * m);
+ var chords = [];
+ var k;
+ var dx;
+ var x;
+ var x0;
+ var i;
+ var j;
+
+ matrix.forEach((group) => {
+ groupSums.push(group.reduce( (prev, curr) => prev + curr ));
+ });
+
+ total = groupSums.reduce( (prev, curr) => prev + curr );
+
+ k = Math.max(0, angle - padAngle * n) / total;
+ dx = k ? padAngle : angle / n;
+
+ x = startAngle;
+ i = -1;
+
+ while(++i < n) {
+ x0 = x;
+ j = -1;
+
+ while(++j < n) {
+ var v = matrix[i][j];
+ var a0 = x;
+ var a1 = x += v * k;
+
+ chordTemp[j + (n * i)] = {
+ index : i,
+ subindex : j,
+ startAngle : a0,
+ endAngle : a1,
+ value : v,
+ };
+ }
+
+ arcs[i] = {
+ index : i,
+ type : type,
+ startAngle : x0,
+ endAngle : x,
+ value : groupSums[i],
+ };
+
+ x += dx;
+ }
+
+ chordTemp.forEach((chord) => {
+ if (chord.value > 0) {
+ let circle = circles[chord.subindex];
+
+ chords.push({
+ index : chord.index,
+ subindex : chord.subindex,
+ type : type,
+ source : {
+ startAngle : chord.startAngle,
+ endAngle : chord.endAngle,
+ radius : radius,
+ },
+ target : {
+ startAngle : circle.theta - 0.001,
+ endAngle : circle.theta + 0.001,
+ radius : circle.radius,
+ },
+ });
+ }
+ });
+
+ return [arcs, chords];
+
+}
+
+function circleLayout(circles, innerRadius) {
+ circles.forEach((d) => {
+ d.r = d.value;
+ });
+
+ d3.packSiblings(circles);
+ var enclose = d3.packEnclose(circles);
+ var k = innerRadius / enclose.r;
+
+ circles.forEach((d) => {
+ d.r = d.r * k;
+ d.x = d.x * k;
+ d.y = d.y * k;
+
+ let rSq = Math.pow(d.x, 2) + Math.pow(d.y, 2);
+ d.radius = Math.sqrt(rSq);
+ d.theta = Math.atan2(d.y, d.x) + (Math.PI / 2);
+ });
+
+ return circles;
+}
+
+function arrayToObj(a) {
+ var o = {};
+
+ a.forEach((d) => {
+ o[d.index] = d;
+ });
+
+ return o;
+}
+
+GraphMetrics.propTypes = {
+ element : PropTypes.string.isRequired,
+ data : PropTypes.object,
+ // data : PropTypes.shape({
+ // inMatrix : PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),
+ // outMatrix : PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),
+ // in : PropTypes.arrayOf(PropTypes.shape({
+ // index : PropTypes.number,
+ // name : PropTypes.string,
+ // })),
+ // out : PropTypes.arrayOf(PropTypes.shape({
+ // index : PropTypes.number,
+ // name : PropTypes.string,
+ // })),
+ // between : PropTypes.arrayOf(PropTypes.shape({
+ // index : PropTypes.number,
+ // name : PropTypes.string,
+ // value : PropTypes.number,
+ // })),
+ // }).isRequired,
+};
+
+
+export default GraphMetrics;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/visualizations/HorizontalBar.jsx
----------------------------------------------------------------------
diff --git a/public/components/visualizations/HorizontalBar.jsx b/public/components/visualizations/HorizontalBar.jsx
new file mode 100644
index 0000000..d47a186
--- /dev/null
+++ b/public/components/visualizations/HorizontalBar.jsx
@@ -0,0 +1,170 @@
+import React, { Component, PropTypes } from 'react';
+
+import * as d3 from 'd3';
+
+class HorizontalBar extends Component {
+ constructor(props) {
+ super(props);
+
+ this.d3element = 'horizontal-bar';
+ }
+
+ componentDidMount() {
+ this.margin = {
+ top : 30,
+ right : 20,
+ bottom : 20,
+ left : 40,
+ };
+ this.fullWidth = 300;
+ this.fullHeight = 600;
+ this.width = this.fullWidth - this.margin.left - this.margin.right;
+ this.height = this.fullHeight - this.margin.top - this.margin.bottom;
+
+ this.x = d3.scaleLinear()
+ .rangeRound([0, this.width]);
+
+ this.y = d3.scaleBand()
+ .rangeRound([0, this.height])
+ .padding(0.1)
+ .align(0.1);
+
+ this.y1 = d3.scaleBand()
+ .domain(['ot1', 'ot2']);
+
+ this.color = d3.scaleOrdinal()
+ .range([
+ '#A7003C', // Red
+ '#00A76B', // Green
+ '#0090A7', // Teal
+ '#003DA7', // Blue
+ '#6B00A7' // Purple
+ ]);
+
+ this.xAxis = d3.axisTop(this.x);
+ this.yAxis = d3.axisLeft(this.y);
+
+ this.create();
+ }
+
+ shouldComponentUpdate() {
+ setTimeout(this.update.bind(this), 0);
+ return false;
+ }
+
+ render() {
+ return(
+ <div id={this.d3element}></div>
+ );
+ }
+
+ create() {
+ this.svg = d3.select(`#${this.d3element}`).append('svg')
+ .attr('width', this.fullWidth)
+ .attr('height', this.fullHeight)
+ .append('g')
+ .attr('transform', `translate(${this.margin.left},${this.margin.top})`);
+
+ this.svg.append('g')
+ .attr('class', 'x axis');
+
+ this.svg.append('g')
+ .attr('class', 'y axis');
+
+ this.update();
+ }
+
+ update() {
+ let data = this.props.data;
+ let grouped = this.props.grouped;
+
+ let t = d3.transition()
+ .duration(500);
+
+ this.x.domain([0, d3.max(data, (d) => {
+ return grouped ? Math.max(d.ot1, d.ot2) : (d.ot1 + d.ot2);
+ })]);
+ this.y.domain(data.map((d) => d.id));
+ this.y1.rangeRound([0, this.y.bandwidth()]);
+
+ this.svg.select('.x.axis').call(this.xAxis);
+ this.svg.select('.y.axis').call(this.yAxis);
+
+ this.groups = this.svg.selectAll('.group')
+ .data(data, (d) => d.id);
+
+ this.groups.exit()
+ .attr('class', 'exit')
+ .transition(t)
+ .style('fill-opacity', 0)
+ .remove();
+
+ this.groups = this.groups.enter()
+ .append('g')
+ .attr('class', 'group')
+ .merge(this.groups);
+
+ this.groups
+ .transition(t)
+ .attr('transform', (d) => `translate(0,${this.y(d.id)})`);
+
+ this.bars = this.groups.selectAll('.bar')
+ .data((d) => {
+ if (grouped) {
+ var ot1 = {
+ id : d.name,
+ selected : d.selected,
+ count : d.ot1,
+ type : 'ot1',
+ };
+
+ var ot2 = {
+ id : d.name,
+ selected : d.selected,
+ count : d.ot2,
+ type : 'ot2',
+ };
+
+ return [ot1, ot2];
+ } else {
+ d.count = d.ot1 + d.ot2;
+ return [d];
+ }
+ });
+
+ this.bars.exit()
+ .attr('class', 'exit')
+ .style('stroke', '')
+ .transition(t)
+ .style('opacity', 0)
+ .remove();
+
+ this.bars = this.bars.enter()
+ .append('rect')
+ .attr('height', 0)
+ .attr('class', 'bar')
+ .merge(this.bars);
+
+ this.bars
+ .on('click', (d) => {
+ this.props.select(d.id);
+ })
+ .transition(t)
+ .attr('x', 0)
+ .attr('width', (d) => this.x(d.count))
+ .attr('y', (d) => grouped ? this.y1(d.type) : 0)
+ .attr('height', (d) => grouped ? this.y1.bandwidth() : this.y.bandwidth())
+ .style('fill', (d) => grouped ? this.color(d.type) : this.color(d.id))
+ .style('stroke', (d) => d.selected ? '#A76B00' : '')
+ .style('stroke-width', (d) => d.selected ? '3px' : '0px');
+
+
+ }
+}
+
+// HorizontalBar.propTypes = {
+// data : PropTypes.array,
+// selections : PropTypes.object,
+// };
+
+export default HorizontalBar;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/components/visualizations/VerticalBar.jsx
----------------------------------------------------------------------
diff --git a/public/components/visualizations/VerticalBar.jsx b/public/components/visualizations/VerticalBar.jsx
new file mode 100644
index 0000000..dc8effd
--- /dev/null
+++ b/public/components/visualizations/VerticalBar.jsx
@@ -0,0 +1,170 @@
+import React, { Component, PropTypes } from 'react';
+
+import * as d3 from 'd3';
+
+class VerticalBar extends Component {
+ constructor(props) {
+ super(props);
+
+ this.d3element = 'vertical-bar';
+ }
+
+ componentDidMount() {
+ this.margin = {
+ top : 20,
+ right : 20,
+ bottom : 30,
+ left : 40,
+ };
+ this.fullWidth = 600;
+ this.fullHeight = 400;
+ this.width = this.fullWidth - this.margin.left - this.margin.right;
+ this.height = this.fullHeight - this.margin.top - this.margin.bottom;
+
+ this.x = d3.scaleBand()
+ .rangeRound([0, this.width])
+ .padding(0.1)
+ .align(0.1);
+
+ this.x1 = d3.scaleBand()
+ .domain(['ot1', 'ot2']);
+
+ this.y = d3.scaleLinear()
+ .rangeRound([this.height, 0]);
+
+ this.color = d3.scaleOrdinal()
+ .range([
+ '#A7003C', // Red
+ '#00A76B', // Green
+ '#0090A7', // Teal
+ '#003DA7', // Blue
+ '#6B00A7' // Purple
+ ]);
+
+ this.xAxis = d3.axisBottom(this.x);
+ this.yAxis = d3.axisLeft(this.y);
+
+ this.create();
+ }
+
+ shouldComponentUpdate() {
+ setTimeout(this.update.bind(this), 0);
+ return false;
+ }
+
+ render() {
+ return(
+ <div id={this.d3element}></div>
+ );
+ }
+
+ create() {
+ this.svg = d3.select(`#${this.d3element}`).append('svg')
+ .attr('width', this.fullWidth)
+ .attr('height', this.fullHeight)
+ .append('g')
+ .attr('transform', `translate(${this.margin.left},${this.margin.top})`);
+
+ this.svg.append('g')
+ .attr('class', 'x axis')
+ .attr('transform', `translate(0,${this.height})`);
+
+ this.svg.append('g')
+ .attr('class', 'y axis');
+
+ this.update();
+ }
+
+ update() {
+ let data = this.props.data;
+ let grouped = this.props.grouped;
+
+ let t = d3.transition()
+ .duration(500);
+
+ this.x.domain(data.map((d) => d.id));
+ this.x1.rangeRound([0, this.x.bandwidth()]);
+ this.y.domain([0, d3.max(data, (d) => {
+ return grouped ? Math.max(d.ot1, d.ot2) : (d.ot1 + d.ot2);
+ })]);
+
+ this.svg.select('.x.axis').call(this.xAxis);
+ this.svg.select('.y.axis').call(this.yAxis);
+
+ this.groups = this.svg.selectAll('.group')
+ .data(data, (d) => d.id);
+
+ this.groups.exit()
+ .attr('class', 'exit')
+ .transition(t)
+ .style('fill-opacity', 0)
+ .remove();
+
+ this.groups = this.groups.enter()
+ .append('g')
+ .attr('class', 'group')
+ .merge(this.groups);
+
+ this.groups
+ .transition(t)
+ .attr('transform', (d) => `translate(${this.x(d.id)},0)`);
+
+ this.bars = this.groups.selectAll('.bar')
+ .data((d) => {
+ if (grouped) {
+ var ot1 = {
+ id : d.id,
+ selected : d.selected,
+ count : d.ot1,
+ type : 'ot1',
+ };
+
+ var ot2 = {
+ id : d.id,
+ selected : d.selected,
+ count : d.ot2,
+ type : 'ot2',
+ };
+
+ return [ot1, ot2];
+ } else {
+ d.count = d.ot1 + d.ot2;
+ return [d];
+ }
+ });
+
+ this.bars.exit()
+ .attr('class', 'exit')
+ .transition(t)
+ .style('fill-opacity', 0)
+ .remove();
+
+ this.bars = this.bars.enter()
+ .append('rect')
+ .attr('height', 0)
+ .attr('class', 'bar')
+ .merge(this.bars);
+
+ this.bars
+ .on('click', (d) => {
+ this.props.select(d.id);
+ })
+ .transition(t)
+ .attr('x', (d) => grouped ? this.x1(d.type) : 0)
+ .attr('width', (d) => grouped ? this.x1.bandwidth() : this.x.bandwidth())
+ .attr('y', (d) => this.y(d.count))
+ .attr('height', (d) => this.height - this.y(d.count))
+ .style('fill', (d) => grouped ? this.color(d.type) : this.color(d.id))
+ .style('stroke', (d) => d.selected ? '#A76B00' : '')
+ .style('stroke-width', (d) => d.selected ? '3px' : '0px');
+
+
+ }
+}
+
+// VerticalBar.propTypes = {
+// data : PropTypes.array,
+// selections : PropTypes.object,
+// };
+
+export default VerticalBar;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/constants/ActionTypes.js
----------------------------------------------------------------------
diff --git a/public/constants/ActionTypes.js b/public/constants/ActionTypes.js
new file mode 100644
index 0000000..d7ad8ff
--- /dev/null
+++ b/public/constants/ActionTypes.js
@@ -0,0 +1,16 @@
+export const LOG_IN = 'LOG_IN';
+export const LOG_OUT = 'LOG_OUT';
+export const REQUEST_USER = 'REQUEST_USER';
+export const RECEIVE_USER = 'RECEIVE_USER';
+export const REQUEST_USER_UPDATE = 'REQUEST_USER_UPDATE';
+export const CONFIRM_USER_UPDATE = 'CONFIRM_USER_UPDATE';
+export const REQUEST_ORG = 'REQUEST_ORG';
+export const RECEIVE_ORG = 'RECEIVE_ORG';
+export const REQUEST_ORG_UPDATE = 'REQUEST_ORG_UPDATE';
+export const CONFIRM_ORG_UPDATE = 'CONFIRM_ORG_UPDATE';
+export const REQUEST_APP = 'REQUEST_APP';
+export const RECEIVE_APP = 'RECEIVE_APP';
+export const REQUEST_APP_UPDATE = 'REQUEST_APP_UPDATE';
+export const CONFIRM_APP_UPDATE = 'CONFIRM_APP_UPDATE';
+export const REQUEST_APP_RESULTS = 'REQUEST_APP_RESULTS';
+export const RECEIVE_APP_RESULTS = 'RECEIVE_APP_RESULTS';
[12/48] incubator-senssoft-tap git commit: Added more endpoint
skeletons
Posted by ar...@apache.org.
Added more endpoint skeletons
Structure is ready for more endpoints when we connect the front and backend.
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/5eb5a237
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/5eb5a237
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/5eb5a237
Branch: refs/heads/master
Commit: 5eb5a2372095151b8900aa3e38599bc80da4ffed
Parents: 3631ae5
Author: hungryarthi <ar...@gmail.com>
Authored: Tue Aug 23 17:46:20 2016 -0400
Committer: GitHub <no...@github.com>
Committed: Tue Aug 23 17:46:20 2016 -0400
----------------------------------------------------------------------
app_mgr/urls.py | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/5eb5a237/app_mgr/urls.py
----------------------------------------------------------------------
diff --git a/app_mgr/urls.py b/app_mgr/urls.py
index ec10388..2442c48 100644
--- a/app_mgr/urls.py
+++ b/app_mgr/urls.py
@@ -37,6 +37,8 @@ urlpatterns = [
url(r'^user/(?P<pk>current)/$', views.UserProfileInstanceView.as_view(), name='user-current'),
url(r'^org/(?P<pk>[\d]+)/$', views.OrganizationInstanceView.as_view(), name='org-instance'),
url(r'^app/(?P<pk>[\d]+)/$', views.ApplicationInstanceView.as_view(), name='app-instance'),
+
+ url(r'^app/(?P<pk>current+)/$', views.AliasListView.as_view(), name='alias-list'),
url(r'^appresults/(?P<appId>[0-9]{1,2})/(?P<searchType>\w+)/$', distillviews.app_results, name='app-results'),
url(r'^appresults/(?P<appName>\w+)/(?P<searchType>\w+)/$', distillviews.app_results_byname, name='app-results'),
[04/48] incubator-senssoft-tap git commit: Merge branch 'master' into
vagrant_appmgr
Posted by ar...@apache.org.
Merge branch 'master' into vagrant_appmgr
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/acf33e06
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/acf33e06
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/acf33e06
Branch: refs/heads/master
Commit: acf33e065acf413fb2ae3792e48329060ac1c13e
Parents: bf7d7e5 f751b15
Author: Stephen York <Stephen York>
Authored: Thu Jun 30 03:14:23 2016 -0400
Committer: Stephen York <Stephen York>
Committed: Thu Jun 30 03:14:23 2016 -0400
----------------------------------------------------------------------
app_mgr/__init__.py | 1 +
app_mgr/admin.py | 3 +-
app_mgr/apps.py | 9 ++
app_mgr/migrations/0002_membership_is_admin.py | 20 ++++
app_mgr/migrations/0003_auto_20160629_0112.py | 27 +++++
app_mgr/migrations/0004_auto_20160629_0252.py | 26 +++++
app_mgr/models.py | 17 ++-
app_mgr/permissions.py | 18 ++-
app_mgr/serializers.py | 2 +-
app_mgr/signals/__init__.py | 0
app_mgr/signals/handlers.py | 116 ++++++++++++++++++++
app_mgr/urls.py | 6 +-
app_mgr/views.py | 38 ++++++-
13 files changed, 266 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acf33e06/app_mgr/views.py
----------------------------------------------------------------------
[09/48] incubator-senssoft-tap git commit: Implementing token return
endpoint
Posted by ar...@apache.org.
Implementing token return endpoint
work in progress
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/8c116e73
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/8c116e73
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/8c116e73
Branch: refs/heads/master
Commit: 8c116e732d717087be561916aa701e324d78ceb7
Parents: 2830767
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Thu Jul 21 10:14:07 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Thu Jul 21 10:14:07 2016 -0400
----------------------------------------------------------------------
app_mgr/views.py | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/8c116e73/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index 0fc88c6..3dbbec0 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -255,13 +255,17 @@ def login_user(request):
# If the account is valid and active, we can log the user in.
# We'll send the user back to the homepage.
login(request, user)
- return HttpResponseRedirect('/app_mgr/user_profile/')
+ userToken = "HttpRequest"
+ print( "Successful Login: {0}, id: {1}, token: {2}".format(email, user.id, userToken) )
+ #return HttpResponseRedirect('/app_mgr/user_profile/')
+ return HttpResponse("Successful Login: {0}, id: {1}, token: {2}".format(email, user.id, userToken))
+ #return HttpResponseRedirect('../../api-token-auth/')
else:
# An inactive account was used - no logging in!
return HttpResponse("Your TAP account is disabled.")
else:
# Bad login details were provided. So we can't log the user in.
- print( "Invalid login details: {0}, {1}".format(email, password) )
+ print( "Invalid login details: {0}, {1}".format(email, password) ) ###TODO - PASSWORD EXPOSED
return HttpResponse("Invalid login details supplied.")
# The request is not a HTTP POST, so display the login form.
[34/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/dropdown.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dropdown.js b/semantic/src/definitions/modules/dropdown.js
new file mode 100644
index 0000000..d388fc8
--- /dev/null
+++ b/semantic/src/definitions/modules/dropdown.js
@@ -0,0 +1,3717 @@
+/*!
+ * # Semantic UI - Dropdown
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.dropdown = function(parameters) {
+ var
+ $allModules = $(this),
+ $document = $(document),
+
+ moduleSelector = $allModules.selector || '',
+
+ hasTouch = ('ontouchstart' in document.documentElement),
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+
+ $allModules
+ .each(function(elementIndex) {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.dropdown.settings, parameters)
+ : $.extend({}, $.fn.dropdown.settings),
+
+ className = settings.className,
+ message = settings.message,
+ fields = settings.fields,
+ keys = settings.keys,
+ metadata = settings.metadata,
+ namespace = settings.namespace,
+ regExp = settings.regExp,
+ selector = settings.selector,
+ error = settings.error,
+ templates = settings.templates,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $module = $(this),
+ $context = $(settings.context),
+ $text = $module.find(selector.text),
+ $search = $module.find(selector.search),
+ $sizer = $module.find(selector.sizer),
+ $input = $module.find(selector.input),
+ $icon = $module.find(selector.icon),
+
+ $combo = ($module.prev().find(selector.text).length > 0)
+ ? $module.prev().find(selector.text)
+ : $module.prev(),
+
+ $menu = $module.children(selector.menu),
+ $item = $menu.find(selector.item),
+
+ activated = false,
+ itemActivated = false,
+ internalChange = false,
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ initialLoad,
+ pageLostFocus,
+ willRefocus,
+ elementNamespace,
+ id,
+ selectObserver,
+ menuObserver,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.debug('Initializing dropdown', settings);
+
+ if( module.is.alreadySetup() ) {
+ module.setup.reference();
+ }
+ else {
+ module.setup.layout();
+ module.refreshData();
+
+ module.save.defaults();
+ module.restore.selected();
+
+ module.create.id();
+ module.bind.events();
+
+ module.observeChanges();
+ module.instantiate();
+ }
+
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of dropdown', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous dropdown', $module);
+ module.remove.tabbable();
+ $module
+ .off(eventNamespace)
+ .removeData(moduleNamespace)
+ ;
+ $menu
+ .off(eventNamespace)
+ ;
+ $document
+ .off(elementNamespace)
+ ;
+ module.disconnect.menuObserver();
+ module.disconnect.selectObserver();
+ },
+
+ observeChanges: function() {
+ if('MutationObserver' in window) {
+ selectObserver = new MutationObserver(module.event.select.mutation);
+ menuObserver = new MutationObserver(module.event.menu.mutation);
+ module.debug('Setting up mutation observer', selectObserver, menuObserver);
+ module.observe.select();
+ module.observe.menu();
+ }
+ },
+
+ disconnect: {
+ menuObserver: function() {
+ if(menuObserver) {
+ menuObserver.disconnect();
+ }
+ },
+ selectObserver: function() {
+ if(menuObserver) {
+ menuObserver.disconnect();
+ }
+ }
+ },
+ observe: {
+ select: function() {
+ if(module.has.input()) {
+ selectObserver.observe($input[0], {
+ childList : true,
+ subtree : true
+ });
+ }
+ },
+ menu: function() {
+ if(module.has.menu()) {
+ menuObserver.observe($menu[0], {
+ childList : true,
+ subtree : true
+ });
+ }
+ }
+ },
+
+ create: {
+ id: function() {
+ id = (Math.random().toString(16) + '000000000').substr(2, 8);
+ elementNamespace = '.' + id;
+ module.verbose('Creating unique id for element', id);
+ },
+ userChoice: function(values) {
+ var
+ $userChoices,
+ $userChoice,
+ isUserValue,
+ html
+ ;
+ values = values || module.get.userValues();
+ if(!values) {
+ return false;
+ }
+ values = $.isArray(values)
+ ? values
+ : [values]
+ ;
+ $.each(values, function(index, value) {
+ if(module.get.item(value) === false) {
+ html = settings.templates.addition( module.add.variables(message.addResult, value) );
+ $userChoice = $('<div />')
+ .html(html)
+ .attr('data-' + metadata.value, value)
+ .attr('data-' + metadata.text, value)
+ .addClass(className.addition)
+ .addClass(className.item)
+ ;
+ if(settings.hideAdditions) {
+ $userChoice.addClass(className.hidden);
+ }
+ $userChoices = ($userChoices === undefined)
+ ? $userChoice
+ : $userChoices.add($userChoice)
+ ;
+ module.verbose('Creating user choices for value', value, $userChoice);
+ }
+ });
+ return $userChoices;
+ },
+ userLabels: function(value) {
+ var
+ userValues = module.get.userValues()
+ ;
+ if(userValues) {
+ module.debug('Adding user labels', userValues);
+ $.each(userValues, function(index, value) {
+ module.verbose('Adding custom user value');
+ module.add.label(value, value);
+ });
+ }
+ },
+ menu: function() {
+ $menu = $('<div />')
+ .addClass(className.menu)
+ .appendTo($module)
+ ;
+ },
+ sizer: function() {
+ $sizer = $('<span />')
+ .addClass(className.sizer)
+ .insertAfter($search)
+ ;
+ }
+ },
+
+ search: function(query) {
+ query = (query !== undefined)
+ ? query
+ : module.get.query()
+ ;
+ module.verbose('Searching for query', query);
+ if(module.has.minCharacters(query)) {
+ module.filter(query);
+ }
+ else {
+ module.hide();
+ }
+ },
+
+ select: {
+ firstUnfiltered: function() {
+ module.verbose('Selecting first non-filtered element');
+ module.remove.selectedItem();
+ $item
+ .not(selector.unselectable)
+ .not(selector.addition + selector.hidden)
+ .eq(0)
+ .addClass(className.selected)
+ ;
+ },
+ nextAvailable: function($selected) {
+ $selected = $selected.eq(0);
+ var
+ $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),
+ $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),
+ hasNext = ($nextAvailable.length > 0)
+ ;
+ if(hasNext) {
+ module.verbose('Moving selection to', $nextAvailable);
+ $nextAvailable.addClass(className.selected);
+ }
+ else {
+ module.verbose('Moving selection to', $prevAvailable);
+ $prevAvailable.addClass(className.selected);
+ }
+ }
+ },
+
+ setup: {
+ api: function() {
+ var
+ apiSettings = {
+ debug : settings.debug,
+ urlData : {
+ value : module.get.value(),
+ query : module.get.query()
+ },
+ on : false
+ }
+ ;
+ module.verbose('First request, initializing API');
+ $module
+ .api(apiSettings)
+ ;
+ },
+ layout: function() {
+ if( $module.is('select') ) {
+ module.setup.select();
+ module.setup.returnedObject();
+ }
+ if( !module.has.menu() ) {
+ module.create.menu();
+ }
+ if( module.is.search() && !module.has.search() ) {
+ module.verbose('Adding search input');
+ $search = $('<input />')
+ .addClass(className.search)
+ .prop('autocomplete', 'off')
+ .insertBefore($text)
+ ;
+ }
+ if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {
+ module.create.sizer();
+ }
+ if(settings.allowTab) {
+ module.set.tabbable();
+ }
+ },
+ select: function() {
+ var
+ selectValues = module.get.selectValues()
+ ;
+ module.debug('Dropdown initialized on a select', selectValues);
+ if( $module.is('select') ) {
+ $input = $module;
+ }
+ // see if select is placed correctly already
+ if($input.parent(selector.dropdown).length > 0) {
+ module.debug('UI dropdown already exists. Creating dropdown menu only');
+ $module = $input.closest(selector.dropdown);
+ if( !module.has.menu() ) {
+ module.create.menu();
+ }
+ $menu = $module.children(selector.menu);
+ module.setup.menu(selectValues);
+ }
+ else {
+ module.debug('Creating entire dropdown from select');
+ $module = $('<div />')
+ .attr('class', $input.attr('class') )
+ .addClass(className.selection)
+ .addClass(className.dropdown)
+ .html( templates.dropdown(selectValues) )
+ .insertBefore($input)
+ ;
+ if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {
+ module.error(error.missingMultiple);
+ $input.prop('multiple', true);
+ }
+ if($input.is('[multiple]')) {
+ module.set.multiple();
+ }
+ if ($input.prop('disabled')) {
+ module.debug('Disabling dropdown');
+ $module.addClass(className.disabled);
+ }
+ $input
+ .removeAttr('class')
+ .detach()
+ .prependTo($module)
+ ;
+ }
+ module.refresh();
+ },
+ menu: function(values) {
+ $menu.html( templates.menu(values, fields));
+ $item = $menu.find(selector.item);
+ },
+ reference: function() {
+ module.debug('Dropdown behavior was called on select, replacing with closest dropdown');
+ // replace module reference
+ $module = $module.parent(selector.dropdown);
+ module.refresh();
+ module.setup.returnedObject();
+ // invoke method in context of current instance
+ if(methodInvoked) {
+ instance = module;
+ module.invoke(query);
+ }
+ },
+ returnedObject: function() {
+ var
+ $firstModules = $allModules.slice(0, elementIndex),
+ $lastModules = $allModules.slice(elementIndex + 1)
+ ;
+ // adjust all modules to use correct reference
+ $allModules = $firstModules.add($module).add($lastModules);
+ }
+ },
+
+ refresh: function() {
+ module.refreshSelectors();
+ module.refreshData();
+ },
+
+ refreshItems: function() {
+ $item = $menu.find(selector.item);
+ },
+
+ refreshSelectors: function() {
+ module.verbose('Refreshing selector cache');
+ $text = $module.find(selector.text);
+ $search = $module.find(selector.search);
+ $input = $module.find(selector.input);
+ $icon = $module.find(selector.icon);
+ $combo = ($module.prev().find(selector.text).length > 0)
+ ? $module.prev().find(selector.text)
+ : $module.prev()
+ ;
+ $menu = $module.children(selector.menu);
+ $item = $menu.find(selector.item);
+ },
+
+ refreshData: function() {
+ module.verbose('Refreshing cached metadata');
+ $item
+ .removeData(metadata.text)
+ .removeData(metadata.value)
+ ;
+ },
+
+ clearData: function() {
+ module.verbose('Clearing metadata');
+ $item
+ .removeData(metadata.text)
+ .removeData(metadata.value)
+ ;
+ $module
+ .removeData(metadata.defaultText)
+ .removeData(metadata.defaultValue)
+ .removeData(metadata.placeholderText)
+ ;
+ },
+
+ toggle: function() {
+ module.verbose('Toggling menu visibility');
+ if( !module.is.active() ) {
+ module.show();
+ }
+ else {
+ module.hide();
+ }
+ },
+
+ show: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if( module.can.show() && !module.is.active() ) {
+ module.debug('Showing dropdown');
+ if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {
+ module.remove.message();
+ }
+ if(module.is.allFiltered()) {
+ return true;
+ }
+ if(settings.onShow.call(element) !== false) {
+ module.animate.show(function() {
+ if( module.can.click() ) {
+ module.bind.intent();
+ }
+ if(module.has.menuSearch()) {
+ module.focusSearch();
+ }
+ module.set.visible();
+ callback.call(element);
+ });
+ }
+ }
+ },
+
+ hide: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if( module.is.active() ) {
+ module.debug('Hiding dropdown');
+ if(settings.onHide.call(element) !== false) {
+ module.animate.hide(function() {
+ module.remove.visible();
+ callback.call(element);
+ });
+ }
+ }
+ },
+
+ hideOthers: function() {
+ module.verbose('Finding other dropdowns to hide');
+ $allModules
+ .not($module)
+ .has(selector.menu + '.' + className.visible)
+ .dropdown('hide')
+ ;
+ },
+
+ hideMenu: function() {
+ module.verbose('Hiding menu instantaneously');
+ module.remove.active();
+ module.remove.visible();
+ $menu.transition('hide');
+ },
+
+ hideSubMenus: function() {
+ var
+ $subMenus = $menu.children(selector.item).find(selector.menu)
+ ;
+ module.verbose('Hiding sub menus', $subMenus);
+ $subMenus.transition('hide');
+ },
+
+ bind: {
+ events: function() {
+ if(hasTouch) {
+ module.bind.touchEvents();
+ }
+ module.bind.keyboardEvents();
+ module.bind.inputEvents();
+ module.bind.mouseEvents();
+ },
+ touchEvents: function() {
+ module.debug('Touch device detected binding additional touch events');
+ if( module.is.searchSelection() ) {
+ // do nothing special yet
+ }
+ else if( module.is.single() ) {
+ $module
+ .on('touchstart' + eventNamespace, module.event.test.toggle)
+ ;
+ }
+ $menu
+ .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
+ ;
+ },
+ keyboardEvents: function() {
+ module.verbose('Binding keyboard events');
+ $module
+ .on('keydown' + eventNamespace, module.event.keydown)
+ ;
+ if( module.has.search() ) {
+ $module
+ .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)
+ ;
+ }
+ if( module.is.multiple() ) {
+ $document
+ .on('keydown' + elementNamespace, module.event.document.keydown)
+ ;
+ }
+ },
+ inputEvents: function() {
+ module.verbose('Binding input change events');
+ $module
+ .on('change' + eventNamespace, selector.input, module.event.change)
+ ;
+ },
+ mouseEvents: function() {
+ module.verbose('Binding mouse events');
+ if(module.is.multiple()) {
+ $module
+ .on('click' + eventNamespace, selector.label, module.event.label.click)
+ .on('click' + eventNamespace, selector.remove, module.event.remove.click)
+ ;
+ }
+ if( module.is.searchSelection() ) {
+ $module
+ .on('mousedown' + eventNamespace, module.event.mousedown)
+ .on('mouseup' + eventNamespace, module.event.mouseup)
+ .on('mousedown' + eventNamespace, selector.menu, module.event.menu.mousedown)
+ .on('mouseup' + eventNamespace, selector.menu, module.event.menu.mouseup)
+ .on('click' + eventNamespace, selector.icon, module.event.icon.click)
+ .on('focus' + eventNamespace, selector.search, module.event.search.focus)
+ .on('click' + eventNamespace, selector.search, module.event.search.focus)
+ .on('blur' + eventNamespace, selector.search, module.event.search.blur)
+ .on('click' + eventNamespace, selector.text, module.event.text.focus)
+ ;
+ if(module.is.multiple()) {
+ $module
+ .on('click' + eventNamespace, module.event.click)
+ ;
+ }
+ }
+ else {
+ if(settings.on == 'click') {
+ $module
+ .on('click' + eventNamespace, selector.icon, module.event.icon.click)
+ .on('click' + eventNamespace, module.event.test.toggle)
+ ;
+ }
+ else if(settings.on == 'hover') {
+ $module
+ .on('mouseenter' + eventNamespace, module.delay.show)
+ .on('mouseleave' + eventNamespace, module.delay.hide)
+ ;
+ }
+ else {
+ $module
+ .on(settings.on + eventNamespace, module.toggle)
+ ;
+ }
+ $module
+ .on('mousedown' + eventNamespace, module.event.mousedown)
+ .on('mouseup' + eventNamespace, module.event.mouseup)
+ .on('focus' + eventNamespace, module.event.focus)
+ .on('blur' + eventNamespace, module.event.blur)
+ ;
+ }
+ $menu
+ .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
+ .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
+ .on('click' + eventNamespace, selector.item, module.event.item.click)
+ ;
+ },
+ intent: function() {
+ module.verbose('Binding hide intent event to document');
+ if(hasTouch) {
+ $document
+ .on('touchstart' + elementNamespace, module.event.test.touch)
+ .on('touchmove' + elementNamespace, module.event.test.touch)
+ ;
+ }
+ $document
+ .on('click' + elementNamespace, module.event.test.hide)
+ ;
+ }
+ },
+
+ unbind: {
+ intent: function() {
+ module.verbose('Removing hide intent event from document');
+ if(hasTouch) {
+ $document
+ .off('touchstart' + elementNamespace)
+ .off('touchmove' + elementNamespace)
+ ;
+ }
+ $document
+ .off('click' + elementNamespace)
+ ;
+ }
+ },
+
+ filter: function(query) {
+ var
+ searchTerm = (query !== undefined)
+ ? query
+ : module.get.query(),
+ afterFiltered = function() {
+ if(module.is.multiple()) {
+ module.filterActive();
+ }
+ module.select.firstUnfiltered();
+ if( module.has.allResultsFiltered() ) {
+ if( settings.onNoResults.call(element, searchTerm) ) {
+ if(settings.allowAdditions) {
+ if(settings.hideAdditions) {
+ module.verbose('User addition with no menu, setting empty style');
+ module.set.empty();
+ module.hideMenu();
+ }
+ }
+ else {
+ module.verbose('All items filtered, showing message', searchTerm);
+ module.add.message(message.noResults);
+ }
+ }
+ else {
+ module.verbose('All items filtered, hiding dropdown', searchTerm);
+ module.hideMenu();
+ }
+ }
+ else {
+ module.remove.empty();
+ module.remove.message();
+ }
+ if(settings.allowAdditions) {
+ module.add.userSuggestion(query);
+ }
+ if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {
+ module.show();
+ }
+ }
+ ;
+ if(settings.useLabels && module.has.maxSelections()) {
+ return;
+ }
+ if(settings.apiSettings) {
+ if( module.can.useAPI() ) {
+ module.queryRemote(searchTerm, function() {
+ afterFiltered();
+ });
+ }
+ else {
+ module.error(error.noAPI);
+ }
+ }
+ else {
+ module.filterItems(searchTerm);
+ afterFiltered();
+ }
+ },
+
+ queryRemote: function(query, callback) {
+ var
+ apiSettings = {
+ errorDuration : false,
+ cache : 'local',
+ throttle : settings.throttle,
+ urlData : {
+ query: query
+ },
+ onError: function() {
+ module.add.message(message.serverError);
+ callback();
+ },
+ onFailure: function() {
+ module.add.message(message.serverError);
+ callback();
+ },
+ onSuccess : function(response) {
+ module.remove.message();
+ module.setup.menu({
+ values: response[fields.remoteValues]
+ });
+ callback();
+ }
+ }
+ ;
+ if( !$module.api('get request') ) {
+ module.setup.api();
+ }
+ apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);
+ $module
+ .api('setting', apiSettings)
+ .api('query')
+ ;
+ },
+
+ filterItems: function(query) {
+ var
+ searchTerm = (query !== undefined)
+ ? query
+ : module.get.query(),
+ results = null,
+ escapedTerm = module.escape.regExp(searchTerm),
+ beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')
+ ;
+ // avoid loop if we're matching nothing
+ if( module.has.query() ) {
+ results = [];
+
+ module.verbose('Searching for matching values', searchTerm);
+ $item
+ .each(function(){
+ var
+ $choice = $(this),
+ text,
+ value
+ ;
+ if(settings.match == 'both' || settings.match == 'text') {
+ text = String(module.get.choiceText($choice, false));
+ if(text.search(beginsWithRegExp) !== -1) {
+ results.push(this);
+ return true;
+ }
+ else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {
+ results.push(this);
+ return true;
+ }
+ else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {
+ results.push(this);
+ return true;
+ }
+ }
+ if(settings.match == 'both' || settings.match == 'value') {
+ value = String(module.get.choiceValue($choice, text));
+
+ if(value.search(beginsWithRegExp) !== -1) {
+ results.push(this);
+ return true;
+ }
+ else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {
+ results.push(this);
+ return true;
+ }
+ }
+ })
+ ;
+ }
+ module.debug('Showing only matched items', searchTerm);
+ module.remove.filteredItem();
+ if(results) {
+ $item
+ .not(results)
+ .addClass(className.filtered)
+ ;
+ }
+ },
+
+ fuzzySearch: function(query, term) {
+ var
+ termLength = term.length,
+ queryLength = query.length
+ ;
+ query = query.toLowerCase();
+ term = term.toLowerCase();
+ if(queryLength > termLength) {
+ return false;
+ }
+ if(queryLength === termLength) {
+ return (query === term);
+ }
+ search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {
+ var
+ queryCharacter = query.charCodeAt(characterIndex)
+ ;
+ while(nextCharacterIndex < termLength) {
+ if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {
+ continue search;
+ }
+ }
+ return false;
+ }
+ return true;
+ },
+ exactSearch: function (query, term) {
+ query = query.toLowerCase();
+ term = term.toLowerCase();
+ if(term.indexOf(query) > -1) {
+ return true;
+ }
+ return false;
+ },
+ filterActive: function() {
+ if(settings.useLabels) {
+ $item.filter('.' + className.active)
+ .addClass(className.filtered)
+ ;
+ }
+ },
+
+ focusSearch: function(skipHandler) {
+ if( module.has.search() && !module.is.focusedOnSearch() ) {
+ if(skipHandler) {
+ $module.off('focus' + eventNamespace, selector.search);
+ $search.focus();
+ $module.on('focus' + eventNamespace, selector.search, module.event.search.focus);
+ }
+ else {
+ $search.focus();
+ }
+ }
+ },
+
+ forceSelection: function() {
+ var
+ $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),
+ $activeItem = $item.not(className.filtered).filter('.' + className.active).eq(0),
+ $selectedItem = ($currentlySelected.length > 0)
+ ? $currentlySelected
+ : $activeItem,
+ hasSelected = ($selectedItem.length > 0)
+ ;
+ if(hasSelected) {
+ module.debug('Forcing partial selection to selected item', $selectedItem);
+ module.event.item.click.call($selectedItem, {}, true);
+ return;
+ }
+ else {
+ if(settings.allowAdditions) {
+ module.set.selected(module.get.query());
+ module.remove.searchTerm();
+ }
+ else {
+ module.remove.searchTerm();
+ }
+ }
+ },
+
+ event: {
+ change: function() {
+ if(!internalChange) {
+ module.debug('Input changed, updating selection');
+ module.set.selected();
+ }
+ },
+ focus: function() {
+ if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {
+ module.show();
+ }
+ },
+ blur: function(event) {
+ pageLostFocus = (document.activeElement === this);
+ if(!activated && !pageLostFocus) {
+ module.remove.activeLabel();
+ module.hide();
+ }
+ },
+ mousedown: function() {
+ if(module.is.searchSelection()) {
+ // prevent menu hiding on immediate re-focus
+ willRefocus = true;
+ }
+ else {
+ // prevents focus callback from occurring on mousedown
+ activated = true;
+ }
+ },
+ mouseup: function() {
+ if(module.is.searchSelection()) {
+ // prevent menu hiding on immediate re-focus
+ willRefocus = false;
+ }
+ else {
+ activated = false;
+ }
+ },
+ click: function(event) {
+ var
+ $target = $(event.target)
+ ;
+ // focus search
+ if($target.is($module)) {
+ if(!module.is.focusedOnSearch()) {
+ module.focusSearch();
+ }
+ else {
+ module.show();
+ }
+ }
+ },
+ search: {
+ focus: function() {
+ activated = true;
+ if(module.is.multiple()) {
+ module.remove.activeLabel();
+ }
+ if(settings.showOnFocus) {
+ module.search();
+ }
+ },
+ blur: function(event) {
+ pageLostFocus = (document.activeElement === this);
+ if(!willRefocus) {
+ if(!itemActivated && !pageLostFocus) {
+ if(settings.forceSelection && module.has.query()) {
+ module.forceSelection();
+ }
+ module.hide();
+ }
+ }
+ willRefocus = false;
+ }
+ },
+ icon: {
+ click: function(event) {
+ module.toggle();
+ event.stopPropagation();
+ }
+ },
+ text: {
+ focus: function(event) {
+ activated = true;
+ module.focusSearch();
+ }
+ },
+ input: function(event) {
+ if(module.is.multiple() || module.is.searchSelection()) {
+ module.set.filtered();
+ }
+ clearTimeout(module.timer);
+ module.timer = setTimeout(module.search, settings.delay.search);
+ },
+ label: {
+ click: function(event) {
+ var
+ $label = $(this),
+ $labels = $module.find(selector.label),
+ $activeLabels = $labels.filter('.' + className.active),
+ $nextActive = $label.nextAll('.' + className.active),
+ $prevActive = $label.prevAll('.' + className.active),
+ $range = ($nextActive.length > 0)
+ ? $label.nextUntil($nextActive).add($activeLabels).add($label)
+ : $label.prevUntil($prevActive).add($activeLabels).add($label)
+ ;
+ if(event.shiftKey) {
+ $activeLabels.removeClass(className.active);
+ $range.addClass(className.active);
+ }
+ else if(event.ctrlKey) {
+ $label.toggleClass(className.active);
+ }
+ else {
+ $activeLabels.removeClass(className.active);
+ $label.addClass(className.active);
+ }
+ settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));
+ }
+ },
+ remove: {
+ click: function() {
+ var
+ $label = $(this).parent()
+ ;
+ if( $label.hasClass(className.active) ) {
+ // remove all selected labels
+ module.remove.activeLabels();
+ }
+ else {
+ // remove this label only
+ module.remove.activeLabels( $label );
+ }
+ }
+ },
+ test: {
+ toggle: function(event) {
+ var
+ toggleBehavior = (module.is.multiple())
+ ? module.show
+ : module.toggle
+ ;
+ if(module.is.bubbledLabelClick(event)) {
+ return;
+ }
+ if( module.determine.eventOnElement(event, toggleBehavior) ) {
+ event.preventDefault();
+ }
+ },
+ touch: function(event) {
+ module.determine.eventOnElement(event, function() {
+ if(event.type == 'touchstart') {
+ module.timer = setTimeout(function() {
+ module.hide();
+ }, settings.delay.touch);
+ }
+ else if(event.type == 'touchmove') {
+ clearTimeout(module.timer);
+ }
+ });
+ event.stopPropagation();
+ },
+ hide: function(event) {
+ module.determine.eventInModule(event, module.hide);
+ }
+ },
+ select: {
+ mutation: function(mutations) {
+ module.debug('<select> modified, recreating menu');
+ module.setup.select();
+ }
+ },
+ menu: {
+ mutation: function(mutations) {
+ var
+ mutation = mutations[0],
+ $addedNode = mutation.addedNodes
+ ? $(mutation.addedNodes[0])
+ : $(false),
+ $removedNode = mutation.removedNodes
+ ? $(mutation.removedNodes[0])
+ : $(false),
+ $changedNodes = $addedNode.add($removedNode),
+ isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,
+ isMessage = $changedNodes.is(selector.message) || $changedNodes.closest(selector.message).length > 0
+ ;
+ if(isUserAddition || isMessage) {
+ module.debug('Updating item selector cache');
+ module.refreshItems();
+ }
+ else {
+ module.debug('Menu modified, updating selector cache');
+ module.refresh();
+ }
+ },
+ mousedown: function() {
+ itemActivated = true;
+ },
+ mouseup: function() {
+ itemActivated = false;
+ }
+ },
+ item: {
+ mouseenter: function(event) {
+ var
+ $target = $(event.target),
+ $item = $(this),
+ $subMenu = $item.children(selector.menu),
+ $otherMenus = $item.siblings(selector.item).children(selector.menu),
+ hasSubMenu = ($subMenu.length > 0),
+ isBubbledEvent = ($subMenu.find($target).length > 0)
+ ;
+ if( !isBubbledEvent && hasSubMenu ) {
+ clearTimeout(module.itemTimer);
+ module.itemTimer = setTimeout(function() {
+ module.verbose('Showing sub-menu', $subMenu);
+ $.each($otherMenus, function() {
+ module.animate.hide(false, $(this));
+ });
+ module.animate.show(false, $subMenu);
+ }, settings.delay.show);
+ event.preventDefault();
+ }
+ },
+ mouseleave: function(event) {
+ var
+ $subMenu = $(this).children(selector.menu)
+ ;
+ if($subMenu.length > 0) {
+ clearTimeout(module.itemTimer);
+ module.itemTimer = setTimeout(function() {
+ module.verbose('Hiding sub-menu', $subMenu);
+ module.animate.hide(false, $subMenu);
+ }, settings.delay.hide);
+ }
+ },
+ click: function (event, skipRefocus) {
+ var
+ $choice = $(this),
+ $target = (event)
+ ? $(event.target)
+ : $(''),
+ $subMenu = $choice.find(selector.menu),
+ text = module.get.choiceText($choice),
+ value = module.get.choiceValue($choice, text),
+ hasSubMenu = ($subMenu.length > 0),
+ isBubbledEvent = ($subMenu.find($target).length > 0)
+ ;
+ if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {
+ if(module.is.searchSelection()) {
+ if(settings.allowAdditions) {
+ module.remove.userAddition();
+ }
+ module.remove.searchTerm();
+ if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {
+ module.focusSearch(true);
+ }
+ }
+ if(!settings.useLabels) {
+ module.remove.filteredItem();
+ module.set.scrollPosition($choice);
+ }
+ module.determine.selectAction.call(this, text, value);
+ }
+ }
+ },
+
+ document: {
+ // label selection should occur even when element has no focus
+ keydown: function(event) {
+ var
+ pressedKey = event.which,
+ isShortcutKey = module.is.inObject(pressedKey, keys)
+ ;
+ if(isShortcutKey) {
+ var
+ $label = $module.find(selector.label),
+ $activeLabel = $label.filter('.' + className.active),
+ activeValue = $activeLabel.data(metadata.value),
+ labelIndex = $label.index($activeLabel),
+ labelCount = $label.length,
+ hasActiveLabel = ($activeLabel.length > 0),
+ hasMultipleActive = ($activeLabel.length > 1),
+ isFirstLabel = (labelIndex === 0),
+ isLastLabel = (labelIndex + 1 == labelCount),
+ isSearch = module.is.searchSelection(),
+ isFocusedOnSearch = module.is.focusedOnSearch(),
+ isFocused = module.is.focused(),
+ caretAtStart = (isFocusedOnSearch && module.get.caretPosition() === 0),
+ $nextLabel
+ ;
+ if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {
+ return;
+ }
+
+ if(pressedKey == keys.leftArrow) {
+ // activate previous label
+ if((isFocused || caretAtStart) && !hasActiveLabel) {
+ module.verbose('Selecting previous label');
+ $label.last().addClass(className.active);
+ }
+ else if(hasActiveLabel) {
+ if(!event.shiftKey) {
+ module.verbose('Selecting previous label');
+ $label.removeClass(className.active);
+ }
+ else {
+ module.verbose('Adding previous label to selection');
+ }
+ if(isFirstLabel && !hasMultipleActive) {
+ $activeLabel.addClass(className.active);
+ }
+ else {
+ $activeLabel.prev(selector.siblingLabel)
+ .addClass(className.active)
+ .end()
+ ;
+ }
+ event.preventDefault();
+ }
+ }
+ else if(pressedKey == keys.rightArrow) {
+ // activate first label
+ if(isFocused && !hasActiveLabel) {
+ $label.first().addClass(className.active);
+ }
+ // activate next label
+ if(hasActiveLabel) {
+ if(!event.shiftKey) {
+ module.verbose('Selecting next label');
+ $label.removeClass(className.active);
+ }
+ else {
+ module.verbose('Adding next label to selection');
+ }
+ if(isLastLabel) {
+ if(isSearch) {
+ if(!isFocusedOnSearch) {
+ module.focusSearch();
+ }
+ else {
+ $label.removeClass(className.active);
+ }
+ }
+ else if(hasMultipleActive) {
+ $activeLabel.next(selector.siblingLabel).addClass(className.active);
+ }
+ else {
+ $activeLabel.addClass(className.active);
+ }
+ }
+ else {
+ $activeLabel.next(selector.siblingLabel).addClass(className.active);
+ }
+ event.preventDefault();
+ }
+ }
+ else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {
+ if(hasActiveLabel) {
+ module.verbose('Removing active labels');
+ if(isLastLabel) {
+ if(isSearch && !isFocusedOnSearch) {
+ module.focusSearch();
+ }
+ }
+ $activeLabel.last().next(selector.siblingLabel).addClass(className.active);
+ module.remove.activeLabels($activeLabel);
+ event.preventDefault();
+ }
+ else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {
+ module.verbose('Removing last label on input backspace');
+ $activeLabel = $label.last().addClass(className.active);
+ module.remove.activeLabels($activeLabel);
+ }
+ }
+ else {
+ $activeLabel.removeClass(className.active);
+ }
+ }
+ }
+ },
+
+ keydown: function(event) {
+ var
+ pressedKey = event.which,
+ isShortcutKey = module.is.inObject(pressedKey, keys)
+ ;
+ if(isShortcutKey) {
+ var
+ $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),
+ $activeItem = $menu.children('.' + className.active).eq(0),
+ $selectedItem = ($currentlySelected.length > 0)
+ ? $currentlySelected
+ : $activeItem,
+ $visibleItems = ($selectedItem.length > 0)
+ ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()
+ : $menu.children(':not(.' + className.filtered +')'),
+ $subMenu = $selectedItem.children(selector.menu),
+ $parentMenu = $selectedItem.closest(selector.menu),
+ inVisibleMenu = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),
+ hasSubMenu = ($subMenu.length> 0),
+ hasSelectedItem = ($selectedItem.length > 0),
+ selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
+ delimiterPressed = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),
+ isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
+ $nextItem,
+ isSubMenuItem,
+ newIndex
+ ;
+ // allow selection with menu closed
+ if(isAdditionWithoutMenu) {
+ module.verbose('Selecting item from keyboard shortcut', $selectedItem);
+ module.event.item.click.call($selectedItem, event);
+ if(module.is.searchSelection()) {
+ module.remove.searchTerm();
+ }
+ }
+
+ // visible menu keyboard shortcuts
+ if( module.is.visible() ) {
+
+ // enter (select or open sub-menu)
+ if(pressedKey == keys.enter || delimiterPressed) {
+ if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {
+ module.verbose('Pressed enter on unselectable category, opening sub menu');
+ pressedKey = keys.rightArrow;
+ }
+ else if(selectedIsSelectable) {
+ module.verbose('Selecting item from keyboard shortcut', $selectedItem);
+ module.event.item.click.call($selectedItem, event);
+ if(module.is.searchSelection()) {
+ module.remove.searchTerm();
+ }
+ }
+ event.preventDefault();
+ }
+
+ // sub-menu actions
+ if(hasSelectedItem) {
+
+ if(pressedKey == keys.leftArrow) {
+
+ isSubMenuItem = ($parentMenu[0] !== $menu[0]);
+
+ if(isSubMenuItem) {
+ module.verbose('Left key pressed, closing sub-menu');
+ module.animate.hide(false, $parentMenu);
+ $selectedItem
+ .removeClass(className.selected)
+ ;
+ $parentMenu
+ .closest(selector.item)
+ .addClass(className.selected)
+ ;
+ event.preventDefault();
+ }
+ }
+
+ // right arrow (show sub-menu)
+ if(pressedKey == keys.rightArrow) {
+ if(hasSubMenu) {
+ module.verbose('Right key pressed, opening sub-menu');
+ module.animate.show(false, $subMenu);
+ $selectedItem
+ .removeClass(className.selected)
+ ;
+ $subMenu
+ .find(selector.item).eq(0)
+ .addClass(className.selected)
+ ;
+ event.preventDefault();
+ }
+ }
+ }
+
+ // up arrow (traverse menu up)
+ if(pressedKey == keys.upArrow) {
+ $nextItem = (hasSelectedItem && inVisibleMenu)
+ ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)
+ : $item.eq(0)
+ ;
+ if($visibleItems.index( $nextItem ) < 0) {
+ module.verbose('Up key pressed but reached top of current menu');
+ event.preventDefault();
+ return;
+ }
+ else {
+ module.verbose('Up key pressed, changing active item');
+ $selectedItem
+ .removeClass(className.selected)
+ ;
+ $nextItem
+ .addClass(className.selected)
+ ;
+ module.set.scrollPosition($nextItem);
+ if(settings.selectOnKeydown && module.is.single()) {
+ module.set.selectedItem($nextItem);
+ }
+ }
+ event.preventDefault();
+ }
+
+ // down arrow (traverse menu down)
+ if(pressedKey == keys.downArrow) {
+ $nextItem = (hasSelectedItem && inVisibleMenu)
+ ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)
+ : $item.eq(0)
+ ;
+ if($nextItem.length === 0) {
+ module.verbose('Down key pressed but reached bottom of current menu');
+ event.preventDefault();
+ return;
+ }
+ else {
+ module.verbose('Down key pressed, changing active item');
+ $item
+ .removeClass(className.selected)
+ ;
+ $nextItem
+ .addClass(className.selected)
+ ;
+ module.set.scrollPosition($nextItem);
+ if(settings.selectOnKeydown && module.is.single()) {
+ module.set.activeItem($nextItem);
+ module.set.selected(module.get.choiceValue($nextItem), $nextItem);
+ }
+ }
+ event.preventDefault();
+ }
+
+ // page down (show next page)
+ if(pressedKey == keys.pageUp) {
+ module.scrollPage('up');
+ event.preventDefault();
+ }
+ if(pressedKey == keys.pageDown) {
+ module.scrollPage('down');
+ event.preventDefault();
+ }
+
+ // escape (close menu)
+ if(pressedKey == keys.escape) {
+ module.verbose('Escape key pressed, closing dropdown');
+ module.hide();
+ }
+
+ }
+ else {
+ // delimiter key
+ if(delimiterPressed) {
+ event.preventDefault();
+ }
+ // down arrow (open menu)
+ if(pressedKey == keys.downArrow && !module.is.visible()) {
+ module.verbose('Down key pressed, showing dropdown');
+ module.select.firstUnfiltered();
+ module.show();
+ event.preventDefault();
+ }
+ }
+ }
+ else {
+ if( !module.has.search() ) {
+ module.set.selectedLetter( String.fromCharCode(pressedKey) );
+ }
+ }
+ }
+ },
+
+ trigger: {
+ change: function() {
+ var
+ events = document.createEvent('HTMLEvents'),
+ inputElement = $input[0]
+ ;
+ if(inputElement) {
+ module.verbose('Triggering native change event');
+ events.initEvent('change', true, false);
+ inputElement.dispatchEvent(events);
+ }
+ }
+ },
+
+ determine: {
+ selectAction: function(text, value) {
+ module.verbose('Determining action', settings.action);
+ if( $.isFunction( module.action[settings.action] ) ) {
+ module.verbose('Triggering preset action', settings.action, text, value);
+ module.action[ settings.action ].call(element, text, value, this);
+ }
+ else if( $.isFunction(settings.action) ) {
+ module.verbose('Triggering user action', settings.action, text, value);
+ settings.action.call(element, text, value, this);
+ }
+ else {
+ module.error(error.action, settings.action);
+ }
+ },
+ eventInModule: function(event, callback) {
+ var
+ $target = $(event.target),
+ inDocument = ($target.closest(document.documentElement).length > 0),
+ inModule = ($target.closest($module).length > 0)
+ ;
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if(inDocument && !inModule) {
+ module.verbose('Triggering event', callback);
+ callback();
+ return true;
+ }
+ else {
+ module.verbose('Event occurred in dropdown, canceling callback');
+ return false;
+ }
+ },
+ eventOnElement: function(event, callback) {
+ var
+ $target = $(event.target),
+ $label = $target.closest(selector.siblingLabel),
+ inVisibleDOM = document.body.contains(event.target),
+ notOnLabel = ($module.find($label).length === 0),
+ notInMenu = ($target.closest($menu).length === 0)
+ ;
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if(inVisibleDOM && notOnLabel && notInMenu) {
+ module.verbose('Triggering event', callback);
+ callback();
+ return true;
+ }
+ else {
+ module.verbose('Event occurred in dropdown menu, canceling callback');
+ return false;
+ }
+ }
+ },
+
+ action: {
+
+ nothing: function() {},
+
+ activate: function(text, value, element) {
+ value = (value !== undefined)
+ ? value
+ : text
+ ;
+ if( module.can.activate( $(element) ) ) {
+ module.set.selected(value, $(element));
+ if(module.is.multiple() && !module.is.allFiltered()) {
+ return;
+ }
+ else {
+ module.hideAndClear();
+ }
+ }
+ },
+
+ select: function(text, value, element) {
+ // mimics action.activate but does not select text
+ module.action.activate.call(element);
+ },
+
+ combo: function(text, value, element) {
+ value = (value !== undefined)
+ ? value
+ : text
+ ;
+ module.set.selected(value, $(element));
+ module.hideAndClear();
+ },
+
+ hide: function(text, value, element) {
+ module.set.value(value, text);
+ module.hideAndClear();
+ }
+
+ },
+
+ get: {
+ id: function() {
+ return id;
+ },
+ defaultText: function() {
+ return $module.data(metadata.defaultText);
+ },
+ defaultValue: function() {
+ return $module.data(metadata.defaultValue);
+ },
+ placeholderText: function() {
+ return $module.data(metadata.placeholderText) || '';
+ },
+ text: function() {
+ return $text.text();
+ },
+ query: function() {
+ return $.trim($search.val());
+ },
+ searchWidth: function(value) {
+ value = (value !== undefined)
+ ? value
+ : $search.val()
+ ;
+ $sizer.text(value);
+ // prevent rounding issues
+ return Math.ceil( $sizer.width() + 1);
+ },
+ selectionCount: function() {
+ var
+ values = module.get.values(),
+ count
+ ;
+ count = ( module.is.multiple() )
+ ? $.isArray(values)
+ ? values.length
+ : 0
+ : (module.get.value() !== '')
+ ? 1
+ : 0
+ ;
+ return count;
+ },
+ transition: function($subMenu) {
+ return (settings.transition == 'auto')
+ ? module.is.upward($subMenu)
+ ? 'slide up'
+ : 'slide down'
+ : settings.transition
+ ;
+ },
+ userValues: function() {
+ var
+ values = module.get.values()
+ ;
+ if(!values) {
+ return false;
+ }
+ values = $.isArray(values)
+ ? values
+ : [values]
+ ;
+ return $.grep(values, function(value) {
+ return (module.get.item(value) === false);
+ });
+ },
+ uniqueArray: function(array) {
+ return $.grep(array, function (value, index) {
+ return $.inArray(value, array) === index;
+ });
+ },
+ caretPosition: function() {
+ var
+ input = $search.get(0),
+ range,
+ rangeLength
+ ;
+ if('selectionStart' in input) {
+ return input.selectionStart;
+ }
+ else if (document.selection) {
+ input.focus();
+ range = document.selection.createRange();
+ rangeLength = range.text.length;
+ range.moveStart('character', -input.value.length);
+ return range.text.length - rangeLength;
+ }
+ },
+ value: function() {
+ var
+ value = ($input.length > 0)
+ ? $input.val()
+ : $module.data(metadata.value),
+ isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')
+ ;
+ // prevents placeholder element from being selected when multiple
+ return (value === undefined || isEmptyMultiselect)
+ ? ''
+ : value
+ ;
+ },
+ values: function() {
+ var
+ value = module.get.value()
+ ;
+ if(value === '') {
+ return '';
+ }
+ return ( !module.has.selectInput() && module.is.multiple() )
+ ? (typeof value == 'string') // delimited string
+ ? value.split(settings.delimiter)
+ : ''
+ : value
+ ;
+ },
+ remoteValues: function() {
+ var
+ values = module.get.values(),
+ remoteValues = false
+ ;
+ if(values) {
+ if(typeof values == 'string') {
+ values = [values];
+ }
+ $.each(values, function(index, value) {
+ var
+ name = module.read.remoteData(value)
+ ;
+ module.verbose('Restoring value from session data', name, value);
+ if(name) {
+ if(!remoteValues) {
+ remoteValues = {};
+ }
+ remoteValues[value] = name;
+ }
+ });
+ }
+ return remoteValues;
+ },
+ choiceText: function($choice, preserveHTML) {
+ preserveHTML = (preserveHTML !== undefined)
+ ? preserveHTML
+ : settings.preserveHTML
+ ;
+ if($choice) {
+ if($choice.find(selector.menu).length > 0) {
+ module.verbose('Retrieving text of element with sub-menu');
+ $choice = $choice.clone();
+ $choice.find(selector.menu).remove();
+ $choice.find(selector.menuIcon).remove();
+ }
+ return ($choice.data(metadata.text) !== undefined)
+ ? $choice.data(metadata.text)
+ : (preserveHTML)
+ ? $.trim($choice.html())
+ : $.trim($choice.text())
+ ;
+ }
+ },
+ choiceValue: function($choice, choiceText) {
+ choiceText = choiceText || module.get.choiceText($choice);
+ if(!$choice) {
+ return false;
+ }
+ return ($choice.data(metadata.value) !== undefined)
+ ? String( $choice.data(metadata.value) )
+ : (typeof choiceText === 'string')
+ ? $.trim(choiceText.toLowerCase())
+ : String(choiceText)
+ ;
+ },
+ inputEvent: function() {
+ var
+ input = $search[0]
+ ;
+ if(input) {
+ return (input.oninput !== undefined)
+ ? 'input'
+ : (input.onpropertychange !== undefined)
+ ? 'propertychange'
+ : 'keyup'
+ ;
+ }
+ return false;
+ },
+ selectValues: function() {
+ var
+ select = {}
+ ;
+ select.values = [];
+ $module
+ .find('option')
+ .each(function() {
+ var
+ $option = $(this),
+ name = $option.html(),
+ disabled = $option.attr('disabled'),
+ value = ( $option.attr('value') !== undefined )
+ ? $option.attr('value')
+ : name
+ ;
+ if(settings.placeholder === 'auto' && value === '') {
+ select.placeholder = name;
+ }
+ else {
+ select.values.push({
+ name : name,
+ value : value,
+ disabled : disabled
+ });
+ }
+ })
+ ;
+ if(settings.placeholder && settings.placeholder !== 'auto') {
+ module.debug('Setting placeholder value to', settings.placeholder);
+ select.placeholder = settings.placeholder;
+ }
+ if(settings.sortSelect) {
+ select.values.sort(function(a, b) {
+ return (a.name > b.name)
+ ? 1
+ : -1
+ ;
+ });
+ module.debug('Retrieved and sorted values from select', select);
+ }
+ else {
+ module.debug('Retrieved values from select', select);
+ }
+ return select;
+ },
+ activeItem: function() {
+ return $item.filter('.' + className.active);
+ },
+ selectedItem: function() {
+ var
+ $selectedItem = $item.not(selector.unselectable).filter('.' + className.selected)
+ ;
+ return ($selectedItem.length > 0)
+ ? $selectedItem
+ : $item.eq(0)
+ ;
+ },
+ itemWithAdditions: function(value) {
+ var
+ $items = module.get.item(value),
+ $userItems = module.create.userChoice(value),
+ hasUserItems = ($userItems && $userItems.length > 0)
+ ;
+ if(hasUserItems) {
+ $items = ($items.length > 0)
+ ? $items.add($userItems)
+ : $userItems
+ ;
+ }
+ return $items;
+ },
+ item: function(value, strict) {
+ var
+ $selectedItem = false,
+ shouldSearch,
+ isMultiple
+ ;
+ value = (value !== undefined)
+ ? value
+ : ( module.get.values() !== undefined)
+ ? module.get.values()
+ : module.get.text()
+ ;
+ shouldSearch = (isMultiple)
+ ? (value.length > 0)
+ : (value !== undefined && value !== null)
+ ;
+ isMultiple = (module.is.multiple() && $.isArray(value));
+ strict = (value === '' || value === 0)
+ ? true
+ : strict || false
+ ;
+ if(shouldSearch) {
+ $item
+ .each(function() {
+ var
+ $choice = $(this),
+ optionText = module.get.choiceText($choice),
+ optionValue = module.get.choiceValue($choice, optionText)
+ ;
+ // safe early exit
+ if(optionValue === null || optionValue === undefined) {
+ return;
+ }
+ if(isMultiple) {
+ if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {
+ $selectedItem = ($selectedItem)
+ ? $selectedItem.add($choice)
+ : $choice
+ ;
+ }
+ }
+ else if(strict) {
+ module.verbose('Ambiguous dropdown value using strict type check', $choice, value);
+ if( optionValue === value || optionText === value) {
+ $selectedItem = $choice;
+ return true;
+ }
+ }
+ else {
+ if( String(optionValue) == String(value) || optionText == value) {
+ module.verbose('Found select item by value', optionValue, value);
+ $selectedItem = $choice;
+ return true;
+ }
+ }
+ })
+ ;
+ }
+ return $selectedItem;
+ }
+ },
+
+ check: {
+ maxSelections: function(selectionCount) {
+ if(settings.maxSelections) {
+ selectionCount = (selectionCount !== undefined)
+ ? selectionCount
+ : module.get.selectionCount()
+ ;
+ if(selectionCount >= settings.maxSelections) {
+ module.debug('Maximum selection count reached');
+ if(settings.useLabels) {
+ $item.addClass(className.filtered);
+ module.add.message(message.maxSelections);
+ }
+ return true;
+ }
+ else {
+ module.verbose('No longer at maximum selection count');
+ module.remove.message();
+ module.remove.filteredItem();
+ if(module.is.searchSelection()) {
+ module.filterItems();
+ }
+ return false;
+ }
+ }
+ return true;
+ }
+ },
+
+ restore: {
+ defaults: function() {
+ module.clear();
+ module.restore.defaultText();
+ module.restore.defaultValue();
+ },
+ defaultText: function() {
+ var
+ defaultText = module.get.defaultText(),
+ placeholderText = module.get.placeholderText
+ ;
+ if(defaultText === placeholderText) {
+ module.debug('Restoring default placeholder text', defaultText);
+ module.set.placeholderText(defaultText);
+ }
+ else {
+ module.debug('Restoring default text', defaultText);
+ module.set.text(defaultText);
+ }
+ },
+ placeholderText: function() {
+ module.set.placeholderText();
+ },
+ defaultValue: function() {
+ var
+ defaultValue = module.get.defaultValue()
+ ;
+ if(defaultValue !== undefined) {
+ module.debug('Restoring default value', defaultValue);
+ if(defaultValue !== '') {
+ module.set.value(defaultValue);
+ module.set.selected();
+ }
+ else {
+ module.remove.activeItem();
+ module.remove.selectedItem();
+ }
+ }
+ },
+ labels: function() {
+ if(settings.allowAdditions) {
+ if(!settings.useLabels) {
+ module.error(error.labels);
+ settings.useLabels = true;
+ }
+ module.debug('Restoring selected values');
+ module.create.userLabels();
+ }
+ module.check.maxSelections();
+ },
+ selected: function() {
+ module.restore.values();
+ if(module.is.multiple()) {
+ module.debug('Restoring previously selected values and labels');
+ module.restore.labels();
+ }
+ else {
+ module.debug('Restoring previously selected values');
+ }
+ },
+ values: function() {
+ // prevents callbacks from occurring on initial load
+ module.set.initialLoad();
+ if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {
+ module.restore.remoteValues();
+ }
+ else {
+ module.set.selected();
+ }
+ module.remove.initialLoad();
+ },
+ remoteValues: function() {
+ var
+ values = module.get.remoteValues()
+ ;
+ module.debug('Recreating selected from session data', values);
+ if(values) {
+ if( module.is.single() ) {
+ $.each(values, function(value, name) {
+ module.set.text(name);
+ });
+ }
+ else {
+ $.each(values, function(value, name) {
+ module.add.label(value, name);
+ });
+ }
+ }
+ }
+ },
+
+ read: {
+ remoteData: function(value) {
+ var
+ name
+ ;
+ if(window.Storage === undefined) {
+ module.error(error.noStorage);
+ return;
+ }
+ name = sessionStorage.getItem(value);
+ return (name !== undefined)
+ ? name
+ : false
+ ;
+ }
+ },
+
+ save: {
+ defaults: function() {
+ module.save.defaultText();
+ module.save.placeholderText();
+ module.save.defaultValue();
+ },
+ defaultValue: function() {
+ var
+ value = module.get.value()
+ ;
+ module.verbose('Saving default value as', value);
+ $module.data(metadata.defaultValue, value);
+ },
+ defaultText: function() {
+ var
+ text = module.get.text()
+ ;
+ module.verbose('Saving default text as', text);
+ $module.data(metadata.defaultText, text);
+ },
+ placeholderText: function() {
+ var
+ text
+ ;
+ if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {
+ text = module.get.text();
+ module.verbose('Saving placeholder text as', text);
+ $module.data(metadata.placeholderText, text);
+ }
+ },
+ remoteData: function(name, value) {
+ if(window.Storage === undefined) {
+ module.error(error.noStorage);
+ return;
+ }
+ module.verbose('Saving remote data to session storage', value, name);
+ sessionStorage.setItem(value, name);
+ }
+ },
+
+ clear: function() {
+ if(module.is.multiple()) {
+ module.remove.labels();
+ }
+ else {
+ module.remove.activeItem();
+ module.remove.selectedItem();
+ }
+ module.set.placeholderText();
+ module.clearValue();
+ },
+
+ clearValue: function() {
+ module.set.value('');
+ },
+
+ scrollPage: function(direction, $selectedItem) {
+ var
+ $currentItem = $selectedItem || module.get.selectedItem(),
+ $menu = $currentItem.closest(selector.menu),
+ menuHeight = $menu.outerHeight(),
+ currentScroll = $menu.scrollTop(),
+ itemHeight = $item.eq(0).outerHeight(),
+ itemsPerPage = Math.floor(menuHeight / itemHeight),
+ maxScroll = $menu.prop('scrollHeight'),
+ newScroll = (direction == 'up')
+ ? currentScroll - (itemHeight * itemsPerPage)
+ : currentScroll + (itemHeight * itemsPerPage),
+ $selectableItem = $item.not(selector.unselectable),
+ isWithinRange,
+ $nextSelectedItem,
+ elementIndex
+ ;
+ elementIndex = (direction == 'up')
+ ? $selectableItem.index($currentItem) - itemsPerPage
+ : $selectableItem.index($currentItem) + itemsPerPage
+ ;
+ isWithinRange = (direction == 'up')
+ ? (elementIndex >= 0)
+ : (elementIndex < $selectableItem.length)
+ ;
+ $nextSelectedItem = (isWithinRange)
+ ? $selectableItem.eq(elementIndex)
+ : (direction == 'up')
+ ? $selectableItem.first()
+ : $selectableItem.last()
+ ;
+ if($nextSelectedItem.length > 0) {
+ module.debug('Scrolling page', direction, $nextSelectedItem);
+ $currentItem
+ .removeClass(className.selected)
+ ;
+ $nextSelectedItem
+ .addClass(className.selected)
+ ;
+ if(settings.selectOnKeydown && module.is.single()) {
+ module.set.selectedItem($nextSelectedItem);
+ }
+ $menu
+ .scrollTop(newScroll)
+ ;
+ }
+ },
+
+ set: {
+ filtered: function() {
+ var
+ isMultiple = module.is.multiple(),
+ isSearch = module.is.searchSelection(),
+ isSearchMultiple = (isMultiple && isSearch),
+ searchValue = (isSearch)
+ ? module.get.query()
+ : '',
+ hasSearchValue = (typeof searchValue === 'string' && searchValue.length > 0),
+ searchWidth = module.get.searchWidth(),
+ valueIsSet = searchValue !== ''
+ ;
+ if(isMultiple && hasSearchValue) {
+ module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);
+ $search.css('width', searchWidth);
+ }
+ if(hasSearchValue || (isSearchMultiple && valueIsSet)) {
+ module.verbose('Hiding placeholder text');
+ $text.addClass(className.filtered);
+ }
+ else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {
+ module.verbose('Showing placeholder text');
+ $text.removeClass(className.filtered);
+ }
+ },
+ empty: function() {
+ $module.addClass(className.empty);
+ },
+ loading: function() {
+ $module.addClass(className.loading);
+ },
+ placeholderText: function(text) {
+ text = text || module.get.placeholderText();
+ module.debug('Setting placeholder text', text);
+ module.set.text(text);
+ $text.addClass(className.placeholder);
+ },
+ tabbable: function() {
+ if( module.has.search() ) {
+ module.debug('Added tabindex to searchable dropdown');
+ $search
+ .val('')
+ .attr('tabindex', 0)
+ ;
+ $menu
+ .attr('tabindex', -1)
+ ;
+ }
+ else {
+ module.debug('Added tabindex to dropdown');
+ if( $module.attr('tabindex') === undefined) {
+ $module
+ .attr('tabindex', 0)
+ ;
+ $menu
+ .attr('tabindex', -1)
+ ;
+ }
+ }
+ },
+ initialLoad: function() {
+ module.verbose('Setting initial load');
+ initialLoad = true;
+ },
+ activeItem: function($item) {
+ if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {
+ $item.addClass(className.filtered);
+ }
+ else {
+ $item.addClass(className.active);
+ }
+ },
+ scrollPosition: function($item, forceScroll) {
+ var
+ edgeTolerance = 5,
+ $menu,
+ hasActive,
+ offset,
+ itemHeight,
+ itemOffset,
+ menuOffset,
+ menuScroll,
+ menuHeight,
+ abovePage,
+ belowPage
+ ;
+
+ $item = $item || module.get.selectedItem();
+ $menu = $item.closest(selector.menu);
+ hasActive = ($item && $item.length > 0);
+ forceScroll = (forceScroll !== undefined)
+ ? forceScroll
+ : false
+ ;
+ if($item && $menu.length > 0 && hasActive) {
+ itemOffset = $item.position().top;
+
+ $menu.addClass(className.loading);
+ menuScroll = $menu.scrollTop();
+ menuOffset = $menu.offset().top;
+ itemOffset = $item.offset().top;
+ offset = menuScroll - menuOffset + itemOffset;
+ if(!forceScroll) {
+ menuHeight = $menu.height();
+ belowPage = menuScroll + menuHeight < (offset + edgeTolerance);
+ abovePage = ((offset - edgeTolerance) < menuScroll);
+ }
+ module.debug('Scrolling to active item', offset);
+ if(forceScroll || abovePage || belowPage) {
+ $menu.scrollTop(offset);
+ }
+ $menu.removeClass(className.loading);
+ }
+ },
+ text: function(text) {
+ if(settings.action !== 'select') {
+ if(settings.action == 'combo') {
+ module.debug('Changing combo button text', text, $combo);
+ if(settings.preserveHTML) {
+ $combo.html(text);
+ }
+ else {
+ $combo.text(text);
+ }
+ }
+ else {
+ if(text !== module.get.placeholderText()) {
+ $text.removeClass(className.placeholder);
+ }
+ module.debug('Changing text', text, $text);
+ $text
+ .removeClass(className.filtered)
+ ;
+ if(settings.preserveHTML) {
+ $text.html(text);
+ }
+ else {
+ $text.text(text);
+ }
+ }
+ }
+ },
+ selectedItem: function($item) {
+ module.debug('Setting user selection to item', $item);
+ module.remove.activeItem();
+ module.set.activeItem($item);
+ module.set.selected(module.get.choiceValue($item), $item);
+ },
+ selectedLetter: function(letter) {
+ var
+ $selectedItem = $item.filter('.' + className.selected),
+ alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),
+ $nextValue = false,
+ $nextItem
+ ;
+ // check next of same letter
+ if(alreadySelectedLetter) {
+ $nextItem = $selectedItem.nextAll($item).eq(0);
+ if( module.has.firstLetter($nextItem, letter) ) {
+ $nextValue = $nextItem;
+ }
+ }
+ // check all values
+ if(!$nextValue) {
+ $item
+ .each(function(){
+ if(module.has.firstLetter($(this), letter)) {
+ $nextValue = $(this);
+ return false;
+ }
+ })
+ ;
+ }
+ // set next value
+ if($nextValue) {
+ module.verbose('Scrolling to next value with letter', letter);
+ module.set.scrollPosition($nextValue);
+ $selectedItem.removeClass(className.selected);
+ $nextValue.addClass(className.selected);
+ if(settings.selectOnKeydown && module.is.single()) {
+ module.set.selectedItem($nextValue);
+ }
+ }
+ },
+ direction: function($menu) {
+ if(settings.direction == 'auto') {
+ if(module.is.onScreen($menu)) {
+ module.remove.upward($menu);
+ }
+ else {
+ module.set.upward($menu);
+ }
+ }
+ else if(settings.direction == 'upward') {
+ module.set.upward($menu);
+ }
+ },
+ upward: function($menu) {
+ var $element = $menu || $module;
+ $element.addClass(className.upward);
+ },
+ value: function(value, text, $selected) {
+ var
+ escapedValue = module.escape.value(value),
+ hasInput = ($input.length > 0),
+ isAddition = !module.has.value(value),
+ currentValue = module.get.values(),
+ stringValue = (value !== undefined)
+ ? String(value)
+ : value,
+ newValue
+ ;
+ if(hasInput) {
+ if(!settings.allowReselection && stringValue == currentValue) {
+ module.verbose('Skipping value update already same value', value, currentValue);
+ if(!module.is.initialLoad()) {
+ return;
+ }
+ }
+
+ if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {
+ module.debug('Adding user option', value);
+ module.add.optionValue(value);
+ }
+ module.debug('Updating input value', escapedValue, currentValue);
+ internalChange = true;
+ $input
+ .val(escapedValue)
+ ;
+ if(settings.fireOnInit === false && module.is.initialLoad()) {
+ module.debug('Input native change event ignored on initial load');
+ }
+ else {
+ module.trigger.change();
+ }
+ internalChange = false;
+ }
+ else {
+ module.verbose('Storing value in metadata', escapedValue, $input);
+ if(escapedValue !== currentValue) {
+ $module.data(metadata.value, stringValue);
+ }
+ }
+ if(settings.fireOnInit === false && module.is.initialLoad()) {
+ module.verbose('No callback on initial load', settings.onChange);
+ }
+ else {
+ settings.onChange.call(element, value, text, $selected);
+ }
+ },
+ active: function() {
+ $module
+ .addClass(className.active)
+ ;
+ },
+ multiple: function() {
+ $module.addClass(className.multiple);
+ },
+ visible: function() {
+ $module.addClass(className.visible);
+ },
+ exactly: function(value, $selectedItem) {
+ module.debug('Setting selected to exact values');
+ module.clear();
+ module.set.selected(value, $selectedItem);
+ },
+ selected: function(value, $selectedItem) {
+ var
+ isMultiple = module.is.multiple(),
+ $userSelectedItem
+ ;
+ $selectedItem = (settings.allowAdditions)
+ ? $selectedItem || module.get.itemWithAdditions(value)
+ : $selectedItem || module.get.item(value)
+ ;
+ if(!$selectedItem) {
+ return;
+ }
+ module.debug('Setting selected menu item to', $selectedItem);
+ if(module.is.multiple()) {
+ module.remove.searchWidth();
+ }
+ if(module.is.single()) {
+ module.remove.activeItem();
+ module.remove.selectedItem();
+ }
+ else if(settings.useLabels) {
+ module.remove.selectedItem();
+ }
+ // select each item
+ $selectedItem
+ .each(function() {
+ var
+ $selected = $(this),
+
<TRUNCATED>
[48/48] incubator-senssoft-tap git commit: Endpoint for app results
fixed
Posted by ar...@apache.org.
Endpoint for app results fixed
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/acea1d31
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/acea1d31
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/acea1d31
Branch: refs/heads/master
Commit: acea1d31b78104db9c1b6479251b9ddf9208c9f2
Parents: 9cd21f5
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Fri Oct 21 11:51:48 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Fri Oct 21 11:51:48 2016 -0400
----------------------------------------------------------------------
.gitignore | 5 +++++
app_mgr/distillviews.py | 17 +++++++-------
app_mgr/migrations/0005_auto_20161012_1441.py | 26 ++++++++++++++++++++++
app_mgr/urls.py | 1 +
app_mgr/views.py | 20 +----------------
tap/urls.py | 2 +-
tasks/django.js | 2 +-
7 files changed, 44 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acea1d31/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 9df8927..9e04f3e 100755
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,8 @@ archive/*
/public/neon_counts.js
/public/neon_graph.js
+/public/neon_new/*
+/public/neon_old/*
+
+env/*
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acea1d31/app_mgr/distillviews.py
----------------------------------------------------------------------
diff --git a/app_mgr/distillviews.py b/app_mgr/distillviews.py
index c021819..38c098c 100644
--- a/app_mgr/distillviews.py
+++ b/app_mgr/distillviews.py
@@ -44,20 +44,21 @@ from app_mgr.serializers import UserProfileSerializer, OrganizationSerializer, A
import datetime
import requests
-distillURL = "msbx.draper.com:8091"
+#distillURL = "msbx.draper.com:8091"
+distillURL = "localhost:8091" #move url into settings/config and import
def app_results_byname(request, appName, searchType):
completeurl = distillURL+'/search/'+appName+'/'+searchType
+ print ("APP RESULTS REQUESTED")
print (completeurl)
results = requests.get(completeurl)
return HttpResponse(results)
def app_results(request, appId, searchType):
- print ("hello")
- print (appId)
- print (searchType)
- return render(request, 'user_profile.html',
- {'user': request.user,
- }
- )
\ No newline at end of file
+ completeurl = distillURL+'/search/'+appId+'/'+searchType
+ print ("APP RESULTS REQUESTED")
+ print (completeurl)
+ results = requests.get(completeurl)
+
+ return HttpResponse(results)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acea1d31/app_mgr/migrations/0005_auto_20161012_1441.py
----------------------------------------------------------------------
diff --git a/app_mgr/migrations/0005_auto_20161012_1441.py b/app_mgr/migrations/0005_auto_20161012_1441.py
new file mode 100644
index 0000000..9bc9626
--- /dev/null
+++ b/app_mgr/migrations/0005_auto_20161012_1441.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-10-12 18:41
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('app_mgr', '0004_auto_20160629_0252'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='application',
+ name='content_type',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='application owner'),
+ ),
+ migrations.AlterField(
+ model_name='application',
+ name='object_id',
+ field=models.PositiveIntegerField(null=True, verbose_name='app owner id'),
+ ),
+ ]
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acea1d31/app_mgr/urls.py
----------------------------------------------------------------------
diff --git a/app_mgr/urls.py b/app_mgr/urls.py
index 6698228..92b832a 100644
--- a/app_mgr/urls.py
+++ b/app_mgr/urls.py
@@ -29,6 +29,7 @@ Including another URLconf
"""
from django.conf.urls import include, url
from django.contrib import admin
+from rest_framework.urlpatterns import format_suffix_patterns
from app_mgr import views
from app_mgr import distillviews
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acea1d31/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index 8973be8..4d0c464 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -336,22 +336,4 @@ def view_profile(request):
# return render(request, 'user_profile.html',
# {'user': request.user,
# }
-# )
-
-def app_results(request, appId, searchType):
- print ("hello")
- print (appId)
- print (searchType)
- return render(request, 'user_profile.html',
- {'user': request.user,
- }
- )
-
-def app_results_byname(request, appName, searchType):
- print ("hello")
- print (appName)
- print (searchType)
- return render(request, 'user_profile.html',
- {'user': request.user,
- }
- )
\ No newline at end of file
+# )
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acea1d31/tap/urls.py
----------------------------------------------------------------------
diff --git a/tap/urls.py b/tap/urls.py
index eee23c2..d600cf1 100644
--- a/tap/urls.py
+++ b/tap/urls.py
@@ -45,4 +45,4 @@ urlpatterns = [
##below are test views
url(r'^view2/', TemplateView.as_view(template_name='view2.html')),
url(r'^view1/', TemplateView.as_view(template_name='view1.html')),
-] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+] #+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/acea1d31/tasks/django.js
----------------------------------------------------------------------
diff --git a/tasks/django.js b/tasks/django.js
index d780024..9ef2523 100644
--- a/tasks/django.js
+++ b/tasks/django.js
@@ -3,7 +3,7 @@ import { exec } from 'child_process';
gulp.task('django', () => {
// For Vagrant
- var django = exec('cd /vagrant; /vagrant/manage.py runserver 0.0.0.0:8000');
+ var django = exec('cd /vagrant; python /vagrant/manage.py runserver 0.0.0.0:8000');
// For Not-Vagrant
// var django = exec('manage.py runserver 0.0.0.0:8000');
[43/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/behaviors/form.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/behaviors/form.js b/semantic/src/definitions/behaviors/form.js
new file mode 100644
index 0000000..d40d168
--- /dev/null
+++ b/semantic/src/definitions/behaviors/form.js
@@ -0,0 +1,1552 @@
+/*!
+ * # Semantic UI - Form Validation
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.form = function(parameters) {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ legacyParameters = arguments[1],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+ $allModules
+ .each(function() {
+ var
+ $module = $(this),
+ element = this,
+
+ formErrors = [],
+ keyHeldDown = false,
+
+ // set at run-time
+ $field,
+ $group,
+ $message,
+ $prompt,
+ $submit,
+ $clear,
+ $reset,
+
+ settings,
+ validation,
+
+ metadata,
+ selector,
+ className,
+ error,
+
+ namespace,
+ moduleNamespace,
+ eventNamespace,
+
+ instance,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+
+ // settings grabbed at run time
+ module.get.settings();
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.instantiate();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.verbose('Initializing form validation', $module, settings);
+ module.bindEvents();
+ module.set.defaults();
+ module.instantiate();
+ }
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module', instance);
+ module.removeEvents();
+ $module
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ refresh: function() {
+ module.verbose('Refreshing selector cache');
+ $field = $module.find(selector.field);
+ $group = $module.find(selector.group);
+ $message = $module.find(selector.message);
+ $prompt = $module.find(selector.prompt);
+
+ $submit = $module.find(selector.submit);
+ $clear = $module.find(selector.clear);
+ $reset = $module.find(selector.reset);
+ },
+
+ submit: function() {
+ module.verbose('Submitting form', $module);
+ $module
+ .submit()
+ ;
+ },
+
+ attachEvents: function(selector, action) {
+ action = action || 'submit';
+ $(selector)
+ .on('click' + eventNamespace, function(event) {
+ module[action]();
+ event.preventDefault();
+ })
+ ;
+ },
+
+ bindEvents: function() {
+ module.verbose('Attaching form events');
+ $module
+ .on('submit' + eventNamespace, module.validate.form)
+ .on('blur' + eventNamespace, selector.field, module.event.field.blur)
+ .on('click' + eventNamespace, selector.submit, module.submit)
+ .on('click' + eventNamespace, selector.reset, module.reset)
+ .on('click' + eventNamespace, selector.clear, module.clear)
+ ;
+ if(settings.keyboardShortcuts) {
+ $module
+ .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)
+ ;
+ }
+ $field
+ .each(function() {
+ var
+ $input = $(this),
+ type = $input.prop('type'),
+ inputEvent = module.get.changeEvent(type, $input)
+ ;
+ $(this)
+ .on(inputEvent + eventNamespace, module.event.field.change)
+ ;
+ })
+ ;
+ },
+
+ clear: function() {
+ $field
+ .each(function () {
+ var
+ $field = $(this),
+ $element = $field.parent(),
+ $fieldGroup = $field.closest($group),
+ $prompt = $fieldGroup.find(selector.prompt),
+ defaultValue = $field.data(metadata.defaultValue) || '',
+ isCheckbox = $element.is(selector.uiCheckbox),
+ isDropdown = $element.is(selector.uiDropdown),
+ isErrored = $fieldGroup.hasClass(className.error)
+ ;
+ if(isErrored) {
+ module.verbose('Resetting error on field', $fieldGroup);
+ $fieldGroup.removeClass(className.error);
+ $prompt.remove();
+ }
+ if(isDropdown) {
+ module.verbose('Resetting dropdown value', $element, defaultValue);
+ $element.dropdown('clear');
+ }
+ else if(isCheckbox) {
+ $field.prop('checked', false);
+ }
+ else {
+ module.verbose('Resetting field value', $field, defaultValue);
+ $field.val('');
+ }
+ })
+ ;
+ },
+
+ reset: function() {
+ $field
+ .each(function () {
+ var
+ $field = $(this),
+ $element = $field.parent(),
+ $fieldGroup = $field.closest($group),
+ $prompt = $fieldGroup.find(selector.prompt),
+ defaultValue = $field.data(metadata.defaultValue),
+ isCheckbox = $element.is(selector.uiCheckbox),
+ isDropdown = $element.is(selector.uiDropdown),
+ isErrored = $fieldGroup.hasClass(className.error)
+ ;
+ if(defaultValue === undefined) {
+ return;
+ }
+ if(isErrored) {
+ module.verbose('Resetting error on field', $fieldGroup);
+ $fieldGroup.removeClass(className.error);
+ $prompt.remove();
+ }
+ if(isDropdown) {
+ module.verbose('Resetting dropdown value', $element, defaultValue);
+ $element.dropdown('restore defaults');
+ }
+ else if(isCheckbox) {
+ module.verbose('Resetting checkbox value', $element, defaultValue);
+ $field.prop('checked', defaultValue);
+ }
+ else {
+ module.verbose('Resetting field value', $field, defaultValue);
+ $field.val(defaultValue);
+ }
+ })
+ ;
+ },
+
+ is: {
+ bracketedRule: function(rule) {
+ return (rule.type && rule.type.match(settings.regExp.bracket));
+ },
+ empty: function($field) {
+ if(!$field || $field.length === 0) {
+ return true;
+ }
+ else if($field.is('input[type="checkbox"]')) {
+ return !$field.is(':checked');
+ }
+ else {
+ return module.is.blank($field);
+ }
+ },
+ blank: function($field) {
+ return $.trim($field.val()) === '';
+ },
+ valid: function() {
+ var
+ allValid = true
+ ;
+ module.verbose('Checking if form is valid');
+ $.each(validation, function(fieldName, field) {
+ if( !( module.validate.field(field, fieldName) ) ) {
+ allValid = false;
+ }
+ });
+ return allValid;
+ }
+ },
+
+ removeEvents: function() {
+ $module
+ .off(eventNamespace)
+ ;
+ $field
+ .off(eventNamespace)
+ ;
+ $submit
+ .off(eventNamespace)
+ ;
+ $field
+ .off(eventNamespace)
+ ;
+ },
+
+ event: {
+ field: {
+ keydown: function(event) {
+ var
+ $field = $(this),
+ key = event.which,
+ isInput = $field.is(selector.input),
+ isCheckbox = $field.is(selector.checkbox),
+ isInDropdown = ($field.closest(selector.uiDropdown).length > 0),
+ keyCode = {
+ enter : 13,
+ escape : 27
+ }
+ ;
+ if( key == keyCode.escape) {
+ module.verbose('Escape key pressed blurring field');
+ $field
+ .blur()
+ ;
+ }
+ if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {
+ if(!keyHeldDown) {
+ $field
+ .one('keyup' + eventNamespace, module.event.field.keyup)
+ ;
+ module.submit();
+ module.debug('Enter pressed on input submitting form');
+ }
+ keyHeldDown = true;
+ }
+ },
+ keyup: function() {
+ keyHeldDown = false;
+ },
+ blur: function(event) {
+ var
+ $field = $(this),
+ $fieldGroup = $field.closest($group),
+ validationRules = module.get.validation($field)
+ ;
+ if( $fieldGroup.hasClass(className.error) ) {
+ module.debug('Revalidating field', $field, validationRules);
+ if(validationRules) {
+ module.validate.field( validationRules );
+ }
+ }
+ else if(settings.on == 'blur' || settings.on == 'change') {
+ if(validationRules) {
+ module.validate.field( validationRules );
+ }
+ }
+ },
+ change: function(event) {
+ var
+ $field = $(this),
+ $fieldGroup = $field.closest($group),
+ validationRules = module.get.validation($field)
+ ;
+ if(settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) ) {
+ clearTimeout(module.timer);
+ module.timer = setTimeout(function() {
+ module.debug('Revalidating field', $field, module.get.validation($field));
+ module.validate.field( validationRules );
+ }, settings.delay);
+ }
+ }
+ }
+
+ },
+
+ get: {
+ ancillaryValue: function(rule) {
+ if(!rule.type || !module.is.bracketedRule(rule)) {
+ return false;
+ }
+ return rule.type.match(settings.regExp.bracket)[1] + '';
+ },
+ ruleName: function(rule) {
+ if( module.is.bracketedRule(rule) ) {
+ return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');
+ }
+ return rule.type;
+ },
+ changeEvent: function(type, $input) {
+ if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {
+ return 'change';
+ }
+ else {
+ return module.get.inputEvent();
+ }
+ },
+ inputEvent: function() {
+ return (document.createElement('input').oninput !== undefined)
+ ? 'input'
+ : (document.createElement('input').onpropertychange !== undefined)
+ ? 'propertychange'
+ : 'keyup'
+ ;
+ },
+ prompt: function(rule, field) {
+ var
+ ruleName = module.get.ruleName(rule),
+ ancillary = module.get.ancillaryValue(rule),
+ prompt = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,
+ requiresValue = (prompt.search('{value}') !== -1),
+ requiresName = (prompt.search('{name}') !== -1),
+ $label,
+ $field,
+ name
+ ;
+ if(requiresName || requiresValue) {
+ $field = module.get.field(field.identifier);
+ }
+ if(requiresValue) {
+ prompt = prompt.replace('{value}', $field.val());
+ }
+ if(requiresName) {
+ $label = $field.closest(selector.group).find('label').eq(0);
+ name = ($label.length == 1)
+ ? $label.text()
+ : $field.prop('placeholder') || settings.text.unspecifiedField
+ ;
+ prompt = prompt.replace('{name}', name);
+ }
+ prompt = prompt.replace('{identifier}', field.identifier);
+ prompt = prompt.replace('{ruleValue}', ancillary);
+ if(!rule.prompt) {
+ module.verbose('Using default validation prompt for type', prompt, ruleName);
+ }
+ return prompt;
+ },
+ settings: function() {
+ if($.isPlainObject(parameters)) {
+ var
+ keys = Object.keys(parameters),
+ isLegacySettings = (keys.length > 0)
+ ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)
+ : false,
+ ruleKeys
+ ;
+ if(isLegacySettings) {
+ // 1.x (ducktyped)
+ settings = $.extend(true, {}, $.fn.form.settings, legacyParameters);
+ validation = $.extend({}, $.fn.form.settings.defaults, parameters);
+ module.error(settings.error.oldSyntax, element);
+ module.verbose('Extending settings from legacy parameters', validation, settings);
+ }
+ else {
+ // 2.x
+ if(parameters.fields) {
+ ruleKeys = Object.keys(parameters.fields);
+ if( typeof parameters.fields[ruleKeys[0]] == 'string' || $.isArray(parameters.fields[ruleKeys[0]]) ) {
+ $.each(parameters.fields, function(name, rules) {
+ if(typeof rules == 'string') {
+ rules = [rules];
+ }
+ parameters.fields[name] = {
+ rules: []
+ };
+ $.each(rules, function(index, rule) {
+ parameters.fields[name].rules.push({ type: rule });
+ });
+ });
+ }
+ }
+
+ settings = $.extend(true, {}, $.fn.form.settings, parameters);
+ validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);
+ module.verbose('Extending settings', validation, settings);
+ }
+ }
+ else {
+ settings = $.fn.form.settings;
+ validation = $.fn.form.settings.defaults;
+ module.verbose('Using default form validation', validation, settings);
+ }
+
+ // shorthand
+ namespace = settings.namespace;
+ metadata = settings.metadata;
+ selector = settings.selector;
+ className = settings.className;
+ error = settings.error;
+ moduleNamespace = 'module-' + namespace;
+ eventNamespace = '.' + namespace;
+
+ // grab instance
+ instance = $module.data(moduleNamespace);
+
+ // refresh selector cache
+ module.refresh();
+ },
+ field: function(identifier) {
+ module.verbose('Finding field with identifier', identifier);
+ if( $field.filter('#' + identifier).length > 0 ) {
+ return $field.filter('#' + identifier);
+ }
+ else if( $field.filter('[name="' + identifier +'"]').length > 0 ) {
+ return $field.filter('[name="' + identifier +'"]');
+ }
+ else if( $field.filter('[name="' + identifier +'[]"]').length > 0 ) {
+ return $field.filter('[name="' + identifier +'[]"]');
+ }
+ else if( $field.filter('[data-' + metadata.validate + '="'+ identifier +'"]').length > 0 ) {
+ return $field.filter('[data-' + metadata.validate + '="'+ identifier +'"]');
+ }
+ return $('<input/>');
+ },
+ fields: function(fields) {
+ var
+ $fields = $()
+ ;
+ $.each(fields, function(index, name) {
+ $fields = $fields.add( module.get.field(name) );
+ });
+ return $fields;
+ },
+ validation: function($field) {
+ var
+ fieldValidation,
+ identifier
+ ;
+ if(!validation) {
+ return false;
+ }
+ $.each(validation, function(fieldName, field) {
+ identifier = field.identifier || fieldName;
+ if( module.get.field(identifier)[0] == $field[0] ) {
+ field.identifier = identifier;
+ fieldValidation = field;
+ }
+ });
+ return fieldValidation || false;
+ },
+ value: function (field) {
+ var
+ fields = [],
+ results
+ ;
+ fields.push(field);
+ results = module.get.values.call(element, fields);
+ return results[field];
+ },
+ values: function (fields) {
+ var
+ $fields = $.isArray(fields)
+ ? module.get.fields(fields)
+ : $field,
+ values = {}
+ ;
+ $fields.each(function(index, field) {
+ var
+ $field = $(field),
+ type = $field.prop('type'),
+ name = $field.prop('name'),
+ value = $field.val(),
+ isCheckbox = $field.is(selector.checkbox),
+ isRadio = $field.is(selector.radio),
+ isMultiple = (name.indexOf('[]') !== -1),
+ isChecked = (isCheckbox)
+ ? $field.is(':checked')
+ : false
+ ;
+ if(name) {
+ if(isMultiple) {
+ name = name.replace('[]', '');
+ if(!values[name]) {
+ values[name] = [];
+ }
+ if(isCheckbox) {
+ if(isChecked) {
+ values[name].push(value || true);
+ }
+ else {
+ values[name].push(false);
+ }
+ }
+ else {
+ values[name].push(value);
+ }
+ }
+ else {
+ if(isRadio) {
+ if(isChecked) {
+ values[name] = value;
+ }
+ }
+ else if(isCheckbox) {
+ if(isChecked) {
+ values[name] = value || true;
+ }
+ else {
+ values[name] = false;
+ }
+ }
+ else {
+ values[name] = value;
+ }
+ }
+ }
+ });
+ return values;
+ }
+ },
+
+ has: {
+
+ field: function(identifier) {
+ module.verbose('Checking for existence of a field with identifier', identifier);
+ if(typeof identifier !== 'string') {
+ module.error(error.identifier, identifier);
+ }
+ if( $field.filter('#' + identifier).length > 0 ) {
+ return true;
+ }
+ else if( $field.filter('[name="' + identifier +'"]').length > 0 ) {
+ return true;
+ }
+ else if( $field.filter('[data-' + metadata.validate + '="'+ identifier +'"]').length > 0 ) {
+ return true;
+ }
+ return false;
+ }
+
+ },
+
+ add: {
+ prompt: function(identifier, errors) {
+ var
+ $field = module.get.field(identifier),
+ $fieldGroup = $field.closest($group),
+ $prompt = $fieldGroup.children(selector.prompt),
+ promptExists = ($prompt.length !== 0)
+ ;
+ errors = (typeof errors == 'string')
+ ? [errors]
+ : errors
+ ;
+ module.verbose('Adding field error state', identifier);
+ $fieldGroup
+ .addClass(className.error)
+ ;
+ if(settings.inline) {
+ if(!promptExists) {
+ $prompt = settings.templates.prompt(errors);
+ $prompt
+ .appendTo($fieldGroup)
+ ;
+ }
+ $prompt
+ .html(errors[0])
+ ;
+ if(!promptExists) {
+ if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
+ module.verbose('Displaying error with css transition', settings.transition);
+ $prompt.transition(settings.transition + ' in', settings.duration);
+ }
+ else {
+ module.verbose('Displaying error with fallback javascript animation');
+ $prompt
+ .fadeIn(settings.duration)
+ ;
+ }
+ }
+ else {
+ module.verbose('Inline errors are disabled, no inline error added', identifier);
+ }
+ }
+ },
+ errors: function(errors) {
+ module.debug('Adding form error messages', errors);
+ module.set.error();
+ $message
+ .html( settings.templates.error(errors) )
+ ;
+ }
+ },
+
+ remove: {
+ prompt: function(identifier) {
+ var
+ $field = module.get.field(identifier),
+ $fieldGroup = $field.closest($group),
+ $prompt = $fieldGroup.children(selector.prompt)
+ ;
+ $fieldGroup
+ .removeClass(className.error)
+ ;
+ if(settings.inline && $prompt.is(':visible')) {
+ module.verbose('Removing prompt for field', identifier);
+ if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
+ $prompt.transition(settings.transition + ' out', settings.duration, function() {
+ $prompt.remove();
+ });
+ }
+ else {
+ $prompt
+ .fadeOut(settings.duration, function(){
+ $prompt.remove();
+ })
+ ;
+ }
+ }
+ }
+ },
+
+ set: {
+ success: function() {
+ $module
+ .removeClass(className.error)
+ .addClass(className.success)
+ ;
+ },
+ defaults: function () {
+ $field
+ .each(function () {
+ var
+ $field = $(this),
+ isCheckbox = ($field.filter(selector.checkbox).length > 0),
+ value = (isCheckbox)
+ ? $field.is(':checked')
+ : $field.val()
+ ;
+ $field.data(metadata.defaultValue, value);
+ })
+ ;
+ },
+ error: function() {
+ $module
+ .removeClass(className.success)
+ .addClass(className.error)
+ ;
+ },
+ value: function (field, value) {
+ var
+ fields = {}
+ ;
+ fields[field] = value;
+ return module.set.values.call(element, fields);
+ },
+ values: function (fields) {
+ if($.isEmptyObject(fields)) {
+ return;
+ }
+ $.each(fields, function(key, value) {
+ var
+ $field = module.get.field(key),
+ $element = $field.parent(),
+ isMultiple = $.isArray(value),
+ isCheckbox = $element.is(selector.uiCheckbox),
+ isDropdown = $element.is(selector.uiDropdown),
+ isRadio = ($field.is(selector.radio) && isCheckbox),
+ fieldExists = ($field.length > 0),
+ $multipleField
+ ;
+ if(fieldExists) {
+ if(isMultiple && isCheckbox) {
+ module.verbose('Selecting multiple', value, $field);
+ $element.checkbox('uncheck');
+ $.each(value, function(index, value) {
+ $multipleField = $field.filter('[value="' + value + '"]');
+ $element = $multipleField.parent();
+ if($multipleField.length > 0) {
+ $element.checkbox('check');
+ }
+ });
+ }
+ else if(isRadio) {
+ module.verbose('Selecting radio value', value, $field);
+ $field.filter('[value="' + value + '"]')
+ .parent(selector.uiCheckbox)
+ .checkbox('check')
+ ;
+ }
+ else if(isCheckbox) {
+ module.verbose('Setting checkbox value', value, $element);
+ if(value === true) {
+ $element.checkbox('check');
+ }
+ else {
+ $element.checkbox('uncheck');
+ }
+ }
+ else if(isDropdown) {
+ module.verbose('Setting dropdown value', value, $element);
+ $element.dropdown('set selected', value);
+ }
+ else {
+ module.verbose('Setting field value', value, $field);
+ $field.val(value);
+ }
+ }
+ });
+ }
+ },
+
+ validate: {
+
+ form: function(event, ignoreCallbacks) {
+ var
+ values = module.get.values(),
+ apiRequest
+ ;
+
+ // input keydown event will fire submit repeatedly by browser default
+ if(keyHeldDown) {
+ return false;
+ }
+
+ // reset errors
+ formErrors = [];
+ if( module.is.valid() ) {
+ module.debug('Form has no validation errors, submitting');
+ module.set.success();
+ if(ignoreCallbacks !== true) {
+ return settings.onSuccess.call(element, event, values);
+ }
+ }
+ else {
+ module.debug('Form has errors');
+ module.set.error();
+ if(!settings.inline) {
+ module.add.errors(formErrors);
+ }
+ // prevent ajax submit
+ if($module.data('moduleApi') !== undefined) {
+ event.stopImmediatePropagation();
+ }
+ if(ignoreCallbacks !== true) {
+ return settings.onFailure.call(element, formErrors, values);
+ }
+ }
+ },
+
+ // takes a validation object and returns whether field passes validation
+ field: function(field, fieldName) {
+ var
+ identifier = field.identifier || fieldName,
+ $field = module.get.field(identifier),
+ $dependsField = (field.depends)
+ ? module.get.field(field.depends)
+ : false,
+ fieldValid = true,
+ fieldErrors = []
+ ;
+ if(!field.identifier) {
+ module.debug('Using field name as identifier', identifier);
+ field.identifier = identifier;
+ }
+ if($field.prop('disabled')) {
+ module.debug('Field is disabled. Skipping', identifier);
+ fieldValid = true;
+ }
+ else if(field.optional && module.is.blank($field)){
+ module.debug('Field is optional and blank. Skipping', identifier);
+ fieldValid = true;
+ }
+ else if(field.depends && module.is.empty($dependsField)) {
+ module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);
+ fieldValid = true;
+ }
+ else if(field.rules !== undefined) {
+ $.each(field.rules, function(index, rule) {
+ if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {
+ module.debug('Field is invalid', identifier, rule.type);
+ fieldErrors.push(module.get.prompt(rule, field));
+ fieldValid = false;
+ }
+ });
+ }
+ if(fieldValid) {
+ module.remove.prompt(identifier, fieldErrors);
+ settings.onValid.call($field);
+ }
+ else {
+ formErrors = formErrors.concat(fieldErrors);
+ module.add.prompt(identifier, fieldErrors);
+ settings.onInvalid.call($field, fieldErrors);
+ return false;
+ }
+ return true;
+ },
+
+ // takes validation rule and returns whether field passes rule
+ rule: function(field, rule) {
+ var
+ $field = module.get.field(field.identifier),
+ type = rule.type,
+ value = $field.val(),
+ isValid = true,
+ ancillary = module.get.ancillaryValue(rule),
+ ruleName = module.get.ruleName(rule),
+ ruleFunction = settings.rules[ruleName]
+ ;
+ if( !$.isFunction(ruleFunction) ) {
+ module.error(error.noRule, ruleName);
+ return;
+ }
+ // cast to string avoiding encoding special values
+ value = (value === undefined || value === '' || value === null)
+ ? ''
+ : $.trim(value + '')
+ ;
+ return ruleFunction.call($field, value, ancillary);
+ }
+ },
+
+ setting: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ settings[name] = value;
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+ module.initialize();
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.form.settings = {
+
+ name : 'Form',
+ namespace : 'form',
+
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ fields : false,
+
+ keyboardShortcuts : true,
+ on : 'submit',
+ inline : false,
+
+ delay : 200,
+ revalidate : true,
+
+ transition : 'scale',
+ duration : 200,
+
+ onValid : function() {},
+ onInvalid : function() {},
+ onSuccess : function() { return true; },
+ onFailure : function() { return false; },
+
+ metadata : {
+ defaultValue : 'default',
+ validate : 'validate'
+ },
+
+ regExp: {
+ bracket : /\[(.*)\]/i,
+ decimal : /^\d*(\.)\d+/,
+ email : /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
+ escape : /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,
+ flags : /^\/(.*)\/(.*)?/,
+ integer : /^\-?\d+$/,
+ number : /^\-?\d*(\.\d+)?$/,
+ url : /(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/i
+ },
+
+ text: {
+ unspecifiedRule : 'Please enter a valid value',
+ unspecifiedField : 'This field'
+ },
+
+ prompt: {
+ empty : '{name} must have a value',
+ checked : '{name} must be checked',
+ email : '{name} must be a valid e-mail',
+ url : '{name} must be a valid url',
+ regExp : '{name} is not formatted correctly',
+ integer : '{name} must be an integer',
+ decimal : '{name} must be a decimal number',
+ number : '{name} must be set to a number',
+ is : '{name} must be "{ruleValue}"',
+ isExactly : '{name} must be exactly "{ruleValue}"',
+ not : '{name} cannot be set to "{ruleValue}"',
+ notExactly : '{name} cannot be set to exactly "{ruleValue}"',
+ contain : '{name} cannot contain "{ruleValue}"',
+ containExactly : '{name} cannot contain exactly "{ruleValue}"',
+ doesntContain : '{name} must contain "{ruleValue}"',
+ doesntContainExactly : '{name} must contain exactly "{ruleValue}"',
+ minLength : '{name} must be at least {ruleValue} characters',
+ length : '{name} must be at least {ruleValue} characters',
+ exactLength : '{name} must be exactly {ruleValue} characters',
+ maxLength : '{name} cannot be longer than {ruleValue} characters',
+ match : '{name} must match {ruleValue} field',
+ different : '{name} must have a different value than {ruleValue} field',
+ creditCard : '{name} must be a valid credit card number',
+ minCount : '{name} must have at least {ruleValue} choices',
+ exactCount : '{name} must have exactly {ruleValue} choices',
+ maxCount : '{name} must have {ruleValue} or less choices'
+ },
+
+ selector : {
+ checkbox : 'input[type="checkbox"], input[type="radio"]',
+ clear : '.clear',
+ field : 'input, textarea, select',
+ group : '.field',
+ input : 'input',
+ message : '.error.message',
+ prompt : '.prompt.label',
+ radio : 'input[type="radio"]',
+ reset : '.reset:not([type="reset"])',
+ submit : '.submit:not([type="submit"])',
+ uiCheckbox : '.ui.checkbox',
+ uiDropdown : '.ui.dropdown'
+ },
+
+ className : {
+ error : 'error',
+ label : 'ui prompt label',
+ pressed : 'down',
+ success : 'success'
+ },
+
+ error: {
+ identifier : 'You must specify a string identifier for each field',
+ method : 'The method you called is not defined.',
+ noRule : 'There is no rule matching the one you specified',
+ oldSyntax : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'
+ },
+
+ templates: {
+
+ // template that produces error message
+ error: function(errors) {
+ var
+ html = '<ul class="list">'
+ ;
+ $.each(errors, function(index, value) {
+ html += '<li>' + value + '</li>';
+ });
+ html += '</ul>';
+ return $(html);
+ },
+
+ // template that produces label
+ prompt: function(errors) {
+ return $('<div/>')
+ .addClass('ui basic red pointing prompt label')
+ .html(errors[0])
+ ;
+ }
+ },
+
+ rules: {
+
+ // is not empty or blank string
+ empty: function(value) {
+ return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);
+ },
+
+ // checkbox checked
+ checked: function() {
+ return ($(this).filter(':checked').length > 0);
+ },
+
+ // is most likely an email
+ email: function(value){
+ return $.fn.form.settings.regExp.email.test(value);
+ },
+
+ // value is most likely url
+ url: function(value) {
+ return $.fn.form.settings.regExp.url.test(value);
+ },
+
+ // matches specified regExp
+ regExp: function(value, regExp) {
+ var
+ regExpParts = regExp.match($.fn.form.settings.regExp.flags),
+ flags
+ ;
+ // regular expression specified as /baz/gi (flags)
+ if(regExpParts) {
+ regExp = (regExpParts.length >= 2)
+ ? regExpParts[1]
+ : regExp
+ ;
+ flags = (regExpParts.length >= 3)
+ ? regExpParts[2]
+ : ''
+ ;
+ }
+ return value.match( new RegExp(regExp, flags) );
+ },
+
+ // is valid integer or matches range
+ integer: function(value, range) {
+ var
+ intRegExp = $.fn.form.settings.regExp.integer,
+ min,
+ max,
+ parts
+ ;
+ if( !range || ['', '..'].indexOf(range) !== -1) {
+ // do nothing
+ }
+ else if(range.indexOf('..') == -1) {
+ if(intRegExp.test(range)) {
+ min = max = range - 0;
+ }
+ }
+ else {
+ parts = range.split('..', 2);
+ if(intRegExp.test(parts[0])) {
+ min = parts[0] - 0;
+ }
+ if(intRegExp.test(parts[1])) {
+ max = parts[1] - 0;
+ }
+ }
+ return (
+ intRegExp.test(value) &&
+ (min === undefined || value >= min) &&
+ (max === undefined || value <= max)
+ );
+ },
+
+ // is valid number (with decimal)
+ decimal: function(value) {
+ return $.fn.form.settings.regExp.decimal.test(value);
+ },
+
+ // is valid number
+ number: function(value) {
+ return $.fn.form.settings.regExp.number.test(value);
+ },
+
+ // is value (case insensitive)
+ is: function(value, text) {
+ text = (typeof text == 'string')
+ ? text.toLowerCase()
+ : text
+ ;
+ value = (typeof value == 'string')
+ ? value.toLowerCase()
+ : value
+ ;
+ return (value == text);
+ },
+
+ // is value
+ isExactly: function(value, text) {
+ return (value == text);
+ },
+
+ // value is not another value (case insensitive)
+ not: function(value, notValue) {
+ value = (typeof value == 'string')
+ ? value.toLowerCase()
+ : value
+ ;
+ notValue = (typeof notValue == 'string')
+ ? notValue.toLowerCase()
+ : notValue
+ ;
+ return (value != notValue);
+ },
+
+ // value is not another value (case sensitive)
+ notExactly: function(value, notValue) {
+ return (value != notValue);
+ },
+
+ // value contains text (insensitive)
+ contains: function(value, text) {
+ // escape regex characters
+ text = text.replace($.fn.form.settings.regExp.escape, "\\$&");
+ return (value.search( new RegExp(text, 'i') ) !== -1);
+ },
+
+ // value contains text (case sensitive)
+ containsExactly: function(value, text) {
+ // escape regex characters
+ text = text.replace($.fn.form.settings.regExp.escape, "\\$&");
+ return (value.search( new RegExp(text) ) !== -1);
+ },
+
+ // value contains text (insensitive)
+ doesntContain: function(value, text) {
+ // escape regex characters
+ text = text.replace($.fn.form.settings.regExp.escape, "\\$&");
+ return (value.search( new RegExp(text, 'i') ) === -1);
+ },
+
+ // value contains text (case sensitive)
+ doesntContainExactly: function(value, text) {
+ // escape regex characters
+ text = text.replace($.fn.form.settings.regExp.escape, "\\$&");
+ return (value.search( new RegExp(text) ) === -1);
+ },
+
+ // is at least string length
+ minLength: function(value, requiredLength) {
+ return (value !== undefined)
+ ? (value.length >= requiredLength)
+ : false
+ ;
+ },
+
+ // see rls notes for 2.0.6 (this is a duplicate of minLength)
+ length: function(value, requiredLength) {
+ return (value !== undefined)
+ ? (value.length >= requiredLength)
+ : false
+ ;
+ },
+
+ // is exactly length
+ exactLength: function(value, requiredLength) {
+ return (value !== undefined)
+ ? (value.length == requiredLength)
+ : false
+ ;
+ },
+
+ // is less than length
+ maxLength: function(value, maxLength) {
+ return (value !== undefined)
+ ? (value.length <= maxLength)
+ : false
+ ;
+ },
+
+ // matches another field
+ match: function(value, identifier) {
+ var
+ $form = $(this),
+ matchingValue
+ ;
+ if( $('[data-validate="'+ identifier +'"]').length > 0 ) {
+ matchingValue = $('[data-validate="'+ identifier +'"]').val();
+ }
+ else if($('#' + identifier).length > 0) {
+ matchingValue = $('#' + identifier).val();
+ }
+ else if($('[name="' + identifier +'"]').length > 0) {
+ matchingValue = $('[name="' + identifier + '"]').val();
+ }
+ else if( $('[name="' + identifier +'[]"]').length > 0 ) {
+ matchingValue = $('[name="' + identifier +'[]"]');
+ }
+ return (matchingValue !== undefined)
+ ? ( value.toString() == matchingValue.toString() )
+ : false
+ ;
+ },
+
+ // different than another field
+ different: function(value, identifier) {
+ // use either id or name of field
+ var
+ $form = $(this),
+ matchingValue
+ ;
+ if( $('[data-validate="'+ identifier +'"]').length > 0 ) {
+ matchingValue = $('[data-validate="'+ identifier +'"]').val();
+ }
+ else if($('#' + identifier).length > 0) {
+ matchingValue = $('#' + identifier).val();
+ }
+ else if($('[name="' + identifier +'"]').length > 0) {
+ matchingValue = $('[name="' + identifier + '"]').val();
+ }
+ else if( $('[name="' + identifier +'[]"]').length > 0 ) {
+ matchingValue = $('[name="' + identifier +'[]"]');
+ }
+ return (matchingValue !== undefined)
+ ? ( value.toString() !== matchingValue.toString() )
+ : false
+ ;
+ },
+
+ creditCard: function(cardNumber, cardTypes) {
+ var
+ cards = {
+ visa: {
+ pattern : /^4/,
+ length : [16]
+ },
+ amex: {
+ pattern : /^3[47]/,
+ length : [15]
+ },
+ mastercard: {
+ pattern : /^5[1-5]/,
+ length : [16]
+ },
+ discover: {
+ pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,
+ length : [16]
+ },
+ unionPay: {
+ pattern : /^(62|88)/,
+ length : [16, 17, 18, 19]
+ },
+ jcb: {
+ pattern : /^35(2[89]|[3-8][0-9])/,
+ length : [16]
+ },
+ maestro: {
+ pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,
+ length : [12, 13, 14, 15, 16, 17, 18, 19]
+ },
+ dinersClub: {
+ pattern : /^(30[0-5]|^36)/,
+ length : [14]
+ },
+ laser: {
+ pattern : /^(6304|670[69]|6771)/,
+ length : [16, 17, 18, 19]
+ },
+ visaElectron: {
+ pattern : /^(4026|417500|4508|4844|491(3|7))/,
+ length : [16]
+ }
+ },
+ valid = {},
+ validCard = false,
+ requiredTypes = (typeof cardTypes == 'string')
+ ? cardTypes.split(',')
+ : false,
+ unionPay,
+ validation
+ ;
+
+ if(typeof cardNumber !== 'string' || cardNumber.length === 0) {
+ return;
+ }
+
+ // verify card types
+ if(requiredTypes) {
+ $.each(requiredTypes, function(index, type){
+ // verify each card type
+ validation = cards[type];
+ if(validation) {
+ valid = {
+ length : ($.inArray(cardNumber.length, validation.length) !== -1),
+ pattern : (cardNumber.search(validation.pattern) !== -1)
+ };
+ if(valid.length && valid.pattern) {
+ validCard = true;
+ }
+ }
+ });
+
+ if(!validCard) {
+ return false;
+ }
+ }
+
+ // skip luhn for UnionPay
+ unionPay = {
+ number : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),
+ pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)
+ };
+ if(unionPay.number && unionPay.pattern) {
+ return true;
+ }
+
+ // verify luhn, adapted from <https://gist.github.com/2134376>
+ var
+ length = cardNumber.length,
+ multiple = 0,
+ producedValue = [
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
+ ],
+ sum = 0
+ ;
+ while (length--) {
+ sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];
+ multiple ^= 1;
+ }
+ return (sum % 10 === 0 && sum > 0);
+ },
+
+ minCount: function(value, minCount) {
+ if(minCount == 0) {
+ return true;
+ }
+ if(minCount == 1) {
+ return (value !== '');
+ }
+ return (value.split(',').length >= minCount);
+ },
+
+ exactCount: function(value, exactCount) {
+ if(exactCount == 0) {
+ return (value === '');
+ }
+ if(exactCount == 1) {
+ return (value !== '' && value.search(',') === -1);
+ }
+ return (value.split(',').length == exactCount);
+ },
+
+ maxCount: function(value, maxCount) {
+ if(maxCount == 0) {
+ return false;
+ }
+ if(maxCount == 1) {
+ return (value.search(',') === -1);
+ }
+ return (value.split(',').length <= maxCount);
+ }
+ }
+
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/behaviors/state.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/behaviors/state.js b/semantic/src/definitions/behaviors/state.js
new file mode 100644
index 0000000..83f9ae7
--- /dev/null
+++ b/semantic/src/definitions/behaviors/state.js
@@ -0,0 +1,708 @@
+/*!
+ * # Semantic UI - State
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.state = function(parameters) {
+ var
+ $allModules = $(this),
+
+ moduleSelector = $allModules.selector || '',
+
+ hasTouch = ('ontouchstart' in document.documentElement),
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ returnedValue
+ ;
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.state.settings, parameters)
+ : $.extend({}, $.fn.state.settings),
+
+ error = settings.error,
+ metadata = settings.metadata,
+ className = settings.className,
+ namespace = settings.namespace,
+ states = settings.states,
+ text = settings.text,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = namespace + '-module',
+
+ $module = $(this),
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ module
+ ;
+ module = {
+
+ initialize: function() {
+ module.verbose('Initializing module');
+
+ // allow module to guess desired state based on element
+ if(settings.automatic) {
+ module.add.defaults();
+ }
+
+ // bind events with delegated events
+ if(settings.context && moduleSelector !== '') {
+ $(settings.context)
+ .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)
+ .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)
+ .on(moduleSelector, 'click' + eventNamespace, module.toggle.state)
+ ;
+ }
+ else {
+ $module
+ .on('mouseenter' + eventNamespace, module.change.text)
+ .on('mouseleave' + eventNamespace, module.reset.text)
+ .on('click' + eventNamespace, module.toggle.state)
+ ;
+ }
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module', instance);
+ $module
+ .off(eventNamespace)
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ refresh: function() {
+ module.verbose('Refreshing selector cache');
+ $module = $(element);
+ },
+
+ add: {
+ defaults: function() {
+ var
+ userStates = parameters && $.isPlainObject(parameters.states)
+ ? parameters.states
+ : {}
+ ;
+ $.each(settings.defaults, function(type, typeStates) {
+ if( module.is[type] !== undefined && module.is[type]() ) {
+ module.verbose('Adding default states', type, element);
+ $.extend(settings.states, typeStates, userStates);
+ }
+ });
+ }
+ },
+
+ is: {
+
+ active: function() {
+ return $module.hasClass(className.active);
+ },
+ loading: function() {
+ return $module.hasClass(className.loading);
+ },
+ inactive: function() {
+ return !( $module.hasClass(className.active) );
+ },
+ state: function(state) {
+ if(className[state] === undefined) {
+ return false;
+ }
+ return $module.hasClass( className[state] );
+ },
+
+ enabled: function() {
+ return !( $module.is(settings.filter.active) );
+ },
+ disabled: function() {
+ return ( $module.is(settings.filter.active) );
+ },
+ textEnabled: function() {
+ return !( $module.is(settings.filter.text) );
+ },
+
+ // definitions for automatic type detection
+ button: function() {
+ return $module.is('.button:not(a, .submit)');
+ },
+ input: function() {
+ return $module.is('input');
+ },
+ progress: function() {
+ return $module.is('.ui.progress');
+ }
+ },
+
+ allow: function(state) {
+ module.debug('Now allowing state', state);
+ states[state] = true;
+ },
+ disallow: function(state) {
+ module.debug('No longer allowing', state);
+ states[state] = false;
+ },
+
+ allows: function(state) {
+ return states[state] || false;
+ },
+
+ enable: function() {
+ $module.removeClass(className.disabled);
+ },
+
+ disable: function() {
+ $module.addClass(className.disabled);
+ },
+
+ setState: function(state) {
+ if(module.allows(state)) {
+ $module.addClass( className[state] );
+ }
+ },
+
+ removeState: function(state) {
+ if(module.allows(state)) {
+ $module.removeClass( className[state] );
+ }
+ },
+
+ toggle: {
+ state: function() {
+ var
+ apiRequest,
+ requestCancelled
+ ;
+ if( module.allows('active') && module.is.enabled() ) {
+ module.refresh();
+ if($.fn.api !== undefined) {
+ apiRequest = $module.api('get request');
+ requestCancelled = $module.api('was cancelled');
+ if( requestCancelled ) {
+ module.debug('API Request cancelled by beforesend');
+ settings.activateTest = function(){ return false; };
+ settings.deactivateTest = function(){ return false; };
+ }
+ else if(apiRequest) {
+ module.listenTo(apiRequest);
+ return;
+ }
+ }
+ module.change.state();
+ }
+ }
+ },
+
+ listenTo: function(apiRequest) {
+ module.debug('API request detected, waiting for state signal', apiRequest);
+ if(apiRequest) {
+ if(text.loading) {
+ module.update.text(text.loading);
+ }
+ $.when(apiRequest)
+ .then(function() {
+ if(apiRequest.state() == 'resolved') {
+ module.debug('API request succeeded');
+ settings.activateTest = function(){ return true; };
+ settings.deactivateTest = function(){ return true; };
+ }
+ else {
+ module.debug('API request failed');
+ settings.activateTest = function(){ return false; };
+ settings.deactivateTest = function(){ return false; };
+ }
+ module.change.state();
+ })
+ ;
+ }
+ },
+
+ // checks whether active/inactive state can be given
+ change: {
+
+ state: function() {
+ module.debug('Determining state change direction');
+ // inactive to active change
+ if( module.is.inactive() ) {
+ module.activate();
+ }
+ else {
+ module.deactivate();
+ }
+ if(settings.sync) {
+ module.sync();
+ }
+ settings.onChange.call(element);
+ },
+
+ text: function() {
+ if( module.is.textEnabled() ) {
+ if(module.is.disabled() ) {
+ module.verbose('Changing text to disabled text', text.hover);
+ module.update.text(text.disabled);
+ }
+ else if( module.is.active() ) {
+ if(text.hover) {
+ module.verbose('Changing text to hover text', text.hover);
+ module.update.text(text.hover);
+ }
+ else if(text.deactivate) {
+ module.verbose('Changing text to deactivating text', text.deactivate);
+ module.update.text(text.deactivate);
+ }
+ }
+ else {
+ if(text.hover) {
+ module.verbose('Changing text to hover text', text.hover);
+ module.update.text(text.hover);
+ }
+ else if(text.activate){
+ module.verbose('Changing text to activating text', text.activate);
+ module.update.text(text.activate);
+ }
+ }
+ }
+ }
+
+ },
+
+ activate: function() {
+ if( settings.activateTest.call(element) ) {
+ module.debug('Setting state to active');
+ $module
+ .addClass(className.active)
+ ;
+ module.update.text(text.active);
+ settings.onActivate.call(element);
+ }
+ },
+
+ deactivate: function() {
+ if( settings.deactivateTest.call(element) ) {
+ module.debug('Setting state to inactive');
+ $module
+ .removeClass(className.active)
+ ;
+ module.update.text(text.inactive);
+ settings.onDeactivate.call(element);
+ }
+ },
+
+ sync: function() {
+ module.verbose('Syncing other buttons to current state');
+ if( module.is.active() ) {
+ $allModules
+ .not($module)
+ .state('activate');
+ }
+ else {
+ $allModules
+ .not($module)
+ .state('deactivate')
+ ;
+ }
+ },
+
+ get: {
+ text: function() {
+ return (settings.selector.text)
+ ? $module.find(settings.selector.text).text()
+ : $module.html()
+ ;
+ },
+ textFor: function(state) {
+ return text[state] || false;
+ }
+ },
+
+ flash: {
+ text: function(text, duration, callback) {
+ var
+ previousText = module.get.text()
+ ;
+ module.debug('Flashing text message', text, duration);
+ text = text || settings.text.flash;
+ duration = duration || settings.flashDuration;
+ callback = callback || function() {};
+ module.update.text(text);
+ setTimeout(function(){
+ module.update.text(previousText);
+ callback.call(element);
+ }, duration);
+ }
+ },
+
+ reset: {
+ // on mouseout sets text to previous value
+ text: function() {
+ var
+ activeText = text.active || $module.data(metadata.storedText),
+ inactiveText = text.inactive || $module.data(metadata.storedText)
+ ;
+ if( module.is.textEnabled() ) {
+ if( module.is.active() && activeText) {
+ module.verbose('Resetting active text', activeText);
+ module.update.text(activeText);
+ }
+ else if(inactiveText) {
+ module.verbose('Resetting inactive text', activeText);
+ module.update.text(inactiveText);
+ }
+ }
+ }
+ },
+
+ update: {
+ text: function(text) {
+ var
+ currentText = module.get.text()
+ ;
+ if(text && text !== currentText) {
+ module.debug('Updating text', text);
+ if(settings.selector.text) {
+ $module
+ .data(metadata.storedText, text)
+ .find(settings.selector.text)
+ .text(text)
+ ;
+ }
+ else {
+ $module
+ .data(metadata.storedText, text)
+ .html(text)
+ ;
+ }
+ }
+ else {
+ module.debug('Text is already set, ignoring update', text);
+ }
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.state.settings = {
+
+ // module info
+ name : 'State',
+
+ // debug output
+ debug : false,
+
+ // verbose debug output
+ verbose : false,
+
+ // namespace for events
+ namespace : 'state',
+
+ // debug data includes performance
+ performance : true,
+
+ // callback occurs on state change
+ onActivate : function() {},
+ onDeactivate : function() {},
+ onChange : function() {},
+
+ // state test functions
+ activateTest : function() { return true; },
+ deactivateTest : function() { return true; },
+
+ // whether to automatically map default states
+ automatic : true,
+
+ // activate / deactivate changes all elements instantiated at same time
+ sync : false,
+
+ // default flash text duration, used for temporarily changing text of an element
+ flashDuration : 1000,
+
+ // selector filter
+ filter : {
+ text : '.loading, .disabled',
+ active : '.disabled'
+ },
+
+ context : false,
+
+ // error
+ error: {
+ beforeSend : 'The before send function has cancelled state change',
+ method : 'The method you called is not defined.'
+ },
+
+ // metadata
+ metadata: {
+ promise : 'promise',
+ storedText : 'stored-text'
+ },
+
+ // change class on state
+ className: {
+ active : 'active',
+ disabled : 'disabled',
+ error : 'error',
+ loading : 'loading',
+ success : 'success',
+ warning : 'warning'
+ },
+
+ selector: {
+ // selector for text node
+ text: false
+ },
+
+ defaults : {
+ input: {
+ disabled : true,
+ loading : true,
+ active : true
+ },
+ button: {
+ disabled : true,
+ loading : true,
+ active : true,
+ },
+ progress: {
+ active : true,
+ success : true,
+ warning : true,
+ error : true
+ }
+ },
+
+ states : {
+ active : true,
+ disabled : true,
+ error : true,
+ loading : true,
+ success : true,
+ warning : true
+ },
+
+ text : {
+ disabled : false,
+ flash : false,
+ hover : false,
+ active : false,
+ inactive : false,
+ activate : false,
+ deactivate : false
+ }
+
+};
+
+
+
+})( jQuery, window, document );
[31/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/popup.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/popup.less b/semantic/src/definitions/modules/popup.less
new file mode 100755
index 0000000..d5aa745
--- /dev/null
+++ b/semantic/src/definitions/modules/popup.less
@@ -0,0 +1,712 @@
+/*!
+ * # Semantic UI - Popup
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'popup';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Popup
+*******************************/
+
+.ui.popup {
+ display: none;
+ position: absolute;
+ top: 0px;
+ right: 0px;
+
+ /* Fixes content being squished when inline (moz only) */
+ min-width: min-content;
+ z-index: @zIndex;
+
+ border: @border;
+ line-height: @lineHeight;
+ max-width: @maxWidth;
+ background: @background;
+
+ padding: @verticalPadding @horizontalPadding;
+ font-weight: @fontWeight;
+ font-style: @fontStyle;
+ color: @color;
+
+ border-radius: @borderRadius;
+ box-shadow: @boxShadow;
+}
+.ui.popup > .header {
+ padding: 0em;
+
+ font-family: @headerFont;
+ font-size: @headerFontSize;
+ line-height: @headerLineHeight;
+ font-weight: bold;
+}
+.ui.popup > .header + .content {
+ padding-top: @headerDistance;
+}
+
+.ui.popup:before {
+ position: absolute;
+ content: '';
+ width: @arrowSize;
+ height: @arrowSize;
+
+ background: @arrowBackground;
+ transform: rotate(45deg);
+
+ z-index: @arrowZIndex;
+ box-shadow: @arrowBoxShadow;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Tooltip
+---------------*/
+
+/* Content */
+[data-tooltip] {
+ position: relative;
+}
+
+/* Arrow */
+[data-tooltip]:before {
+ pointer-events: none;
+ position: absolute;
+ content: '';
+ font-size: @medium;
+ width: @arrowSize;
+ height: @arrowSize;
+
+ background: @tooltipArrowBackground;
+ transform: rotate(45deg);
+
+ z-index: @arrowZIndex;
+ box-shadow: @tooltipArrowBoxShadow;
+}
+
+/* Popup */
+[data-tooltip]:after {
+ pointer-events: none;
+ content: attr(data-tooltip);
+ position: absolute;
+ text-transform: none;
+ text-align: left;
+ white-space: nowrap;
+
+ font-size: @tooltipFontSize;
+
+ border: @tooltipBorder;
+ line-height: @tooltipLineHeight;
+ max-width: @tooltipMaxWidth;
+ background: @tooltipBackground;
+
+ padding: @tooltipPadding;
+ font-weight: @tooltipFontWeight;
+ font-style: @tooltipFontStyle;
+ color: @tooltipColor;
+
+ border-radius: @tooltipBorderRadius;
+ box-shadow: @tooltipBoxShadow;
+ z-index: @tooltipZIndex;
+}
+
+/* Default Position (Top Center) */
+[data-tooltip]:not([data-position]):before {
+ top: auto;
+ right: auto;
+ bottom: 100%;
+ left: 50%;
+ background: @tooltipArrowBottomBackground;
+ margin-left: @tooltipArrowHorizontalOffset;
+ margin-bottom: -@tooltipArrowVerticalOffset;
+}
+[data-tooltip]:not([data-position]):after {
+ left: 50%;
+ transform: translateX(-50%);
+ bottom: 100%;
+ margin-bottom: @tooltipDistanceAway;
+}
+
+/* Animation */
+[data-tooltip]:before,
+[data-tooltip]:after {
+ pointer-events: none;
+ visibility: hidden;
+}
+[data-tooltip]:before {
+ opacity: 0;
+ transform: rotate(45deg) scale(0) !important;
+ transform-origin: center top;
+ transition:
+ all @tooltipDuration @tooltipEasing
+ ;
+}
+[data-tooltip]:after {
+ opacity: 1;
+ transform-origin: center bottom;
+ transition:
+ all @tooltipDuration @tooltipEasing
+ ;
+}
+[data-tooltip]:hover:before,
+[data-tooltip]:hover:after {
+ visibility: visible;
+ pointer-events: auto;
+}
+[data-tooltip]:hover:before {
+ transform: rotate(45deg) scale(1) !important;
+ opacity: 1;
+}
+
+/* Animation Position */
+[data-tooltip]:after,
+[data-tooltip][data-position="top center"]:after,
+[data-tooltip][data-position="bottom center"]:after {
+ transform: translateX(-50%) scale(0) !important;
+}
+[data-tooltip]:hover:after,
+[data-tooltip][data-position="bottom center"]:hover:after {
+ transform: translateX(-50%) scale(1) !important;
+}
+[data-tooltip][data-position="left center"]:after,
+[data-tooltip][data-position="right center"]:after {
+ transform: translateY(-50%) scale(0) !important;
+}
+[data-tooltip][data-position="left center"]:hover:after,
+[data-tooltip][data-position="right center"]:hover:after {
+ transform: translateY(-50%) scale(1) !important;
+}
+[data-tooltip][data-position="top left"]:after,
+[data-tooltip][data-position="top right"]:after,
+[data-tooltip][data-position="bottom left"]:after,
+[data-tooltip][data-position="bottom right"]:after {
+ transform: scale(0) !important;
+}
+[data-tooltip][data-position="top left"]:hover:after,
+[data-tooltip][data-position="top right"]:hover:after,
+[data-tooltip][data-position="bottom left"]:hover:after,
+[data-tooltip][data-position="bottom right"]:hover:after {
+ transform: scale(1) !important;
+}
+
+
+/*--------------
+ Inverted
+---------------*/
+
+/* Arrow */
+[data-tooltip][data-inverted]:before {
+ box-shadow: none !important;
+}
+
+/* Arrow Position */
+[data-tooltip][data-inverted]:before {
+ background: @invertedArrowBottomBackground;
+}
+
+/* Popup */
+[data-tooltip][data-inverted]:after {
+ background: @tooltipInvertedBackground;
+ color: @tooltipInvertedColor;
+ border: @tooltipInvertedBorder;
+ box-shadow: @tooltipInvertedBoxShadow;
+}
+[data-tooltip][data-inverted]:after .header {
+ background-color: @tooltipInvertedHeaderBackground;
+ color: @tooltipInvertedHeaderColor;
+}
+
+/*--------------
+ Position
+---------------*/
+
+/* Top Center */
+[data-position="top center"][data-tooltip]:after {
+ top: auto;
+ right: auto;
+ left: 50%;
+ bottom: 100%;
+ transform: translateX(-50%);
+ margin-bottom: @tooltipDistanceAway;
+}
+[data-position="top center"][data-tooltip]:before {
+ top: auto;
+ right: auto;
+ bottom: 100%;
+ left: 50%;
+ background: @tooltipArrowTopBackground;
+ margin-left: @tooltipArrowHorizontalOffset;
+ margin-bottom: -@tooltipArrowVerticalOffset;
+}
+
+/* Top Left */
+[data-position="top left"][data-tooltip]:after {
+ top: auto;
+ right: auto;
+ left: 0;
+ bottom: 100%;
+ margin-bottom: @tooltipDistanceAway;
+}
+[data-position="top left"][data-tooltip]:before {
+ top: auto;
+ right: auto;
+ bottom: 100%;
+ left: @arrowDistanceFromEdge;
+ margin-left: @tooltipArrowHorizontalOffset;
+ margin-bottom: -@tooltipArrowVerticalOffset;
+}
+
+/* Top Right */
+[data-position="top right"][data-tooltip]:after {
+ top: auto;
+ left: auto;
+ right: 0;
+ bottom: 100%;
+ margin-bottom: @tooltipDistanceAway;
+}
+[data-position="top right"][data-tooltip]:before {
+ top: auto;
+ left: auto;
+ bottom: 100%;
+ right: @arrowDistanceFromEdge;
+ margin-left: @tooltipArrowHorizontalOffset;
+ margin-bottom: -@tooltipArrowVerticalOffset;
+}
+
+
+/* Bottom Center */
+[data-position="bottom center"][data-tooltip]:after {
+ bottom: auto;
+ right: auto;
+ left: 50%;
+ top: 100%;
+ transform: translateX(-50%);
+ margin-top: @tooltipDistanceAway;
+}
+[data-position="bottom center"][data-tooltip]:before {
+ bottom: auto;
+ right: auto;
+ top: 100%;
+ left: 50%;
+ margin-left: @tooltipArrowHorizontalOffset;
+ margin-top: -@tooltipArrowVerticalOffset;
+}
+
+/* Bottom Left */
+[data-position="bottom left"][data-tooltip]:after {
+ left: 0;
+ top: 100%;
+ margin-top: @tooltipDistanceAway;
+}
+[data-position="bottom left"][data-tooltip]:before {
+ bottom: auto;
+ right: auto;
+ top: 100%;
+ left: @arrowDistanceFromEdge;
+ margin-left: @tooltipArrowHorizontalOffset;
+ margin-top: -@tooltipArrowVerticalOffset;
+}
+
+/* Bottom Right */
+[data-position="bottom right"][data-tooltip]:after {
+ right: 0;
+ top: 100%;
+ margin-top: @tooltipDistanceAway;
+}
+[data-position="bottom right"][data-tooltip]:before {
+ bottom: auto;
+ left: auto;
+ top: 100%;
+ right: @arrowDistanceFromEdge;
+ margin-left: @tooltipArrowVerticalOffset;
+ margin-top: -@tooltipArrowHorizontalOffset;
+}
+
+/* Left Center */
+[data-position="left center"][data-tooltip]:after {
+ right: 100%;
+ top: 50%;
+ margin-right: @tooltipDistanceAway;
+ transform: translateY(-50%);
+}
+[data-position="left center"][data-tooltip]:before {
+ right: 100%;
+ top: 50%;
+ margin-top: @tooltipArrowVerticalOffset;
+ margin-right: @tooltipArrowHorizontalOffset;
+}
+
+/* Right Center */
+[data-position="right center"][data-tooltip]:after {
+ left: 100%;
+ top: 50%;
+ margin-left: @tooltipDistanceAway;
+ transform: translateY(-50%);
+}
+[data-position="right center"][data-tooltip]:before {
+ left: 100%;
+ top: 50%;
+ margin-top: @tooltipArrowHorizontalOffset;
+ margin-left: -@tooltipArrowVerticalOffset;
+}
+
+/* Arrow */
+[data-position~="bottom"][data-tooltip]:before {
+ background: @arrowTopBackground;
+ box-shadow: @bottomArrowBoxShadow;
+}
+[data-position="left center"][data-tooltip]:before {
+ background: @arrowCenterBackground;
+ box-shadow: @leftArrowBoxShadow;
+}
+[data-position="right center"][data-tooltip]:before {
+ background: @arrowCenterBackground;
+ box-shadow: @rightArrowBoxShadow;
+}
+[data-position~="top"][data-tooltip]:before {
+ background: @arrowBottomBackground;
+}
+
+/* Inverted Arrow Color */
+[data-inverted][data-position~="bottom"][data-tooltip]:before {
+ background: @invertedArrowTopBackground;
+ box-shadow: @bottomArrowBoxShadow;
+}
+[data-inverted][data-position="left center"][data-tooltip]:before {
+ background: @invertedArrowCenterBackground;
+ box-shadow: @leftArrowBoxShadow;
+}
+[data-inverted][data-position="right center"][data-tooltip]:before {
+ background: @invertedArrowCenterBackground;
+ box-shadow: @rightArrowBoxShadow;
+}
+[data-inverted][data-position~="top"][data-tooltip]:before {
+ background: @invertedArrowBottomBackground;
+}
+
+[data-position~="bottom"][data-tooltip]:before {
+ transform-origin: center bottom;
+}
+[data-position~="bottom"][data-tooltip]:after {
+ transform-origin: center top;
+}
+[data-position="left center"][data-tooltip]:before {
+ transform-origin: top center;
+}
+[data-position="left center"][data-tooltip]:after {
+ transform-origin: right center;
+}
+[data-position="right center"][data-tooltip]:before {
+ transform-origin: right center;
+}
+[data-position="right center"][data-tooltip]:after {
+ transform-origin: left center;
+}
+
+/*--------------
+ Spacing
+---------------*/
+
+.ui.popup {
+ margin: 0em;
+}
+
+/* Extending from Top */
+.ui.top.popup {
+ margin: 0em 0em @popupDistanceAway;
+}
+.ui.top.left.popup {
+ transform-origin: left bottom;
+}
+.ui.top.center.popup {
+ transform-origin: center bottom;
+}
+.ui.top.right.popup {
+ transform-origin: right bottom;
+}
+
+/* Extending from Vertical Center */
+.ui.left.center.popup {
+ margin: 0em @popupDistanceAway 0em 0em;
+ transform-origin: right 50%;
+}
+.ui.right.center.popup {
+ margin: 0em 0em 0em @popupDistanceAway;
+ transform-origin: left 50%;
+}
+
+/* Extending from Bottom */
+.ui.bottom.popup {
+ margin: @popupDistanceAway 0em 0em;
+}
+.ui.bottom.left.popup {
+ transform-origin: left top;
+}
+.ui.bottom.center.popup {
+ transform-origin: center top;
+}
+.ui.bottom.right.popup {
+ transform-origin: right top;
+}
+
+/*--------------
+ Pointer
+---------------*/
+
+/*--- Below ---*/
+.ui.bottom.center.popup:before {
+ margin-left: @arrowOffset;
+ top: @arrowOffset;
+ left: 50%;
+ right: auto;
+ bottom: auto;
+ box-shadow: @bottomArrowBoxShadow;
+}
+
+.ui.bottom.left.popup {
+ margin-left: @boxArrowOffset;
+}
+/*rtl:rename*/
+.ui.bottom.left.popup:before {
+ top: @arrowOffset;
+ left: @arrowDistanceFromEdge;
+ right: auto;
+ bottom: auto;
+ margin-left: 0em;
+ box-shadow: @bottomArrowBoxShadow;
+}
+
+.ui.bottom.right.popup {
+ margin-right: @boxArrowOffset;
+}
+/*rtl:rename*/
+.ui.bottom.right.popup:before {
+ top: @arrowOffset;
+ right: @arrowDistanceFromEdge;
+ bottom: auto;
+ left: auto;
+ margin-left: 0em;
+ box-shadow: @bottomArrowBoxShadow;
+}
+
+/*--- Above ---*/
+.ui.top.center.popup:before {
+ top: auto;
+ right: auto;
+ bottom: @arrowOffset;
+ left: 50%;
+ margin-left: @arrowOffset;
+}
+.ui.top.left.popup {
+ margin-left: @boxArrowOffset;
+}
+/*rtl:rename*/
+.ui.top.left.popup:before {
+ bottom: @arrowOffset;
+ left: @arrowDistanceFromEdge;
+ top: auto;
+ right: auto;
+ margin-left: 0em;
+}
+.ui.top.right.popup {
+ margin-right: @boxArrowOffset;
+}
+/*rtl:rename*/
+.ui.top.right.popup:before {
+ bottom: @arrowOffset;
+ right: @arrowDistanceFromEdge;
+ top: auto;
+ left: auto;
+ margin-left: 0em;
+}
+
+/*--- Left Center ---*/
+/*rtl:rename*/
+.ui.left.center.popup:before {
+ top: 50%;
+ right: @arrowOffset;
+ bottom: auto;
+ left: auto;
+ margin-top: @arrowOffset;
+ box-shadow: @leftArrowBoxShadow;
+}
+
+/*--- Right Center ---*/
+/*rtl:rename*/
+.ui.right.center.popup:before {
+ top: 50%;
+ left: @arrowOffset;
+ bottom: auto;
+ right: auto;
+ margin-top: @arrowOffset;
+ box-shadow: @rightArrowBoxShadow;
+}
+
+/* Arrow Color By Location */
+.ui.bottom.popup:before {
+ background: @arrowTopBackground;
+}
+.ui.right.center.popup:before,
+.ui.left.center.popup:before {
+ background: @arrowCenterBackground;
+}
+.ui.top.popup:before {
+ background: @arrowBottomBackground;
+}
+
+/* Inverted Arrow Color */
+.ui.inverted.bottom.popup:before {
+ background: @invertedArrowTopBackground;
+}
+.ui.inverted.right.center.popup:before,
+.ui.inverted.left.center.popup:before {
+ background: @invertedArrowCenterBackground;
+}
+.ui.inverted.top.popup:before {
+ background: @invertedArrowBottomBackground;
+}
+
+
+/*******************************
+ Coupling
+*******************************/
+
+/* Immediate Nested Grid */
+.ui.popup > .ui.grid:not(.padded) {
+ width: @nestedGridWidth;
+ margin: @nestedGridMargin;
+}
+
+/*******************************
+ States
+*******************************/
+
+.ui.loading.popup {
+ display: block;
+ visibility: hidden;
+ z-index: @loadingZIndex;
+}
+
+.ui.animating.popup,
+.ui.visible.popup {
+ display: block;
+}
+
+.ui.visible.popup {
+ transform: translateZ(0px);
+ backface-visibility: hidden;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Basic
+---------------*/
+
+.ui.basic.popup:before {
+ display: none;
+}
+
+
+/*--------------
+ Wide
+---------------*/
+
+.ui.wide.popup {
+ max-width: @wideWidth;
+}
+.ui[class*="very wide"].popup {
+ max-width: @veryWideWidth;
+}
+
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.wide.popup,
+ .ui[class*="very wide"].popup {
+ max-width: @maxWidth;
+ }
+}
+
+
+/*--------------
+ Fluid
+---------------*/
+
+.ui.fluid.popup {
+ width: 100%;
+ max-width: none;
+}
+
+
+/*--------------
+ Colors
+---------------*/
+
+/* Inverted colors */
+.ui.inverted.popup {
+ background: @invertedBackground;
+ color: @invertedColor;
+ border: @invertedBorder;
+ box-shadow: @invertedBoxShadow;
+}
+.ui.inverted.popup .header {
+ background-color: @invertedHeaderBackground;
+ color: @invertedHeaderColor;
+}
+.ui.inverted.popup:before {
+ background-color: @invertedArrowColor;
+ box-shadow: none !important;
+}
+
+/*--------------
+ Flowing
+---------------*/
+
+.ui.flowing.popup {
+ max-width: none;
+}
+
+
+/*--------------
+ Sizes
+---------------*/
+
+.ui.mini.popup {
+ font-size: @mini;
+}
+.ui.tiny.popup {
+ font-size: @tiny;
+}
+.ui.small.popup {
+ font-size: @small;
+}
+.ui.popup {
+ font-size: @medium;
+}
+.ui.large.popup {
+ font-size: @large;
+}
+.ui.huge.popup {
+ font-size: @huge;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/progress.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/progress.js b/semantic/src/definitions/modules/progress.js
new file mode 100644
index 0000000..42b9c0e
--- /dev/null
+++ b/semantic/src/definitions/modules/progress.js
@@ -0,0 +1,910 @@
+/*!
+ * # Semantic UI - Progress
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+var
+ global = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.progress = function(parameters) {
+ var
+ $allModules = $(this),
+
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.progress.settings, parameters)
+ : $.extend({}, $.fn.progress.settings),
+
+ className = settings.className,
+ metadata = settings.metadata,
+ namespace = settings.namespace,
+ selector = settings.selector,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $module = $(this),
+ $bar = $(this).find(selector.bar),
+ $progress = $(this).find(selector.progress),
+ $label = $(this).find(selector.label),
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ animating = false,
+ transitionEnd,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.debug('Initializing progress bar', settings);
+
+ module.set.duration();
+ module.set.transitionEvent();
+
+ module.read.metadata();
+ module.read.settings();
+
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of progress', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+ destroy: function() {
+ module.verbose('Destroying previous progress for', $module);
+ clearInterval(instance.interval);
+ module.remove.state();
+ $module.removeData(moduleNamespace);
+ instance = undefined;
+ },
+
+ reset: function() {
+ module.remove.nextValue();
+ module.update.progress(0);
+ },
+
+ complete: function() {
+ if(module.percent === undefined || module.percent < 100) {
+ module.remove.progressPoll();
+ module.set.percent(100);
+ }
+ },
+
+ read: {
+ metadata: function() {
+ var
+ data = {
+ percent : $module.data(metadata.percent),
+ total : $module.data(metadata.total),
+ value : $module.data(metadata.value)
+ }
+ ;
+ if(data.percent) {
+ module.debug('Current percent value set from metadata', data.percent);
+ module.set.percent(data.percent);
+ }
+ if(data.total) {
+ module.debug('Total value set from metadata', data.total);
+ module.set.total(data.total);
+ }
+ if(data.value) {
+ module.debug('Current value set from metadata', data.value);
+ module.set.value(data.value);
+ module.set.progress(data.value);
+ }
+ },
+ settings: function() {
+ if(settings.total !== false) {
+ module.debug('Current total set in settings', settings.total);
+ module.set.total(settings.total);
+ }
+ if(settings.value !== false) {
+ module.debug('Current value set in settings', settings.value);
+ module.set.value(settings.value);
+ module.set.progress(module.value);
+ }
+ if(settings.percent !== false) {
+ module.debug('Current percent set in settings', settings.percent);
+ module.set.percent(settings.percent);
+ }
+ }
+ },
+
+ increment: function(incrementValue) {
+ var
+ maxValue,
+ startValue,
+ newValue
+ ;
+ if( module.has.total() ) {
+ startValue = module.get.value();
+ incrementValue = incrementValue || 1;
+ newValue = startValue + incrementValue;
+ }
+ else {
+ startValue = module.get.percent();
+ incrementValue = incrementValue || module.get.randomValue();
+
+ newValue = startValue + incrementValue;
+ maxValue = 100;
+ module.debug('Incrementing percentage by', startValue, newValue);
+ }
+ newValue = module.get.normalizedValue(newValue);
+ module.set.progress(newValue);
+ },
+ decrement: function(decrementValue) {
+ var
+ total = module.get.total(),
+ startValue,
+ newValue
+ ;
+ if(total) {
+ startValue = module.get.value();
+ decrementValue = decrementValue || 1;
+ newValue = startValue - decrementValue;
+ module.debug('Decrementing value by', decrementValue, startValue);
+ }
+ else {
+ startValue = module.get.percent();
+ decrementValue = decrementValue || module.get.randomValue();
+ newValue = startValue - decrementValue;
+ module.debug('Decrementing percentage by', decrementValue, startValue);
+ }
+ newValue = module.get.normalizedValue(newValue);
+ module.set.progress(newValue);
+ },
+
+ has: {
+ progressPoll: function() {
+ return module.progressPoll;
+ },
+ total: function() {
+ return (module.get.total() !== false);
+ }
+ },
+
+ get: {
+ text: function(templateText) {
+ var
+ value = module.value || 0,
+ total = module.total || 0,
+ percent = (animating)
+ ? module.get.displayPercent()
+ : module.percent || 0,
+ left = (module.total > 0)
+ ? (total - value)
+ : (100 - percent)
+ ;
+ templateText = templateText || '';
+ templateText = templateText
+ .replace('{value}', value)
+ .replace('{total}', total)
+ .replace('{left}', left)
+ .replace('{percent}', percent)
+ ;
+ module.verbose('Adding variables to progress bar text', templateText);
+ return templateText;
+ },
+
+ normalizedValue: function(value) {
+ if(value < 0) {
+ module.debug('Value cannot decrement below 0');
+ return 0;
+ }
+ if(module.has.total()) {
+ if(value > module.total) {
+ module.debug('Value cannot increment above total', module.total);
+ return module.total;
+ }
+ }
+ else if(value > 100 ) {
+ module.debug('Value cannot increment above 100 percent');
+ return 100;
+ }
+ return value;
+ },
+
+ updateInterval: function() {
+ if(settings.updateInterval == 'auto') {
+ return settings.duration;
+ }
+ return settings.updateInterval;
+ },
+
+ randomValue: function() {
+ module.debug('Generating random increment percentage');
+ return Math.floor((Math.random() * settings.random.max) + settings.random.min);
+ },
+
+ numericValue: function(value) {
+ return (typeof value === 'string')
+ ? (value.replace(/[^\d.]/g, '') !== '')
+ ? +(value.replace(/[^\d.]/g, ''))
+ : false
+ : value
+ ;
+ },
+
+ transitionEnd: function() {
+ var
+ element = document.createElement('element'),
+ transitions = {
+ 'transition' :'transitionend',
+ 'OTransition' :'oTransitionEnd',
+ 'MozTransition' :'transitionend',
+ 'WebkitTransition' :'webkitTransitionEnd'
+ },
+ transition
+ ;
+ for(transition in transitions){
+ if( element.style[transition] !== undefined ){
+ return transitions[transition];
+ }
+ }
+ },
+
+ // gets current displayed percentage (if animating values this is the intermediary value)
+ displayPercent: function() {
+ var
+ barWidth = $bar.width(),
+ totalWidth = $module.width(),
+ minDisplay = parseInt($bar.css('min-width'), 10),
+ displayPercent = (barWidth > minDisplay)
+ ? (barWidth / totalWidth * 100)
+ : module.percent
+ ;
+ return (settings.precision > 0)
+ ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)
+ : Math.round(displayPercent)
+ ;
+ },
+
+ percent: function() {
+ return module.percent || 0;
+ },
+ value: function() {
+ return module.nextValue || module.value || 0;
+ },
+ total: function() {
+ return module.total || false;
+ }
+ },
+
+ create: {
+ progressPoll: function() {
+ module.progressPoll = setTimeout(function() {
+ module.update.toNextValue();
+ module.remove.progressPoll();
+ }, module.get.updateInterval());
+ },
+ },
+
+ is: {
+ complete: function() {
+ return module.is.success() || module.is.warning() || module.is.error();
+ },
+ success: function() {
+ return $module.hasClass(className.success);
+ },
+ warning: function() {
+ return $module.hasClass(className.warning);
+ },
+ error: function() {
+ return $module.hasClass(className.error);
+ },
+ active: function() {
+ return $module.hasClass(className.active);
+ },
+ visible: function() {
+ return $module.is(':visible');
+ }
+ },
+
+ remove: {
+ progressPoll: function() {
+ module.verbose('Removing progress poll timer');
+ if(module.progressPoll) {
+ clearTimeout(module.progressPoll);
+ delete module.progressPoll;
+ }
+ },
+ nextValue: function() {
+ module.verbose('Removing progress value stored for next update');
+ delete module.nextValue;
+ },
+ state: function() {
+ module.verbose('Removing stored state');
+ delete module.total;
+ delete module.percent;
+ delete module.value;
+ },
+ active: function() {
+ module.verbose('Removing active state');
+ $module.removeClass(className.active);
+ },
+ success: function() {
+ module.verbose('Removing success state');
+ $module.removeClass(className.success);
+ },
+ warning: function() {
+ module.verbose('Removing warning state');
+ $module.removeClass(className.warning);
+ },
+ error: function() {
+ module.verbose('Removing error state');
+ $module.removeClass(className.error);
+ }
+ },
+
+ set: {
+ barWidth: function(value) {
+ if(value > 100) {
+ module.error(error.tooHigh, value);
+ }
+ else if (value < 0) {
+ module.error(error.tooLow, value);
+ }
+ else {
+ $bar
+ .css('width', value + '%')
+ ;
+ $module
+ .attr('data-percent', parseInt(value, 10))
+ ;
+ }
+ },
+ duration: function(duration) {
+ duration = duration || settings.duration;
+ duration = (typeof duration == 'number')
+ ? duration + 'ms'
+ : duration
+ ;
+ module.verbose('Setting progress bar transition duration', duration);
+ $bar
+ .css({
+ 'transition-duration': duration
+ })
+ ;
+ },
+ percent: function(percent) {
+ percent = (typeof percent == 'string')
+ ? +(percent.replace('%', ''))
+ : percent
+ ;
+ // round display percentage
+ percent = (settings.precision > 0)
+ ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)
+ : Math.round(percent)
+ ;
+ module.percent = percent;
+ if( !module.has.total() ) {
+ module.value = (settings.precision > 0)
+ ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)
+ : Math.round( (percent / 100) * module.total * 10) / 10
+ ;
+ if(settings.limitValues) {
+ module.value = (module.value > 100)
+ ? 100
+ : (module.value < 0)
+ ? 0
+ : module.value
+ ;
+ }
+ }
+ module.set.barWidth(percent);
+ module.set.labelInterval();
+ module.set.labels();
+ settings.onChange.call(element, percent, module.value, module.total);
+ },
+ labelInterval: function() {
+ var
+ animationCallback = function() {
+ module.verbose('Bar finished animating, removing continuous label updates');
+ clearInterval(module.interval);
+ animating = false;
+ module.set.labels();
+ }
+ ;
+ clearInterval(module.interval);
+ $bar.one(transitionEnd + eventNamespace, animationCallback);
+ animating = true;
+ module.interval = setInterval(function() {
+ var
+ isInDOM = $.contains(document.documentElement, element)
+ ;
+ if(!isInDOM) {
+ clearInterval(module.interval);
+ animating = false;
+ }
+ module.set.labels();
+ }, settings.framerate);
+ },
+ labels: function() {
+ module.verbose('Setting both bar progress and outer label text');
+ module.set.barLabel();
+ module.set.state();
+ },
+ label: function(text) {
+ text = text || '';
+ if(text) {
+ text = module.get.text(text);
+ module.verbose('Setting label to text', text);
+ $label.text(text);
+ }
+ },
+ state: function(percent) {
+ percent = (percent !== undefined)
+ ? percent
+ : module.percent
+ ;
+ if(percent === 100) {
+ if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {
+ module.set.success();
+ module.debug('Automatically triggering success at 100%');
+ }
+ else {
+ module.verbose('Reached 100% removing active state');
+ module.remove.active();
+ module.remove.progressPoll();
+ }
+ }
+ else if(percent > 0) {
+ module.verbose('Adjusting active progress bar label', percent);
+ module.set.active();
+ }
+ else {
+ module.remove.active();
+ module.set.label(settings.text.active);
+ }
+ },
+ barLabel: function(text) {
+ if(text !== undefined) {
+ $progress.text( module.get.text(text) );
+ }
+ else if(settings.label == 'ratio' && module.total) {
+ module.verbose('Adding ratio to bar label');
+ $progress.text( module.get.text(settings.text.ratio) );
+ }
+ else if(settings.label == 'percent') {
+ module.verbose('Adding percentage to bar label');
+ $progress.text( module.get.text(settings.text.percent) );
+ }
+ },
+ active: function(text) {
+ text = text || settings.text.active;
+ module.debug('Setting active state');
+ if(settings.showActivity && !module.is.active() ) {
+ $module.addClass(className.active);
+ }
+ module.remove.warning();
+ module.remove.error();
+ module.remove.success();
+ text = settings.onLabelUpdate('active', text, module.value, module.total);
+ if(text) {
+ module.set.label(text);
+ }
+ $bar.one(transitionEnd + eventNamespace, function() {
+ settings.onActive.call(element, module.value, module.total);
+ });
+ },
+ success : function(text) {
+ text = text || settings.text.success || settings.text.active;
+ module.debug('Setting success state');
+ $module.addClass(className.success);
+ module.remove.active();
+ module.remove.warning();
+ module.remove.error();
+ module.complete();
+ if(settings.text.success) {
+ text = settings.onLabelUpdate('success', text, module.value, module.total);
+ module.set.label(text);
+ }
+ else {
+ text = settings.onLabelUpdate('active', text, module.value, module.total);
+ module.set.label(text);
+ }
+ $bar.one(transitionEnd + eventNamespace, function() {
+ settings.onSuccess.call(element, module.total);
+ });
+ },
+ warning : function(text) {
+ text = text || settings.text.warning;
+ module.debug('Setting warning state');
+ $module.addClass(className.warning);
+ module.remove.active();
+ module.remove.success();
+ module.remove.error();
+ module.complete();
+ text = settings.onLabelUpdate('warning', text, module.value, module.total);
+ if(text) {
+ module.set.label(text);
+ }
+ $bar.one(transitionEnd + eventNamespace, function() {
+ settings.onWarning.call(element, module.value, module.total);
+ });
+ },
+ error : function(text) {
+ text = text || settings.text.error;
+ module.debug('Setting error state');
+ $module.addClass(className.error);
+ module.remove.active();
+ module.remove.success();
+ module.remove.warning();
+ module.complete();
+ text = settings.onLabelUpdate('error', text, module.value, module.total);
+ if(text) {
+ module.set.label(text);
+ }
+ $bar.one(transitionEnd + eventNamespace, function() {
+ settings.onError.call(element, module.value, module.total);
+ });
+ },
+ transitionEvent: function() {
+ transitionEnd = module.get.transitionEnd();
+ },
+ total: function(totalValue) {
+ module.total = totalValue;
+ },
+ value: function(value) {
+ module.value = value;
+ },
+ progress: function(value) {
+ if(!module.has.progressPoll()) {
+ module.debug('First update in progress update interval, immediately updating', value);
+ module.update.progress(value);
+ module.create.progressPoll();
+ }
+ else {
+ module.debug('Updated within interval, setting next update to use new value', value);
+ module.set.nextValue(value);
+ }
+ },
+ nextValue: function(value) {
+ module.nextValue = value;
+ }
+ },
+
+ update: {
+ toNextValue: function() {
+ var
+ nextValue = module.nextValue
+ ;
+ if(nextValue) {
+ module.debug('Update interval complete using last updated value', nextValue);
+ module.update.progress(nextValue);
+ module.remove.nextValue();
+ }
+ },
+ progress: function(value) {
+ var
+ percentComplete
+ ;
+ value = module.get.numericValue(value);
+ if(value === false) {
+ module.error(error.nonNumeric, value);
+ }
+ value = module.get.normalizedValue(value);
+ if( module.has.total() ) {
+ module.set.value(value);
+ percentComplete = (value / module.total) * 100;
+ module.debug('Calculating percent complete from total', percentComplete);
+ module.set.percent( percentComplete );
+ }
+ else {
+ percentComplete = value;
+ module.debug('Setting value to exact percentage value', percentComplete);
+ module.set.percent( percentComplete );
+ }
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.progress.settings = {
+
+ name : 'Progress',
+ namespace : 'progress',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ random : {
+ min : 2,
+ max : 5
+ },
+
+ duration : 300,
+
+ updateInterval : 'auto',
+
+ autoSuccess : true,
+ showActivity : true,
+ limitValues : true,
+
+ label : 'percent',
+ precision : 0,
+ framerate : (1000 / 30), /// 30 fps
+
+ percent : false,
+ total : false,
+ value : false,
+
+ onLabelUpdate : function(state, text, value, total){
+ return text;
+ },
+ onChange : function(percent, value, total){},
+ onSuccess : function(total){},
+ onActive : function(value, total){},
+ onError : function(value, total){},
+ onWarning : function(value, total){},
+
+ error : {
+ method : 'The method you called is not defined.',
+ nonNumeric : 'Progress value is non numeric',
+ tooHigh : 'Value specified is above 100%',
+ tooLow : 'Value specified is below 0%'
+ },
+
+ regExp: {
+ variable: /\{\$*[A-z0-9]+\}/g
+ },
+
+ metadata: {
+ percent : 'percent',
+ total : 'total',
+ value : 'value'
+ },
+
+ selector : {
+ bar : '> .bar',
+ label : '> .label',
+ progress : '.bar > .progress'
+ },
+
+ text : {
+ active : false,
+ error : false,
+ success : false,
+ warning : false,
+ percent : '{percent}%',
+ ratio : '{value} of {total}'
+ },
+
+ className : {
+ active : 'active',
+ error : 'error',
+ success : 'success',
+ warning : 'warning'
+ }
+
+};
+
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/progress.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/progress.less b/semantic/src/definitions/modules/progress.less
new file mode 100755
index 0000000..ff8323f
--- /dev/null
+++ b/semantic/src/definitions/modules/progress.less
@@ -0,0 +1,503 @@
+/*!
+ * # Semantic UI - Progress Bar
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'progress';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Progress
+*******************************/
+
+.ui.progress {
+ position: relative;
+ display: block;
+ max-width: 100%;
+ border: @border;
+ margin: @margin;
+ box-shadow: @boxShadow;
+ background: @background;
+ padding: @padding;
+ border-radius: @borderRadius;
+}
+
+.ui.progress:first-child {
+ margin: @firstMargin;
+}
+.ui.progress:last-child {
+ margin: @lastMargin;
+}
+
+/*******************************
+ Content
+*******************************/
+
+/* Activity Bar */
+.ui.progress .bar {
+ display: block;
+ line-height: 1;
+ position: @barPosition;
+ width: @barInitialWidth;
+ min-width: @barMinWidth;
+ background: @barBackground;
+ border-radius: @barBorderRadius;
+ transition: @barTransition;
+}
+
+/* Percent Complete */
+.ui.progress .bar > .progress {
+ white-space: nowrap;
+ position: @progressPosition;
+ width: @progressWidth;
+ font-size: @progressSize;
+ top: @progressTop;
+ right: @progressRight;
+ left: @progressLeft;
+ bottom: @progressBottom;
+ color: @progressColor;
+ text-shadow: @progressTextShadow;
+ margin-top: @progressOffset;
+ font-weight: @progressFontWeight;
+ text-align: @progressTextAlign;
+}
+
+/* Label */
+.ui.progress > .label {
+ position: absolute;
+ width: @labelWidth;
+ font-size: @labelSize;
+ top: @labelTop;
+ right: @labelRight;
+ left: @labelLeft;
+ bottom: @labelBottom;
+ color: @labelColor;
+ font-weight: @labelFontWeight;
+ text-shadow: @labelTextShadow;
+ margin-top: @labelOffset;
+ text-align: @labelTextAlign;
+ transition: @labelTransition;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+
+/* Indicating */
+.ui.indicating.progress[data-percent^="1"] .bar,
+.ui.indicating.progress[data-percent^="2"] .bar {
+ background-color: @indicatingFirstColor;
+}
+.ui.indicating.progress[data-percent^="3"] .bar {
+ background-color: @indicatingSecondColor;
+}
+.ui.indicating.progress[data-percent^="4"] .bar,
+.ui.indicating.progress[data-percent^="5"] .bar {
+ background-color: @indicatingThirdColor;
+}
+.ui.indicating.progress[data-percent^="6"] .bar {
+ background-color: @indicatingFourthColor;
+}
+.ui.indicating.progress[data-percent^="7"] .bar,
+.ui.indicating.progress[data-percent^="8"] .bar {
+ background-color: @indicatingFifthColor;
+}
+.ui.indicating.progress[data-percent^="9"] .bar,
+.ui.indicating.progress[data-percent^="100"] .bar {
+ background-color: @indicatingSixthColor;
+}
+
+/* Indicating Label */
+.ui.indicating.progress[data-percent^="1"] .label,
+.ui.indicating.progress[data-percent^="2"] .label {
+ color: @indicatingFirstLabelColor;
+}
+.ui.indicating.progress[data-percent^="3"] .label {
+ color: @indicatingSecondLabelColor;
+}
+.ui.indicating.progress[data-percent^="4"] .label,
+.ui.indicating.progress[data-percent^="5"] .label {
+ color: @indicatingThirdLabelColor;
+}
+.ui.indicating.progress[data-percent^="6"] .label {
+ color: @indicatingFourthLabelColor;
+}
+.ui.indicating.progress[data-percent^="7"] .label,
+.ui.indicating.progress[data-percent^="8"] .label {
+ color: @indicatingFifthLabelColor;
+}
+.ui.indicating.progress[data-percent^="9"] .label,
+.ui.indicating.progress[data-percent^="100"] .label {
+ color: @indicatingSixthLabelColor;
+}
+
+/* Single Digits */
+.ui.indicating.progress[data-percent="1"] .bar,
+.ui.indicating.progress[data-percent="2"] .bar,
+.ui.indicating.progress[data-percent="3"] .bar,
+.ui.indicating.progress[data-percent="4"] .bar,
+.ui.indicating.progress[data-percent="5"] .bar,
+.ui.indicating.progress[data-percent="6"] .bar,
+.ui.indicating.progress[data-percent="7"] .bar,
+.ui.indicating.progress[data-percent="8"] .bar,
+.ui.indicating.progress[data-percent="9"] .bar {
+ background-color: @indicatingFirstColor;
+}
+.ui.indicating.progress[data-percent="1"] .label,
+.ui.indicating.progress[data-percent="2"] .label,
+.ui.indicating.progress[data-percent="3"] .label,
+.ui.indicating.progress[data-percent="4"] .label,
+.ui.indicating.progress[data-percent="5"] .label,
+.ui.indicating.progress[data-percent="6"] .label,
+.ui.indicating.progress[data-percent="7"] .label,
+.ui.indicating.progress[data-percent="8"] .label,
+.ui.indicating.progress[data-percent="9"] .label {
+ color: @indicatingFirstLabelColor;
+}
+
+/* Indicating Success */
+.ui.indicating.progress.success .label {
+ color: @successHeaderColor;
+}
+
+/*******************************
+ States
+*******************************/
+
+
+/*--------------
+ Success
+---------------*/
+
+.ui.progress.success .bar {
+ background-color: @successColor !important;
+}
+.ui.progress.success .bar,
+.ui.progress.success .bar::after {
+ animation: none !important;
+}
+.ui.progress.success > .label {
+ color: @successHeaderColor;
+}
+
+/*--------------
+ Warning
+---------------*/
+
+.ui.progress.warning .bar {
+ background-color: @warningColor !important;
+}
+.ui.progress.warning .bar,
+.ui.progress.warning .bar::after {
+ animation: none !important;
+}
+.ui.progress.warning > .label {
+ color: @warningHeaderColor;
+}
+
+/*--------------
+ Error
+---------------*/
+
+.ui.progress.error .bar {
+ background-color: @errorColor !important;
+}
+.ui.progress.error .bar,
+.ui.progress.error .bar::after {
+ animation: none !important;
+}
+.ui.progress.error > .label {
+ color: @errorHeaderColor;
+}
+
+/*--------------
+ Active
+---------------*/
+
+.ui.active.progress .bar {
+ position: relative;
+ min-width: @activeMinWidth;
+}
+.ui.active.progress .bar::after {
+ content: '';
+ opacity: 0;
+
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ bottom: 0px;
+ background: @activePulseColor;
+
+ border-radius: @barBorderRadius;
+
+ animation: progress-active @activePulseDuration @defaultEasing infinite;
+}
+@keyframes progress-active {
+ 0% {
+ opacity: @activePulseMaxOpacity;
+ width: 0;
+ }
+ 90% {
+ }
+ 100% {
+ opacity: 0;
+ width: 100%;
+ }
+}
+
+/*--------------
+ Disabled
+---------------*/
+
+.ui.disabled.progress {
+ opacity: 0.35;
+}
+.ui.disabled.progress .bar,
+.ui.disabled.progress .bar::after {
+ animation: none !important;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*--------------
+ Inverted
+---------------*/
+
+.ui.inverted.progress {
+ background: @invertedBackground;
+ border: @invertedBorder;
+}
+.ui.inverted.progress .bar {
+ background: @invertedBarBackground;
+}
+.ui.inverted.progress .bar > .progress {
+ color: @invertedProgressColor;
+}
+.ui.inverted.progress > .label {
+ color: @invertedLabelColor;
+}
+.ui.inverted.progress.success > .label {
+ color: @successColor;
+}
+.ui.inverted.progress.warning > .label {
+ color: @warningColor;
+}
+.ui.inverted.progress.error > .label {
+ color: @errorColor;
+}
+
+/*--------------
+ Attached
+---------------*/
+
+/* bottom attached */
+.ui.progress.attached {
+ background: @attachedBackground;
+ position: relative;
+ border: none;
+ margin: 0em;
+}
+.ui.progress.attached,
+.ui.progress.attached .bar {
+ display: block;
+ height: @attachedHeight;
+ padding: 0px;
+ overflow: hidden;
+ border-radius: 0em 0em @attachedBorderRadius @attachedBorderRadius;
+}
+.ui.progress.attached .bar {
+ border-radius: 0em;
+}
+
+/* top attached */
+.ui.progress.top.attached,
+.ui.progress.top.attached .bar {
+ top: 0px;
+ border-radius: @attachedBorderRadius @attachedBorderRadius 0em 0em;
+}
+.ui.progress.top.attached .bar {
+ border-radius: 0em;
+}
+
+/* Coupling */
+.ui.segment > .ui.attached.progress,
+.ui.card > .ui.attached.progress {
+ position: absolute;
+ top: auto;
+ left: 0;
+ bottom: 100%;
+ width: 100%;
+}
+.ui.segment > .ui.bottom.attached.progress,
+.ui.card > .ui.bottom.attached.progress {
+ top: 100%;
+ bottom: auto;
+}
+
+/*--------------
+ Colors
+---------------*/
+
+/* Red */
+.ui.red.progress .bar {
+ background-color: @red;
+}
+.ui.red.inverted.progress .bar {
+ background-color: @lightRed;
+}
+
+/* Orange */
+.ui.orange.progress .bar {
+ background-color: @orange;
+}
+.ui.orange.inverted.progress .bar {
+ background-color: @lightOrange;
+}
+
+/* Yellow */
+.ui.yellow.progress .bar {
+ background-color: @yellow;
+}
+.ui.yellow.inverted.progress .bar {
+ background-color: @lightYellow;
+}
+
+/* Olive */
+.ui.olive.progress .bar {
+ background-color: @olive;
+}
+.ui.olive.inverted.progress .bar {
+ background-color: @lightOlive;
+}
+
+/* Green */
+.ui.green.progress .bar {
+ background-color: @green;
+}
+.ui.green.inverted.progress .bar {
+ background-color: @lightGreen;
+}
+
+/* Teal */
+.ui.teal.progress .bar {
+ background-color: @teal;
+}
+.ui.teal.inverted.progress .bar {
+ background-color: @lightTeal;
+}
+
+/* Blue */
+.ui.blue.progress .bar {
+ background-color: @blue;
+}
+.ui.blue.inverted.progress .bar {
+ background-color: @lightBlue;
+}
+
+/* Violet */
+.ui.violet.progress .bar {
+ background-color: @violet;
+}
+.ui.violet.inverted.progress .bar {
+ background-color: @lightViolet;
+}
+
+/* Purple */
+.ui.purple.progress .bar {
+ background-color: @purple;
+}
+.ui.purple.inverted.progress .bar {
+ background-color: @lightPurple;
+}
+
+/* Pink */
+.ui.pink.progress .bar {
+ background-color: @pink;
+}
+.ui.pink.inverted.progress .bar {
+ background-color: @lightPink;
+}
+
+/* Brown */
+.ui.brown.progress .bar {
+ background-color: @brown;
+}
+.ui.brown.inverted.progress .bar {
+ background-color: @lightBrown;
+}
+
+/* Grey */
+.ui.grey.progress .bar {
+ background-color: @grey;
+}
+.ui.grey.inverted.progress .bar {
+ background-color: @lightGrey;
+}
+
+/* Black */
+.ui.black.progress .bar {
+ background-color: @black;
+}
+.ui.black.inverted.progress .bar {
+ background-color: @lightBlack;
+}
+
+/*--------------
+ Sizes
+---------------*/
+
+.ui.tiny.progress {
+ font-size: @tiny;
+}
+.ui.tiny.progress .bar {
+ height: @tinyBarHeight;
+}
+
+.ui.small.progress {
+ font-size: @small;
+}
+.ui.small.progress .bar {
+ height: @smallBarHeight;
+}
+
+.ui.progress {
+ font-size: @medium;
+}
+.ui.progress .bar {
+ height: @barHeight;
+}
+
+.ui.large.progress {
+ font-size: @large;
+}
+.ui.large.progress .bar {
+ height: @largeBarHeight;
+}
+
+.ui.big.progress {
+ font-size: @big;
+}
+.ui.big.progress .bar {
+ height: @bigBarHeight;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/rating.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/rating.js b/semantic/src/definitions/modules/rating.js
new file mode 100644
index 0000000..1affce2
--- /dev/null
+++ b/semantic/src/definitions/modules/rating.js
@@ -0,0 +1,508 @@
+/*!
+ * # Semantic UI - Rating
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.rating = function(parameters) {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.rating.settings, parameters)
+ : $.extend({}, $.fn.rating.settings),
+
+ namespace = settings.namespace,
+ className = settings.className,
+ metadata = settings.metadata,
+ selector = settings.selector,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ element = this,
+ instance = $(this).data(moduleNamespace),
+
+ $module = $(this),
+ $icon = $module.find(selector.icon),
+
+ initialLoad,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.verbose('Initializing rating module', settings);
+
+ if($icon.length === 0) {
+ module.setup.layout();
+ }
+
+ if(settings.interactive) {
+ module.enable();
+ }
+ else {
+ module.disable();
+ }
+ module.set.initialLoad();
+ module.set.rating( module.get.initialRating() );
+ module.remove.initialLoad();
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Instantiating module', settings);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous instance', instance);
+ module.remove.events();
+ $module
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ refresh: function() {
+ $icon = $module.find(selector.icon);
+ },
+
+ setup: {
+ layout: function() {
+ var
+ maxRating = module.get.maxRating(),
+ html = $.fn.rating.settings.templates.icon(maxRating)
+ ;
+ module.debug('Generating icon html dynamically');
+ $module
+ .html(html)
+ ;
+ module.refresh();
+ }
+ },
+
+ event: {
+ mouseenter: function() {
+ var
+ $activeIcon = $(this)
+ ;
+ $activeIcon
+ .nextAll()
+ .removeClass(className.selected)
+ ;
+ $module
+ .addClass(className.selected)
+ ;
+ $activeIcon
+ .addClass(className.selected)
+ .prevAll()
+ .addClass(className.selected)
+ ;
+ },
+ mouseleave: function() {
+ $module
+ .removeClass(className.selected)
+ ;
+ $icon
+ .removeClass(className.selected)
+ ;
+ },
+ click: function() {
+ var
+ $activeIcon = $(this),
+ currentRating = module.get.rating(),
+ rating = $icon.index($activeIcon) + 1,
+ canClear = (settings.clearable == 'auto')
+ ? ($icon.length === 1)
+ : settings.clearable
+ ;
+ if(canClear && currentRating == rating) {
+ module.clearRating();
+ }
+ else {
+ module.set.rating( rating );
+ }
+ }
+ },
+
+ clearRating: function() {
+ module.debug('Clearing current rating');
+ module.set.rating(0);
+ },
+
+ bind: {
+ events: function() {
+ module.verbose('Binding events');
+ $module
+ .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)
+ .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)
+ .on('click' + eventNamespace, selector.icon, module.event.click)
+ ;
+ }
+ },
+
+ remove: {
+ events: function() {
+ module.verbose('Removing events');
+ $module
+ .off(eventNamespace)
+ ;
+ },
+ initialLoad: function() {
+ initialLoad = false;
+ }
+ },
+
+ enable: function() {
+ module.debug('Setting rating to interactive mode');
+ module.bind.events();
+ $module
+ .removeClass(className.disabled)
+ ;
+ },
+
+ disable: function() {
+ module.debug('Setting rating to read-only mode');
+ module.remove.events();
+ $module
+ .addClass(className.disabled)
+ ;
+ },
+
+ is: {
+ initialLoad: function() {
+ return initialLoad;
+ }
+ },
+
+ get: {
+ initialRating: function() {
+ if($module.data(metadata.rating) !== undefined) {
+ $module.removeData(metadata.rating);
+ return $module.data(metadata.rating);
+ }
+ return settings.initialRating;
+ },
+ maxRating: function() {
+ if($module.data(metadata.maxRating) !== undefined) {
+ $module.removeData(metadata.maxRating);
+ return $module.data(metadata.maxRating);
+ }
+ return settings.maxRating;
+ },
+ rating: function() {
+ var
+ currentRating = $icon.filter('.' + className.active).length
+ ;
+ module.verbose('Current rating retrieved', currentRating);
+ return currentRating;
+ }
+ },
+
+ set: {
+ rating: function(rating) {
+ var
+ ratingIndex = (rating - 1 >= 0)
+ ? (rating - 1)
+ : 0,
+ $activeIcon = $icon.eq(ratingIndex)
+ ;
+ $module
+ .removeClass(className.selected)
+ ;
+ $icon
+ .removeClass(className.selected)
+ .removeClass(className.active)
+ ;
+ if(rating > 0) {
+ module.verbose('Setting current rating to', rating);
+ $activeIcon
+ .prevAll()
+ .addBack()
+ .addClass(className.active)
+ ;
+ }
+ if(!module.is.initialLoad()) {
+ settings.onRate.call(element, rating);
+ }
+ },
+ initialLoad: function() {
+ initialLoad = true;
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.rating.settings = {
+
+ name : 'Rating',
+ namespace : 'rating',
+
+ slent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ initialRating : 0,
+ interactive : true,
+ maxRating : 4,
+ clearable : 'auto',
+
+ fireOnInit : false,
+
+ onRate : function(rating){},
+
+ error : {
+ method : 'The method you called is not defined',
+ noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'
+ },
+
+
+ metadata: {
+ rating : 'rating',
+ maxRating : 'maxRating'
+ },
+
+ className : {
+ active : 'active',
+ disabled : 'disabled',
+ selected : 'selected',
+ loading : 'loading'
+ },
+
+ selector : {
+ icon : '.icon'
+ },
+
+ templates: {
+ icon: function(maxRating) {
+ var
+ icon = 1,
+ html = ''
+ ;
+ while(icon <= maxRating) {
+ html += '<i class="icon"></i>';
+ icon++;
+ }
+ return html;
+ }
+ }
+
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/rating.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/rating.less b/semantic/src/definitions/modules/rating.less
new file mode 100755
index 0000000..b82667c
--- /dev/null
+++ b/semantic/src/definitions/modules/rating.less
@@ -0,0 +1,191 @@
+/*!
+ * # Semantic UI - Rating
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'rating';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Rating
+*******************************/
+
+.ui.rating {
+ display: inline-flex;
+ white-space: @whiteSpace;
+ vertical-align: @verticalAlign;
+}
+.ui.rating:last-child {
+ margin-right: 0em;
+}
+
+/* Icon */
+.ui.rating .icon {
+ padding: 0em;
+ margin: 0em;
+ text-align: center;
+ font-weight: normal;
+ font-style: normal;
+ flex: 1 0 auto;
+ cursor: @iconCursor;
+ width: @iconWidth;
+ height: @iconHeight;
+ transition: @iconTransition;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+
+/*-------------------
+ Standard
+--------------------*/
+
+/* Inactive Icon */
+.ui.rating .icon {
+ background: @inactiveBackground;
+ color: @inactiveColor;
+}
+
+/* Active Icon */
+.ui.rating .active.icon {
+ background: @activeBackground;
+ color: @activeColor;
+}
+
+/* Selected Icon */
+.ui.rating .icon.selected,
+.ui.rating .icon.selected.active {
+ background: @selectedBackground;
+ color: @selectedColor;
+}
+
+
+/*-------------------
+ Star
+--------------------*/
+
+/* Inactive */
+.ui.star.rating .icon {
+ width: @starIconWidth;
+ height: @starIconHeight;
+ background: @starInactiveBackground;
+ color: @starInactiveColor;
+ text-shadow: @starInactiveTextShadow;
+}
+
+/* Active Star */
+.ui.star.rating .active.icon {
+ background: @starActiveBackground !important;
+ color: @starActiveColor !important;
+ text-shadow: @starActiveTextShadow !important;
+}
+
+/* Selected Star */
+.ui.star.rating .icon.selected,
+.ui.star.rating .icon.selected.active {
+ background: @starSelectedBackground !important;
+ color: @starSelectedColor !important;
+ text-shadow: @starSelectedTextShadow !important;
+}
+
+
+/*-------------------
+ Heart
+--------------------*/
+
+.ui.heart.rating .icon {
+ width: @heartIconWidth;
+ height: @heartIconHeight;
+ background: @heartInactiveBackground;
+ color: @heartInactiveColor;
+ text-shadow: @heartInactiveTextShadow !important;
+}
+
+/* Active Heart */
+.ui.heart.rating .active.icon {
+ background: @heartActiveBackground !important;
+ color: @heartActiveColor !important;
+ text-shadow: @heartActiveTextShadow !important;
+}
+
+/* Selected Heart */
+.ui.heart.rating .icon.selected,
+.ui.heart.rating .icon.selected.active {
+ background: @heartSelectedBackground !important;
+ color: @heartSelectedColor !important;
+ text-shadow: @heartSelectedTextShadow !important;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*-------------------
+ Disabled
+--------------------*/
+
+/* disabled rating */
+.ui.disabled.rating .icon {
+ cursor: default;
+}
+
+
+/*-------------------
+ User Interactive
+--------------------*/
+
+/* Selected Rating */
+.ui.rating.selected .active.icon {
+ opacity: @interactiveActiveIconOpacity;
+}
+.ui.rating.selected .icon.selected,
+.ui.rating .icon.selected {
+ opacity: @interactiveSelectedIconOpacity;
+}
+
+
+
+/*******************************
+ Variations
+*******************************/
+
+.ui.mini.rating {
+ font-size: @mini;
+}
+.ui.tiny.rating {
+ font-size: @tiny;
+}
+.ui.small.rating {
+ font-size: @small;
+}
+.ui.rating {
+ font-size: @medium;
+}
+.ui.large.rating {
+ font-size: @large;
+}
+.ui.huge.rating {
+ font-size: @huge;
+}
+.ui.massive.rating {
+ font-size: @massive;
+}
+
+
+.loadUIOverrides();
[26/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/dimmer.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/dimmer.variables b/semantic/src/site/modules/dimmer.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/dimmer.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/dropdown.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/dropdown.overrides b/semantic/src/site/modules/dropdown.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/dropdown.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/dropdown.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/dropdown.variables b/semantic/src/site/modules/dropdown.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/dropdown.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/embed.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/embed.overrides b/semantic/src/site/modules/embed.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/embed.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/embed.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/embed.variables b/semantic/src/site/modules/embed.variables
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/modal.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/modal.overrides b/semantic/src/site/modules/modal.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/modal.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/modal.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/modal.variables b/semantic/src/site/modules/modal.variables
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/modal.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/nag.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/nag.overrides b/semantic/src/site/modules/nag.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/nag.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/nag.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/nag.variables b/semantic/src/site/modules/nag.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/nag.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/popup.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/popup.overrides b/semantic/src/site/modules/popup.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/popup.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/popup.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/popup.variables b/semantic/src/site/modules/popup.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/popup.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/progress.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/progress.overrides b/semantic/src/site/modules/progress.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/progress.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/progress.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/progress.variables b/semantic/src/site/modules/progress.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/progress.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/rating.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/rating.overrides b/semantic/src/site/modules/rating.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/rating.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/rating.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/rating.variables b/semantic/src/site/modules/rating.variables
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/rating.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/search.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/search.overrides b/semantic/src/site/modules/search.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/search.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/search.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/search.variables b/semantic/src/site/modules/search.variables
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/search.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/shape.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/shape.overrides b/semantic/src/site/modules/shape.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/shape.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/shape.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/shape.variables b/semantic/src/site/modules/shape.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/shape.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/sidebar.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/sidebar.overrides b/semantic/src/site/modules/sidebar.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/sidebar.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/sidebar.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/sidebar.variables b/semantic/src/site/modules/sidebar.variables
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/sidebar.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/sticky.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/sticky.overrides b/semantic/src/site/modules/sticky.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/sticky.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/sticky.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/sticky.variables b/semantic/src/site/modules/sticky.variables
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/sticky.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/tab.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/tab.overrides b/semantic/src/site/modules/tab.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/tab.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/tab.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/tab.variables b/semantic/src/site/modules/tab.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/tab.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/transition.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/transition.overrides b/semantic/src/site/modules/transition.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/transition.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/transition.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/transition.variables b/semantic/src/site/modules/transition.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/transition.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/ad.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/ad.overrides b/semantic/src/site/views/ad.overrides
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/ad.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/ad.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/ad.variables b/semantic/src/site/views/ad.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/ad.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/card.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/card.overrides b/semantic/src/site/views/card.overrides
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/card.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/card.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/card.variables b/semantic/src/site/views/card.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/card.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/comment.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/comment.overrides b/semantic/src/site/views/comment.overrides
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/comment.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/comment.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/comment.variables b/semantic/src/site/views/comment.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/comment.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/feed.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/feed.overrides b/semantic/src/site/views/feed.overrides
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/feed.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/feed.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/feed.variables b/semantic/src/site/views/feed.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/feed.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/item.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/item.overrides b/semantic/src/site/views/item.overrides
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/item.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/item.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/item.variables b/semantic/src/site/views/item.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/item.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/statistic.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/statistic.overrides b/semantic/src/site/views/statistic.overrides
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/statistic.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/views/statistic.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/views/statistic.variables b/semantic/src/site/views/statistic.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/views/statistic.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/theme.config
----------------------------------------------------------------------
diff --git a/semantic/src/theme.config b/semantic/src/theme.config
new file mode 100644
index 0000000..d2bc3bb
--- /dev/null
+++ b/semantic/src/theme.config
@@ -0,0 +1,92 @@
+/*
+
+\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
+\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d
+ \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
+ \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551\u255a\u2588\u2588\u2554\u255d\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551
+ \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255a\u2550\u255d \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551
+ \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d
+
+*/
+
+/*******************************
+ Theme Selection
+*******************************/
+
+/* To override a theme for an individual element
+ specify theme name below
+*/
+
+/* Global */
+@site : 'default';
+@reset : 'default';
+
+/* Elements */
+@button : 'default';
+@container : 'default';
+@divider : 'default';
+@flag : 'default';
+@header : 'default';
+@icon : 'default';
+@image : 'default';
+@input : 'default';
+@label : 'default';
+@list : 'default';
+@loader : 'default';
+@rail : 'default';
+@reveal : 'default';
+@segment : 'default';
+@step : 'default';
+
+/* Collections */
+@breadcrumb : 'default';
+@form : 'default';
+@grid : 'default';
+@menu : 'default';
+@message : 'default';
+@table : 'default';
+
+/* Modules */
+@accordion : 'default';
+@checkbox : 'default';
+@dimmer : 'default';
+@dropdown : 'default';
+@embed : 'default';
+@modal : 'default';
+@nag : 'default';
+@popup : 'default';
+@progress : 'default';
+@rating : 'default';
+@search : 'default';
+@shape : 'default';
+@sidebar : 'default';
+@sticky : 'default';
+@tab : 'default';
+@transition : 'default';
+
+/* Views */
+@ad : 'default';
+@card : 'default';
+@comment : 'default';
+@feed : 'default';
+@item : 'default';
+@statistic : 'default';
+
+/*******************************
+ Folders
+*******************************/
+
+/* Path to theme packages */
+@themesFolder : 'themes';
+
+/* Path to site override folder */
+@siteFolder : 'site/';
+
+
+/*******************************
+ Import Theme
+*******************************/
+
+@import "theme.less";
+
+/* End Config */
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/theme.less
----------------------------------------------------------------------
diff --git a/semantic/src/theme.less b/semantic/src/theme.less
new file mode 100644
index 0000000..aeb092d
--- /dev/null
+++ b/semantic/src/theme.less
@@ -0,0 +1,61 @@
+/*******************************
+ Import Directives
+*******************************/
+
+/*------------------
+ Theme
+-------------------*/
+
+@theme: @@element;
+
+/*--------------------
+ Site Variables
+---------------------*/
+
+/* Default site.variables */
+@import "@{themesFolder}/default/globals/site.variables";
+
+/* Packaged site.variables */
+@import "@{themesFolder}/@{site}/globals/site.variables";
+
+/* Component's site.variables */
+@import (optional) "@{themesFolder}/@{theme}/globals/site.variables";
+
+/* Site theme site.variables */
+@import (optional) "@{siteFolder}/globals/site.variables";
+
+
+/*-------------------
+ Component Variables
+---------------------*/
+
+/* Default */
+@import "@{themesFolder}/default/@{type}s/@{element}.variables";
+
+/* Packaged Theme */
+@import (optional) "@{themesFolder}/@{theme}/@{type}s/@{element}.variables";
+
+/* Site Theme */
+@import (optional) "@{siteFolder}/@{type}s/@{element}.variables";
+
+
+/*******************************
+ Mix-ins
+*******************************/
+
+/*------------------
+ Fonts
+-------------------*/
+
+.loadFonts() when (@importGoogleFonts) {
+ @import url('@{googleProtocol}fonts.googleapis.com/css?family=@{googleFontRequest}');
+}
+
+/*------------------
+ Overrides
+-------------------*/
+
+.loadUIOverrides() {
+ @import (optional) "@{themesFolder}/@{theme}/@{type}s/@{element}.overrides";
+ @import (optional) "@{siteFolder}/@{type}s/@{element}.overrides";
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/amazon/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/amazon/elements/button.overrides b/semantic/src/themes/amazon/elements/button.overrides
new file mode 100644
index 0000000..9efc5e4
--- /dev/null
+++ b/semantic/src/themes/amazon/elements/button.overrides
@@ -0,0 +1,46 @@
+.ui.button {
+ background-image: linear-gradient(center top , #F7F8FA, #E7E9EC) repeat scroll 0 0 rgba(0, 0, 0, 0);
+}
+
+.ui.primary.button {
+ color: #111111;
+ border: 1px solid;
+ border-color: #C59F43 #AA8326 #957321;
+}
+.ui.primary.button:hover {
+ border-color: #C59F43 #AA8326 #957321;
+ color: #111111;
+}
+
+.ui.secondary.button {
+ border: 1px solid;
+ border-color: #3D444C #2F353B #2C3137;
+}
+.ui.secondary.button:hover {
+ border-color: #32373E #24282D #212429;
+}
+
+
+.ui.labeled.icon.buttons .button > .icon,
+.ui.labeled.icon.button > .icon {
+ padding-bottom: 0.48em;
+ padding-top: 0.48em;
+ position: absolute;
+ text-align: center;
+ width: 2em;
+ height: 2em;
+ top: 0.35em;
+ left: 0.4em;
+ border-radius: 3px;
+}
+.ui.right.labeled.icon.buttons .button > .icon,
+.ui.right.labeled.icon.button > .icon {
+ left: auto;
+ right: 0.4em;
+ border-radius: 3px;
+}
+
+.ui.basic.labeled.icon.buttons .button > .icon,
+.ui.basic.labeled.icon.button > .icon {
+ padding-top: 0.4em !important;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/amazon/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/amazon/elements/button.variables b/semantic/src/themes/amazon/elements/button.variables
new file mode 100644
index 0000000..d4762a3
--- /dev/null
+++ b/semantic/src/themes/amazon/elements/button.variables
@@ -0,0 +1,58 @@
+/*-------------------
+ Button Variables
+--------------------*/
+
+/* Button Variables */
+@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;
+@textTransform: none;
+@textColor: #111111;
+@fontWeight: normal;
+@transition:
+ opacity @defaultDuration @defaultEasing,
+ background-color @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing,
+ background @defaultDuration @defaultEasing
+;
+
+@hoverBackgroundColor: #E0E0E0;
+
+@borderRadius: 3px;
+@verticalPadding: 0.8em;
+@horizontalPadding: 1.75em;
+
+@backgroundColor: #F7F8FA;
+@backgroundImage: linear-gradient(rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.1));
+@boxShadow:
+ 0 1px 0 1px rgba(255, 255, 255, 0.3) inset,
+ 0 0 0 1px #ADB2BB inset
+;
+
+@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0.2));
+@coloredBoxShadow:
+ 0px 1px 0px 0px rgba(255, 255, 255, 0.2) inset
+;
+
+@downBoxShadow:
+ 0 0 0 1px #ADB2BB inset,
+ 0 1px 3px rgba(0, 0, 0, 0.2) inset
+;
+
+@labeledIconBackgroundColor: #313A43;
+@labeledIconColor: #FFFFFF;
+@labeledIconBorder: transparent;
+
+@black: #444C55;
+@orange: #F4CC67;
+
+@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.1));
+@primaryColor: @orange;
+@secondaryColor: @black;
+
+@mini: 10px;
+@tiny: 11px;
+@small: 12px;
+@medium: 13px;
+@large: 14px;
+@big: 16px;
+@huge: 18px;
+@massive: 22px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/amazon/globals/site.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/amazon/globals/site.variables b/semantic/src/themes/amazon/globals/site.variables
new file mode 100644
index 0000000..add8426
--- /dev/null
+++ b/semantic/src/themes/amazon/globals/site.variables
@@ -0,0 +1,43 @@
+/*******************************
+ User Global Variables
+*******************************/
+
+@pageMinWidth : 1049px;
+@pageOverflowX : visible;
+
+@emSize: 13px;
+@fontSize : 13px;
+@fontName : 'Arial';
+@importGoogleFonts : false;
+
+@h1: 2.25em;
+
+@defaultBorderRadius: 0.30769em; /* 4px @ 13em */
+
+@disabledOpacity: 0.3;
+
+@black: #444C55;
+@orange: #FDE07B;
+
+@linkColor: #0066C0;
+@linkHoverColor: #C45500;
+@linkHoverUnderline: underline;
+
+@borderColor: rgba(0, 0, 0, 0.13);
+@solidBorderColor: #DDDDDD;
+@internalBorderColor: rgba(0, 0, 0, 0.06);
+@selectedBorderColor: #51A7E8;
+
+/* Breakpoints */
+@largeMonitorBreakpoint: 1049px;
+@computerBreakpoint: @largeMonitorBreakpoint;
+@tabletBreakpoint: @largeMonitorBreakpoint;
+
+/* Colors */
+@blue: #80A6CD;
+@green: #60B044;
+@orange: #D26911;
+
+
+@infoBackgroundColor: #E6F1F6;
+@infoTextColor: #4E575B;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/assets/fonts/icons.eot
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/assets/fonts/icons.eot b/semantic/src/themes/basic/assets/fonts/icons.eot
new file mode 100644
index 0000000..25066de
Binary files /dev/null and b/semantic/src/themes/basic/assets/fonts/icons.eot differ
[21/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/icon.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/icon.overrides b/semantic/src/themes/default/elements/icon.overrides
new file mode 100644
index 0000000..e88e235
--- /dev/null
+++ b/semantic/src/themes/default/elements/icon.overrides
@@ -0,0 +1,942 @@
+/*
+ * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+/*******************************
+
+Semantic-UI integration of font-awesome :
+
+///class names are separated
+i.icon.circle => i.icon.circle
+i.icon.circle-o => i.icon.circle.outline
+
+//abbreviation are replaced by full letters:
+i.icon.ellipsis-h => i.icon.ellipsis.horizontal
+i.icon.ellipsis-v => i.icon.ellipsis.vertical
+.alpha => .i.icon.alphabet
+.asc => .i.icon.ascending
+.desc => .i.icon.descending
+.alt =>.alternate
+
+ASCII order is conserved for easier maintenance.
+
+Icons that only have one style 'outline', 'square' etc do not require this class
+for instance `lemon icon` not `lemon outline icon` since there is only one lemon
+
+*******************************/
+
+/*******************************
+ Icons
+*******************************/
+
+/* Web Content */
+i.icon.search:before { content: "\f002"; }
+i.icon.mail.outline:before { content: "\f003"; }
+i.icon.signal:before { content: "\f012"; }
+i.icon.setting:before { content: "\f013"; }
+i.icon.home:before { content: "\f015"; }
+i.icon.inbox:before { content: "\f01c"; }
+i.icon.browser:before { content: "\f022"; }
+i.icon.tag:before { content: "\f02b"; }
+i.icon.tags:before { content: "\f02c"; }
+i.icon.image:before { content: "\f03e"; }
+i.icon.calendar:before { content: "\f073"; }
+i.icon.comment:before { content: "\f075"; }
+i.icon.shop:before { content: "\f07a"; }
+i.icon.comments:before { content: "\f086"; }
+i.icon.external:before { content: "\f08e"; }
+i.icon.privacy:before { content: "\f084"; }
+i.icon.settings:before { content: "\f085"; }
+i.icon.comments:before { content: "\f086"; }
+i.icon.external:before { content: "\f08e"; }
+i.icon.trophy:before { content: "\f091"; }
+i.icon.payment:before { content: "\f09d"; }
+i.icon.feed:before { content: "\f09e"; }
+i.icon.alarm.outline:before { content: "\f0a2"; }
+i.icon.tasks:before { content: "\f0ae"; }
+i.icon.cloud:before { content: "\f0c2"; }
+i.icon.lab:before { content: "\f0c3"; }
+i.icon.mail:before { content: "\f0e0"; }
+i.icon.dashboard:before { content: "\f0e4"; }
+i.icon.comment.outline:before { content: "\f0e5"; }
+i.icon.comments.outline:before { content: "\f0e6"; }
+i.icon.sitemap:before { content: "\f0e8"; }
+i.icon.idea:before { content: "\f0eb"; }
+i.icon.alarm:before { content: "\f0f3"; }
+i.icon.terminal:before { content: "\f120"; }
+i.icon.code:before { content: "\f121"; }
+i.icon.protect:before { content: "\f132"; }
+i.icon.calendar.outline:before { content: "\f133"; }
+i.icon.ticket:before { content: "\f145"; }
+i.icon.external.square:before { content: "\f14c"; }
+i.icon.bug:before { content: "\f188"; }
+i.icon.mail.square:before { content: "\f199"; }
+i.icon.history:before { content: "\f1da"; }
+i.icon.options:before { content: "\f1de"; }
+i.icon.text.telephone:before { content: "\f1e4"; }
+i.icon.find:before { content: "\f1e5"; }
+i.icon.wifi:before { content: "\f1eb"; }
+i.icon.alarm.mute:before { content: "\f1f6"; }
+i.icon.alarm.mute.outline:before { content: "\f1f7"; }
+i.icon.copyright:before { content: "\f1f9"; }
+i.icon.at:before { content: "\f1fa"; }
+i.icon.eyedropper:before { content: "\f1fb"; }
+i.icon.paint.brush:before { content: "\f1fc"; }
+i.icon.heartbeat:before { content: "\f21e"; }
+i.icon.mouse.pointer:before { content: "\f245"; }
+i.icon.hourglass.empty:before { content: "\f250"; }
+i.icon.hourglass.start:before { content: "\f251"; }
+i.icon.hourglass.half:before { content: "\f252"; }
+i.icon.hourglass.end:before { content: "\f253"; }
+i.icon.hourglass.full:before { content: "\f254"; }
+i.icon.hand.pointer:before { content: "\f25a"; }
+i.icon.trademark:before { content: "\f25c"; }
+i.icon.registered:before { content: "\f25d"; }
+i.icon.creative.commons:before { content: "\f25e"; }
+i.icon.add.to.calendar:before { content: "\f271"; }
+i.icon.remove.from.calendar:before { content: "\f272"; }
+i.icon.delete.calendar:before { content: "\f273"; }
+i.icon.checked.calendar:before { content: "\f274"; }
+i.icon.industry:before { content: "\f275"; }
+i.icon.shopping.bag:before { content: "\f290"; }
+i.icon.shopping.basket:before { content: "\f291"; }
+i.icon.hashtag:before { content: "\f292"; }
+i.icon.percent:before { content: "\f295"; }
+
+/* User Actions */
+i.icon.wait:before { content: "\f017"; }
+i.icon.download:before { content: "\f019"; }
+i.icon.repeat:before { content: "\f01e"; }
+i.icon.refresh:before { content: "\f021"; }
+i.icon.lock:before { content: "\f023"; }
+i.icon.bookmark:before { content: "\f02e"; }
+i.icon.print:before { content: "\f02f"; }
+i.icon.write:before { content: "\f040"; }
+i.icon.adjust:before { content: "\f042"; }
+i.icon.theme:before { content: "\f043"; }
+i.icon.edit:before { content: "\f044"; }
+i.icon.external.share:before { content: "\f045"; }
+i.icon.ban:before { content: "\f05e"; }
+i.icon.mail.forward:before { content: "\f064"; }
+i.icon.share:before { content: "\f064"; }
+i.icon.expand:before { content: "\f065"; }
+i.icon.compress:before { content: "\f066"; }
+i.icon.unhide:before { content: "\f06e"; }
+i.icon.hide:before { content: "\f070"; }
+i.icon.random:before { content: "\f074"; }
+i.icon.retweet:before { content: "\f079"; }
+i.icon.sign.out:before { content: "\f08b"; }
+i.icon.pin:before { content: "\f08d"; }
+i.icon.sign.in:before { content: "\f090"; }
+i.icon.upload:before { content: "\f093"; }
+i.icon.call:before { content: "\f095"; }
+i.icon.remove.bookmark:before { content: "\f097"; }
+i.icon.call.square:before { content: "\f098"; }
+i.icon.unlock:before { content: "\f09c"; }
+i.icon.configure:before { content: "\f0ad"; }
+i.icon.filter:before { content: "\f0b0"; }
+i.icon.wizard:before { content: "\f0d0"; }
+i.icon.undo:before { content: "\f0e2"; }
+i.icon.exchange:before { content: "\f0ec"; }
+i.icon.cloud.download:before { content: "\f0ed"; }
+i.icon.cloud.upload:before { content: "\f0ee"; }
+i.icon.reply:before { content: "\f112"; }
+i.icon.reply.all:before { content: "\f122"; }
+i.icon.erase:before { content: "\f12d"; }
+i.icon.unlock.alternate:before { content: "\f13e"; }
+i.icon.write.square:before { content: "\f14b"; }
+i.icon.share.square:before { content: "\f14d"; }
+i.icon.archive:before { content: "\f187"; }
+i.icon.translate:before { content: "\f1ab"; }
+i.icon.recycle:before { content: "\f1b8"; }
+i.icon.send:before { content: "\f1d8"; }
+i.icon.send.outline:before { content: "\f1d9"; }
+i.icon.share.alternate:before { content: "\f1e0"; }
+i.icon.share.alternate.square:before { content: "\f1e1"; }
+i.icon.add.to.cart:before { content: "\f217"; }
+i.icon.in.cart:before { content: "\f218"; }
+i.icon.add.user:before { content: "\f234"; }
+i.icon.remove.user:before { content: "\f235"; }
+i.icon.object.group:before { content: "\f247"; }
+i.icon.object.ungroup:before { content: "\f248"; }
+i.icon.clone:before { content: "\f24d"; }
+i.icon.talk:before { content: "\f27a"; }
+i.icon.talk.outline:before { content: "\f27b"; }
+
+/* Messages */
+i.icon.help.circle:before { content: "\f059"; }
+i.icon.info.circle:before { content: "\f05a"; }
+i.icon.warning.circle:before { content: "\f06a"; }
+i.icon.warning.sign:before { content: "\f071"; }
+i.icon.announcement:before { content: "\f0a1"; }
+i.icon.help:before { content: "\f128"; }
+i.icon.info:before { content: "\f129"; }
+i.icon.warning:before { content: "\f12a"; }
+i.icon.birthday:before { content: "\f1fd"; }
+i.icon.help.circle.outline:before { content: "\f29c"; }
+
+/* Users */
+i.icon.user:before { content: "\f007"; }
+i.icon.users:before { content: "\f0c0"; }
+i.icon.doctor:before { content: "\f0f0"; }
+i.icon.handicap:before { content: "\f193"; }
+i.icon.student:before { content: "\f19d"; }
+i.icon.child:before { content: "\f1ae"; }
+i.icon.spy:before { content: "\f21b"; }
+
+/* Gender & Sexuality */
+i.icon.female:before { content: "\f182"; }
+i.icon.male:before { content: "\f183"; }
+i.icon.woman:before { content: "\f221"; }
+i.icon.man:before { content: "\f222"; }
+i.icon.non.binary.transgender:before { content: "\f223"; }
+i.icon.intergender:before { content: "\f224"; }
+i.icon.transgender:before { content: "\f225"; }
+i.icon.lesbian:before { content: "\f226"; }
+i.icon.gay:before { content: "\f227"; }
+i.icon.heterosexual:before { content: "\f228"; }
+i.icon.other.gender:before { content: "\f229"; }
+i.icon.other.gender.vertical:before { content: "\f22a"; }
+i.icon.other.gender.horizontal:before { content: "\f22b"; }
+i.icon.neuter:before { content: "\f22c"; }
+i.icon.genderless:before { content: "\f22d"; }
+
+/* Accessibility */
+i.icon.universal.access:before { content: "\f29a"; }
+i.icon.wheelchair:before { content: "\f29b"; }
+i.icon.blind:before { content: "\f29d"; }
+i.icon.audio.description:before { content: "\f29e"; }
+i.icon.volume.control.phone:before { content: "\f2a0"; }
+i.icon.braille:before { content: "\f2a1"; }
+i.icon.asl:before { content: "\f2a3"; }
+i.icon.assistive.listening.systems:before { content: "\f2a2"; }
+i.icon.deafness:before { content: "\f2a4"; }
+i.icon.sign.language:before { content: "\f2a7"; }
+i.icon.low.vision:before { content: "\f2a8"; }
+
+/* View Adjustment */
+i.icon.block.layout:before { content: "\f009"; }
+i.icon.grid.layout:before { content: "\f00a"; }
+i.icon.list.layout:before { content: "\f00b"; }
+i.icon.zoom:before { content: "\f00e"; }
+i.icon.zoom.out:before { content: "\f010"; }
+i.icon.resize.vertical:before { content: "\f07d"; }
+i.icon.resize.horizontal:before { content: "\f07e"; }
+i.icon.maximize:before { content: "\f0b2"; }
+i.icon.crop:before { content: "\f125"; }
+
+/* Literal Objects */
+i.icon.cocktail:before { content: "\f000"; }
+i.icon.road:before { content: "\f018"; }
+i.icon.flag:before { content: "\f024"; }
+i.icon.book:before { content: "\f02d"; }
+i.icon.gift:before { content: "\f06b"; }
+i.icon.leaf:before { content: "\f06c"; }
+i.icon.fire:before { content: "\f06d"; }
+i.icon.plane:before { content: "\f072"; }
+i.icon.magnet:before { content: "\f076"; }
+i.icon.lemon:before { content: "\f094"; }
+i.icon.world:before { content: "\f0ac"; }
+i.icon.travel:before { content: "\f0b1"; }
+i.icon.shipping:before { content: "\f0d1"; }
+i.icon.money:before { content: "\f0d6"; }
+i.icon.legal:before { content: "\f0e3"; }
+i.icon.lightning:before { content: "\f0e7"; }
+i.icon.umbrella:before { content: "\f0e9"; }
+i.icon.treatment:before { content: "\f0f1"; }
+i.icon.suitcase:before { content: "\f0f2"; }
+i.icon.bar:before { content: "\f0fc"; }
+i.icon.flag.outline:before { content: "\f11d"; }
+i.icon.flag.checkered:before { content: "\f11e"; }
+i.icon.puzzle:before { content: "\f12e"; }
+i.icon.fire.extinguisher:before { content: "\f134"; }
+i.icon.rocket:before { content: "\f135"; }
+i.icon.anchor:before { content: "\f13d"; }
+i.icon.bullseye:before { content: "\f140"; }
+i.icon.sun:before { content: "\f185"; }
+i.icon.moon:before { content: "\f186"; }
+i.icon.fax:before { content: "\f1ac"; }
+i.icon.life.ring:before { content: "\f1cd"; }
+i.icon.bomb:before { content: "\f1e2"; }
+i.icon.soccer:before { content: "\f1e3"; }
+i.icon.calculator:before { content: "\f1ec"; }
+i.icon.diamond:before { content: "\f219"; }
+i.icon.sticky.note:before { content: "\f249"; }
+i.icon.sticky.note.outline:before { content: "\f24a"; }
+i.icon.law:before { content: "\f24e"; }
+i.icon.hand.peace:before { content: "\f25b"; }
+i.icon.hand.rock:before { content: "\f255"; }
+i.icon.hand.paper:before { content: "\f256"; }
+i.icon.hand.scissors:before { content: "\f257"; }
+i.icon.hand.lizard:before { content: "\f258"; }
+i.icon.hand.spock:before { content: "\f259"; }
+i.icon.tv:before { content: "\f26c"; }
+
+/* Shapes */
+i.icon.crosshairs:before { content: "\f05b"; }
+i.icon.asterisk:before { content: "\f069"; }
+i.icon.square.outline:before { content: "\f096"; }
+i.icon.certificate:before { content: "\f0a3"; }
+i.icon.square:before { content: "\f0c8"; }
+i.icon.quote.left:before { content: "\f10d"; }
+i.icon.quote.right:before { content: "\f10e"; }
+i.icon.spinner:before { content: "\f110"; }
+i.icon.circle:before { content: "\f111"; }
+i.icon.ellipsis.horizontal:before { content: "\f141"; }
+i.icon.ellipsis.vertical:before { content: "\f142"; }
+i.icon.cube:before { content: "\f1b2"; }
+i.icon.cubes:before { content: "\f1b3"; }
+i.icon.circle.notched:before { content: "\f1ce"; }
+i.icon.circle.thin:before { content: "\f1db"; }
+
+/* Item Selection */
+i.icon.checkmark:before { content: "\f00c"; }
+i.icon.remove:before { content: "\f00d"; }
+i.icon.checkmark.box:before { content: "\f046"; }
+i.icon.move:before { content: "\f047"; }
+i.icon.add.circle:before { content: "\f055"; }
+i.icon.minus.circle:before { content: "\f056"; }
+i.icon.remove.circle:before { content: "\f057"; }
+i.icon.check.circle:before { content: "\f058"; }
+i.icon.remove.circle.outline:before { content: "\f05c"; }
+i.icon.check.circle.outline:before { content: "\f05d"; }
+i.icon.plus:before { content: "\f067"; }
+i.icon.minus:before { content: "\f068"; }
+i.icon.add.square:before { content: "\f0fe"; }
+i.icon.radio:before { content: "\f10c"; }
+i.icon.minus.square:before { content: "\f146"; }
+i.icon.minus.square.outline:before { content: "\f147"; }
+i.icon.check.square:before { content: "\f14a"; }
+i.icon.selected.radio:before { content: "\f192"; }
+i.icon.plus.square.outline:before { content: "\f196"; }
+i.icon.toggle.off:before { content: "\f204"; }
+i.icon.toggle.on:before { content: "\f205"; }
+
+/* Media */
+i.icon.film:before { content: "\f008"; }
+i.icon.sound:before { content: "\f025"; }
+i.icon.photo:before { content: "\f030"; }
+i.icon.bar.chart:before { content: "\f080"; }
+i.icon.camera.retro:before { content: "\f083"; }
+i.icon.newspaper:before { content: "\f1ea"; }
+i.icon.area.chart:before { content: "\f1fe"; }
+i.icon.pie.chart:before { content: "\f200"; }
+i.icon.line.chart:before { content: "\f201"; }
+
+/* Pointers */
+i.icon.arrow.circle.outline.down:before { content: "\f01a"; }
+i.icon.arrow.circle.outline.up:before { content: "\f01b"; }
+i.icon.chevron.left:before { content: "\f053"; }
+i.icon.chevron.right:before { content: "\f054"; }
+i.icon.arrow.left:before { content: "\f060"; }
+i.icon.arrow.right:before { content: "\f061"; }
+i.icon.arrow.up:before { content: "\f062"; }
+i.icon.arrow.down:before { content: "\f063"; }
+i.icon.chevron.up:before { content: "\f077"; }
+i.icon.chevron.down:before { content: "\f078"; }
+i.icon.pointing.right:before { content: "\f0a4"; }
+i.icon.pointing.left:before { content: "\f0a5"; }
+i.icon.pointing.up:before { content: "\f0a6"; }
+i.icon.pointing.down:before { content: "\f0a7"; }
+i.icon.arrow.circle.left:before { content: "\f0a8"; }
+i.icon.arrow.circle.right:before { content: "\f0a9"; }
+i.icon.arrow.circle.up:before { content: "\f0aa"; }
+i.icon.arrow.circle.down:before { content: "\f0ab"; }
+i.icon.caret.down:before { content: "\f0d7"; }
+i.icon.caret.up:before { content: "\f0d8"; }
+i.icon.caret.left:before { content: "\f0d9"; }
+i.icon.caret.right:before { content: "\f0da"; }
+i.icon.angle.double.left:before { content: "\f100"; }
+i.icon.angle.double.right:before { content: "\f101"; }
+i.icon.angle.double.up:before { content: "\f102"; }
+i.icon.angle.double.down:before { content: "\f103"; }
+i.icon.angle.left:before { content: "\f104"; }
+i.icon.angle.right:before { content: "\f105"; }
+i.icon.angle.up:before { content: "\f106"; }
+i.icon.angle.down:before { content: "\f107"; }
+i.icon.chevron.circle.left:before { content: "\f137"; }
+i.icon.chevron.circle.right:before { content: "\f138"; }
+i.icon.chevron.circle.up:before { content: "\f139"; }
+i.icon.chevron.circle.down:before { content: "\f13a"; }
+i.icon.toggle.down:before { content: "\f150"; }
+i.icon.toggle.up:before { content: "\f151"; }
+i.icon.toggle.right:before { content: "\f152"; }
+i.icon.long.arrow.down:before { content: "\f175"; }
+i.icon.long.arrow.up:before { content: "\f176"; }
+i.icon.long.arrow.left:before { content: "\f177"; }
+i.icon.long.arrow.right:before { content: "\f178"; }
+i.icon.arrow.circle.outline.right:before { content: "\f18e"; }
+i.icon.arrow.circle.outline.left:before { content: "\f190"; }
+i.icon.toggle.left:before { content: "\f191"; }
+
+/* Mobile */
+i.icon.tablet:before { content: "\f10a"; }
+i.icon.mobile:before { content: "\f10b"; }
+i.icon.battery.full:before { content: "\f240"; }
+i.icon.battery.high:before { content: "\f241"; }
+i.icon.battery.medium:before { content: "\f242"; }
+i.icon.battery.low:before { content: "\f243"; }
+i.icon.battery.empty:before { content: "\f244"; }
+
+/* Computer */
+i.icon.power:before { content: "\f011"; }
+i.icon.trash.outline:before { content: "\f014"; }
+i.icon.disk.outline:before { content: "\f0a0"; }
+i.icon.desktop:before { content: "\f108"; }
+i.icon.laptop:before { content: "\f109"; }
+i.icon.game:before { content: "\f11b"; }
+i.icon.keyboard:before { content: "\f11c"; }
+i.icon.plug:before { content: "\f1e6"; }
+
+/* File System */
+i.icon.trash:before { content: "\f1f8"; }
+i.icon.file.outline:before { content: "\f016"; }
+i.icon.folder:before { content: "\f07b"; }
+i.icon.folder.open:before { content: "\f07c"; }
+i.icon.file.text.outline:before { content: "\f0f6"; }
+i.icon.folder.outline:before { content: "\f114"; }
+i.icon.folder.open.outline:before { content: "\f115"; }
+i.icon.level.up:before { content: "\f148"; }
+i.icon.level.down:before { content: "\f149"; }
+i.icon.file:before { content: "\f15b"; }
+i.icon.file.text:before { content: "\f15c"; }
+i.icon.file.pdf.outline:before { content: "\f1c1"; }
+i.icon.file.word.outline:before { content: "\f1c2"; }
+i.icon.file.excel.outline:before { content: "\f1c3"; }
+i.icon.file.powerpoint.outline:before { content: "\f1c4"; }
+i.icon.file.image.outline:before { content: "\f1c5"; }
+i.icon.file.archive.outline:before { content: "\f1c6"; }
+i.icon.file.audio.outline:before { content: "\f1c7"; }
+i.icon.file.video.outline:before { content: "\f1c8"; }
+i.icon.file.code.outline:before { content: "\f1c9"; }
+
+/* Technologies */
+i.icon.qrcode:before { content: "\f029"; }
+i.icon.barcode:before { content: "\f02a"; }
+i.icon.rss:before { content: "\f09e"; }
+i.icon.fork:before { content: "\f126"; }
+i.icon.html5:before { content: "\f13b"; }
+i.icon.css3:before { content: "\f13c"; }
+i.icon.rss.square:before { content: "\f143"; }
+i.icon.openid:before { content: "\f19b"; }
+i.icon.database:before { content: "\f1c0"; }
+i.icon.server:before { content: "\f233"; }
+i.icon.usb:before { content: "\f287"; }
+i.icon.bluetooth:before { content: "\f293"; }
+i.icon.bluetooth.alternative:before { content: "\f294"; }
+
+/* Rating */
+i.icon.heart:before { content: "\f004"; }
+i.icon.star:before { content: "\f005"; }
+i.icon.empty.star:before { content: "\f006"; }
+i.icon.thumbs.outline.up:before { content: "\f087"; }
+i.icon.thumbs.outline.down:before { content: "\f088"; }
+i.icon.star.half:before { content: "\f089"; }
+i.icon.empty.heart:before { content: "\f08a"; }
+i.icon.smile:before { content: "\f118"; }
+i.icon.frown:before { content: "\f119"; }
+i.icon.meh:before { content: "\f11a"; }
+i.icon.star.half.empty:before { content: "\f123"; }
+i.icon.thumbs.up:before { content: "\f164"; }
+i.icon.thumbs.down:before { content: "\f165"; }
+
+/* Audio */
+i.icon.music:before { content: "\f001"; }
+i.icon.video.play.outline:before { content: "\f01d"; }
+i.icon.volume.off:before { content: "\f026"; }
+i.icon.volume.down:before { content: "\f027"; }
+i.icon.volume.up:before { content: "\f028"; }
+i.icon.record:before { content: "\f03d"; }
+i.icon.step.backward:before { content: "\f048"; }
+i.icon.fast.backward:before { content: "\f049"; }
+i.icon.backward:before { content: "\f04a"; }
+i.icon.play:before { content: "\f04b"; }
+i.icon.pause:before { content: "\f04c"; }
+i.icon.stop:before { content: "\f04d"; }
+i.icon.forward:before { content: "\f04e"; }
+i.icon.fast.forward:before { content: "\f050"; }
+i.icon.step.forward:before { content: "\f051"; }
+i.icon.eject:before { content: "\f052"; }
+i.icon.unmute:before { content: "\f130"; }
+i.icon.mute:before { content: "\f131"; }
+i.icon.video.play:before { content: "\f144"; }
+i.icon.closed.captioning:before { content: "\f20a"; }
+i.icon.pause.circle:before { content: "\f28b"; }
+i.icon.pause.circle.outline:before { content: "\f28c"; }
+i.icon.stop.circle:before { content: "\f28d"; }
+i.icon.stop.circle.outline:before { content: "\f28e"; }
+
+/* Map, Locations, & Transportation */
+i.icon.marker:before { content: "\f041"; }
+i.icon.coffee:before { content: "\f0f4"; }
+i.icon.food:before { content: "\f0f5"; }
+i.icon.building.outline:before { content: "\f0f7"; }
+i.icon.hospital:before { content: "\f0f8"; }
+i.icon.emergency:before { content: "\f0f9"; }
+i.icon.first.aid:before { content: "\f0fa"; }
+i.icon.military:before { content: "\f0fb"; }
+i.icon.h:before { content: "\f0fd"; }
+i.icon.location.arrow:before { content: "\f124"; }
+i.icon.compass:before { content: "\f14e"; }
+i.icon.space.shuttle:before { content: "\f197"; }
+i.icon.university:before { content: "\f19c"; }
+i.icon.building:before { content: "\f1ad"; }
+i.icon.paw:before { content: "\f1b0"; }
+i.icon.spoon:before { content: "\f1b1"; }
+i.icon.car:before { content: "\f1b9"; }
+i.icon.taxi:before { content: "\f1ba"; }
+i.icon.tree:before { content: "\f1bb"; }
+i.icon.bicycle:before { content: "\f206"; }
+i.icon.bus:before { content: "\f207"; }
+i.icon.ship:before { content: "\f21a"; }
+i.icon.motorcycle:before { content: "\f21c"; }
+i.icon.street.view:before { content: "\f21d"; }
+i.icon.hotel:before { content: "\f236"; }
+i.icon.train:before { content: "\f238"; }
+i.icon.subway:before { content: "\f239"; }
+i.icon.map.pin:before { content: "\f276"; }
+i.icon.map.signs:before { content: "\f277"; }
+i.icon.map.outline:before { content: "\f278"; }
+i.icon.map:before { content: "\f279"; }
+
+/* Tables */
+i.icon.table:before { content: "\f0ce"; }
+i.icon.columns:before { content: "\f0db"; }
+i.icon.sort:before { content: "\f0dc"; }
+i.icon.sort.descending:before { content: "\f0dd"; }
+i.icon.sort.ascending:before { content: "\f0de"; }
+i.icon.sort.alphabet.ascending:before { content: "\f15d"; }
+i.icon.sort.alphabet.descending:before { content: "\f15e"; }
+i.icon.sort.content.ascending:before { content: "\f160"; }
+i.icon.sort.content.descending:before { content: "\f161"; }
+i.icon.sort.numeric.ascending:before { content: "\f162"; }
+i.icon.sort.numeric.descending:before { content: "\f163"; }
+
+/* Text Editor */
+i.icon.font:before { content: "\f031"; }
+i.icon.bold:before { content: "\f032"; }
+i.icon.italic:before { content: "\f033"; }
+i.icon.text.height:before { content: "\f034"; }
+i.icon.text.width:before { content: "\f035"; }
+i.icon.align.left:before { content: "\f036"; }
+i.icon.align.center:before { content: "\f037"; }
+i.icon.align.right:before { content: "\f038"; }
+i.icon.align.justify:before { content: "\f039"; }
+i.icon.list:before { content: "\f03a"; }
+i.icon.outdent:before { content: "\f03b"; }
+i.icon.indent:before { content: "\f03c"; }
+i.icon.linkify:before { content: "\f0c1"; }
+i.icon.cut:before { content: "\f0c4"; }
+i.icon.copy:before { content: "\f0c5"; }
+i.icon.attach:before { content: "\f0c6"; }
+i.icon.save:before { content: "\f0c7"; }
+i.icon.content:before { content: "\f0c9"; }
+i.icon.unordered.list:before { content: "\f0ca"; }
+i.icon.ordered.list:before { content: "\f0cb"; }
+i.icon.strikethrough:before { content: "\f0cc"; }
+i.icon.underline:before { content: "\f0cd"; }
+i.icon.paste:before { content: "\f0ea"; }
+i.icon.unlinkify:before { content: "\f127"; }
+i.icon.superscript:before { content: "\f12b"; }
+i.icon.subscript:before { content: "\f12c"; }
+i.icon.header:before { content: "\f1dc"; }
+i.icon.paragraph:before { content: "\f1dd"; }
+i.icon.text.cursor:before { content: "\f246"; }
+
+/* Currency */
+i.icon.euro:before { content: "\f153"; }
+i.icon.pound:before { content: "\f154"; }
+i.icon.dollar:before { content: "\f155"; }
+i.icon.rupee:before { content: "\f156"; }
+i.icon.yen:before { content: "\f157"; }
+i.icon.ruble:before { content: "\f158"; }
+i.icon.won:before { content: "\f159"; }
+i.icon.bitcoin:before { content: "\f15a"; }
+i.icon.lira:before { content: "\f195"; }
+i.icon.shekel:before { content: "\f20b"; }
+
+/* Payment Options */
+i.icon.paypal:before { content: "\f1ed"; }
+i.icon.google.wallet:before { content: "\f1ee"; }
+i.icon.visa:before { content: "\f1f0"; }
+i.icon.mastercard:before { content: "\f1f1"; }
+i.icon.discover:before { content: "\f1f2"; }
+i.icon.american.express:before { content: "\f1f3"; }
+i.icon.paypal.card:before { content: "\f1f4"; }
+i.icon.stripe:before { content: "\f1f5"; }
+i.icon.japan.credit.bureau:before { content: "\f24b"; }
+i.icon.diners.club:before { content: "\f24c"; }
+i.icon.credit.card.alternative:before { content: "\f283"; }
+
+/* Networks and Websites*/
+i.icon.twitter.square:before { content: "\f081"; }
+i.icon.facebook.square:before { content: "\f082"; }
+i.icon.linkedin.square:before { content: "\f08c"; }
+i.icon.github.square:before { content: "\f092"; }
+i.icon.twitter:before { content: "\f099"; }
+i.icon.facebook.f:before { content: "\f09a"; }
+i.icon.github:before { content: "\f09b"; }
+i.icon.pinterest:before { content: "\f0d2"; }
+i.icon.pinterest.square:before { content: "\f0d3"; }
+i.icon.google.plus.square:before { content: "\f0d4"; }
+i.icon.google.plus:before { content: "\f0d5"; }
+i.icon.linkedin:before { content: "\f0e1"; }
+i.icon.github.alternate:before { content: "\f113"; }
+i.icon.maxcdn:before { content: "\f136"; }
+i.icon.youtube.square:before { content: "\f166"; }
+i.icon.youtube:before { content: "\f167"; }
+i.icon.xing:before { content: "\f168"; }
+i.icon.xing.square:before { content: "\f169"; }
+i.icon.youtube.play:before { content: "\f16a"; }
+i.icon.dropbox:before { content: "\f16b"; }
+i.icon.stack.overflow:before { content: "\f16c"; }
+i.icon.instagram:before { content: "\f16d"; }
+i.icon.flickr:before { content: "\f16e"; }
+i.icon.adn:before { content: "\f170"; }
+i.icon.bitbucket:before { content: "\f171"; }
+i.icon.bitbucket.square:before { content: "\f172"; }
+i.icon.tumblr:before { content: "\f173"; }
+i.icon.tumblr.square:before { content: "\f174"; }
+i.icon.apple:before { content: "\f179"; }
+i.icon.windows:before { content: "\f17a"; }
+i.icon.android:before { content: "\f17b"; }
+i.icon.linux:before { content: "\f17c"; }
+i.icon.dribble:before { content: "\f17d"; }
+i.icon.skype:before { content: "\f17e"; }
+i.icon.foursquare:before { content: "\f180"; }
+i.icon.trello:before { content: "\f181"; }
+i.icon.gittip:before { content: "\f184"; }
+i.icon.vk:before { content: "\f189"; }
+i.icon.weibo:before { content: "\f18a"; }
+i.icon.renren:before { content: "\f18b"; }
+i.icon.pagelines:before { content: "\f18c"; }
+i.icon.stack.exchange:before { content: "\f18d"; }
+i.icon.vimeo.square:before { content: "\f194"; }
+i.icon.slack:before { content: "\f198"; }
+i.icon.wordpress:before { content: "\f19a"; }
+i.icon.yahoo:before { content: "\f19e"; }
+i.icon.google:before { content: "\f1a0"; }
+i.icon.reddit:before { content: "\f1a1"; }
+i.icon.reddit.square:before { content: "\f1a2"; }
+i.icon.stumbleupon.circle:before { content: "\f1a3"; }
+i.icon.stumbleupon:before { content: "\f1a4"; }
+i.icon.delicious:before { content: "\f1a5"; }
+i.icon.digg:before { content: "\f1a6"; }
+i.icon.pied.piper:before { content: "\f1a7"; }
+i.icon.pied.piper.alternate:before { content: "\f1a8"; }
+i.icon.drupal:before { content: "\f1a9"; }
+i.icon.joomla:before { content: "\f1aa"; }
+i.icon.behance:before { content: "\f1b4"; }
+i.icon.behance.square:before { content: "\f1b5"; }
+i.icon.steam:before { content: "\f1b6"; }
+i.icon.steam.square:before { content: "\f1b7"; }
+i.icon.spotify:before { content: "\f1bc"; }
+i.icon.deviantart:before { content: "\f1bd"; }
+i.icon.soundcloud:before { content: "\f1be"; }
+i.icon.vine:before { content: "\f1ca"; }
+i.icon.codepen:before { content: "\f1cb"; }
+i.icon.jsfiddle:before { content: "\f1cc"; }
+i.icon.rebel:before { content: "\f1d0"; }
+i.icon.empire:before { content: "\f1d1"; }
+i.icon.git.square:before { content: "\f1d2"; }
+i.icon.git:before { content: "\f1d3"; }
+i.icon.hacker.news:before { content: "\f1d4"; }
+i.icon.tencent.weibo:before { content: "\f1d5"; }
+i.icon.qq:before { content: "\f1d6"; }
+i.icon.wechat:before { content: "\f1d7"; }
+i.icon.slideshare:before { content: "\f1e7"; }
+i.icon.twitch:before { content: "\f1e8"; }
+i.icon.yelp:before { content: "\f1e9"; }
+i.icon.lastfm:before { content: "\f202"; }
+i.icon.lastfm.square:before { content: "\f203"; }
+i.icon.ioxhost:before { content: "\f208"; }
+i.icon.angellist:before { content: "\f209"; }
+i.icon.meanpath:before { content: "\f20c"; }
+i.icon.buysellads:before { content: "\f20d"; }
+i.icon.connectdevelop:before { content: "\f20e"; }
+i.icon.dashcube:before { content: "\f210"; }
+i.icon.forumbee:before { content: "\f211"; }
+i.icon.leanpub:before { content: "\f212"; }
+i.icon.sellsy:before { content: "\f213"; }
+i.icon.shirtsinbulk:before { content: "\f214"; }
+i.icon.simplybuilt:before { content: "\f215"; }
+i.icon.skyatlas:before { content: "\f216"; }
+i.icon.facebook:before { content: "\f230"; }
+i.icon.pinterest:before { content: "\f231"; }
+i.icon.whatsapp:before { content: "\f232"; }
+i.icon.viacoin:before { content: "\f237"; }
+i.icon.medium:before { content: "\f23a"; }
+i.icon.y.combinator:before { content: "\f23b"; }
+i.icon.optinmonster:before { content: "\f23c"; }
+i.icon.opencart:before { content: "\f23d"; }
+i.icon.expeditedssl:before { content: "\f23e"; }
+i.icon.gg:before { content: "\f260"; }
+i.icon.gg.circle:before { content: "\f261"; }
+i.icon.tripadvisor:before { content: "\f262"; }
+i.icon.odnoklassniki:before { content: "\f263"; }
+i.icon.odnoklassniki.square:before { content: "\f264"; }
+i.icon.pocket:before { content: "\f265"; }
+i.icon.wikipedia:before { content: "\f266"; }
+i.icon.safari:before { content: "\f267"; }
+i.icon.chrome:before { content: "\f268"; }
+i.icon.firefox:before { content: "\f269"; }
+i.icon.opera:before { content: "\f26a"; }
+i.icon.internet.explorer:before { content: "\f26b"; }
+i.icon.contao:before { content: "\f26d"; }
+i.icon.\35 00px:before { content: "\f26e"; }
+i.icon.amazon:before { content: "\f270"; }
+i.icon.houzz:before { content: "\f27c"; }
+i.icon.vimeo:before { content: "\f27d"; }
+i.icon.black.tie:before { content: "\f27e"; }
+i.icon.fonticons:before { content: "\f280"; }
+i.icon.reddit.alien:before { content: "\f281"; }
+i.icon.microsoft.edge:before { content: "\f282"; }
+i.icon.codiepie:before { content: "\f284"; }
+i.icon.modx:before { content: "\f285"; }
+i.icon.fort.awesome:before { content: "\f286"; }
+i.icon.product.hunt:before { content: "\f288"; }
+i.icon.mixcloud:before { content: "\f289"; }
+i.icon.scribd:before { content: "\f28a"; }
+i.icon.gitlab:before { content: "\f296"; }
+i.icon.wpbeginner:before { content: "\f297"; }
+i.icon.wpforms:before { content: "\f298"; }
+i.icon.envira.gallery:before { content: "\f299"; }
+i.icon.glide:before { content: "\f2a5"; }
+i.icon.glide.g:before { content: "\f2a6"; }
+i.icon.viadeo:before { content: "\f2a9"; }
+i.icon.viadeo.square:before { content: "\f2aa"; }
+i.icon.snapchat:before { content: "\f2ab"; }
+i.icon.snapchat.ghost:before { content: "\f2ac"; }
+i.icon.snapchat.square:before { content: "\f2ad"; }
+i.icon.pied.piper.hat:before { content: "\f2ae"; }
+i.icon.first.order:before { content: "\f2b0"; }
+i.icon.yoast:before { content: "\f2b1"; }
+i.icon.themeisle:before { content: "\f2b2"; }
+i.icon.google.plus.circle:before { content: "\f2b3"; }
+i.icon.font.awesome:before { content: "\f2b4"; }
+
+/*******************************
+ Aliases
+*******************************/
+
+i.icon.like:before { content: "\f004"; }
+i.icon.favorite:before { content: "\f005"; }
+i.icon.video:before { content: "\f008"; }
+i.icon.check:before { content: "\f00c"; }
+i.icon.close:before { content: "\f00d"; }
+i.icon.cancel:before { content: "\f00d"; }
+i.icon.delete:before { content: "\f00d"; }
+i.icon.x:before { content: "\f00d"; }
+i.icon.zoom.in:before { content: "\f00e"; }
+i.icon.magnify:before { content: "\f00e"; }
+i.icon.shutdown:before { content: "\f011"; }
+i.icon.clock:before { content: "\f017"; }
+i.icon.time:before { content: "\f017"; }
+i.icon.play.circle.outline:before { content: "\f01d"; }
+i.icon.headphone:before { content: "\f025"; }
+i.icon.camera:before { content: "\f030"; }
+i.icon.video.camera:before { content: "\f03d"; }
+i.icon.picture:before { content: "\f03e"; }
+i.icon.pencil:before { content: "\f040"; }
+i.icon.compose:before { content: "\f040"; }
+i.icon.point:before { content: "\f041"; }
+i.icon.tint:before { content: "\f043"; }
+i.icon.signup:before { content: "\f044"; }
+i.icon.plus.circle:before { content: "\f055"; }
+i.icon.question.circle:before { content: "\f059"; }
+i.icon.dont:before { content: "\f05e"; }
+i.icon.minimize:before { content: "\f066"; }
+i.icon.add:before { content: "\f067"; }
+i.icon.exclamation.circle:before { content: "\f06a"; }
+i.icon.attention:before { content: "\f06a"; }
+i.icon.eye:before { content: "\f06e"; }
+i.icon.exclamation.triangle:before { content: "\f071"; }
+i.icon.shuffle:before { content: "\f074"; }
+i.icon.talk:before { content: "\f075"; }
+i.icon.chat:before { content: "\f075"; }
+i.icon.cart:before { content: "\f07a"; }
+i.icon.shopping.cart:before { content: "\f07a"; }
+i.icon.bar.graph:before { content: "\f080"; }
+i.icon.key:before { content: "\f084"; }
+i.icon.cogs:before { content: "\f085"; }
+i.icon.discussions:before { content: "\f086"; }
+i.icon.like.outline:before { content: "\f087"; }
+i.icon.dislike.outline:before { content: "\f088"; }
+i.icon.heart.outline:before { content: "\f08a"; }
+i.icon.log.out:before { content: "\f08b"; }
+i.icon.thumb.tack:before { content: "\f08d"; }
+i.icon.winner:before { content: "\f091"; }
+i.icon.phone:before { content: "\f095"; }
+i.icon.bookmark.outline:before { content: "\f097"; }
+i.icon.phone.square:before { content: "\f098"; }
+i.icon.credit.card:before { content: "\f09d"; }
+i.icon.hdd.outline:before { content: "\f0a0"; }
+i.icon.bullhorn:before { content: "\f0a1"; }
+i.icon.bell.outline:before { content: "\f0a2"; }
+i.icon.hand.outline.right:before { content: "\f0a4"; }
+i.icon.hand.outline.left:before { content: "\f0a5"; }
+i.icon.hand.outline.up:before { content: "\f0a6"; }
+i.icon.hand.outline.down:before { content: "\f0a7"; }
+i.icon.globe:before { content: "\f0ac"; }
+i.icon.wrench:before { content: "\f0ad"; }
+i.icon.briefcase:before { content: "\f0b1"; }
+i.icon.group:before { content: "\f0c0"; }
+i.icon.linkify:before { content: "\f0c1"; }
+i.icon.chain:before { content: "\f0c1"; }
+i.icon.flask:before { content: "\f0c3"; }
+i.icon.sidebar:before { content: "\f0c9"; }
+i.icon.bars:before { content: "\f0c9"; }
+i.icon.list.ul:before { content: "\f0ca"; }
+i.icon.list.ol:before { content: "\f0cb"; }
+i.icon.numbered.list:before { content: "\f0cb"; }
+i.icon.magic:before { content: "\f0d0"; }
+i.icon.truck:before { content: "\f0d1"; }
+i.icon.currency:before { content: "\f0d6"; }
+i.icon.triangle.down:before { content: "\f0d7"; }
+i.icon.dropdown:before { content: "\f0d7"; }
+i.icon.triangle.up:before { content: "\f0d8"; }
+i.icon.triangle.left:before { content: "\f0d9"; }
+i.icon.triangle.right:before { content: "\f0da"; }
+i.icon.envelope:before { content: "\f0e0"; }
+i.icon.conversation:before { content: "\f0e6"; }
+i.icon.rain:before { content: "\f0e9"; }
+i.icon.clipboard:before { content: "\f0ea"; }
+i.icon.lightbulb:before { content: "\f0eb"; }
+i.icon.bell:before { content: "\f0f3"; }
+i.icon.ambulance:before { content: "\f0f9"; }
+i.icon.medkit:before { content: "\f0fa"; }
+i.icon.fighter.jet:before { content: "\f0fb"; }
+i.icon.beer:before { content: "\f0fc"; }
+i.icon.plus.square:before { content: "\f0fe"; }
+i.icon.computer:before { content: "\f108"; }
+i.icon.circle.outline:before { content: "\f10c"; }
+i.icon.gamepad:before { content: "\f11b"; }
+i.icon.star.half.full:before { content: "\f123"; }
+i.icon.broken.chain:before { content: "\f127"; }
+i.icon.question:before { content: "\f128"; }
+i.icon.exclamation:before { content: "\f12a"; }
+i.icon.eraser:before { content: "\f12d"; }
+i.icon.microphone:before { content: "\f130"; }
+i.icon.microphone.slash:before { content: "\f131"; }
+i.icon.shield:before { content: "\f132"; }
+i.icon.target:before { content: "\f140"; }
+i.icon.play.circle:before { content: "\f144"; }
+i.icon.pencil.square:before { content: "\f14b"; }
+i.icon.eur:before { content: "\f153"; }
+i.icon.gbp:before { content: "\f154"; }
+i.icon.usd:before { content: "\f155"; }
+i.icon.inr:before { content: "\f156"; }
+i.icon.cny:before { content: "\f157"; }
+i.icon.rmb:before { content: "\f157"; }
+i.icon.jpy:before { content: "\f157"; }
+i.icon.rouble:before { content: "\f158"; }
+i.icon.rub:before { content: "\f158"; }
+i.icon.krw:before { content: "\f159"; }
+i.icon.btc:before { content: "\f15a"; }
+i.icon.gratipay:before { content: "\f184"; }
+i.icon.zip:before { content: "\f187"; }
+i.icon.dot.circle.outline:before { content: "\f192"; }
+i.icon.try:before { content: "\f195"; }
+i.icon.graduation:before { content: "\f19d"; }
+i.icon.circle.outline:before { content: "\f1db"; }
+i.icon.sliders:before { content: "\f1de"; }
+i.icon.weixin:before { content: "\f1d7"; }
+i.icon.tty:before { content: "\f1e4"; }
+i.icon.teletype:before { content: "\f1e4"; }
+i.icon.binoculars:before { content: "\f1e5"; }
+i.icon.power.cord:before { content: "\f1e6"; }
+i.icon.wi-fi:before { content: "\f1eb"; }
+i.icon.visa.card:before { content: "\f1f0"; }
+i.icon.mastercard.card:before { content: "\f1f1"; }
+i.icon.discover.card:before { content: "\f1f2"; }
+i.icon.amex:before { content: "\f1f3"; }
+i.icon.american.express.card:before { content: "\f1f3"; }
+i.icon.stripe.card:before { content: "\f1f5"; }
+i.icon.bell.slash:before { content: "\f1f6"; }
+i.icon.bell.slash.outline:before { content: "\f1f7"; }
+i.icon.area.graph:before { content: "\f1fe"; }
+i.icon.pie.graph:before { content: "\f200"; }
+i.icon.line.graph:before { content: "\f201"; }
+i.icon.cc:before { content: "\f20a"; }
+i.icon.sheqel:before { content: "\f20b"; }
+i.icon.ils:before { content: "\f20b"; }
+i.icon.plus.cart:before { content: "\f217"; }
+i.icon.arrow.down.cart:before { content: "\f218"; }
+i.icon.detective:before { content: "\f21b"; }
+i.icon.venus:before { content: "\f221"; }
+i.icon.mars:before { content: "\f222"; }
+i.icon.mercury:before { content: "\f223"; }
+i.icon.intersex:before { content: "\f224"; }
+i.icon.venus.double:before { content: "\f226"; }
+i.icon.female.homosexual:before { content: "\f226"; }
+i.icon.mars.double:before { content: "\f227"; }
+i.icon.male.homosexual:before { content: "\f227"; }
+i.icon.venus.mars:before { content: "\f228"; }
+i.icon.mars.stroke:before { content: "\f229"; }
+i.icon.mars.alternate:before { content: "\f229"; }
+i.icon.mars.vertical:before { content: "\f22a"; }
+i.icon.mars.stroke.vertical:before { content: "\f22a"; }
+i.icon.mars.horizontal:before { content: "\f22b"; }
+i.icon.mars.stroke.horizontal:before { content: "\f22b"; }
+i.icon.asexual:before { content: "\f22d"; }
+i.icon.facebook.official:before { content: "\f230"; }
+i.icon.user.plus:before { content: "\f234"; }
+i.icon.user.times:before { content: "\f235"; }
+i.icon.user.close:before { content: "\f235"; }
+i.icon.user.cancel:before { content: "\f235"; }
+i.icon.user.delete:before { content: "\f235"; }
+i.icon.user.x:before { content: "\f235"; }
+i.icon.bed:before { content: "\f236"; }
+i.icon.yc:before { content: "\f23b"; }
+i.icon.ycombinator:before { content: "\f23b"; }
+i.icon.battery.four:before { content: "\f240"; }
+i.icon.battery.three:before { content: "\f241"; }
+i.icon.battery.three.quarters:before { content: "\f241"; }
+i.icon.battery.two:before { content: "\f242"; }
+i.icon.battery.half:before { content: "\f242"; }
+i.icon.battery.one:before { content: "\f243"; }
+i.icon.battery.quarter:before { content: "\f243"; }
+i.icon.battery.zero:before { content: "\f244"; }
+i.icon.i.cursor:before { content: "\f246"; }
+i.icon.jcb:before { content: "\f24b"; }
+i.icon.japan.credit.bureau.card:before { content: "\f24b"; }
+i.icon.diners.club.card:before { content: "\f24c"; }
+i.icon.balance:before { content: "\f24e"; }
+i.icon.hourglass.outline:before { content: "\f250"; }
+i.icon.hourglass.zero:before { content: "\f250"; }
+i.icon.hourglass.one:before { content: "\f251"; }
+i.icon.hourglass.two:before { content: "\f252"; }
+i.icon.hourglass.three:before { content: "\f253"; }
+i.icon.hourglass.four:before { content: "\f254"; }
+i.icon.grab { content: "\f255"; }
+i.icon.hand.victory:before { content: "\f25b"; }
+i.icon.tm:before { content: "\f25c"; }
+i.icon.r.circle:before { content: "\f25d"; }
+i.icon.television { content: "\f26c"; }
+i.icon.five.hundred.pixels:before { content: "\f26e"; }
+i.icon.calendar.plus:before { content: "\f271"; }
+i.icon.calendar.minus:before { content: "\f272"; }
+i.icon.calendar.times:before { content: "\f273"; }
+i.icon.calendar.check:before { content: "\f274"; }
+i.icon.factory:before { content: "\f275"; }
+i.icon.commenting:before { content: "\f27a"; }
+i.icon.commenting.outline:before { content: "\f27b"; }
+i.icon.edge:before { content: "\f282"; }
+i.icon.ms.edge:before { content: "\f282"; }
+i.icon.wordpress.beginner:before { content: "\f297"; }
+i.icon.wordpress.forms:before { content: "\f298"; }
+i.icon.envira:before { content: "\f299"; }
+i.icon.question.circle.outline:before { content: "\f29c"; }
+i.icon.assistive.listening.devices:before { content: "\f2a2"; }
+i.icon.als:before { content: "\f2a2"; }
+i.icon.ald:before { content: "\f2a2"; }
+i.icon.asl.interpreting:before { content: "\f2a3"; }
+i.icon.deaf:before { content: "\f2a4"; }
+i.icon.american.sign.language.interpreting:before { content: "\f2a3"; }
+i.icon.hard.of.hearing:before{ content: "\f2a4"; }
+i.icon.signing:before { content: "\f2a7"; }
+i.icon.new.pied.piper:before { content: "\f2ae"; }
+i.icon.theme.isle:before { content: "\f2b2"; }
+i.icon.google.plus.official:before { content: "\f2b3"; }
+i.icon.fa:before { content: "\f2b4"; }
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/icon.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/icon.variables b/semantic/src/themes/default/elements/icon.variables
new file mode 100644
index 0000000..245ea00
--- /dev/null
+++ b/semantic/src/themes/default/elements/icon.variables
@@ -0,0 +1,62 @@
+/*******************************
+ Icon
+*******************************/
+
+/*-------------------
+ Icon Variables
+--------------------*/
+
+@fontName: 'icons';
+@fallbackSRC: url("@{fontPath}/@{fontName}.eot");
+@src:
+ url("@{fontPath}/@{fontName}.eot?#iefix") format('embedded-opentype'),
+ url("@{fontPath}/@{fontName}.woff2") format('woff2'),
+ url("@{fontPath}/@{fontName}.woff") format('woff'),
+ url("@{fontPath}/@{fontName}.ttf") format('truetype'),
+ url("@{fontPath}/@{fontName}.svg#icons") format('svg')
+;
+
+@opacity: 1;
+@width: @iconWidth;
+@height: 1em;
+@distanceFromText: 0.25rem;
+
+
+/* Variations */
+
+@linkOpacity: 0.8;
+@linkDuration: 0.3s;
+@loadingDuration: 2s;
+
+@circularSize: 2em;
+@circularPadding: 0.5em 0.5em;
+@circularShadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;
+
+@borderedSize: 2em;
+@borderedVerticalPadding: ((@borderedSize - @height) / 2);
+@borderedHorizontalPadding: ((@borderedSize - @width) / 2);
+@borderedShadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;
+
+@cornerIconSize: 0.45em;
+@cornerIconStroke: 1px;
+@cornerIconShadow:
+ -@cornerIconStroke -@cornerIconStroke 0 @white,
+ @cornerIconStroke -@cornerIconStroke 0 @white,
+ -@cornerIconStroke @cornerIconStroke 0 @white,
+ @cornerIconStroke @cornerIconStroke 0 @white
+;
+@cornerIconInvertedShadow:
+ -@cornerIconStroke -@cornerIconStroke 0 @black,
+ @cornerIconStroke -@cornerIconStroke 0 @black,
+ -@cornerIconStroke @cornerIconStroke 0 @black,
+ @cornerIconStroke @cornerIconStroke 0 @black
+;
+
+@mini: 0.4em;
+@tiny: 0.5em;
+@small: 0.75em;
+@medium: 1em;
+@large: 1.5em;
+@big: 2em;
+@huge: 4em;
+@massive: 8em;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/image.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/image.overrides b/semantic/src/themes/default/elements/image.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/image.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/image.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/image.variables b/semantic/src/themes/default/elements/image.variables
new file mode 100644
index 0000000..925110e
--- /dev/null
+++ b/semantic/src/themes/default/elements/image.variables
@@ -0,0 +1,44 @@
+/*******************************
+ Image
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@placeholderColor: transparent;
+@roundedBorderRadius: 0.3125em;
+
+@imageHorizontalMargin: 0.25rem;
+@imageVerticalMargin: 0.5rem;
+@imageBorder: 1px solid rgba(0, 0, 0, 0.1);
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Avatar */
+@avatarSize: 2em;
+@avatarMargin: 0.25em;
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Spaced */
+@spacedDistance: 0.5em;
+
+/* Floated */
+@floatedHorizontalMargin: 1em;
+@floatedVerticalMargin: 1em;
+
+/* Size */
+@miniWidth: 35px;
+@tinyWidth: 80px;
+@smallWidth: 150px;
+@mediumWidth: 300px;
+@largeWidth: 450px;
+@bigWidth: 600px;
+@hugeWidth: 800px;
+@massiveWidth: 960px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/input.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/input.overrides b/semantic/src/themes/default/elements/input.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/input.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/input.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/input.variables b/semantic/src/themes/default/elements/input.variables
new file mode 100644
index 0000000..04741f3
--- /dev/null
+++ b/semantic/src/themes/default/elements/input.variables
@@ -0,0 +1,101 @@
+/*******************************
+ Input
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@inputFont: @pageFont;
+@verticalPadding: @inputVerticalPadding;
+@horizontalPadding: @inputHorizontalPadding;
+
+@lineHeight: @inputLineHeight;
+@lineHeightOffset: ((@lineHeight - 1em) / 2);
+
+@padding: (@verticalPadding - @lineHeightOffset) @horizontalPadding;
+
+@textAlign: left;
+@background: @inputBackground;
+@borderWidth: 1px;
+@border: @borderWidth solid @borderColor;
+@boxShadow: none;
+
+@borderRadius: @defaultBorderRadius;
+@transition:
+ box-shadow @defaultDuration @defaultEasing,
+ border-color @defaultDuration @defaultEasing
+;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Icon Input */
+@iconWidth: (@verticalPadding * 2) + @glyphWidth;
+@iconOpacity: 0.5;
+@iconFocusOpacity: 1;
+@iconOffset: -0.5em;
+
+@iconDistance: 0em;
+@iconMargin: @iconWidth + @iconDistance;
+@iconTransition: opacity 0.3s @defaultEasing;
+
+@transparentIconWidth: @glyphWidth;
+@transparentIconMargin: 2em;
+
+/* Circular Icon Input */
+@circularIconVerticalOffset: 0.35em;
+@circularIconHorizontalOffset: 0.5em;
+
+/* Labeled Input */
+@labelCornerTop: @borderWidth;
+@labelCornerRight: @borderWidth;
+@labelCornerSize: @relative9px;
+@labelSize: 1em;
+@labelVerticalPadding: (@verticalPadding - @lineHeightOffset);
+
+@labeledMargin: 2.5em;
+@labeledIconInputMargin: 3.25em;
+@labeledIconMargin: 1.25em;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Placeholder */
+@placeholderColor: @inputPlaceholderColor;
+@placeholderFocusColor: @inputPlaceholderFocusColor;
+
+/* Down */
+@downBorderColor: rgba(0, 0, 0, 0.3);
+@downBackground: #FAFAFA;
+@downColor: @textColor;
+@downBoxShadow: none;
+
+/* Focus */
+@focusBorderColor: @focusedFormBorderColor;
+@focusBackground: @background;
+@focusColor: @hoveredTextColor;
+@focusBoxShadow: none;
+
+/* Error */
+@errorBackground: @negativeBackgroundColor;
+@errorColor: @negativeTextColor;
+@errorBorder: @negativeBorderColor;
+@errorBoxShadow: none;
+
+@placeholderErrorColor: lighten(@errorColor, 40);
+@placeholderErrorFocusColor: lighten(@errorColor, 30);
+
+/* Loader */
+@invertedLoaderFillColor: rgba(0, 0, 0, 0.15);
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Inverted */
+@transparentInvertedPlaceholderColor: @invertedUnselectedTextColor;
+@transparentInvertedColor: @white;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/label.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/label.overrides b/semantic/src/themes/default/elements/label.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/label.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/label.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/label.variables b/semantic/src/themes/default/elements/label.variables
new file mode 100644
index 0000000..23cd5d0
--- /dev/null
+++ b/semantic/src/themes/default/elements/label.variables
@@ -0,0 +1,254 @@
+/*******************************
+ Label
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@verticalAlign: baseline;
+@verticalMargin: 0em;
+@horizontalMargin: @relative2px;
+@backgroundColor: #E8E8E8;
+@color: @mutedTextColor;
+@backgroundImage: none;
+@verticalPadding: 0.5833em; /* medium is not @emSize custom value required */
+@horizontalPadding: 0.833em;
+@borderRadius: @absoluteBorderRadius;
+@textTransform: none;
+@fontWeight: bold;
+@borderWidth: 1px;
+@border: 0px solid transparent;
+
+@lineHeightOffset: -(@verticalPadding / 2);
+
+@labelTransitionDuration: @defaultDuration;
+@labelTransitionEasing: @defaultEasing;
+@transition: background @labelTransitionDuration @labelTransitionEasing;
+
+/* Group */
+@groupVerticalMargin: 0.5em;
+@groupHorizontalMargin: 0.5em;
+
+/*-------------------
+ Parts
+--------------------*/
+
+/* Link */
+@linkOpacity: 0.5;
+@linkTransition: @labelTransitionDuration opacity @labelTransitionEasing;
+
+/* Icon */
+@iconDistance: 0.75em;
+
+/* Image */
+@imageHeight: (1em + @verticalPadding * 2);
+
+/* Detail */
+@detailFontWeight: bold;
+@detailOpacity: 0.8;
+@detailIconDistance: 0.25em;
+@detailMargin: 1em;
+
+/* Delete */
+@deleteOpacity: @linkOpacity;
+@deleteSize: @relativeSmall;
+@deleteMargin: 0.5em;
+@deleteTransition: background @labelTransitionDuration @labelTransitionEasing;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Image Label */
+@imageLabelBackground: @backgroundColor;
+@imageLabelVerticalPadding: @verticalPadding;
+@imageLabelHorizontalPadding: @horizontalPadding;
+@imageLabelTextDistance: 0.5em;
+@imageLabelDetailDistance: @imageLabelTextDistance;
+@imageLabelBorderRadius: @borderRadius;
+@imageLabelBoxShadow: none;
+@imageLabelPadding: @imageLabelVerticalPadding @imageLabelHorizontalPadding @imageLabelVerticalPadding @imageLabelTextDistance;
+
+@imageLabelImageMargin: -@verticalPadding @imageLabelTextDistance -@verticalPadding -@imageLabelTextDistance;
+@imageLabelImageBorderRadius: @imageLabelBorderRadius 0em 0em @imageLabelBorderRadius;
+@imageLabelImageHeight: @imageHeight;
+
+@imageLabelDetailBackground: @strongTransparentBlack;
+@imageLabelDetailPadding: @imageLabelVerticalPadding @imageLabelHorizontalPadding;
+@imageLabelDetailMargin: -@imageLabelVerticalPadding -@imageLabelHorizontalPadding -@imageLabelVerticalPadding @imageLabelDetailDistance;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Hover */
+@labelHoverBackgroundColor: #E0E0E0;
+@labelHoverBackgroundImage: none;
+@labelHoverTextColor: @hoveredTextColor;
+
+/* Active */
+@labelActiveBackgroundColor: #D0D0D0;
+@labelActiveBackgroundImage: none;
+@labelActiveTextColor: @selectedTextColor;
+
+/* Active Hover */
+@labelActiveHoverBackgroundColor: #C8C8C8;
+@labelActiveHoverBackgroundImage: none;
+@labelActiveHoverTextColor: @selectedTextColor;
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Basic */
+@basicBackground: none @white;
+@basicBorderWidth: 1px;
+@basicBorder: @basicBorderWidth solid @borderColor;
+@basicColor: @textColor;
+@basicBoxShadow: none;
+
+@basicHoverBackground: @basicBackground;
+@basicHoverColor: @linkHoverColor;
+@basicHoverBorder: @basicBorder;
+@basicHoverBoxShadow: @basicBoxShadow;
+
+/* Tag */
+@tagCircleColor: @white;
+@tagCircleSize: 0.5em;
+@tagHorizontalPadding: 1.5em;
+@tagCircleBoxShadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);
+@tagTriangleRightOffset: 100%;
+@tagTriangleTopOffset: 50%;
+@tagTriangleSize: 1.56em;
+@tagTriangleBackgroundImage: none;
+@tagTransition: none; /* Avoids error with background: inherit; on animation */
+
+/* Ribbon */
+@ribbonTriangleSize: 1.2em;
+@ribbonShadowColor: rgba(0, 0, 0, 0.15);
+
+@ribbonMargin: 1rem;
+@ribbonOffset: ~"calc("-@ribbonMargin~" - "@ribbonTriangleSize~")";
+@ribbonDistance: ~"calc("@ribbonMargin~" + "@ribbonTriangleSize~")";
+@rightRibbonOffset: ~"calc(100% + "@ribbonMargin~" + "@ribbonTriangleSize~")";
+
+@ribbonImageTopDistance: 1rem;
+@ribbonImageMargin: -0.05rem; /* Rounding Offset on Triangle */
+@ribbonImageOffset: ~"calc("-@ribbonImageMargin~" - "@ribbonTriangleSize~")";
+@rightRibbonImageOffset: ~"calc(100% + "@ribbonImageMargin~" + "@ribbonTriangleSize~")";
+
+@ribbonTableMargin: @relativeMini; /* Rounding Offset on Triangle */
+@ribbonTableOffset: ~"calc("-@ribbonTableMargin~" - "@ribbonTriangleSize~")";
+@rightRibbonTableOffset: ~"calc(100% + "@ribbonTableMargin~" + "@ribbonTriangleSize~")";
+
+
+/* Colors */
+@redTextColor: @white;
+@orangeTextColor: @white;
+@yellowTextColor: @white;
+@oliveTextColor: @white;
+@greenTextColor: @white;
+@tealTextColor: @white;
+@blueTextColor: @white;
+@violetTextColor: @white;
+@purpleTextColor: @white;
+@pinkTextColor: @white;
+@brownTextColor: @white;
+@greyTextColor: @white;
+@blackTextColor: @white;
+
+@redHoverTextColor: @white;
+@orangeHoverTextColor: @white;
+@yellowHoverTextColor: @white;
+@oliveHoverTextColor: @white;
+@greenHoverTextColor: @white;
+@tealHoverTextColor: @white;
+@blueHoverTextColor: @white;
+@violetHoverTextColor: @white;
+@purpleHoverTextColor: @white;
+@pinkHoverTextColor: @white;
+@brownHoverTextColor: @white;
+@greyHoverTextColor: @white;
+@blackHoverTextColor: @white;
+
+@redRibbonShadow: darken(@red, 10);
+@orangeRibbonShadow: darken(@orange, 10);
+@yellowRibbonShadow: darken(@yellow, 10);
+@oliveRibbonShadow: darken(@olive, 10);
+@greenRibbonShadow: darken(@green, 10);
+@tealRibbonShadow: darken(@teal, 10);
+@blueRibbonShadow: darken(@blue, 10);
+@violetRibbonShadow: darken(@violet, 10);
+@purpleRibbonShadow: darken(@purple, 10);
+@pinkRibbonShadow: darken(@pink, 10);
+@brownRibbonShadow: darken(@brown, 10);
+@greyRibbonShadow: darken(@grey, 10);
+@blackRibbonShadow: darken(@black, 10);
+
+/* Attached */
+@attachedSegmentPadding: 2rem;
+@attachedVerticalPadding: 0.75em;
+@attachedHorizontalPadding: 1em;
+
+@attachedCornerBorderRadius: @3px;
+@attachedBorderRadius: @borderRadius;
+
+/* Corner */
+@cornerSizeRatio: 1;
+@cornerTransition: color @labelTransitionDuration @labelTransitionEasing;
+@cornerTriangleSize: 4em;
+@cornerTriangleTransition: border-color @labelTransitionDuration @labelTransitionEasing;
+@cornerTriangleZIndex: 1;
+
+@cornerIconSize: @relativeLarge;
+@cornerIconTopOffset: @relative9px;
+@cornerIconLeftOffset: @relative11px;
+
+/* Corner Text */
+@cornerTextWidth: 3em;
+@cornerTextWeight: bold;
+@cornerTextSize: 1em;
+
+/* Horizontal */
+@horizontalLabelMinWidth: 3em;
+@horizontalLabelMargin: 0.5em;
+@horizontalLabelVerticalPadding: 0.4em;
+
+/* Circular Padding */
+@circularPadding: 0.5em;
+@circularMinSize: 2em;
+@emptyCircleSize: 0.5em;
+
+/* Pointing */
+@pointingBorderColor: inherit;
+@pointingBorderWidth: @borderWidth;
+@pointingVerticalDistance: 1em;
+@pointingTriangleSize: 0.6666em;
+@pointingHorizontalDistance: @pointingTriangleSize;
+
+@pointingTriangleTransition: background @labelTransitionDuration @labelTransitionEasing;
+@pointingTriangleZIndex: 2;
+
+/* Basic Pointing */
+@basicPointingTriangleOffset: -@pointingBorderWidth;
+
+/* Floating */
+@floatingTopOffset: -1em;
+@floatingLeftOffset: -1.5em;
+@floatingZIndex: 100;
+
+/*-------------------
+ Group
+--------------------*/
+
+/* Sizing */
+@mini : @9px;
+@tiny : @10px;
+@small : @11px;
+@medium : @12px;
+@large : @absoluteMedium;
+@big : @absoluteBig;
+@huge : @absoluteHuge;
+@massive : @absoluteMassive;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/list.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/list.overrides b/semantic/src/themes/default/elements/list.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/list.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/list.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/list.variables b/semantic/src/themes/default/elements/list.variables
new file mode 100644
index 0000000..290c9ee
--- /dev/null
+++ b/semantic/src/themes/default/elements/list.variables
@@ -0,0 +1,224 @@
+/*******************************
+ List
+*******************************/
+
+/*-------------------
+ View
+--------------------*/
+
+/* List */
+@listStyleType: none;
+@listStylePosition: outside;
+@margin: 1em 0em;
+@verticalPadding: 0em;
+@horizontalPadding: 0em;
+
+/* List Item */
+@itemVerticalPadding: @relative3px;
+@itemHorizontalPadding: 0em;
+@itemPadding: @itemVerticalPadding @itemHorizontalPadding;
+@itemLineHeight: @relativeLarge;
+
+/* Sub List */
+@childListPadding: 0.75em 0em 0.25em 0.5em;
+@childListIndent: 1em;
+
+/* Sub List Item */
+@childItemVerticalPadding: @relative2px;
+@childItemHorizontalPadding: 0em;
+@childItemPadding: @childItemVerticalPadding @childItemHorizontalPadding;
+@childItemLineHeight: inherit;
+
+/*-------------------
+ Elements
+--------------------*/
+
+/* Icon */
+@iconDistance: @relative4px;
+@iconOffset: ((@itemLineHeight - 1rem) / 2);
+@iconTransition: color @defaultDuration @defaultEasing;
+@iconVerticalAlign: top;
+@iconContentVerticalAlign: top;
+
+/* Image */
+@imageDistance: 0.5em;
+@imageAlign: top;
+
+/* Content */
+@contentDistance: 0.5em;
+@contentLineHeight: @itemLineHeight;
+@contentLineHeightOffset: (@contentLineHeight - 1em) / 2;
+@contentVerticalAlign: top;
+
+/* Header */
+@itemHeaderFontFamily: @headerFont;
+@itemHeaderFontWeight: bold;
+@itemHeaderColor: @textColor;
+
+/* Description */
+@itemDescriptionColor: rgba(0, 0, 0, 0.7);
+
+/* Link */
+@itemLinkColor: @linkColor;
+@itemLinkHoverColor: @linkHoverColor;
+
+/* Header Link */
+@itemHeaderLinkColor: @itemLinkColor;
+@itemHeaderLinkHoverColor: @itemLinkHoverColor;
+
+/* Linked Icon */
+@itemLinkIconColor: @lightTextColor;
+@itemLinkIconHoverColor: @textColor;
+@invertedIconLinkColor: @invertedLightTextColor;
+
+/*-------------------
+ States
+--------------------*/
+
+@disabledColor: @disabledTextColor;
+@invertedDisabledColor: @invertedDisabledTextColor;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Float */
+@floatDistance: 1em;
+@leftFloatMargin: 0em @floatDistance 0em 0em;
+@rightFloatMargin: 0em 0em 0em @floatDistance;
+
+/* Horizontal */
+@horizontalSpacing: 1em;
+@horizontalIconDistance: 0.25em;
+@horizontalVerticalAlign: middle;
+
+/* Inverted */
+@invertedListIconColor: @invertedLightTextColor;
+@invertedHeaderColor: @invertedTextColor;
+@invertedDescriptionColor: @invertedLightTextColor;
+@invertedItemLinkColor: @invertedTextColor;
+@invertedItemLinkHoverColor: @linkHoverColor;
+
+/* Link List */
+@linkListItemColor: @unselectedTextColor;
+@linkListItemHoverColor: @hoveredTextColor;
+@linkListItemDownColor: @pressedTextColor;
+@linkListItemActiveColor: @selectedTextColor;
+@linkListTransition:
+ @defaultDuration color @defaultEasing
+;
+
+/* Inverted Link List */
+@invertedLinkListItemColor: @invertedUnselectedTextColor;
+@invertedLinkListItemHoverColor: @invertedHoveredTextColor;
+@invertedLinkListItemDownColor: @invertedPressedTextColor;
+@invertedLinkListItemActiveColor: @invertedSelectedTextColor;
+
+/* Selection List */
+@selectionListItemMargin: 0em;
+@selectionListItemBorderRadius: 0.5em;
+@selectionListItemVerticalPadding: 0.5em;
+@selectionListItemHorizontalPadding: 0.5em;
+@selectionListTransition:
+ @defaultDuration color @defaultEasing,
+ @defaultDuration padding-left @defaultEasing,
+ @defaultDuration background-color @defaultEasing
+;
+
+/* Selection List States */
+@selectionListBackground: transparent;
+@selectionListColor: @unselectedTextColor;
+@selectionListHoverBackground: @subtleTransparentBlack;
+@selectionListHoverColor: @hoveredTextColor;
+@selectionListDownBackground: @transparentBlack;
+@selectionListDownColor: @pressedTextColor;
+@selectionListActiveBackground: @transparentBlack;
+@selectionListActiveColor: @selectedTextColor;
+
+/* Inverted Selection List */
+@invertedSelectionListBackground: transparent;
+@invertedSelectionListColor: @invertedUnselectedTextColor;
+@invertedSelectionListHoverBackground: @subtleTransparentWhite;
+@invertedSelectionListHoverColor: @invertedHoveredTextColor;
+@invertedSelectionListDownBackground: @transparentWhite;
+@invertedSelectionListDownColor: @invertedPressedTextColor;
+@invertedSelectionListActiveBackground: @transparentWhite;
+@invertedSelectionListActiveColor: @invertedSelectedTextColor;
+
+/* Animated List */
+@animatedDuration: 0.25s;
+@animatedDelay: 0.1s;
+@animatedListTransition:
+ @animatedDuration color @defaultEasing @animatedDelay,
+ @animatedDuration padding-left @defaultEasing @animatedDelay,
+ @animatedDuration background-color @defaultEasing @animatedDelay
+;
+@animatedListIndent: 1em;
+
+/* Bulleted */
+@bulletDistance: 1.25rem;
+@bulletOffset: -@bulletDistance;
+
+@bulletOpacity: 1;
+@bulletCharacter: '\u2022';
+@bulletColor: inherit;
+@bulletLinkColor: @textColor;
+@bulletVerticalAlign: top;
+@bulletChildDistance: @bulletDistance;
+
+/* Horizontal Bullets */
+@horizontalBulletColor: @textColor;
+@horizontalBulletSpacing: @bulletDistance + 0.5em;
+
+/* Ordered List */
+@orderedCountName: ordered;
+@orderedCountContent: counters(ordered, ".") " ";
+@orderedCountColor: @textColor;
+@orderedCountDistance: 1.25rem;
+@orderedCountOpacity: 0.8;
+@orderedCountTextAlign: right;
+@orderedCountVerticalAlign: middle;
+
+@orderedChildCountDistance: 1em;
+@orderedChildCountOffset: -2em;
+
+@orderedInvertedCountColor: @invertedLightTextColor;
+
+/* Horizontal Ordered */
+@horizontalOrderedCountDistance: 0.5em;
+
+/* Divided */
+@dividedBorderWidth: 1px;
+@dividedBorder: @dividedBorderWidth solid @borderColor;
+@dividedInvertedBorderColor: @whiteBorderColor;
+@dividedChildListBorder: none;
+@dividedChildItemBorder: none;
+
+/* Divided Horizontal */
+@horizontalDividedSpacing: (@horizontalSpacing / 2);
+@horizontalDividedLineHeight: 0.6;
+
+/* Divided */
+@celledBorderWidth: 1px;
+@celledBorder: @celledBorderWidth solid @borderColor;
+@celledInvertedBorder: @dividedBorderWidth solid @whiteBorderColor;
+@celledHorizontalPadding: 0.5em;
+@celledChildListBorder: none;
+@celledChildItemBorder: none;
+
+/* Divided Horizontal */
+@horizontalCelledSpacing: (@horizontalSpacing / 2);
+@horizontalCelledLineHeight: 0.6;
+
+/* Relaxed */
+@relaxedItemVerticalPadding: @relative6px;
+@relaxedChildItemVerticalPadding: @relative3px;
+@relaxedHeaderMargin: 0.25rem;
+@relaxedHorizontalPadding: 1rem;
+
+/* Very Relaxed */
+@veryRelaxedItemVerticalPadding: @relative12px;
+@veryRelaxedChildItemVerticalPadding: @relative4px;
+@veryRelaxedHeaderMargin: 0.5rem;
+@veryRelaxedHorizontalPadding: 1.5rem;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/loader.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/loader.overrides b/semantic/src/themes/default/elements/loader.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/loader.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/loader.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/loader.variables b/semantic/src/themes/default/elements/loader.variables
new file mode 100644
index 0000000..5cb1b9d
--- /dev/null
+++ b/semantic/src/themes/default/elements/loader.variables
@@ -0,0 +1,72 @@
+/*******************************
+ Loader
+*******************************/
+
+/* Some global loader styles defined in site.variables */
+// @loaderSpeed
+// @loaderLineWidth
+// @loaderFillColor
+// @loaderLineColor
+// @invertedLoaderFillColor
+// @invertedLoaderLineColor
+
+/*-------------------
+ Standard
+--------------------*/
+
+@loaderTopOffset: 50%;
+@loaderLeftOffset: 50%;
+
+@shapeBorderColor: @loaderLineColor transparent transparent;
+@invertedShapeBorderColor: @invertedLoaderLineColor transparent transparent;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Text */
+@textDistance: @relativeMini;
+@loaderTextColor: @textColor;
+@invertedLoaderTextColor: @invertedTextColor;
+
+/*-------------------
+ States
+--------------------*/
+
+@indeterminateDirection: reverse;
+@indeterminateSpeed: (2 * @loaderSpeed);
+
+/*-------------------
+ Variations
+--------------------*/
+
+@inlineVerticalAlign: middle;
+@inlineMargin: 0em;
+
+/* Exact Sizes (Avoids Rounding Errors) */
+@mini : @14px;
+@tiny : @16px;
+@small : @24px;
+@medium : @32px;
+@large : @48px;
+@big : @52px;
+@huge : @58px;
+@massive : @64px;
+
+@miniOffset: 0em 0em 0em -(@mini / 2);
+@tinyOffset: 0em 0em 0em -(@tiny / 2);
+@smallOffset: 0em 0em 0em -(@small / 2);
+@mediumOffset: 0em 0em 0em -(@medium / 2);
+@largeOffset: 0em 0em 0em -(@large / 2);
+@bigOffset: 0em 0em 0em -(@big / 2);
+@hugeOffset: 0em 0em 0em -(@huge / 2);
+@massiveOffset: 0em 0em 0em -(@massive / 2);
+
+@tinyFontSize: @relativeTiny;
+@miniFontSize: @relativeMini;
+@smallFontSize: @relativeSmall;
+@mediumFontSize: @relativeMedium;
+@largeFontSize: @relativeLarge;
+@bigFontSize: @relativeBig;
+@hugeFontSize: @relativeHuge;
+@massiveFontSize: @relativeMassive;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/rail.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/rail.overrides b/semantic/src/themes/default/elements/rail.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/rail.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/rail.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/rail.variables b/semantic/src/themes/default/elements/rail.variables
new file mode 100644
index 0000000..321a26d
--- /dev/null
+++ b/semantic/src/themes/default/elements/rail.variables
@@ -0,0 +1,34 @@
+/*******************************
+ Rail
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@width: 300px;
+@height: 100%;
+
+@distance: 4rem;
+@splitDistance: (@distance / 2);
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Close */
+@closeDistance: 2em;
+@veryCloseDistance: 1em;
+
+@splitCloseDistance: (@closeDistance / 2);
+@splitVeryCloseDistance: (@veryCloseDistance / 2);
+
+@closeWidth: ~"calc("@width~" + "@splitCloseDistance~")";
+@veryCloseWidth: ~"calc("@width~" + "@splitVeryCloseDistance~")";
+
+/* Dividing */
+@dividingBorder: 1px solid @borderColor;
+@dividingDistance: 5rem;
+@splitDividingDistance: (@dividingDistance / 2);
+@dividingWidth: @width + @splitDividingDistance;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/reveal.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/reveal.overrides b/semantic/src/themes/default/elements/reveal.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/reveal.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/reveal.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/reveal.variables b/semantic/src/themes/default/elements/reveal.variables
new file mode 100644
index 0000000..dafa5de
--- /dev/null
+++ b/semantic/src/themes/default/elements/reveal.variables
@@ -0,0 +1,17 @@
+/*******************************
+ Reveal
+*******************************/
+
+@transitionDelay: 0.1s;
+@transitionDuration: 0.5s;
+@transitionEasing: cubic-bezier(0.175, 0.885, 0.320, 1);
+@transition: all @transitionDuration @defaultEasing @transitionDelay;
+
+@bottomZIndex: 2;
+@topZIndex: 3;
+@activeZIndex: 4;
+
+/* Types */
+@rotateDegrees: 110deg;
+@moveTransition: transform @transitionDuration @transitionEasing @transitionDelay;
+@slideTransition: transform @transitionDuration @defaultEasing @transitionDelay;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/segment.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/segment.overrides b/semantic/src/themes/default/elements/segment.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/segment.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/segment.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/segment.variables b/semantic/src/themes/default/elements/segment.variables
new file mode 100644
index 0000000..16a545e
--- /dev/null
+++ b/semantic/src/themes/default/elements/segment.variables
@@ -0,0 +1,139 @@
+/*******************************
+ Segment
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@background: @white;
+@borderWidth: 1px;
+@border: @borderWidth solid @borderColor;
+
+@boxShadow: @subtleShadow;
+@verticalPadding: 1em;
+@horizontalPadding: 1em;
+@padding: @verticalPadding @horizontalPadding;
+
+@verticalMargin: 1rem;
+@horizontalMargin: 0em;
+@margin: @verticalMargin @horizontalMargin;
+@borderRadius: @defaultBorderRadius;
+
+/*-------------------
+ Group
+--------------------*/
+
+@groupedMargin: @margin;
+@groupedBorder: @border;
+@groupedBoxShadow: @boxShadow;
+@groupedBorderRadius: @borderRadius;
+
+@nestedGroupMargin: @verticalMargin @verticalMargin;
+
+@groupedSegmentBorder: none;
+@groupedSegmentDivider: @border;
+@groupedSegmentMargin: 0em;
+@groupedSegmentWidth: auto;
+@groupedSegmentBoxShadow: none;
+
+/*-------------------
+ Coupling
+--------------------*/
+
+/* Page Grid Segment */
+@pageGridMargin: (2 * @verticalPadding);
+
+/*******************************
+ States
+*******************************/
+
+/* Loading Dimmer */
+@loaderDimmerColor: rgba(255, 255, 255, 0.8);
+@loaderDimmerZIndex: 100;
+
+/* Loading Spinner */
+@loaderSize: 3em;
+@loaderLineZIndex: 101;
+
+
+/*******************************
+ Variations
+*******************************/
+
+/* Piled */
+@piledZIndex: auto;
+@piledMargin: 3em;
+@piledBoxShadow: '';
+@piledDegrees: 1.2deg;
+@piledBorder: @border;
+
+/* Circular */
+@circularPadding: 2em;
+
+/* Stacked */
+@stackedHeight: 6px;
+@stackedPageBackground: @subtleTransparentBlack;
+@stackedPadding: @verticalPadding + (0.4em);
+@tallStackedPadding: @verticalPadding + (0.8em);
+
+/* Raised */
+@raisedBoxShadow: @floatingShadow;
+
+/* Padded */
+@paddedSegmentPadding: 1.5em;
+@veryPaddedSegmentPadding: 3em;
+
+/* Attached */
+@attachedTopOffset: 0px;
+@attachedBottomOffset: 0px;
+@attachedHorizontalOffset: -@borderWidth;
+@attachedWidth: ~"calc(100% + "-@attachedHorizontalOffset * 2~")";
+@attachedBoxShadow: none;
+@attachedBorder: @borderWidth solid @solidBorderColor;
+@attachedBottomBoxShadow:
+ @boxShadow,
+ @attachedBoxShadow
+;
+
+/* Inverted */
+@invertedBackground: @black;
+
+/* Floated */
+@floatedDistance: 1em;
+
+/* Basic */
+@basicBackground: none transparent;
+@basicBorder: none;
+@basicBoxShadow: none;
+@basicBorderRadius: 0px;
+
+/* Colors */
+@coloredBorderSize: 2px;
+
+/* Ordinality */
+@secondaryBackground: @darkWhite;
+@secondaryColor: @mutedTextColor;
+
+@tertiaryBackground: @midWhite;
+@tertiaryColor: @mutedTextColor;
+
+@secondaryInvertedLightness: 0.2;
+@secondaryInvertedBackground:
+ lighten(@black, (@secondaryInvertedLightness * 100))
+ linear-gradient(
+ rgba(255, 255, 255, @secondaryInvertedLightness) 0%,
+ rgba(255, 255, 255, @secondaryInvertedLightness) 100%
+ )
+;
+@secondaryInvertedColor: @invertedMutedTextColor;
+
+@tertiaryInvertedLightness: 0.35;
+@tertiaryInvertedBackground:
+ lighten(@black, (@tertiaryInvertedLightness * 100))
+ linear-gradient(
+ rgba(255, 255, 255, @tertiaryInvertedLightness) 0%,
+ rgba(255, 255, 255, @tertiaryInvertedLightness) 100%
+ )
+;
+@tertiaryInvertedColor: @invertedMutedTextColor;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/step.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/step.overrides b/semantic/src/themes/default/elements/step.overrides
new file mode 100644
index 0000000..e7aca52
--- /dev/null
+++ b/semantic/src/themes/default/elements/step.overrides
@@ -0,0 +1,16 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
+@font-face {
+ font-family: 'Step';
+ src:
+ url(data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiI
nASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAA
IABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwA
FJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIF
hiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgE
UKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=) format('truetype'),
+ url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6
cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb
8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH
+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA) format('woff')
+ ;
+}
+.ui.steps .step.completed > .icon:before,
+.ui.ordered.steps .step.completed:before {
+ font-family: 'Step';
+ content: '\e800'; /* '\ue800' */
+}
\ No newline at end of file
[22/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/assets/fonts/icons.woff
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/assets/fonts/icons.woff b/semantic/src/themes/default/assets/fonts/icons.woff
new file mode 100644
index 0000000..6e7483c
Binary files /dev/null and b/semantic/src/themes/default/assets/fonts/icons.woff differ
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/assets/fonts/icons.woff2
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/assets/fonts/icons.woff2 b/semantic/src/themes/default/assets/fonts/icons.woff2
new file mode 100644
index 0000000..7eb74fd
Binary files /dev/null and b/semantic/src/themes/default/assets/fonts/icons.woff2 differ
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/assets/images/flags.png
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/assets/images/flags.png b/semantic/src/themes/default/assets/images/flags.png
new file mode 100644
index 0000000..cdd33c3
Binary files /dev/null and b/semantic/src/themes/default/assets/images/flags.png differ
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/breadcrumb.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/breadcrumb.overrides b/semantic/src/themes/default/collections/breadcrumb.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/collections/breadcrumb.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/breadcrumb.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/breadcrumb.variables b/semantic/src/themes/default/collections/breadcrumb.variables
new file mode 100644
index 0000000..7d7f619
--- /dev/null
+++ b/semantic/src/themes/default/collections/breadcrumb.variables
@@ -0,0 +1,33 @@
+/*******************************
+ Breadcrumb
+*******************************/
+
+/*-------------------
+ Breadcrumb
+--------------------*/
+
+@verticalMargin: 0em;
+@display: inline-block;
+@verticalAlign: middle;
+
+@dividerSpacing: @3px;
+@dividerOpacity: 0.7;
+@dividerColor: @lightTextColor;
+
+@dividerSize: @relativeSmall;
+@dividerVerticalAlign: baseline;
+
+@iconDividerSize: @relativeTiny;
+@iconDividerVerticalAlign: baseline;
+
+@sectionMargin: 0em;
+@sectionPadding: 0em;
+
+/* Coupling */
+@segmentPadding: @relativeMini @relativeMedium;
+
+/*-------------------
+ States
+--------------------*/
+
+@activeFontWeight: bold;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/form.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/form.overrides b/semantic/src/themes/default/collections/form.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/collections/form.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/form.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/form.variables b/semantic/src/themes/default/collections/form.variables
new file mode 100644
index 0000000..6ae407b
--- /dev/null
+++ b/semantic/src/themes/default/collections/form.variables
@@ -0,0 +1,195 @@
+/*******************************
+ Form
+*******************************/
+
+/*-------------------
+ Elements
+--------------------*/
+
+/* Form */
+@gutterWidth: 1em;
+@rowDistance: 1em;
+
+/* Text */
+@paragraphMargin: @rowDistance 0em;
+
+/* Field */
+@fieldMargin: 0em 0em @rowDistance;
+
+/* Fields */
+@fieldsMargin: 0em -(@gutterWidth / 2) @rowDistance;
+
+/* Form Label */
+@labelDistance: @4px;
+@labelMargin: 0em 0em @labelDistance 0em;
+@labelFontSize: @relativeSmall;
+@labelFontWeight: bold;
+@labelTextTransform: none;
+@labelColor: @textColor;
+
+/* Input */
+@inputFont: @pageFont;
+@inputWidth: 100%;
+@inputFontSize: 1em;
+@inputPadding: (@inputVerticalPadding + ((1em - @inputLineHeight) / 2)) @inputHorizontalPadding;
+@inputBorder: 1px solid @borderColor;
+@inputBorderRadius: @absoluteBorderRadius;
+@inputColor: @textColor;
+@inputTransition:
+ color @defaultDuration @defaultEasing,
+ border-color @defaultDuration @defaultEasing
+;
+@inputBoxShadow: 0em 0em 0em 0em transparent inset;
+
+/* Select */
+@selectBackground: @white;
+@selectBorderRadius: @inputBorderRadius;
+@selectBorder: @inputBorder;
+@selectPadding: 0.62em @inputHorizontalPadding;
+@selectBoxShadow: @inputBoxShadow;
+@selectTransition: @inputTransition;
+@selectColor: @inputColor;
+
+/* Text Area */
+@textAreaPadding: @inputVerticalPadding @inputHorizontalPadding;
+@textAreaHeight: 12em;
+@textAreaResize: vertical;
+@textAreaLineHeight: 1.2857;
+@textAreaMinHeight: 8em;
+@textAreaMaxHeight: 24em;
+@textAreaBackground: @inputBackground;
+@textAreaBorder: @inputBorder;
+@textAreaFontSize: @inputFontSize;
+@textAreaTransition: @inputTransition;
+
+/* Checkbox */
+@checkboxVerticalAlign: top;
+@checkboxLabelFontSize: 1em;
+@checkboxLabelTextTransform: @labelTextTransform;
+
+/* Inline Validation Prompt */
+@promptBackground: @white;
+@promptBorderColor: @formErrorBorder;
+@promptBorder: 1px solid @promptBorderColor;
+@promptTextColor: @formErrorColor;
+@inlinePromptMargin: -0.25em 0em -0.5em 0.5em;
+@inlinePromptBorderWidth: 1px;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Focus */
+@inputFocusPointerSize: 0px;
+
+/* Input Focus */
+@inputFocusBackground: @inputBackground;
+@inputFocusBorderColor: @focusedFormBorderColor;
+@inputFocusColor: @selectedTextColor;
+@inputFocusBoxShadow: @inputFocusPointerSize 0em 0em 0em @selectedBorderColor inset;
+@inputFocusBorderRadius: @inputBorderRadius;
+
+/* Text Area Focus */
+@textAreaFocusBackground: @inputFocusBackground;
+@textAreaFocusBorderColor: @inputFocusBorderColor;
+@textAreaFocusColor: @inputFocusColor;
+@textAreaFocusBoxShadow: @inputFocusBoxShadow;
+@textAreaFocusBorderRadius: @inputFocusBorderRadius;
+
+/* Disabled */
+@disabledLabelOpacity: @disabledOpacity;
+
+/* Errored Input */
+@formErrorColor: @negativeTextColor;
+@formErrorBorder: @negativeBorderColor;
+@formErrorBackground: @negativeBackgroundColor;
+
+/* AutoFill */
+@inputAutoFillBackground: #FFFFF0;
+@inputAutoFillBorder: #E5DFA1;
+@inputAutoFillFocusBackground: @inputAutoFillBackground;
+@inputAutoFillFocusBorder: #D5C315;
+@inputAutoFillErrorBackground: #FFFAF0;
+@inputAutoFillErrorBorder: #E0B4B4;
+
+
+/* Input Error */
+@inputErrorBorderRadius: '';
+@inputErrorBoxShadow: none;
+
+/* Dropdown Error */
+@dropdownErrorHoverBackground: #FBE7E7;
+@dropdownErrorSelectedBackground: @dropdownErrorHoverBackground;
+@dropdownErrorActiveBackground: #FDCFCF;
+@dropdownErrorLabelBackground: #EACBCB;
+@dropdownErrorLabelColor: @errorTextColor;
+
+/* Focused Error */
+@inputErrorFocusBackground: @negativeBackgroundColor;
+@inputErrorFocusColor: @negativeTextColor;
+@inputErrorFocusBorder: @negativeBorderColor;
+@inputErrorFocusBoxShadow: none;
+
+/* Placeholder Error */
+@inputErrorPlaceholderColor: lighten(@formErrorColor, 40);
+@inputErrorPlaceholderFocusColor: lighten(@formErrorColor, 30);
+
+/* Loading Dimmer */
+@loaderDimmerColor: rgba(255, 255, 255, 0.8);
+@loaderDimmerZIndex: 100;
+
+/* Loading Spinner */
+@loaderSize: 3em;
+@loaderLineZIndex: 101;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Required */
+@requiredContent: '*';
+@requiredColor: @negativeColor;
+@requiredVerticalOffset: -0.2em;
+@requiredDistance: 0.2em;
+@requiredMargin: @requiredVerticalOffset 0em 0em @requiredDistance;
+
+/* Inverted */
+@invertedInputBackground: @inputBackground;
+@invertedInputBorderColor: @whiteBorderColor;
+@invertedInputBoxShadow: @inputBoxShadow;
+@invertedInputColor: @inputColor;
+@invertedLabelColor: @invertedTextColor;
+@invertedInputBoxShadow: none;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Grouped Fields */
+@groupedMargin: @fieldMargin;
+@groupedFieldMargin: 0.5em 0em;
+
+@groupedLabelDistance: @labelDistance;
+@groupedLabelColor: @labelColor;
+@groupedLabelMargin: @labelMargin;
+@groupedLabelFontSize: @labelFontSize;
+@groupedLabelFontWeight: @labelFontWeight;
+@groupedLabelTextTransform: @labelTextTransform;
+
+
+/* Inline */
+@inlineInputSize: @relativeMedium;
+
+@inlineLabelDistance: @relativeTiny;
+@inlineLabelColor: @labelColor;
+@inlineLabelFontSize: @labelFontSize;
+@inlineLabelFontWeight: @labelFontWeight;
+@inlineLabelTextTransform: @labelTextTransform;
+
+@groupedInlineLabelMargin: 0.035714em 1em 0em 0em;
+
+/*-------------------
+ Groups
+--------------------*/
+
+@inlineFieldsMargin: 0em 1em 0em 0em;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/grid.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/grid.overrides b/semantic/src/themes/default/collections/grid.overrides
new file mode 100644
index 0000000..0e06821
--- /dev/null
+++ b/semantic/src/themes/default/collections/grid.overrides
@@ -0,0 +1,4 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/grid.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/grid.variables b/semantic/src/themes/default/collections/grid.variables
new file mode 100644
index 0000000..cdf5956
--- /dev/null
+++ b/semantic/src/themes/default/collections/grid.variables
@@ -0,0 +1,103 @@
+/*******************************
+ Grid
+*******************************/
+
+/* Inherited From Site */
+
+// @mobileBreakpoint
+// @tabletBreakpoint
+// @computerBreakpoint
+// @largeMonitorBreakpoint
+// @widescreenMonitorBreakpoint
+
+/*******************************
+ Grid
+*******************************/
+
+@minWidth: 320px;
+
+@gutterWidth: 2rem;
+@rowSpacing: 2rem;
+
+@tableWidth: ~"calc(100% + "@gutterWidth~")";
+@columnMaxImageWidth: 100%;
+
+@consecutiveGridDistance: (@rowSpacing / 2);
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Relaxed
+---------------*/
+
+@relaxedGutterWidth: 3rem;
+@veryRelaxedGutterWidth: 5rem;
+
+/*--------------
+ Divided
+---------------*/
+
+@dividedBorder: -1px 0px 0px 0px @borderColor;
+@verticallyDividedBorder: 0px -1px 0px 0px @borderColor;
+
+@dividedInvertedBorder: -1px 0px 0px 0px @whiteBorderColor;
+@verticallyDividedInvertedBorder: 0px -1px 0px 0px @whiteBorderColor;
+
+/*--------------
+ Celled
+---------------*/
+
+@celledMargin: 1em 0em;
+@celledWidth: 1px;
+@celledBorderColor: @solidBorderColor;
+
+@celledPadding: 1em;
+@celledRelaxedPadding: 1.5em;
+@celledVeryRelaxedPadding: 2em;
+
+@celledGridDivider: 0px 0px 0px @celledWidth @celledBorderColor;
+@celledRowDivider: 0px (-@celledWidth) 0px 0px @celledBorderColor;
+@celledColumnDivider: (-@celledWidth) 0px 0px 0px @celledBorderColor;
+
+
+/*--------------
+ Stackable
+---------------*/
+
+@stackableRowSpacing: @rowSpacing;
+@stackableGutter: @gutterWidth;
+@stackableMobileBorder: 1px solid @borderColor;
+@stackableInvertedMobileBorder: 1px solid @whiteBorderColor;
+
+
+/*******************************
+ Legacy
+*******************************/
+
+/*--------------
+ Page
+---------------*/
+
+/* Legacy (DO NOT USE)
+ */
+@mobileWidth: auto;
+@mobileMargin: 0em;
+@mobileGutter: 0em;
+
+@tabletWidth: auto;
+@tabletMargin: 0em;
+@tabletGutter: 2em;
+
+@computerWidth: auto;
+@computerMargin: 0em;
+@computerGutter: 3%;
+
+@largeMonitorWidth: auto;
+@largeMonitorMargin: 0em;
+@largeMonitorGutter: 15%;
+
+@widescreenMonitorWidth: auto;
+@widescreenMargin: 0em;
+@widescreenMonitorGutter: 23%;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/menu.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/menu.overrides b/semantic/src/themes/default/collections/menu.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/collections/menu.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/menu.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/menu.variables b/semantic/src/themes/default/collections/menu.variables
new file mode 100644
index 0000000..2e4bb79
--- /dev/null
+++ b/semantic/src/themes/default/collections/menu.variables
@@ -0,0 +1,458 @@
+/*******************************
+ Menu
+*******************************/
+
+/*-------------------
+ Collection
+--------------------*/
+
+/* Menu */
+@verticalMargin: @medium;
+@horizontalMargin: 0em;
+@margin: @verticalMargin @horizontalMargin;
+@background: #FFFFFF;
+@fontFamily: @pageFont;
+@itemBackground: none;
+@fontWeight: normal;
+@borderWidth: 1px;
+@border: @borderWidth solid @borderColor;
+@boxShadow: @subtleShadow;
+@borderRadius: @defaultBorderRadius;
+@minHeight: (@itemVerticalPadding * 2) + 1em;
+
+/* Menu Item */
+@itemVerticalPadding: @relativeSmall;
+@itemHorizontalPadding: @relativeLarge;
+@itemTextTransform: none;
+@itemTransition:
+ background @defaultDuration @defaultEasing,
+ box-shadow @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing
+;
+@itemFontWeight: normal;
+@itemTextColor: @textColor;
+
+/* Divider */
+@dividerSize: 1px;
+@dividerBackground: @internalBorderColor;
+
+/* Sub Menu */
+@subMenuDistance: 0.5em;
+@subMenuMargin: @subMenuDistance -@itemHorizontalPadding 0em;
+@subMenuFontSize: @relativeTiny;
+@subMenuTextColor: rgba(0, 0, 0, 0.5);
+
+@subMenuIndent: 0em;
+@subMenuHorizontalPadding: (@itemHorizontalPadding / @tinySize) + @subMenuIndent;
+@subMenuVerticalPadding: 0.5em;
+
+/* Text Item */
+@textLineHeight: 1.3;
+
+/*--------------
+ Elements
+---------------*/
+
+/* Icon */
+@iconFloat: none;
+@iconMargin: 0em @relative5px 0em 0em;
+@iconOpacity: 0.9;
+
+/* Dropdown Icon */
+@dropdownIconFloat: right;
+@dropdownIconDistance: 1em;
+
+/* Header */
+@headerBackground: '';
+@headerWeight: bold;
+@headerTextTransform: normal;
+
+/* Vertical Icon */
+@verticalIconFloat: right;
+@verticalIconMargin: 0em 0em 0em 0.5em;
+
+/* Vertical Header */
+@verticalHeaderMargin: 0em 0em 0.5em;
+@verticalHeaderFontSize: @relativeMedium;
+@verticalHeaderFontWeight: bold;
+
+/* Pointing Arrow */
+@arrowSize: @relative8px;
+@arrowBorderWidth: 1px;
+@arrowBorder: @arrowBorderWidth solid @solidBorderColor;
+@arrowTransition: background @defaultDuration @defaultEasing;
+@arrowZIndex: 2;
+
+@arrowHoverColor: #F2F2F2;
+@arrowActiveColor: @arrowHoverColor;
+@arrowActiveHoverColor: @arrowActiveColor;
+
+@arrowVerticalHoverColor: @arrowHoverColor;
+@arrowVerticalActiveColor: @arrowActiveColor;
+@arrowVerticalSubMenuColor: @white;
+
+/*--------------
+ Couplings
+---------------*/
+
+/* Button */
+@buttonSize: @relativeMedium;
+@buttonOffset: 0em;
+@buttonMargin: -0.5em 0em;
+@buttonVerticalPadding: @relativeMini;
+
+/* Input */
+@inputSize: @relativeMedium;
+@inputVerticalMargin: -0.5em;
+@inputOffset: 0em;
+@inputVerticalPadding: @relative8px;
+
+/* Image */
+@imageMargin: -0.3em 0em;
+@imageWidth: 2.5em;
+@verticalImageWidth: auto;
+
+/* Label */
+@labelOffset: -0.15em;
+@labelBackground: #999999;
+@labelTextColor: @white;
+
+@labelTextMargin: 1em;
+@labelVerticalPadding: 0.3em;
+@labelHorizontalPadding: @relativeMini;
+
+@labelAndIconFloat: none;
+@labelAndIconMargin: 0em 0.5em 0em 0em;
+
+/* Dropdown in Menu */
+@dropdownMenuBoxShadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);
+
+@dropdownBackground: #FFFFFF;
+@dropdownMenuDistance: 0em;
+@dropdownMenuBorderRadius: @borderRadius;
+
+@dropdownItemFontSize: @relativeMedium;
+@dropdownItemPadding: @relativeMini @relativeLarge;
+@dropdownItemBackground: transparent;
+@dropdownItemColor: @textColor;
+@dropdownItemTextTransform: none;
+@dropdownItemFontWeight: normal;
+@dropdownItemBoxShadow: none;
+@dropdownItemTransition: none;
+
+@dropdownItemIconFloat: none;
+@dropdownItemIconFontSize: @relativeMedium;
+@dropdownItemIconMargin: 0em 0.75em 0em 0em;
+
+@dropdownHoveredItemBackground: @transparentBlack;
+@dropdownHoveredItemColor: @selectedTextColor;
+
+/* Dropdown Variations */
+@dropdownVerticalMenuBoxShadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);
+@secondaryDropdownMenuDistance: @relative5px;
+@pointingDropdownMenuDistance: 0.75em;
+@invertedSelectionDropdownColor: @invertedTextColor;
+
+/*--------------
+ States
+---------------*/
+
+/* Hovered Item */
+@hoverItemBackground: @subtleTransparentBlack;
+@hoverItemTextColor: @selectedTextColor;
+
+/* Pressed Item */
+@pressedItemBackground: @subtleTransparentBlack;
+@pressedItemTextColor: @hoverItemTextColor;
+
+
+/* Active Item */
+@activeItemBackground: @transparentBlack;
+@activeItemTextColor: @selectedTextColor;
+@activeItemFontWeight: normal;
+@activeIconOpacity: 1;
+@activeItemBoxShadow: none;
+
+/* Active Hovered Item */
+@activeHoverItemBackground: @transparentBlack;
+@activeHoverItemColor: @selectedTextColor;
+
+/* Selected Dropdown */
+@dropdownSelectedItemBackground: @transparentBlack;
+@dropdownSelectedItemColor: @selectedTextColor;
+
+/* Active Dropdown */
+@dropdownActiveItemBackground: @subtleTransparentBlack;
+@dropdownActiveItemColor: @selectedTextColor;
+@dropdownActiveItemFontWeight: bold;
+
+/* Active Sub Menu */
+@subMenuActiveBackground: transparent;
+@subMenuActiveTextColor: @activeItemTextColor;
+@subMenuActiveFontWeight: bold;
+
+
+/*--------------
+ Types
+---------------*/
+
+/* Vertical */
+@verticalBoxShadow: @boxShadow;
+@verticalPointerWidth: 2px;
+@verticalBackground: #FFFFFF;
+@verticalItemBackground: none;
+@verticalDividerBackground: @dividerBackground;
+
+@verticalActiveBoxShadow: none;
+
+
+/* Secondary */
+@secondaryBackground: none;
+@secondaryMargin: 0em -@secondaryItemSpacing;
+@secondaryItemBackground: none;
+@secondaryItemSpacing: @relative5px;
+@secondaryItemMargin: 0em @secondaryItemSpacing;
+@secondaryItemVerticalPadding: @relativeMini;
+@secondaryItemHorizontalPadding: @relativeSmall;
+@secondaryItemPadding: @relativeMini @relativeSmall;
+@secondaryItemBorderRadius: @defaultBorderRadius;
+@secondaryItemTransition: color @defaultDuration @defaultEasing;
+@secondaryItemColor: @unselectedTextColor;
+
+@secondaryHoverItemBackground: @transparentBlack;
+@secondaryHoverItemColor: @selectedTextColor;
+
+@secondaryActiveItemBackground: @transparentBlack;
+@secondaryActiveItemColor: @selectedTextColor;
+@secondaryActiveHoverItemBackground: @transparentBlack;
+@secondaryActiveHoverItemColor: @selectedTextColor;
+
+@secondaryActiveHoveredItemBackground: @transparentBlack;
+@secondaryActiveHoveredItemColor: @selectedTextColor;
+
+@secondaryHeaderBackground: none transparent;
+@secondaryHeaderBorder: none;
+
+@secondaryItemVerticalSpacing: @secondaryItemSpacing;
+@secondaryVerticalItemMargin: 0em 0em @secondaryItemVerticalSpacing;
+@secondaryVerticalItemBorderRadius: @defaultBorderRadius;
+
+@secondaryMenuSubMenuMargin: 0em -@secondaryItemHorizontalPadding;
+@secondaryMenuSubMenuItemMargin: 0em;
+@secondarySubMenuHorizontalPadding: (@itemHorizontalPadding / @tinySize) + @subMenuIndent;
+@secondaryMenuSubMenuItemPadding: @relative7px @secondarySubMenuHorizontalPadding;
+
+/* Pointing */
+@secondaryPointingBorderWidth: 2px;
+@secondaryPointingBorderColor: @borderColor;
+@secondaryPointingItemVerticalPadding: @relativeTiny;
+@secondaryPointingItemHorizontalPadding: @relativeLarge;
+
+@secondaryPointingHoverTextColor: @textColor;
+
+@secondaryPointingActiveBorderColor: @black;
+@secondaryPointingActiveTextColor: @selectedTextColor;
+@secondaryPointingActiveFontWeight: bold;
+
+@secondaryPointingActiveDropdownBorderColor: transparent;
+
+@secondaryPointingActiveHoverBorderColor: @secondaryPointingActiveBorderColor;
+@secondaryPointingActiveHoverTextColor: @secondaryPointingActiveTextColor;
+
+@secondaryPointingHeaderColor: @darkTextColor;
+@secondaryVerticalPointingItemMargin: 0em -@secondaryPointingBorderWidth 0em 0em;
+
+
+/* Inverted Secondary */
+@secondaryInvertedColor: @invertedLightTextColor;
+
+@secondaryInvertedHoverBackground: @transparentWhite;
+@secondaryInvertedHoverColor: @invertedSelectedTextColor;
+
+@secondaryInvertedActiveBackground: @strongTransparentWhite;
+@secondaryInvertedActiveColor: @invertedSelectedTextColor;
+
+/* Inverted Pointing */
+@secondaryPointingInvertedBorderColor: @whiteBorderColor;
+@secondaryPointingInvertedItemTextColor: @invertedTextColor;
+@secondaryPointingInvertedItemHeaderColor: @white;
+@secondaryPointingInvertedItemHoverTextColor: @selectedTextColor;
+@secondaryPointingInvertedActiveBorderColor: @white;
+@secondaryPointingInvertedActiveColor: @invertedSelectedTextColor;
+
+
+/* Tiered */
+@tieredActiveItemBackground: #FCFCFC;
+@tieredActiveMenuBackground: #FCFCFC;
+
+@tieredSubMenuTextTransform: normal;
+@tieredSubMenuFontWeight: normal;
+
+@tieredSubMenuColor: @lightTextColor;
+
+@tieredSubMenuHoverBackground: none transparent;
+@tieredSubMenuHoverColor: @hoveredTextColor;
+
+@tieredSubMenuActiveBackground: none transparent;
+@tieredSubMenuActiveColor: @selectedTextColor;
+
+@tieredInvertedSubMenuBackground: rgba(0, 0, 0, 0.2);
+
+
+/* Icon */
+@iconMenuTextAlign: center;
+@iconMenuItemColor: @black;
+@iconMenuInvertedItemColor: @white;
+
+
+/* Tabular */
+@tabularBorderColor: @solidBorderColor;
+@tabularBackgroundColor: transparent;
+@tabularBackground: none @tabularBackgroundColor;
+@tabularBorderWidth: 1px;
+@tabularOppositeBorderWidth: @tabularBorderWidth + 1px;
+@tabularVerticalPadding: @itemVerticalPadding;
+@tabularHorizontalPadding: @relativeHuge;
+@tabularBorderRadius: @defaultBorderRadius;
+@tabularTextColor: @itemTextColor;
+
+@tabularHoveredTextColor: @hoveredTextColor;
+
+@tabularVerticalBackground: none @tabularBackgroundColor;
+
+@tabularFluidOffset: 1px;
+@tabularFluidWidth: ~"calc(100% + "(@tabularFluidOffset * 2)~")";
+
+@tabularActiveBackground: none @white;
+@tabularActiveColor: @selectedTextColor;
+@tabularActiveBoxShadow: none;
+@tabularActiveWeight: bold;
+
+
+
+/* Pagination */
+@paginationMinWidth: 3em;
+@paginationActiveBackground: @transparentBlack;
+@paginationActiveTextColor: @selectedTextColor;
+
+/* Labeled Icon */
+@labeledIconItemHorizontalPadding: @relativeMassive;
+@labeledIconSize: @relativeMassive;
+@labeledIconMinWidth: 6em;
+@labeledIconTextMargin: 0.5rem;
+
+
+/* Text */
+@textMenuItemSpacing: @relative7px;
+@textMenuMargin: @relativeMedium -(@textMenuItemSpacing);
+@textMenuItemColor: @mutedTextColor;
+@textMenuItemFontWeight: normal;
+@textMenuItemMargin: 0em 0em;
+@textMenuItemPadding: @relative5px @textMenuItemSpacing;
+@textMenuItemTransition: opacity @defaultDuration @defaultEasing;
+
+@textMenuSubMenuMargin: 0em;
+@textMenuSubMenuItemMargin: 0em;
+@textMenuSubMenuItemPadding: @relative7px 0em;
+
+@textMenuActiveItemFontWeight: normal;
+@textMenuActiveItemColor: @selectedTextColor;
+
+@textMenuHeaderSize: @relativeSmall;
+@textMenuHeaderColor: @darkTextColor;
+@textMenuHeaderFontWeight: bold;
+@textMenuHeaderTextTransform: uppercase;
+
+@textVerticalMenuMargin: @relativeMedium 0em;
+@textVerticalMenuHeaderMargin: @relative8px 0em @relative10px;
+@textVerticalMenuItemMargin: @relative8px 0em;
+
+@textVerticalMenuIconFloat: none;
+@textVerticalMenuIconMargin: @iconMargin;
+
+
+/*--------------
+ Variations
+---------------*/
+
+/* Inverted */
+@invertedBackground: @black;
+@invertedBoxShadow: none;
+@invertedBorder: 0px solid transparent;
+@invertedHeaderBackground: transparent;
+
+@invertedItemBackground: transparent;
+@invertedItemTextColor: @invertedTextColor;
+
+/* Inverted Sub Menu */
+@invertedSubMenuBackground: transparent;
+@invertedSubMenuColor: @invertedUnselectedTextColor;
+
+/* Inverted Hover */
+@invertedHoverBackground: @transparentWhite;
+@invertedHoverColor: @invertedSelectedTextColor;
+
+@invertedSubMenuHoverBackground: transparent;
+@invertedSubMenuHoverColor: @invertedSelectedTextColor;
+
+/* Pressed */
+@invertedMenuPressedBackground: @transparentWhite;
+@invertedMenuPressedColor: @invertedSelectedTextColor;
+
+/* Inverted Active */
+@invertedActiveBackground: @strongTransparentWhite;
+@invertedActiveColor: @invertedSelectedTextColor;
+@invertedArrowActiveColor: #3D3E3F;
+
+/* Inverted Active Hover */
+@invertedActiveHoverBackground: @invertedActiveBackground;
+@invertedActiveHoverColor: @white;
+@invertedArrowActiveHoverColor: @invertedArrowActiveColor;
+
+@invertedSubMenuActiveBackground: transparent;
+@invertedSubMenuActiveColor: @white;
+
+/* Inverted Menu Divider */
+@invertedDividerBackground: rgba(255, 255, 255, 0.08);
+@invertedVerticalDividerBackground: @invertedDividerBackground;
+
+/* Inverted Colored */
+@invertedColoredDividerBackground: @dividerBackground;
+@invertedColoredActiveBackground: @strongTransparentBlack;
+
+/* Fixed */
+@fixedPrecedingGridMargin: 2.75rem;
+
+/* Floated */
+@floatedDistance: 0.5rem;
+
+/* Attached */
+@attachedTopOffset: 0px;
+@attachedBottomOffset: 0px;
+@attachedHorizontalOffset: -@borderWidth;
+@attachedWidth: ~"calc(100% + "-@attachedHorizontalOffset * 2~")";
+@attachedBoxShadow: none;
+@attachedBorder: @borderWidth solid @solidBorderColor;
+@attachedBottomBoxShadow:
+ @boxShadow,
+ @attachedBoxShadow
+;
+
+/* Resize large sizes */
+@mini: @11px;
+@tiny: @12px;
+@small: @13px;
+@large: @15px;
+@huge: @16px;
+@big: @17px;
+@massive: @18px;
+
+/* Sizes */
+@miniWidth: 9rem;
+@tinyWidth: 11rem;
+@smallWidth: 13rem;
+@mediumWidth: 15rem;
+@largeWidth: 18rem;
+@hugeWidth: 20rem;
+@bigWidth: 22rem;
+@massiveWidth: 25rem;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/message.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/message.overrides b/semantic/src/themes/default/collections/message.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/collections/message.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/message.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/message.variables b/semantic/src/themes/default/collections/message.variables
new file mode 100644
index 0000000..c2e5318
--- /dev/null
+++ b/semantic/src/themes/default/collections/message.variables
@@ -0,0 +1,157 @@
+/*******************************
+ Message
+*******************************/
+
+// @textColor
+
+/*-------------------
+ Elements
+--------------------*/
+
+@verticalMargin: 1em;
+@verticalPadding: 1em;
+@horizontalPadding: 1.5em;
+@background: #F8F8F9;
+@lineHeightOffset: ((@lineHeight - 1em) / 2);
+
+@borderRadius: @defaultBorderRadius;
+@borderWidth: 1px;
+@borderShadow: 0px 0px 0px @borderWidth @strongBorderColor inset;
+@shadowShadow: 0px 0px 0px 0px rgba(0, 0, 0, 0);
+@boxShadow:
+ @borderShadow,
+ @shadowShadow
+;
+
+@transition:
+ opacity @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing,
+ background @defaultDuration @defaultEasing,
+ box-shadow @defaultDuration @defaultEasing
+;
+
+/* Header */
+@headerFontSize: @relativeLarge;
+@headerFontWeight: bold;
+@headerDisplay: block;
+@headerDistance: 0rem;
+@headerMargin: -@headerLineHeightOffset 0em @headerDistance 0em;
+@headerParagraphDistance: 0.25em;
+
+/* Paragraph */
+@messageTextOpacity: 0.85;
+@messageParagraphMargin: 0.75em;
+
+/* List */
+@listOpacity: 0.85;
+@listStylePosition: inside;
+@listMargin: 0.5em;
+@listItemIndent: 1em;
+@listItemMargin: 0.3em;
+
+/* Icon */
+@iconDistance: 0.6em;
+
+/* Close Icon */
+@closeTopDistance: @verticalPadding - @lineHeightOffset;
+@closeRightDistance: 0.5em;
+@closeOpacity: 0.7;
+@closeTransition: opacity @defaultDuration @defaultEasing;
+
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Icon Message */
+@iconSize: 3em;
+@iconOpacity: 0.8;
+@iconContentDistance: 0rem;
+@iconVerticalAlign: middle;
+
+/* Attached */
+@attachedXOffset: -1px;
+@attachedYOffset: -1px;
+@attachedBoxShadow: 0em 0em 0em @borderWidth @borderColor inset;
+@attachedBottomBoxShadow:
+ @attachedBoxShadow,
+ @subtleShadow
+;
+
+/* Floating */
+@floatingBoxShadow:
+ @borderShadow,
+ @floatingShadow
+;
+
+/* Colors */
+@redBoxShadow:
+ 0px 0px 0px @borderWidth @redBorderColor inset,
+ @shadowShadow
+;
+@orangeBoxShadow:
+ 0px 0px 0px @borderWidth @orangeBorderColor inset,
+ @shadowShadow
+;
+@yellowBoxShadow:
+ 0px 0px 0px @borderWidth @yellowBorderColor inset,
+ @shadowShadow
+;
+@oliveBoxShadow:
+ 0px 0px 0px @borderWidth @oliveBorderColor inset,
+ @shadowShadow
+;
+@greenBoxShadow:
+ 0px 0px 0px @borderWidth @greenBorderColor inset,
+ @shadowShadow
+;
+@tealBoxShadow:
+ 0px 0px 0px @borderWidth @tealBorderColor inset,
+ @shadowShadow
+;
+@blueBoxShadow:
+ 0px 0px 0px @borderWidth @blueBorderColor inset,
+ @shadowShadow
+;
+@violetBoxShadow:
+ 0px 0px 0px @borderWidth @violetBorderColor inset,
+ @shadowShadow
+;
+@purpleBoxShadow:
+ 0px 0px 0px @borderWidth @purpleBorderColor inset,
+ @shadowShadow
+;
+@pinkBoxShadow:
+ 0px 0px 0px @borderWidth @pinkBorderColor inset,
+ @shadowShadow
+;
+@brownBoxShadow:
+ 0px 0px 0px @borderWidth @brownBorderColor inset,
+ @shadowShadow
+;
+
+/* Warning / Positive / Negative / Info */
+@positiveBoxShadow:
+ 0px 0px 0px @borderWidth @positiveBorderColor inset,
+ @shadowShadow
+;
+@negativeBoxShadow:
+ 0px 0px 0px @borderWidth @negativeBorderColor inset,
+ @shadowShadow
+;
+@infoBoxShadow:
+ 0px 0px 0px @borderWidth @infoBorderColor inset,
+ @shadowShadow
+;
+@warningBoxShadow:
+ 0px 0px 0px @borderWidth @warningBorderColor inset,
+ @shadowShadow
+;
+@errorBoxShadow:
+ 0px 0px 0px @borderWidth @errorBorderColor inset,
+ @shadowShadow
+;
+@successBoxShadow:
+ 0px 0px 0px @borderWidth @successBorderColor inset,
+ @shadowShadow
+;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/table.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/table.overrides b/semantic/src/themes/default/collections/table.overrides
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/collections/table.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/collections/table.variables b/semantic/src/themes/default/collections/table.variables
new file mode 100644
index 0000000..4660f6c
--- /dev/null
+++ b/semantic/src/themes/default/collections/table.variables
@@ -0,0 +1,246 @@
+/*******************************
+ Table
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@verticalMargin: 1em;
+@horizontalMargin: 0em;
+@margin: @verticalMargin @horizontalMargin;
+@borderCollapse: separate;
+@borderSpacing: 0px;
+@borderRadius: @defaultBorderRadius;
+@transition:
+ background @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing
+;
+@background: @white;
+@color: @textColor;
+@borderWidth: 1px;
+@border: @borderWidth solid @borderColor;
+@boxShadow: none;
+@textAlign: left;
+
+/*--------------
+ Parts
+---------------*/
+
+/* Table Row */
+@rowBorder: 1px solid @internalBorderColor;
+
+/* Table Cell */
+@cellVerticalPadding: @relativeMini;
+@cellHorizontalPadding: @relativeMini;
+@cellVerticalAlign: inherit;
+@cellTextAlign: inherit;
+@cellBorder: 1px solid @internalBorderColor;
+
+/* Table Header */
+@headerBorder: 1px solid @internalBorderColor;
+@headerDivider: none;
+@headerBackground: @offWhite;
+@headerAlign: inherit;
+@headerVerticalAlign: inherit;
+@headerColor: @textColor;
+@headerVerticalPadding: @relativeSmall;
+@headerHorizontalPadding: @cellHorizontalPadding;
+@headerFontStyle: none;
+@headerFontWeight: bold;
+@headerTextTransform: none;
+@headerBoxShadow: none;
+
+/* Table Footer */
+@footerBoxShadow: none;
+@footerBorder: 1px solid @borderColor;
+@footerDivider: none;
+@footerBackground: @offWhite;
+@footerAlign: inherit;
+@footerVerticalAlign: middle;
+@footerColor: @textColor;
+@footerVerticalPadding: @cellVerticalPadding;
+@footerHorizontalPadding: @cellHorizontalPadding;
+@footerFontStyle: normal;
+@footerFontWeight: normal;
+@footerTextTransform: none;
+
+/* Responsive Size */
+@responsiveHeaderDisplay: block;
+@responsiveFooterDisplay: block;
+@responsiveRowVerticalPadding: 1em;
+@responsiveRowBoxShadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;
+@responsiveCellVerticalPadding: 0.25em;
+@responsiveCellHorizontalPadding: 0.75em;
+@responsiveCellBoxShadow: none !important;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Definition */
+@definitionPageBackground: @white;
+
+@definitionHeaderBackground: transparent;
+@definitionHeaderColor: @unselectedTextColor;
+@definitionHeaderFontWeight: normal;
+
+@definitionFooterBackground: @definitionHeaderBackground;
+@definitionFooterColor: @definitionHeaderColor;
+@definitionFooterFontWeight: @definitionHeaderFontWeight;
+
+@definitionColumnBackground: @subtleTransparentBlack;
+@definitionColumnFontWeight: bold;
+@definitionColumnColor: @selectedTextColor;
+@definitionColumnFontSize: @relativeMedium;
+@definitionColumnTextTransform: '';
+@definitionColumnBoxShadow: '';
+@definitionColumnTextAlign: '';
+@definitionColumnHorizontalPadding: '';
+
+
+/*--------------
+ Couplings
+---------------*/
+
+@iconVerticalAlign: baseline;
+
+/*--------------
+ States
+---------------*/
+
+@stateMarkerWidth: 0px;
+
+/* Positive */
+@positiveColor: @positiveTextColor;
+@positiveBoxShadow: @stateMarkerWidth 0px 0px @positiveBorderColor inset;
+@positiveBackgroundHover: darken(@positiveBackgroundColor, 3);
+@positiveColorHover: darken(@positiveColor, 3);
+
+/* Negative */
+@negativeColor: @negativeTextColor;
+@negativeBoxShadow: @stateMarkerWidth 0px 0px @negativeBorderColor inset;
+@negativeBackgroundHover: darken(@negativeBackgroundColor, 3);
+@negativeColorHover: darken(@negativeColor, 3);
+
+/* Error */
+@errorColor: @errorTextColor;
+@errorBoxShadow: @stateMarkerWidth 0px 0px @errorBorderColor inset;
+@errorBackgroundHover: darken(@errorBackgroundColor, 3);
+@errorColorHover: darken(@errorColor, 3);
+
+/* Warning */
+@warningColor: @warningTextColor;
+@warningBoxShadow: @stateMarkerWidth 0px 0px @warningBorderColor inset;
+@warningBackgroundHover: darken(@warningBackgroundColor, 3);
+@warningColorHover: darken(@warningColor, 3);
+
+/* Active */
+@activeColor: @textColor;
+@activeBackgroundColor: #E0E0E0;
+@activeBoxShadow: @stateMarkerWidth 0px 0px @activeColor inset;
+
+@activeBackgroundHover: #EFEFEF;
+@activeColorHover: @selectedTextColor;
+
+/*--------------
+ Types
+---------------*/
+
+/* Attached */
+@attachedTopOffset: 0px;
+@attachedBottomOffset: 0px;
+@attachedHorizontalOffset: -@borderWidth;
+@attachedWidth: ~"calc(100% + "-@attachedHorizontalOffset * 2~")";
+@attachedBoxShadow: none;
+@attachedBorder: @borderWidth solid @solidBorderColor;
+@attachedBottomBoxShadow:
+ @boxShadow,
+ @attachedBoxShadow
+;
+
+/* Striped */
+@stripedBackground: rgba(0, 0, 50, 0.02);
+@invertedStripedBackground: rgba(255, 255, 255, 0.05);
+
+/* Selectable */
+@selectableBackground: @transparentBlack;
+@selectableTextColor: @selectedTextColor;
+@selectableInvertedBackground: @transparentWhite;
+@selectableInvertedTextColor: @invertedSelectedTextColor;
+
+/* Sortable */
+@sortableBackground: '';
+@sortableColor: @textColor;
+
+@sortableBorder: 1px solid @borderColor;
+@sortableIconWidth: auto;
+@sortableIconDistance: 0.5em;
+@sortableIconOpacity: 0.8;
+@sortableIconFont: 'Icons';
+@sortableIconAscending: '\f0d8';
+@sortableIconDescending: '\f0d7';
+@sortableDisabledColor: @disabledTextColor;
+
+@sortableHoverBackground: @transparentBlack;
+@sortableHoverColor: @hoveredTextColor;
+
+@sortableActiveBackground: @transparentBlack;
+@sortableActiveColor: @selectedTextColor;
+
+@sortableActiveHoverBackground: @transparentBlack;
+@sortableActiveHoverColor: @selectedTextColor;
+
+@sortableInvertedBorderColor: transparent;
+@sortableInvertedHoverBackground: @transparentWhite @subtleGradient;
+@sortableInvertedHoverColor: @invertedHoveredTextColor;
+@sortableInvertedActiveBackground: @strongTransparentWhite @subtleGradient;
+@sortableInvertedActiveColor: @invertedSelectedTextColor;
+
+/* Colors */
+@coloredBorderSize: 0.2em;
+@coloredBorderRadius: 0em 0em @borderRadius @borderRadius;
+
+/* Inverted */
+@invertedBackground: #333333;
+@invertedBorder: none;
+@invertedCellBorderColor: @whiteBorderColor;
+@invertedCellColor: @invertedTextColor;
+
+@invertedHeaderBackground: @veryStrongTransparentBlack;
+@invertedHeaderColor: @invertedTextColor;
+@invertedHeaderBorderColor: @invertedCellBorderColor;
+
+@invertedDefinitionColumnBackground: @subtleTransparentWhite;
+@invertedDefinitionColumnColor: @invertedSelectedTextColor;
+@invertedDefinitionColumnFontWeight: bold;
+
+/* Basic */
+@basicTableBackground: transparent;
+@basicTableBorder: @borderWidth solid @borderColor;
+@basicBoxShadow: none;
+
+@basicTableHeaderBackground: transparent;
+@basicTableCellBackground: transparent;
+@basicTableHeaderDivider: none;
+@basicTableCellBorder: 1px solid rgba(0, 0, 0, 0.1);
+@basicTableCellPadding: '';
+@basicTableStripedBackground: @transparentBlack;
+
+/* Padded */
+@paddedVerticalPadding: 1em;
+@paddedHorizontalPadding: 1em;
+@veryPaddedVerticalPadding: 1.5em;
+@veryPaddedHorizontalPadding: 1.5em;
+
+/* Compact */
+@compactVerticalPadding: 0.5em;
+@compactHorizontalPadding: 0.7em;
+@veryCompactVerticalPadding: 0.4em;
+@veryCompactHorizontalPadding: 0.6em;
+
+
+/* Sizes */
+@small: 0.9em;
+@medium: 1em;
+@large: 1.1em;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/button.overrides b/semantic/src/themes/default/elements/button.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/button.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/button.variables b/semantic/src/themes/default/elements/button.variables
new file mode 100644
index 0000000..96c00aa
--- /dev/null
+++ b/semantic/src/themes/default/elements/button.variables
@@ -0,0 +1,358 @@
+/*******************************
+ Button
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+/* Button */
+@verticalMargin: 0em;
+@horizontalMargin: 0.25em;
+@backgroundColor: #E0E1E2;
+@backgroundImage: none;
+@background: @backgroundColor @backgroundImage;
+@lineHeight: 1em;
+
+/* Button defaults to using same height as input globally */
+@verticalPadding: @inputVerticalPadding;
+@horizontalPadding: 1.5em;
+
+/* Text */
+@textTransform: none;
+@tapColor: transparent;
+@fontFamily: @pageFont;
+@fontWeight: bold;
+@textColor: rgba(0, 0, 0, 0.6);
+@textShadow: none;
+@invertedTextShadow: @textShadow;
+@borderRadius: @defaultBorderRadius;
+@verticalAlign: baseline;
+
+/* Internal Shadow */
+@shadowDistance: 0em;
+@shadowOffset: (@shadowDistance / 2);
+@shadowBoxShadow: 0px -@shadowDistance 0px 0px @borderColor inset;
+
+/* Box Shadow */
+@borderBoxShadowColor: transparent;
+@borderBoxShadowWidth: 1px;
+@borderBoxShadow: 0px 0px 0px @borderBoxShadowWidth @borderBoxShadowColor inset;
+@boxShadow:
+ @borderBoxShadow,
+ @shadowBoxShadow
+;
+
+/* Icon */
+@iconHeight: @relativeTiny;
+@iconOpacity: 0.8;
+@iconDistance: @relative6px;
+@iconColor: '';
+@iconTransition: opacity @defaultDuration @defaultEasing;
+@iconVerticalAlign: '';
+
+@iconMargin: 0em @iconDistance 0em -(@iconDistance / 2);
+@rightIconMargin: 0em -(@iconDistance / 2) 0em @iconDistance;
+
+/* Loader */
+@invertedLoaderFillColor: rgba(0, 0, 0, 0.15);
+
+@transition:
+ opacity @defaultDuration @defaultEasing,
+ background-color @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing,
+ box-shadow @defaultDuration @defaultEasing,
+ background @defaultDuration @defaultEasing
+;
+/*
+@willChange: box-shadow, transform, opacity, color, background;
+*/
+@willChange: '';
+
+/*-------------------
+ Group
+--------------------*/
+
+@groupBoxShadow: none;
+@groupButtonBoxShadow: @boxShadow;
+@verticalBoxShadow: none;
+@groupButtonOffset: 0px 0px 0px 0px;
+@verticalGroupOffset: 0px 0px 0px 0px;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Hovered */
+@hoverBackgroundColor: #CACBCD;
+@hoverBackgroundImage: @backgroundImage;
+@hoverBoxShadow: @boxShadow;
+@hoverColor: @hoveredTextColor;
+@iconHoverOpacity: 0.85;
+
+/* Focused */
+@focusBackgroundColor: @hoverBackgroundColor;
+@focusBackgroundImage: '';
+@focusBoxShadow: '';
+@focusColor: @hoveredTextColor;
+@iconFocusOpacity: 0.85;
+
+/* Disabled */
+@disabledBackgroundImage: none;
+@disabledBoxShadow: none;
+
+/* Pressed Down */
+@downBackgroundColor: #BABBBC;
+@downBackgroundImage: '';
+@downPressedShadow: none;
+@downBoxShadow:
+ @borderBoxShadow,
+ @downPressedShadow
+;
+@downColor: @pressedTextColor;
+
+/* Active */
+@activeBackgroundColor: #C0C1C2;
+@activeBackgroundImage: none;
+@activeColor: @selectedTextColor;
+@activeBoxShadow: @borderBoxShadow;
+
+/* Active + Hovered */
+@activeHoverBackgroundColor: @activeBackgroundColor;
+@activeHoverBackgroundImage: none;
+@activeHoverColor: @activeColor;
+@activeHoverBoxShadow: @activeBoxShadow;
+
+/* Loading */
+@loadingOpacity: 1;
+@loadingPointerEvents: auto;
+@loadingTransition:
+ all 0s linear,
+ opacity @defaultDuration @defaultEasing
+;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Or */
+@orText: 'or';
+
+@orGap: 0.3em;
+@orHeight: (@verticalPadding * 2) + 1em;
+@orZIndex: 3;
+
+@orCircleDistanceToEdge: (@verticalPadding);
+@orCircleSize: @orHeight - @orCircleDistanceToEdge;
+@orLineHeight: (@orCircleSize);
+@orBoxShadow: @borderBoxShadow;
+
+@orVerticalOffset: -(@orCircleSize / 2);
+@orHorizontalOffset: -(@orCircleSize / 2);
+
+@orBackgroundColor: @white;
+@orTextShadow: @invertedTextShadow;
+@orTextStyle: normal;
+@orTextWeight: bold;
+@orTextColor: @lightTextColor;
+
+
+@orSpacerHeight: @verticalPadding;
+@orSpacerColor: transparent;
+
+/* Icon */
+@iconButtonOpacity: 0.9;
+
+/* Labeled */
+@labeledLabelFontSize: @medium;
+@labeledLabelAlign: center;
+@labeledLabelPadding: '';
+@labeledLabelFontSize: @relativeMedium;
+@labeledLabelBorderColor: @borderColor;
+@labeledLabelBorderOffset: -@borderBoxShadowWidth;
+@labeledTagLabelSize: 1.85em; /* hypotenuse of triangle */
+@labeledIconMargin: 0em;
+
+/* Labeled Icon */
+@labeledIconWidth: 1em + (@verticalPadding * 2);
+@labeledIconBackgroundColor: rgba(0, 0, 0, 0.05);
+@labeledIconPadding: (@horizontalPadding + @labeledIconWidth);
+@labeledIconBorder: transparent;
+@labeledIconColor: '';
+
+@labeledIconLeftShadow: -1px 0px 0px 0px @labeledIconBorder inset;
+@labeledIconRightShadow: 1px 0px 0px 0px @labeledIconBorder inset;
+
+
+/* Inverted */
+@invertedBorderSize: 2px;
+@invertedTextColor: @white;
+@invertedTextHoverColor: @hoverColor;
+@invertedGroupButtonOffset: 0px 0px 0px -(@invertedBorderSize);
+@invertedVerticalGroupButtonOffset: 0px 0px -(@invertedBorderSize) 0px;
+
+/* Basic */
+@basicBorderRadius: @borderRadius;
+@basicBorderSize: 1px;
+@basicTextColor: @textColor;
+@basicColoredBorderSize: 1px;
+
+@basicBackground: transparent none;
+@basicFontWeight: normal;
+@basicBorder: 1px solid @borderColor;
+@basicBoxShadow: 0px 0px 0px @basicBorderSize @borderColor inset;
+@basicLoadingColor: @offWhite;
+@basicTextTransform: none;
+
+/* Basic Hover */
+@basicHoverBackground: #FFFFFF;
+@basicHoverTextColor: @hoveredTextColor;
+@basicHoverBoxShadow:
+ 0px 0px 0px @basicBorderSize @selectedBorderColor inset,
+ 0px 0px 0px 0px @borderColor inset
+;
+/* Basic Focus */
+@basicFocusBackground: @basicHoverBackground;
+@basicFocusTextColor: @basicHoverTextColor;
+@basicFocusBoxShadow: @basicHoverBoxShadow;
+
+/* Basic Down */
+@basicDownBackground: #F8F8F8;
+@basicDownTextColor: @pressedTextColor;
+@basicDownBoxShadow:
+ 0px 0px 0px @basicBorderSize rgba(0, 0, 0, 0.15) inset,
+ 0px 1px 4px 0px @borderColor inset
+;
+/* Basic Active */
+@basicActiveBackground: @transparentBlack;
+@basicActiveBoxShadow: '';
+@basicActiveTextColor: @selectedTextColor;
+
+/* Basic Inverted */
+@basicInvertedBackground: transparent;
+@basicInvertedFocusBackground: transparent;
+@basicInvertedDownBackground: @transparentWhite;
+@basicInvertedActiveBackground: @transparentWhite;
+
+@basicInvertedBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 0.5) inset;
+@basicInvertedHoverBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 1) inset;
+@basicInvertedFocusBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 1) inset;
+@basicInvertedDownBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 0.9) inset;
+@basicInvertedActiveBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 0.7) inset;
+
+@basicInvertedColor: @darkWhite;
+@basicInvertedHoverColor: @darkWhiteHover;
+@basicInvertedDownColor: @darkWhiteActive;
+@basicInvertedActiveColor: @invertedTextColor;
+
+
+/* Basic Group */
+@basicGroupBorder: @basicBorderSize solid @borderColor;
+@basicGroupBoxShadow: none;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Colors */
+@coloredBackgroundImage: none;
+@coloredBoxShadow: @shadowBoxShadow;
+
+/* Colored */
+@brownTextColor: @invertedTextColor;
+@brownTextShadow: @invertedTextShadow;
+@redTextColor: @invertedTextColor;
+@redTextShadow: @invertedTextShadow;
+@orangeTextColor: @invertedTextColor;
+@orangeTextShadow: @invertedTextShadow;
+@greenTextColor: @invertedTextColor;
+@greenTextShadow: @invertedTextShadow;
+@blueTextColor: @invertedTextColor;
+@blueTextShadow: @invertedTextShadow;
+@violetTextColor: @invertedTextColor;
+@violetTextShadow: @invertedTextShadow;
+@purpleTextColor: @invertedTextColor;
+@purpleTextShadow: @invertedTextShadow;
+@pinkTextColor: @invertedTextColor;
+@pinkTextShadow: @invertedTextShadow;
+@blackTextColor: @invertedTextColor;
+@blackTextShadow: @invertedTextShadow;
+@oliveTextColor: @invertedTextColor;
+@oliveTextShadow: @invertedTextShadow;
+@yellowTextColor: @invertedTextColor;
+@yellowTextShadow: @invertedTextShadow;
+@tealTextColor: @invertedTextColor;
+@tealTextShadow: @invertedTextShadow;
+@greyTextColor: @invertedTextColor;
+@greyTextShadow: @invertedTextShadow;
+
+/* Inverted */
+@lightBrownTextColor: @invertedTextColor;
+@lightBrownTextShadow: @invertedTextShadow;
+@lightRedTextColor: @invertedTextColor;
+@lightRedTextShadow: @invertedTextShadow;
+@lightOrangeTextColor: @invertedTextColor;
+@lightOrangeTextShadow: @invertedTextShadow;
+@lightGreenTextColor: @invertedTextColor;
+@lightGreenTextShadow: @invertedTextShadow;
+@lightBlueTextColor: @invertedTextColor;
+@lightBlueTextShadow: @invertedTextShadow;
+@lightVioletTextColor: @invertedTextColor;
+@lightVioletTextShadow: @invertedTextShadow;
+@lightPurpleTextColor: @invertedTextColor;
+@lightPurpleTextShadow: @invertedTextShadow;
+@lightPinkTextColor: @invertedTextColor;
+@lightPinkTextShadow: @invertedTextShadow;
+@lightBlackTextColor: @invertedTextColor;
+@lightBlackTextShadow: @invertedTextShadow;
+@lightOliveTextColor: @textColor;
+@lightOliveTextShadow: @textShadow;
+@lightYellowTextColor: @textColor;
+@lightYellowTextShadow: @textShadow;
+@lightTealTextColor: @textColor;
+@lightTealTextShadow: @textShadow;
+@lightGreyTextColor: @textColor;
+@lightGreyTextShadow: @textShadow;
+
+
+/* Ordinality */
+@primaryBackgroundImage: @coloredBackgroundImage;
+@primaryTextColor: @invertedTextColor;
+@primaryTextShadow: @invertedTextShadow;
+@primaryBoxShadow: @coloredBoxShadow;
+
+@secondaryBackgroundImage: @coloredBackgroundImage;
+@secondaryTextColor: @invertedTextColor;
+@secondaryTextShadow: @invertedTextShadow;
+@secondaryBoxShadow: @coloredBoxShadow;
+
+@positiveBackgroundImage: @coloredBackgroundImage;
+@positiveTextColor: @invertedTextColor;
+@positiveTextShadow: @invertedTextShadow;
+@positiveBoxShadow: @coloredBoxShadow;
+
+@negativeBackgroundImage: @coloredBackgroundImage;
+@negativeTextColor: @invertedTextColor;
+@negativeTextShadow: @invertedTextShadow;
+@negativeBoxShadow: @coloredBoxShadow;
+
+/* Compact */
+@compactVerticalPadding: (@verticalPadding * 0.75);
+@compactHorizontalPadding: (@horizontalPadding * 0.75);
+
+/* Attached */
+@attachedOffset: -1px;
+@attachedBoxShadow: 0px 0px 0px 1px @borderColor;
+@attachedHorizontalPadding: 0.75em;
+@attachedZIndex: 2;
+
+/* Floated */
+@floatedMargin: 0.25em;
+
+/* Animated */
+@animatedVerticalAlign: middle;
+@animatedZIndex: 1;
+@animationDuration: 0.3s;
+@animationEasing: ease;
+@fadeScaleHigh: 1.5;
+@fadeScaleLow: 0.75;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/container.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/container.overrides b/semantic/src/themes/default/elements/container.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/elements/container.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/container.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/container.variables b/semantic/src/themes/default/elements/container.variables
new file mode 100644
index 0000000..33f3a8c
--- /dev/null
+++ b/semantic/src/themes/default/elements/container.variables
@@ -0,0 +1,58 @@
+/*******************************
+ Container
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+/* Minimum Gutter is used to determine the maximum container width for a given device */
+
+@maxWidth: 100%;
+
+/* Devices */
+@mobileMinimumGutter: 0em;
+@mobileWidth: auto;
+@mobileGutter: 1em;
+
+@tabletMinimumGutter: (@emSize * 1);
+@tabletWidth: @tabletBreakpoint - (@tabletMinimumGutter * 2) - @scrollbarWidth;
+@tabletGutter: auto;
+
+@computerMinimumGutter: (@emSize * 1.5);
+@computerWidth: @computerBreakpoint - (@computerMinimumGutter * 2) - @scrollbarWidth;
+@computerGutter: auto;
+
+@largeMonitorMinimumGutter: (@emSize * 2);
+@largeMonitorWidth: @largeMonitorBreakpoint - (@largeMonitorMinimumGutter * 2) - @scrollbarWidth;
+@largeMonitorGutter: auto;
+
+/* Coupling (Add Negative Margin to container size) */
+@gridGutterWidth: 2rem;
+@relaxedGridGutterWidth: 3rem;
+@veryRelaxedGridGutterWidth: 5rem;
+
+@mobileGridWidth: @mobileWidth;
+@tabletGridWidth: ~"calc("@tabletWidth~" + "@gridGutterWidth~")";
+@computerGridWidth: ~"calc("@computerWidth~" + "@gridGutterWidth~")";
+@largeMonitorGridWidth: ~"calc("@largeMonitorWidth~" + "@gridGutterWidth~")";
+
+@mobileRelaxedGridWidth: @mobileWidth;
+@tabletRelaxedGridWidth: ~"calc("@tabletWidth~" + "@relaxedGridGutterWidth~")";
+@computerRelaxedGridWidth: ~"calc("@computerWidth~" + "@relaxedGridGutterWidth~")";
+@largeMonitorRelaxedGridWidth: ~"calc("@largeMonitorWidth~" + "@relaxedGridGutterWidth~")";
+
+@mobileVeryRelaxedGridWidth: @mobileWidth;
+@tabletVeryRelaxedGridWidth: ~"calc("@tabletWidth~" + "@veryRelaxedGridGutterWidth~")";
+@computerVeryRelaxedGridWidth: ~"calc("@computerWidth~" + "@veryRelaxedGridGutterWidth~")";
+@largeMonitorVeryRelaxedGridWidth: ~"calc("@largeMonitorWidth~" + "@veryRelaxedGridGutterWidth~")";
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Text */
+@textWidth: 700px;
+@textFontFamily: @pageFont;
+@textLineHeight: 1.5;
+@textSize: @large;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/divider.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/divider.overrides b/semantic/src/themes/default/elements/divider.overrides
new file mode 100644
index 0000000..2690ca2
--- /dev/null
+++ b/semantic/src/themes/default/elements/divider.overrides
@@ -0,0 +1,18 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
+
+.ui.horizontal.divider:before,
+.ui.horizontal.divider:after {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPS
J4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');
+}
+
+@media only screen and (max-width : (@tabletBreakpoint - 1px)) {
+ .ui.stackable.grid .ui.vertical.divider:before,
+ .ui.grid .stackable.row .ui.vertical.divider:before,
+ .ui.stackable.grid .ui.vertical.divider:after,
+ .ui.grid .stackable.row .ui.vertical.divider:after {
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlE
PSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/divider.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/divider.variables b/semantic/src/themes/default/elements/divider.variables
new file mode 100644
index 0000000..14a23a7
--- /dev/null
+++ b/semantic/src/themes/default/elements/divider.variables
@@ -0,0 +1,53 @@
+/*******************************
+ Divider
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@margin: 1rem 0rem;
+
+@highlightWidth: 1px;
+@highlightColor: @whiteBorderColor;
+
+@shadowWidth: 1px;
+@shadowColor: @borderColor;
+
+/* Text */
+@letterSpacing: 0.05em;
+@fontWeight: bold;
+@color: @darkTextColor;
+@textTransform: uppercase;
+
+/*-------------------
+ Coupling
+--------------------*/
+
+/* Icon */
+@dividerIconSize: 1rem;
+@dividerIconMargin: 0rem;
+
+
+/*******************************
+ Variations
+*******************************/
+
+/* Horizontal / Vertical */
+@horizontalMargin: '';
+@horizontalDividerMargin: 1em;
+@horizontalRulerOffset: ~"calc(-50% - "(@horizontalDividerMargin)~")";
+
+@verticalDividerMargin: 1rem;
+@verticalDividerHeight: ~"calc(100% - "(@verticalDividerMargin)~")";
+
+/* Inverted */
+@invertedTextColor: @white;
+@invertedHighlightColor: rgba(255, 255, 255, 0.15);
+@invertedShadowColor: @borderColor;
+
+/* Section */
+@sectionMargin: 2rem;
+
+/* Sizes */
+@medium: 1rem;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/flag.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/flag.overrides b/semantic/src/themes/default/elements/flag.overrides
new file mode 100644
index 0000000..099978b
--- /dev/null
+++ b/semantic/src/themes/default/elements/flag.overrides
@@ -0,0 +1,986 @@
+/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */
+
+/*******************************
+ Theme Overrides
+*******************************/
+
+i.flag.ad:before,
+i.flag.andorra:before {
+ background-position: 0px 0px;
+}
+i.flag.ae:before,
+i.flag.united.arab.emirates:before,
+i.flag.uae:before {
+ background-position: 0px -26px;
+}
+i.flag.af:before,
+i.flag.afghanistan:before {
+ background-position: 0px -52px;
+}
+i.flag.ag:before,
+i.flag.antigua:before {
+ background-position: 0px -78px;
+}
+i.flag.ai:before,
+i.flag.anguilla:before {
+ background-position: 0px -104px;
+}
+i.flag.al:before,
+i.flag.albania:before {
+ background-position: 0px -130px;
+}
+i.flag.am:before,
+i.flag.armenia:before {
+ background-position: 0px -156px;
+}
+i.flag.an:before,
+i.flag.netherlands.antilles:before {
+ background-position: 0px -182px;
+}
+i.flag.ao:before,
+i.flag.angola:before {
+ background-position: 0px -208px;
+}
+i.flag.ar:before,
+i.flag.argentina:before {
+ background-position: 0px -234px;
+}
+i.flag.as:before,
+i.flag.american.samoa:before {
+ background-position: 0px -260px;
+}
+i.flag.at:before,
+i.flag.austria:before {
+ background-position: 0px -286px;
+}
+i.flag.au:before,
+i.flag.australia:before {
+ background-position: 0px -312px;
+}
+i.flag.aw:before,
+i.flag.aruba:before {
+ background-position: 0px -338px;
+}
+i.flag.ax:before,
+i.flag.aland.islands:before {
+ background-position: 0px -364px;
+}
+i.flag.az:before,
+i.flag.azerbaijan:before {
+ background-position: 0px -390px;
+}
+i.flag.ba:before,
+i.flag.bosnia:before {
+ background-position: 0px -416px;
+}
+i.flag.bb:before,
+i.flag.barbados:before {
+ background-position: 0px -442px;
+}
+i.flag.bd:before,
+i.flag.bangladesh:before {
+ background-position: 0px -468px;
+}
+i.flag.be:before,
+i.flag.belgium:before {
+ background-position: 0px -494px;
+}
+i.flag.bf:before,
+i.flag.burkina.faso:before {
+ background-position: 0px -520px;
+}
+i.flag.bg:before,
+i.flag.bulgaria:before {
+ background-position: 0px -546px;
+}
+i.flag.bh:before,
+i.flag.bahrain:before {
+ background-position: 0px -572px;
+}
+i.flag.bi:before,
+i.flag.burundi:before {
+ background-position: 0px -598px;
+}
+i.flag.bj:before,
+i.flag.benin:before {
+ background-position: 0px -624px;
+}
+i.flag.bm:before,
+i.flag.bermuda:before {
+ background-position: 0px -650px;
+}
+i.flag.bn:before,
+i.flag.brunei:before {
+ background-position: 0px -676px;
+}
+i.flag.bo:before,
+i.flag.bolivia:before {
+ background-position: 0px -702px;
+}
+i.flag.br:before,
+i.flag.brazil:before {
+ background-position: 0px -728px;
+}
+i.flag.bs:before,
+i.flag.bahamas:before {
+ background-position: 0px -754px;
+}
+i.flag.bt:before,
+i.flag.bhutan:before {
+ background-position: 0px -780px;
+}
+i.flag.bv:before,
+i.flag.bouvet.island:before {
+ background-position: 0px -806px;
+}
+i.flag.bw:before,
+i.flag.botswana:before {
+ background-position: 0px -832px;
+}
+i.flag.by:before,
+i.flag.belarus:before {
+ background-position: 0px -858px;
+}
+i.flag.bz:before,
+i.flag.belize:before {
+ background-position: 0px -884px;
+}
+i.flag.ca:before,
+i.flag.canada:before {
+ background-position: 0px -910px;
+}
+i.flag.cc:before,
+i.flag.cocos.islands:before {
+ background-position: 0px -962px;
+}
+i.flag.cd:before,
+i.flag.congo:before {
+ background-position: 0px -988px;
+}
+i.flag.cf:before,
+i.flag.central.african.republic:before {
+ background-position: 0px -1014px;
+}
+i.flag.cg:before,
+i.flag.congo.brazzaville:before {
+ background-position: 0px -1040px;
+}
+i.flag.ch:before,
+i.flag.switzerland:before {
+ background-position: 0px -1066px;
+}
+i.flag.ci:before,
+i.flag.cote.divoire:before {
+ background-position: 0px -1092px;
+}
+i.flag.ck:before,
+i.flag.cook.islands:before {
+ background-position: 0px -1118px;
+}
+i.flag.cl:before,
+i.flag.chile:before {
+ background-position: 0px -1144px;
+}
+i.flag.cm:before,
+i.flag.cameroon:before {
+ background-position: 0px -1170px;
+}
+i.flag.cn:before,
+i.flag.china:before {
+ background-position: 0px -1196px;
+}
+i.flag.co:before,
+i.flag.colombia:before {
+ background-position: 0px -1222px;
+}
+i.flag.cr:before,
+i.flag.costa.rica:before {
+ background-position: 0px -1248px;
+}
+i.flag.cs:before,
+i.flag.serbia:before {
+ background-position: 0px -1274px;
+}
+i.flag.cu:before,
+i.flag.cuba:before {
+ background-position: 0px -1300px;
+}
+i.flag.cv:before,
+i.flag.cape.verde:before {
+ background-position: 0px -1326px;
+}
+i.flag.cx:before,
+i.flag.christmas.island:before {
+ background-position: 0px -1352px;
+}
+i.flag.cy:before,
+i.flag.cyprus:before {
+ background-position: 0px -1378px;
+}
+i.flag.cz:before,
+i.flag.czech.republic:before {
+ background-position: 0px -1404px;
+}
+i.flag.de:before,
+i.flag.germany:before {
+ background-position: 0px -1430px;
+}
+i.flag.dj:before,
+i.flag.djibouti:before {
+ background-position: 0px -1456px;
+}
+i.flag.dk:before,
+i.flag.denmark:before {
+ background-position: 0px -1482px;
+}
+i.flag.dm:before,
+i.flag.dominica:before {
+ background-position: 0px -1508px;
+}
+i.flag.do:before,
+i.flag.dominican.republic:before {
+ background-position: 0px -1534px;
+}
+i.flag.dz:before,
+i.flag.algeria:before {
+ background-position: 0px -1560px;
+}
+i.flag.ec:before,
+i.flag.ecuador:before {
+ background-position: 0px -1586px;
+}
+i.flag.ee:before,
+i.flag.estonia:before {
+ background-position: 0px -1612px;
+}
+i.flag.eg:before,
+i.flag.egypt:before {
+ background-position: 0px -1638px;
+}
+i.flag.eh:before,
+i.flag.western.sahara:before {
+ background-position: 0px -1664px;
+}
+i.flag.er:before,
+i.flag.eritrea:before {
+ background-position: 0px -1716px;
+}
+i.flag.es:before,
+i.flag.spain:before {
+ background-position: 0px -1742px;
+}
+i.flag.et:before,
+i.flag.ethiopia:before {
+ background-position: 0px -1768px;
+}
+i.flag.eu:before,
+i.flag.european.union:before {
+ background-position: 0px -1794px;
+}
+i.flag.fi:before,
+i.flag.finland:before {
+ background-position: 0px -1846px;
+}
+i.flag.fj:before,
+i.flag.fiji:before {
+ background-position: 0px -1872px;
+}
+i.flag.fk:before,
+i.flag.falkland.islands:before {
+ background-position: 0px -1898px;
+}
+i.flag.fm:before,
+i.flag.micronesia:before {
+ background-position: 0px -1924px;
+}
+i.flag.fo:before,
+i.flag.faroe.islands:before {
+ background-position: 0px -1950px;
+}
+i.flag.fr:before,
+i.flag.france:before {
+ background-position: 0px -1976px;
+}
+i.flag.ga:before,
+i.flag.gabon:before {
+ background-position: -36px 0px;
+}
+i.flag.gb:before,
+i.flag.united.kingdom:before {
+ background-position: -36px -26px;
+}
+i.flag.gd:before,
+i.flag.grenada:before {
+ background-position: -36px -52px;
+}
+i.flag.ge:before,
+i.flag.georgia:before {
+ background-position: -36px -78px;
+}
+i.flag.gf:before,
+i.flag.french.guiana:before {
+ background-position: -36px -104px;
+}
+i.flag.gh:before,
+i.flag.ghana:before {
+ background-position: -36px -130px;
+}
+i.flag.gi:before,
+i.flag.gibraltar:before {
+ background-position: -36px -156px;
+}
+i.flag.gl:before,
+i.flag.greenland:before {
+ background-position: -36px -182px;
+}
+i.flag.gm:before,
+i.flag.gambia:before {
+ background-position: -36px -208px;
+}
+i.flag.gn:before,
+i.flag.guinea:before {
+ background-position: -36px -234px;
+}
+i.flag.gp:before,
+i.flag.guadeloupe:before {
+ background-position: -36px -260px;
+}
+i.flag.gq:before,
+i.flag.equatorial.guinea:before {
+ background-position: -36px -286px;
+}
+i.flag.gr:before,
+i.flag.greece:before {
+ background-position: -36px -312px;
+}
+i.flag.gs:before,
+i.flag.sandwich.islands:before {
+ background-position: -36px -338px;
+}
+i.flag.gt:before,
+i.flag.guatemala:before {
+ background-position: -36px -364px;
+}
+i.flag.gu:before,
+i.flag.guam:before {
+ background-position: -36px -390px;
+}
+i.flag.gw:before,
+i.flag.guinea-bissau:before {
+ background-position: -36px -416px;
+}
+i.flag.gy:before,
+i.flag.guyana:before {
+ background-position: -36px -442px;
+}
+i.flag.hk:before,
+i.flag.hong.kong:before {
+ background-position: -36px -468px;
+}
+i.flag.hm:before,
+i.flag.heard.island:before {
+ background-position: -36px -494px;
+}
+i.flag.hn:before,
+i.flag.honduras:before {
+ background-position: -36px -520px;
+}
+i.flag.hr:before,
+i.flag.croatia:before {
+ background-position: -36px -546px;
+}
+i.flag.ht:before,
+i.flag.haiti:before {
+ background-position: -36px -572px;
+}
+i.flag.hu:before,
+i.flag.hungary:before {
+ background-position: -36px -598px;
+}
+i.flag.id:before,
+i.flag.indonesia:before {
+ background-position: -36px -624px;
+}
+i.flag.ie:before,
+i.flag.ireland:before {
+ background-position: -36px -650px;
+}
+i.flag.il:before,
+i.flag.israel:before {
+ background-position: -36px -676px;
+}
+i.flag.in:before,
+i.flag.india:before {
+ background-position: -36px -702px;
+}
+i.flag.io:before,
+i.flag.indian.ocean.territory:before {
+ background-position: -36px -728px;
+}
+i.flag.iq:before,
+i.flag.iraq:before {
+ background-position: -36px -754px;
+}
+i.flag.ir:before,
+i.flag.iran:before {
+ background-position: -36px -780px;
+}
+i.flag.is:before,
+i.flag.iceland:before {
+ background-position: -36px -806px;
+}
+i.flag.it:before,
+i.flag.italy:before {
+ background-position: -36px -832px;
+}
+i.flag.jm:before,
+i.flag.jamaica:before {
+ background-position: -36px -858px;
+}
+i.flag.jo:before,
+i.flag.jordan:before {
+ background-position: -36px -884px;
+}
+i.flag.jp:before,
+i.flag.japan:before {
+ background-position: -36px -910px;
+}
+i.flag.ke:before,
+i.flag.kenya:before {
+ background-position: -36px -936px;
+}
+i.flag.kg:before,
+i.flag.kyrgyzstan:before {
+ background-position: -36px -962px;
+}
+i.flag.kh:before,
+i.flag.cambodia:before {
+ background-position: -36px -988px;
+}
+i.flag.ki:before,
+i.flag.kiribati:before {
+ background-position: -36px -1014px;
+}
+i.flag.km:before,
+i.flag.comoros:before {
+ background-position: -36px -1040px;
+}
+i.flag.kn:before,
+i.flag.saint.kitts.and.nevis:before {
+ background-position: -36px -1066px;
+}
+i.flag.kp:before,
+i.flag.north.korea:before {
+ background-position: -36px -1092px;
+}
+i.flag.kr:before,
+i.flag.south.korea:before {
+ background-position: -36px -1118px;
+}
+i.flag.kw:before,
+i.flag.kuwait:before {
+ background-position: -36px -1144px;
+}
+i.flag.ky:before,
+i.flag.cayman.islands:before {
+ background-position: -36px -1170px;
+}
+i.flag.kz:before,
+i.flag.kazakhstan:before {
+ background-position: -36px -1196px;
+}
+i.flag.la:before,
+i.flag.laos:before {
+ background-position: -36px -1222px;
+}
+i.flag.lb:before,
+i.flag.lebanon:before {
+ background-position: -36px -1248px;
+}
+i.flag.lc:before,
+i.flag.saint.lucia:before {
+ background-position: -36px -1274px;
+}
+i.flag.li:before,
+i.flag.liechtenstein:before {
+ background-position: -36px -1300px;
+}
+i.flag.lk:before,
+i.flag.sri.lanka:before {
+ background-position: -36px -1326px;
+}
+i.flag.lr:before,
+i.flag.liberia:before {
+ background-position: -36px -1352px;
+}
+i.flag.ls:before,
+i.flag.lesotho:before {
+ background-position: -36px -1378px;
+}
+i.flag.lt:before,
+i.flag.lithuania:before {
+ background-position: -36px -1404px;
+}
+i.flag.lu:before,
+i.flag.luxembourg:before {
+ background-position: -36px -1430px;
+}
+i.flag.lv:before,
+i.flag.latvia:before {
+ background-position: -36px -1456px;
+}
+i.flag.ly:before,
+i.flag.libya:before {
+ background-position: -36px -1482px;
+}
+i.flag.ma:before,
+i.flag.morocco:before {
+ background-position: -36px -1508px;
+}
+i.flag.mc:before,
+i.flag.monaco:before {
+ background-position: -36px -1534px;
+}
+i.flag.md:before,
+i.flag.moldova:before {
+ background-position: -36px -1560px;
+}
+i.flag.me:before,
+i.flag.montenegro:before {
+ background-position: -36px -1586px;
+}
+i.flag.mg:before,
+i.flag.madagascar:before {
+ background-position: -36px -1613px;
+}
+i.flag.mh:before,
+i.flag.marshall.islands:before {
+ background-position: -36px -1639px;
+}
+i.flag.mk:before,
+i.flag.macedonia:before {
+ background-position: -36px -1665px;
+}
+i.flag.ml:before,
+i.flag.mali:before {
+ background-position: -36px -1691px;
+}
+i.flag.mm:before,
+i.flag.myanmar:before,
+i.flag.burma:before {
+ background-position: -36px -1717px;
+}
+i.flag.mn:before,
+i.flag.mongolia:before {
+ background-position: -36px -1743px;
+}
+i.flag.mo:before,
+i.flag.macau:before {
+ background-position: -36px -1769px;
+}
+i.flag.mp:before,
+i.flag.northern.mariana.islands:before {
+ background-position: -36px -1795px;
+}
+i.flag.mq:before,
+i.flag.martinique:before {
+ background-position: -36px -1821px;
+}
+i.flag.mr:before,
+i.flag.mauritania:before {
+ background-position: -36px -1847px;
+}
+i.flag.ms:before,
+i.flag.montserrat:before {
+ background-position: -36px -1873px;
+}
+i.flag.mt:before,
+i.flag.malta:before {
+ background-position: -36px -1899px;
+}
+i.flag.mu:before,
+i.flag.mauritius:before {
+ background-position: -36px -1925px;
+}
+i.flag.mv:before,
+i.flag.maldives:before {
+ background-position: -36px -1951px;
+}
+i.flag.mw:before,
+i.flag.malawi:before {
+ background-position: -36px -1977px;
+}
+i.flag.mx:before,
+i.flag.mexico:before {
+ background-position: -72px 0px;
+}
+i.flag.my:before,
+i.flag.malaysia:before {
+ background-position: -72px -26px;
+}
+i.flag.mz:before,
+i.flag.mozambique:before {
+ background-position: -72px -52px;
+}
+i.flag.na:before,
+i.flag.namibia:before {
+ background-position: -72px -78px;
+}
+i.flag.nc:before,
+i.flag.new.caledonia:before {
+ background-position: -72px -104px;
+}
+i.flag.ne:before,
+i.flag.niger:before {
+ background-position: -72px -130px;
+}
+i.flag.nf:before,
+i.flag.norfolk.island:before {
+ background-position: -72px -156px;
+}
+i.flag.ng:before,
+i.flag.nigeria:before {
+ background-position: -72px -182px;
+}
+i.flag.ni:before,
+i.flag.nicaragua:before {
+ background-position: -72px -208px;
+}
+i.flag.nl:before,
+i.flag.netherlands:before {
+ background-position: -72px -234px;
+}
+i.flag.no:before,
+i.flag.norway:before {
+ background-position: -72px -260px;
+}
+i.flag.np:before,
+i.flag.nepal:before {
+ background-position: -72px -286px;
+}
+i.flag.nr:before,
+i.flag.nauru:before {
+ background-position: -72px -312px;
+}
+i.flag.nu:before,
+i.flag.niue:before {
+ background-position: -72px -338px;
+}
+i.flag.nz:before,
+i.flag.new.zealand:before {
+ background-position: -72px -364px;
+}
+i.flag.om:before,
+i.flag.oman:before {
+ background-position: -72px -390px;
+}
+i.flag.pa:before,
+i.flag.panama:before {
+ background-position: -72px -416px;
+}
+i.flag.pe:before,
+i.flag.peru:before {
+ background-position: -72px -442px;
+}
+i.flag.pf:before,
+i.flag.french.polynesia:before {
+ background-position: -72px -468px;
+}
+i.flag.pg:before,
+i.flag.new.guinea:before {
+ background-position: -72px -494px;
+}
+i.flag.ph:before,
+i.flag.philippines:before {
+ background-position: -72px -520px;
+}
+i.flag.pk:before,
+i.flag.pakistan:before {
+ background-position: -72px -546px;
+}
+i.flag.pl:before,
+i.flag.poland:before {
+ background-position: -72px -572px;
+}
+i.flag.pm:before,
+i.flag.saint.pierre:before {
+ background-position: -72px -598px;
+}
+i.flag.pn:before,
+i.flag.pitcairn.islands:before {
+ background-position: -72px -624px;
+}
+i.flag.pr:before,
+i.flag.puerto.rico:before {
+ background-position: -72px -650px;
+}
+i.flag.ps:before,
+i.flag.palestine:before {
+ background-position: -72px -676px;
+}
+i.flag.pt:before,
+i.flag.portugal:before {
+ background-position: -72px -702px;
+}
+i.flag.pw:before,
+i.flag.palau:before {
+ background-position: -72px -728px;
+}
+i.flag.py:before,
+i.flag.paraguay:before {
+ background-position: -72px -754px;
+}
+i.flag.qa:before,
+i.flag.qatar:before {
+ background-position: -72px -780px;
+}
+i.flag.re:before,
+i.flag.reunion:before {
+ background-position: -72px -806px;
+}
+i.flag.ro:before,
+i.flag.romania:before {
+ background-position: -72px -832px;
+}
+i.flag.rs:before,
+i.flag.serbia:before {
+ background-position: -72px -858px;
+}
+i.flag.ru:before,
+i.flag.russia:before {
+ background-position: -72px -884px;
+}
+i.flag.rw:before,
+i.flag.rwanda:before {
+ background-position: -72px -910px;
+}
+i.flag.sa:before,
+i.flag.saudi.arabia:before {
+ background-position: -72px -936px;
+}
+i.flag.sb:before,
+i.flag.solomon.islands:before {
+ background-position: -72px -962px;
+}
+i.flag.sc:before,
+i.flag.seychelles:before {
+ background-position: -72px -988px;
+}
+i.flag.gb.sct:before,
+i.flag.scotland:before {
+ background-position: -72px -1014px;
+}
+i.flag.sd:before,
+i.flag.sudan:before {
+ background-position: -72px -1040px;
+}
+i.flag.se:before,
+i.flag.sweden:before {
+ background-position: -72px -1066px;
+}
+i.flag.sg:before,
+i.flag.singapore:before {
+ background-position: -72px -1092px;
+}
+i.flag.sh:before,
+i.flag.saint.helena:before {
+ background-position: -72px -1118px;
+}
+i.flag.si:before,
+i.flag.slovenia:before {
+ background-position: -72px -1144px;
+}
+i.flag.sj:before,
+i.flag.svalbard:before,
+i.flag.jan.mayen:before {
+ background-position: -72px -1170px;
+}
+i.flag.sk:before,
+i.flag.slovakia:before {
+ background-position: -72px -1196px;
+}
+i.flag.sl:before,
+i.flag.sierra.leone:before {
+ background-position: -72px -1222px;
+}
+i.flag.sm:before,
+i.flag.san.marino:before {
+ background-position: -72px -1248px;
+}
+i.flag.sn:before,
+i.flag.senegal:before {
+ background-position: -72px -1274px;
+}
+i.flag.so:before,
+i.flag.somalia:before {
+ background-position: -72px -1300px;
+}
+i.flag.sr:before,
+i.flag.suriname:before {
+ background-position: -72px -1326px;
+}
+i.flag.st:before,
+i.flag.sao.tome:before {
+ background-position: -72px -1352px;
+}
+i.flag.sv:before,
+i.flag.el.salvador:before {
+ background-position: -72px -1378px;
+}
+i.flag.sy:before,
+i.flag.syria:before {
+ background-position: -72px -1404px;
+}
+i.flag.sz:before,
+i.flag.swaziland:before {
+ background-position: -72px -1430px;
+}
+i.flag.tc:before,
+i.flag.caicos.islands:before {
+ background-position: -72px -1456px;
+}
+i.flag.td:before,
+i.flag.chad:before {
+ background-position: -72px -1482px;
+}
+i.flag.tf:before,
+i.flag.french.territories:before {
+ background-position: -72px -1508px;
+}
+i.flag.tg:before,
+i.flag.togo:before {
+ background-position: -72px -1534px;
+}
+i.flag.th:before,
+i.flag.thailand:before {
+ background-position: -72px -1560px;
+}
+i.flag.tj:before,
+i.flag.tajikistan:before {
+ background-position: -72px -1586px;
+}
+i.flag.tk:before,
+i.flag.tokelau:before {
+ background-position: -72px -1612px;
+}
+i.flag.tl:before,
+i.flag.timorleste:before {
+ background-position: -72px -1638px;
+}
+i.flag.tm:before,
+i.flag.turkmenistan:before {
+ background-position: -72px -1664px;
+}
+i.flag.tn:before,
+i.flag.tunisia:before {
+ background-position: -72px -1690px;
+}
+i.flag.to:before,
+i.flag.tonga:before {
+ background-position: -72px -1716px;
+}
+i.flag.tr:before,
+i.flag.turkey:before {
+ background-position: -72px -1742px;
+}
+i.flag.tt:before,
+i.flag.trinidad:before {
+ background-position: -72px -1768px;
+}
+i.flag.tv:before,
+i.flag.tuvalu:before {
+ background-position: -72px -1794px;
+}
+i.flag.tw:before,
+i.flag.taiwan:before {
+ background-position: -72px -1820px;
+}
+i.flag.tz:before,
+i.flag.tanzania:before {
+ background-position: -72px -1846px;
+}
+i.flag.ua:before,
+i.flag.ukraine:before {
+ background-position: -72px -1872px;
+}
+i.flag.ug:before,
+i.flag.uganda:before {
+ background-position: -72px -1898px;
+}
+i.flag.um:before,
+i.flag.us.minor.islands:before {
+ background-position: -72px -1924px;
+}
+i.flag.us:before,
+i.flag.america:before,
+i.flag.united.states:before {
+ background-position: -72px -1950px;
+}
+i.flag.uy:before,
+i.flag.uruguay:before {
+ background-position: -72px -1976px;
+}
+i.flag.uz:before,
+i.flag.uzbekistan:before {
+ background-position: -108px 0px;
+}
+i.flag.va:before,
+i.flag.vatican.city:before {
+ background-position: -108px -26px;
+}
+i.flag.vc:before,
+i.flag.saint.vincent:before {
+ background-position: -108px -52px;
+}
+i.flag.ve:before,
+i.flag.venezuela:before {
+ background-position: -108px -78px;
+}
+i.flag.vg:before,
+i.flag.british.virgin.islands:before {
+ background-position: -108px -104px;
+}
+i.flag.vi:before,
+i.flag.us.virgin.islands:before {
+ background-position: -108px -130px;
+}
+i.flag.vn:before,
+i.flag.vietnam:before {
+ background-position: -108px -156px;
+}
+i.flag.vu:before,
+i.flag.vanuatu:before {
+ background-position: -108px -182px;
+}
+i.flag.gb.wls:before,
+i.flag.wales:before {
+ background-position: -108px -208px;
+}
+i.flag.wf:before,
+i.flag.wallis.and.futuna:before {
+ background-position: -108px -234px;
+}
+i.flag.ws:before,
+i.flag.samoa:before {
+ background-position: -108px -260px;
+}
+i.flag.ye:before,
+i.flag.yemen:before {
+ background-position: -108px -286px;
+}
+i.flag.yt:before,
+i.flag.mayotte:before {
+ background-position: -108px -312px;
+}
+i.flag.za:before,
+i.flag.south.africa:before {
+ background-position: -108px -338px;
+}
+i.flag.zm:before,
+i.flag.zambia:before {
+ background-position: -108px -364px;
+}
+i.flag.zw:before,
+i.flag.zimbabwe:before {
+ background-position: -108px -390px;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/flag.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/flag.variables b/semantic/src/themes/default/elements/flag.variables
new file mode 100644
index 0000000..cf0884c
--- /dev/null
+++ b/semantic/src/themes/default/elements/flag.variables
@@ -0,0 +1,13 @@
+/*******************************
+ Flag
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@spritePath: "@{imagePath}/flags.png";
+@width: 16px;
+@height: 11px;
+@verticalAlign: baseline;
+@margin: 0.5em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/header.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/header.overrides b/semantic/src/themes/default/elements/header.overrides
new file mode 100644
index 0000000..0e06821
--- /dev/null
+++ b/semantic/src/themes/default/elements/header.overrides
@@ -0,0 +1,4 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/header.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/header.variables b/semantic/src/themes/default/elements/header.variables
new file mode 100644
index 0000000..6c4ebfd
--- /dev/null
+++ b/semantic/src/themes/default/elements/header.variables
@@ -0,0 +1,151 @@
+/*******************************
+ Header
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@textTransform: none;
+@fontFamily: @headerFont;
+@fontWeight: @headerFontWeight;
+@lineHeight: @headerLineHeight;
+@lineHeightOffset: @headerLineHeightOffset;
+
+@topMargin: @headerTopMargin;
+@bottomMargin: @headerBottomMargin;
+@margin: @topMargin 0em @bottomMargin;
+
+@firstMargin: -@lineHeightOffset;
+@lastMargin: 0em;
+@horizontalPadding: 0em;
+@verticalPadding: 0em;
+
+/* Sub Heading */
+@subHeadingDistance: @2px;
+@subHeadingFontSize: @relativeTiny;
+@subHeadingFontWeight: bold;
+@subHeadingTextTransform: uppercase;
+@subHeadingColor: '';
+
+@smallSubHeadingSize: @relativeMini;
+@largeSubHeadingSize: @relativeSmall;
+@hugeSubHeadingSize: @relativeMedium;
+
+/* Sub Header */
+@subHeaderMargin: 0em;
+@subHeaderLineHeight: 1.2em;
+@subHeaderColor: @mutedTextColor;
+
+/* Icon */
+@iconOpacity: 1;
+@iconSize: 1.5em;
+@iconOffset: @lineHeightOffset;
+@iconMargin: 0.75rem;
+@iconAlignment: middle;
+
+/* Image */
+@imageWidth: 2.5em;
+@imageHeight: auto;
+@imageOffset: @lineHeightOffset;
+@imageMargin: @iconMargin;
+@imageAlignment: middle;
+
+/* Label */
+@labelSize: '';
+@labelDistance: 0.5rem;
+@labelVerticalAlign: middle;
+
+/* Content */
+@contentAlignment: top;
+@contentIconAlignment: middle;
+@contentImageAlignment: middle;
+
+/* Paragraph after Header */
+@nextParagraphDistance: 0em;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Sizing */
+@hugeFontSize : unit(@h1, em);
+@largeFontSize : unit(@h2, em);
+@mediumFontSize : unit(@h3, em);
+@smallFontSize : unit(@h4, em);
+@tinyFontSize : unit(@h5, em);
+
+/* Sub Header */
+@h1SubHeaderFontSize: @large;
+@h2SubHeaderFontSize: @large;
+@h3SubHeaderFontSize: @medium;
+@h4SubHeaderFontSize: @medium;
+@h5SubHeaderFontSize: @small;
+
+@hugeSubHeaderFontSize : @h1SubHeaderFontSize;
+@largeSubHeaderFontSize : @h2SubHeaderFontSize;
+@subHeaderFontSize : @h3SubHeaderFontSize;
+@smallSubHeaderFontSize : @h4SubHeaderFontSize;
+@tinySubHeaderFontSize : @h5SubHeaderFontSize;
+
+/* Icon Header */
+@iconHeaderSize: 3em;
+@iconHeaderOpacity: 1;
+@iconHeaderMargin: 0.5rem;
+@circularHeaderIconSize: 2em;
+@squareHeaderIconSize: 2em;
+
+/* No Line Height Offset */
+@iconHeaderTopMargin: 2rem;
+@iconHeaderBottomMargin: @bottomMargin;
+@iconHeaderFirstMargin: 0em;
+
+/* Divided */
+@dividedBorderWidth: 1px;
+@dividedBorder: @dividedBorderWidth solid @borderColor;
+@dividedColoredBorderWidth: 2px;
+
+@dividedBorderPadding: @3px;
+@dividedSubHeaderPadding: @3px;
+@dividedIconPadding: 0em;
+
+/* Block */
+@blockBackground: @darkWhite;
+@blockBoxShadow: none;
+@blockBorderWidth: 1px;
+@blockBorder: @blockBorderWidth solid @solidBorderColor;
+@blockHorizontalPadding: @medium;
+@blockVerticalPadding: @mini;
+@blockBorderRadius: @defaultBorderRadius;
+
+@tinyBlock: @tiny;
+@smallBlock: @small;
+@mediumBlock: @medium;
+@largeBlock: @large;
+@hugeBlock: @huge;
+
+/* Attached */
+@attachedOffset: -1px;
+@attachedBoxShadow: none;
+@attachedBorder: 1px solid @solidBorderColor;
+@attachedVerticalPadding: @blockVerticalPadding;
+@attachedHorizontalPadding: @blockHorizontalPadding;
+@attachedBackground: @white;
+@attachedBorderRadius: @blockBorderRadius;
+
+@tinyAttachedSize: @relativeTiny;
+@smallAttachedSize: @relativeSmall;
+@mediumAttachedSize: @relativeMedium;
+@largeAttachedSize: @relativeLarge;
+@bigAttachedSize: @relativeBig;
+@hugeAttachedSize: @relativeHuge;
+
+/* Inverted */
+@invertedColor: @white;
+@invertedSubHeaderColor: @invertedMutedTextColor;
+@invertedDividedBorderColor: @whiteBorderColor;
+@invertedBlockBackground: @lightBlack @subtleGradient;
+@invertedAttachedBackground: @invertedBlockBackground;
+
+/* Floated */
+@floatedMargin: 0.5em;
[23/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/assets/fonts/icons.svg
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/assets/fonts/icons.svg b/semantic/src/themes/default/assets/fonts/icons.svg
new file mode 100644
index 0000000..8b66187
--- /dev/null
+++ b/semantic/src/themes/default/assets/fonts/icons.svg
@@ -0,0 +1,685 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" " horiz-adv-x="448" />
+<glyph unicode="	" horiz-adv-x="448" />
+<glyph unicode=" " horiz-adv-x="448" />
+<glyph unicode="¨" horiz-adv-x="1792" />
+<glyph unicode="©" horiz-adv-x="1792" />
+<glyph unicode="®" horiz-adv-x="1792" />
+<glyph unicode="´" horiz-adv-x="1792" />
+<glyph unicode="Æ" horiz-adv-x="1792" />
+<glyph unicode="Ø" horiz-adv-x="1792" />
+<glyph unicode=" " horiz-adv-x="768" />
+<glyph unicode=" " horiz-adv-x="1537" />
+<glyph unicode=" " horiz-adv-x="768" />
+<glyph unicode=" " horiz-adv-x="1537" />
+<glyph unicode=" " horiz-adv-x="512" />
+<glyph unicode=" " horiz-adv-x="384" />
+<glyph unicode=" " horiz-adv-x="256" />
+<glyph unicode=" " horiz-adv-x="256" />
+<glyph unicode=" " horiz-adv-x="192" />
+<glyph unicode=" " horiz-adv-x="307" />
+<glyph unicode=" " horiz-adv-x="85" />
+<glyph unicode=" " horiz-adv-x="307" />
+<glyph unicode=" " horiz-adv-x="384" />
+<glyph unicode="™" horiz-adv-x="1792" />
+<glyph unicode="∞" horiz-adv-x="1792" />
+<glyph unicode="≠" horiz-adv-x="1792" />
+<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t1
9 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28
t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " />
+<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -1
13 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+<glyph unicode="" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+<glyph unicode="" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41
.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t
-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152
-23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="" d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4 q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4 t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16 q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98
300.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24 q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5 t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12 q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -
19 -7t13 -15q15 -6 19 6z M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17
t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-1
5 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q
-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -4
<TRUNCATED>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/assets/fonts/icons.ttf
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/assets/fonts/icons.ttf b/semantic/src/themes/default/assets/fonts/icons.ttf
new file mode 100644
index 0000000..f221e50
Binary files /dev/null and b/semantic/src/themes/default/assets/fonts/icons.ttf differ
[36/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/accordion.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/accordion.js b/semantic/src/definitions/modules/accordion.js
new file mode 100644
index 0000000..a6b327c
--- /dev/null
+++ b/semantic/src/definitions/modules/accordion.js
@@ -0,0 +1,610 @@
+/*!
+ * # Semantic UI - Accordion
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.accordion = function(parameters) {
+ var
+ $allModules = $(this),
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); },
+
+ returnedValue
+ ;
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.accordion.settings, parameters)
+ : $.extend({}, $.fn.accordion.settings),
+
+ className = settings.className,
+ namespace = settings.namespace,
+ selector = settings.selector,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+ moduleSelector = $allModules.selector || '',
+
+ $module = $(this),
+ $title = $module.find(selector.title),
+ $content = $module.find(selector.content),
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+ observer,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.debug('Initializing', $module);
+ module.bind.events();
+ if(settings.observeChanges) {
+ module.observeChanges();
+ }
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.debug('Destroying previous instance', $module);
+ $module
+ .off(eventNamespace)
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ refresh: function() {
+ $title = $module.find(selector.title);
+ $content = $module.find(selector.content);
+ },
+
+ observeChanges: function() {
+ if('MutationObserver' in window) {
+ observer = new MutationObserver(function(mutations) {
+ module.debug('DOM tree modified, updating selector cache');
+ module.refresh();
+ });
+ observer.observe(element, {
+ childList : true,
+ subtree : true
+ });
+ module.debug('Setting up mutation observer', observer);
+ }
+ },
+
+ bind: {
+ events: function() {
+ module.debug('Binding delegated events');
+ $module
+ .on(settings.on + eventNamespace, selector.trigger, module.event.click)
+ ;
+ }
+ },
+
+ event: {
+ click: function() {
+ module.toggle.call(this);
+ }
+ },
+
+ toggle: function(query) {
+ var
+ $activeTitle = (query !== undefined)
+ ? (typeof query === 'number')
+ ? $title.eq(query)
+ : $(query).closest(selector.title)
+ : $(this).closest(selector.title),
+ $activeContent = $activeTitle.next($content),
+ isAnimating = $activeContent.hasClass(className.animating),
+ isActive = $activeContent.hasClass(className.active),
+ isOpen = (isActive && !isAnimating),
+ isOpening = (!isActive && isAnimating)
+ ;
+ module.debug('Toggling visibility of content', $activeTitle);
+ if(isOpen || isOpening) {
+ if(settings.collapsible) {
+ module.close.call($activeTitle);
+ }
+ else {
+ module.debug('Cannot close accordion content collapsing is disabled');
+ }
+ }
+ else {
+ module.open.call($activeTitle);
+ }
+ },
+
+ open: function(query) {
+ var
+ $activeTitle = (query !== undefined)
+ ? (typeof query === 'number')
+ ? $title.eq(query)
+ : $(query).closest(selector.title)
+ : $(this).closest(selector.title),
+ $activeContent = $activeTitle.next($content),
+ isAnimating = $activeContent.hasClass(className.animating),
+ isActive = $activeContent.hasClass(className.active),
+ isOpen = (isActive || isAnimating)
+ ;
+ if(isOpen) {
+ module.debug('Accordion already open, skipping', $activeContent);
+ return;
+ }
+ module.debug('Opening accordion content', $activeTitle);
+ settings.onOpening.call($activeContent);
+ if(settings.exclusive) {
+ module.closeOthers.call($activeTitle);
+ }
+ $activeTitle
+ .addClass(className.active)
+ ;
+ $activeContent
+ .stop(true, true)
+ .addClass(className.animating)
+ ;
+ if(settings.animateChildren) {
+ if($.fn.transition !== undefined && $module.transition('is supported')) {
+ $activeContent
+ .children()
+ .transition({
+ animation : 'fade in',
+ queue : false,
+ useFailSafe : true,
+ debug : settings.debug,
+ verbose : settings.verbose,
+ duration : settings.duration
+ })
+ ;
+ }
+ else {
+ $activeContent
+ .children()
+ .stop(true, true)
+ .animate({
+ opacity: 1
+ }, settings.duration, module.resetOpacity)
+ ;
+ }
+ }
+ $activeContent
+ .slideDown(settings.duration, settings.easing, function() {
+ $activeContent
+ .removeClass(className.animating)
+ .addClass(className.active)
+ ;
+ module.reset.display.call(this);
+ settings.onOpen.call(this);
+ settings.onChange.call(this);
+ })
+ ;
+ },
+
+ close: function(query) {
+ var
+ $activeTitle = (query !== undefined)
+ ? (typeof query === 'number')
+ ? $title.eq(query)
+ : $(query).closest(selector.title)
+ : $(this).closest(selector.title),
+ $activeContent = $activeTitle.next($content),
+ isAnimating = $activeContent.hasClass(className.animating),
+ isActive = $activeContent.hasClass(className.active),
+ isOpening = (!isActive && isAnimating),
+ isClosing = (isActive && isAnimating)
+ ;
+ if((isActive || isOpening) && !isClosing) {
+ module.debug('Closing accordion content', $activeContent);
+ settings.onClosing.call($activeContent);
+ $activeTitle
+ .removeClass(className.active)
+ ;
+ $activeContent
+ .stop(true, true)
+ .addClass(className.animating)
+ ;
+ if(settings.animateChildren) {
+ if($.fn.transition !== undefined && $module.transition('is supported')) {
+ $activeContent
+ .children()
+ .transition({
+ animation : 'fade out',
+ queue : false,
+ useFailSafe : true,
+ debug : settings.debug,
+ verbose : settings.verbose,
+ duration : settings.duration
+ })
+ ;
+ }
+ else {
+ $activeContent
+ .children()
+ .stop(true, true)
+ .animate({
+ opacity: 0
+ }, settings.duration, module.resetOpacity)
+ ;
+ }
+ }
+ $activeContent
+ .slideUp(settings.duration, settings.easing, function() {
+ $activeContent
+ .removeClass(className.animating)
+ .removeClass(className.active)
+ ;
+ module.reset.display.call(this);
+ settings.onClose.call(this);
+ settings.onChange.call(this);
+ })
+ ;
+ }
+ },
+
+ closeOthers: function(index) {
+ var
+ $activeTitle = (index !== undefined)
+ ? $title.eq(index)
+ : $(this).closest(selector.title),
+ $parentTitles = $activeTitle.parents(selector.content).prev(selector.title),
+ $activeAccordion = $activeTitle.closest(selector.accordion),
+ activeSelector = selector.title + '.' + className.active + ':visible',
+ activeContent = selector.content + '.' + className.active + ':visible',
+ $openTitles,
+ $nestedTitles,
+ $openContents
+ ;
+ if(settings.closeNested) {
+ $openTitles = $activeAccordion.find(activeSelector).not($parentTitles);
+ $openContents = $openTitles.next($content);
+ }
+ else {
+ $openTitles = $activeAccordion.find(activeSelector).not($parentTitles);
+ $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);
+ $openTitles = $openTitles.not($nestedTitles);
+ $openContents = $openTitles.next($content);
+ }
+ if( ($openTitles.length > 0) ) {
+ module.debug('Exclusive enabled, closing other content', $openTitles);
+ $openTitles
+ .removeClass(className.active)
+ ;
+ $openContents
+ .removeClass(className.animating)
+ .stop(true, true)
+ ;
+ if(settings.animateChildren) {
+ if($.fn.transition !== undefined && $module.transition('is supported')) {
+ $openContents
+ .children()
+ .transition({
+ animation : 'fade out',
+ useFailSafe : true,
+ debug : settings.debug,
+ verbose : settings.verbose,
+ duration : settings.duration
+ })
+ ;
+ }
+ else {
+ $openContents
+ .children()
+ .stop(true, true)
+ .animate({
+ opacity: 0
+ }, settings.duration, module.resetOpacity)
+ ;
+ }
+ }
+ $openContents
+ .slideUp(settings.duration , settings.easing, function() {
+ $(this).removeClass(className.active);
+ module.reset.display.call(this);
+ })
+ ;
+ }
+ },
+
+ reset: {
+
+ display: function() {
+ module.verbose('Removing inline display from element', this);
+ $(this).css('display', '');
+ if( $(this).attr('style') === '') {
+ $(this)
+ .attr('style', '')
+ .removeAttr('style')
+ ;
+ }
+ },
+
+ opacity: function() {
+ module.verbose('Removing inline opacity from element', this);
+ $(this).css('opacity', '');
+ if( $(this).attr('style') === '') {
+ $(this)
+ .attr('style', '')
+ .removeAttr('style')
+ ;
+ }
+ },
+
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ module.debug('Changing internal', name, value);
+ if(value !== undefined) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else {
+ module[name] = value;
+ }
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.accordion.settings = {
+
+ name : 'Accordion',
+ namespace : 'accordion',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ on : 'click', // event on title that opens accordion
+
+ observeChanges : true, // whether accordion should automatically refresh on DOM insertion
+
+ exclusive : true, // whether a single accordion content panel should be open at once
+ collapsible : true, // whether accordion content can be closed
+ closeNested : false, // whether nested content should be closed when a panel is closed
+ animateChildren : true, // whether children opacity should be animated
+
+ duration : 350, // duration of animation
+ easing : 'easeOutQuad', // easing equation for animation
+
+
+ onOpening : function(){}, // callback before open animation
+ onOpen : function(){}, // callback after open animation
+ onClosing : function(){}, // callback before closing animation
+ onClose : function(){}, // callback after closing animation
+ onChange : function(){}, // callback after closing or opening animation
+
+ error: {
+ method : 'The method you called is not defined'
+ },
+
+ className : {
+ active : 'active',
+ animating : 'animating'
+ },
+
+ selector : {
+ accordion : '.accordion',
+ title : '.title',
+ trigger : '.title',
+ content : '.content'
+ }
+
+};
+
+// Adds easing
+$.extend( $.easing, {
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ }
+});
+
+})( jQuery, window, document );
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/accordion.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/accordion.less b/semantic/src/definitions/modules/accordion.less
new file mode 100755
index 0000000..eaf0776
--- /dev/null
+++ b/semantic/src/definitions/modules/accordion.less
@@ -0,0 +1,219 @@
+/*!
+ * # Semantic UI - Accordion
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'accordion';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Accordion
+*******************************/
+
+.ui.accordion,
+.ui.accordion .accordion {
+ max-width: 100%;
+}
+.ui.accordion .accordion {
+ margin: @childAccordionMargin;
+ padding: @childAccordionPadding;
+}
+
+/* Title */
+.ui.accordion .title,
+.ui.accordion .accordion .title {
+ cursor: pointer;
+}
+
+/* Default Styling */
+.ui.accordion .title:not(.ui) {
+ padding: @titlePadding;
+ font-family: @titleFont;
+ font-size: @titleFontSize;
+ color: @titleColor;
+}
+
+/* Content */
+.ui.accordion .title ~ .content,
+.ui.accordion .accordion .title ~ .content {
+ display: none;
+}
+
+/* Default Styling */
+.ui.accordion:not(.styled) .title ~ .content:not(.ui),
+.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {
+ margin: @contentMargin;
+ padding: @contentPadding;
+}
+.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {
+ padding-bottom: 0em;
+}
+
+/* Arrow */
+.ui.accordion .title .dropdown.icon,
+.ui.accordion .accordion .title .dropdown.icon {
+ display: @iconDisplay;
+ float: @iconFloat;
+ opacity: @iconOpacity;
+ width: @iconWidth;
+ height: @iconHeight;
+ margin: @iconMargin;
+ padding: @iconPadding;
+ font-size: @iconFontSize;
+ transition: @iconTransition;
+ vertical-align: @iconVerticalAlign;
+ transform: @iconTransform;
+}
+
+/*--------------
+ Coupling
+---------------*/
+
+/* Menu */
+.ui.accordion.menu .item .title {
+ display: block;
+ padding: @menuTitlePadding;
+}
+.ui.accordion.menu .item .title > .dropdown.icon {
+ float: @menuIconFloat;
+ margin: @menuIconMargin;
+ transform: @menuIconTransform;
+}
+
+/* Header */
+.ui.accordion .ui.header .dropdown.icon {
+ font-size: @iconFontSize;
+ margin: @iconMargin;
+}
+
+/*******************************
+ States
+*******************************/
+
+.ui.accordion .active.title .dropdown.icon,
+.ui.accordion .accordion .active.title .dropdown.icon {
+ transform: @activeIconTransform;
+}
+
+.ui.accordion.menu .item .active.title > .dropdown.icon {
+ transform: @activeIconTransform;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Styled
+---------------*/
+
+.ui.styled.accordion {
+ width: @styledWidth;
+}
+
+.ui.styled.accordion,
+.ui.styled.accordion .accordion {
+ border-radius: @styledBorderRadius;
+ background: @styledBackground;
+ box-shadow: @styledBoxShadow;
+}
+.ui.styled.accordion .title,
+.ui.styled.accordion .accordion .title {
+ margin: @styledTitleMargin;
+ padding: @styledTitlePadding;
+ color: @styledTitleColor;
+ font-weight: @styledTitleFontWeight;
+ border-top: @styledTitleBorder;
+ transition: @styledTitleTransition;
+}
+.ui.styled.accordion > .title:first-child,
+.ui.styled.accordion .accordion .title:first-child {
+ border-top: none;
+}
+
+
+/* Content */
+.ui.styled.accordion .content,
+.ui.styled.accordion .accordion .content {
+ margin: @styledContentMargin;
+ padding: @styledContentPadding;
+}
+.ui.styled.accordion .accordion .content {
+ padding: @styledChildContentMargin;
+ padding: @styledChildContentPadding;
+}
+
+
+/* Hover */
+.ui.styled.accordion .title:hover,
+.ui.styled.accordion .active.title,
+.ui.styled.accordion .accordion .title:hover,
+.ui.styled.accordion .accordion .active.title {
+ background: @styledTitleHoverBackground;
+ color: @styledTitleHoverColor;
+}
+.ui.styled.accordion .accordion .title:hover,
+.ui.styled.accordion .accordion .active.title {
+ background: @styledHoverChildTitleBackground;
+ color: @styledHoverChildTitleColor;
+}
+
+
+/* Active */
+.ui.styled.accordion .active.title {
+ background: @styledActiveTitleBackground;
+ color: @styledActiveTitleColor;
+}
+.ui.styled.accordion .accordion .active.title {
+ background: @styledActiveChildTitleBackground;
+ color: @styledActiveChildTitleColor;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Active
+---------------*/
+
+.ui.accordion .active.content,
+.ui.accordion .accordion .active.content {
+ display: block;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Fluid
+---------------*/
+
+.ui.fluid.accordion,
+.ui.fluid.accordion .accordion {
+ width: 100%;
+}
+
+/*--------------
+ Inverted
+---------------*/
+
+.ui.inverted.accordion .title:not(.ui) {
+ color: @invertedTitleColor;
+}
+
+.loadUIOverrides();
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/checkbox.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/checkbox.js b/semantic/src/definitions/modules/checkbox.js
new file mode 100644
index 0000000..4c92984
--- /dev/null
+++ b/semantic/src/definitions/modules/checkbox.js
@@ -0,0 +1,831 @@
+/*!
+ * # Semantic UI - Checkbox
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.checkbox = function(parameters) {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = $.extend(true, {}, $.fn.checkbox.settings, parameters),
+
+ className = settings.className,
+ namespace = settings.namespace,
+ selector = settings.selector,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $module = $(this),
+ $label = $(this).children(selector.label),
+ $input = $(this).children(selector.input),
+ input = $input[0],
+
+ initialLoad = false,
+ shortcutPressed = false,
+ instance = $module.data(moduleNamespace),
+
+ observer,
+ element = this,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.verbose('Initializing checkbox', settings);
+
+ module.create.label();
+ module.bind.events();
+
+ module.set.tabbable();
+ module.hide.input();
+
+ module.observeChanges();
+ module.instantiate();
+ module.setup();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying module');
+ module.unbind.events();
+ module.show.input();
+ $module.removeData(moduleNamespace);
+ },
+
+ fix: {
+ reference: function() {
+ if( $module.is(selector.input) ) {
+ module.debug('Behavior called on <input> adjusting invoked element');
+ $module = $module.closest(selector.checkbox);
+ module.refresh();
+ }
+ }
+ },
+
+ setup: function() {
+ module.set.initialLoad();
+ if( module.is.indeterminate() ) {
+ module.debug('Initial value is indeterminate');
+ module.indeterminate();
+ }
+ else if( module.is.checked() ) {
+ module.debug('Initial value is checked');
+ module.check();
+ }
+ else {
+ module.debug('Initial value is unchecked');
+ module.uncheck();
+ }
+ module.remove.initialLoad();
+ },
+
+ refresh: function() {
+ $label = $module.children(selector.label);
+ $input = $module.children(selector.input);
+ input = $input[0];
+ },
+
+ hide: {
+ input: function() {
+ module.verbose('Modifying <input> z-index to be unselectable');
+ $input.addClass(className.hidden);
+ }
+ },
+ show: {
+ input: function() {
+ module.verbose('Modifying <input> z-index to be selectable');
+ $input.removeClass(className.hidden);
+ }
+ },
+
+ observeChanges: function() {
+ if('MutationObserver' in window) {
+ observer = new MutationObserver(function(mutations) {
+ module.debug('DOM tree modified, updating selector cache');
+ module.refresh();
+ });
+ observer.observe(element, {
+ childList : true,
+ subtree : true
+ });
+ module.debug('Setting up mutation observer', observer);
+ }
+ },
+
+ attachEvents: function(selector, event) {
+ var
+ $element = $(selector)
+ ;
+ event = $.isFunction(module[event])
+ ? module[event]
+ : module.toggle
+ ;
+ if($element.length > 0) {
+ module.debug('Attaching checkbox events to element', selector, event);
+ $element
+ .on('click' + eventNamespace, event)
+ ;
+ }
+ else {
+ module.error(error.notFound);
+ }
+ },
+
+ event: {
+ click: function(event) {
+ var
+ $target = $(event.target)
+ ;
+ if( $target.is(selector.input) ) {
+ module.verbose('Using default check action on initialized checkbox');
+ return;
+ }
+ if( $target.is(selector.link) ) {
+ module.debug('Clicking link inside checkbox, skipping toggle');
+ return;
+ }
+ module.toggle();
+ $input.focus();
+ event.preventDefault();
+ },
+ keydown: function(event) {
+ var
+ key = event.which,
+ keyCode = {
+ enter : 13,
+ space : 32,
+ escape : 27
+ }
+ ;
+ if(key == keyCode.escape) {
+ module.verbose('Escape key pressed blurring field');
+ $input.blur();
+ shortcutPressed = true;
+ }
+ else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {
+ module.verbose('Enter/space key pressed, toggling checkbox');
+ module.toggle();
+ shortcutPressed = true;
+ }
+ else {
+ shortcutPressed = false;
+ }
+ },
+ keyup: function(event) {
+ if(shortcutPressed) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ check: function() {
+ if( !module.should.allowCheck() ) {
+ return;
+ }
+ module.debug('Checking checkbox', $input);
+ module.set.checked();
+ if( !module.should.ignoreCallbacks() ) {
+ settings.onChecked.call(input);
+ settings.onChange.call(input);
+ }
+ },
+
+ uncheck: function() {
+ if( !module.should.allowUncheck() ) {
+ return;
+ }
+ module.debug('Unchecking checkbox');
+ module.set.unchecked();
+ if( !module.should.ignoreCallbacks() ) {
+ settings.onUnchecked.call(input);
+ settings.onChange.call(input);
+ }
+ },
+
+ indeterminate: function() {
+ if( module.should.allowIndeterminate() ) {
+ module.debug('Checkbox is already indeterminate');
+ return;
+ }
+ module.debug('Making checkbox indeterminate');
+ module.set.indeterminate();
+ if( !module.should.ignoreCallbacks() ) {
+ settings.onIndeterminate.call(input);
+ settings.onChange.call(input);
+ }
+ },
+
+ determinate: function() {
+ if( module.should.allowDeterminate() ) {
+ module.debug('Checkbox is already determinate');
+ return;
+ }
+ module.debug('Making checkbox determinate');
+ module.set.determinate();
+ if( !module.should.ignoreCallbacks() ) {
+ settings.onDeterminate.call(input);
+ settings.onChange.call(input);
+ }
+ },
+
+ enable: function() {
+ if( module.is.enabled() ) {
+ module.debug('Checkbox is already enabled');
+ return;
+ }
+ module.debug('Enabling checkbox');
+ module.set.enabled();
+ settings.onEnable.call(input);
+ // preserve legacy callbacks
+ settings.onEnabled.call(input);
+ },
+
+ disable: function() {
+ if( module.is.disabled() ) {
+ module.debug('Checkbox is already disabled');
+ return;
+ }
+ module.debug('Disabling checkbox');
+ module.set.disabled();
+ settings.onDisable.call(input);
+ // preserve legacy callbacks
+ settings.onDisabled.call(input);
+ },
+
+ get: {
+ radios: function() {
+ var
+ name = module.get.name()
+ ;
+ return $('input[name="' + name + '"]').closest(selector.checkbox);
+ },
+ otherRadios: function() {
+ return module.get.radios().not($module);
+ },
+ name: function() {
+ return $input.attr('name');
+ }
+ },
+
+ is: {
+ initialLoad: function() {
+ return initialLoad;
+ },
+ radio: function() {
+ return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');
+ },
+ indeterminate: function() {
+ return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');
+ },
+ checked: function() {
+ return $input.prop('checked') !== undefined && $input.prop('checked');
+ },
+ disabled: function() {
+ return $input.prop('disabled') !== undefined && $input.prop('disabled');
+ },
+ enabled: function() {
+ return !module.is.disabled();
+ },
+ determinate: function() {
+ return !module.is.indeterminate();
+ },
+ unchecked: function() {
+ return !module.is.checked();
+ }
+ },
+
+ should: {
+ allowCheck: function() {
+ if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {
+ module.debug('Should not allow check, checkbox is already checked');
+ return false;
+ }
+ if(settings.beforeChecked.apply(input) === false) {
+ module.debug('Should not allow check, beforeChecked cancelled');
+ return false;
+ }
+ return true;
+ },
+ allowUncheck: function() {
+ if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {
+ module.debug('Should not allow uncheck, checkbox is already unchecked');
+ return false;
+ }
+ if(settings.beforeUnchecked.apply(input) === false) {
+ module.debug('Should not allow uncheck, beforeUnchecked cancelled');
+ return false;
+ }
+ return true;
+ },
+ allowIndeterminate: function() {
+ if(module.is.indeterminate() && !module.should.forceCallbacks() ) {
+ module.debug('Should not allow indeterminate, checkbox is already indeterminate');
+ return false;
+ }
+ if(settings.beforeIndeterminate.apply(input) === false) {
+ module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');
+ return false;
+ }
+ return true;
+ },
+ allowDeterminate: function() {
+ if(module.is.determinate() && !module.should.forceCallbacks() ) {
+ module.debug('Should not allow determinate, checkbox is already determinate');
+ return false;
+ }
+ if(settings.beforeDeterminate.apply(input) === false) {
+ module.debug('Should not allow determinate, beforeDeterminate cancelled');
+ return false;
+ }
+ return true;
+ },
+ forceCallbacks: function() {
+ return (module.is.initialLoad() && settings.fireOnInit);
+ },
+ ignoreCallbacks: function() {
+ return (initialLoad && !settings.fireOnInit);
+ }
+ },
+
+ can: {
+ change: function() {
+ return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );
+ },
+ uncheck: function() {
+ return (typeof settings.uncheckable === 'boolean')
+ ? settings.uncheckable
+ : !module.is.radio()
+ ;
+ }
+ },
+
+ set: {
+ initialLoad: function() {
+ initialLoad = true;
+ },
+ checked: function() {
+ module.verbose('Setting class to checked');
+ $module
+ .removeClass(className.indeterminate)
+ .addClass(className.checked)
+ ;
+ if( module.is.radio() ) {
+ module.uncheckOthers();
+ }
+ if(!module.is.indeterminate() && module.is.checked()) {
+ module.debug('Input is already checked, skipping input property change');
+ return;
+ }
+ module.verbose('Setting state to checked', input);
+ $input
+ .prop('indeterminate', false)
+ .prop('checked', true)
+ ;
+ module.trigger.change();
+ },
+ unchecked: function() {
+ module.verbose('Removing checked class');
+ $module
+ .removeClass(className.indeterminate)
+ .removeClass(className.checked)
+ ;
+ if(!module.is.indeterminate() && module.is.unchecked() ) {
+ module.debug('Input is already unchecked');
+ return;
+ }
+ module.debug('Setting state to unchecked');
+ $input
+ .prop('indeterminate', false)
+ .prop('checked', false)
+ ;
+ module.trigger.change();
+ },
+ indeterminate: function() {
+ module.verbose('Setting class to indeterminate');
+ $module
+ .addClass(className.indeterminate)
+ ;
+ if( module.is.indeterminate() ) {
+ module.debug('Input is already indeterminate, skipping input property change');
+ return;
+ }
+ module.debug('Setting state to indeterminate');
+ $input
+ .prop('indeterminate', true)
+ ;
+ module.trigger.change();
+ },
+ determinate: function() {
+ module.verbose('Removing indeterminate class');
+ $module
+ .removeClass(className.indeterminate)
+ ;
+ if( module.is.determinate() ) {
+ module.debug('Input is already determinate, skipping input property change');
+ return;
+ }
+ module.debug('Setting state to determinate');
+ $input
+ .prop('indeterminate', false)
+ ;
+ },
+ disabled: function() {
+ module.verbose('Setting class to disabled');
+ $module
+ .addClass(className.disabled)
+ ;
+ if( module.is.disabled() ) {
+ module.debug('Input is already disabled, skipping input property change');
+ return;
+ }
+ module.debug('Setting state to disabled');
+ $input
+ .prop('disabled', 'disabled')
+ ;
+ module.trigger.change();
+ },
+ enabled: function() {
+ module.verbose('Removing disabled class');
+ $module.removeClass(className.disabled);
+ if( module.is.enabled() ) {
+ module.debug('Input is already enabled, skipping input property change');
+ return;
+ }
+ module.debug('Setting state to enabled');
+ $input
+ .prop('disabled', false)
+ ;
+ module.trigger.change();
+ },
+ tabbable: function() {
+ module.verbose('Adding tabindex to checkbox');
+ if( $input.attr('tabindex') === undefined) {
+ $input.attr('tabindex', 0);
+ }
+ }
+ },
+
+ remove: {
+ initialLoad: function() {
+ initialLoad = false;
+ }
+ },
+
+ trigger: {
+ change: function() {
+ var
+ events = document.createEvent('HTMLEvents'),
+ inputElement = $input[0]
+ ;
+ if(inputElement) {
+ module.verbose('Triggering native change event');
+ events.initEvent('change', true, false);
+ inputElement.dispatchEvent(events);
+ }
+ }
+ },
+
+
+ create: {
+ label: function() {
+ if($input.prevAll(selector.label).length > 0) {
+ $input.prev(selector.label).detach().insertAfter($input);
+ module.debug('Moving existing label', $label);
+ }
+ else if( !module.has.label() ) {
+ $label = $('<label>').insertAfter($input);
+ module.debug('Creating label', $label);
+ }
+ }
+ },
+
+ has: {
+ label: function() {
+ return ($label.length > 0);
+ }
+ },
+
+ bind: {
+ events: function() {
+ module.verbose('Attaching checkbox events');
+ $module
+ .on('click' + eventNamespace, module.event.click)
+ .on('keydown' + eventNamespace, selector.input, module.event.keydown)
+ .on('keyup' + eventNamespace, selector.input, module.event.keyup)
+ ;
+ }
+ },
+
+ unbind: {
+ events: function() {
+ module.debug('Removing events');
+ $module
+ .off(eventNamespace)
+ ;
+ }
+ },
+
+ uncheckOthers: function() {
+ var
+ $radios = module.get.otherRadios()
+ ;
+ module.debug('Unchecking other radios', $radios);
+ $radios.removeClass(className.checked);
+ },
+
+ toggle: function() {
+ if( !module.can.change() ) {
+ if(!module.is.radio()) {
+ module.debug('Checkbox is read-only or disabled, ignoring toggle');
+ }
+ return;
+ }
+ if( module.is.indeterminate() || module.is.unchecked() ) {
+ module.debug('Currently unchecked');
+ module.check();
+ }
+ else if( module.is.checked() && module.can.uncheck() ) {
+ module.debug('Currently checked');
+ module.uncheck();
+ }
+ },
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.checkbox.settings = {
+
+ name : 'Checkbox',
+ namespace : 'checkbox',
+
+ silent : false,
+ debug : false,
+ verbose : true,
+ performance : true,
+
+ // delegated event context
+ uncheckable : 'auto',
+ fireOnInit : false,
+
+ onChange : function(){},
+
+ beforeChecked : function(){},
+ beforeUnchecked : function(){},
+ beforeDeterminate : function(){},
+ beforeIndeterminate : function(){},
+
+ onChecked : function(){},
+ onUnchecked : function(){},
+
+ onDeterminate : function() {},
+ onIndeterminate : function() {},
+
+ onEnable : function(){},
+ onDisable : function(){},
+
+ // preserve misspelled callbacks (will be removed in 3.0)
+ onEnabled : function(){},
+ onDisabled : function(){},
+
+ className : {
+ checked : 'checked',
+ indeterminate : 'indeterminate',
+ disabled : 'disabled',
+ hidden : 'hidden',
+ radio : 'radio',
+ readOnly : 'read-only'
+ },
+
+ error : {
+ method : 'The method you called is not defined'
+ },
+
+ selector : {
+ checkbox : '.ui.checkbox',
+ label : 'label, .box',
+ input : 'input[type="checkbox"], input[type="radio"]',
+ link : 'a[href]'
+ }
+
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/checkbox.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/checkbox.less b/semantic/src/definitions/modules/checkbox.less
new file mode 100755
index 0000000..28394f0
--- /dev/null
+++ b/semantic/src/definitions/modules/checkbox.less
@@ -0,0 +1,595 @@
+/*!
+ * # Semantic UI - Checkbox
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'checkbox';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Checkbox
+*******************************/
+
+
+/*--------------
+ Content
+---------------*/
+
+.ui.checkbox {
+ position: relative;
+ display: inline-block;
+ backface-visibility: hidden;
+ outline: none;
+ vertical-align: baseline;
+ font-style: normal;
+
+ min-height: @checkboxSize;
+ font-size: @medium;
+ line-height: @checkboxLineHeight;
+ min-width: @checkboxSize;
+}
+
+/* HTML Checkbox */
+.ui.checkbox input[type="checkbox"],
+.ui.checkbox input[type="radio"] {
+ cursor: pointer;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ opacity: 0 !important;
+ outline: none;
+ z-index: 3;
+ width: @checkboxSize;
+ height: @checkboxSize;
+}
+
+
+/*--------------
+ Box
+---------------*/
+
+
+.ui.checkbox .box,
+.ui.checkbox label {
+ cursor: auto;
+ position: relative;
+ display: block;
+ padding-left: @labelDistance;
+ outline: none;
+ font-size: @labelFontSize;
+}
+
+.ui.checkbox .box:before,
+.ui.checkbox label:before {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+
+ width: @checkboxSize;
+ height: @checkboxSize;
+ content: '';
+
+ background: @checkboxBackground;
+ border-radius: @checkboxBorderRadius;
+
+ transition: @checkboxTransition;
+ border: @checkboxBorder;
+}
+
+/*--------------
+ Checkmark
+---------------*/
+
+.ui.checkbox .box:after,
+.ui.checkbox label:after {
+ position: absolute;
+ font-size: @checkboxCheckFontSize;
+ top: @checkboxCheckTop;
+ left: @checkboxCheckLeft;
+ width: @checkboxCheckSize;
+ height: @checkboxCheckSize;
+ text-align: center;
+
+ opacity: 0;
+ color: @checkboxColor;
+ transition: @checkboxTransition;
+}
+
+/*--------------
+ Label
+---------------*/
+
+/* Inside */
+.ui.checkbox label,
+.ui.checkbox + label {
+ color: @labelColor;
+ transition: @labelTransition;
+}
+
+/* Outside */
+.ui.checkbox + label {
+ vertical-align: middle;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+
+/*--------------
+ Hover
+---------------*/
+
+.ui.checkbox .box:hover::before,
+.ui.checkbox label:hover::before {
+ background: @checkboxHoverBackground;
+ border-color: @checkboxHoverBorderColor;
+}
+.ui.checkbox label:hover,
+.ui.checkbox + label:hover {
+ color: @labelHoverColor;
+}
+
+/*--------------
+ Down
+---------------*/
+
+.ui.checkbox .box:active::before,
+.ui.checkbox label:active::before {
+ background: @checkboxPressedBackground;
+ border-color: @checkboxPressedBorderColor;
+}
+.ui.checkbox .box:active::after,
+.ui.checkbox label:active::after {
+ color: @checkboxPressedColor;
+}
+.ui.checkbox input:active ~ label {
+ color: @labelPressedColor;
+}
+
+/*--------------
+ Focus
+---------------*/
+
+.ui.checkbox input:focus ~ .box:before,
+.ui.checkbox input:focus ~ label:before {
+ background: @checkboxFocusBackground;
+ border-color: @checkboxFocusBorderColor;
+}
+.ui.checkbox input:focus ~ .box:after,
+.ui.checkbox input:focus ~ label:after {
+ color: @checkboxFocusCheckColor;
+}
+.ui.checkbox input:focus ~ label {
+ color: @labelFocusColor;
+}
+
+/*--------------
+ Active
+---------------*/
+
+.ui.checkbox input:checked ~ .box:before,
+.ui.checkbox input:checked ~ label:before {
+ background: @checkboxActiveBackground;
+ border-color: @checkboxActiveBorderColor;
+}
+.ui.checkbox input:checked ~ .box:after,
+.ui.checkbox input:checked ~ label:after {
+ opacity: @checkboxActiveCheckOpacity;
+ color: @checkboxActiveCheckColor;
+}
+
+/*--------------
+ Indeterminate
+---------------*/
+
+.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,
+.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {
+ background: @checkboxIndeterminateBackground;
+ border-color: @checkboxIndeterminateBorderColor;
+}
+.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,
+.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {
+ opacity: @checkboxIndeterminateCheckOpacity;
+ color: @checkboxIndeterminateCheckColor;
+}
+
+/*--------------
+ Active Focus
+---------------*/
+
+.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,
+.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,
+.ui.checkbox input:checked:focus ~ .box:before,
+.ui.checkbox input:checked:focus ~ label:before {
+ background: @checkboxActiveFocusBackground;
+ border-color: @checkboxActiveFocusBorderColor;
+}
+.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,
+.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,
+.ui.checkbox input:checked:focus ~ .box:after,
+.ui.checkbox input:checked:focus ~ label:after {
+ color: @checkboxActiveFocusCheckColor;
+}
+
+
+/*--------------
+ Read-Only
+---------------*/
+
+.ui.read-only.checkbox,
+.ui.read-only.checkbox label {
+ cursor: default;
+}
+
+
+/*--------------
+ Disabled
+---------------*/
+
+.ui.disabled.checkbox .box:after,
+.ui.disabled.checkbox label,
+.ui.checkbox input[disabled] ~ .box:after,
+.ui.checkbox input[disabled] ~ label {
+ cursor: default !important;
+ opacity: @disabledCheckboxOpacity;
+ color: @disabledCheckboxLabelColor;
+}
+
+/*--------------
+ Hidden
+---------------*/
+
+/* Initialized checkbox moves input below element
+ to prevent manually triggering */
+.ui.checkbox input.hidden {
+ z-index: -1;
+}
+
+/* Selectable Label */
+.ui.checkbox input.hidden + label {
+ cursor: pointer;
+ user-select: none;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+
+/*--------------
+ Radio
+---------------*/
+
+.ui.radio.checkbox {
+ min-height: @radioSize;
+}
+
+.ui.radio.checkbox .box,
+.ui.radio.checkbox label {
+ padding-left: @radioLabelDistance;
+}
+
+/* Box */
+.ui.radio.checkbox .box:before,
+.ui.radio.checkbox label:before {
+ content: '';
+ transform: none;
+
+ width: @radioSize;
+ height: @radioSize;
+ border-radius: @circularRadius;
+ top: @radioTop;
+ left: @radioLeft;
+}
+
+/* Bullet */
+.ui.radio.checkbox .box:after,
+.ui.radio.checkbox label:after {
+ border: none;
+ content: '' !important;
+ width: @radioSize;
+ height: @radioSize;
+ line-height: @radioSize;
+}
+
+/* Radio Checkbox */
+.ui.radio.checkbox .box:after,
+.ui.radio.checkbox label:after {
+ top: @bulletTop;
+ left: @bulletLeft;
+ width: @radioSize;
+ height: @radioSize;
+ border-radius: @bulletRadius;
+ transform: scale(@bulletScale);
+ background-color: @bulletColor;
+}
+
+/* Focus */
+.ui.radio.checkbox input:focus ~ .box:before,
+.ui.radio.checkbox input:focus ~ label:before {
+ background-color: @radioFocusBackground;
+}
+.ui.radio.checkbox input:focus ~ .box:after,
+.ui.radio.checkbox input:focus ~ label:after {
+ background-color: @radioFocusBulletColor;
+}
+
+/* Indeterminate */
+.ui.radio.checkbox input:indeterminate ~ .box:after,
+.ui.radio.checkbox input:indeterminate ~ label:after {
+ opacity: 0;
+}
+
+/* Active */
+.ui.radio.checkbox input:checked ~ .box:before,
+.ui.radio.checkbox input:checked ~ label:before {
+ background-color: @radioActiveBackground;
+}
+.ui.radio.checkbox input:checked ~ .box:after,
+.ui.radio.checkbox input:checked ~ label:after {
+ background-color: @radioActiveBulletColor;
+}
+
+/* Active Focus */
+.ui.radio.checkbox input:focus:checked ~ .box:before,
+.ui.radio.checkbox input:focus:checked ~ label:before {
+ background-color: @radioActiveFocusBackground;
+}
+.ui.radio.checkbox input:focus:checked ~ .box:after,
+.ui.radio.checkbox input:focus:checked ~ label:after {
+ background-color: @radioActiveFocusBulletColor;
+}
+
+/*--------------
+ Slider
+---------------*/
+
+.ui.slider.checkbox {
+ min-height: @sliderHeight;
+}
+
+/* Input */
+.ui.slider.checkbox input {
+ width: @sliderWidth;
+ height: @sliderHeight;
+}
+
+/* Label */
+.ui.slider.checkbox .box,
+.ui.slider.checkbox label {
+ padding-left: @sliderLabelDistance;
+ line-height: @sliderLabelLineHeight;
+ color: @sliderOffLabelColor;
+}
+
+/* Line */
+.ui.slider.checkbox .box:before,
+.ui.slider.checkbox label:before {
+ display: block;
+ position: absolute;
+ content: '';
+ transform: none;
+ border: none !important;
+ left: 0em;
+ z-index: 1;
+
+ top: @sliderLineVerticalOffset;
+
+ background-color: @sliderLineColor;
+ width: @sliderLineWidth;
+ height: @sliderLineHeight;
+
+ transform: none;
+ border-radius: @sliderLineRadius;
+ transition: @sliderLineTransition;
+
+}
+
+/* Handle */
+.ui.slider.checkbox .box:after,
+.ui.slider.checkbox label:after {
+ background: @handleBackground;
+ position: absolute;
+ content: '' !important;
+ opacity: 1;
+ z-index: 2;
+
+ border: none;
+ box-shadow: @handleBoxShadow;
+ width: @sliderHandleSize;
+ height: @sliderHandleSize;
+ top: @sliderHandleOffset;
+ left: 0em;
+ transform: none;
+
+ border-radius: @circularRadius;
+ transition: @sliderHandleTransition;
+}
+
+/* Focus */
+.ui.slider.checkbox input:focus ~ .box:before,
+.ui.slider.checkbox input:focus ~ label:before {
+ background-color: @toggleFocusColor;
+ border: none;
+}
+
+/* Hover */
+.ui.slider.checkbox .box:hover,
+.ui.slider.checkbox label:hover {
+ color: @sliderHoverLabelColor;
+}
+.ui.slider.checkbox .box:hover::before,
+.ui.slider.checkbox label:hover::before {
+ background: @sliderHoverLaneBackground;
+}
+
+/* Active */
+.ui.slider.checkbox input:checked ~ .box,
+.ui.slider.checkbox input:checked ~ label {
+ color: @sliderOnLabelColor !important;
+}
+.ui.slider.checkbox input:checked ~ .box:before,
+.ui.slider.checkbox input:checked ~ label:before {
+ background-color: @sliderOnLineColor !important;
+}
+.ui.slider.checkbox input:checked ~ .box:after,
+.ui.slider.checkbox input:checked ~ label:after {
+ left: @sliderTravelDistance;
+}
+
+/* Active Focus */
+.ui.slider.checkbox input:focus:checked ~ .box,
+.ui.slider.checkbox input:focus:checked ~ label {
+ color: @sliderOnFocusLabelColor !important;
+}
+.ui.slider.checkbox input:focus:checked ~ .box:before,
+.ui.slider.checkbox input:focus:checked ~ label:before {
+ background-color: @sliderOnFocusLineColor !important;
+}
+
+
+/*--------------
+ Toggle
+---------------*/
+
+.ui.toggle.checkbox {
+ min-height: @toggleHeight;
+}
+
+/* Input */
+.ui.toggle.checkbox input {
+ width: @toggleWidth;
+ height: @toggleHeight;
+}
+
+/* Label */
+.ui.toggle.checkbox .box,
+.ui.toggle.checkbox label {
+ min-height: @toggleHandleSize;
+ padding-left: @toggleLabelDistance;
+ color: @toggleOffLabelColor;
+}
+.ui.toggle.checkbox label {
+ padding-top: @toggleLabelOffset;
+}
+
+/* Switch */
+.ui.toggle.checkbox .box:before,
+.ui.toggle.checkbox label:before {
+ display: block;
+ position: absolute;
+ content: '';
+ z-index: 1;
+ transform: none;
+ border: none;
+
+ top: @toggleLaneVerticalOffset;
+
+ background: @toggleLaneBackground;
+ width: @toggleLaneWidth;
+ height: @toggleLaneHeight;
+ border-radius: @toggleHandleRadius;
+}
+
+/* Handle */
+.ui.toggle.checkbox .box:after,
+.ui.toggle.checkbox label:after {
+ background: @handleBackground;
+ position: absolute;
+ content: '' !important;
+ opacity: 1;
+ z-index: 2;
+
+ border: none;
+ box-shadow: @handleBoxShadow;
+ width: @toggleHandleSize;
+ height: @toggleHandleSize;
+ top: @toggleHandleOffset;
+ left: 0em;
+
+ border-radius: @circularRadius;
+ transition: @toggleHandleTransition;
+}
+
+.ui.toggle.checkbox input ~ .box:after,
+.ui.toggle.checkbox input ~ label:after {
+ left: @toggleOffOffset;
+}
+
+/* Focus */
+.ui.toggle.checkbox input:focus ~ .box:before,
+.ui.toggle.checkbox input:focus ~ label:before {
+ background-color: @toggleFocusColor;
+ border: none;
+}
+
+/* Hover */
+.ui.toggle.checkbox .box:hover::before,
+.ui.toggle.checkbox label:hover::before {
+ background-color: @toggleHoverColor;
+ border: none;
+}
+
+/* Active */
+.ui.toggle.checkbox input:checked ~ .box,
+.ui.toggle.checkbox input:checked ~ label {
+ color: @toggleOnLabelColor !important;
+}
+.ui.toggle.checkbox input:checked ~ .box:before,
+.ui.toggle.checkbox input:checked ~ label:before {
+ background-color: @toggleOnLaneColor !important;
+}
+.ui.toggle.checkbox input:checked ~ .box:after,
+.ui.toggle.checkbox input:checked ~ label:after {
+ left: @toggleOnOffset;
+}
+
+
+/* Active Focus */
+.ui.toggle.checkbox input:focus:checked ~ .box,
+.ui.toggle.checkbox input:focus:checked ~ label {
+ color: @toggleOnFocusLabelColor !important;
+}
+.ui.toggle.checkbox input:focus:checked ~ .box:before,
+.ui.toggle.checkbox input:focus:checked ~ label:before {
+ background-color: @toggleOnFocusLaneColor !important;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Fitted
+---------------*/
+
+.ui.fitted.checkbox .box,
+.ui.fitted.checkbox label {
+ padding-left: 0em !important;
+}
+
+.ui.fitted.toggle.checkbox,
+.ui.fitted.toggle.checkbox {
+ width: @toggleWidth;
+}
+
+.ui.fitted.slider.checkbox,
+.ui.fitted.slider.checkbox {
+ width: @sliderWidth;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/dimmer.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dimmer.js b/semantic/src/definitions/modules/dimmer.js
new file mode 100644
index 0000000..604141e
--- /dev/null
+++ b/semantic/src/definitions/modules/dimmer.js
@@ -0,0 +1,711 @@
+/*!
+ * # Semantic UI - Dimmer
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.dimmer = function(parameters) {
+ var
+ $allModules = $(this),
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.dimmer.settings, parameters)
+ : $.extend({}, $.fn.dimmer.settings),
+
+ selector = settings.selector,
+ namespace = settings.namespace,
+ className = settings.className,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+ moduleSelector = $allModules.selector || '',
+
+ clickEvent = ('ontouchstart' in document.documentElement)
+ ? 'touchstart'
+ : 'click',
+
+ $module = $(this),
+ $dimmer,
+ $dimmable,
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+ module
+ ;
+
+ module = {
+
+ preinitialize: function() {
+ if( module.is.dimmer() ) {
+
+ $dimmable = $module.parent();
+ $dimmer = $module;
+ }
+ else {
+ $dimmable = $module;
+ if( module.has.dimmer() ) {
+ if(settings.dimmerName) {
+ $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);
+ }
+ else {
+ $dimmer = $dimmable.find(selector.dimmer);
+ }
+ }
+ else {
+ $dimmer = module.create();
+ }
+ }
+ },
+
+ initialize: function() {
+ module.debug('Initializing dimmer', settings);
+
+ module.bind.events();
+ module.set.dimmable();
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, instance)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module', $dimmer);
+ module.unbind.events();
+ module.remove.variation();
+ $dimmable
+ .off(eventNamespace)
+ ;
+ },
+
+ bind: {
+ events: function() {
+ if(settings.on == 'hover') {
+ $dimmable
+ .on('mouseenter' + eventNamespace, module.show)
+ .on('mouseleave' + eventNamespace, module.hide)
+ ;
+ }
+ else if(settings.on == 'click') {
+ $dimmable
+ .on(clickEvent + eventNamespace, module.toggle)
+ ;
+ }
+ if( module.is.page() ) {
+ module.debug('Setting as a page dimmer', $dimmable);
+ module.set.pageDimmer();
+ }
+
+ if( module.is.closable() ) {
+ module.verbose('Adding dimmer close event', $dimmer);
+ $dimmable
+ .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)
+ ;
+ }
+ }
+ },
+
+ unbind: {
+ events: function() {
+ $module
+ .removeData(moduleNamespace)
+ ;
+ $dimmable
+ .off(eventNamespace)
+ ;
+ }
+ },
+
+ event: {
+ click: function(event) {
+ module.verbose('Determining if event occured on dimmer', event);
+ if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {
+ module.hide();
+ event.stopImmediatePropagation();
+ }
+ }
+ },
+
+ addContent: function(element) {
+ var
+ $content = $(element)
+ ;
+ module.debug('Add content to dimmer', $content);
+ if($content.parent()[0] !== $dimmer[0]) {
+ $content.detach().appendTo($dimmer);
+ }
+ },
+
+ create: function() {
+ var
+ $element = $( settings.template.dimmer() )
+ ;
+ if(settings.variation) {
+ module.debug('Creating dimmer with variation', settings.variation);
+ $element.addClass(settings.variation);
+ }
+ if(settings.dimmerName) {
+ module.debug('Creating named dimmer', settings.dimmerName);
+ $element.addClass(settings.dimmerName);
+ }
+ $element
+ .appendTo($dimmable)
+ ;
+ return $element;
+ },
+
+ show: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ module.debug('Showing dimmer', $dimmer, settings);
+ if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {
+ module.animate.show(callback);
+ settings.onShow.call(element);
+ settings.onChange.call(element);
+ }
+ else {
+ module.debug('Dimmer is already shown or disabled');
+ }
+ },
+
+ hide: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if( module.is.dimmed() || module.is.animating() ) {
+ module.debug('Hiding dimmer', $dimmer);
+ module.animate.hide(callback);
+ settings.onHide.call(element);
+ settings.onChange.call(element);
+ }
+ else {
+ module.debug('Dimmer is not visible');
+ }
+ },
+
+ toggle: function() {
+ module.verbose('Toggling dimmer visibility', $dimmer);
+ if( !module.is.dimmed() ) {
+ module.show();
+ }
+ else {
+ module.hide();
+ }
+ },
+
+ animate: {
+ show: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
+ if(settings.opacity !== 'auto') {
+ module.set.opacity();
+ }
+ $dimmer
+ .transition({
+ animation : settings.transition + ' in',
+ queue : false,
+ duration : module.get.duration(),
+ useFailSafe : true,
+ onStart : function() {
+ module.set.dimmed();
+ },
+ onComplete : function() {
+ module.set.active();
+ callback();
+ }
+ })
+ ;
+ }
+ else {
+ module.verbose('Showing dimmer animation with javascript');
+ module.set.dimmed();
+ if(settings.opacity == 'auto') {
+ settings.opacity = 0.8;
+ }
+ $dimmer
+ .stop()
+ .css({
+ opacity : 0,
+ width : '100%',
+ height : '100%'
+ })
+ .fadeTo(module.get.duration(), settings.opacity, function() {
+ $dimmer.removeAttr('style');
+ module.set.active();
+ callback();
+ })
+ ;
+ }
+ },
+ hide: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
+ module.verbose('Hiding dimmer with css');
+ $dimmer
+ .transition({
+ animation : settings.transition + ' out',
+ queue : false,
+ duration : module.get.duration(),
+ useFailSafe : true,
+ onStart : function() {
+ module.remove.dimmed();
+ },
+ onComplete : function() {
+ module.remove.active();
+ callback();
+ }
+ })
+ ;
+ }
+ else {
+ module.verbose('Hiding dimmer with javascript');
+ module.remove.dimmed();
+ $dimmer
+ .stop()
+ .fadeOut(module.get.duration(), function() {
+ module.remove.active();
+ $dimmer.removeAttr('style');
+ callback();
+ })
+ ;
+ }
+ }
+ },
+
+ get: {
+ dimmer: function() {
+ return $dimmer;
+ },
+ duration: function() {
+ if(typeof settings.duration == 'object') {
+ if( module.is.active() ) {
+ return settings.duration.hide;
+ }
+ else {
+ return settings.duration.show;
+ }
+ }
+ return settings.duration;
+ }
+ },
+
+ has: {
+ dimmer: function() {
+ if(settings.dimmerName) {
+ return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);
+ }
+ else {
+ return ( $module.find(selector.dimmer).length > 0 );
+ }
+ }
+ },
+
+ is: {
+ active: function() {
+ return $dimmer.hasClass(className.active);
+ },
+ animating: function() {
+ return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );
+ },
+ closable: function() {
+ if(settings.closable == 'auto') {
+ if(settings.on == 'hover') {
+ return false;
+ }
+ return true;
+ }
+ return settings.closable;
+ },
+ dimmer: function() {
+ return $module.hasClass(className.dimmer);
+ },
+ dimmable: function() {
+ return $module.hasClass(className.dimmable);
+ },
+ dimmed: function() {
+ return $dimmable.hasClass(className.dimmed);
+ },
+ disabled: function() {
+ return $dimmable.hasClass(className.disabled);
+ },
+ enabled: function() {
+ return !module.is.disabled();
+ },
+ page: function () {
+ return $dimmable.is('body');
+ },
+ pageDimmer: function() {
+ return $dimmer.hasClass(className.pageDimmer);
+ }
+ },
+
+ can: {
+ show: function() {
+ return !$dimmer.hasClass(className.disabled);
+ }
+ },
+
+ set: {
+ opacity: function(opacity) {
+ var
+ color = $dimmer.css('background-color'),
+ colorArray = color.split(','),
+ isRGB = (colorArray && colorArray.length == 3),
+ isRGBA = (colorArray && colorArray.length == 4)
+ ;
+ opacity = settings.opacity === 0 ? 0 : settings.opacity || opacity;
+ if(isRGB || isRGBA) {
+ colorArray[3] = opacity + ')';
+ color = colorArray.join(',');
+ }
+ else {
+ color = 'rgba(0, 0, 0, ' + opacity + ')';
+ }
+ module.debug('Setting opacity to', opacity);
+ $dimmer.css('background-color', color);
+ },
+ active: function() {
+ $dimmer.addClass(className.active);
+ },
+ dimmable: function() {
+ $dimmable.addClass(className.dimmable);
+ },
+ dimmed: function() {
+ $dimmable.addClass(className.dimmed);
+ },
+ pageDimmer: function() {
+ $dimmer.addClass(className.pageDimmer);
+ },
+ disabled: function() {
+ $dimmer.addClass(className.disabled);
+ },
+ variation: function(variation) {
+ variation = variation || settings.variation;
+ if(variation) {
+ $dimmer.addClass(variation);
+ }
+ }
+ },
+
+ remove: {
+ active: function() {
+ $dimmer
+ .removeClass(className.active)
+ ;
+ },
+ dimmed: function() {
+ $dimmable.removeClass(className.dimmed);
+ },
+ disabled: function() {
+ $dimmer.removeClass(className.disabled);
+ },
+ variation: function(variation) {
+ variation = variation || settings.variation;
+ if(variation) {
+ $dimmer.removeClass(variation);
+ }
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ module.preinitialize();
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.dimmer.settings = {
+
+ name : 'Dimmer',
+ namespace : 'dimmer',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ // name to distinguish between multiple dimmers in context
+ dimmerName : false,
+
+ // whether to add a variation type
+ variation : false,
+
+ // whether to bind close events
+ closable : 'auto',
+
+ // whether to use css animations
+ useCSS : true,
+
+ // css animation to use
+ transition : 'fade',
+
+ // event to bind to
+ on : false,
+
+ // overriding opacity value
+ opacity : 'auto',
+
+ // transition durations
+ duration : {
+ show : 500,
+ hide : 500
+ },
+
+ onChange : function(){},
+ onShow : function(){},
+ onHide : function(){},
+
+ error : {
+ method : 'The method you called is not defined.'
+ },
+
+ className : {
+ active : 'active',
+ animating : 'animating',
+ dimmable : 'dimmable',
+ dimmed : 'dimmed',
+ dimmer : 'dimmer',
+ disabled : 'disabled',
+ hide : 'hide',
+ pageDimmer : 'page',
+ show : 'show'
+ },
+
+ selector: {
+ dimmer : '> .ui.dimmer',
+ content : '.ui.dimmer > .content, .ui.dimmer > .content > .center'
+ },
+
+ template: {
+ dimmer: function() {
+ return $('<div />').attr('class', 'ui dimmer');
+ }
+ }
+
+};
+
+})( jQuery, window, document );
[30/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/search.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/search.js b/semantic/src/definitions/modules/search.js
new file mode 100644
index 0000000..423ba97
--- /dev/null
+++ b/semantic/src/definitions/modules/search.js
@@ -0,0 +1,1398 @@
+/*!
+ * # Semantic UI - Search
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.search = function(parameters) {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+ $(this)
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.search.settings, parameters)
+ : $.extend({}, $.fn.search.settings),
+
+ className = settings.className,
+ metadata = settings.metadata,
+ regExp = settings.regExp,
+ fields = settings.fields,
+ selector = settings.selector,
+ error = settings.error,
+ namespace = settings.namespace,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = namespace + '-module',
+
+ $module = $(this),
+ $prompt = $module.find(selector.prompt),
+ $searchButton = $module.find(selector.searchButton),
+ $results = $module.find(selector.results),
+ $result = $module.find(selector.result),
+ $category = $module.find(selector.category),
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ disabledBubbled = false,
+
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.verbose('Initializing module');
+ module.determine.searchFields();
+ module.bind.events();
+ module.set.type();
+ module.create.results();
+ module.instantiate();
+ },
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+ destroy: function() {
+ module.verbose('Destroying instance');
+ $module
+ .off(eventNamespace)
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ refresh: function() {
+ module.debug('Refreshing selector cache');
+ $prompt = $module.find(selector.prompt);
+ $searchButton = $module.find(selector.searchButton);
+ $category = $module.find(selector.category);
+ $results = $module.find(selector.results);
+ $result = $module.find(selector.result);
+ },
+
+ refreshResults: function() {
+ $results = $module.find(selector.results);
+ $result = $module.find(selector.result);
+ },
+
+ bind: {
+ events: function() {
+ module.verbose('Binding events to search');
+ if(settings.automatic) {
+ $module
+ .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)
+ ;
+ $prompt
+ .attr('autocomplete', 'off')
+ ;
+ }
+ $module
+ // prompt
+ .on('focus' + eventNamespace, selector.prompt, module.event.focus)
+ .on('blur' + eventNamespace, selector.prompt, module.event.blur)
+ .on('keydown' + eventNamespace, selector.prompt, module.handleKeyboard)
+ // search button
+ .on('click' + eventNamespace, selector.searchButton, module.query)
+ // results
+ .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)
+ .on('mouseup' + eventNamespace, selector.results, module.event.result.mouseup)
+ .on('click' + eventNamespace, selector.result, module.event.result.click)
+ ;
+ }
+ },
+
+ determine: {
+ searchFields: function() {
+ // this makes sure $.extend does not add specified search fields to default fields
+ // this is the only setting which should not extend defaults
+ if(parameters && parameters.searchFields !== undefined) {
+ settings.searchFields = parameters.searchFields;
+ }
+ }
+ },
+
+ event: {
+ input: function() {
+ clearTimeout(module.timer);
+ module.timer = setTimeout(module.query, settings.searchDelay);
+ },
+ focus: function() {
+ module.set.focus();
+ if( module.has.minimumCharacters() ) {
+ module.query();
+ if( module.can.show() ) {
+ module.showResults();
+ }
+ }
+ },
+ blur: function(event) {
+ var
+ pageLostFocus = (document.activeElement === this),
+ callback = function() {
+ module.cancel.query();
+ module.remove.focus();
+ module.timer = setTimeout(module.hideResults, settings.hideDelay);
+ }
+ ;
+ if(pageLostFocus) {
+ return;
+ }
+ if(module.resultsClicked) {
+ module.debug('Determining if user action caused search to close');
+ $module
+ .one('click.close' + eventNamespace, selector.results, function(event) {
+ if(module.is.inMessage(event) || disabledBubbled) {
+ $prompt.focus();
+ return;
+ }
+ disabledBubbled = false;
+ if( !module.is.animating() && !module.is.hidden()) {
+ callback();
+ }
+ })
+ ;
+ }
+ else {
+ module.debug('Input blurred without user action, closing results');
+ callback();
+ }
+ },
+ result: {
+ mousedown: function() {
+ module.resultsClicked = true;
+ },
+ mouseup: function() {
+ module.resultsClicked = false;
+ },
+ click: function(event) {
+ module.debug('Search result selected');
+ var
+ $result = $(this),
+ $title = $result.find(selector.title).eq(0),
+ $link = $result.is('a[href]')
+ ? $result
+ : $result.find('a[href]').eq(0),
+ href = $link.attr('href') || false,
+ target = $link.attr('target') || false,
+ title = $title.html(),
+ // title is used for result lookup
+ value = ($title.length > 0)
+ ? $title.text()
+ : false,
+ results = module.get.results(),
+ result = $result.data(metadata.result) || module.get.result(value, results),
+ returnedValue
+ ;
+ if( $.isFunction(settings.onSelect) ) {
+ if(settings.onSelect.call(element, result, results) === false) {
+ module.debug('Custom onSelect callback cancelled default select action');
+ disabledBubbled = true;
+ return;
+ }
+ }
+ module.hideResults();
+ if(value) {
+ module.set.value(value);
+ }
+ if(href) {
+ module.verbose('Opening search link found in result', $link);
+ if(target == '_blank' || event.ctrlKey) {
+ window.open(href);
+ }
+ else {
+ window.location.href = (href);
+ }
+ }
+ }
+ }
+ },
+ handleKeyboard: function(event) {
+ var
+ // force selector refresh
+ $result = $module.find(selector.result),
+ $category = $module.find(selector.category),
+ currentIndex = $result.index( $result.filter('.' + className.active) ),
+ resultSize = $result.length,
+
+ keyCode = event.which,
+ keys = {
+ backspace : 8,
+ enter : 13,
+ escape : 27,
+ upArrow : 38,
+ downArrow : 40
+ },
+ newIndex
+ ;
+ // search shortcuts
+ if(keyCode == keys.escape) {
+ module.verbose('Escape key pressed, blurring search field');
+ module.trigger.blur();
+ }
+ if( module.is.visible() ) {
+ if(keyCode == keys.enter) {
+ module.verbose('Enter key pressed, selecting active result');
+ if( $result.filter('.' + className.active).length > 0 ) {
+ module.event.result.click.call($result.filter('.' + className.active), event);
+ event.preventDefault();
+ return false;
+ }
+ }
+ else if(keyCode == keys.upArrow) {
+ module.verbose('Up key pressed, changing active result');
+ newIndex = (currentIndex - 1 < 0)
+ ? currentIndex
+ : currentIndex - 1
+ ;
+ $category
+ .removeClass(className.active)
+ ;
+ $result
+ .removeClass(className.active)
+ .eq(newIndex)
+ .addClass(className.active)
+ .closest($category)
+ .addClass(className.active)
+ ;
+ event.preventDefault();
+ }
+ else if(keyCode == keys.downArrow) {
+ module.verbose('Down key pressed, changing active result');
+ newIndex = (currentIndex + 1 >= resultSize)
+ ? currentIndex
+ : currentIndex + 1
+ ;
+ $category
+ .removeClass(className.active)
+ ;
+ $result
+ .removeClass(className.active)
+ .eq(newIndex)
+ .addClass(className.active)
+ .closest($category)
+ .addClass(className.active)
+ ;
+ event.preventDefault();
+ }
+ }
+ else {
+ // query shortcuts
+ if(keyCode == keys.enter) {
+ module.verbose('Enter key pressed, executing query');
+ module.query();
+ module.set.buttonPressed();
+ $prompt.one('keyup', module.remove.buttonFocus);
+ }
+ }
+ },
+
+ setup: {
+ api: function(searchTerm) {
+ var
+ apiSettings = {
+ debug : settings.debug,
+ on : false,
+ cache : true,
+ action : 'search',
+ urlData : {
+ query : searchTerm
+ },
+ onSuccess : function(response) {
+ module.parse.response.call(element, response, searchTerm);
+ },
+ onAbort : function(response) {
+ },
+ onFailure : function() {
+ module.displayMessage(error.serverError);
+ },
+ onError : module.error
+ },
+ searchHTML
+ ;
+ $.extend(true, apiSettings, settings.apiSettings);
+ module.verbose('Setting up API request', apiSettings);
+ $module.api(apiSettings);
+ }
+ },
+
+ can: {
+ useAPI: function() {
+ return $.fn.api !== undefined;
+ },
+ show: function() {
+ return module.is.focused() && !module.is.visible() && !module.is.empty();
+ },
+ transition: function() {
+ return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');
+ }
+ },
+
+ is: {
+ animating: function() {
+ return $results.hasClass(className.animating);
+ },
+ hidden: function() {
+ return $results.hasClass(className.hidden);
+ },
+ inMessage: function(event) {
+ return (event.target && $(event.target).closest(selector.message).length > 0);
+ },
+ empty: function() {
+ return ($results.html() === '');
+ },
+ visible: function() {
+ return ($results.filter(':visible').length > 0);
+ },
+ focused: function() {
+ return ($prompt.filter(':focus').length > 0);
+ }
+ },
+
+ trigger: {
+ blur: function() {
+ var
+ events = document.createEvent('HTMLEvents'),
+ promptElement = $prompt[0]
+ ;
+ if(promptElement) {
+ module.verbose('Triggering native blur event');
+ events.initEvent('blur', false, false);
+ promptElement.dispatchEvent(events);
+ }
+ }
+ },
+
+ get: {
+ inputEvent: function() {
+ var
+ prompt = $prompt[0],
+ inputEvent = (prompt !== undefined && prompt.oninput !== undefined)
+ ? 'input'
+ : (prompt !== undefined && prompt.onpropertychange !== undefined)
+ ? 'propertychange'
+ : 'keyup'
+ ;
+ return inputEvent;
+ },
+ value: function() {
+ return $prompt.val();
+ },
+ results: function() {
+ var
+ results = $module.data(metadata.results)
+ ;
+ return results;
+ },
+ result: function(value, results) {
+ var
+ lookupFields = ['title', 'id'],
+ result = false
+ ;
+ value = (value !== undefined)
+ ? value
+ : module.get.value()
+ ;
+ results = (results !== undefined)
+ ? results
+ : module.get.results()
+ ;
+ if(settings.type === 'category') {
+ module.debug('Finding result that matches', value);
+ $.each(results, function(index, category) {
+ if($.isArray(category.results)) {
+ result = module.search.object(value, category.results, lookupFields)[0];
+ // don't continue searching if a result is found
+ if(result) {
+ return false;
+ }
+ }
+ });
+ }
+ else {
+ module.debug('Finding result in results object', value);
+ result = module.search.object(value, results, lookupFields)[0];
+ }
+ return result || false;
+ },
+ },
+
+ select: {
+ firstResult: function() {
+ module.verbose('Selecting first result');
+ $result.first().addClass(className.active);
+ }
+ },
+
+ set: {
+ focus: function() {
+ $module.addClass(className.focus);
+ },
+ loading: function() {
+ $module.addClass(className.loading);
+ },
+ value: function(value) {
+ module.verbose('Setting search input value', value);
+ $prompt
+ .val(value)
+ ;
+ },
+ type: function(type) {
+ type = type || settings.type;
+ if(settings.type == 'category') {
+ $module.addClass(settings.type);
+ }
+ },
+ buttonPressed: function() {
+ $searchButton.addClass(className.pressed);
+ }
+ },
+
+ remove: {
+ loading: function() {
+ $module.removeClass(className.loading);
+ },
+ focus: function() {
+ $module.removeClass(className.focus);
+ },
+ buttonPressed: function() {
+ $searchButton.removeClass(className.pressed);
+ }
+ },
+
+ query: function() {
+ var
+ searchTerm = module.get.value(),
+ cache = module.read.cache(searchTerm)
+ ;
+ if( module.has.minimumCharacters() ) {
+ if(cache) {
+ module.debug('Reading result from cache', searchTerm);
+ module.save.results(cache.results);
+ module.addResults(cache.html);
+ module.inject.id(cache.results);
+ }
+ else {
+ module.debug('Querying for', searchTerm);
+ if($.isPlainObject(settings.source) || $.isArray(settings.source)) {
+ module.search.local(searchTerm);
+ }
+ else if( module.can.useAPI() ) {
+ module.search.remote(searchTerm);
+ }
+ else {
+ module.error(error.source);
+ }
+ }
+ settings.onSearchQuery.call(element, searchTerm);
+ }
+ else {
+ module.hideResults();
+ }
+ },
+
+ search: {
+ local: function(searchTerm) {
+ var
+ results = module.search.object(searchTerm, settings.content),
+ searchHTML
+ ;
+ module.set.loading();
+ module.save.results(results);
+ module.debug('Returned local search results', results);
+
+ searchHTML = module.generateResults({
+ results: results
+ });
+ module.remove.loading();
+ module.addResults(searchHTML);
+ module.inject.id(results);
+ module.write.cache(searchTerm, {
+ html : searchHTML,
+ results : results
+ });
+ },
+ remote: function(searchTerm) {
+ if($module.api('is loading')) {
+ $module.api('abort');
+ }
+ module.setup.api(searchTerm);
+ $module
+ .api('query')
+ ;
+ },
+ object: function(searchTerm, source, searchFields) {
+ var
+ results = [],
+ fuzzyResults = [],
+ searchExp = searchTerm.toString().replace(regExp.escape, '\\$&'),
+ matchRegExp = new RegExp(regExp.beginsWith + searchExp, 'i'),
+
+ // avoid duplicates when pushing results
+ addResult = function(array, result) {
+ var
+ notResult = ($.inArray(result, results) == -1),
+ notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)
+ ;
+ if(notResult && notFuzzyResult) {
+ array.push(result);
+ }
+ }
+ ;
+ source = source || settings.source;
+ searchFields = (searchFields !== undefined)
+ ? searchFields
+ : settings.searchFields
+ ;
+
+ // search fields should be array to loop correctly
+ if(!$.isArray(searchFields)) {
+ searchFields = [searchFields];
+ }
+
+ // exit conditions if no source
+ if(source === undefined || source === false) {
+ module.error(error.source);
+ return [];
+ }
+
+ // iterate through search fields looking for matches
+ $.each(searchFields, function(index, field) {
+ $.each(source, function(label, content) {
+ var
+ fieldExists = (typeof content[field] == 'string')
+ ;
+ if(fieldExists) {
+ if( content[field].search(matchRegExp) !== -1) {
+ // content starts with value (first in results)
+ addResult(results, content);
+ }
+ else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {
+ // content fuzzy matches (last in results)
+ addResult(fuzzyResults, content);
+ }
+ }
+ });
+ });
+ return $.merge(results, fuzzyResults);
+ }
+ },
+
+ fuzzySearch: function(query, term) {
+ var
+ termLength = term.length,
+ queryLength = query.length
+ ;
+ if(typeof query !== 'string') {
+ return false;
+ }
+ query = query.toLowerCase();
+ term = term.toLowerCase();
+ if(queryLength > termLength) {
+ return false;
+ }
+ if(queryLength === termLength) {
+ return (query === term);
+ }
+ search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {
+ var
+ queryCharacter = query.charCodeAt(characterIndex)
+ ;
+ while(nextCharacterIndex < termLength) {
+ if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {
+ continue search;
+ }
+ }
+ return false;
+ }
+ return true;
+ },
+
+ parse: {
+ response: function(response, searchTerm) {
+ var
+ searchHTML = module.generateResults(response)
+ ;
+ module.verbose('Parsing server response', response);
+ if(response !== undefined) {
+ if(searchTerm !== undefined && response[fields.results] !== undefined) {
+ module.addResults(searchHTML);
+ module.inject.id(response[fields.results]);
+ module.write.cache(searchTerm, {
+ html : searchHTML,
+ results : response[fields.results]
+ });
+ module.save.results(response[fields.results]);
+ }
+ }
+ }
+ },
+
+ cancel: {
+ query: function() {
+ if( module.can.useAPI() ) {
+ $module.api('abort');
+ }
+ }
+ },
+
+ has: {
+ minimumCharacters: function() {
+ var
+ searchTerm = module.get.value(),
+ numCharacters = searchTerm.length
+ ;
+ return (numCharacters >= settings.minCharacters);
+ }
+ },
+
+ clear: {
+ cache: function(value) {
+ var
+ cache = $module.data(metadata.cache)
+ ;
+ if(!value) {
+ module.debug('Clearing cache', value);
+ $module.removeData(metadata.cache);
+ }
+ else if(value && cache && cache[value]) {
+ module.debug('Removing value from cache', value);
+ delete cache[value];
+ $module.data(metadata.cache, cache);
+ }
+ }
+ },
+
+ read: {
+ cache: function(name) {
+ var
+ cache = $module.data(metadata.cache)
+ ;
+ if(settings.cache) {
+ module.verbose('Checking cache for generated html for query', name);
+ return (typeof cache == 'object') && (cache[name] !== undefined)
+ ? cache[name]
+ : false
+ ;
+ }
+ return false;
+ }
+ },
+
+ create: {
+ id: function(resultIndex, categoryIndex) {
+ var
+ resultID = (resultIndex + 1), // not zero indexed
+ categoryID = (categoryIndex + 1),
+ firstCharCode,
+ letterID,
+ id
+ ;
+ if(categoryIndex !== undefined) {
+ // start char code for "A"
+ letterID = String.fromCharCode(97 + categoryIndex);
+ id = letterID + resultID;
+ module.verbose('Creating category result id', id);
+ }
+ else {
+ id = resultID;
+ module.verbose('Creating result id', id);
+ }
+ return id;
+ },
+ results: function() {
+ if($results.length === 0) {
+ $results = $('<div />')
+ .addClass(className.results)
+ .appendTo($module)
+ ;
+ }
+ }
+ },
+
+ inject: {
+ result: function(result, resultIndex, categoryIndex) {
+ module.verbose('Injecting result into results');
+ var
+ $selectedResult = (categoryIndex !== undefined)
+ ? $results
+ .children().eq(categoryIndex)
+ .children(selector.result).eq(resultIndex)
+ : $results
+ .children(selector.result).eq(resultIndex)
+ ;
+ module.verbose('Injecting results metadata', $selectedResult);
+ $selectedResult
+ .data(metadata.result, result)
+ ;
+ },
+ id: function(results) {
+ module.debug('Injecting unique ids into results');
+ var
+ // since results may be object, we must use counters
+ categoryIndex = 0,
+ resultIndex = 0
+ ;
+ if(settings.type === 'category') {
+ // iterate through each category result
+ $.each(results, function(index, category) {
+ resultIndex = 0;
+ $.each(category.results, function(index, value) {
+ var
+ result = category.results[index]
+ ;
+ if(result.id === undefined) {
+ result.id = module.create.id(resultIndex, categoryIndex);
+ }
+ module.inject.result(result, resultIndex, categoryIndex);
+ resultIndex++;
+ });
+ categoryIndex++;
+ });
+ }
+ else {
+ // top level
+ $.each(results, function(index, value) {
+ var
+ result = results[index]
+ ;
+ if(result.id === undefined) {
+ result.id = module.create.id(resultIndex);
+ }
+ module.inject.result(result, resultIndex);
+ resultIndex++;
+ });
+ }
+ return results;
+ }
+ },
+
+ save: {
+ results: function(results) {
+ module.verbose('Saving current search results to metadata', results);
+ $module.data(metadata.results, results);
+ }
+ },
+
+ write: {
+ cache: function(name, value) {
+ var
+ cache = ($module.data(metadata.cache) !== undefined)
+ ? $module.data(metadata.cache)
+ : {}
+ ;
+ if(settings.cache) {
+ module.verbose('Writing generated html to cache', name, value);
+ cache[name] = value;
+ $module
+ .data(metadata.cache, cache)
+ ;
+ }
+ }
+ },
+
+ addResults: function(html) {
+ if( $.isFunction(settings.onResultsAdd) ) {
+ if( settings.onResultsAdd.call($results, html) === false ) {
+ module.debug('onResultsAdd callback cancelled default action');
+ return false;
+ }
+ }
+ if(html) {
+ $results
+ .html(html)
+ ;
+ module.refreshResults();
+ if(settings.selectFirstResult) {
+ module.select.firstResult();
+ }
+ module.showResults();
+ }
+ else {
+ module.hideResults();
+ }
+ },
+
+ showResults: function() {
+ if(!module.is.visible()) {
+ if( module.can.transition() ) {
+ module.debug('Showing results with css animations');
+ $results
+ .transition({
+ animation : settings.transition + ' in',
+ debug : settings.debug,
+ verbose : settings.verbose,
+ duration : settings.duration,
+ queue : true
+ })
+ ;
+ }
+ else {
+ module.debug('Showing results with javascript');
+ $results
+ .stop()
+ .fadeIn(settings.duration, settings.easing)
+ ;
+ }
+ settings.onResultsOpen.call($results);
+ }
+ },
+ hideResults: function() {
+ if( module.is.visible() ) {
+ if( module.can.transition() ) {
+ module.debug('Hiding results with css animations');
+ $results
+ .transition({
+ animation : settings.transition + ' out',
+ debug : settings.debug,
+ verbose : settings.verbose,
+ duration : settings.duration,
+ queue : true
+ })
+ ;
+ }
+ else {
+ module.debug('Hiding results with javascript');
+ $results
+ .stop()
+ .fadeOut(settings.duration, settings.easing)
+ ;
+ }
+ settings.onResultsClose.call($results);
+ }
+ },
+
+ generateResults: function(response) {
+ module.debug('Generating html from response', response);
+ var
+ template = settings.templates[settings.type],
+ isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),
+ isProperArray = ($.isArray(response[fields.results]) && response[fields.results].length > 0),
+ html = ''
+ ;
+ if(isProperObject || isProperArray ) {
+ if(settings.maxResults > 0) {
+ if(isProperObject) {
+ if(settings.type == 'standard') {
+ module.error(error.maxResults);
+ }
+ }
+ else {
+ response[fields.results] = response[fields.results].slice(0, settings.maxResults);
+ }
+ }
+ if($.isFunction(template)) {
+ html = template(response, fields);
+ }
+ else {
+ module.error(error.noTemplate, false);
+ }
+ }
+ else if(settings.showNoResults) {
+ html = module.displayMessage(error.noResults, 'empty');
+ }
+ settings.onResults.call(element, response);
+ return html;
+ },
+
+ displayMessage: function(text, type) {
+ type = type || 'standard';
+ module.debug('Displaying message', text, type);
+ module.addResults( settings.templates.message(text, type) );
+ return settings.templates.message(text, type);
+ },
+
+ setting: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ settings[name] = value;
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.search.settings = {
+
+ name : 'Search',
+ namespace : 'search',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ // template to use (specified in settings.templates)
+ type : 'standard',
+
+ // minimum characters required to search
+ minCharacters : 1,
+
+ // whether to select first result after searching automatically
+ selectFirstResult : false,
+
+ // API config
+ apiSettings : false,
+
+ // object to search
+ source : false,
+
+ // fields to search
+ searchFields : [
+ 'title',
+ 'description'
+ ],
+
+ // field to display in standard results template
+ displayField : '',
+
+ // whether to include fuzzy results in local search
+ searchFullText : true,
+
+ // whether to add events to prompt automatically
+ automatic : true,
+
+ // delay before hiding menu after blur
+ hideDelay : 0,
+
+ // delay before searching
+ searchDelay : 200,
+
+ // maximum results returned from local
+ maxResults : 7,
+
+ // whether to store lookups in local cache
+ cache : true,
+
+ // whether no results errors should be shown
+ showNoResults : true,
+
+ // transition settings
+ transition : 'scale',
+ duration : 200,
+ easing : 'easeOutExpo',
+
+ // callbacks
+ onSelect : false,
+ onResultsAdd : false,
+
+ onSearchQuery : function(query){},
+ onResults : function(response){},
+
+ onResultsOpen : function(){},
+ onResultsClose : function(){},
+
+ className: {
+ animating : 'animating',
+ active : 'active',
+ empty : 'empty',
+ focus : 'focus',
+ hidden : 'hidden',
+ loading : 'loading',
+ results : 'results',
+ pressed : 'down'
+ },
+
+ error : {
+ source : 'Cannot search. No source used, and Semantic API module was not included',
+ noResults : 'Your search returned no results',
+ logging : 'Error in debug logging, exiting.',
+ noEndpoint : 'No search endpoint was specified',
+ noTemplate : 'A valid template name was not specified.',
+ serverError : 'There was an issue querying the server.',
+ maxResults : 'Results must be an array to use maxResults setting',
+ method : 'The method you called is not defined.'
+ },
+
+ metadata: {
+ cache : 'cache',
+ results : 'results',
+ result : 'result'
+ },
+
+ regExp: {
+ escape : /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,
+ beginsWith : '(?:\s|^)'
+ },
+
+ // maps api response attributes to internal representation
+ fields: {
+ categories : 'results', // array of categories (category view)
+ categoryName : 'name', // name of category (category view)
+ categoryResults : 'results', // array of results (category view)
+ description : 'description', // result description
+ image : 'image', // result image
+ price : 'price', // result price
+ results : 'results', // array of results (standard)
+ title : 'title', // result title
+ url : 'url', // result url
+ action : 'action', // "view more" object name
+ actionText : 'text', // "view more" text
+ actionURL : 'url' // "view more" url
+ },
+
+ selector : {
+ prompt : '.prompt',
+ searchButton : '.search.button',
+ results : '.results',
+ message : '.results > .message',
+ category : '.category',
+ result : '.result',
+ title : '.title, .name'
+ },
+
+ templates: {
+ escape: function(string) {
+ var
+ badChars = /[&<>"'`]/g,
+ shouldEscape = /[&<>"'`]/,
+ escape = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'",
+ "`": "`"
+ },
+ escapedChar = function(chr) {
+ return escape[chr];
+ }
+ ;
+ if(shouldEscape.test(string)) {
+ return string.replace(badChars, escapedChar);
+ }
+ return string;
+ },
+ message: function(message, type) {
+ var
+ html = ''
+ ;
+ if(message !== undefined && type !== undefined) {
+ html += ''
+ + '<div class="message ' + type + '">'
+ ;
+ // message type
+ if(type == 'empty') {
+ html += ''
+ + '<div class="header">No Results</div class="header">'
+ + '<div class="description">' + message + '</div class="description">'
+ ;
+ }
+ else {
+ html += ' <div class="description">' + message + '</div>';
+ }
+ html += '</div>';
+ }
+ return html;
+ },
+ category: function(response, fields) {
+ var
+ html = '',
+ escape = $.fn.search.settings.templates.escape
+ ;
+ if(response[fields.categoryResults] !== undefined) {
+
+ // each category
+ $.each(response[fields.categoryResults], function(index, category) {
+ if(category[fields.results] !== undefined && category.results.length > 0) {
+
+ html += '<div class="category">';
+
+ if(category[fields.categoryName] !== undefined) {
+ html += '<div class="name">' + category[fields.categoryName] + '</div>';
+ }
+
+ // each item inside category
+ $.each(category.results, function(index, result) {
+ if(result[fields.url]) {
+ html += '<a class="result" href="' + result[fields.url] + '">';
+ }
+ else {
+ html += '<a class="result">';
+ }
+ if(result[fields.image] !== undefined) {
+ html += ''
+ + '<div class="image">'
+ + ' <img src="' + result[fields.image] + '">'
+ + '</div>'
+ ;
+ }
+ html += '<div class="content">';
+ if(result[fields.price] !== undefined) {
+ html += '<div class="price">' + result[fields.price] + '</div>';
+ }
+ if(result[fields.title] !== undefined) {
+ html += '<div class="title">' + result[fields.title] + '</div>';
+ }
+ if(result[fields.description] !== undefined) {
+ html += '<div class="description">' + result[fields.description] + '</div>';
+ }
+ html += ''
+ + '</div>'
+ ;
+ html += '</a>';
+ });
+ html += ''
+ + '</div>'
+ ;
+ }
+ });
+ if(response[fields.action]) {
+ html += ''
+ + '<a href="' + response[fields.action][fields.actionURL] + '" class="action">'
+ + response[fields.action][fields.actionText]
+ + '</a>';
+ }
+ return html;
+ }
+ return false;
+ },
+ standard: function(response, fields) {
+ var
+ html = ''
+ ;
+ if(response[fields.results] !== undefined) {
+
+ // each result
+ $.each(response[fields.results], function(index, result) {
+ if(result[fields.url]) {
+ html += '<a class="result" href="' + result[fields.url] + '">';
+ }
+ else {
+ html += '<a class="result">';
+ }
+ if(result[fields.image] !== undefined) {
+ html += ''
+ + '<div class="image">'
+ + ' <img src="' + result[fields.image] + '">'
+ + '</div>'
+ ;
+ }
+ html += '<div class="content">';
+ if(result[fields.price] !== undefined) {
+ html += '<div class="price">' + result[fields.price] + '</div>';
+ }
+ if(result[fields.title] !== undefined) {
+ html += '<div class="title">' + result[fields.title] + '</div>';
+ }
+ if(result[fields.description] !== undefined) {
+ html += '<div class="description">' + result[fields.description] + '</div>';
+ }
+ html += ''
+ + '</div>'
+ ;
+ html += '</a>';
+ });
+
+ if(response[fields.action]) {
+ html += ''
+ + '<a href="' + response[fields.action][fields.actionURL] + '" class="action">'
+ + response[fields.action][fields.actionText]
+ + '</a>';
+ }
+ return html;
+ }
+ return false;
+ }
+ }
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/search.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/search.less b/semantic/src/definitions/modules/search.less
new file mode 100755
index 0000000..4d28567
--- /dev/null
+++ b/semantic/src/definitions/modules/search.less
@@ -0,0 +1,417 @@
+/*!
+ * # Semantic UI - Search
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'search';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Search
+*******************************/
+
+.ui.search {
+ position: relative;
+}
+
+.ui.search > .prompt {
+ margin: 0em;
+ outline: none;
+ -webkit-appearance: none;
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+
+ text-shadow: none;
+ font-style: normal;
+ font-weight: normal;
+
+ line-height: @promptLineHeight;
+ padding: @promptPadding;
+ font-size: @promptFontSize;
+
+ background: @promptBackground;
+ border: @promptBorder;
+ color: @promptColor;
+ box-shadow: @promptBoxShadow;
+ transition: @promptTransition;
+}
+
+.ui.search .prompt {
+ border-radius: @promptBorderRadius;
+}
+
+
+/*--------------
+ Icon
+---------------*/
+
+.ui.search .prompt ~ .search.icon {
+ cursor: pointer;
+}
+
+/*--------------
+ Results
+---------------*/
+
+.ui.search > .results {
+ display: none;
+
+ position: absolute;
+ top: 100%;
+ left: 0%;
+ transform-origin: center top;
+ white-space: normal;
+
+ background: @resultsBackground;
+
+ margin-top: @resultsDistance;
+ width: @resultsWidth;
+
+ border-radius: @resultsBorderRadius;
+ box-shadow: @resultsBoxShadow;
+ border: @resultsBorder;
+ z-index: @resultsZIndex;
+}
+.ui.search > .results > :first-child {
+ border-radius: @resultsBorderRadius @resultsBorderRadius 0em 0em;
+}
+.ui.search > .results > :last-child {
+ border-radius: 0em 0em @resultsBorderRadius @resultsBorderRadius;
+}
+
+/*--------------
+ Result
+---------------*/
+
+.ui.search > .results .result {
+ cursor: pointer;
+ display: block;
+ overflow: hidden;
+ font-size: @resultFontSize;
+ padding: @resultPadding;
+ color: @resultTextColor;
+ line-height: @resultLineHeight;
+ border-bottom: @resultDivider;
+}
+.ui.search > .results .result:last-child {
+ border-bottom: @resultLastDivider !important;
+}
+
+/* Image */
+.ui.search > .results .result .image {
+ float: @resultImageFloat;
+ overflow: hidden;
+ background: @resultImageBackground;
+ width: @resultImageWidth;
+ height: @resultImageHeight;
+ border-radius: @resultImageBorderRadius;
+}
+.ui.search > .results .result .image img {
+ display: block;
+ width: auto;
+ height: 100%;
+}
+
+/*--------------
+ Info
+---------------*/
+
+.ui.search > .results .result .image + .content {
+ margin: @resultImageMargin;
+}
+
+.ui.search > .results .result .title {
+ margin: @resultTitleMargin;
+ font-family: @resultTitleFont;
+ font-weight: @resultTitleFontWeight;
+ font-size: @resultTitleFontSize;
+ color: @resultTitleColor;
+}
+.ui.search > .results .result .description {
+ margin-top: @resultDescriptionDistance;
+ font-size: @resultDescriptionFontSize;
+ color: @resultDescriptionColor;
+}
+.ui.search > .results .result .price {
+ float: @resultPriceFloat;
+ color: @resultPriceColor;
+}
+
+/*--------------
+ Message
+---------------*/
+
+.ui.search > .results > .message {
+ padding: @messageVerticalPadding @messageHorizontalPadding;
+}
+.ui.search > .results > .message .header {
+ font-family: @headerFont;
+ font-size: @messageHeaderFontSize;
+ font-weight: @messageHeaderFontWeight;
+ color: @messageHeaderColor;
+}
+.ui.search > .results > .message .description {
+ margin-top: @messageDescriptionDistance;
+ font-size: @messageDescriptionFontSize;
+ color: @messageDescriptionColor;
+}
+
+/* View All Results */
+.ui.search > .results > .action {
+ display: block;
+ border-top: @actionBorder;
+ background: @actionBackground;
+ padding: @actionPadding;
+ color: @actionColor;
+ font-weight: @actionFontWeight;
+ text-align: @actionAlign;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------------
+ Focus
+---------------------*/
+
+.ui.search > .prompt:focus {
+ border-color: @promptFocusBorderColor;
+ background: @promptFocusBackground;
+ color: @promptFocusColor;
+}
+
+/*--------------------
+ Loading
+---------------------*/
+
+.ui.loading.search .input > i.icon:before {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ border-radius: @circularRadius;
+ border: @loaderLineWidth solid @loaderFillColor;
+}
+.ui.loading.search .input > i.icon:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ animation: button-spin @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @loaderLineColor transparent transparent;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+
+ box-shadow: 0px 0px 0px 1px transparent;
+}
+
+
+/*--------------
+ Hover
+---------------*/
+
+.ui.search > .results .result:hover,
+.ui.category.search > .results .category .result:hover {
+ background: @resultHoverBackground;
+}
+.ui.search .action:hover {
+ background: @actionHoverBackground;
+}
+
+/*--------------
+ Active
+---------------*/
+
+.ui.category.search > .results .category.active {
+ background: @categoryActiveBackground;
+}
+.ui.category.search > .results .category.active > .name {
+ color: @categoryNameActiveColor;
+}
+
+.ui.search > .results .result.active,
+.ui.category.search > .results .category .result.active {
+ position: relative;
+ border-left-color: @resultActiveBorderLeft;
+ background: @resultActiveBackground;
+ box-shadow: @resultActiveBoxShadow;
+}
+.ui.search > .results .result.active .title {
+ color: @resultActiveTitleColor;
+}
+.ui.search > .results .result.active .description {
+ color: @resultActiveDescriptionColor;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Selection
+---------------*/
+
+.ui.search.selection .prompt {
+ border-radius: @selectionPromptBorderRadius;
+}
+
+/* Remove input */
+.ui.search.selection > .icon.input > .remove.icon {
+ pointer-events: none;
+ position: absolute;
+ left: auto;
+ opacity: 0;
+ color: @selectionCloseIconColor;
+ top: @selectionCloseTop;
+ right: @selectionCloseRight;
+ transition: @selectionCloseTransition;
+}
+.ui.search.selection > .icon.input > .active.remove.icon {
+ cursor: pointer;
+ opacity: @selectionCloseIconOpacity;
+ pointer-events: auto;
+}
+.ui.search.selection > .icon.input:not([class*="left icon"]) > .icon ~ .remove.icon {
+ right: @selectionCloseIconInputRight;
+}
+.ui.search.selection > .icon.input > .remove.icon:hover {
+ opacity: @selectionCloseIconHoverOpacity;
+ color: @selectionCloseIconHoverColor;
+}
+
+
+/*--------------
+ Category
+---------------*/
+
+.ui.category.search .results {
+ width: @categoryResultsWidth;
+}
+
+/* Category */
+.ui.category.search > .results .category {
+ background: @categoryBackground;
+ box-shadow: @categoryBoxShadow;
+ border-bottom: @categoryDivider;
+ transition: @categoryTransition;
+}
+
+/* Last Category */
+.ui.category.search > .results .category:last-child {
+ border-bottom: none;
+}
+
+/* First / Last */
+.ui.category.search > .results .category:first-child .name + .result {
+ border-radius: 0em @resultsBorderRadius 0em 0em;
+}
+.ui.category.search > .results .category:last-child .result:last-child {
+ border-radius: 0em 0em @resultsBorderRadius 0em;
+}
+
+/* Category Result */
+.ui.category.search > .results .category .result {
+ background: @categoryResultBackground;
+ margin-left: @categoryNameWidth;
+ border-left: @categoryResultLeftBorder;
+ border-bottom: @categoryResultDivider;
+ transition: @categoryResultTransition;
+ padding: @categoryResultPadding;
+}
+.ui.category.search > .results .category:last-child .result:last-child {
+ border-bottom: @categoryResultLastDivider;
+}
+
+/* Category Result Name */
+.ui.category.search > .results .category > .name {
+ width: @categoryNameWidth;
+ background: @categoryNameBackground;
+ font-family: @categoryNameFont;
+ font-size: @categoryNameFontSize;
+ float: @categoryNameFontSize;
+ float: @categoryNameFloat;
+ padding: @categoryNamePadding;
+ font-weight: @categoryNameFontWeight;
+ color: @categoryNameColor;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*-------------------
+ Left / Right
+--------------------*/
+
+.ui[class*="left aligned"].search > .results {
+ right: auto;
+ left: 0%;
+}
+.ui[class*="right aligned"].search > .results {
+ right: 0%;
+ left: auto;
+}
+
+/*--------------
+ Fluid
+---------------*/
+
+.ui.fluid.search .results {
+ width: 100%;
+}
+
+
+/*--------------
+ Sizes
+---------------*/
+
+.ui.mini.search {
+ font-size: @relativeMini;
+}
+.ui.small.search {
+ font-size: @relativeSmall;
+}
+.ui.search {
+ font-size: @relativeMedium;
+}
+.ui.large.search {
+ font-size: @relativeLarge;
+}
+.ui.big.search {
+ font-size: @relativeBig;
+}
+.ui.huge.search {
+ font-size: @relativeHuge;
+}
+.ui.massive.search {
+ font-size: @relativeMassive;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/shape.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/shape.js b/semantic/src/definitions/modules/shape.js
new file mode 100644
index 0000000..d86791a
--- /dev/null
+++ b/semantic/src/definitions/modules/shape.js
@@ -0,0 +1,909 @@
+/*!
+ * # Semantic UI - Shape
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.shape = function(parameters) {
+ var
+ $allModules = $(this),
+ $body = $('body'),
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); },
+
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ moduleSelector = $allModules.selector || '',
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.shape.settings, parameters)
+ : $.extend({}, $.fn.shape.settings),
+
+ // internal aliases
+ namespace = settings.namespace,
+ selector = settings.selector,
+ error = settings.error,
+ className = settings.className,
+
+ // define namespaces for modules
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ // selector cache
+ $module = $(this),
+ $sides = $module.find(selector.sides),
+ $side = $module.find(selector.side),
+
+ // private variables
+ nextIndex = false,
+ $activeSide,
+ $nextSide,
+
+ // standard module
+ element = this,
+ instance = $module.data(moduleNamespace),
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.verbose('Initializing module for', element);
+ module.set.defaultSide();
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, instance)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module for', element);
+ $module
+ .removeData(moduleNamespace)
+ .off(eventNamespace)
+ ;
+ },
+
+ refresh: function() {
+ module.verbose('Refreshing selector cache for', element);
+ $module = $(element);
+ $sides = $(this).find(selector.shape);
+ $side = $(this).find(selector.side);
+ },
+
+ repaint: function() {
+ module.verbose('Forcing repaint event');
+ var
+ shape = $sides[0] || document.createElement('div'),
+ fakeAssignment = shape.offsetWidth
+ ;
+ },
+
+ animate: function(propertyObject, callback) {
+ module.verbose('Animating box with properties', propertyObject);
+ callback = callback || function(event) {
+ module.verbose('Executing animation callback');
+ if(event !== undefined) {
+ event.stopPropagation();
+ }
+ module.reset();
+ module.set.active();
+ };
+ settings.beforeChange.call($nextSide[0]);
+ if(module.get.transitionEvent()) {
+ module.verbose('Starting CSS animation');
+ $module
+ .addClass(className.animating)
+ ;
+ $sides
+ .css(propertyObject)
+ .one(module.get.transitionEvent(), callback)
+ ;
+ module.set.duration(settings.duration);
+ requestAnimationFrame(function() {
+ $module
+ .addClass(className.animating)
+ ;
+ $activeSide
+ .addClass(className.hidden)
+ ;
+ });
+ }
+ else {
+ callback();
+ }
+ },
+
+ queue: function(method) {
+ module.debug('Queueing animation of', method);
+ $sides
+ .one(module.get.transitionEvent(), function() {
+ module.debug('Executing queued animation');
+ setTimeout(function(){
+ $module.shape(method);
+ }, 0);
+ })
+ ;
+ },
+
+ reset: function() {
+ module.verbose('Animating states reset');
+ $module
+ .removeClass(className.animating)
+ .attr('style', '')
+ .removeAttr('style')
+ ;
+ // removeAttr style does not consistently work in safari
+ $sides
+ .attr('style', '')
+ .removeAttr('style')
+ ;
+ $side
+ .attr('style', '')
+ .removeAttr('style')
+ .removeClass(className.hidden)
+ ;
+ $nextSide
+ .removeClass(className.animating)
+ .attr('style', '')
+ .removeAttr('style')
+ ;
+ },
+
+ is: {
+ complete: function() {
+ return ($side.filter('.' + className.active)[0] == $nextSide[0]);
+ },
+ animating: function() {
+ return $module.hasClass(className.animating);
+ }
+ },
+
+ set: {
+
+ defaultSide: function() {
+ $activeSide = $module.find('.' + settings.className.active);
+ $nextSide = ( $activeSide.next(selector.side).length > 0 )
+ ? $activeSide.next(selector.side)
+ : $module.find(selector.side).first()
+ ;
+ nextIndex = false;
+ module.verbose('Active side set to', $activeSide);
+ module.verbose('Next side set to', $nextSide);
+ },
+
+ duration: function(duration) {
+ duration = duration || settings.duration;
+ duration = (typeof duration == 'number')
+ ? duration + 'ms'
+ : duration
+ ;
+ module.verbose('Setting animation duration', duration);
+ if(settings.duration || settings.duration === 0) {
+ $sides.add($side)
+ .css({
+ '-webkit-transition-duration': duration,
+ '-moz-transition-duration': duration,
+ '-ms-transition-duration': duration,
+ '-o-transition-duration': duration,
+ 'transition-duration': duration
+ })
+ ;
+ }
+ },
+
+ currentStageSize: function() {
+ var
+ $activeSide = $module.find('.' + settings.className.active),
+ width = $activeSide.outerWidth(true),
+ height = $activeSide.outerHeight(true)
+ ;
+ $module
+ .css({
+ width: width,
+ height: height
+ })
+ ;
+ },
+
+ stageSize: function() {
+ var
+ $clone = $module.clone().addClass(className.loading),
+ $activeSide = $clone.find('.' + settings.className.active),
+ newWidth = (settings.width == 'next')
+ ? $nextSide.outerWidth(true)
+ : (settings.width == 'initial')
+ ? $module.width()
+ : settings.width,
+ newHeight = (settings.height == 'next')
+ ? $nextSide.outerHeight(true)
+ : (settings.height == 'initial')
+ ? $module.height()
+ : settings.height,
+ $nextSide = (nextIndex)
+ ? $clone.find(selector.side).eq(nextIndex)
+ : ( $activeSide.next(selector.side).length > 0 )
+ ? $activeSide.next(selector.side)
+ : $clone.find(selector.side).first()
+ ;
+ $activeSide.removeClass(className.active);
+ $nextSide.addClass(className.active);
+ $clone.insertAfter($module);
+ $clone.remove();
+ if(settings.width != 'auto') {
+ $module.css('width', newWidth + settings.jitter);
+ module.verbose('Specifying width during animation', newWidth);
+ }
+ if(settings.height != 'auto') {
+ $module.css('height', newHeight + settings.jitter);
+ module.verbose('Specifying height during animation', newHeight);
+ }
+ },
+
+ nextSide: function(selector) {
+ nextIndex = selector;
+ $nextSide = $side.filter(selector);
+ nextIndex = $side.index($nextSide);
+ if($nextSide.length === 0) {
+ module.set.defaultSide();
+ module.error(error.side);
+ }
+ module.verbose('Next side manually set to', $nextSide);
+ },
+
+ active: function() {
+ module.verbose('Setting new side to active', $nextSide);
+ $side
+ .removeClass(className.active)
+ ;
+ $nextSide
+ .addClass(className.active)
+ ;
+ settings.onChange.call($nextSide[0]);
+ module.set.defaultSide();
+ }
+ },
+
+ flip: {
+
+ up: function() {
+ if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
+ module.debug('Side already visible', $nextSide);
+ return;
+ }
+ if( !module.is.animating()) {
+ module.debug('Flipping up', $nextSide);
+ module.set.stageSize();
+ module.stage.above();
+ module.animate( module.get.transform.up() );
+ }
+ else {
+ module.queue('flip up');
+ }
+ },
+
+ down: function() {
+ if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
+ module.debug('Side already visible', $nextSide);
+ return;
+ }
+ if( !module.is.animating()) {
+ module.debug('Flipping down', $nextSide);
+ module.set.stageSize();
+ module.stage.below();
+ module.animate( module.get.transform.down() );
+ }
+ else {
+ module.queue('flip down');
+ }
+ },
+
+ left: function() {
+ if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
+ module.debug('Side already visible', $nextSide);
+ return;
+ }
+ if( !module.is.animating()) {
+ module.debug('Flipping left', $nextSide);
+ module.set.stageSize();
+ module.stage.left();
+ module.animate(module.get.transform.left() );
+ }
+ else {
+ module.queue('flip left');
+ }
+ },
+
+ right: function() {
+ if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
+ module.debug('Side already visible', $nextSide);
+ return;
+ }
+ if( !module.is.animating()) {
+ module.debug('Flipping right', $nextSide);
+ module.set.stageSize();
+ module.stage.right();
+ module.animate(module.get.transform.right() );
+ }
+ else {
+ module.queue('flip right');
+ }
+ },
+
+ over: function() {
+ if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
+ module.debug('Side already visible', $nextSide);
+ return;
+ }
+ if( !module.is.animating()) {
+ module.debug('Flipping over', $nextSide);
+ module.set.stageSize();
+ module.stage.behind();
+ module.animate(module.get.transform.over() );
+ }
+ else {
+ module.queue('flip over');
+ }
+ },
+
+ back: function() {
+ if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
+ module.debug('Side already visible', $nextSide);
+ return;
+ }
+ if( !module.is.animating()) {
+ module.debug('Flipping back', $nextSide);
+ module.set.stageSize();
+ module.stage.behind();
+ module.animate(module.get.transform.back() );
+ }
+ else {
+ module.queue('flip back');
+ }
+ }
+
+ },
+
+ get: {
+
+ transform: {
+ up: function() {
+ var
+ translate = {
+ y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
+ z: -($activeSide.outerHeight(true) / 2)
+ }
+ ;
+ return {
+ transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'
+ };
+ },
+
+ down: function() {
+ var
+ translate = {
+ y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
+ z: -($activeSide.outerHeight(true) / 2)
+ }
+ ;
+ return {
+ transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'
+ };
+ },
+
+ left: function() {
+ var
+ translate = {
+ x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),
+ z : -($activeSide.outerWidth(true) / 2)
+ }
+ ;
+ return {
+ transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'
+ };
+ },
+
+ right: function() {
+ var
+ translate = {
+ x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),
+ z : -($activeSide.outerWidth(true) / 2)
+ }
+ ;
+ return {
+ transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'
+ };
+ },
+
+ over: function() {
+ var
+ translate = {
+ x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)
+ }
+ ;
+ return {
+ transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'
+ };
+ },
+
+ back: function() {
+ var
+ translate = {
+ x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)
+ }
+ ;
+ return {
+ transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'
+ };
+ }
+ },
+
+ transitionEvent: function() {
+ var
+ element = document.createElement('element'),
+ transitions = {
+ 'transition' :'transitionend',
+ 'OTransition' :'oTransitionEnd',
+ 'MozTransition' :'transitionend',
+ 'WebkitTransition' :'webkitTransitionEnd'
+ },
+ transition
+ ;
+ for(transition in transitions){
+ if( element.style[transition] !== undefined ){
+ return transitions[transition];
+ }
+ }
+ },
+
+ nextSide: function() {
+ return ( $activeSide.next(selector.side).length > 0 )
+ ? $activeSide.next(selector.side)
+ : $module.find(selector.side).first()
+ ;
+ }
+
+ },
+
+ stage: {
+
+ above: function() {
+ var
+ box = {
+ origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
+ depth : {
+ active : ($nextSide.outerHeight(true) / 2),
+ next : ($activeSide.outerHeight(true) / 2)
+ }
+ }
+ ;
+ module.verbose('Setting the initial animation position as above', $nextSide, box);
+ $sides
+ .css({
+ 'transform' : 'translateZ(-' + box.depth.active + 'px)'
+ })
+ ;
+ $activeSide
+ .css({
+ 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
+ })
+ ;
+ $nextSide
+ .addClass(className.animating)
+ .css({
+ 'top' : box.origin + 'px',
+ 'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'
+ })
+ ;
+ },
+
+ below: function() {
+ var
+ box = {
+ origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
+ depth : {
+ active : ($nextSide.outerHeight(true) / 2),
+ next : ($activeSide.outerHeight(true) / 2)
+ }
+ }
+ ;
+ module.verbose('Setting the initial animation position as below', $nextSide, box);
+ $sides
+ .css({
+ 'transform' : 'translateZ(-' + box.depth.active + 'px)'
+ })
+ ;
+ $activeSide
+ .css({
+ 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
+ })
+ ;
+ $nextSide
+ .addClass(className.animating)
+ .css({
+ 'top' : box.origin + 'px',
+ 'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'
+ })
+ ;
+ },
+
+ left: function() {
+ var
+ height = {
+ active : $activeSide.outerWidth(true),
+ next : $nextSide.outerWidth(true)
+ },
+ box = {
+ origin : ( ( height.active - height.next ) / 2),
+ depth : {
+ active : (height.next / 2),
+ next : (height.active / 2)
+ }
+ }
+ ;
+ module.verbose('Setting the initial animation position as left', $nextSide, box);
+ $sides
+ .css({
+ 'transform' : 'translateZ(-' + box.depth.active + 'px)'
+ })
+ ;
+ $activeSide
+ .css({
+ 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
+ })
+ ;
+ $nextSide
+ .addClass(className.animating)
+ .css({
+ 'left' : box.origin + 'px',
+ 'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'
+ })
+ ;
+ },
+
+ right: function() {
+ var
+ height = {
+ active : $activeSide.outerWidth(true),
+ next : $nextSide.outerWidth(true)
+ },
+ box = {
+ origin : ( ( height.active - height.next ) / 2),
+ depth : {
+ active : (height.next / 2),
+ next : (height.active / 2)
+ }
+ }
+ ;
+ module.verbose('Setting the initial animation position as left', $nextSide, box);
+ $sides
+ .css({
+ 'transform' : 'translateZ(-' + box.depth.active + 'px)'
+ })
+ ;
+ $activeSide
+ .css({
+ 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
+ })
+ ;
+ $nextSide
+ .addClass(className.animating)
+ .css({
+ 'left' : box.origin + 'px',
+ 'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'
+ })
+ ;
+ },
+
+ behind: function() {
+ var
+ height = {
+ active : $activeSide.outerWidth(true),
+ next : $nextSide.outerWidth(true)
+ },
+ box = {
+ origin : ( ( height.active - height.next ) / 2),
+ depth : {
+ active : (height.next / 2),
+ next : (height.active / 2)
+ }
+ }
+ ;
+ module.verbose('Setting the initial animation position as behind', $nextSide, box);
+ $activeSide
+ .css({
+ 'transform' : 'rotateY(0deg)'
+ })
+ ;
+ $nextSide
+ .addClass(className.animating)
+ .css({
+ 'left' : box.origin + 'px',
+ 'transform' : 'rotateY(-180deg)'
+ })
+ ;
+ }
+ },
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.shape.settings = {
+
+ // module info
+ name : 'Shape',
+
+ // hide all debug content
+ silent : false,
+
+ // debug content outputted to console
+ debug : false,
+
+ // verbose debug output
+ verbose : false,
+
+ // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)
+ jitter : 0,
+
+ // performance data output
+ performance: true,
+
+ // event namespace
+ namespace : 'shape',
+
+ // width during animation, can be set to 'auto', initial', 'next' or pixel amount
+ width: 'initial',
+
+ // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount
+ height: 'initial',
+
+ // callback occurs on side change
+ beforeChange : function() {},
+ onChange : function() {},
+
+ // allow animation to same side
+ allowRepeats: false,
+
+ // animation duration
+ duration : false,
+
+ // possible errors
+ error: {
+ side : 'You tried to switch to a side that does not exist.',
+ method : 'The method you called is not defined'
+ },
+
+ // classnames used
+ className : {
+ animating : 'animating',
+ hidden : 'hidden',
+ loading : 'loading',
+ active : 'active'
+ },
+
+ // selectors used
+ selector : {
+ sides : '.sides',
+ side : '.side'
+ }
+
+};
+
+
+})( jQuery, window, document );
[39/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/button.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/button.less b/semantic/src/definitions/elements/button.less
new file mode 100755
index 0000000..d9b8e28
--- /dev/null
+++ b/semantic/src/definitions/elements/button.less
@@ -0,0 +1,3432 @@
+/*!
+ * # Semantic UI - Button
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'button';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Button
+*******************************/
+
+.ui.button {
+ cursor: pointer;
+ display: inline-block;
+
+ min-height: 1em;
+
+ outline: none;
+ border: none;
+ vertical-align: @verticalAlign;
+ background: @background;
+ color: @textColor;
+
+ font-family: @fontFamily;
+
+ margin: 0em @horizontalMargin @verticalMargin 0em;
+ padding: @verticalPadding @horizontalPadding (@verticalPadding + @shadowOffset);
+
+ text-transform: @textTransform;
+ text-shadow: @textShadow;
+ font-weight: @fontWeight;
+ line-height: @lineHeight;
+ font-style: normal;
+ text-align: center;
+ text-decoration: none;
+
+ border-radius: @borderRadius;
+ box-shadow: @boxShadow;
+
+ user-select: none;
+ transition: @transition;
+ will-change: @willChange;
+
+ -webkit-tap-highlight-color: @tapColor;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Hover
+---------------*/
+
+.ui.button:hover {
+ background-color: @hoverBackgroundColor;
+ background-image: @hoverBackgroundImage;
+ box-shadow: @hoverBoxShadow;
+ color: @hoverColor;
+}
+
+.ui.button:hover .icon {
+ opacity: @iconHoverOpacity;
+}
+
+/*--------------
+ Focus
+---------------*/
+
+.ui.button:focus {
+ background-color: @focusBackgroundColor;
+ color: @focusColor;
+ background-image: @focusBackgroundImage !important;
+ box-shadow: @focusBoxShadow !important;
+}
+
+.ui.button:focus .icon {
+ opacity: @iconFocusOpacity;
+}
+
+/*--------------
+ Down
+---------------*/
+
+.ui.button:active,
+.ui.active.button:active {
+ background-color: @downBackgroundColor;
+ background-image: @downBackgroundImage;
+ color: @downColor;
+ box-shadow: @downBoxShadow;
+}
+
+/*--------------
+ Active
+---------------*/
+
+.ui.active.button {
+ background-color: @activeBackgroundColor;
+ background-image: @activeBackgroundImage;
+ box-shadow: @activeBoxShadow;
+ color: @activeColor;
+}
+.ui.active.button:hover {
+ background-color: @activeHoverBackgroundColor;
+ background-image: @activeHoverBackgroundImage;
+ color: @activeHoverColor;
+}
+.ui.active.button:active {
+ background-color: @activeBackgroundColor;
+ background-image: @activeBackgroundImage;
+}
+
+
+/*--------------
+ Loading
+---------------*/
+
+/* Specificity hack */
+.ui.loading.loading.loading.loading.loading.loading.button {
+ position: relative;
+ cursor: default;
+ text-shadow: none !important;
+ color: transparent !important;
+ opacity: @loadingOpacity;
+ pointer-events: @loadingPointerEvents;
+ transition: @loadingTransition;
+}
+.ui.loading.button:before {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ border-radius: @circularRadius;
+ border: @loaderLineWidth solid @invertedLoaderFillColor;
+}
+.ui.loading.button:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ animation: button-spin @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @invertedLoaderLineColor transparent transparent;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+
+ box-shadow: 0px 0px 0px 1px transparent;
+}
+.ui.labeled.icon.loading.button .icon {
+ background-color: transparent;
+ box-shadow: none;
+}
+
+@keyframes button-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.ui.basic.loading.button:not(.inverted):before {
+ border-color: @loaderFillColor;
+}
+.ui.basic.loading.button:not(.inverted):after {
+ border-top-color: @loaderLineColor;
+}
+
+/*-------------------
+ Disabled
+--------------------*/
+
+.ui.buttons .disabled.button,
+.ui.disabled.button,
+.ui.button:disabled,
+.ui.disabled.button:hover,
+.ui.disabled.active.button {
+ cursor: default;
+ opacity: @disabledOpacity !important;
+ background-image: none !important;
+ box-shadow: none !important;
+ pointer-events: none !important;
+}
+
+/* Basic Group With Disabled */
+.ui.basic.buttons .ui.disabled.button {
+ border-color: @disabledBorderColor;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/*-------------------
+ Animated
+--------------------*/
+
+.ui.animated.button {
+ position: relative;
+ overflow: hidden;
+ padding-right: 0em !important;
+ vertical-align: @animatedVerticalAlign;
+ z-index: @animatedZIndex;
+}
+
+.ui.animated.button .content {
+ will-change: transform, opacity;
+}
+.ui.animated.button .visible.content {
+ position: relative;
+ margin-right: @horizontalPadding;
+}
+.ui.animated.button .hidden.content {
+ position: absolute;
+ width: 100%;
+}
+
+/* Horizontal */
+.ui.animated.button .visible.content,
+.ui.animated.button .hidden.content {
+ transition: right @animationDuration @animationEasing 0s;
+}
+.ui.animated.button .visible.content {
+ left: auto;
+ right: 0%;
+}
+.ui.animated.button .hidden.content {
+ top: 50%;
+ left: auto;
+ right: -100%;
+ margin-top: -(@lineHeight / 2);
+}
+.ui.animated.button:focus .visible.content,
+.ui.animated.button:hover .visible.content {
+ left: auto;
+ right: 200%;
+}
+.ui.animated.button:focus .hidden.content,
+.ui.animated.button:hover .hidden.content {
+ left: auto;
+ right: 0%;
+}
+
+/* Vertical */
+.ui.vertical.animated.button .visible.content,
+.ui.vertical.animated.button .hidden.content {
+ transition: top @animationDuration @animationEasing, transform @animationDuration @animationEasing;
+}
+.ui.vertical.animated.button .visible.content {
+ transform: translateY(0%);
+ right: auto;
+}
+.ui.vertical.animated.button .hidden.content {
+ top: -50%;
+ left: 0%;
+ right: auto;
+}
+.ui.vertical.animated.button:focus .visible.content,
+.ui.vertical.animated.button:hover .visible.content {
+ transform: translateY(200%);
+ right: auto;
+}
+.ui.vertical.animated.button:focus .hidden.content,
+.ui.vertical.animated.button:hover .hidden.content {
+ top: 50%;
+ right: auto;
+}
+
+/* Fade */
+.ui.fade.animated.button .visible.content,
+.ui.fade.animated.button .hidden.content {
+ transition: opacity @animationDuration @animationEasing, transform @animationDuration @animationEasing;
+}
+.ui.fade.animated.button .visible.content {
+ left: auto;
+ right: auto;
+ opacity: 1;
+ transform: scale(1);
+}
+.ui.fade.animated.button .hidden.content {
+ opacity: 0;
+ left: 0%;
+ right: auto;
+ transform: scale(@fadeScaleHigh);
+}
+.ui.fade.animated.button:focus .visible.content,
+.ui.fade.animated.button:hover .visible.content {
+ left: auto;
+ right: auto;
+ opacity: 0;
+ transform: scale(@fadeScaleLow);
+}
+.ui.fade.animated.button:focus .hidden.content,
+.ui.fade.animated.button:hover .hidden.content {
+ left: 0%;
+ right: auto;
+ opacity: 1;
+ transform: scale(1);
+}
+
+/*-------------------
+ Inverted
+--------------------*/
+
+.ui.inverted.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @white inset !important;
+ background: transparent none;
+ color: @white;
+ text-shadow: none !important;
+}
+
+/* Group */
+.ui.inverted.buttons .button {
+ margin: @invertedGroupButtonOffset;
+}
+.ui.inverted.buttons .button:first-child {
+ margin-left: 0em;
+}
+.ui.inverted.vertical.buttons .button {
+ margin: @invertedVerticalGroupButtonOffset;
+}
+.ui.inverted.vertical.buttons .button:first-child {
+ margin-top: 0em;
+}
+
+/* States */
+
+/* Hover */
+.ui.inverted.button:hover {
+ background: @white;
+ box-shadow: 0px 0px 0px @invertedBorderSize @white inset !important;
+ color: @hoverColor;
+}
+
+/* Active / Focus */
+.ui.inverted.button:focus,
+.ui.inverted.button.active {
+ background: @white;
+ box-shadow: 0px 0px 0px @invertedBorderSize @white inset !important;
+ color: @focusColor;
+}
+
+/* Active Focus */
+.ui.inverted.button.active:focus {
+ background: @midWhite;
+ box-shadow: 0px 0px 0px @invertedBorderSize @midWhite inset !important;
+ color: @focusColor;
+}
+
+
+/*-------------------
+ Labeled Button
+--------------------*/
+
+.ui.labeled.button:not(.icon) {
+ display: inline-flex;
+ flex-direction: row;
+ background: none !important;
+ padding: 0px !important;
+ border: none !important;
+ box-shadow: none !important;
+}
+
+.ui.labeled.button > .button {
+ margin: 0px;
+}
+.ui.labeled.button > .label {
+ display: flex;
+ align-items: @labeledLabelAlign;
+ margin: 0px 0px 0px @labeledLabelBorderOffset !important;
+ font-size: @labeledLabelFontSize;
+ padding: @labeledLabelPadding;
+ font-size: @labeledLabelFontSize;
+ border-color: @labeledLabelBorderColor;
+}
+
+/* Tag */
+.ui.labeled.button > .tag.label:before {
+ width: @labeledTagLabelSize;
+ height: @labeledTagLabelSize;
+}
+
+/* Right */
+.ui.labeled.button:not([class*="left labeled"]) > .button {
+ border-top-right-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+.ui.labeled.button:not([class*="left labeled"]) > .label {
+ border-top-left-radius: 0px;
+ border-bottom-left-radius: 0px;
+}
+
+/* Left Side */
+.ui[class*="left labeled"].button > .button {
+ border-top-left-radius: 0px;
+ border-bottom-left-radius: 0px;
+}
+.ui[class*="left labeled"].button > .label {
+ border-top-right-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+
+/*-------------------
+ Social
+--------------------*/
+
+/* Facebook */
+.ui.facebook.button {
+ background-color: @facebookColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+ background-image: @coloredBackgroundImage;
+ box-shadow: @coloredBoxShadow;
+}
+.ui.facebook.button:hover {
+ background-color: @facebookHoverColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.facebook.button:active {
+ background-color: @facebookDownColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+
+/* Twitter */
+.ui.twitter.button {
+ background-color: @twitterColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+ background-image: @coloredBackgroundImage;
+ box-shadow: @coloredBoxShadow;
+}
+.ui.twitter.button:hover {
+ background-color: @twitterHoverColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.twitter.button:active {
+ background-color: @twitterDownColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+
+/* Google Plus */
+.ui.google.plus.button {
+ background-color: @googlePlusColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+ background-image: @coloredBackgroundImage;
+ box-shadow: @coloredBoxShadow;
+}
+.ui.google.plus.button:hover {
+ background-color: @googlePlusHoverColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.google.plus.button:active {
+ background-color: @googlePlusDownColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+
+/* Linked In */
+.ui.linkedin.button {
+ background-color: @linkedInColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.linkedin.button:hover {
+ background-color: @linkedInHoverColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.linkedin.button:active {
+ background-color: @linkedInDownColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+
+/* YouTube */
+.ui.youtube.button {
+ background-color: @youtubeColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+ background-image: @coloredBackgroundImage;
+ box-shadow: @coloredBoxShadow;
+}
+.ui.youtube.button:hover {
+ background-color: @youtubeHoverColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.youtube.button:active {
+ background-color: @youtubeDownColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+
+/* Instagram */
+.ui.instagram.button {
+ background-color: @instagramColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+ background-image: @coloredBackgroundImage;
+ box-shadow: @coloredBoxShadow;
+}
+.ui.instagram.button:hover {
+ background-color: @instagramHoverColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.instagram.button:active {
+ background-color: @instagramDownColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+
+/* Pinterest */
+.ui.pinterest.button {
+ background-color: @pinterestColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+ background-image: @coloredBackgroundImage;
+ box-shadow: @coloredBoxShadow;
+}
+.ui.pinterest.button:hover {
+ background-color: @pinterestHoverColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+.ui.pinterest.button:active {
+ background-color: @pinterestDownColor;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+}
+
+/* VK */
+.ui.vk.button {
+ background-color: #4D7198;
+ color: @white;
+ background-image: @coloredBackgroundImage;
+ box-shadow: @coloredBoxShadow;
+}
+.ui.vk.button:hover {
+ background-color: @vkHoverColor;
+ color: @white;
+}
+.ui.vk.button:active {
+ background-color: @vkDownColor;
+ color: @white;
+}
+
+/*--------------
+ Icon
+---------------*/
+
+.ui.button > .icon:not(.button) {
+ height: @iconHeight;
+ opacity: @iconOpacity;
+ margin: @iconMargin;
+ transition: @iconTransition;
+ vertical-align: @iconVerticalAlign;
+ color: @iconColor;
+}
+
+.ui.button:not(.icon) > .icon:not(.button) {
+ margin: @iconMargin;
+}
+.ui.button:not(.icon) > .right.icon:not(.button) {
+ margin: @rightIconMargin;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*-------------------
+ Floated
+--------------------*/
+
+.ui[class*="left floated"].buttons,
+.ui[class*="left floated"].button {
+ float: left;
+ margin-left: 0em;
+ margin-right: @floatedMargin;
+}
+.ui[class*="right floated"].buttons,
+.ui[class*="right floated"].button {
+ float: right;
+ margin-right: 0em;
+ margin-left: @floatedMargin;
+}
+
+/*-------------------
+ Compact
+--------------------*/
+
+.ui.compact.buttons .button,
+.ui.compact.button {
+ padding: @compactVerticalPadding @compactHorizontalPadding ( @compactVerticalPadding + @shadowOffset );
+}
+.ui.compact.icon.buttons .button,
+.ui.compact.icon.button {
+ padding: @compactVerticalPadding @compactVerticalPadding ( @compactVerticalPadding + @shadowOffset );
+}
+.ui.compact.labeled.icon.buttons .button,
+.ui.compact.labeled.icon.button {
+ padding: @compactVerticalPadding (@compactHorizontalPadding + @labeledIconWidth) ( @compactVerticalPadding + @shadowOffset );
+}
+
+/*-------------------
+ Sizes
+--------------------*/
+
+.ui.mini.buttons .button,
+.ui.mini.buttons .or,
+.ui.mini.button {
+ font-size: @mini;
+}
+.ui.tiny.buttons .button,
+.ui.tiny.buttons .or,
+.ui.tiny.button {
+ font-size: @tiny;
+}
+.ui.small.buttons .button,
+.ui.small.buttons .or,
+.ui.small.button {
+ font-size: @small;
+}
+.ui.buttons .button,
+.ui.buttons .or,
+.ui.button {
+ font-size: @medium;
+}
+.ui.large.buttons .button,
+.ui.large.buttons .or,
+.ui.large.button {
+ font-size: @large;
+}
+.ui.big.buttons .button,
+.ui.big.buttons .or,
+.ui.big.button {
+ font-size: @big;
+}
+.ui.huge.buttons .button,
+.ui.huge.buttons .or,
+.ui.huge.button {
+ font-size: @huge;
+}
+.ui.massive.buttons .button,
+.ui.massive.buttons .or,
+.ui.massive.button {
+ font-size: @massive;
+}
+
+/*--------------
+ Icon Only
+---------------*/
+
+.ui.icon.buttons .button,
+.ui.icon.button {
+ padding: @verticalPadding @verticalPadding ( @verticalPadding + @shadowOffset );
+}
+.ui.icon.buttons .button > .icon,
+.ui.icon.button > .icon {
+ opacity: @iconButtonOpacity;
+ margin: 0em;
+ vertical-align: top;
+}
+
+
+/*-------------------
+ Basic
+--------------------*/
+
+.ui.basic.buttons .button,
+.ui.basic.button {
+ background: @basicBackground !important;
+ color: @basicTextColor !important;
+ font-weight: @basicFontWeight;
+ border-radius: @basicBorderRadius;
+ text-transform: @basicTextTransform;
+ text-shadow: none !important;
+ box-shadow: @basicBoxShadow;
+}
+.ui.basic.buttons {
+ box-shadow: @basicGroupBoxShadow;
+ border: @basicGroupBorder;
+ border-radius: @borderRadius;
+}
+.ui.basic.buttons .button {
+ border-radius: 0em;
+}
+
+.ui.basic.buttons .button:hover,
+.ui.basic.button:hover {
+ background: @basicHoverBackground !important;
+ color: @basicHoverTextColor !important;
+ box-shadow: @basicHoverBoxShadow;
+}
+.ui.basic.buttons .button:focus,
+.ui.basic.button:focus {
+ background: @basicFocusBackground !important;
+ color: @basicFocusTextColor !important;
+ box-shadow: @basicFocusBoxShadow;
+}
+.ui.basic.buttons .button:active,
+.ui.basic.button:active {
+ background: @basicDownBackground !important;
+ color: @basicDownTextColor !important;
+ box-shadow: @basicDownBoxShadow;
+}
+.ui.basic.buttons .active.button,
+.ui.basic.active.button {
+ background: @basicActiveBackground !important;
+ box-shadow: @basicActiveBoxShadow !important;
+ color: @basicActiveTextColor;
+ box-shadow: @selectedBorderColor;
+}
+.ui.basic.buttons .active.button:hover,
+.ui.basic.active.button:hover {
+ background-color: @transparentBlack;
+}
+
+/* Vertical */
+.ui.basic.buttons .button:hover {
+ box-shadow: @basicHoverBoxShadow inset;
+}
+.ui.basic.buttons .button:active {
+ box-shadow: @basicDownBoxShadow inset;
+}
+.ui.basic.buttons .active.button {
+ box-shadow: @selectedBorderColor inset;
+}
+
+/* Standard Basic Inverted */
+.ui.basic.inverted.buttons .button,
+.ui.basic.inverted.button {
+ background-color: transparent !important;
+ color: @offWhite !important;
+ box-shadow: @basicInvertedBoxShadow !important;
+}
+.ui.basic.inverted.buttons .button:hover,
+.ui.basic.inverted.button:hover {
+ color: @white !important;
+ box-shadow: @basicInvertedHoverBoxShadow !important;
+}
+.ui.basic.inverted.buttons .button:focus,
+.ui.basic.inverted.button:focus {
+ color: @white !important;
+ box-shadow: @basicInvertedFocusBoxShadow !important;
+}
+.ui.basic.inverted.buttons .button:active,
+.ui.basic.inverted.button:active {
+ background-color: @transparentWhite !important;
+ color: @white !important;
+ box-shadow: @basicInvertedDownBoxShadow !important;
+}
+.ui.basic.inverted.buttons .active.button,
+.ui.basic.inverted.active.button {
+ background-color: @transparentWhite;
+ color: @invertedTextColor;
+ text-shadow: @invertedTextShadow;
+ box-shadow: @basicInvertedActiveBoxShadow;
+}
+.ui.basic.inverted.buttons .active.button:hover,
+.ui.basic.inverted.active.button:hover {
+ background-color: @strongTransparentWhite;
+ box-shadow: @basicInvertedHoverBoxShadow !important;
+}
+
+
+/* Basic Group */
+.ui.basic.buttons .button {
+ border-left: @basicGroupBorder;
+ box-shadow: none;
+}
+.ui.basic.vertical.buttons .button {
+ border-left: none;
+}
+.ui.basic.vertical.buttons .button {
+ border-left-width: 0px;
+ border-top: @basicGroupBorder;
+}
+.ui.basic.vertical.buttons .button:first-child {
+ border-top-width: 0px;
+}
+
+
+
+/*--------------
+ Labeled Icon
+---------------*/
+
+.ui.labeled.icon.buttons .button,
+.ui.labeled.icon.button {
+ position: relative;
+ padding-left: @labeledIconPadding !important;
+ padding-right: @horizontalPadding !important;
+}
+
+/* Left Labeled */
+.ui.labeled.icon.buttons > .button > .icon,
+.ui.labeled.icon.button > .icon {
+ position: absolute;
+ height: 100%;
+ line-height: 1;
+ border-radius: 0px;
+ border-top-left-radius: inherit;
+ border-bottom-left-radius: inherit;
+ text-align: center;
+
+ margin: @labeledIconMargin;
+ width: @labeledIconWidth;
+ background-color: @labeledIconBackgroundColor;
+ color: @labeledIconColor;
+ box-shadow: @labeledIconLeftShadow;
+}
+
+/* Left Labeled */
+.ui.labeled.icon.buttons > .button > .icon,
+.ui.labeled.icon.button > .icon {
+ top: 0em;
+ left: 0em;
+}
+
+/* Right Labeled */
+.ui[class*="right labeled"].icon.button {
+ padding-right: @labeledIconPadding !important;
+ padding-left: @horizontalPadding !important;
+}
+.ui[class*="right labeled"].icon.button > .icon {
+ left: auto;
+ right: 0em;
+ border-radius: 0px;
+ border-top-right-radius: inherit;
+ border-bottom-right-radius: inherit;
+ box-shadow: @labeledIconRightShadow;
+}
+
+
+.ui.labeled.icon.buttons > .button > .icon:before,
+.ui.labeled.icon.button > .icon:before,
+.ui.labeled.icon.buttons > .button > .icon:after,
+.ui.labeled.icon.button > .icon:after {
+ display: block;
+ position: absolute;
+ width: 100%;
+ top: 50%;
+ text-align: center;
+ transform: translateY(-50%);
+}
+
+.ui.labeled.icon.buttons .button > .icon {
+ border-radius: 0em;
+}
+.ui.labeled.icon.buttons .button:first-child > .icon {
+ border-top-left-radius: @borderRadius;
+ border-bottom-left-radius: @borderRadius;
+}
+.ui.labeled.icon.buttons .button:last-child > .icon {
+ border-top-right-radius: @borderRadius;
+ border-bottom-right-radius: @borderRadius;
+}
+.ui.vertical.labeled.icon.buttons .button:first-child > .icon {
+ border-radius: 0em;
+ border-top-left-radius: @borderRadius;
+}
+.ui.vertical.labeled.icon.buttons .button:last-child > .icon {
+ border-radius: 0em;
+ border-bottom-left-radius: @borderRadius;
+}
+
+/* Fluid Labeled */
+.ui.fluid[class*="left labeled"].icon.button,
+.ui.fluid[class*="right labeled"].icon.button {
+ padding-left: @horizontalPadding !important;
+ padding-right: @horizontalPadding !important;
+}
+
+
+
+
+/*--------------
+ Toggle
+---------------*/
+
+/* Toggle (Modifies active state to give affordances) */
+.ui.toggle.buttons .active.button,
+.ui.buttons .button.toggle.active,
+.ui.button.toggle.active {
+ background-color: @positiveColor !important;
+ box-shadow: none !important;
+ text-shadow: @invertedTextShadow;
+ color: @invertedTextColor !important;
+}
+.ui.button.toggle.active:hover {
+ background-color: @positiveColorHover !important;
+ text-shadow: @invertedTextShadow;
+ color: @invertedTextColor !important;
+}
+
+/*--------------
+ Circular
+---------------*/
+
+.ui.circular.button {
+ border-radius: 10em;
+}
+.ui.circular.button > .icon {
+ width: 1em;
+ vertical-align: baseline;
+}
+
+
+/*-------------------
+ Or Buttons
+--------------------*/
+
+.ui.buttons .or {
+ position: relative;
+ width: @orGap;
+ height: @orHeight;
+ z-index: @orZIndex;
+}
+.ui.buttons .or:before {
+ position: absolute;
+ text-align: center;
+ border-radius: @circularRadius;
+
+ content: @orText;
+ top: 50%;
+ left: 50%;
+ background-color: @orBackgroundColor;
+ text-shadow: @orTextShadow;
+
+ margin-top: @orVerticalOffset;
+ margin-left: @orHorizontalOffset;
+
+ width: @orCircleSize;
+ height: @orCircleSize;
+
+ line-height: @orLineHeight;
+ color: @orTextColor;
+
+ font-style: @orTextStyle;
+ font-weight: @orTextWeight;
+
+ box-shadow: @orBoxShadow;
+}
+.ui.buttons .or[data-text]:before {
+ content: attr(data-text);
+}
+
+/* Fluid Or */
+.ui.fluid.buttons .or {
+ width: 0em !important;
+}
+.ui.fluid.buttons .or:after {
+ display: none;
+}
+
+
+/*-------------------
+ Attached
+--------------------*/
+
+
+/* Singular */
+.ui.attached.button {
+ position: relative;
+ display: block;
+ margin: 0em;
+ border-radius: 0em;
+ box-shadow: @attachedBoxShadow !important;
+}
+
+/* Top / Bottom */
+.ui.attached.top.button {
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+.ui.attached.bottom.button {
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+
+/* Left / Right */
+.ui.left.attached.button {
+ display: inline-block;
+ border-left: none;
+ text-align: right;
+
+ padding-right: @attachedHorizontalPadding;
+ border-radius: @borderRadius 0em 0em @borderRadius;
+}
+.ui.right.attached.button {
+ display: inline-block;
+ text-align: left;
+ padding-left: @attachedHorizontalPadding;
+ border-radius: 0em @borderRadius @borderRadius 0em;
+}
+
+/* Plural */
+.ui.attached.buttons {
+ position: relative;
+ display: flex;
+ border-radius: 0em;
+ width: auto !important;
+ z-index: @attachedZIndex;
+ margin-left: @attachedOffset;
+ margin-right: @attachedOffset;
+}
+.ui.attached.buttons .button {
+ margin: 0em;
+}
+.ui.attached.buttons .button:first-child {
+ border-radius: 0em;
+}
+.ui.attached.buttons .button:last-child {
+ border-radius: 0em;
+}
+
+/* Top / Bottom */
+.ui[class*="top attached"].buttons {
+ margin-bottom: @attachedOffset;
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+.ui[class*="top attached"].buttons .button:first-child {
+ border-radius: @borderRadius 0em 0em 0em;
+}
+.ui[class*="top attached"].buttons .button:last-child {
+ border-radius: 0em @borderRadius 0em 0em;
+}
+
+.ui[class*="bottom attached"].buttons {
+ margin-top: @attachedOffset;
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+.ui[class*="bottom attached"].buttons .button:first-child {
+ border-radius: 0em 0em 0em @borderRadius;
+}
+.ui[class*="bottom attached"].buttons .button:last-child {
+ border-radius: 0em 0em @borderRadius 0em;
+}
+
+/* Left / Right */
+.ui[class*="left attached"].buttons {
+ display: inline-flex;
+ margin-right: 0em;
+ margin-left: @attachedOffset;
+ border-radius: 0em @borderRadius @borderRadius 0em;
+}
+.ui[class*="left attached"].buttons .button:first-child {
+ margin-left: @attachedOffset;
+ border-radius: 0em @borderRadius 0em 0em;
+}
+.ui[class*="left attached"].buttons .button:last-child {
+ margin-left: @attachedOffset;
+ border-radius: 0em 0em @borderRadius 0em;
+}
+
+.ui[class*="right attached"].buttons {
+ display: inline-flex;
+ margin-left: 0em;
+ margin-right: @attachedOffset;
+ border-radius: @borderRadius 0em 0em @borderRadius;
+}
+.ui[class*="right attached"].buttons .button:first-child {
+ margin-left: @attachedOffset;
+ border-radius: @borderRadius 0em 0em 0em;
+}
+.ui[class*="right attached"].buttons .button:last-child {
+ margin-left: @attachedOffset;
+ border-radius: 0em 0em 0em @borderRadius;
+}
+
+/*-------------------
+ Fluid
+--------------------*/
+
+.ui.fluid.buttons,
+.ui.fluid.button {
+ width: 100%;
+}
+.ui.fluid.button {
+ display: block;
+}
+
+.ui.two.buttons {
+ width: 100%;
+}
+.ui.two.buttons > .button {
+ width: 50%;
+}
+
+.ui.three.buttons {
+ width: 100%;
+}
+.ui.three.buttons > .button {
+ width: 33.333%;
+}
+
+.ui.four.buttons {
+ width: 100%;
+}
+.ui.four.buttons > .button {
+ width: 25%;
+}
+
+.ui.five.buttons {
+ width: 100%;
+}
+.ui.five.buttons > .button {
+ width: 20%;
+}
+
+.ui.six.buttons {
+ width: 100%;
+}
+.ui.six.buttons > .button {
+ width: 16.666%;
+}
+
+.ui.seven.buttons {
+ width: 100%;
+}
+.ui.seven.buttons > .button {
+ width: 14.285%;
+}
+
+.ui.eight.buttons {
+ width: 100%;
+}
+.ui.eight.buttons > .button {
+ width: 12.500%;
+}
+
+.ui.nine.buttons {
+ width: 100%;
+}
+.ui.nine.buttons > .button {
+ width: 11.11%;
+}
+
+.ui.ten.buttons {
+ width: 100%;
+}
+.ui.ten.buttons > .button {
+ width: 10%;
+}
+
+.ui.eleven.buttons {
+ width: 100%;
+}
+.ui.eleven.buttons > .button {
+ width: 9.09%;
+}
+
+.ui.twelve.buttons {
+ width: 100%;
+}
+.ui.twelve.buttons > .button {
+ width: 8.3333%;
+}
+
+/* Fluid Vertical Buttons */
+.ui.fluid.vertical.buttons,
+.ui.fluid.vertical.buttons > .button {
+ display: flex;
+ width: auto;
+}
+
+.ui.two.vertical.buttons > .button {
+ height: 50%;
+}
+.ui.three.vertical.buttons > .button {
+ height: 33.333%;
+}
+.ui.four.vertical.buttons > .button {
+ height: 25%;
+}
+.ui.five.vertical.buttons > .button {
+ height: 20%;
+}
+.ui.six.vertical.buttons > .button {
+ height: 16.666%;
+}
+.ui.seven.vertical.buttons > .button {
+ height: 14.285%;
+}
+.ui.eight.vertical.buttons > .button {
+ height: 12.500%;
+}
+.ui.nine.vertical.buttons > .button {
+ height: 11.11%;
+}
+.ui.ten.vertical.buttons > .button {
+ height: 10%;
+}
+.ui.eleven.vertical.buttons > .button {
+ height: 9.09%;
+}
+.ui.twelve.vertical.buttons > .button {
+ height: 8.3333%;
+}
+
+
+/*-------------------
+ Colors
+--------------------*/
+
+/*--- Black ---*/
+.ui.black.buttons .button,
+.ui.black.button {
+ background-color: @black;
+ color: @blackTextColor;
+ text-shadow: @blackTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.black.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.black.buttons .button:hover,
+.ui.black.button:hover {
+ background-color: @blackHover;
+ color: @blackTextColor;
+ text-shadow: @blackTextShadow;
+}
+.ui.black.buttons .button:focus,
+.ui.black.button:focus {
+ background-color: @blackFocus;
+ color: @blackTextColor;
+ text-shadow: @blackTextShadow;
+}
+.ui.black.buttons .button:active,
+.ui.black.button:active {
+ background-color: @blackDown;
+ color: @blackTextColor;
+ text-shadow: @blackTextShadow;
+}
+.ui.black.buttons .active.button,
+.ui.black.buttons .active.button:active,
+.ui.black.active.button,
+.ui.black.button .active.button:active {
+ background-color: @blackActive;
+ color: @blackTextColor;
+ text-shadow: @blackTextShadow;
+}
+
+/* Basic */
+.ui.basic.black.buttons .button,
+.ui.basic.black.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @black inset !important;
+ color: @black !important;
+}
+.ui.basic.black.buttons .button:hover,
+.ui.basic.black.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blackHover inset !important;
+ color: @blackHover !important;
+}
+.ui.basic.black.buttons .button:focus,
+.ui.basic.black.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blackFocus inset !important;
+ color: @blackHover !important;
+}
+.ui.basic.black.buttons .active.button,
+.ui.basic.black.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blackActive inset !important;
+ color: @blackDown !important;
+}
+.ui.basic.black.buttons .button:active,
+.ui.basic.black.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blackDown inset !important;
+ color: @blackDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.black.buttons .button,
+.ui.inverted.black.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @solidBorderColor inset !important;
+ color: @invertedTextColor;
+}
+.ui.inverted.black.buttons .button:hover,
+.ui.inverted.black.button:hover,
+.ui.inverted.black.buttons .button:focus,
+.ui.inverted.black.button:focus,
+.ui.inverted.black.buttons .button.active,
+.ui.inverted.black.button.active,
+.ui.inverted.black.buttons .button:active,
+.ui.inverted.black.button:active {
+ box-shadow: none !important;
+ color: @lightBlackTextColor;
+}
+.ui.inverted.black.buttons .button:hover,
+.ui.inverted.black.button:hover {
+ background-color: @lightBlackHover;
+}
+.ui.inverted.black.buttons .button:focus,
+.ui.inverted.black.button:focus {
+ background-color: @lightBlackFocus;
+}
+.ui.inverted.black.buttons .active.button,
+.ui.inverted.black.active.button {
+ background-color: @lightBlackActive;
+}
+.ui.inverted.black.buttons .button:active,
+.ui.inverted.black.button:active {
+ background-color: @lightBlackDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.black.basic.buttons .button,
+.ui.inverted.black.buttons .basic.button,
+.ui.inverted.black.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.black.basic.buttons .button:hover,
+.ui.inverted.black.buttons .basic.button:hover,
+.ui.inverted.black.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackHover inset !important;
+ color: @white !important;
+}
+.ui.inverted.black.basic.buttons .button:focus,
+.ui.inverted.black.basic.buttons .button:focus,
+.ui.inverted.black.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackFocus inset !important;
+ color: @lightBlack !important;
+}
+.ui.inverted.black.basic.buttons .active.button,
+.ui.inverted.black.buttons .basic.active.button,
+.ui.inverted.black.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackActive inset !important;
+ color: @white !important;
+}
+.ui.inverted.black.basic.buttons .button:active,
+.ui.inverted.black.buttons .basic.button:active,
+.ui.inverted.black.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackDown inset !important;
+ color: @white !important;
+}
+
+/*--- Grey ---*/
+.ui.grey.buttons .button,
+.ui.grey.button {
+ background-color: @grey;
+ color: @greyTextColor;
+ text-shadow: @greyTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.grey.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.grey.buttons .button:hover,
+.ui.grey.button:hover {
+ background-color: @greyHover;
+ color: @greyTextColor;
+ text-shadow: @greyTextShadow;
+}
+.ui.grey.buttons .button:focus,
+.ui.grey.button:focus {
+ background-color: @greyFocus;
+ color: @greyTextColor;
+ text-shadow: @greyTextShadow;
+}
+.ui.grey.buttons .button:active,
+.ui.grey.button:active {
+ background-color: @greyDown;
+ color: @greyTextColor;
+ text-shadow: @greyTextShadow;
+}
+.ui.grey.buttons .active.button,
+.ui.grey.buttons .active.button:active,
+.ui.grey.active.button,
+.ui.grey.button .active.button:active {
+ background-color: @greyActive;
+ color: @greyTextColor;
+ text-shadow: @greyTextShadow;
+}
+
+/* Basic */
+.ui.basic.grey.buttons .button,
+.ui.basic.grey.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @grey inset !important;
+ color: @grey !important;
+}
+.ui.basic.grey.buttons .button:hover,
+.ui.basic.grey.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greyHover inset !important;
+ color: @greyHover !important;
+}
+.ui.basic.grey.buttons .button:focus,
+.ui.basic.grey.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greyFocus inset !important;
+ color: @greyHover !important;
+}
+.ui.basic.grey.buttons .active.button,
+.ui.basic.grey.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greyActive inset !important;
+ color: @greyDown !important;
+}
+.ui.basic.grey.buttons .button:active,
+.ui.basic.grey.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greyDown inset !important;
+ color: @greyDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.grey.buttons .button,
+.ui.inverted.grey.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @solidBorderColor inset !important;
+ color: @invertedTextColor;
+}
+.ui.inverted.grey.buttons .button:hover,
+.ui.inverted.grey.button:hover,
+.ui.inverted.grey.buttons .button:focus,
+.ui.inverted.grey.button:focus,
+.ui.inverted.grey.buttons .button.active,
+.ui.inverted.grey.button.active,
+.ui.inverted.grey.buttons .button:active,
+.ui.inverted.grey.button:active {
+ box-shadow: none !important;
+ color: @lightGreyTextColor;
+}
+.ui.inverted.grey.buttons .button:hover,
+.ui.inverted.grey.button:hover {
+ background-color: @lightGreyHover;
+}
+.ui.inverted.grey.buttons .button:focus,
+.ui.inverted.grey.button:focus {
+ background-color: @lightGreyFocus;
+}
+.ui.inverted.grey.buttons .active.button,
+.ui.inverted.grey.active.button {
+ background-color: @lightGreyActive;
+}
+.ui.inverted.grey.buttons .button:active,
+.ui.inverted.grey.button:active {
+ background-color: @lightGreyDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.grey.basic.buttons .button,
+.ui.inverted.grey.buttons .basic.button,
+.ui.inverted.grey.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.grey.basic.buttons .button:hover,
+.ui.inverted.grey.buttons .basic.button:hover,
+.ui.inverted.grey.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyHover inset !important;
+ color: @white !important;
+}
+.ui.inverted.grey.basic.buttons .button:focus,
+.ui.inverted.grey.basic.buttons .button:focus,
+.ui.inverted.grey.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyFocus inset !important;
+ color: @lightGrey !important;
+}
+.ui.inverted.grey.basic.buttons .active.button,
+.ui.inverted.grey.buttons .basic.active.button,
+.ui.inverted.grey.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyActive inset !important;
+ color: @white !important;
+}
+.ui.inverted.grey.basic.buttons .button:active,
+.ui.inverted.grey.buttons .basic.button:active,
+.ui.inverted.grey.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyDown inset !important;
+ color: @white !important;
+}
+
+
+/*--- Brown ---*/
+.ui.brown.buttons .button,
+.ui.brown.button {
+ background-color: @brown;
+ color: @brownTextColor;
+ text-shadow: @brownTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.brown.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.brown.buttons .button:hover,
+.ui.brown.button:hover {
+ background-color: @brownHover;
+ color: @brownTextColor;
+ text-shadow: @brownTextShadow;
+}
+.ui.brown.buttons .button:focus,
+.ui.brown.button:focus {
+ background-color: @brownFocus;
+ color: @brownTextColor;
+ text-shadow: @brownTextShadow;
+}
+.ui.brown.buttons .button:active,
+.ui.brown.button:active {
+ background-color: @brownDown;
+ color: @brownTextColor;
+ text-shadow: @brownTextShadow;
+}
+.ui.brown.buttons .active.button,
+.ui.brown.buttons .active.button:active,
+.ui.brown.active.button,
+.ui.brown.button .active.button:active {
+ background-color: @brownActive;
+ color: @brownTextColor;
+ text-shadow: @brownTextShadow;
+}
+
+/* Basic */
+.ui.basic.brown.buttons .button,
+.ui.basic.brown.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @brown inset !important;
+ color: @brown !important;
+}
+.ui.basic.brown.buttons .button:hover,
+.ui.basic.brown.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @brownHover inset !important;
+ color: @brownHover !important;
+}
+.ui.basic.brown.buttons .button:focus,
+.ui.basic.brown.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @brownFocus inset !important;
+ color: @brownHover !important;
+}
+.ui.basic.brown.buttons .active.button,
+.ui.basic.brown.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @brownActive inset !important;
+ color: @brownDown !important;
+}
+.ui.basic.brown.buttons .button:active,
+.ui.basic.brown.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @brownDown inset !important;
+ color: @brownDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.brown.buttons .button,
+.ui.inverted.brown.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBrown inset !important;
+ color: @lightBrown;
+}
+.ui.inverted.brown.buttons .button:hover,
+.ui.inverted.brown.button:hover,
+.ui.inverted.brown.buttons .button:focus,
+.ui.inverted.brown.button:focus,
+.ui.inverted.brown.buttons .button.active,
+.ui.inverted.brown.button.active,
+.ui.inverted.brown.buttons .button:active,
+.ui.inverted.brown.button:active {
+ box-shadow: none !important;
+ color: @lightBrownTextColor;
+}
+.ui.inverted.brown.buttons .button:hover,
+.ui.inverted.brown.button:hover {
+ background-color: @lightBrownHover;
+}
+.ui.inverted.brown.buttons .button:focus,
+.ui.inverted.brown.button:focus {
+ background-color: @lightBrownFocus;
+}
+.ui.inverted.brown.buttons .active.button,
+.ui.inverted.brown.active.button {
+ background-color: @lightBrownActive;
+}
+.ui.inverted.brown.buttons .button:active,
+.ui.inverted.brown.button:active {
+ background-color: @lightBrownDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.brown.basic.buttons .button,
+.ui.inverted.brown.buttons .basic.button,
+.ui.inverted.brown.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.brown.basic.buttons .button:hover,
+.ui.inverted.brown.buttons .basic.button:hover,
+.ui.inverted.brown.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownHover inset !important;
+ color: @lightBrown !important;
+}
+.ui.inverted.brown.basic.buttons .button:focus,
+.ui.inverted.brown.basic.buttons .button:focus,
+.ui.inverted.brown.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownFocus inset !important;
+ color: @lightBrown !important;
+}
+.ui.inverted.brown.basic.buttons .active.button,
+.ui.inverted.brown.buttons .basic.active.button,
+.ui.inverted.brown.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownActive inset !important;
+ color: @lightBrown !important;
+}
+.ui.inverted.brown.basic.buttons .button:active,
+.ui.inverted.brown.buttons .basic.button:active,
+.ui.inverted.brown.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownDown inset !important;
+ color: @lightBrown !important;
+}
+
+/*--- Blue ---*/
+.ui.blue.buttons .button,
+.ui.blue.button {
+ background-color: @blue;
+ color: @blueTextColor;
+ text-shadow: @blueTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.blue.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.blue.buttons .button:hover,
+.ui.blue.button:hover {
+ background-color: @blueHover;
+ color: @blueTextColor;
+ text-shadow: @blueTextShadow;
+}
+.ui.blue.buttons .button:focus,
+.ui.blue.button:focus {
+ background-color: @blueFocus;
+ color: @blueTextColor;
+ text-shadow: @blueTextShadow;
+}
+.ui.blue.buttons .button:active,
+.ui.blue.button:active {
+ background-color: @blueDown;
+ color: @blueTextColor;
+ text-shadow: @blueTextShadow;
+}
+.ui.blue.buttons .active.button,
+.ui.blue.buttons .active.button:active,
+.ui.blue.active.button,
+.ui.blue.button .active.button:active {
+ background-color: @blueActive;
+ color: @blueTextColor;
+ text-shadow: @blueTextShadow;
+}
+
+/* Basic */
+.ui.basic.blue.buttons .button,
+.ui.basic.blue.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @blue inset !important;
+ color: @blue !important;
+}
+.ui.basic.blue.buttons .button:hover,
+.ui.basic.blue.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blueHover inset !important;
+ color: @blueHover !important;
+}
+.ui.basic.blue.buttons .button:focus,
+.ui.basic.blue.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blueFocus inset !important;
+ color: @blueHover !important;
+}
+.ui.basic.blue.buttons .active.button,
+.ui.basic.blue.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blueActive inset !important;
+ color: @blueDown !important;
+}
+.ui.basic.blue.buttons .button:active,
+.ui.basic.blue.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @blueDown inset !important;
+ color: @blueDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.blue.buttons .button,
+.ui.inverted.blue.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlue inset !important;
+ color: @lightBlue;
+}
+.ui.inverted.blue.buttons .button:hover,
+.ui.inverted.blue.button:hover,
+.ui.inverted.blue.buttons .button:focus,
+.ui.inverted.blue.button:focus,
+.ui.inverted.blue.buttons .button.active,
+.ui.inverted.blue.button.active,
+.ui.inverted.blue.buttons .button:active,
+.ui.inverted.blue.button:active {
+ box-shadow: none !important;
+ color: @lightBlueTextColor;
+}
+.ui.inverted.blue.buttons .button:hover,
+.ui.inverted.blue.button:hover {
+ background-color: @lightBlueHover;
+}
+.ui.inverted.blue.buttons .button:focus,
+.ui.inverted.blue.button:focus {
+ background-color: @lightBlueFocus;
+}
+.ui.inverted.blue.buttons .active.button,
+.ui.inverted.blue.active.button {
+ background-color: @lightBlueActive;
+}
+.ui.inverted.blue.buttons .button:active,
+.ui.inverted.blue.button:active {
+ background-color: @lightBlueDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.blue.basic.buttons .button,
+.ui.inverted.blue.buttons .basic.button,
+.ui.inverted.blue.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.blue.basic.buttons .button:hover,
+.ui.inverted.blue.buttons .basic.button:hover,
+.ui.inverted.blue.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueHover inset !important;
+ color: @lightBlue !important;
+}
+.ui.inverted.blue.basic.buttons .button:focus,
+.ui.inverted.blue.basic.buttons .button:focus,
+.ui.inverted.blue.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueFocus inset !important;
+ color: @lightBlue !important;
+}
+.ui.inverted.blue.basic.buttons .active.button,
+.ui.inverted.blue.buttons .basic.active.button,
+.ui.inverted.blue.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueActive inset !important;
+ color: @lightBlue !important;
+}
+.ui.inverted.blue.basic.buttons .button:active,
+.ui.inverted.blue.buttons .basic.button:active,
+.ui.inverted.blue.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueDown inset !important;
+ color: @lightBlue !important;
+}
+
+/*--- Green ---*/
+.ui.green.buttons .button,
+.ui.green.button {
+ background-color: @green;
+ color: @greenTextColor;
+ text-shadow: @greenTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.green.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.green.buttons .button:hover,
+.ui.green.button:hover {
+ background-color: @greenHover;
+ color: @greenTextColor;
+ text-shadow: @greenTextShadow;
+}
+.ui.green.buttons .button:focus,
+.ui.green.button:focus {
+ background-color: @greenFocus;
+ color: @greenTextColor;
+ text-shadow: @greenTextShadow;
+}
+.ui.green.buttons .button:active,
+.ui.green.button:active {
+ background-color: @greenDown;
+ color: @greenTextColor;
+ text-shadow: @greenTextShadow;
+}
+.ui.green.buttons .active.button,
+.ui.green.buttons .active.button:active,
+.ui.green.active.button,
+.ui.green.button .active.button:active {
+ background-color: @greenActive;
+ color: @greenTextColor;
+ text-shadow: @greenTextShadow;
+}
+
+
+/* Basic */
+.ui.basic.green.buttons .button,
+.ui.basic.green.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @green inset !important;
+ color: @green !important;
+}
+.ui.basic.green.buttons .button:hover,
+.ui.basic.green.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greenHover inset !important;
+ color: @greenHover !important;
+}
+.ui.basic.green.buttons .button:focus,
+.ui.basic.green.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greenFocus inset !important;
+ color: @greenHover !important;
+}
+.ui.basic.green.buttons .active.button,
+.ui.basic.green.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greenActive inset !important;
+ color: @greenDown !important;
+}
+.ui.basic.green.buttons .button:active,
+.ui.basic.green.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @greenDown inset !important;
+ color: @greenDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.green.buttons .button,
+.ui.inverted.green.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreen inset !important;
+ color: @lightGreen;
+}
+.ui.inverted.green.buttons .button:hover,
+.ui.inverted.green.button:hover,
+.ui.inverted.green.buttons .button:focus,
+.ui.inverted.green.button:focus,
+.ui.inverted.green.buttons .button.active,
+.ui.inverted.green.button.active,
+.ui.inverted.green.buttons .button:active,
+.ui.inverted.green.button:active {
+ box-shadow: none !important;
+ color: @greenTextColor;
+}
+.ui.inverted.green.buttons .button:hover,
+.ui.inverted.green.button:hover {
+ background-color: @lightGreenHover;
+}
+.ui.inverted.green.buttons .button:focus,
+.ui.inverted.green.button:focus {
+ background-color: @lightGreenFocus;
+}
+.ui.inverted.green.buttons .active.button,
+.ui.inverted.green.active.button {
+ background-color: @lightGreenActive;
+}
+.ui.inverted.green.buttons .button:active,
+.ui.inverted.green.button:active {
+ background-color: @lightGreenDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.green.basic.buttons .button,
+.ui.inverted.green.buttons .basic.button,
+.ui.inverted.green.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.green.basic.buttons .button:hover,
+.ui.inverted.green.buttons .basic.button:hover,
+.ui.inverted.green.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenHover inset !important;
+ color: @lightGreen !important;
+}
+.ui.inverted.green.basic.buttons .button:focus,
+.ui.inverted.green.basic.buttons .button:focus,
+.ui.inverted.green.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenFocus inset !important;
+ color: @lightGreen !important;
+}
+.ui.inverted.green.basic.buttons .active.button,
+.ui.inverted.green.buttons .basic.active.button,
+.ui.inverted.green.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenActive inset !important;
+ color: @lightGreen !important;
+}
+.ui.inverted.green.basic.buttons .button:active,
+.ui.inverted.green.buttons .basic.button:active,
+.ui.inverted.green.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenDown inset !important;
+ color: @lightGreen !important;
+}
+
+/*--- Orange ---*/
+.ui.orange.buttons .button,
+.ui.orange.button {
+ background-color: @orange;
+ color: @orangeTextColor;
+ text-shadow: @orangeTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.orange.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.orange.buttons .button:hover,
+.ui.orange.button:hover {
+ background-color: @orangeHover;
+ color: @orangeTextColor;
+ text-shadow: @orangeTextShadow;
+}
+.ui.orange.buttons .button:focus,
+.ui.orange.button:focus {
+ background-color: @orangeFocus;
+ color: @orangeTextColor;
+ text-shadow: @orangeTextShadow;
+}
+.ui.orange.buttons .button:active,
+.ui.orange.button:active {
+ background-color: @orangeDown;
+ color: @orangeTextColor;
+ text-shadow: @orangeTextShadow;
+}
+.ui.orange.buttons .active.button,
+.ui.orange.buttons .active.button:active,
+.ui.orange.active.button,
+.ui.orange.button .active.button:active {
+ background-color: @orangeActive;
+ color: @orangeTextColor;
+ text-shadow: @orangeTextShadow;
+}
+
+/* Basic */
+.ui.basic.orange.buttons .button,
+.ui.basic.orange.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @orange inset !important;
+ color: @orange !important;
+}
+.ui.basic.orange.buttons .button:hover,
+.ui.basic.orange.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeHover inset !important;
+ color: @orangeHover !important;
+}
+.ui.basic.orange.buttons .button:focus,
+.ui.basic.orange.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeFocus inset !important;
+ color: @orangeHover !important;
+}
+.ui.basic.orange.buttons .active.button,
+.ui.basic.orange.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeActive inset !important;
+ color: @orangeDown !important;
+}
+.ui.basic.orange.buttons .button:active,
+.ui.basic.orange.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeDown inset !important;
+ color: @orangeDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.orange.buttons .button,
+.ui.inverted.orange.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOrange inset !important;
+ color: @lightOrange;
+}
+.ui.inverted.orange.buttons .button:hover,
+.ui.inverted.orange.button:hover,
+.ui.inverted.orange.buttons .button:focus,
+.ui.inverted.orange.button:focus,
+.ui.inverted.orange.buttons .button.active,
+.ui.inverted.orange.button.active,
+.ui.inverted.orange.buttons .button:active,
+.ui.inverted.orange.button:active {
+ box-shadow: none !important;
+ color: @lightOrangeTextColor;
+}
+.ui.inverted.orange.buttons .button:hover,
+.ui.inverted.orange.button:hover {
+ background-color: @lightOrangeHover;
+}
+.ui.inverted.orange.buttons .button:focus,
+.ui.inverted.orange.button:focus {
+ background-color: @lightOrangeFocus;
+}
+.ui.inverted.orange.buttons .active.button,
+.ui.inverted.orange.active.button {
+ background-color: @lightOrangeActive;
+}
+.ui.inverted.orange.buttons .button:active,
+.ui.inverted.orange.button:active {
+ background-color: @lightOrangeDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.orange.basic.buttons .button,
+.ui.inverted.orange.buttons .basic.button,
+.ui.inverted.orange.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.orange.basic.buttons .button:hover,
+.ui.inverted.orange.buttons .basic.button:hover,
+.ui.inverted.orange.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeHover inset !important;
+ color: @lightOrange !important;
+}
+.ui.inverted.orange.basic.buttons .button:focus,
+.ui.inverted.orange.basic.buttons .button:focus,
+.ui.inverted.orange.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeFocus inset !important;
+ color: @lightOrange !important;
+}
+.ui.inverted.orange.basic.buttons .active.button,
+.ui.inverted.orange.buttons .basic.active.button,
+.ui.inverted.orange.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeActive inset !important;
+ color: @lightOrange !important;
+}
+.ui.inverted.orange.basic.buttons .button:active,
+.ui.inverted.orange.buttons .basic.button:active,
+.ui.inverted.orange.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeDown inset !important;
+ color: @lightOrange !important;
+}
+
+/*--- Pink ---*/
+.ui.pink.buttons .button,
+.ui.pink.button {
+ background-color: @pink;
+ color: @pinkTextColor;
+ text-shadow: @pinkTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.pink.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.pink.buttons .button:hover,
+.ui.pink.button:hover {
+ background-color: @pinkHover;
+ color: @pinkTextColor;
+ text-shadow: @pinkTextShadow;
+}
+.ui.pink.buttons .button:focus,
+.ui.pink.button:focus {
+ background-color: @pinkFocus;
+ color: @pinkTextColor;
+ text-shadow: @pinkTextShadow;
+}
+.ui.pink.buttons .button:active,
+.ui.pink.button:active {
+ background-color: @pinkDown;
+ color: @pinkTextColor;
+ text-shadow: @pinkTextShadow;
+}
+.ui.pink.buttons .active.button,
+.ui.pink.buttons .active.button:active,
+.ui.pink.active.button,
+.ui.pink.button .active.button:active {
+ background-color: @pinkActive;
+ color: @pinkTextColor;
+ text-shadow: @pinkTextShadow;
+}
+
+/* Basic */
+.ui.basic.pink.buttons .button,
+.ui.basic.pink.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @pink inset !important;
+ color: @pink !important;
+}
+.ui.basic.pink.buttons .button:hover,
+.ui.basic.pink.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkHover inset !important;
+ color: @pinkHover !important;
+}
+.ui.basic.pink.buttons .button:focus,
+.ui.basic.pink.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkFocus inset !important;
+ color: @pinkHover !important;
+}
+.ui.basic.pink.buttons .active.button,
+.ui.basic.pink.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkActive inset !important;
+ color: @pinkDown !important;
+}
+.ui.basic.pink.buttons .button:active,
+.ui.basic.pink.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkDown inset !important;
+ color: @pinkDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.pink.buttons .button,
+.ui.inverted.pink.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPink inset !important;
+ color: @lightPink;
+}
+.ui.inverted.pink.buttons .button:hover,
+.ui.inverted.pink.button:hover,
+.ui.inverted.pink.buttons .button:focus,
+.ui.inverted.pink.button:focus,
+.ui.inverted.pink.buttons .button.active,
+.ui.inverted.pink.button.active,
+.ui.inverted.pink.buttons .button:active,
+.ui.inverted.pink.button:active {
+ box-shadow: none !important;
+ color: @lightPinkTextColor;
+}
+.ui.inverted.pink.buttons .button:hover,
+.ui.inverted.pink.button:hover {
+ background-color: @lightPinkHover;
+}
+.ui.inverted.pink.buttons .button:focus,
+.ui.inverted.pink.button:focus {
+ background-color: @lightPinkFocus;
+}
+.ui.inverted.pink.buttons .active.button,
+.ui.inverted.pink.active.button {
+ background-color: @lightPinkActive;
+}
+.ui.inverted.pink.buttons .button:active,
+.ui.inverted.pink.button:active {
+ background-color: @lightPinkDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.pink.basic.buttons .button,
+.ui.inverted.pink.buttons .basic.button,
+.ui.inverted.pink.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.pink.basic.buttons .button:hover,
+.ui.inverted.pink.buttons .basic.button:hover,
+.ui.inverted.pink.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkHover inset !important;
+ color: @lightPink !important;
+}
+.ui.inverted.pink.basic.buttons .button:focus,
+.ui.inverted.pink.basic.buttons .button:focus,
+.ui.inverted.pink.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkFocus inset !important;
+ color: @lightPink !important;
+}
+.ui.inverted.pink.basic.buttons .active.button,
+.ui.inverted.pink.buttons .basic.active.button,
+.ui.inverted.pink.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkActive inset !important;
+ color: @lightPink !important;
+}
+.ui.inverted.pink.basic.buttons .button:active,
+.ui.inverted.pink.buttons .basic.button:active,
+.ui.inverted.pink.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkDown inset !important;
+ color: @lightPink !important;
+}
+
+
+/*--- Violet ---*/
+.ui.violet.buttons .button,
+.ui.violet.button {
+ background-color: @violet;
+ color: @violetTextColor;
+ text-shadow: @violetTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.violet.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.violet.buttons .button:hover,
+.ui.violet.button:hover {
+ background-color: @violetHover;
+ color: @violetTextColor;
+ text-shadow: @violetTextShadow;
+}
+.ui.violet.buttons .button:focus,
+.ui.violet.button:focus {
+ background-color: @violetFocus;
+ color: @violetTextColor;
+ text-shadow: @violetTextShadow;
+}
+.ui.violet.buttons .button:active,
+.ui.violet.button:active {
+ background-color: @violetDown;
+ color: @violetTextColor;
+ text-shadow: @violetTextShadow;
+}
+.ui.violet.buttons .active.button,
+.ui.violet.buttons .active.button:active,
+.ui.violet.active.button,
+.ui.violet.button .active.button:active {
+ background-color: @violetActive;
+ color: @violetTextColor;
+ text-shadow: @violetTextShadow;
+}
+
+/* Basic */
+.ui.basic.violet.buttons .button,
+.ui.basic.violet.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @violet inset !important;
+ color: @violet !important;
+}
+.ui.basic.violet.buttons .button:hover,
+.ui.basic.violet.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @violetHover inset !important;
+ color: @violetHover !important;
+}
+.ui.basic.violet.buttons .button:focus,
+.ui.basic.violet.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @violetFocus inset !important;
+ color: @violetHover !important;
+}
+.ui.basic.violet.buttons .active.button,
+.ui.basic.violet.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @violetActive inset !important;
+ color: @violetDown !important;
+}
+.ui.basic.violet.buttons .button:active,
+.ui.basic.violet.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @violetDown inset !important;
+ color: @violetDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.violet.buttons .button,
+.ui.inverted.violet.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightViolet inset !important;
+ color: @lightViolet;
+}
+.ui.inverted.violet.buttons .button:hover,
+.ui.inverted.violet.button:hover,
+.ui.inverted.violet.buttons .button:focus,
+.ui.inverted.violet.button:focus,
+.ui.inverted.violet.buttons .button.active,
+.ui.inverted.violet.button.active,
+.ui.inverted.violet.buttons .button:active,
+.ui.inverted.violet.button:active {
+ box-shadow: none !important;
+ color: @lightVioletTextColor;
+}
+.ui.inverted.violet.buttons .button:hover,
+.ui.inverted.violet.button:hover {
+ background-color: @lightVioletHover;
+}
+.ui.inverted.violet.buttons .button:focus,
+.ui.inverted.violet.button:focus {
+ background-color: @lightVioletFocus;
+}
+.ui.inverted.violet.buttons .active.button,
+.ui.inverted.violet.active.button {
+ background-color: @lightVioletActive;
+}
+.ui.inverted.violet.buttons .button:active,
+.ui.inverted.violet.button:active {
+ background-color: @lightVioletDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.violet.basic.buttons .button,
+.ui.inverted.violet.buttons .basic.button,
+.ui.inverted.violet.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.violet.basic.buttons .button:hover,
+.ui.inverted.violet.buttons .basic.button:hover,
+.ui.inverted.violet.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletHover inset !important;
+ color: @lightViolet !important;
+}
+.ui.inverted.violet.basic.buttons .button:focus,
+.ui.inverted.violet.basic.buttons .button:focus,
+.ui.inverted.violet.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletFocus inset !important;
+ color: @lightViolet !important;
+}
+.ui.inverted.violet.basic.buttons .active.button,
+.ui.inverted.violet.buttons .basic.active.button,
+.ui.inverted.violet.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletActive inset !important;
+ color: @lightViolet !important;
+}
+.ui.inverted.violet.basic.buttons .button:active,
+.ui.inverted.violet.buttons .basic.button:active,
+.ui.inverted.violet.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletDown inset !important;
+ color: @lightViolet !important;
+}
+
+/*--- Purple ---*/
+.ui.purple.buttons .button,
+.ui.purple.button {
+ background-color: @purple;
+ color: @purpleTextColor;
+ text-shadow: @purpleTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.purple.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.purple.buttons .button:hover,
+.ui.purple.button:hover {
+ background-color: @purpleHover;
+ color: @purpleTextColor;
+ text-shadow: @purpleTextShadow;
+}
+.ui.purple.buttons .button:focus,
+.ui.purple.button:focus {
+ background-color: @purpleFocus;
+ color: @purpleTextColor;
+ text-shadow: @purpleTextShadow;
+}
+.ui.purple.buttons .button:active,
+.ui.purple.button:active {
+ background-color: @purpleDown;
+ color: @purpleTextColor;
+ text-shadow: @purpleTextShadow;
+}
+.ui.purple.buttons .active.button,
+.ui.purple.buttons .active.button:active,
+.ui.purple.active.button,
+.ui.purple.button .active.button:active {
+ background-color: @purpleActive;
+ color: @purpleTextColor;
+ text-shadow: @purpleTextShadow;
+}
+
+/* Basic */
+.ui.basic.purple.buttons .button,
+.ui.basic.purple.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @purple inset !important;
+ color: @purple !important;
+}
+.ui.basic.purple.buttons .button:hover,
+.ui.basic.purple.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleHover inset !important;
+ color: @purpleHover !important;
+}
+.ui.basic.purple.buttons .button:focus,
+.ui.basic.purple.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleFocus inset !important;
+ color: @purpleHover !important;
+}
+.ui.basic.purple.buttons .active.button,
+.ui.basic.purple.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleActive inset !important;
+ color: @purpleDown !important;
+}
+.ui.basic.purple.buttons .button:active,
+.ui.basic.purple.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleDown inset !important;
+ color: @purpleDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.purple.buttons .button,
+.ui.inverted.purple.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPurple inset !important;
+ color: @lightPurple;
+}
+.ui.inverted.purple.buttons .button:hover,
+.ui.inverted.purple.button:hover,
+.ui.inverted.purple.buttons .button:focus,
+.ui.inverted.purple.button:focus,
+.ui.inverted.purple.buttons .button.active,
+.ui.inverted.purple.button.active,
+.ui.inverted.purple.buttons .button:active,
+.ui.inverted.purple.button:active {
+ box-shadow: none !important;
+ color: @lightPurpleTextColor;
+}
+.ui.inverted.purple.buttons .button:hover,
+.ui.inverted.purple.button:hover {
+ background-color: @lightPurpleHover;
+}
+.ui.inverted.purple.buttons .button:focus,
+.ui.inverted.purple.button:focus {
+ background-color: @lightPurpleFocus;
+}
+.ui.inverted.purple.buttons .active.button,
+.ui.inverted.purple.active.button {
+ background-color: @lightPurpleActive;
+}
+.ui.inverted.purple.buttons .button:active,
+.ui.inverted.purple.button:active {
+ background-color: @lightPurpleDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.purple.basic.buttons .button,
+.ui.inverted.purple.buttons .basic.button,
+.ui.inverted.purple.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.purple.basic.buttons .button:hover,
+.ui.inverted.purple.buttons .basic.button:hover,
+.ui.inverted.purple.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleHover inset !important;
+ color: @lightPurple !important;
+}
+.ui.inverted.purple.basic.buttons .button:focus,
+.ui.inverted.purple.basic.buttons .button:focus,
+.ui.inverted.purple.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleFocus inset !important;
+ color: @lightPurple !important;
+}
+.ui.inverted.purple.basic.buttons .active.button,
+.ui.inverted.purple.buttons .basic.active.button,
+.ui.inverted.purple.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleActive inset !important;
+ color: @lightPurple !important;
+}
+.ui.inverted.purple.basic.buttons .button:active,
+.ui.inverted.purple.buttons .basic.button:active,
+.ui.inverted.purple.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleDown inset !important;
+ color: @lightPurple !important;
+}
+
+/*--- Red ---*/
+.ui.red.buttons .button,
+.ui.red.button {
+ background-color: @red;
+ color: @redTextColor;
+ text-shadow: @redTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.red.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.red.buttons .button:hover,
+.ui.red.button:hover {
+ background-color: @redHover;
+ color: @redTextColor;
+ text-shadow: @redTextShadow;
+}
+.ui.red.buttons .button:focus,
+.ui.red.button:focus {
+ background-color: @redFocus;
+ color: @redTextColor;
+ text-shadow: @redTextShadow;
+}
+.ui.red.buttons .button:active,
+.ui.red.button:active {
+ background-color: @redDown;
+ color: @redTextColor;
+ text-shadow: @redTextShadow;
+}
+.ui.red.buttons .active.button,
+.ui.red.buttons .active.button:active,
+.ui.red.active.button,
+.ui.red.button .active.button:active {
+ background-color: @redActive;
+ color: @redTextColor;
+ text-shadow: @redTextShadow;
+}
+
+/* Basic */
+.ui.basic.red.buttons .button,
+.ui.basic.red.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @red inset !important;
+ color: @red !important;
+}
+.ui.basic.red.buttons .button:hover,
+.ui.basic.red.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @redHover inset !important;
+ color: @redHover !important;
+}
+.ui.basic.red.buttons .button:focus,
+.ui.basic.red.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @redFocus inset !important;
+ color: @redHover !important;
+}
+.ui.basic.red.buttons .active.button,
+.ui.basic.red.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @redActive inset !important;
+ color: @redDown !important;
+}
+.ui.basic.red.buttons .button:active,
+.ui.basic.red.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @redDown inset !important;
+ color: @redDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.red.buttons .button,
+.ui.inverted.red.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightRed inset !important;
+ color: @lightRed;
+}
+.ui.inverted.red.buttons .button:hover,
+.ui.inverted.red.button:hover,
+.ui.inverted.red.buttons .button:focus,
+.ui.inverted.red.button:focus,
+.ui.inverted.red.buttons .button.active,
+.ui.inverted.red.button.active,
+.ui.inverted.red.buttons .button:active,
+.ui.inverted.red.button:active {
+ box-shadow: none !important;
+ color: @lightRedTextColor;
+}
+.ui.inverted.red.buttons .button:hover,
+.ui.inverted.red.button:hover {
+ background-color: @lightRedHover;
+}
+.ui.inverted.red.buttons .button:focus,
+.ui.inverted.red.button:focus {
+ background-color: @lightRedFocus;
+}
+.ui.inverted.red.buttons .active.button,
+.ui.inverted.red.active.button {
+ background-color: @lightRedActive;
+}
+.ui.inverted.red.buttons .button:active,
+.ui.inverted.red.button:active {
+ background-color: @lightRedDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.red.basic.buttons .button,
+.ui.inverted.red.buttons .basic.button,
+.ui.inverted.red.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.red.basic.buttons .button:hover,
+.ui.inverted.red.buttons .basic.button:hover,
+.ui.inverted.red.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightRedHover inset !important;
+ color: @lightRed !important;
+}
+.ui.inverted.red.basic.buttons .button:focus,
+.ui.inverted.red.basic.buttons .button:focus,
+.ui.inverted.red.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightRedFocus inset !important;
+ color: @lightRed !important;
+}
+.ui.inverted.red.basic.buttons .active.button,
+.ui.inverted.red.buttons .basic.active.button,
+.ui.inverted.red.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightRedActive inset !important;
+ color: @lightRed !important;
+}
+.ui.inverted.red.basic.buttons .button:active,
+.ui.inverted.red.buttons .basic.button:active,
+.ui.inverted.red.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightRedDown inset !important;
+ color: @lightRed !important;
+}
+
+
+/*--- Teal ---*/
+.ui.teal.buttons .button,
+.ui.teal.button {
+ background-color: @teal;
+ color: @tealTextColor;
+ text-shadow: @tealTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.teal.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.teal.buttons .button:hover,
+.ui.teal.button:hover {
+ background-color: @tealHover;
+ color: @tealTextColor;
+ text-shadow: @tealTextShadow;
+}
+.ui.teal.buttons .button:focus,
+.ui.teal.button:focus {
+ background-color: @tealFocus;
+ color: @tealTextColor;
+ text-shadow: @tealTextShadow;
+}
+.ui.teal.buttons .button:active,
+.ui.teal.button:active {
+ background-color: @tealDown;
+ color: @tealTextColor;
+ text-shadow: @tealTextShadow;
+}
+.ui.teal.buttons .active.button,
+.ui.teal.buttons .active.button:active,
+.ui.teal.active.button,
+.ui.teal.button .active.button:active {
+ background-color: @tealActive;
+ color: @tealTextColor;
+ text-shadow: @tealTextShadow;
+}
+
+/* Basic */
+.ui.basic.teal.buttons .button,
+.ui.basic.teal.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @teal inset !important;
+ color: @teal !important;
+}
+.ui.basic.teal.buttons .button:hover,
+.ui.basic.teal.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @tealHover inset !important;
+ color: @tealHover !important;
+}
+.ui.basic.teal.buttons .button:focus,
+.ui.basic.teal.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @tealFocus inset !important;
+ color: @tealHover !important;
+}
+.ui.basic.teal.buttons .active.button,
+.ui.basic.teal.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @tealActive inset !important;
+ color: @tealDown !important;
+}
+.ui.basic.teal.buttons .button:active,
+.ui.basic.teal.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @tealDown inset !important;
+ color: @tealDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.teal.buttons .button,
+.ui.inverted.teal.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightTeal inset !important;
+ color: @lightTeal;
+}
+.ui.inverted.teal.buttons .button:hover,
+.ui.inverted.teal.button:hover,
+.ui.inverted.teal.buttons .button:focus,
+.ui.inverted.teal.button:focus,
+.ui.inverted.teal.buttons .button.active,
+.ui.inverted.teal.button.active,
+.ui.inverted.teal.buttons .button:active,
+.ui.inverted.teal.button:active {
+ box-shadow: none !important;
+ color: @lightTealTextColor;
+}
+.ui.inverted.teal.buttons .button:hover,
+.ui.inverted.teal.button:hover {
+ background-color: @lightTealHover;
+}
+.ui.inverted.teal.buttons .button:focus,
+.ui.inverted.teal.button:focus {
+ background-color: @lightTealFocus;
+}
+.ui.inverted.teal.buttons .active.button,
+.ui.inverted.teal.active.button {
+ background-color: @lightTealActive;
+}
+.ui.inverted.teal.buttons .button:active,
+.ui.inverted.teal.button:active {
+ background-color: @lightTealDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.teal.basic.buttons .button,
+.ui.inverted.teal.buttons .basic.button,
+.ui.inverted.teal.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.teal.basic.buttons .button:hover,
+.ui.inverted.teal.buttons .basic.button:hover,
+.ui.inverted.teal.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightTealHover inset !important;
+ color: @lightTeal !important;
+}
+.ui.inverted.teal.basic.buttons .button:focus,
+.ui.inverted.teal.basic.buttons .button:focus,
+.ui.inverted.teal.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightTealFocus inset !important;
+ color: @lightTeal !important;
+}
+.ui.inverted.teal.basic.buttons .active.button,
+.ui.inverted.teal.buttons .basic.active.button,
+.ui.inverted.teal.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightTealActive inset !important;
+ color: @lightTeal !important;
+}
+.ui.inverted.teal.basic.buttons .button:active,
+.ui.inverted.teal.buttons .basic.button:active,
+.ui.inverted.teal.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightTealDown inset !important;
+ color: @lightTeal !important;
+}
+
+
+/*--- Olive ---*/
+.ui.olive.buttons .button,
+.ui.olive.button {
+ background-color: @olive;
+ color: @oliveTextColor;
+ text-shadow: @oliveTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.olive.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.olive.buttons .button:hover,
+.ui.olive.button:hover {
+ background-color: @oliveHover;
+ color: @oliveTextColor;
+ text-shadow: @oliveTextShadow;
+}
+.ui.olive.buttons .button:focus,
+.ui.olive.button:focus {
+ background-color: @oliveFocus;
+ color: @oliveTextColor;
+ text-shadow: @oliveTextShadow;
+}
+.ui.olive.buttons .button:active,
+.ui.olive.button:active {
+ background-color: @oliveDown;
+ color: @oliveTextColor;
+ text-shadow: @oliveTextShadow;
+}
+.ui.olive.buttons .active.button,
+.ui.olive.buttons .active.button:active,
+.ui.olive.active.button,
+.ui.olive.button .active.button:active {
+ background-color: @oliveActive;
+ color: @oliveTextColor;
+ text-shadow: @oliveTextShadow;
+}
+
+/* Basic */
+.ui.basic.olive.buttons .button,
+.ui.basic.olive.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @olive inset !important;
+ color: @olive !important;
+}
+.ui.basic.olive.buttons .button:hover,
+.ui.basic.olive.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveHover inset !important;
+ color: @oliveHover !important;
+}
+.ui.basic.olive.buttons .button:focus,
+.ui.basic.olive.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveFocus inset !important;
+ color: @oliveHover !important;
+}
+.ui.basic.olive.buttons .active.button,
+.ui.basic.olive.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveActive inset !important;
+ color: @oliveDown !important;
+}
+.ui.basic.olive.buttons .button:active,
+.ui.basic.olive.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveDown inset !important;
+ color: @oliveDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.olive.buttons .button,
+.ui.inverted.olive.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOlive inset !important;
+ color: @lightOlive;
+}
+.ui.inverted.olive.buttons .button:hover,
+.ui.inverted.olive.button:hover,
+.ui.inverted.olive.buttons .button:focus,
+.ui.inverted.olive.button:focus,
+.ui.inverted.olive.buttons .button.active,
+.ui.inverted.olive.button.active,
+.ui.inverted.olive.buttons .button:active,
+.ui.inverted.olive.button:active {
+ box-shadow: none !important;
+ color: @lightOliveTextColor;
+}
+.ui.inverted.olive.buttons .button:hover,
+.ui.inverted.olive.button:hover {
+ background-color: @lightOliveHover;
+}
+.ui.inverted.olive.buttons .button:focus,
+.ui.inverted.olive.button:focus {
+ background-color: @lightOliveFocus;
+}
+.ui.inverted.olive.buttons .active.button,
+.ui.inverted.olive.active.button {
+ background-color: @lightOliveActive;
+}
+.ui.inverted.olive.buttons .button:active,
+.ui.inverted.olive.button:active {
+ background-color: @lightOliveDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.olive.basic.buttons .button,
+.ui.inverted.olive.buttons .basic.button,
+.ui.inverted.olive.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.olive.basic.buttons .button:hover,
+.ui.inverted.olive.buttons .basic.button:hover,
+.ui.inverted.olive.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveHover inset !important;
+ color: @lightOlive !important;
+}
+.ui.inverted.olive.basic.buttons .button:focus,
+.ui.inverted.olive.basic.buttons .button:focus,
+.ui.inverted.olive.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveFocus inset !important;
+ color: @lightOlive !important;
+}
+.ui.inverted.olive.basic.buttons .active.button,
+.ui.inverted.olive.buttons .basic.active.button,
+.ui.inverted.olive.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveActive inset !important;
+ color: @lightOlive !important;
+}
+.ui.inverted.olive.basic.buttons .button:active,
+.ui.inverted.olive.buttons .basic.button:active,
+.ui.inverted.olive.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveDown inset !important;
+ color: @lightOlive !important;
+}
+
+/*--- Yellow ---*/
+.ui.yellow.buttons .button,
+.ui.yellow.button {
+ background-color: @yellow;
+ color: @yellowTextColor;
+ text-shadow: @yellowTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.yellow.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.yellow.buttons .button:hover,
+.ui.yellow.button:hover {
+ background-color: @yellowHover;
+ color: @yellowTextColor;
+ text-shadow: @yellowTextShadow;
+}
+.ui.yellow.buttons .button:focus,
+.ui.yellow.button:focus {
+ background-color: @yellowFocus;
+ color: @yellowTextColor;
+ text-shadow: @yellowTextShadow;
+}
+.ui.yellow.buttons .button:active,
+.ui.yellow.button:active {
+ background-color: @yellowDown;
+ color: @yellowTextColor;
+ text-shadow: @yellowTextShadow;
+}
+.ui.yellow.buttons .active.button,
+.ui.yellow.buttons .active.button:active,
+.ui.yellow.active.button,
+.ui.yellow.button .active.button:active {
+ background-color: @yellowActive;
+ color: @yellowTextColor;
+ text-shadow: @yellowTextShadow;
+}
+
+/* Basic */
+.ui.basic.yellow.buttons .button,
+.ui.basic.yellow.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @yellow inset !important;
+ color: @yellow !important;
+}
+.ui.basic.yellow.buttons .button:hover,
+.ui.basic.yellow.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowHover inset !important;
+ color: @yellowHover !important;
+}
+.ui.basic.yellow.buttons .button:focus,
+.ui.basic.yellow.button:focus {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowFocus inset !important;
+ color: @yellowHover !important;
+}
+.ui.basic.yellow.buttons .active.button,
+.ui.basic.yellow.active.button {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowActive inset !important;
+ color: @yellowDown !important;
+}
+.ui.basic.yellow.buttons .button:active,
+.ui.basic.yellow.button:active {
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowDown inset !important;
+ color: @yellowDown !important;
+}
+.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {
+ margin-left: -@basicColoredBorderSize;
+}
+
+/* Inverted */
+.ui.inverted.yellow.buttons .button,
+.ui.inverted.yellow.button {
+ background-color: transparent;
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightYellow inset !important;
+ color: @lightYellow;
+}
+.ui.inverted.yellow.buttons .button:hover,
+.ui.inverted.yellow.button:hover,
+.ui.inverted.yellow.buttons .button:focus,
+.ui.inverted.yellow.button:focus,
+.ui.inverted.yellow.buttons .button.active,
+.ui.inverted.yellow.button.active,
+.ui.inverted.yellow.buttons .button:active,
+.ui.inverted.yellow.button:active {
+ box-shadow: none !important;
+ color: @lightYellowTextColor;
+}
+.ui.inverted.yellow.buttons .button:hover,
+.ui.inverted.yellow.button:hover {
+ background-color: @lightYellowHover;
+}
+.ui.inverted.yellow.buttons .button:focus,
+.ui.inverted.yellow.button:focus {
+ background-color: @lightYellowFocus;
+}
+.ui.inverted.yellow.buttons .active.button,
+.ui.inverted.yellow.active.button {
+ background-color: @lightYellowActive;
+}
+.ui.inverted.yellow.buttons .button:active,
+.ui.inverted.yellow.button:active {
+ background-color: @lightYellowDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.yellow.basic.buttons .button,
+.ui.inverted.yellow.buttons .basic.button,
+.ui.inverted.yellow.basic.button {
+ background-color: transparent;
+ box-shadow: @basicInvertedBoxShadow !important;
+ color: @white !important;
+}
+.ui.inverted.yellow.basic.buttons .button:hover,
+.ui.inverted.yellow.buttons .basic.button:hover,
+.ui.inverted.yellow.basic.button:hover {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowHover inset !important;
+ color: @lightYellow !important;
+}
+.ui.inverted.yellow.basic.buttons .button:focus,
+.ui.inverted.yellow.basic.buttons .button:focus,
+.ui.inverted.yellow.basic.button:focus {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowFocus inset !important;
+ color: @lightYellow !important;
+}
+.ui.inverted.yellow.basic.buttons .active.button,
+.ui.inverted.yellow.buttons .basic.active.button,
+.ui.inverted.yellow.basic.active.button {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowActive inset !important;
+ color: @lightYellow !important;
+}
+.ui.inverted.yellow.basic.buttons .button:active,
+.ui.inverted.yellow.buttons .basic.button:active,
+.ui.inverted.yellow.basic.button:active {
+ box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowDown inset !important;
+ color: @lightYellow !important;
+}
+
+
+/*-------------------
+ Primary
+--------------------*/
+
+/*--- Standard ---*/
+.ui.primary.buttons .button,
+.ui.primary.button {
+ background-color: @primaryColor;
+ color: @primaryTextColor;
+ text-shadow: @primaryTextShadow;
+ background-image: @coloredBackgroundImage;
+}
+.ui.primary.button {
+ box-shadow: @coloredBoxShadow;
+}
+.ui.primary.buttons .button:hover,
+.ui.primary.button:hover {
+ background-color: @primaryColorHover;
+ color: @primaryTextColor;
+ text-shadow: @primaryTextShadow;
+}
+.ui.primary.buttons .button:focus,
+.ui.primary.button:focus {
+ background-color: @primaryColorFocus;
+ color: @primaryTextColor;
+ text-shadow: @primaryTextShadow;
+}
+.ui.primary.buttons .button:active,
+.ui.primary.button:active {
+ background-color: @primaryColorDown;
+ color: @primaryTextColor;
+ text-shadow: @primaryTextShadow;
+}
+.ui.primary.buttons .active.button,
+.ui.primary.buttons .active.button:active,
+.ui.primary.active.button,
+.ui.primary.button .active.button:active {
+ background-color: @primaryColorActive;
+ color: @primaryTextColor;
+ text-shadow: @primaryTextShadow;
+}
+
+/* Basic */
+.ui.basic.primary.buttons .button,
+.ui.basic.primary.button {
+ box-shadow: 0px 0px 0px @basicBorderSize @primaryColor inset !important;
+ color: @primaryColor !important;
+}
+.ui.basic.primary.buttons .button:hover,
+.ui.basic.primary.button:hover {
+ background: transparent !important;
+ box-shadow: 0px 0px 0px @basicColoredBorderSize @primaryColorHover inset !important;
+ color: @primaryColorHover !important;
+}
+.ui.basic.primary.buttons .button:focus,
+.ui.basic.primary.button:focus {
+ backg
<TRUNCATED>
[28/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/tab.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/tab.js b/semantic/src/definitions/modules/tab.js
new file mode 100644
index 0000000..ae958e0
--- /dev/null
+++ b/semantic/src/definitions/modules/tab.js
@@ -0,0 +1,928 @@
+/*!
+ * # Semantic UI - Tab
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.tab = function(parameters) {
+
+ var
+ // use window context if none specified
+ $allModules = $.isFunction(this)
+ ? $(window)
+ : $(this),
+
+ moduleSelector = $allModules.selector || '',
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ initializedHistory = false,
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.tab.settings, parameters)
+ : $.extend({}, $.fn.tab.settings),
+
+ className = settings.className,
+ metadata = settings.metadata,
+ selector = settings.selector,
+ error = settings.error,
+
+ eventNamespace = '.' + settings.namespace,
+ moduleNamespace = 'module-' + settings.namespace,
+
+ $module = $(this),
+ $context,
+ $tabs,
+
+ cache = {},
+ firstLoad = true,
+ recursionDepth = 0,
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ activeTabPath,
+ parameterArray,
+ module,
+
+ historyEvent
+
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.debug('Initializing tab menu item', $module);
+ module.fix.callbacks();
+ module.determineTabs();
+
+ module.debug('Determining tabs', settings.context, $tabs);
+ // set up automatic routing
+ if(settings.auto) {
+ module.set.auto();
+ }
+ module.bind.events();
+
+ if(settings.history && !initializedHistory) {
+ module.initializeHistory();
+ initializedHistory = true;
+ }
+
+ module.instantiate();
+ },
+
+ instantiate: function () {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.debug('Destroying tabs', $module);
+ $module
+ .removeData(moduleNamespace)
+ .off(eventNamespace)
+ ;
+ },
+
+ bind: {
+ events: function() {
+ // if using $.tab don't add events
+ if( !$.isWindow( element ) ) {
+ module.debug('Attaching tab activation events to element', $module);
+ $module
+ .on('click' + eventNamespace, module.event.click)
+ ;
+ }
+ }
+ },
+
+ determineTabs: function() {
+ var
+ $reference
+ ;
+
+ // determine tab context
+ if(settings.context === 'parent') {
+ if($module.closest(selector.ui).length > 0) {
+ $reference = $module.closest(selector.ui);
+ module.verbose('Using closest UI element as parent', $reference);
+ }
+ else {
+ $reference = $module;
+ }
+ $context = $reference.parent();
+ module.verbose('Determined parent element for creating context', $context);
+ }
+ else if(settings.context) {
+ $context = $(settings.context);
+ module.verbose('Using selector for tab context', settings.context, $context);
+ }
+ else {
+ $context = $('body');
+ }
+ // find tabs
+ if(settings.childrenOnly) {
+ $tabs = $context.children(selector.tabs);
+ module.debug('Searching tab context children for tabs', $context, $tabs);
+ }
+ else {
+ $tabs = $context.find(selector.tabs);
+ module.debug('Searching tab context for tabs', $context, $tabs);
+ }
+ },
+
+ fix: {
+ callbacks: function() {
+ if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {
+ if(parameters.onTabLoad) {
+ parameters.onLoad = parameters.onTabLoad;
+ delete parameters.onTabLoad;
+ module.error(error.legacyLoad, parameters.onLoad);
+ }
+ if(parameters.onTabInit) {
+ parameters.onFirstLoad = parameters.onTabInit;
+ delete parameters.onTabInit;
+ module.error(error.legacyInit, parameters.onFirstLoad);
+ }
+ settings = $.extend(true, {}, $.fn.tab.settings, parameters);
+ }
+ }
+ },
+
+ initializeHistory: function() {
+ module.debug('Initializing page state');
+ if( $.address === undefined ) {
+ module.error(error.state);
+ return false;
+ }
+ else {
+ if(settings.historyType == 'state') {
+ module.debug('Using HTML5 to manage state');
+ if(settings.path !== false) {
+ $.address
+ .history(true)
+ .state(settings.path)
+ ;
+ }
+ else {
+ module.error(error.path);
+ return false;
+ }
+ }
+ $.address
+ .bind('change', module.event.history.change)
+ ;
+ }
+ },
+
+ event: {
+ click: function(event) {
+ var
+ tabPath = $(this).data(metadata.tab)
+ ;
+ if(tabPath !== undefined) {
+ if(settings.history) {
+ module.verbose('Updating page state', event);
+ $.address.value(tabPath);
+ }
+ else {
+ module.verbose('Changing tab', event);
+ module.changeTab(tabPath);
+ }
+ event.preventDefault();
+ }
+ else {
+ module.debug('No tab specified');
+ }
+ },
+ history: {
+ change: function(event) {
+ var
+ tabPath = event.pathNames.join('/') || module.get.initialPath(),
+ pageTitle = settings.templates.determineTitle(tabPath) || false
+ ;
+ module.performance.display();
+ module.debug('History change event', tabPath, event);
+ historyEvent = event;
+ if(tabPath !== undefined) {
+ module.changeTab(tabPath);
+ }
+ if(pageTitle) {
+ $.address.title(pageTitle);
+ }
+ }
+ }
+ },
+
+ refresh: function() {
+ if(activeTabPath) {
+ module.debug('Refreshing tab', activeTabPath);
+ module.changeTab(activeTabPath);
+ }
+ },
+
+ cache: {
+
+ read: function(cacheKey) {
+ return (cacheKey !== undefined)
+ ? cache[cacheKey]
+ : false
+ ;
+ },
+ add: function(cacheKey, content) {
+ cacheKey = cacheKey || activeTabPath;
+ module.debug('Adding cached content for', cacheKey);
+ cache[cacheKey] = content;
+ },
+ remove: function(cacheKey) {
+ cacheKey = cacheKey || activeTabPath;
+ module.debug('Removing cached content for', cacheKey);
+ delete cache[cacheKey];
+ }
+ },
+
+ set: {
+ auto: function() {
+ var
+ url = (typeof settings.path == 'string')
+ ? settings.path.replace(/\/$/, '') + '/{$tab}'
+ : '/{$tab}'
+ ;
+ module.verbose('Setting up automatic tab retrieval from server', url);
+ if($.isPlainObject(settings.apiSettings)) {
+ settings.apiSettings.url = url;
+ }
+ else {
+ settings.apiSettings = {
+ url: url
+ };
+ }
+ },
+ loading: function(tabPath) {
+ var
+ $tab = module.get.tabElement(tabPath),
+ isLoading = $tab.hasClass(className.loading)
+ ;
+ if(!isLoading) {
+ module.verbose('Setting loading state for', $tab);
+ $tab
+ .addClass(className.loading)
+ .siblings($tabs)
+ .removeClass(className.active + ' ' + className.loading)
+ ;
+ if($tab.length > 0) {
+ settings.onRequest.call($tab[0], tabPath);
+ }
+ }
+ },
+ state: function(state) {
+ $.address.value(state);
+ }
+ },
+
+ changeTab: function(tabPath) {
+ var
+ pushStateAvailable = (window.history && window.history.pushState),
+ shouldIgnoreLoad = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),
+ remoteContent = (settings.auto || $.isPlainObject(settings.apiSettings) ),
+ // only add default path if not remote content
+ pathArray = (remoteContent && !shouldIgnoreLoad)
+ ? module.utilities.pathToArray(tabPath)
+ : module.get.defaultPathArray(tabPath)
+ ;
+ tabPath = module.utilities.arrayToPath(pathArray);
+ $.each(pathArray, function(index, tab) {
+ var
+ currentPathArray = pathArray.slice(0, index + 1),
+ currentPath = module.utilities.arrayToPath(currentPathArray),
+
+ isTab = module.is.tab(currentPath),
+ isLastIndex = (index + 1 == pathArray.length),
+
+ $tab = module.get.tabElement(currentPath),
+ $anchor,
+ nextPathArray,
+ nextPath,
+ isLastTab
+ ;
+ module.verbose('Looking for tab', tab);
+ if(isTab) {
+ module.verbose('Tab was found', tab);
+ // scope up
+ activeTabPath = currentPath;
+ parameterArray = module.utilities.filterArray(pathArray, currentPathArray);
+
+ if(isLastIndex) {
+ isLastTab = true;
+ }
+ else {
+ nextPathArray = pathArray.slice(0, index + 2);
+ nextPath = module.utilities.arrayToPath(nextPathArray);
+ isLastTab = ( !module.is.tab(nextPath) );
+ if(isLastTab) {
+ module.verbose('Tab parameters found', nextPathArray);
+ }
+ }
+ if(isLastTab && remoteContent) {
+ if(!shouldIgnoreLoad) {
+ module.activate.navigation(currentPath);
+ module.fetch.content(currentPath, tabPath);
+ }
+ else {
+ module.debug('Ignoring remote content on first tab load', currentPath);
+ firstLoad = false;
+ module.cache.add(tabPath, $tab.html());
+ module.activate.all(currentPath);
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
+ }
+ return false;
+ }
+ else {
+ module.debug('Opened local tab', currentPath);
+ module.activate.all(currentPath);
+ if( !module.cache.read(currentPath) ) {
+ module.cache.add(currentPath, true);
+ module.debug('First time tab loaded calling tab init');
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
+ }
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
+ }
+
+ }
+ else if(tabPath.search('/') == -1 && tabPath !== '') {
+ // look for in page anchor
+ $anchor = $('#' + tabPath + ', a[name="' + tabPath + '"]');
+ currentPath = $anchor.closest('[data-tab]').data(metadata.tab);
+ $tab = module.get.tabElement(currentPath);
+ // if anchor exists use parent tab
+ if($anchor && $anchor.length > 0 && currentPath) {
+ module.debug('Anchor link used, opening parent tab', $tab, $anchor);
+ if( !$tab.hasClass(className.active) ) {
+ setTimeout(function() {
+ module.scrollTo($anchor);
+ }, 0);
+ }
+ module.activate.all(currentPath);
+ if( !module.cache.read(currentPath) ) {
+ module.cache.add(currentPath, true);
+ module.debug('First time tab loaded calling tab init');
+ settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);
+ }
+ settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);
+ return false;
+ }
+ }
+ else {
+ module.error(error.missingTab, $module, $context, currentPath);
+ return false;
+ }
+ });
+ },
+
+ scrollTo: function($element) {
+ var
+ scrollOffset = ($element && $element.length > 0)
+ ? $element.offset().top
+ : false
+ ;
+ if(scrollOffset !== false) {
+ module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);
+ $(document).scrollTop(scrollOffset);
+ }
+ },
+
+ update: {
+ content: function(tabPath, html, evaluateScripts) {
+ var
+ $tab = module.get.tabElement(tabPath),
+ tab = $tab[0]
+ ;
+ evaluateScripts = (evaluateScripts !== undefined)
+ ? evaluateScripts
+ : settings.evaluateScripts
+ ;
+ if(evaluateScripts) {
+ module.debug('Updating HTML and evaluating inline scripts', tabPath, html);
+ $tab.html(html);
+ }
+ else {
+ module.debug('Updating HTML', tabPath, html);
+ tab.innerHTML = html;
+ }
+ }
+ },
+
+ fetch: {
+
+ content: function(tabPath, fullTabPath) {
+ var
+ $tab = module.get.tabElement(tabPath),
+ apiSettings = {
+ dataType : 'html',
+ encodeParameters : false,
+ on : 'now',
+ cache : settings.alwaysRefresh,
+ headers : {
+ 'X-Remote': true
+ },
+ onSuccess : function(response) {
+ if(settings.cacheType == 'response') {
+ module.cache.add(fullTabPath, response);
+ }
+ module.update.content(tabPath, response);
+ if(tabPath == activeTabPath) {
+ module.debug('Content loaded', tabPath);
+ module.activate.tab(tabPath);
+ }
+ else {
+ module.debug('Content loaded in background', tabPath);
+ }
+ settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);
+ settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
+ if(settings.cacheType != 'response') {
+ module.cache.add(fullTabPath, $tab.html());
+ }
+ },
+ urlData: {
+ tab: fullTabPath
+ }
+ },
+ request = $tab.api('get request') || false,
+ existingRequest = ( request && request.state() === 'pending' ),
+ requestSettings,
+ cachedContent
+ ;
+
+ fullTabPath = fullTabPath || tabPath;
+ cachedContent = module.cache.read(fullTabPath);
+
+
+ if(settings.cache && cachedContent) {
+ module.activate.tab(tabPath);
+ module.debug('Adding cached content', fullTabPath);
+ if(settings.evaluateScripts == 'once') {
+ module.update.content(tabPath, cachedContent, false);
+ }
+ else {
+ module.update.content(tabPath, cachedContent);
+ }
+ settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);
+ }
+ else if(existingRequest) {
+ module.set.loading(tabPath);
+ module.debug('Content is already loading', fullTabPath);
+ }
+ else if($.api !== undefined) {
+ requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);
+ module.debug('Retrieving remote content', fullTabPath, requestSettings);
+ module.set.loading(tabPath);
+ $tab.api(requestSettings);
+ }
+ else {
+ module.error(error.api);
+ }
+ }
+ },
+
+ activate: {
+ all: function(tabPath) {
+ module.activate.tab(tabPath);
+ module.activate.navigation(tabPath);
+ },
+ tab: function(tabPath) {
+ var
+ $tab = module.get.tabElement(tabPath),
+ $deactiveTabs = (settings.deactivate == 'siblings')
+ ? $tab.siblings($tabs)
+ : $tabs.not($tab),
+ isActive = $tab.hasClass(className.active)
+ ;
+ module.verbose('Showing tab content for', $tab);
+ if(!isActive) {
+ $tab
+ .addClass(className.active)
+ ;
+ $deactiveTabs
+ .removeClass(className.active + ' ' + className.loading)
+ ;
+ if($tab.length > 0) {
+ settings.onVisible.call($tab[0], tabPath);
+ }
+ }
+ },
+ navigation: function(tabPath) {
+ var
+ $navigation = module.get.navElement(tabPath),
+ $deactiveNavigation = (settings.deactivate == 'siblings')
+ ? $navigation.siblings($allModules)
+ : $allModules.not($navigation),
+ isActive = $navigation.hasClass(className.active)
+ ;
+ module.verbose('Activating tab navigation for', $navigation, tabPath);
+ if(!isActive) {
+ $navigation
+ .addClass(className.active)
+ ;
+ $deactiveNavigation
+ .removeClass(className.active + ' ' + className.loading)
+ ;
+ }
+ }
+ },
+
+ deactivate: {
+ all: function() {
+ module.deactivate.navigation();
+ module.deactivate.tabs();
+ },
+ navigation: function() {
+ $allModules
+ .removeClass(className.active)
+ ;
+ },
+ tabs: function() {
+ $tabs
+ .removeClass(className.active + ' ' + className.loading)
+ ;
+ }
+ },
+
+ is: {
+ tab: function(tabName) {
+ return (tabName !== undefined)
+ ? ( module.get.tabElement(tabName).length > 0 )
+ : false
+ ;
+ }
+ },
+
+ get: {
+ initialPath: function() {
+ return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);
+ },
+ path: function() {
+ return $.address.value();
+ },
+ // adds default tabs to tab path
+ defaultPathArray: function(tabPath) {
+ return module.utilities.pathToArray( module.get.defaultPath(tabPath) );
+ },
+ defaultPath: function(tabPath) {
+ var
+ $defaultNav = $allModules.filter('[data-' + metadata.tab + '^="' + tabPath + '/"]').eq(0),
+ defaultTab = $defaultNav.data(metadata.tab) || false
+ ;
+ if( defaultTab ) {
+ module.debug('Found default tab', defaultTab);
+ if(recursionDepth < settings.maxDepth) {
+ recursionDepth++;
+ return module.get.defaultPath(defaultTab);
+ }
+ module.error(error.recursion);
+ }
+ else {
+ module.debug('No default tabs found for', tabPath, $tabs);
+ }
+ recursionDepth = 0;
+ return tabPath;
+ },
+ navElement: function(tabPath) {
+ tabPath = tabPath || activeTabPath;
+ return $allModules.filter('[data-' + metadata.tab + '="' + tabPath + '"]');
+ },
+ tabElement: function(tabPath) {
+ var
+ $fullPathTab,
+ $simplePathTab,
+ tabPathArray,
+ lastTab
+ ;
+ tabPath = tabPath || activeTabPath;
+ tabPathArray = module.utilities.pathToArray(tabPath);
+ lastTab = module.utilities.last(tabPathArray);
+ $fullPathTab = $tabs.filter('[data-' + metadata.tab + '="' + tabPath + '"]');
+ $simplePathTab = $tabs.filter('[data-' + metadata.tab + '="' + lastTab + '"]');
+ return ($fullPathTab.length > 0)
+ ? $fullPathTab
+ : $simplePathTab
+ ;
+ },
+ tab: function() {
+ return activeTabPath;
+ }
+ },
+
+ utilities: {
+ filterArray: function(keepArray, removeArray) {
+ return $.grep(keepArray, function(keepValue) {
+ return ( $.inArray(keepValue, removeArray) == -1);
+ });
+ },
+ last: function(array) {
+ return $.isArray(array)
+ ? array[ array.length - 1]
+ : false
+ ;
+ },
+ pathToArray: function(pathName) {
+ if(pathName === undefined) {
+ pathName = activeTabPath;
+ }
+ return typeof pathName == 'string'
+ ? pathName.split('/')
+ : [pathName]
+ ;
+ },
+ arrayToPath: function(pathArray) {
+ return $.isArray(pathArray)
+ ? pathArray.join('/')
+ : false
+ ;
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+
+};
+
+// shortcut for tabbed content with no defined navigation
+$.tab = function() {
+ $(window).tab.apply(this, arguments);
+};
+
+$.fn.tab.settings = {
+
+ name : 'Tab',
+ namespace : 'tab',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ auto : false, // uses pjax style endpoints fetching content from same url with remote-content headers
+ history : false, // use browser history
+ historyType : 'hash', // #/ or html5 state
+ path : false, // base path of url
+
+ context : false, // specify a context that tabs must appear inside
+ childrenOnly : false, // use only tabs that are children of context
+ maxDepth : 25, // max depth a tab can be nested
+
+ deactivate : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together
+
+ alwaysRefresh : false, // load tab content new every tab click
+ cache : true, // cache the content requests to pull locally
+ cacheType : 'response', // Whether to cache exact response, or to html cache contents after scripts execute
+ ignoreFirstLoad : false, // don't load remote content on first load
+
+ apiSettings : false, // settings for api call
+ evaluateScripts : 'once', // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content
+
+ onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded
+ onLoad : function(tabPath, parameterArray, historyEvent) {}, // called on every load
+ onVisible : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible
+ onRequest : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content
+
+ templates : {
+ determineTitle: function(tabArray) {} // returns page title for path
+ },
+
+ error: {
+ api : 'You attempted to load content without API module',
+ method : 'The method you called is not defined',
+ missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',
+ noContent : 'The tab you specified is missing a content url.',
+ path : 'History enabled, but no path was specified',
+ recursion : 'Max recursive depth reached',
+ legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',
+ legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',
+ state : 'History requires Asual\'s Address library <https://github.com/asual/jquery-address>'
+ },
+
+ metadata : {
+ tab : 'tab',
+ loaded : 'loaded',
+ promise: 'promise'
+ },
+
+ className : {
+ loading : 'loading',
+ active : 'active'
+ },
+
+ selector : {
+ tabs : '.ui.tab',
+ ui : '.ui'
+ }
+
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/tab.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/tab.less b/semantic/src/definitions/modules/tab.less
new file mode 100755
index 0000000..3f3ba09
--- /dev/null
+++ b/semantic/src/definitions/modules/tab.less
@@ -0,0 +1,94 @@
+/*!
+ * # Semantic UI - Tab
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'tab';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ UI Tabs
+*******************************/
+
+.ui.tab {
+ display: none;
+}
+
+/*******************************
+ States
+*******************************/
+
+/*--------------------
+ Active
+---------------------*/
+
+.ui.tab.active,
+.ui.tab.open {
+ display: block;
+}
+
+/*--------------------
+ Loading
+---------------------*/
+
+.ui.tab.loading {
+ position: relative;
+ overflow: hidden;
+ display: block;
+ min-height: @loadingMinHeight;
+}
+.ui.tab.loading * {
+ position: @loadingContentPosition !important;
+ left: @loadingContentOffset !important;
+}
+
+.ui.tab.loading:before,
+.ui.tab.loading.segment:before {
+ position: absolute;
+ content: '';
+ top: @loaderDistanceFromTop;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ border-radius: @circularRadius;
+ border: @loaderLineWidth solid @loaderFillColor;
+}
+.ui.tab.loading:after,
+.ui.tab.loading.segment:after {
+ position: absolute;
+ content: '';
+ top: @loaderDistanceFromTop;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ animation: button-spin @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @loaderLineColor transparent transparent;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+
+ box-shadow: 0px 0px 0px 1px transparent;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/transition.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/transition.js b/semantic/src/definitions/modules/transition.js
new file mode 100644
index 0000000..fc75ec8
--- /dev/null
+++ b/semantic/src/definitions/modules/transition.js
@@ -0,0 +1,1090 @@
+/*!
+ * # Semantic UI - Transition
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.transition = function() {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ moduleArguments = arguments,
+ query = moduleArguments[0],
+ queryArguments = [].slice.call(arguments, 1),
+ methodInvoked = (typeof query === 'string'),
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); },
+
+ returnedValue
+ ;
+ $allModules
+ .each(function(index) {
+ var
+ $module = $(this),
+ element = this,
+
+ // set at run time
+ settings,
+ instance,
+
+ error,
+ className,
+ metadata,
+ animationEnd,
+ animationName,
+
+ namespace,
+ moduleNamespace,
+ eventNamespace,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+
+ // get full settings
+ settings = module.get.settings.apply(element, moduleArguments);
+
+ // shorthand
+ className = settings.className;
+ error = settings.error;
+ metadata = settings.metadata;
+
+ // define namespace
+ eventNamespace = '.' + settings.namespace;
+ moduleNamespace = 'module-' + settings.namespace;
+ instance = $module.data(moduleNamespace) || module;
+
+ // get vendor specific events
+ animationEnd = module.get.animationEndEvent();
+
+ if(methodInvoked) {
+ methodInvoked = module.invoke(query);
+ }
+
+ // method not invoked, lets run an animation
+ if(methodInvoked === false) {
+ module.verbose('Converted arguments into settings object', settings);
+ if(settings.interval) {
+ module.delay(settings.animate);
+ }
+ else {
+ module.animate();
+ }
+ module.instantiate();
+ }
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, instance)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module for', element);
+ $module
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ refresh: function() {
+ module.verbose('Refreshing display type on next animation');
+ delete module.displayType;
+ },
+
+ forceRepaint: function() {
+ module.verbose('Forcing element repaint');
+ var
+ $parentElement = $module.parent(),
+ $nextElement = $module.next()
+ ;
+ if($nextElement.length === 0) {
+ $module.detach().appendTo($parentElement);
+ }
+ else {
+ $module.detach().insertBefore($nextElement);
+ }
+ },
+
+ repaint: function() {
+ module.verbose('Repainting element');
+ var
+ fakeAssignment = element.offsetWidth
+ ;
+ },
+
+ delay: function(interval) {
+ var
+ direction = module.get.animationDirection(),
+ shouldReverse,
+ delay
+ ;
+ if(!direction) {
+ direction = module.can.transition()
+ ? module.get.direction()
+ : 'static'
+ ;
+ }
+ interval = (interval !== undefined)
+ ? interval
+ : settings.interval
+ ;
+ shouldReverse = (settings.reverse == 'auto' && direction == className.outward);
+ delay = (shouldReverse || settings.reverse == true)
+ ? ($allModules.length - index) * settings.interval
+ : index * settings.interval
+ ;
+ module.debug('Delaying animation by', delay);
+ setTimeout(module.animate, delay);
+ },
+
+ animate: function(overrideSettings) {
+ settings = overrideSettings || settings;
+ if(!module.is.supported()) {
+ module.error(error.support);
+ return false;
+ }
+ module.debug('Preparing animation', settings.animation);
+ if(module.is.animating()) {
+ if(settings.queue) {
+ if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {
+ module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);
+ }
+ else {
+ module.queue(settings.animation);
+ }
+ return false;
+ }
+ else if(!settings.allowRepeats && module.is.occurring()) {
+ module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);
+ return false;
+ }
+ else {
+ module.debug('New animation started, completing previous early', settings.animation);
+ instance.complete();
+ }
+ }
+ if( module.can.animate() ) {
+ module.set.animating(settings.animation);
+ }
+ else {
+ module.error(error.noAnimation, settings.animation, element);
+ }
+ },
+
+ reset: function() {
+ module.debug('Resetting animation to beginning conditions');
+ module.remove.animationCallbacks();
+ module.restore.conditions();
+ module.remove.animating();
+ },
+
+ queue: function(animation) {
+ module.debug('Queueing animation of', animation);
+ module.queuing = true;
+ $module
+ .one(animationEnd + '.queue' + eventNamespace, function() {
+ module.queuing = false;
+ module.repaint();
+ module.animate.apply(this, settings);
+ })
+ ;
+ },
+
+ complete: function (event) {
+ module.debug('Animation complete', settings.animation);
+ module.remove.completeCallback();
+ module.remove.failSafe();
+ if(!module.is.looping()) {
+ if( module.is.outward() ) {
+ module.verbose('Animation is outward, hiding element');
+ module.restore.conditions();
+ module.hide();
+ }
+ else if( module.is.inward() ) {
+ module.verbose('Animation is outward, showing element');
+ module.restore.conditions();
+ module.show();
+ }
+ else {
+ module.verbose('Static animation completed');
+ module.restore.conditions();
+ settings.onComplete.call(element);
+ }
+ }
+ },
+
+ force: {
+ visible: function() {
+ var
+ style = $module.attr('style'),
+ userStyle = module.get.userStyle(),
+ displayType = module.get.displayType(),
+ overrideStyle = userStyle + 'display: ' + displayType + ' !important;',
+ currentDisplay = $module.css('display'),
+ emptyStyle = (style === undefined || style === '')
+ ;
+ if(currentDisplay !== displayType) {
+ module.verbose('Overriding default display to show element', displayType);
+ $module
+ .attr('style', overrideStyle)
+ ;
+ }
+ else if(emptyStyle) {
+ $module.removeAttr('style');
+ }
+ },
+ hidden: function() {
+ var
+ style = $module.attr('style'),
+ currentDisplay = $module.css('display'),
+ emptyStyle = (style === undefined || style === '')
+ ;
+ if(currentDisplay !== 'none' && !module.is.hidden()) {
+ module.verbose('Overriding default display to hide element');
+ $module
+ .css('display', 'none')
+ ;
+ }
+ else if(emptyStyle) {
+ $module
+ .removeAttr('style')
+ ;
+ }
+ }
+ },
+
+ has: {
+ direction: function(animation) {
+ var
+ hasDirection = false
+ ;
+ animation = animation || settings.animation;
+ if(typeof animation === 'string') {
+ animation = animation.split(' ');
+ $.each(animation, function(index, word){
+ if(word === className.inward || word === className.outward) {
+ hasDirection = true;
+ }
+ });
+ }
+ return hasDirection;
+ },
+ inlineDisplay: function() {
+ var
+ style = $module.attr('style') || ''
+ ;
+ return $.isArray(style.match(/display.*?;/, ''));
+ }
+ },
+
+ set: {
+ animating: function(animation) {
+ var
+ animationClass,
+ direction
+ ;
+ // remove previous callbacks
+ module.remove.completeCallback();
+
+ // determine exact animation
+ animation = animation || settings.animation;
+ animationClass = module.get.animationClass(animation);
+
+ // save animation class in cache to restore class names
+ module.save.animation(animationClass);
+
+ // override display if necessary so animation appears visibly
+ module.force.visible();
+
+ module.remove.hidden();
+ module.remove.direction();
+
+ module.start.animation(animationClass);
+
+ },
+ duration: function(animationName, duration) {
+ duration = duration || settings.duration;
+ duration = (typeof duration == 'number')
+ ? duration + 'ms'
+ : duration
+ ;
+ if(duration || duration === 0) {
+ module.verbose('Setting animation duration', duration);
+ $module
+ .css({
+ 'animation-duration': duration
+ })
+ ;
+ }
+ },
+ direction: function(direction) {
+ direction = direction || module.get.direction();
+ if(direction == className.inward) {
+ module.set.inward();
+ }
+ else {
+ module.set.outward();
+ }
+ },
+ looping: function() {
+ module.debug('Transition set to loop');
+ $module
+ .addClass(className.looping)
+ ;
+ },
+ hidden: function() {
+ $module
+ .addClass(className.transition)
+ .addClass(className.hidden)
+ ;
+ },
+ inward: function() {
+ module.debug('Setting direction to inward');
+ $module
+ .removeClass(className.outward)
+ .addClass(className.inward)
+ ;
+ },
+ outward: function() {
+ module.debug('Setting direction to outward');
+ $module
+ .removeClass(className.inward)
+ .addClass(className.outward)
+ ;
+ },
+ visible: function() {
+ $module
+ .addClass(className.transition)
+ .addClass(className.visible)
+ ;
+ }
+ },
+
+ start: {
+ animation: function(animationClass) {
+ animationClass = animationClass || module.get.animationClass();
+ module.debug('Starting tween', animationClass);
+ $module
+ .addClass(animationClass)
+ .one(animationEnd + '.complete' + eventNamespace, module.complete)
+ ;
+ if(settings.useFailSafe) {
+ module.add.failSafe();
+ }
+ module.set.duration(settings.duration);
+ settings.onStart.call(element);
+ }
+ },
+
+ save: {
+ animation: function(animation) {
+ if(!module.cache) {
+ module.cache = {};
+ }
+ module.cache.animation = animation;
+ },
+ displayType: function(displayType) {
+ if(displayType !== 'none') {
+ $module.data(metadata.displayType, displayType);
+ }
+ },
+ transitionExists: function(animation, exists) {
+ $.fn.transition.exists[animation] = exists;
+ module.verbose('Saving existence of transition', animation, exists);
+ }
+ },
+
+ restore: {
+ conditions: function() {
+ var
+ animation = module.get.currentAnimation()
+ ;
+ if(animation) {
+ $module
+ .removeClass(animation)
+ ;
+ module.verbose('Removing animation class', module.cache);
+ }
+ module.remove.duration();
+ }
+ },
+
+ add: {
+ failSafe: function() {
+ var
+ duration = module.get.duration()
+ ;
+ module.timer = setTimeout(function() {
+ $module.triggerHandler(animationEnd);
+ }, duration + settings.failSafeDelay);
+ module.verbose('Adding fail safe timer', module.timer);
+ }
+ },
+
+ remove: {
+ animating: function() {
+ $module.removeClass(className.animating);
+ },
+ animationCallbacks: function() {
+ module.remove.queueCallback();
+ module.remove.completeCallback();
+ },
+ queueCallback: function() {
+ $module.off('.queue' + eventNamespace);
+ },
+ completeCallback: function() {
+ $module.off('.complete' + eventNamespace);
+ },
+ display: function() {
+ $module.css('display', '');
+ },
+ direction: function() {
+ $module
+ .removeClass(className.inward)
+ .removeClass(className.outward)
+ ;
+ },
+ duration: function() {
+ $module
+ .css('animation-duration', '')
+ ;
+ },
+ failSafe: function() {
+ module.verbose('Removing fail safe timer', module.timer);
+ if(module.timer) {
+ clearTimeout(module.timer);
+ }
+ },
+ hidden: function() {
+ $module.removeClass(className.hidden);
+ },
+ visible: function() {
+ $module.removeClass(className.visible);
+ },
+ looping: function() {
+ module.debug('Transitions are no longer looping');
+ if( module.is.looping() ) {
+ module.reset();
+ $module
+ .removeClass(className.looping)
+ ;
+ }
+ },
+ transition: function() {
+ $module
+ .removeClass(className.visible)
+ .removeClass(className.hidden)
+ ;
+ }
+ },
+ get: {
+ settings: function(animation, duration, onComplete) {
+ // single settings object
+ if(typeof animation == 'object') {
+ return $.extend(true, {}, $.fn.transition.settings, animation);
+ }
+ // all arguments provided
+ else if(typeof onComplete == 'function') {
+ return $.extend({}, $.fn.transition.settings, {
+ animation : animation,
+ onComplete : onComplete,
+ duration : duration
+ });
+ }
+ // only duration provided
+ else if(typeof duration == 'string' || typeof duration == 'number') {
+ return $.extend({}, $.fn.transition.settings, {
+ animation : animation,
+ duration : duration
+ });
+ }
+ // duration is actually settings object
+ else if(typeof duration == 'object') {
+ return $.extend({}, $.fn.transition.settings, duration, {
+ animation : animation
+ });
+ }
+ // duration is actually callback
+ else if(typeof duration == 'function') {
+ return $.extend({}, $.fn.transition.settings, {
+ animation : animation,
+ onComplete : duration
+ });
+ }
+ // only animation provided
+ else {
+ return $.extend({}, $.fn.transition.settings, {
+ animation : animation
+ });
+ }
+ return $.fn.transition.settings;
+ },
+ animationClass: function(animation) {
+ var
+ animationClass = animation || settings.animation,
+ directionClass = (module.can.transition() && !module.has.direction())
+ ? module.get.direction() + ' '
+ : ''
+ ;
+ return className.animating + ' '
+ + className.transition + ' '
+ + directionClass
+ + animationClass
+ ;
+ },
+ currentAnimation: function() {
+ return (module.cache && module.cache.animation !== undefined)
+ ? module.cache.animation
+ : false
+ ;
+ },
+ currentDirection: function() {
+ return module.is.inward()
+ ? className.inward
+ : className.outward
+ ;
+ },
+ direction: function() {
+ return module.is.hidden() || !module.is.visible()
+ ? className.inward
+ : className.outward
+ ;
+ },
+ animationDirection: function(animation) {
+ var
+ direction
+ ;
+ animation = animation || settings.animation;
+ if(typeof animation === 'string') {
+ animation = animation.split(' ');
+ // search animation name for out/in class
+ $.each(animation, function(index, word){
+ if(word === className.inward) {
+ direction = className.inward;
+ }
+ else if(word === className.outward) {
+ direction = className.outward;
+ }
+ });
+ }
+ // return found direction
+ if(direction) {
+ return direction;
+ }
+ return false;
+ },
+ duration: function(duration) {
+ duration = duration || settings.duration;
+ if(duration === false) {
+ duration = $module.css('animation-duration') || 0;
+ }
+ return (typeof duration === 'string')
+ ? (duration.indexOf('ms') > -1)
+ ? parseFloat(duration)
+ : parseFloat(duration) * 1000
+ : duration
+ ;
+ },
+ displayType: function() {
+ if(settings.displayType) {
+ return settings.displayType;
+ }
+ if($module.data(metadata.displayType) === undefined) {
+ // create fake element to determine display state
+ module.can.transition(true);
+ }
+ return $module.data(metadata.displayType);
+ },
+ userStyle: function(style) {
+ style = style || $module.attr('style') || '';
+ return style.replace(/display.*?;/, '');
+ },
+ transitionExists: function(animation) {
+ return $.fn.transition.exists[animation];
+ },
+ animationStartEvent: function() {
+ var
+ element = document.createElement('div'),
+ animations = {
+ 'animation' :'animationstart',
+ 'OAnimation' :'oAnimationStart',
+ 'MozAnimation' :'mozAnimationStart',
+ 'WebkitAnimation' :'webkitAnimationStart'
+ },
+ animation
+ ;
+ for(animation in animations){
+ if( element.style[animation] !== undefined ){
+ return animations[animation];
+ }
+ }
+ return false;
+ },
+ animationEndEvent: function() {
+ var
+ element = document.createElement('div'),
+ animations = {
+ 'animation' :'animationend',
+ 'OAnimation' :'oAnimationEnd',
+ 'MozAnimation' :'mozAnimationEnd',
+ 'WebkitAnimation' :'webkitAnimationEnd'
+ },
+ animation
+ ;
+ for(animation in animations){
+ if( element.style[animation] !== undefined ){
+ return animations[animation];
+ }
+ }
+ return false;
+ }
+
+ },
+
+ can: {
+ transition: function(forced) {
+ var
+ animation = settings.animation,
+ transitionExists = module.get.transitionExists(animation),
+ elementClass,
+ tagName,
+ $clone,
+ currentAnimation,
+ inAnimation,
+ directionExists,
+ displayType
+ ;
+ if( transitionExists === undefined || forced) {
+ module.verbose('Determining whether animation exists');
+ elementClass = $module.attr('class');
+ tagName = $module.prop('tagName');
+
+ $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);
+ currentAnimation = $clone
+ .addClass(animation)
+ .removeClass(className.inward)
+ .removeClass(className.outward)
+ .addClass(className.animating)
+ .addClass(className.transition)
+ .css('animationName')
+ ;
+ inAnimation = $clone
+ .addClass(className.inward)
+ .css('animationName')
+ ;
+ displayType = $clone
+ .attr('class', elementClass)
+ .removeAttr('style')
+ .removeClass(className.hidden)
+ .removeClass(className.visible)
+ .show()
+ .css('display')
+ ;
+ module.verbose('Determining final display state', displayType);
+ module.save.displayType(displayType);
+
+ $clone.remove();
+ if(currentAnimation != inAnimation) {
+ module.debug('Direction exists for animation', animation);
+ directionExists = true;
+ }
+ else if(currentAnimation == 'none' || !currentAnimation) {
+ module.debug('No animation defined in css', animation);
+ return;
+ }
+ else {
+ module.debug('Static animation found', animation, displayType);
+ directionExists = false;
+ }
+ module.save.transitionExists(animation, directionExists);
+ }
+ return (transitionExists !== undefined)
+ ? transitionExists
+ : directionExists
+ ;
+ },
+ animate: function() {
+ // can transition does not return a value if animation does not exist
+ return (module.can.transition() !== undefined);
+ }
+ },
+
+ is: {
+ animating: function() {
+ return $module.hasClass(className.animating);
+ },
+ inward: function() {
+ return $module.hasClass(className.inward);
+ },
+ outward: function() {
+ return $module.hasClass(className.outward);
+ },
+ looping: function() {
+ return $module.hasClass(className.looping);
+ },
+ occurring: function(animation) {
+ animation = animation || settings.animation;
+ animation = '.' + animation.replace(' ', '.');
+ return ( $module.filter(animation).length > 0 );
+ },
+ visible: function() {
+ return $module.is(':visible');
+ },
+ hidden: function() {
+ return $module.css('visibility') === 'hidden';
+ },
+ supported: function() {
+ return(animationEnd !== false);
+ }
+ },
+
+ hide: function() {
+ module.verbose('Hiding element');
+ if( module.is.animating() ) {
+ module.reset();
+ }
+ element.blur(); // IE will trigger focus change if element is not blurred before hiding
+ module.remove.display();
+ module.remove.visible();
+ module.set.hidden();
+ module.force.hidden();
+ settings.onHide.call(element);
+ settings.onComplete.call(element);
+ // module.repaint();
+ },
+
+ show: function(display) {
+ module.verbose('Showing element', display);
+ module.remove.hidden();
+ module.set.visible();
+ module.force.visible();
+ settings.onShow.call(element);
+ settings.onComplete.call(element);
+ // module.repaint();
+ },
+
+ toggle: function() {
+ if( module.is.visible() ) {
+ module.hide();
+ }
+ else {
+ module.show();
+ }
+ },
+
+ stop: function() {
+ module.debug('Stopping current animation');
+ $module.triggerHandler(animationEnd);
+ },
+
+ stopAll: function() {
+ module.debug('Stopping all animation');
+ module.remove.queueCallback();
+ $module.triggerHandler(animationEnd);
+ },
+
+ clear: {
+ queue: function() {
+ module.debug('Clearing animation queue');
+ module.remove.queueCallback();
+ }
+ },
+
+ enable: function() {
+ module.verbose('Starting animation');
+ $module.removeClass(className.disabled);
+ },
+
+ disable: function() {
+ module.debug('Stopping animation');
+ $module.addClass(className.disabled);
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ // modified for transition to return invoke success
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return (found !== undefined)
+ ? found
+ : false
+ ;
+ }
+ };
+ module.initialize();
+ })
+ ;
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+// Records if CSS transition is available
+$.fn.transition.exists = {};
+
+$.fn.transition.settings = {
+
+ // module info
+ name : 'Transition',
+
+ // hide all output from this component regardless of other settings
+ silent : false,
+
+ // debug content outputted to console
+ debug : false,
+
+ // verbose debug output
+ verbose : false,
+
+ // performance data output
+ performance : true,
+
+ // event namespace
+ namespace : 'transition',
+
+ // delay between animations in group
+ interval : 0,
+
+ // whether group animations should be reversed
+ reverse : 'auto',
+
+ // animation callback event
+ onStart : function() {},
+ onComplete : function() {},
+ onShow : function() {},
+ onHide : function() {},
+
+ // whether timeout should be used to ensure callback fires in cases animationend does not
+ useFailSafe : true,
+
+ // delay in ms for fail safe
+ failSafeDelay : 100,
+
+ // whether EXACT animation can occur twice in a row
+ allowRepeats : false,
+
+ // Override final display type on visible
+ displayType : false,
+
+ // animation duration
+ animation : 'fade',
+ duration : false,
+
+ // new animations will occur after previous ones
+ queue : true,
+
+ metadata : {
+ displayType: 'display'
+ },
+
+ className : {
+ animating : 'animating',
+ disabled : 'disabled',
+ hidden : 'hidden',
+ inward : 'in',
+ loading : 'loading',
+ looping : 'looping',
+ outward : 'out',
+ transition : 'transition',
+ visible : 'visible'
+ },
+
+ // possible errors
+ error: {
+ noAnimation : 'Element is no longer attached to DOM. Unable to animate. Use silent setting to surpress this warning in production.',
+ repeated : 'That animation is already occurring, cancelling repeated animation',
+ method : 'The method you called is not defined',
+ support : 'This browser does not support CSS animations'
+ }
+
+};
+
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/transition.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/transition.less b/semantic/src/definitions/modules/transition.less
new file mode 100755
index 0000000..92c4963
--- /dev/null
+++ b/semantic/src/definitions/modules/transition.less
@@ -0,0 +1,78 @@
+/*!
+ * # Semantic UI - Transition
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'transition';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Transitions
+*******************************/
+
+.transition {
+ animation-iteration-count: 1;
+ animation-duration: @transitionDefaultDuration;
+ animation-timing-function: @transitionDefaultEasing;
+ animation-fill-mode: @transitionDefaultFill;
+}
+
+/*******************************
+ States
+*******************************/
+
+
+/* Animating */
+.animating.transition {
+ backface-visibility: @backfaceVisibility;
+ visibility: visible !important;
+}
+
+/* Loading */
+.loading.transition {
+ position: absolute;
+ top: -99999px;
+ left: -99999px;
+}
+
+/* Hidden */
+.hidden.transition {
+ display: none;
+ visibility: hidden;
+}
+
+/* Visible */
+.visible.transition {
+ display: block !important;
+ visibility: visible !important;
+/* backface-visibility: @backfaceVisibility;
+ transform: @use3DAcceleration;*/
+}
+
+/* Disabled */
+.disabled.transition {
+ animation-play-state: paused;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+.looping.transition {
+ animation-iteration-count: infinite;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/views/ad.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/views/ad.less b/semantic/src/definitions/views/ad.less
new file mode 100644
index 0000000..3c3b86b
--- /dev/null
+++ b/semantic/src/definitions/views/ad.less
@@ -0,0 +1,268 @@
+/*!
+ * # Semantic UI - Ad
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Copyright 2013 Contributors
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'view';
+@element : 'ad';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Advertisement
+*******************************/
+
+.ui.ad {
+ display: block;
+ overflow: @overflow;
+ margin: @margin;
+}
+
+.ui.ad:first-child {
+ margin: 0em;
+}
+
+.ui.ad:last-child {
+ margin: 0em;
+}
+
+.ui.ad iframe {
+ margin: 0em;
+ padding: 0em;
+ border: none;
+ overflow: hidden;
+}
+
+/*--------------
+ Common
+---------------*/
+
+/* Leaderboard */
+.ui.leaderboard.ad {
+ width: 728px;
+ height: 90px;
+}
+
+/* Medium Rectangle */
+.ui[class*="medium rectangle"].ad {
+ width: 300px;
+ height: 250px;
+}
+
+/* Large Rectangle */
+.ui[class*="large rectangle"].ad {
+ width: 336px;
+ height: 280px;
+}
+/* Half Page */
+.ui[class*="half page"].ad {
+ width: 300px;
+ height: 600px;
+}
+
+/*--------------
+ Square
+---------------*/
+
+/* Square */
+.ui.square.ad {
+ width: 250px;
+ height: 250px;
+}
+
+/* Small Square */
+.ui[class*="small square"].ad {
+ width: 200px;
+ height: 200px;
+}
+
+/*--------------
+ Rectangle
+---------------*/
+
+/* Small Rectangle */
+.ui[class*="small rectangle"].ad {
+ width: 180px;
+ height: 150px;
+}
+
+/* Vertical Rectangle */
+.ui[class*="vertical rectangle"].ad {
+ width: 240px;
+ height: 400px;
+}
+
+/*--------------
+ Button
+---------------*/
+
+.ui.button.ad {
+ width: 120px;
+ height: 90px;
+}
+.ui[class*="square button"].ad {
+ width: 125px;
+ height: 125px;
+}
+.ui[class*="small button"].ad {
+ width: 120px;
+ height: 60px;
+}
+
+/*--------------
+ Skyscrapers
+---------------*/
+
+/* Skyscraper */
+.ui.skyscraper.ad {
+ width: 120px;
+ height: 600px;
+}
+
+/* Wide Skyscraper */
+.ui[class*="wide skyscraper"].ad {
+ width: 160px;
+}
+
+/*--------------
+ Banners
+---------------*/
+
+/* Banner */
+.ui.banner.ad {
+ width: 468px;
+ height: 60px;
+}
+
+/* Vertical Banner */
+.ui[class*="vertical banner"].ad {
+ width: 120px;
+ height: 240px;
+}
+
+/* Top Banner */
+.ui[class*="top banner"].ad {
+ width: 930px;
+ height: 180px;
+}
+
+/* Half Banner */
+.ui[class*="half banner"].ad {
+ width: 234px;
+ height: 60px;
+}
+
+/*--------------
+ Boards
+---------------*/
+
+/* Leaderboard */
+.ui[class*="large leaderboard"].ad {
+ width: 970px;
+ height: 90px;
+}
+
+/* Billboard */
+.ui.billboard.ad {
+ width: 970px;
+ height: 250px;
+}
+
+/*--------------
+ Panorama
+---------------*/
+
+/* Panorama */
+.ui.panorama.ad {
+ width: 980px;
+ height: 120px;
+}
+
+/*--------------
+ Netboard
+---------------*/
+
+/* Netboard */
+.ui.netboard.ad {
+ width: 580px;
+ height: 400px;
+}
+
+
+
+/*--------------
+ Mobile
+---------------*/
+
+/* Large Mobile Banner */
+.ui[class*="large mobile banner"].ad {
+ width: 320px;
+ height: 100px;
+}
+
+/* Mobile Leaderboard */
+.ui[class*="mobile leaderboard"].ad {
+ width: 320px;
+ height: 50px;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/* Mobile Sizes */
+.ui.mobile.ad {
+ display: none;
+}
+
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.mobile.ad {
+ display: block;
+ }
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+.ui.centered.ad {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.ui.test.ad {
+ position: relative;
+ background: @testBackground;
+}
+.ui.test.ad:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 100%;
+ text-align: center;
+ transform: translateX(-50%) translateY(-50%);
+
+ content: @testText;
+ color: @testColor;
+ font-size: @testFontSize;
+ font-weight: @testFontWeight;
+}
+.ui.mobile.test.ad:after {
+ font-size: @testMobileFontSize;
+}
+.ui.test.ad[data-text]:after {
+ content: attr(data-text);
+}
+
+.loadUIOverrides();
\ No newline at end of file
[38/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/container.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/container.less b/semantic/src/definitions/elements/container.less
new file mode 100644
index 0000000..14b32f2
--- /dev/null
+++ b/semantic/src/definitions/elements/container.less
@@ -0,0 +1,143 @@
+/*!
+ * # Semantic UI - Container
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'container';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Container
+*******************************/
+
+/* All Sizes */
+.ui.container {
+ display: block;
+ max-width: @maxWidth !important;
+}
+
+/* Mobile */
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.container {
+ width: @mobileWidth !important;
+ margin-left: @mobileGutter !important;
+ margin-right: @mobileGutter !important;
+ }
+ .ui.grid.container {
+ width: @mobileGridWidth !important;
+ }
+ .ui.relaxed.grid.container {
+ width: @mobileRelaxedGridWidth !important;
+ }
+ .ui.very.relaxed.grid.container {
+ width: @mobileVeryRelaxedGridWidth !important;
+ }
+}
+
+/* Tablet */
+@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
+ .ui.container {
+ width: @tabletWidth;
+ margin-left: @tabletGutter !important;
+ margin-right: @tabletGutter !important;
+ }
+ .ui.grid.container {
+ width: @tabletGridWidth !important;
+ }
+ .ui.relaxed.grid.container {
+ width: @tabletRelaxedGridWidth !important;
+ }
+ .ui.very.relaxed.grid.container {
+ width: @tabletVeryRelaxedGridWidth !important;
+ }
+}
+
+/* Small Monitor */
+@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {
+ .ui.container {
+ width: @computerWidth;
+ margin-left: @computerGutter !important;
+ margin-right: @computerGutter !important;
+ }
+ .ui.grid.container {
+ width: @computerGridWidth !important;
+ }
+ .ui.relaxed.grid.container {
+ width: @computerRelaxedGridWidth !important;
+ }
+ .ui.very.relaxed.grid.container {
+ width: @computerVeryRelaxedGridWidth !important;
+ }
+}
+
+/* Large Monitor */
+@media only screen and (min-width: @largeMonitorBreakpoint) {
+ .ui.container {
+ width: @largeMonitorWidth;
+ margin-left: @largeMonitorGutter !important;
+ margin-right: @largeMonitorGutter !important;
+ }
+ .ui.grid.container {
+ width: @largeMonitorGridWidth !important;
+ }
+ .ui.relaxed.grid.container {
+ width: @largeMonitorRelaxedGridWidth !important;
+ }
+ .ui.very.relaxed.grid.container {
+ width: @largeMonitorVeryRelaxedGridWidth !important;
+ }
+}
+
+/*******************************
+ Types
+*******************************/
+
+
+/* Text Container */
+.ui.text.container {
+ font-family: @textFontFamily;
+ max-width: @textWidth !important;
+ line-height: @textLineHeight;
+}
+
+.ui.text.container {
+ font-size: @textSize;
+}
+
+/* Fluid */
+.ui.fluid.container {
+ width: 100%;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+.ui[class*="left aligned"].container {
+ text-align: left;
+}
+.ui[class*="center aligned"].container {
+ text-align: center;
+}
+.ui[class*="right aligned"].container {
+ text-align: right;
+}
+.ui.justified.container {
+ text-align: justify;
+ hyphens: auto;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/divider.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/divider.less b/semantic/src/definitions/elements/divider.less
new file mode 100755
index 0000000..28c0c68
--- /dev/null
+++ b/semantic/src/definitions/elements/divider.less
@@ -0,0 +1,255 @@
+/*!
+ * # Semantic UI - Divider
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'divider';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Divider
+*******************************/
+
+.ui.divider {
+ margin: @margin;
+
+ line-height: 1;
+ height: 0em;
+
+ font-weight: @fontWeight;
+ text-transform: @textTransform;
+ letter-spacing: @letterSpacing;
+ color: @color;
+
+ user-select: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+/*--------------
+ Basic
+---------------*/
+
+.ui.divider:not(.vertical):not(.horizontal) {
+ border-top: @shadowWidth solid @shadowColor;
+ border-bottom: @highlightWidth solid @highlightColor;
+}
+
+/*--------------
+ Coupling
+---------------*/
+
+/* Allow divider between each column row */
+.ui.grid > .column + .divider,
+.ui.grid > .row > .column + .divider {
+ left: auto;
+}
+
+/*--------------
+ Horizontal
+---------------*/
+
+.ui.horizontal.divider {
+ display: table;
+ white-space: nowrap;
+
+ height: auto;
+ margin: @horizontalMargin;
+ line-height: 1;
+ text-align: center;
+}
+
+.ui.horizontal.divider:before,
+.ui.horizontal.divider:after {
+ content: '';
+ display: table-cell;
+ position: relative;
+ top: 50%;
+ width: 50%;
+ background-repeat: no-repeat;
+}
+
+.ui.horizontal.divider:before {
+ background-position: right @horizontalDividerMargin top 50%;
+}
+.ui.horizontal.divider:after {
+ background-position: left @horizontalDividerMargin top 50%;
+}
+
+/*--------------
+ Vertical
+---------------*/
+
+.ui.vertical.divider {
+ position: absolute;
+ z-index: 2;
+ top: 50%;
+ left: 50%;
+
+ margin: 0rem;
+ padding: 0em;
+ width: auto;
+ height: 50%;
+
+ line-height: 0em;
+ text-align: center;
+ transform: translateX(-50%);
+}
+
+.ui.vertical.divider:before,
+.ui.vertical.divider:after {
+ position: absolute;
+ left: 50%;
+ content: '';
+ z-index: 3;
+
+ border-left: @shadowWidth solid @shadowColor;
+ border-right: @highlightWidth solid @highlightColor;
+
+ width: 0%;
+ height: @verticalDividerHeight;
+}
+
+.ui.vertical.divider:before {
+ top: -100%;
+}
+.ui.vertical.divider:after {
+ top: auto;
+ bottom: 0px;
+}
+
+/* Inside grid */
+@media only screen and (max-width : @largestMobileScreen) {
+
+ .ui.stackable.grid .ui.vertical.divider,
+ .ui.grid .stackable.row .ui.vertical.divider {
+ display: table;
+ white-space: nowrap;
+ height: auto;
+ margin: @horizontalMargin;
+ overflow: hidden;
+ line-height: 1;
+ text-align: center;
+ position: static;
+ top: 0;
+ left: 0;
+ transform: none;
+ }
+
+ .ui.stackable.grid .ui.vertical.divider:before,
+ .ui.grid .stackable.row .ui.vertical.divider:before,
+ .ui.stackable.grid .ui.vertical.divider:after,
+ .ui.grid .stackable.row .ui.vertical.divider:after {
+ position: static;
+ left: 0;
+ border-left: none;
+ border-right: none;
+ content: '';
+ display: table-cell;
+ position: relative;
+ top: 50%;
+ width: 50%;
+ background-repeat: no-repeat;
+ }
+
+ .ui.stackable.grid .ui.vertical.divider:before,
+ .ui.grid .stackable.row .ui.vertical.divider:before {
+ background-position: right @horizontalDividerMargin top 50%;
+ }
+ .ui.stackable.grid .ui.vertical.divider:after,
+ .ui.grid .stackable.row .ui.vertical.divider:after {
+ background-position: left @horizontalDividerMargin top 50%;
+ }
+}
+
+/*--------------
+ Icon
+---------------*/
+
+.ui.divider > .icon {
+ margin: @dividerIconMargin;
+ font-size: @dividerIconSize;
+ height: 1em;
+ vertical-align: middle;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Hidden
+---------------*/
+
+.ui.hidden.divider {
+ border-color: transparent !important;
+}
+.ui.hidden.divider:before,
+.ui.hidden.divider:after {
+ display: none;
+}
+
+/*--------------
+ Inverted
+---------------*/
+
+.ui.divider.inverted,
+.ui.vertical.inverted.divider,
+.ui.horizontal.inverted.divider {
+ color: @invertedTextColor;
+}
+.ui.divider.inverted,
+.ui.divider.inverted:after,
+.ui.divider.inverted:before {
+ border-top-color: @invertedShadowColor !important;
+ border-left-color: @invertedShadowColor !important;
+ border-bottom-color: @invertedHighlightColor !important;
+ border-right-color: @invertedHighlightColor !important;
+}
+
+/*--------------
+ Fitted
+---------------*/
+
+.ui.fitted.divider {
+ margin: 0em;
+}
+
+/*--------------
+ Clearing
+---------------*/
+
+.ui.clearing.divider {
+ clear: both;
+}
+
+/*--------------
+ Section
+---------------*/
+
+.ui.section.divider {
+ margin-top: @sectionMargin;
+ margin-bottom: @sectionMargin;
+}
+
+/*--------------
+ Sizes
+---------------*/
+
+.ui.divider {
+ font-size: @medium;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/flag.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/flag.less b/semantic/src/definitions/elements/flag.less
new file mode 100755
index 0000000..1f4145e
--- /dev/null
+++ b/semantic/src/definitions/elements/flag.less
@@ -0,0 +1,52 @@
+/*!
+ * # Semantic UI - Flag
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'flag';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Flag
+*******************************/
+
+i.flag:not(.icon) {
+ display: inline-block;
+
+ width: @width;
+ height: @height;
+
+ line-height: @height;
+ vertical-align: @verticalAlign;
+ margin: 0em @margin 0em 0em;
+
+ text-decoration: inherit;
+
+ speak: none;
+ font-smoothing: antialiased;
+ backface-visibility: hidden;
+}
+
+/* Sprite */
+i.flag:not(.icon):before {
+ display: inline-block;
+ content: '';
+ background: url(@spritePath) no-repeat -108px -1976px;
+ width: @width;
+ height: @height;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/header.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/header.less b/semantic/src/definitions/elements/header.less
new file mode 100755
index 0000000..079cac8
--- /dev/null
+++ b/semantic/src/definitions/elements/header.less
@@ -0,0 +1,708 @@
+/*!
+ * # Semantic UI - Header
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'header';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Header
+*******************************/
+
+/* Standard */
+.ui.header {
+ border: none;
+ margin: @margin;
+ padding: @verticalPadding @horizontalPadding;
+ font-family: @fontFamily;
+ font-weight: @fontWeight;
+ line-height: @lineHeight;
+ text-transform: @textTransform;
+ color: @textColor;
+}
+
+.ui.header:first-child {
+ margin-top: @firstMargin;
+}
+.ui.header:last-child {
+ margin-bottom: @lastMargin;
+}
+
+/*--------------
+ Sub Header
+---------------*/
+
+.ui.header .sub.header {
+ display: block;
+ font-weight: normal;
+ padding: 0em;
+ margin: @subHeaderMargin;
+ font-size: @subHeaderFontSize;
+ line-height: @subHeaderLineHeight;
+ color: @subHeaderColor;
+}
+
+/*--------------
+ Icon
+---------------*/
+
+.ui.header > .icon {
+ display: table-cell;
+ opacity: @iconOpacity;
+ font-size: @iconSize;
+ padding-top: @iconOffset;
+ vertical-align: @iconAlignment;
+}
+
+/* With Text Node */
+.ui.header .icon:only-child {
+ display: inline-block;
+ padding: 0em;
+ margin-right: @iconMargin;
+}
+
+/*-------------------
+ Image
+--------------------*/
+
+.ui.header > .image,
+.ui.header > img {
+ display: inline-block;
+ margin-top: @imageOffset;
+ width: @imageWidth;
+ height: @imageHeight;
+ vertical-align: @imageAlignment;
+}
+.ui.header > .image:only-child,
+.ui.header > img:only-child {
+ margin-right: @imageMargin;
+}
+
+/*--------------
+ Content
+---------------*/
+
+.ui.header .content {
+ display: inline-block;
+ vertical-align: @contentAlignment;
+}
+
+/* After Image */
+.ui.header > img + .content,
+.ui.header > .image + .content {
+ padding-left: @imageMargin;
+ vertical-align: @contentImageAlignment;
+}
+
+/* After Icon */
+.ui.header > .icon + .content {
+ padding-left: @iconMargin;
+ display: table-cell;
+ vertical-align: @contentIconAlignment;
+}
+
+
+/*--------------
+ Loose Coupling
+---------------*/
+
+.ui.header .ui.label {
+ font-size: @labelSize;
+ margin-left: @labelDistance;
+ vertical-align: @labelVerticalAlign;
+}
+
+/* Positioning */
+.ui.header + p {
+ margin-top: @nextParagraphDistance;
+}
+
+
+
+/*******************************
+ Types
+*******************************/
+
+
+/*--------------
+ Page
+---------------*/
+
+h1.ui.header {
+ font-size: @h1;
+}
+h2.ui.header {
+ font-size: @h2;
+}
+h3.ui.header {
+ font-size: @h3;
+}
+h4.ui.header {
+ font-size: @h4;
+}
+h5.ui.header {
+ font-size: @h5;
+}
+
+
+/* Sub Header */
+h1.ui.header .sub.header {
+ font-size: @h1SubHeaderFontSize;
+}
+h2.ui.header .sub.header {
+ font-size: @h2SubHeaderFontSize;
+}
+h3.ui.header .sub.header {
+ font-size: @h3SubHeaderFontSize;
+}
+h4.ui.header .sub.header {
+ font-size: @h4SubHeaderFontSize;
+}
+h5.ui.header .sub.header {
+ font-size: @h5SubHeaderFontSize;
+}
+
+
+/*--------------
+ Content Heading
+---------------*/
+
+.ui.huge.header {
+ min-height: 1em;
+ font-size: @hugeFontSize;
+}
+.ui.large.header {
+ font-size: @largeFontSize;
+}
+.ui.medium.header {
+ font-size: @mediumFontSize;
+}
+.ui.small.header {
+ font-size: @smallFontSize;
+}
+.ui.tiny.header {
+ font-size: @tinyFontSize;
+}
+
+/* Sub Header */
+.ui.huge.header .sub.header {
+ font-size: @hugeSubHeaderFontSize;
+}
+.ui.large.header .sub.header {
+ font-size: @hugeSubHeaderFontSize;
+}
+.ui.header .sub.header {
+ font-size: @subHeaderFontSize;
+}
+.ui.small.header .sub.header {
+ font-size: @smallSubHeaderFontSize;
+}
+.ui.tiny.header .sub.header {
+ font-size: @tinySubHeaderFontSize;
+}
+
+/*--------------
+ Sub Heading
+---------------*/
+
+.ui.sub.header {
+ padding: 0em;
+ margin-bottom: @subHeadingDistance;
+ font-weight: @subHeadingFontWeight;
+ font-size: @subHeadingFontSize;
+ text-transform: @subHeadingTextTransform;
+ color: @subHeadingColor;
+}
+
+.ui.small.sub.header {
+ font-size: @smallSubHeadingSize;
+}
+.ui.sub.header {
+ font-size: @subHeadingFontSize;
+}
+.ui.large.sub.header {
+ font-size: @largeSubHeadingSize;
+}
+.ui.huge.sub.header {
+ font-size: @hugeSubHeadingSize;
+}
+
+
+
+/*-------------------
+ Icon
+--------------------*/
+
+.ui.icon.header {
+ display: inline-block;
+ text-align: center;
+ margin: @iconHeaderTopMargin 0em @iconHeaderBottomMargin;
+}
+.ui.icon.header:after {
+ content: '';
+ display: block;
+ height: 0px;
+ clear: both;
+ visibility: hidden;
+}
+
+.ui.icon.header:first-child {
+ margin-top: @iconHeaderFirstMargin;
+}
+.ui.icon.header .icon {
+ float: none;
+ display: block;
+ width: auto;
+ height: auto;
+ line-height: 1;
+ padding: 0em;
+ font-size: @iconHeaderSize;
+ margin: 0em auto @iconHeaderMargin;
+ opacity: @iconHeaderOpacity;
+}
+.ui.icon.header .content {
+ display: block;
+ padding: 0em;
+}
+.ui.icon.header .circular.icon {
+ font-size: @circularHeaderIconSize;
+}
+.ui.icon.header .square.icon {
+ font-size: @squareHeaderIconSize;
+}
+.ui.block.icon.header .icon {
+ margin-bottom: 0em;
+}
+.ui.icon.header.aligned {
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+}
+
+/*******************************
+ States
+*******************************/
+
+.ui.disabled.header {
+ opacity: @disabledOpacity;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*-------------------
+ Inverted
+--------------------*/
+
+.ui.inverted.header {
+ color: @invertedColor;
+}
+.ui.inverted.header .sub.header {
+ color: @invertedSubHeaderColor;
+}
+.ui.inverted.attached.header {
+ background: @invertedAttachedBackground;
+ box-shadow: none;
+ border-color: transparent;
+}
+.ui.inverted.block.header {
+ background: @invertedBlockBackground;
+ box-shadow: none;
+}
+.ui.inverted.block.header {
+ border-bottom: none;
+}
+
+
+/*-------------------
+ Colors
+--------------------*/
+
+/*--- Red ---*/
+.ui.red.header {
+ color: @red !important;
+}
+a.ui.red.header:hover {
+ color: @redHover !important;
+}
+.ui.red.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @red;
+}
+
+/* Inverted */
+.ui.inverted.red.header {
+ color: @lightRed !important;
+}
+a.ui.inverted.red.header:hover {
+ color: @lightRedHover !important;
+}
+
+/*--- Orange ---*/
+.ui.orange.header {
+ color: @orange !important;
+}
+a.ui.orange.header:hover {
+ color: @orangeHover !important;
+}
+.ui.orange.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @orange;
+}
+/* Inverted */
+.ui.inverted.orange.header {
+ color: @lightOrange !important;
+}
+a.ui.inverted.orange.header:hover {
+ color: @lightOrangeHover !important;
+}
+
+/*--- Olive ---*/
+.ui.olive.header {
+ color: @olive !important;
+}
+a.ui.olive.header:hover {
+ color: @oliveHover !important;
+}
+.ui.olive.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @olive;
+}
+/* Inverted */
+.ui.inverted.olive.header {
+ color: @lightOlive !important;
+}
+a.ui.inverted.olive.header:hover {
+ color: @lightOliveHover !important;
+}
+
+/*--- Yellow ---*/
+.ui.yellow.header {
+ color: @yellow !important;
+}
+a.ui.yellow.header:hover {
+ color: @yellowHover !important;
+}
+.ui.yellow.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @yellow;
+}
+/* Inverted */
+.ui.inverted.yellow.header {
+ color: @lightYellow !important;
+}
+a.ui.inverted.yellow.header:hover {
+ color: @lightYellowHover !important;
+}
+
+/*--- Green ---*/
+.ui.green.header {
+ color: @green !important;
+}
+a.ui.green.header:hover {
+ color: @greenHover !important;
+}
+.ui.green.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @green;
+}
+/* Inverted */
+.ui.inverted.green.header {
+ color: @lightGreen !important;
+}
+a.ui.inverted.green.header:hover {
+ color: @lightGreenHover !important;
+}
+
+/*--- Teal ---*/
+.ui.teal.header {
+ color: @teal !important;
+}
+a.ui.teal.header:hover {
+ color: @tealHover !important;
+}
+.ui.teal.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @teal;
+}
+/* Inverted */
+.ui.inverted.teal.header {
+ color: @lightTeal !important;
+}
+a.ui.inverted.teal.header:hover {
+ color: @lightTealHover !important;
+}
+
+/*--- Blue ---*/
+.ui.blue.header {
+ color: @blue !important;
+}
+a.ui.blue.header:hover {
+ color: @blueHover !important;
+}
+.ui.blue.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @blue;
+}
+/* Inverted */
+.ui.inverted.blue.header {
+ color: @lightBlue !important;
+}
+a.ui.inverted.blue.header:hover {
+ color: @lightBlueHover !important;
+}
+
+/*--- Violet ---*/
+.ui.violet.header {
+ color: @violet !important;
+}
+a.ui.violet.header:hover {
+ color: @violetHover !important;
+}
+.ui.violet.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @violet;
+}
+/* Inverted */
+.ui.inverted.violet.header {
+ color: @lightViolet !important;
+}
+a.ui.inverted.violet.header:hover {
+ color: @lightVioletHover !important;
+}
+
+/*--- Purple ---*/
+.ui.purple.header {
+ color: @purple !important;
+}
+a.ui.purple.header:hover {
+ color: @purpleHover !important;
+}
+.ui.purple.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @purple;
+}
+/* Inverted */
+.ui.inverted.purple.header {
+ color: @lightPurple !important;
+}
+a.ui.inverted.purple.header:hover {
+ color: @lightPurpleHover !important;
+}
+
+/*--- Pink ---*/
+.ui.pink.header {
+ color: @pink !important;
+}
+a.ui.pink.header:hover {
+ color: @pinkHover !important;
+}
+.ui.pink.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @pink;
+}
+/* Inverted */
+.ui.inverted.pink.header {
+ color: @lightPink !important;
+}
+a.ui.inverted.pink.header:hover {
+ color: @lightPinkHover !important;
+}
+
+/*--- Brown ---*/
+.ui.brown.header {
+ color: @brown !important;
+}
+a.ui.brown.header:hover {
+ color: @brownHover !important;
+}
+.ui.brown.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @brown;
+}
+/* Inverted */
+.ui.inverted.brown.header {
+ color: @lightBrown !important;
+}
+a.ui.inverted.brown.header:hover {
+ color: @lightBrownHover !important;
+}
+
+/*--- Grey ---*/
+.ui.grey.header {
+ color: @grey !important;
+}
+a.ui.grey.header:hover {
+ color: @greyHover !important;
+}
+.ui.grey.dividing.header {
+ border-bottom: @dividedColoredBorderWidth solid @grey;
+}
+/* Inverted */
+.ui.inverted.grey.header {
+ color: @lightGrey !important;
+}
+a.ui.inverted.grey.header:hover {
+ color: @lightGreyHover !important;
+}
+
+
+/*-------------------
+ Aligned
+--------------------*/
+
+.ui.left.aligned.header {
+ text-align: left;
+}
+.ui.right.aligned.header {
+ text-align: right;
+}
+.ui.centered.header,
+.ui.center.aligned.header {
+ text-align: center;
+}
+.ui.justified.header {
+ text-align: justify;
+}
+.ui.justified.header:after {
+ display: inline-block;
+ content: '';
+ width: 100%;
+}
+
+/*-------------------
+ Floated
+--------------------*/
+
+.ui.floated.header,
+.ui[class*="left floated"].header {
+ float: left;
+ margin-top: 0em;
+ margin-right: @floatedMargin;
+}
+.ui[class*="right floated"].header {
+ float: right;
+ margin-top: 0em;
+ margin-left: @floatedMargin;
+}
+
+/*-------------------
+ Fitted
+--------------------*/
+
+.ui.fitted.header {
+ padding: 0em;
+}
+
+
+/*-------------------
+ Dividing
+--------------------*/
+
+.ui.dividing.header {
+ padding-bottom: @dividedBorderPadding;
+ border-bottom: @dividedBorder;
+}
+.ui.dividing.header .sub.header {
+ padding-bottom: @dividedSubHeaderPadding;
+}
+.ui.dividing.header .icon {
+ margin-bottom: @dividedIconPadding;
+}
+
+.ui.inverted.dividing.header {
+ border-bottom-color: @invertedDividedBorderColor;
+}
+
+
+/*-------------------
+ Block
+--------------------*/
+
+.ui.block.header {
+ background: @blockBackground;
+ padding: @blockVerticalPadding @blockHorizontalPadding;
+ box-shadow: @blockBoxShadow;
+ border: @blockBorder;
+ border-radius: @blockBorderRadius;
+}
+
+.ui.tiny.block.header {
+ font-size: @tinyBlock;
+}
+.ui.small.block.header {
+ font-size: @smallBlock;
+}
+.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {
+ font-size: @mediumBlock;
+}
+.ui.large.block.header {
+ font-size: @largeBlock;
+}
+.ui.huge.block.header {
+ font-size: @hugeBlock;
+}
+
+/*-------------------
+ Attached
+--------------------*/
+
+.ui.attached.header {
+ background: @attachedBackground;
+ padding: @attachedVerticalPadding @attachedHorizontalPadding;
+ margin-left: @attachedOffset;
+ margin-right: @attachedOffset;
+ box-shadow: @attachedBoxShadow;
+ border: @attachedBorder;
+}
+.ui.attached.block.header {
+ background: @blockBackground;
+}
+
+.ui.attached:not(.top):not(.bottom).header {
+ margin-top: 0em;
+ margin-bottom: 0em;
+ border-top: none;
+ border-radius: 0em;
+}
+.ui.top.attached.header {
+ margin-bottom: 0em;
+ border-radius: @attachedBorderRadius @attachedBorderRadius 0em 0em;
+}
+.ui.bottom.attached.header {
+ margin-top: 0em;
+ border-top: none;
+ border-radius: 0em 0em @attachedBorderRadius @attachedBorderRadius;
+}
+
+/* Attached Sizes */
+.ui.tiny.attached.header {
+ font-size: @tinyAttachedSize;
+}
+.ui.small.attached.header {
+ font-size: @smallAttachedSize;
+}
+.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {
+ font-size: @mediumAttachedSize;
+}
+.ui.large.attached.header {
+ font-size: @largeAttachedSize;
+}
+.ui.huge.attached.header {
+ font-size: @hugeAttachedSize;
+}
+
+/*-------------------
+ Sizing
+--------------------*/
+
+.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {
+ font-size: @mediumFontSize;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/icon.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/icon.less b/semantic/src/definitions/elements/icon.less
new file mode 100755
index 0000000..a145f1d
--- /dev/null
+++ b/semantic/src/definitions/elements/icon.less
@@ -0,0 +1,477 @@
+/*!
+ * # Semantic UI - Icon
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'icon';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Icon
+*******************************/
+
+@font-face {
+ font-family: 'Icons';
+ src: @fallbackSRC;
+ src: @src;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-decoration: inherit;
+ text-transform: none;
+}
+
+i.icon {
+ display: inline-block;
+ opacity: @opacity;
+
+ margin: 0em @distanceFromText 0em 0em;
+
+ width: @width;
+ height: @height;
+
+ font-family: 'Icons';
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: inherit;
+ text-align: center;
+
+ speak: none;
+ font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ backface-visibility: hidden;
+}
+
+i.icon:before {
+ background: none !important;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Loading
+---------------*/
+
+i.icon.loading {
+ height: 1em;
+ line-height: 1;
+ animation: icon-loading @loadingDuration linear infinite;
+}
+@keyframes icon-loading {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+/*******************************
+ States
+*******************************/
+
+i.icon.hover {
+ opacity: 1 !important;
+}
+
+i.icon.active {
+ opacity: 1 !important;
+}
+
+i.emphasized.icon {
+ opacity: 1 !important;
+}
+
+i.disabled.icon {
+ opacity: @disabledOpacity !important;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*-------------------
+ Fitted
+--------------------*/
+
+i.fitted.icon {
+ width: auto;
+ margin: 0em;
+}
+
+/*-------------------
+ Link
+--------------------*/
+
+i.link.icon {
+ cursor: pointer;
+ opacity: @linkOpacity;
+ transition: opacity @defaultDuration @defaultEasing;
+}
+i.link.icon:hover {
+ opacity: 1 !important;
+}
+
+/*-------------------
+ Circular
+--------------------*/
+
+i.circular.icon {
+ border-radius: 500em !important;
+ line-height: 1 !important;
+
+ padding: @circularPadding !important;
+ box-shadow: @circularShadow;
+
+ width: @circularSize !important;
+ height: @circularSize !important;
+}
+i.circular.inverted.icon {
+ border: none;
+ box-shadow: none;
+}
+
+/*-------------------
+ Flipped
+--------------------*/
+
+i.flipped.icon,
+i.horizontally.flipped.icon {
+ transform: scale(-1, 1);
+}
+i.vertically.flipped.icon {
+ transform: scale(1, -1);
+}
+
+/*-------------------
+ Rotated
+--------------------*/
+
+i.rotated.icon,
+i.right.rotated.icon,
+i.clockwise.rotated.icon {
+ transform: rotate(90deg);
+}
+
+i.left.rotated.icon,
+i.counterclockwise.rotated.icon {
+ transform: rotate(-90deg);
+}
+
+/*-------------------
+ Bordered
+--------------------*/
+
+i.bordered.icon {
+ line-height: 1;
+ vertical-align: baseline;
+
+ width: @borderedSize;
+ height: @borderedSize;
+ padding: @borderedVerticalPadding @borderedHorizontalPadding !important;
+ box-shadow: @borderedShadow;
+}
+i.bordered.inverted.icon {
+ border: none;
+ box-shadow: none;
+}
+
+/*-------------------
+ Inverted
+--------------------*/
+
+/* Inverted Shapes */
+i.inverted.bordered.icon,
+i.inverted.circular.icon {
+ background-color: @black !important;
+ color: @white !important;
+}
+
+i.inverted.icon {
+ color: @white;
+}
+
+
+/*-------------------
+ Colors
+--------------------*/
+
+/* Red */
+i.red.icon {
+ color: @red !important;
+}
+i.inverted.red.icon {
+ color: @lightRed !important;
+}
+i.inverted.bordered.red.icon,
+i.inverted.circular.red.icon {
+ background-color: @red !important;
+ color: @white !important;
+}
+
+/* Orange */
+i.orange.icon {
+ color: @orange !important;
+}
+i.inverted.orange.icon {
+ color: @lightOrange !important;
+}
+i.inverted.bordered.orange.icon,
+i.inverted.circular.orange.icon {
+ background-color: @orange !important;
+ color: @white !important;
+}
+
+/* Yellow */
+i.yellow.icon {
+ color: @yellow !important;
+}
+i.inverted.yellow.icon {
+ color: @lightYellow !important;
+}
+i.inverted.bordered.yellow.icon,
+i.inverted.circular.yellow.icon {
+ background-color: @yellow !important;
+ color: @white !important;
+}
+
+/* Olive */
+i.olive.icon {
+ color: @olive !important;
+}
+i.inverted.olive.icon {
+ color: @lightOlive !important;
+}
+i.inverted.bordered.olive.icon,
+i.inverted.circular.olive.icon {
+ background-color: @olive !important;
+ color: @white !important;
+}
+
+/* Green */
+i.green.icon {
+ color: @green !important;
+}
+i.inverted.green.icon {
+ color: @lightGreen !important;
+}
+i.inverted.bordered.green.icon,
+i.inverted.circular.green.icon {
+ background-color: @green !important;
+ color: @white !important;
+}
+
+/* Teal */
+i.teal.icon {
+ color: @teal !important;
+}
+i.inverted.teal.icon {
+ color: @lightTeal !important;
+}
+i.inverted.bordered.teal.icon,
+i.inverted.circular.teal.icon {
+ background-color: @teal !important;
+ color: @white !important;
+}
+
+/* Blue */
+i.blue.icon {
+ color: @blue !important;
+}
+i.inverted.blue.icon {
+ color: @lightBlue !important;
+}
+i.inverted.bordered.blue.icon,
+i.inverted.circular.blue.icon {
+ background-color: @blue !important;
+ color: @white !important;
+}
+
+/* Violet */
+i.violet.icon {
+ color: @violet !important;
+}
+i.inverted.violet.icon {
+ color: @lightViolet !important;
+}
+i.inverted.bordered.violet.icon,
+i.inverted.circular.violet.icon {
+ background-color: @violet !important;
+ color: @white !important;
+}
+
+/* Purple */
+i.purple.icon {
+ color: @purple !important;
+}
+i.inverted.purple.icon {
+ color: @lightPurple !important;
+}
+i.inverted.bordered.purple.icon,
+i.inverted.circular.purple.icon {
+ background-color: @purple !important;
+ color: @white !important;
+}
+
+/* Pink */
+i.pink.icon {
+ color: @pink !important;
+}
+i.inverted.pink.icon {
+ color: @lightPink !important;
+}
+i.inverted.bordered.pink.icon,
+i.inverted.circular.pink.icon {
+ background-color: @pink !important;
+ color: @white !important;
+}
+
+/* Brown */
+i.brown.icon {
+ color: @brown !important;
+}
+i.inverted.brown.icon {
+ color: @lightBrown !important;
+}
+i.inverted.bordered.brown.icon,
+i.inverted.circular.brown.icon {
+ background-color: @brown !important;
+ color: @white !important;
+}
+
+/* Grey */
+i.grey.icon {
+ color: @grey !important;
+}
+i.inverted.grey.icon {
+ color: @lightGrey !important;
+}
+i.inverted.bordered.grey.icon,
+i.inverted.circular.grey.icon {
+ background-color: @grey !important;
+ color: @white !important;
+}
+
+/* Black */
+i.black.icon {
+ color: @black !important;
+}
+i.inverted.black.icon {
+ color: @lightBlack !important;
+}
+i.inverted.bordered.black.icon,
+i.inverted.circular.black.icon {
+ background-color: @black !important;
+ color: @white !important;
+}
+
+/*-------------------
+ Sizes
+--------------------*/
+
+i.mini.icon,
+i.mini.icons {
+ line-height: 1;
+ font-size: @mini;
+}
+i.tiny.icon,
+i.tiny.icons {
+ line-height: 1;
+ font-size: @tiny;
+}
+i.small.icon,
+i.small.icons {
+ line-height: 1;
+ font-size: @small;
+}
+i.icon,
+i.icons {
+ font-size: @medium;
+}
+i.large.icon,
+i.large.icons {
+ line-height: 1;
+ vertical-align: middle;
+ font-size: @large;
+}
+i.big.icon,
+i.big.icons {
+ line-height: 1;
+ vertical-align: middle;
+ font-size: @big;
+}
+i.huge.icon,
+i.huge.icons {
+ line-height: 1;
+ vertical-align: middle;
+ font-size: @huge;
+}
+i.massive.icon,
+i.massive.icons {
+ line-height: 1;
+ vertical-align: middle;
+ font-size: @massive;
+}
+
+/*******************************
+ Groups
+*******************************/
+
+i.icons {
+ display: inline-block;
+ position: relative;
+ line-height: 1;
+}
+
+i.icons .icon {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ margin: 0em;
+ margin: 0;
+}
+
+i.icons .icon:first-child {
+ position: static;
+ width: auto;
+ height: auto;
+ vertical-align: top;
+ transform: none;
+ margin-right: @distanceFromText;
+}
+
+/* Corner Icon */
+i.icons .corner.icon {
+ top: auto;
+ left: auto;
+ right: 0;
+ bottom: 0;
+ transform: none;
+ font-size: @cornerIconSize;
+ text-shadow: @cornerIconShadow;
+}
+
+i.icons .inverted.corner.icon {
+ text-shadow: @cornerIconInvertedShadow;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/image.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/image.less b/semantic/src/definitions/elements/image.less
new file mode 100755
index 0000000..b996cde
--- /dev/null
+++ b/semantic/src/definitions/elements/image.less
@@ -0,0 +1,324 @@
+/*!
+ * # Semantic UI - Image
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'image';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Image
+*******************************/
+
+.ui.image {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ max-width: 100%;
+ background-color: @placeholderColor;
+}
+
+img.ui.image {
+ display: block;
+}
+
+.ui.image svg,
+.ui.image img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+.ui.hidden.images,
+.ui.hidden.image {
+ display: none;
+}
+.ui.hidden.transition.images,
+.ui.hidden.transition.image {
+ display: block;
+ visibility: hidden;
+}
+
+
+.ui.disabled.images,
+.ui.disabled.image {
+ cursor: default;
+ opacity: @disabledOpacity;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*--------------
+ Inline
+---------------*/
+
+.ui.inline.image,
+.ui.inline.image svg,
+.ui.inline.image img {
+ display: inline-block;
+}
+
+/*------------------
+ Vertical Aligned
+-------------------*/
+
+.ui.top.aligned.images .image,
+.ui.top.aligned.image,
+.ui.top.aligned.image svg,
+.ui.top.aligned.image img {
+ display: inline-block;
+ vertical-align: top;
+}
+.ui.middle.aligned.images .image,
+.ui.middle.aligned.image,
+.ui.middle.aligned.image svg,
+.ui.middle.aligned.image img {
+ display: inline-block;
+ vertical-align: middle;
+}
+.ui.bottom.aligned.images .image,
+.ui.bottom.aligned.image,
+.ui.bottom.aligned.image svg,
+.ui.bottom.aligned.image img {
+ display: inline-block;
+ vertical-align: bottom;
+}
+
+/*--------------
+ Rounded
+---------------*/
+
+.ui.rounded.images .image,
+.ui.rounded.image,
+.ui.rounded.images .image > *,
+.ui.rounded.image > * {
+ border-radius: @roundedBorderRadius;
+}
+
+/*--------------
+ Bordered
+---------------*/
+
+.ui.bordered.images .image,
+.ui.bordered.images img,
+.ui.bordered.images svg,
+.ui.bordered.image img,
+.ui.bordered.image svg,
+img.ui.bordered.image {
+ border: @imageBorder;
+}
+
+/*--------------
+ Circular
+---------------*/
+
+.ui.circular.images,
+.ui.circular.image {
+ overflow: hidden;
+}
+
+.ui.circular.images .image,
+.ui.circular.image,
+.ui.circular.images .image > *,
+.ui.circular.image > * {
+ -webkit-border-radius: @circularRadius;
+ -moz-border-radius: @circularRadius;
+ border-radius: @circularRadius;
+}
+
+/*--------------
+ Fluid
+---------------*/
+
+.ui.fluid.images,
+.ui.fluid.image,
+.ui.fluid.images img,
+.ui.fluid.images svg,
+.ui.fluid.image svg,
+.ui.fluid.image img {
+ display: block;
+ width: 100%;
+ height: auto;
+}
+
+
+/*--------------
+ Avatar
+---------------*/
+
+.ui.avatar.images .image,
+.ui.avatar.images img,
+.ui.avatar.images svg,
+.ui.avatar.image img,
+.ui.avatar.image svg,
+.ui.avatar.image {
+ margin-right: @avatarMargin;
+
+ display: inline-block;
+ width: @avatarSize;
+ height: @avatarSize;
+
+ -webkit-border-radius: @circularRadius;
+ -moz-border-radius: @circularRadius;
+ border-radius: @circularRadius;
+}
+
+/*-------------------
+ Spaced
+--------------------*/
+
+.ui.spaced.image {
+ display: inline-block !important;
+ margin-left: @spacedDistance;
+ margin-right: @spacedDistance;
+}
+
+.ui[class*="left spaced"].image {
+ margin-left: @spacedDistance;
+ margin-right: 0em;
+}
+
+.ui[class*="right spaced"].image {
+ margin-left: 0em;
+ margin-right: @spacedDistance;
+}
+
+/*-------------------
+ Floated
+--------------------*/
+
+.ui.floated.image,
+.ui.floated.images {
+ float: left;
+ margin-right: @floatedHorizontalMargin;
+ margin-bottom: @floatedVerticalMargin;
+}
+.ui.right.floated.images,
+.ui.right.floated.image {
+ float: right;
+ margin-right: 0em;
+ margin-bottom: @floatedVerticalMargin;
+ margin-left: @floatedHorizontalMargin;
+}
+
+.ui.floated.images:last-child,
+.ui.floated.image:last-child {
+ margin-bottom: 0em;
+}
+
+
+.ui.centered.images,
+.ui.centered.image {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/*--------------
+ Sizes
+---------------*/
+
+.ui.mini.images .image,
+.ui.mini.images img,
+.ui.mini.images svg,
+.ui.mini.image {
+ width: @miniWidth;
+ height: auto;
+ font-size: @mini;
+}
+.ui.tiny.images .image,
+.ui.tiny.images img,
+.ui.tiny.images svg,
+.ui.tiny.image {
+ width: @tinyWidth;
+ height: auto;
+ font-size: @tiny;
+}
+.ui.small.images .image,
+.ui.small.images img,
+.ui.small.images svg,
+.ui.small.image {
+ width: @smallWidth;
+ height: auto;
+ font-size: @small;
+}
+.ui.medium.images .image,
+.ui.medium.images img,
+.ui.medium.images svg,
+.ui.medium.image {
+ width: @mediumWidth;
+ height: auto;
+ font-size: @medium;
+}
+.ui.large.images .image,
+.ui.large.images img,
+.ui.large.images svg,
+.ui.large.image {
+ width: @largeWidth;
+ height: auto;
+ font-size: @large;
+}
+.ui.big.images .image,
+.ui.big.images img,
+.ui.big.images svg,
+.ui.big.image {
+ width: @bigWidth;
+ height: auto;
+ font-size: @big;
+}
+.ui.huge.images .image,
+.ui.huge.images img,
+.ui.huge.images svg,
+.ui.huge.image {
+ width: @hugeWidth;
+ height: auto;
+ font-size: @huge;
+}
+.ui.massive.images .image,
+.ui.massive.images img,
+.ui.massive.images svg,
+.ui.massive.image {
+ width: @massiveWidth;
+ height: auto;
+ font-size: @massive;
+}
+
+
+/*******************************
+ Groups
+*******************************/
+
+.ui.images {
+ font-size: 0em;
+ margin: 0em -@imageHorizontalMargin 0rem;
+}
+
+.ui.images .image,
+.ui.images img,
+.ui.images svg {
+ display: inline-block;
+ margin: 0em @imageHorizontalMargin @imageVerticalMargin;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/input.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/input.less b/semantic/src/definitions/elements/input.less
new file mode 100755
index 0000000..991a309
--- /dev/null
+++ b/semantic/src/definitions/elements/input.less
@@ -0,0 +1,507 @@
+/*!
+ * # Semantic UI - Input
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'input';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Standard
+*******************************/
+
+
+/*--------------------
+ Inputs
+---------------------*/
+
+.ui.input {
+ position: relative;
+ font-weight: normal;
+ font-style: normal;
+ display: inline-flex;
+ color: @inputColor;
+}
+.ui.input input {
+ margin: 0em;
+ max-width: 100%;
+ flex: 1 0 auto;
+ outline: none;
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+ text-align: @textAlign;
+ line-height: @lineHeight;
+
+ font-family: @inputFont;
+ padding: @padding;
+
+ background: @background;
+ border: @border;
+ color: @inputColor;
+ border-radius: @borderRadius;
+ transition: @transition;
+
+ box-shadow: @boxShadow;
+}
+
+
+/*--------------------
+ Placeholder
+---------------------*/
+
+/* browsers require these rules separate */
+
+.ui.input input::-webkit-input-placeholder {
+ color: @placeholderColor;
+}
+.ui.input input::-moz-placeholder {
+ color: @placeholderColor;
+}
+.ui.input input:-ms-input-placeholder {
+ color: @placeholderColor;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------------
+ Disabled
+---------------------*/
+
+.ui.disabled.input,
+.ui.input input[disabled] {
+ opacity: @disabledOpacity;
+}
+
+.ui.disabled.input input,
+.ui.input input[disabled] {
+ pointer-events: none;
+}
+
+/*--------------------
+ Active
+---------------------*/
+
+.ui.input input:active,
+.ui.input.down input {
+ border-color: @downBorderColor;
+ background: @downBackground;
+ color: @downColor;
+ box-shadow: @downBoxShadow;
+}
+
+/*--------------------
+ Loading
+---------------------*/
+
+.ui.loading.loading.input > i.icon:before {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ border-radius: @circularRadius;
+ border: @loaderLineWidth solid @loaderFillColor;
+}
+.ui.loading.loading.input > i.icon:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ animation: button-spin @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @loaderLineColor transparent transparent;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+
+ box-shadow: 0px 0px 0px 1px transparent;
+}
+
+
+/*--------------------
+ Focus
+---------------------*/
+
+.ui.input.focus input,
+.ui.input input:focus {
+ border-color: @focusBorderColor;
+ background: @focusBackground;
+ color: @focusColor;
+ box-shadow: @focusBoxShadow;
+}
+.ui.input.focus input::-webkit-input-placeholder,
+.ui.input input:focus::-webkit-input-placeholder {
+ color: @placeholderFocusColor;
+}
+.ui.input.focus input::-moz-placeholder,
+.ui.input input:focus::-moz-placeholder {
+ color: @placeholderFocusColor;
+}
+.ui.input.focus input:-ms-input-placeholder,
+.ui.input input:focus:-ms-input-placeholder {
+ color: @placeholderFocusColor;
+}
+
+
+
+/*--------------------
+ Error
+---------------------*/
+
+.ui.input.error input {
+ background-color: @errorBackground;
+ border-color: @errorBorder;
+ color: @errorColor;
+ box-shadow: @errorBoxShadow;
+}
+
+/* Error Placeholder */
+.ui.input.error input::-webkit-input-placeholder {
+ color: @placeholderErrorColor;
+}
+.ui.input.error input::-moz-placeholder {
+ color: @placeholderErrorColor;
+}
+.ui.input.error input:-ms-input-placeholder {
+ color: @placeholderErrorColor !important;
+}
+
+/* Focused Error Placeholder */
+.ui.input.error input:focus::-webkit-input-placeholder {
+ color: @placeholderErrorFocusColor;
+}
+.ui.input.error input:focus::-moz-placeholder {
+ color: @placeholderErrorFocusColor;
+}
+.ui.input.error input:focus:-ms-input-placeholder {
+ color: @placeholderErrorFocusColor !important;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------------
+ Transparent
+---------------------*/
+
+
+.ui.transparent.input input {
+ border-color: transparent !important;
+ background-color: transparent !important;
+ padding: 0em !important;
+ box-shadow: none !important;
+}
+
+/* Transparent Icon */
+.ui.transparent.icon.input > i.icon {
+ width: @transparentIconWidth;
+}
+.ui.transparent.icon.input > input {
+ padding-left: 0em !important;
+ padding-right: @transparentIconMargin !important;
+}
+.ui.transparent[class*="left icon"].input > input {
+ padding-left: @transparentIconMargin !important;
+ padding-right: 0em !important;
+}
+
+/* Transparent Inverted */
+.ui.transparent.inverted.input {
+ color: @transparentInvertedColor;
+}
+.ui.transparent.inverted.input input {
+ color: inherit;
+}
+
+.ui.transparent.inverted.input input::-webkit-input-placeholder {
+ color: @transparentInvertedPlaceholderColor;
+}
+.ui.transparent.inverted.input input::-moz-placeholder {
+ color: @transparentInvertedPlaceholderColor;
+}
+.ui.transparent.inverted.input input:-ms-input-placeholder {
+ color: @transparentInvertedPlaceholderColor;
+}
+
+
+/*--------------------
+ Icon
+---------------------*/
+
+.ui.icon.input > i.icon {
+ cursor: default;
+ position: absolute;
+ line-height: 1;
+ text-align: center;
+ top: 0px;
+ right: 0px;
+ margin: 0em;
+ height: 100%;
+
+ width: @iconWidth;
+ opacity: @iconOpacity;
+ border-radius: 0em @borderRadius @borderRadius 0em;
+ transition: @iconTransition;
+}
+.ui.icon.input > i.icon:not(.link) {
+ pointer-events: none;
+}
+.ui.icon.input input {
+ padding-right: @iconMargin !important;
+}
+
+.ui.icon.input > i.icon:before,
+.ui.icon.input > i.icon:after {
+ left: 0;
+ position: absolute;
+ text-align: center;
+ top: 50%;
+ width: 100%;
+ margin-top: @iconOffset;
+}
+.ui.icon.input > i.link.icon {
+ cursor: pointer;
+}
+.ui.icon.input > i.circular.icon {
+ top: @circularIconVerticalOffset;
+ right: @circularIconHorizontalOffset;
+}
+
+/* Left Icon Input */
+.ui[class*="left icon"].input > i.icon {
+ right: auto;
+ left: @borderWidth;
+ border-radius: @borderRadius 0em 0em @borderRadius;
+}
+.ui[class*="left icon"].input > i.circular.icon {
+ right: auto;
+ left: @circularIconHorizontalOffset;
+}
+.ui[class*="left icon"].input > input {
+ padding-left: @iconMargin !important;
+ padding-right: @horizontalPadding !important;
+}
+
+/* Focus */
+.ui.icon.input > input:focus ~ i.icon {
+ opacity: 1;
+}
+
+/*--------------------
+ Labeled
+---------------------*/
+
+/* Adjacent Label */
+.ui.labeled.input > .label {
+ flex: 0 0 auto;
+ margin: 0;
+ font-size: @relativeMedium;
+}
+.ui.labeled.input > .label:not(.corner) {
+ padding-top: @verticalPadding;
+ padding-bottom: @verticalPadding;
+}
+
+/* Regular Label on Left */
+.ui.labeled.input:not([class*="corner labeled"]) .label:first-child {
+ border-top-right-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+.ui.labeled.input:not([class*="corner labeled"]) .label:first-child + input {
+ border-top-left-radius: 0px;
+ border-bottom-left-radius: 0px;
+ border-left-color: transparent;
+}
+.ui.labeled.input:not([class*="corner labeled"]) .label:first-child + input:focus {
+ border-left-color: @focusBorderColor;
+}
+
+/* Regular Label on Right */
+.ui[class*="right labeled"].input input {
+ border-top-right-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+ border-right-color: transparent !important;
+}
+.ui[class*="right labeled"].input input + .label {
+ border-top-left-radius: 0px;
+ border-bottom-left-radius: 0px;
+}
+
+.ui[class*="right labeled"].input input:focus {
+ border-right-color: @focusBorderColor !important;
+}
+
+/* Corner Label */
+.ui.labeled.input .corner.label {
+ top: @labelCornerTop;
+ right: @labelCornerRight;
+ font-size: @labelCornerSize;
+ border-radius: 0em @borderRadius 0em 0em;
+}
+
+/* Spacing with corner label */
+.ui[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input input {
+ padding-right: @labeledMargin !important;
+}
+.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > input {
+ padding-right: @labeledIconInputMargin !important;
+}
+.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > .icon {
+ margin-right: @labeledIconMargin;
+}
+
+/* Left Labeled */
+.ui[class*="left corner labeled"].labeled.input input {
+ padding-left: @labeledMargin !important;
+}
+.ui[class*="left corner labeled"].icon.input > input {
+ padding-left: @labeledIconInputMargin !important;
+}
+.ui[class*="left corner labeled"].icon.input > .icon {
+ margin-left: @labeledIconMargin;
+}
+
+/* Corner Label Position */
+.ui.input > .ui.corner.label {
+ top: @borderWidth;
+ right: @borderWidth;
+}
+.ui.input > .ui.left.corner.label {
+ right: auto;
+ left: @borderWidth;
+}
+
+
+/*--------------------
+ Action
+---------------------*/
+
+.ui.action.input > .button,
+.ui.action.input > .buttons {
+ display: flex;
+ align-items: center;
+ flex: 0 0 auto;
+}
+.ui.action.input > .button,
+.ui.action.input > .buttons > .button {
+ padding-top: @verticalPadding;
+ padding-bottom: @verticalPadding;
+ margin: 0;
+}
+
+/* Button on Right */
+.ui.action.input:not([class*="left action"]) > input {
+ border-top-right-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+ border-right-color: transparent !important;
+}
+.ui.action.input:not([class*="left action"]) > .dropdown:not(:first-child),
+.ui.action.input:not([class*="left action"]) > .button:not(:first-child),
+.ui.action.input:not([class*="left action"]) > .buttons:not(:first-child) > .button {
+ border-radius: 0px;
+}
+.ui.action.input:not([class*="left action"]) > .dropdown:last-child,
+.ui.action.input:not([class*="left action"]) > .button:last-child,
+.ui.action.input:not([class*="left action"]) > .buttons:last-child > .button {
+ border-radius: 0px @borderRadius @borderRadius 0px;
+}
+
+/* Input Focus */
+.ui.action.input:not([class*="left action"]) input:focus {
+ border-right-color: @focusBorderColor !important;
+}
+
+/* Button on Left */
+.ui[class*="left action"].input > input {
+ border-top-left-radius: 0px !important;
+ border-bottom-left-radius: 0px !important;
+ border-left-color: transparent !important;
+}
+.ui[class*="left action"].input > .dropdown,
+.ui[class*="left action"].input > .button,
+.ui[class*="left action"].input > .buttons > .button {
+ border-radius: 0px;
+}
+.ui[class*="left action"].input > .dropdown:first-child,
+.ui[class*="left action"].input > .button:first-child,
+.ui[class*="left action"].input > .buttons:first-child > .button {
+ border-radius: @borderRadius 0px 0px @borderRadius;
+}
+/* Input Focus */
+.ui[class*="left action"].input > input:focus {
+ border-left-color: @focusBorderColor !important;
+}
+
+/*--------------------
+ Inverted
+---------------------*/
+
+/* Standard */
+.ui.inverted.input input {
+ border: none;
+}
+
+/*--------------------
+ Fluid
+---------------------*/
+
+.ui.fluid.input {
+ display: flex;
+}
+.ui.fluid.input > input {
+ width: 0px !important;
+}
+
+/*--------------------
+ Size
+---------------------*/
+
+.ui.mini.input {
+ font-size: @relativeMini;
+}
+.ui.small.input {
+ font-size: @relativeSmall;
+}
+.ui.input {
+ font-size: @relativeMedium;
+}
+.ui.large.input {
+ font-size: @relativeLarge;
+}
+.ui.big.input {
+ font-size: @relativeBig;
+}
+.ui.huge.input {
+ font-size: @relativeHuge;
+}
+.ui.massive.input {
+ font-size: @relativeMassive;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/label.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/label.less b/semantic/src/definitions/elements/label.less
new file mode 100755
index 0000000..fe84cb5
--- /dev/null
+++ b/semantic/src/definitions/elements/label.less
@@ -0,0 +1,1257 @@
+/*!
+ * # Semantic UI - Label
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'label';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Label
+*******************************/
+
+.ui.label {
+ display: inline-block;
+ line-height: 1;
+ vertical-align: @verticalAlign;
+
+ margin: @verticalMargin @horizontalMargin;
+
+ background-color: @backgroundColor;
+ background-image: @backgroundImage;
+ padding: @verticalPadding @horizontalPadding;
+ color: @color;
+
+ text-transform: @textTransform;
+ font-weight: @fontWeight;
+
+ border: @border;
+ border-radius: @borderRadius;
+ transition: @transition;
+}
+
+.ui.label:first-child {
+ margin-left: 0em;
+}
+.ui.label:last-child {
+ margin-right: 0em;
+}
+
+/* Link */
+a.ui.label {
+ cursor: pointer;
+}
+
+/* Inside Link */
+.ui.label > a {
+ cursor: pointer;
+ color: inherit;
+ opacity: @linkOpacity;
+ transition: @linkTransition;
+}
+.ui.label > a:hover {
+ opacity: 1;
+}
+
+/* Image */
+.ui.label > img {
+ width: auto !important;
+ vertical-align: middle;
+ height: @imageHeight !important;
+}
+
+/* Icon */
+.ui.label > .icon {
+ width: auto;
+ margin: 0em @iconDistance 0em 0em;
+}
+
+/* Detail */
+.ui.label > .detail {
+ display: inline-block;
+ vertical-align: top;
+ font-weight: @detailFontWeight;
+ margin-left: @detailMargin;
+ opacity: @detailOpacity;
+}
+.ui.label > .detail .icon {
+ margin: 0em @detailIconDistance 0em 0em;
+}
+
+
+/* Removable label */
+.ui.label > .close.icon,
+.ui.label > .delete.icon {
+ cursor: pointer;
+ margin-right: 0em;
+ margin-left: @deleteMargin;
+ font-size: @deleteSize;
+ opacity: @deleteOpacity;
+ transition: @deleteTransition;
+}
+.ui.label > .delete.icon:hover {
+ opacity: 1;
+}
+
+/*-------------------
+ Group
+--------------------*/
+
+.ui.labels > .label {
+ margin: 0em @groupHorizontalMargin @groupVerticalMargin 0em;
+}
+
+
+/*-------------------
+ Coupling
+--------------------*/
+
+.ui.header > .ui.label {
+ margin-top: @lineHeightOffset;
+}
+
+/* Remove border radius on attached segment */
+.ui.attached.segment > .ui.top.left.attached.label,
+.ui.bottom.attached.segment > .ui.top.left.attached.label {
+ border-top-left-radius: 0;
+}
+.ui.attached.segment > .ui.top.right.attached.label,
+.ui.bottom.attached.segment > .ui.top.right.attached.label {
+ border-top-right-radius: 0;
+}
+.ui.top.attached.segment > .ui.bottom.left.attached.label {
+ border-bottom-left-radius: 0;
+}
+.ui.top.attached.segment > .ui.bottom.right.attached.label {
+ border-bottom-right-radius: 0;
+}
+
+/* Padding on next content after a label */
+.ui.top.attached.label:first-child + :not(.attached),
+.ui.top.attached.label + [class*="right floated"] + * {
+ margin-top: @attachedSegmentPadding !important;
+}
+.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {
+ margin-top: 0em;
+ margin-bottom: @attachedSegmentPadding !important;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+.ui.image.label {
+ width: auto !important;
+ margin-top: 0em;
+ margin-bottom: 0em;
+ max-width: 9999px;
+ vertical-align: baseline;
+ text-transform: none;
+
+ background: @imageLabelBackground;
+ padding: @imageLabelPadding;
+ border-radius: @imageLabelBorderRadius;
+ box-shadow: @imageLabelBoxShadow;
+}
+
+.ui.image.label img {
+ display: inline-block;
+ vertical-align: top;
+
+ height: @imageLabelImageHeight;
+ margin: @imageLabelImageMargin;
+ border-radius: @imageLabelImageBorderRadius;
+}
+
+.ui.image.label .detail {
+ background: @imageLabelDetailBackground;
+ margin: @imageLabelDetailMargin;
+ padding: @imageLabelDetailPadding;
+ border-radius: 0em @imageLabelBorderRadius @imageLabelBorderRadius 0em;
+}
+
+/*-------------------
+ Tag
+--------------------*/
+
+.ui.tag.labels .label,
+.ui.tag.label {
+ margin-left: 1em;
+ position: relative;
+ padding-left: @tagHorizontalPadding;
+ padding-right: @tagHorizontalPadding;
+
+ border-radius: 0em @borderRadius @borderRadius 0em;
+ transition: @tagTransition;
+}
+.ui.tag.labels .label:before,
+.ui.tag.label:before {
+ position: absolute;
+ transform: translateY(-50%) translateX(50%) rotate(-45deg);
+
+ top: @tagTriangleTopOffset;
+ right: @tagTriangleRightOffset;
+ content: '';
+
+ background-color: inherit;
+ background-image: @tagTriangleBackgroundImage;
+
+ width: @tagTriangleSize;
+ height: @tagTriangleSize;
+ transition: @tagTransition;
+}
+
+
+.ui.tag.labels .label:after,
+.ui.tag.label:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: -(@tagCircleSize / 2);
+
+ margin-top: -(@tagCircleSize / 2);
+ background-color: @tagCircleColor !important;
+ width: @tagCircleSize;
+ height: @tagCircleSize;
+
+ box-shadow: @tagCircleBoxShadow;
+ border-radius: @circularRadius;
+}
+
+
+/*-------------------
+ Corner Label
+--------------------*/
+
+.ui.corner.label {
+ position: absolute;
+ top: 0em;
+ right: 0em;
+ margin: 0em;
+ padding: 0em;
+ text-align: center;
+
+ border-color: @backgroundColor;
+
+ width: @cornerTriangleSize;
+ height: @cornerTriangleSize;
+ z-index: @cornerTriangleZIndex;
+ transition: @cornerTriangleTransition;
+}
+
+/* Icon Label */
+.ui.corner.label{
+ background-color: transparent !important;
+}
+.ui.corner.label:after {
+ position: absolute;
+ content: "";
+ right: 0em;
+ top: 0em;
+ z-index: -1;
+
+ width: 0em;
+ height: 0em;
+ background-color: transparent !important;
+
+ border-top: 0em solid transparent;
+ border-right: @cornerTriangleSize solid transparent;
+ border-bottom: @cornerTriangleSize solid transparent;
+ border-left: 0em solid transparent;
+
+ border-right-color: inherit;
+ transition: @cornerTriangleTransition;
+}
+
+.ui.corner.label .icon {
+ cursor: default;
+ position: relative;
+ top: @cornerIconTopOffset;
+ left: @cornerIconLeftOffset;
+ font-size: @cornerIconSize;
+ margin: 0em;
+}
+
+/* Left Corner */
+.ui.left.corner.label,
+.ui.left.corner.label:after {
+ right: auto;
+ left: 0em;
+}
+.ui.left.corner.label:after {
+ border-top: @cornerTriangleSize solid transparent;
+ border-right: @cornerTriangleSize solid transparent;
+ border-bottom: 0em solid transparent;
+ border-left: 0em solid transparent;
+
+ border-top-color: inherit;
+}
+.ui.left.corner.label .icon {
+ left: -@cornerIconLeftOffset;
+}
+
+/* Segment */
+.ui.segment > .ui.corner.label {
+ top: -1px;
+ right: -1px;
+}
+.ui.segment > .ui.left.corner.label {
+ right: auto;
+ left: -1px;
+}
+
+/*-------------------
+ Ribbon
+--------------------*/
+
+.ui.ribbon.label {
+ position: relative;
+ margin: 0em;
+ min-width: max-content;
+ border-radius: 0em @borderRadius @borderRadius 0em;
+ border-color: @ribbonShadowColor;
+}
+
+.ui.ribbon.label:after {
+ position: absolute;
+ content: '';
+
+ top: 100%;
+ left: 0%;
+ background-color: transparent !important;
+
+ border-style: solid;
+ border-width: 0em @ribbonTriangleSize @ribbonTriangleSize 0em;
+ border-color: transparent;
+ border-right-color: inherit;
+
+ width: 0em;
+ height: 0em;
+}
+/* Positioning */
+.ui.ribbon.label {
+ left: @ribbonOffset;
+ margin-right: -@ribbonTriangleSize;
+ padding-left: @ribbonDistance;
+ padding-right: @ribbonTriangleSize;
+}
+.ui[class*="right ribbon"].label {
+ left: @rightRibbonOffset;
+ padding-left: @ribbonTriangleSize;
+ padding-right: @ribbonDistance;
+}
+
+/* Right Ribbon */
+.ui[class*="right ribbon"].label {
+ text-align: left;
+ transform: translateX(-100%);
+ border-radius: @borderRadius 0em 0em @borderRadius;
+}
+.ui[class*="right ribbon"].label:after {
+ left: auto;
+ right: 0%;
+
+ border-style: solid;
+ border-width: @ribbonTriangleSize @ribbonTriangleSize 0em 0em;
+ border-color: transparent;
+ border-top-color: inherit;
+}
+
+/* Inside Table */
+.ui.image > .ribbon.label,
+.ui.card .image > .ribbon.label {
+ position: absolute;
+ top: @ribbonImageTopDistance;
+}
+.ui.card .image > .ui.ribbon.label,
+.ui.image > .ui.ribbon.label {
+ left: @ribbonImageOffset;
+}
+.ui.card .image > .ui[class*="right ribbon"].label,
+.ui.image > .ui[class*="right ribbon"].label {
+ left: @rightRibbonImageOffset;
+ padding-left: @horizontalPadding;
+}
+
+/* Inside Table */
+.ui.table td > .ui.ribbon.label {
+ left: @ribbonTableOffset;
+}
+.ui.table td > .ui[class*="right ribbon"].label {
+ left: @rightRibbonTableOffset;
+ padding-left: @horizontalPadding;
+}
+
+
+/*-------------------
+ Attached
+--------------------*/
+
+.ui[class*="top attached"].label,
+.ui.attached.label {
+ width: 100%;
+ position: absolute;
+ margin: 0em;
+ top: 0em;
+ left: 0em;
+
+ padding: @attachedVerticalPadding @attachedHorizontalPadding;
+
+ border-radius: @attachedCornerBorderRadius @attachedCornerBorderRadius 0em 0em;
+}
+.ui[class*="bottom attached"].label {
+ top: auto;
+ bottom: 0em;
+ border-radius: 0em 0em @attachedCornerBorderRadius @attachedCornerBorderRadius;
+}
+
+.ui[class*="top left attached"].label {
+ width: auto;
+ margin-top: 0em !important;
+ border-radius: @attachedCornerBorderRadius 0em @attachedBorderRadius 0em;
+}
+
+.ui[class*="top right attached"].label {
+ width: auto;
+ left: auto;
+ right: 0em;
+ border-radius: 0em @attachedCornerBorderRadius 0em @attachedBorderRadius;
+}
+.ui[class*="bottom left attached"].label {
+ width: auto;
+ top: auto;
+ bottom: 0em;
+ border-radius: 0em @attachedBorderRadius 0em @attachedCornerBorderRadius;
+}
+.ui[class*="bottom right attached"].label {
+ top: auto;
+ bottom: 0em;
+ left: auto;
+ right: 0em;
+ width: auto;
+ border-radius: @attachedBorderRadius 0em @attachedCornerBorderRadius 0em;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*-------------------
+ Disabled
+--------------------*/
+
+.ui.label.disabled {
+ opacity: 0.5;
+}
+
+/*-------------------
+ Hover
+--------------------*/
+
+a.ui.labels .label:hover,
+a.ui.label:hover {
+ background-color: @labelHoverBackgroundColor;
+ border-color: @labelHoverBackgroundColor;
+
+ background-image: @labelHoverBackgroundImage;
+ color: @labelHoverTextColor;
+}
+.ui.labels a.label:hover:before,
+a.ui.label:hover:before {
+ color: @labelHoverTextColor;
+}
+
+/*-------------------
+ Active
+--------------------*/
+
+.ui.active.label {
+ background-color: @labelActiveBackgroundColor;
+ border-color: @labelActiveBackgroundColor;
+
+ background-image: @labelActiveBackgroundImage;
+ color: @labelActiveTextColor;
+}
+.ui.active.label:before {
+ background-color: @labelActiveBackgroundColor;
+ background-image: @labelActiveBackgroundImage;
+ color: @labelActiveTextColor;
+}
+
+/*-------------------
+ Active Hover
+--------------------*/
+
+a.ui.labels .active.label:hover,
+a.ui.active.label:hover {
+ background-color: @labelActiveHoverBackgroundColor;
+ border-color: @labelActiveHoverBackgroundColor;
+
+ background-image: @labelActiveHoverBackgroundImage;
+ color: @labelActiveHoverTextColor;
+}
+.ui.labels a.active.label:ActiveHover:before,
+a.ui.active.label:ActiveHover:before {
+ background-color: @labelActiveHoverBackgroundColor;
+ background-image: @labelActiveHoverBackgroundImage;
+ color: @labelActiveHoverTextColor;
+}
+
+
+/*-------------------
+ Visible
+--------------------*/
+
+.ui.labels.visible .label,
+.ui.label.visible {
+ display: inline-block !important;
+}
+
+/*-------------------
+ Hidden
+--------------------*/
+
+.ui.labels.hidden .label,
+.ui.label.hidden {
+ display: none !important;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*-------------------
+ Colors
+--------------------*/
+
+/*--- Red ---*/
+.ui.red.labels .label,
+.ui.red.label {
+ background-color: @red !important;
+ border-color: @red !important;
+ color: @redTextColor !important;
+}
+/* Link */
+.ui.red.labels .label:hover,
+a.ui.red.label:hover{
+ background-color: @redHover !important;
+ border-color: @redHover !important;
+ color: @redHoverTextColor !important;
+}
+/* Corner */
+.ui.red.corner.label,
+.ui.red.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.red.ribbon.label {
+ border-color: @redRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.red.label {
+ background-color: @white !important;
+ color: @red !important;
+ border-color: @red !important;
+}
+.ui.basic.red.labels a.label:hover,
+a.ui.basic.red.label:hover {
+ background-color: @white !important;
+ color: @redHover !important;
+ border-color: @redHover !important;
+}
+
+/*--- Orange ---*/
+.ui.orange.labels .label,
+.ui.orange.label {
+ background-color: @orange !important;
+ border-color: @orange !important;
+ color: @orangeTextColor !important;
+}
+/* Link */
+.ui.orange.labels .label:hover,
+a.ui.orange.label:hover{
+ background-color: @orangeHover !important;
+ border-color: @orangeHover !important;
+ color: @orangeHoverTextColor !important;
+}
+/* Corner */
+.ui.orange.corner.label,
+.ui.orange.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.orange.ribbon.label {
+ border-color: @orangeRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.orange.label {
+ background-color: @white !important;
+ color: @orange !important;
+ border-color: @orange !important;
+}
+.ui.basic.orange.labels a.label:hover,
+a.ui.basic.orange.label:hover {
+ background-color: @white !important;
+ color: @orangeHover !important;
+ border-color: @orangeHover !important;
+}
+
+/*--- Yellow ---*/
+.ui.yellow.labels .label,
+.ui.yellow.label {
+ background-color: @yellow !important;
+ border-color: @yellow !important;
+ color: @yellowTextColor !important;
+}
+/* Link */
+.ui.yellow.labels .label:hover,
+a.ui.yellow.label:hover{
+ background-color: @yellowHover !important;
+ border-color: @yellowHover !important;
+ color: @yellowHoverTextColor !important;
+}
+/* Corner */
+.ui.yellow.corner.label,
+.ui.yellow.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.yellow.ribbon.label {
+ border-color: @yellowRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.yellow.label {
+ background-color: @white !important;
+ color: @yellow !important;
+ border-color: @yellow !important;
+}
+.ui.basic.yellow.labels a.label:hover,
+a.ui.basic.yellow.label:hover {
+ background-color: @white !important;
+ color: @yellowHover !important;
+ border-color: @yellowHover !important;
+}
+
+/*--- Olive ---*/
+.ui.olive.labels .label,
+.ui.olive.label {
+ background-color: @olive !important;
+ border-color: @olive !important;
+ color: @oliveTextColor !important;
+}
+/* Link */
+.ui.olive.labels .label:hover,
+a.ui.olive.label:hover{
+ background-color: @oliveHover !important;
+ border-color: @oliveHover !important;
+ color: @oliveHoverTextColor !important;
+}
+/* Corner */
+.ui.olive.corner.label,
+.ui.olive.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.olive.ribbon.label {
+ border-color: @greenRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.olive.label {
+ background-color: @white !important;
+ color: @olive !important;
+ border-color: @olive !important;
+}
+.ui.basic.olive.labels a.label:hover,
+a.ui.basic.olive.label:hover {
+ background-color: @white !important;
+ color: @oliveHover !important;
+ border-color: @oliveHover !important;
+}
+
+/*--- Green ---*/
+.ui.green.labels .label,
+.ui.green.label {
+ background-color: @green !important;
+ border-color: @green !important;
+ color: @greenTextColor !important;
+}
+/* Link */
+.ui.green.labels .label:hover,
+a.ui.green.label:hover{
+ background-color: @greenHover !important;
+ border-color: @greenHover !important;
+ color: @greenHoverTextColor !important;
+}
+/* Corner */
+.ui.green.corner.label,
+.ui.green.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.green.ribbon.label {
+ border-color: @greenRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.green.label {
+ background-color: @white !important;
+ color: @green !important;
+ border-color: @green !important;
+}
+.ui.basic.green.labels a.label:hover,
+a.ui.basic.green.label:hover {
+ background-color: @white !important;
+ color: @greenHover !important;
+ border-color: @greenHover !important;
+}
+
+/*--- Teal ---*/
+.ui.teal.labels .label,
+.ui.teal.label {
+ background-color: @teal !important;
+ border-color: @teal !important;
+ color: @tealTextColor !important;
+}
+/* Link */
+.ui.teal.labels .label:hover,
+a.ui.teal.label:hover{
+ background-color: @tealHover !important;
+ border-color: @tealHover !important;
+ color: @tealHoverTextColor !important;
+}
+/* Corner */
+.ui.teal.corner.label,
+.ui.teal.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.teal.ribbon.label {
+ border-color: @tealRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.teal.label {
+ background-color: @white !important;
+ color: @teal !important;
+ border-color: @teal !important;
+}
+.ui.basic.teal.labels a.label:hover,
+a.ui.basic.teal.label:hover {
+ background-color: @white !important;
+ color: @tealHover !important;
+ border-color: @tealHover !important;
+}
+
+/*--- Blue ---*/
+.ui.blue.labels .label,
+.ui.blue.label {
+ background-color: @blue !important;
+ border-color: @blue !important;
+ color: @blueTextColor !important;
+}
+/* Link */
+.ui.blue.labels .label:hover,
+a.ui.blue.label:hover{
+ background-color: @blueHover !important;
+ border-color: @blueHover !important;
+ color: @blueHoverTextColor !important;
+}
+/* Corner */
+.ui.blue.corner.label,
+.ui.blue.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.blue.ribbon.label {
+ border-color: @blueRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.blue.label {
+ background-color: @white !important;
+ color: @blue !important;
+ border-color: @blue !important;
+}
+.ui.basic.blue.labels a.label:hover,
+a.ui.basic.blue.label:hover {
+ background-color: @white !important;
+ color: @blueHover !important;
+ border-color: @blueHover !important;
+}
+
+/*--- Violet ---*/
+.ui.violet.labels .label,
+.ui.violet.label {
+ background-color: @violet !important;
+ border-color: @violet !important;
+ color: @violetTextColor !important;
+}
+/* Link */
+.ui.violet.labels .label:hover,
+a.ui.violet.label:hover{
+ background-color: @violetHover !important;
+ border-color: @violetHover !important;
+ color: @violetHoverTextColor !important;
+}
+/* Corner */
+.ui.violet.corner.label,
+.ui.violet.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.violet.ribbon.label {
+ border-color: @violetRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.violet.label {
+ background-color: @white !important;
+ color: @violet !important;
+ border-color: @violet !important;
+}
+.ui.basic.violet.labels a.label:hover,
+a.ui.basic.violet.label:hover {
+ background-color: @white !important;
+ color: @violetHover !important;
+ border-color: @violetHover !important;
+}
+
+/*--- Purple ---*/
+.ui.purple.labels .label,
+.ui.purple.label {
+ background-color: @purple !important;
+ border-color: @purple !important;
+ color: @purpleTextColor !important;
+}
+/* Link */
+.ui.purple.labels .label:hover,
+a.ui.purple.label:hover{
+ background-color: @purpleHover !important;
+ border-color: @purpleHover !important;
+ color: @purpleHoverTextColor !important;
+}
+/* Corner */
+.ui.purple.corner.label,
+.ui.purple.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.purple.ribbon.label {
+ border-color: @purpleRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.purple.label {
+ background-color: @white !important;
+ color: @purple !important;
+ border-color: @purple !important;
+}
+.ui.basic.purple.labels a.label:hover,
+a.ui.basic.purple.label:hover {
+ background-color: @white !important;
+ color: @purpleHover !important;
+ border-color: @purpleHover !important;
+}
+
+/*--- Pink ---*/
+.ui.pink.labels .label,
+.ui.pink.label {
+ background-color: @pink !important;
+ border-color: @pink !important;
+ color: @pinkTextColor !important;
+}
+/* Link */
+.ui.pink.labels .label:hover,
+a.ui.pink.label:hover{
+ background-color: @pinkHover !important;
+ border-color: @pinkHover !important;
+ color: @pinkHoverTextColor !important;
+}
+/* Corner */
+.ui.pink.corner.label,
+.ui.pink.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.pink.ribbon.label {
+ border-color: @pinkRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.pink.label {
+ background-color: @white !important;
+ color: @pink !important;
+ border-color: @pink !important;
+}
+.ui.basic.pink.labels a.label:hover,
+a.ui.basic.pink.label:hover {
+ background-color: @white !important;
+ color: @pinkHover !important;
+ border-color: @pinkHover !important;
+}
+
+/*--- Brown ---*/
+.ui.brown.labels .label,
+.ui.brown.label {
+ background-color: @brown !important;
+ border-color: @brown !important;
+ color: @brownTextColor !important;
+}
+/* Link */
+.ui.brown.labels .label:hover,
+a.ui.brown.label:hover{
+ background-color: @brownHover !important;
+ border-color: @brownHover !important;
+ color: @brownHoverTextColor !important;
+}
+/* Corner */
+.ui.brown.corner.label,
+.ui.brown.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.brown.ribbon.label {
+ border-color: @brownRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.brown.label {
+ background-color: @white !important;
+ color: @brown !important;
+ border-color: @brown !important;
+}
+.ui.basic.brown.labels a.label:hover,
+a.ui.basic.brown.label:hover {
+ background-color: @white !important;
+ color: @brownHover !important;
+ border-color: @brownHover !important;
+}
+
+/*--- Grey ---*/
+.ui.grey.labels .label,
+.ui.grey.label {
+ background-color: @grey !important;
+ border-color: @grey !important;
+ color: @greyTextColor !important;
+}
+/* Link */
+.ui.grey.labels .label:hover,
+a.ui.grey.label:hover{
+ background-color: @greyHover !important;
+ border-color: @greyHover !important;
+ color: @greyHoverTextColor !important;
+}
+/* Corner */
+.ui.grey.corner.label,
+.ui.grey.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.grey.ribbon.label {
+ border-color: @brownRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.grey.label {
+ background-color: @white !important;
+ color: @grey !important;
+ border-color: @grey !important;
+}
+.ui.basic.grey.labels a.label:hover,
+a.ui.basic.grey.label:hover {
+ background-color: @white !important;
+ color: @greyHover !important;
+ border-color: @greyHover !important;
+}
+
+/*--- Black ---*/
+.ui.black.labels .label,
+.ui.black.label {
+ background-color: @black !important;
+ border-color: @black !important;
+ color: @blackTextColor !important;
+}
+/* Link */
+.ui.black.labels .label:hover,
+a.ui.black.label:hover{
+ background-color: @blackHover !important;
+ border-color: @blackHover !important;
+ color: @blackHoverTextColor !important;
+}
+/* Corner */
+.ui.black.corner.label,
+.ui.black.corner.label:hover {
+ background-color: transparent !important;
+}
+/* Ribbon */
+.ui.black.ribbon.label {
+ border-color: @brownRibbonShadow !important;
+}
+/* Basic */
+.ui.basic.black.label {
+ background-color: @white !important;
+ color: @black !important;
+ border-color: @black !important;
+}
+.ui.basic.black.labels a.label:hover,
+a.ui.basic.black.label:hover {
+ background-color: @white !important;
+ color: @blackHover !important;
+ border-color: @blackHover !important;
+}
+
+
+/*-------------------
+ Basic
+--------------------*/
+
+.ui.basic.label {
+ background: @basicBackground;
+ border: @basicBorder;
+ color: @basicColor;
+ box-shadow: @basicBoxShadow;
+}
+
+/* Link */
+a.ui.basic.label:hover {
+ text-decoration: none;
+ background: @basicHoverBackground;
+ color: @basicHoverColor;
+ box-shadow: @basicHoverBorder;
+ box-shadow: @basicHoverBoxShadow;
+}
+
+/* Pointing */
+.ui.basic.pointing.label:before {
+ border-color: inherit;
+}
+
+
+/*-------------------
+ Fluid
+--------------------*/
+
+.ui.label.fluid,
+.ui.fluid.labels > .label {
+ width: 100%;
+ box-sizing: border-box;
+}
+
+/*-------------------
+ Inverted
+--------------------*/
+
+.ui.inverted.labels .label,
+.ui.inverted.label {
+ color: @invertedTextColor !important;
+}
+
+/*-------------------
+ Horizontal
+--------------------*/
+
+.ui.horizontal.labels .label,
+.ui.horizontal.label {
+ margin: 0em @horizontalLabelMargin 0em 0em;
+
+ padding: @horizontalLabelVerticalPadding @horizontalPadding;
+ min-width: @horizontalLabelMinWidth;
+ text-align: center;
+}
+
+
+/*-------------------
+ Circular
+--------------------*/
+
+.ui.circular.labels .label,
+.ui.circular.label {
+ min-width: @circularMinSize;
+ min-height: @circularMinSize;
+
+ padding: @circularPadding !important;
+
+ line-height: 1em;
+ text-align: center;
+ border-radius: @circularRadius;
+}
+.ui.empty.circular.labels .label,
+.ui.empty.circular.label {
+ min-width: 0em;
+ min-height: 0em;
+ overflow: hidden;
+ width: @emptyCircleSize;
+ height: @emptyCircleSize;
+ vertical-align: baseline;
+}
+
+/*-------------------
+ Pointing
+--------------------*/
+
+.ui.pointing.label {
+ position: relative;
+}
+
+.ui.attached.pointing.label {
+ position: absolute;
+}
+
+.ui.pointing.label:before {
+ background-color: inherit;
+ background-image: inherit;
+ border-width: none;
+ border-style: solid;
+ border-color: @pointingBorderColor;
+}
+/* Arrow */
+.ui.pointing.label:before {
+ position: absolute;
+ content: '';
+ transform: rotate(45deg);
+ background-image: none;
+
+ z-index: @pointingTriangleZIndex;
+ width: @pointingTriangleSize;
+ height: @pointingTriangleSize;
+ transition: @pointingTriangleTransition;
+}
+
+/*--- Above ---*/
+.ui.pointing.label,
+.ui[class*="pointing above"].label {
+ margin-top: @pointingVerticalDistance;
+}
+.ui.pointing.label:before,
+.ui[class*="pointing above"].label:before {
+ border-width: @borderWidth 0px 0px @borderWidth;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ top: 0%;
+ left: 50%;
+}
+/*--- Below ---*/
+.ui[class*="bottom pointing"].label,
+.ui[class*="pointing below"].label {
+ margin-top: 0em;
+ margin-bottom: @pointingVerticalDistance;
+}
+.ui[class*="bottom pointing"].label:before,
+.ui[class*="pointing below"].label:before {
+ border-width: 0px @borderWidth @borderWidth 0px;
+ top: auto;
+ right: auto;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ top: 100%;
+ left: 50%;
+}
+/*--- Left ---*/
+.ui[class*="left pointing"].label {
+ margin-top: 0em;
+ margin-left: @pointingHorizontalDistance;
+}
+.ui[class*="left pointing"].label:before {
+ border-width: 0px 0px @borderWidth @borderWidth;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ bottom: auto;
+ right: auto;
+ top: 50%;
+ left: 0em;
+}
+/*--- Right ---*/
+.ui[class*="right pointing"].label {
+ margin-top: 0em;
+ margin-right: @pointingHorizontalDistance;
+}
+.ui[class*="right pointing"].label:before {
+ border-width: @borderWidth @borderWidth 0px 0px;
+ transform: translateX(50%) translateY(-50%) rotate(45deg);
+ top: 50%;
+ right: 0%;
+ bottom: auto;
+ left: auto;
+}
+
+/* Basic Pointing */
+
+/*--- Above ---*/
+.ui.basic.pointing.label:before,
+.ui.basic[class*="pointing above"].label:before {
+ margin-top: @basicPointingTriangleOffset;
+}
+/*--- Below ---*/
+.ui.basic[class*="bottom pointing"].label:before,
+.ui.basic[class*="pointing below"].label:before {
+ bottom: auto;
+ top: 100%;
+ margin-top: -@basicPointingTriangleOffset;
+}
+/*--- Left ---*/
+.ui.basic[class*="left pointing"].label:before {
+ top: 50%;
+ left: @basicPointingTriangleOffset;
+}
+/*--- Right ---*/
+.ui.basic[class*="right pointing"].label:before {
+ top: 50%;
+ right: @basicPointingTriangleOffset;
+}
+
+
+/*------------------
+ Floating Label
+-------------------*/
+
+.ui.floating.label {
+ position: absolute;
+ z-index: @floatingZIndex;
+ top: @floatingTopOffset;
+ left: 100%;
+ margin: 0em 0em 0em @floatingLeftOffset !important;
+}
+
+/*-------------------
+ Sizes
+--------------------*/
+
+.ui.mini.labels .label,
+.ui.mini.label {
+ font-size: @mini;
+}
+.ui.tiny.labels .label,
+.ui.tiny.label {
+ font-size: @tiny;
+}
+.ui.small.labels .label,
+.ui.small.label {
+ font-size: @small;
+}
+.ui.labels .label,
+.ui.label {
+ font-size: @medium;
+}
+.ui.large.labels .label,
+.ui.large.label {
+ font-size: @large;
+}
+.ui.big.labels .label,
+.ui.big.label {
+ font-size: @big;
+}
+.ui.huge.labels .label,
+.ui.huge.label {
+ font-size: @huge;
+}
+.ui.massive.labels .label,
+.ui.massive.label {
+ font-size: @massive;
+}
+
+.loadUIOverrides();
[03/48] incubator-senssoft-tap git commit: Revert "Fix index URL so
anything else can be served"
Posted by ar...@apache.org.
Revert "Fix index URL so anything else can be served"
This reverts commit 8528e641eca06f20bcf60eb40ea6bb5cae4190b5.
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/bf7d7e57
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/bf7d7e57
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/bf7d7e57
Branch: refs/heads/master
Commit: bf7d7e57a9de81b1c12688ce0eb81491e6f31301
Parents: 8528e64
Author: Stephen York <Stephen York>
Authored: Thu Jun 30 03:13:18 2016 -0400
Committer: Stephen York <Stephen York>
Committed: Thu Jun 30 03:13:18 2016 -0400
----------------------------------------------------------------------
tap/urls.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/bf7d7e57/tap/urls.py
----------------------------------------------------------------------
diff --git a/tap/urls.py b/tap/urls.py
index 02779d1..05b102f 100644
--- a/tap/urls.py
+++ b/tap/urls.py
@@ -24,5 +24,5 @@ urlpatterns = [
url(r'^app_mgr/', include('app_mgr.urls', namespace='app_mgr')),
#url(r'^api-auth/', include('rest_framework.urls')),
url(r'^api-token-auth/', token_views.obtain_auth_token),
- url(r'^', TemplateView.as_view(template_name='index.html')),
+ url(r'', TemplateView.as_view(template_name='index.html')),
]
[27/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/views/card.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/views/card.less b/semantic/src/definitions/views/card.less
new file mode 100755
index 0000000..e3474f1
--- /dev/null
+++ b/semantic/src/definitions/views/card.less
@@ -0,0 +1,1059 @@
+/*!
+ * # Semantic UI - Item
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'view';
+@element : 'card';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Standard
+*******************************/
+
+/*--------------
+ Card
+---------------*/
+
+.ui.cards > .card,
+.ui.card {
+ max-width: 100%;
+ position: relative;
+ display: @display;
+ flex-direction: column;
+
+ width: @width;
+ min-height: @minHeight;
+ background: @background;
+ padding: @padding;
+
+ border: @border;
+ border-radius: @borderRadius;
+ box-shadow: @boxShadow;
+ transition: @transition;
+ z-index: @zIndex;
+}
+.ui.card {
+ margin: @margin;
+}
+
+.ui.cards > .card a,
+.ui.card a {
+ cursor: pointer;
+}
+
+.ui.card:first-child {
+ margin-top: 0em;
+}
+.ui.card:last-child {
+ margin-bottom: 0em;
+}
+
+/*--------------
+ Cards
+---------------*/
+
+.ui.cards {
+ display: @groupDisplay;
+ margin: @groupMargin;
+ flex-wrap: wrap;
+}
+
+.ui.cards > .card {
+ display: @groupCardDisplay;
+ margin: @groupCardMargin;
+ float: @groupCardFloat;
+}
+
+/* Clearing */
+.ui.cards:after,
+.ui.card:after {
+ display: block;
+ content: ' ';
+ height: 0px;
+ clear: both;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+
+/* Consecutive Card Groups Preserve Row Spacing */
+.ui.cards ~ .ui.cards {
+ margin-top: @consecutiveGroupDistance;
+}
+
+
+/*--------------
+ Rounded Edges
+---------------*/
+
+.ui.cards > .card > :first-child,
+.ui.card > :first-child {
+ border-radius: @borderRadius @borderRadius 0em 0em !important;
+ border-top: none !important;
+}
+
+.ui.cards > .card > :last-child,
+.ui.card > :last-child {
+ border-radius: 0em 0em @borderRadius @borderRadius !important;
+}
+
+.ui.cards > .card > :only-child,
+.ui.card > :only-child {
+ border-radius: @borderRadius !important;
+}
+
+/*--------------
+ Images
+---------------*/
+
+.ui.cards > .card > .image,
+.ui.card > .image {
+ position: relative;
+ display: block;
+ flex: 0 0 auto;
+ padding: @imagePadding;
+ background: @imageBackground;
+}
+.ui.cards > .card > .image > img,
+.ui.card > .image > img {
+ display: block;
+ width: 100%;
+ height: auto;
+ border-radius: inherit;
+}
+.ui.cards > .card > .image:not(.ui) > img,
+.ui.card > .image:not(.ui) > img {
+ border: @imageBorder;
+}
+
+/*--------------
+ Content
+---------------*/
+
+.ui.cards > .card > .content,
+.ui.card > .content {
+ flex-grow: 1;
+ border: @contentBorder;
+ border-top: @contentDivider;
+ background: @contentBackground;
+ margin: @contentMargin;
+ padding: @contentPadding;
+ box-shadow: @contentBoxShadow;
+ font-size: @contentFontSize;
+ border-radius: @contentBorderRadius;
+}
+
+.ui.cards > .card > .content:after,
+.ui.card > .content:after {
+ display: block;
+ content: ' ';
+ height: 0px;
+ clear: both;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+.ui.cards > .card > .content > .header,
+.ui.card > .content > .header {
+ display: block;
+ margin: @headerMargin;
+ font-family: @headerFont;
+ color: @headerColor;
+}
+
+/* Default Header Size */
+.ui.cards > .card > .content > .header:not(.ui),
+.ui.card > .content > .header:not(.ui) {
+ font-weight: @headerFontWeight;
+ font-size: @headerFontSize;
+ margin-top: @headerLineHeightOffset;
+ line-height: @headerLineHeight;
+}
+
+.ui.cards > .card > .content > .meta + .description,
+.ui.cards > .card > .content > .header + .description,
+.ui.card > .content > .meta + .description,
+.ui.card > .content > .header + .description {
+ margin-top: @descriptionDistance;
+}
+
+/*----------------
+ Floated Content
+-----------------*/
+
+.ui.cards > .card [class*="left floated"],
+.ui.card [class*="left floated"] {
+ float: left;
+}
+.ui.cards > .card [class*="right floated"],
+.ui.card [class*="right floated"] {
+ float: right;
+}
+
+/*--------------
+ Aligned
+---------------*/
+
+.ui.cards > .card [class*="left aligned"],
+.ui.card [class*="left aligned"] {
+ text-align: left;
+}
+.ui.cards > .card [class*="center aligned"],
+.ui.card [class*="center aligned"] {
+ text-align: center;
+}
+.ui.cards > .card [class*="right aligned"],
+.ui.card [class*="right aligned"] {
+ text-align: right;
+}
+
+
+/*--------------
+ Content Image
+---------------*/
+
+.ui.cards > .card .content img,
+.ui.card .content img {
+ display: inline-block;
+ vertical-align: @contentImageVerticalAlign;
+ width: @contentImageWidth;
+}
+.ui.cards > .card img.avatar,
+.ui.cards > .card .avatar img,
+.ui.card img.avatar,
+.ui.card .avatar img {
+ width: @avatarSize;
+ height: @avatarSize;
+ border-radius: @avatarBorderRadius;
+}
+
+
+/*--------------
+ Description
+---------------*/
+
+.ui.cards > .card > .content > .description,
+.ui.card > .content > .description {
+ clear: both;
+ color: @descriptionColor;
+}
+
+/*--------------
+ Paragraph
+---------------*/
+
+.ui.cards > .card > .content p,
+.ui.card > .content p {
+ margin: 0em 0em @paragraphDistance;
+}
+.ui.cards > .card > .content p:last-child,
+.ui.card > .content p:last-child {
+ margin-bottom: 0em;
+}
+
+/*--------------
+ Meta
+---------------*/
+
+.ui.cards > .card .meta,
+.ui.card .meta {
+ font-size: @metaFontSize;
+ color: @metaColor;
+}
+.ui.cards > .card .meta *,
+.ui.card .meta * {
+ margin-right: @metaSpacing;
+}
+.ui.cards > .card .meta :last-child,
+.ui.card .meta :last-child {
+ margin-right: 0em;
+}
+
+.ui.cards > .card .meta [class*="right floated"],
+.ui.card .meta [class*="right floated"] {
+ margin-right: 0em;
+ margin-left: @metaSpacing;
+}
+
+/*--------------
+ Links
+---------------*/
+
+/* Generic */
+.ui.cards > .card > .content a:not(.ui),
+.ui.card > .content a:not(.ui) {
+ color: @contentLinkColor;
+ transition: @contentLinkTransition;
+}
+.ui.cards > .card > .content a:not(.ui):hover,
+.ui.card > .content a:not(.ui):hover {
+ color: @contentLinkHoverColor;
+}
+
+/* Header */
+.ui.cards > .card > .content > a.header,
+.ui.card > .content > a.header {
+ color: @headerLinkColor;
+}
+.ui.cards > .card > .content > a.header:hover,
+.ui.card > .content > a.header:hover {
+ color: @headerLinkHoverColor;
+}
+
+/* Meta */
+.ui.cards > .card .meta > a:not(.ui),
+.ui.card .meta > a:not(.ui) {
+ color: @metaLinkColor;
+}
+.ui.cards > .card .meta > a:not(.ui):hover,
+.ui.card .meta > a:not(.ui):hover {
+ color: @metaLinkHoverColor;
+}
+
+/*--------------
+ Buttons
+---------------*/
+
+.ui.cards > .card > .buttons,
+.ui.card > .buttons,
+.ui.cards > .card > .button,
+.ui.card > .button {
+ margin: @buttonMargin;
+ width: @buttonWidth;
+}
+
+/*--------------
+ Dimmer
+---------------*/
+
+.ui.cards > .card .dimmer,
+.ui.card .dimmer {
+ background-color: @dimmerColor;
+ z-index: @dimmerZIndex;
+}
+
+/*--------------
+ Labels
+---------------*/
+
+/*-----Star----- */
+
+/* Icon */
+.ui.cards > .card > .content .star.icon,
+.ui.card > .content .star.icon {
+ cursor: pointer;
+ opacity: @actionOpacity;
+ transition: @actionTransition;
+}
+.ui.cards > .card > .content .star.icon:hover,
+.ui.card > .content .star.icon:hover {
+ opacity: @actionHoverOpacity;
+ color: @starColor;
+}
+.ui.cards > .card > .content .active.star.icon,
+.ui.card > .content .active.star.icon {
+ color: @starActiveColor;
+}
+
+/*-----Like----- */
+
+/* Icon */
+.ui.cards > .card > .content .like.icon,
+.ui.card > .content .like.icon {
+ cursor: pointer;
+ opacity: @actionOpacity;
+ transition: @actionTransition;
+}
+.ui.cards > .card > .content .like.icon:hover,
+.ui.card > .content .like.icon:hover {
+ opacity: @actionHoverOpacity;
+ color: @likeColor;
+}
+.ui.cards > .card > .content .active.like.icon,
+.ui.card > .content .active.like.icon {
+ color: @likeActiveColor;
+}
+
+/*----------------
+ Extra Content
+-----------------*/
+
+.ui.cards > .card > .extra,
+.ui.card > .extra {
+ max-width: 100%;
+ min-height: 0em !important;
+ flex-grow: 0;
+ border-top: @extraDivider !important;
+ position: @extraPosition;
+ background: @extraBackground;
+ width: @extraWidth;
+ margin: @extraMargin;
+ padding: @extraPadding;
+ top: @extraTop;
+ left: @extraLeft;
+ color: @extraColor;
+ box-shadow: @extraBoxShadow;
+ transition: @extraTransition;
+}
+.ui.cards > .card > .extra a:not(.ui),
+.ui.card > .extra a:not(.ui) {
+ color: @extraLinkColor;
+}
+.ui.cards > .card > .extra a:not(.ui):hover,
+.ui.card > .extra a:not(.ui):hover {
+ color: @extraLinkHoverColor;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*-------------------
+ Raised
+--------------------*/
+
+.ui.raised.cards > .card,
+.ui.raised.card {
+ box-shadow: @raisedShadow;
+}
+.ui.raised.cards a.card:hover,
+.ui.link.cards .raised.card:hover,
+a.ui.raised.card:hover,
+.ui.link.raised.card:hover {
+ box-shadow: @raisedShadowHover;
+}
+
+.ui.raised.cards > .card,
+.ui.raised.card {
+ box-shadow: @raisedShadow;
+}
+/*-------------------
+ Centered
+--------------------*/
+
+.ui.centered.cards {
+ justify-content: center;
+}
+.ui.centered.card {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/*-------------------
+ Fluid
+--------------------*/
+
+.ui.fluid.card {
+ width: 100%;
+ max-width: 9999px;
+}
+
+/*-------------------
+ Link
+--------------------*/
+
+.ui.cards a.card,
+.ui.link.cards .card,
+a.ui.card,
+.ui.link.card {
+ transform: none;
+}
+
+
+.ui.cards a.card:hover,
+.ui.link.cards .card:hover,
+a.ui.card:hover,
+.ui.link.card:hover {
+ cursor: pointer;
+ z-index: @linkHoverZIndex;
+ background: @linkHoverBackground;
+ border: @linkHoverBorder;
+ box-shadow: @linkHoverBoxShadow;
+ transform: @linkHoverTransform;
+}
+
+/*-------------------
+ Colors
+--------------------*/
+
+/* Red */
+.ui.red.cards > .card,
+.ui.cards > .red.card,
+.ui.red.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @red,
+ @shadowBoxShadow
+ ;
+}
+.ui.red.cards > .card:hover,
+.ui.cards > .red.card:hover,
+.ui.red.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @redHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Orange */
+.ui.orange.cards > .card,
+.ui.cards > .orange.card,
+.ui.orange.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @orange,
+ @shadowBoxShadow
+ ;
+}
+.ui.orange.cards > .card:hover,
+.ui.cards > .orange.card:hover,
+.ui.orange.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @orangeHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Yellow */
+.ui.yellow.cards > .card,
+.ui.cards > .yellow.card,
+.ui.yellow.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @yellow,
+ @shadowBoxShadow
+ ;
+}
+.ui.yellow.cards > .card:hover,
+.ui.cards > .yellow.card:hover,
+.ui.yellow.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @yellowHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Olive */
+.ui.olive.cards > .card,
+.ui.cards > .olive.card,
+.ui.olive.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @olive,
+ @shadowBoxShadow
+ ;
+}
+.ui.olive.cards > .card:hover,
+.ui.cards > .olive.card:hover,
+.ui.olive.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @oliveHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Green */
+.ui.green.cards > .card,
+.ui.cards > .green.card,
+.ui.green.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @green,
+ @shadowBoxShadow
+ ;
+}
+.ui.green.cards > .card:hover,
+.ui.cards > .green.card:hover,
+.ui.green.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @greenHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Teal */
+.ui.teal.cards > .card,
+.ui.cards > .teal.card,
+.ui.teal.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @teal,
+ @shadowBoxShadow
+ ;
+}
+.ui.teal.cards > .card:hover,
+.ui.cards > .teal.card:hover,
+.ui.teal.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @tealHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Blue */
+.ui.blue.cards > .card,
+.ui.cards > .blue.card,
+.ui.blue.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @blue,
+ @shadowBoxShadow
+ ;
+}
+.ui.blue.cards > .card:hover,
+.ui.cards > .blue.card:hover,
+.ui.blue.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @blueHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Violet */
+.ui.violet.cards > .card,
+.ui.cards > .violet.card,
+.ui.violet.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @violet,
+ @shadowBoxShadow
+ ;
+}
+.ui.violet.cards > .card:hover,
+.ui.cards > .violet.card:hover,
+.ui.violet.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @violetHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Purple */
+.ui.purple.cards > .card,
+.ui.cards > .purple.card,
+.ui.purple.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @purple,
+ @shadowBoxShadow
+ ;
+}
+.ui.purple.cards > .card:hover,
+.ui.cards > .purple.card:hover,
+.ui.purple.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @purpleHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Pink */
+.ui.pink.cards > .card,
+.ui.cards > .pink.card,
+.ui.pink.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @pink,
+ @shadowBoxShadow
+ ;
+}
+.ui.pink.cards > .card:hover,
+.ui.cards > .pink.card:hover,
+.ui.pink.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @pinkHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Brown */
+.ui.brown.cards > .card,
+.ui.cards > .brown.card,
+.ui.brown.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @brown,
+ @shadowBoxShadow
+ ;
+}
+.ui.brown.cards > .card:hover,
+.ui.cards > .brown.card:hover,
+.ui.brown.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @brownHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Grey */
+.ui.grey.cards > .card,
+.ui.cards > .grey.card,
+.ui.grey.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @grey,
+ @shadowBoxShadow
+ ;
+}
+.ui.grey.cards > .card:hover,
+.ui.cards > .grey.card:hover,
+.ui.grey.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @greyHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/* Black */
+.ui.black.cards > .card,
+.ui.cards > .black.card,
+.ui.black.card {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @black,
+ @shadowBoxShadow
+ ;
+}
+.ui.black.cards > .card:hover,
+.ui.cards > .black.card:hover,
+.ui.black.card:hover {
+ box-shadow:
+ @borderShadow,
+ 0px @coloredShadowDistance 0px 0px @blackHover,
+ @shadowHoverBoxShadow
+ ;
+}
+
+/*--------------
+ Card Count
+---------------*/
+
+.ui.one.cards {
+ margin-left: @oneCardOffset;
+ margin-right: @oneCardOffset;
+}
+.ui.one.cards > .card {
+ width: @oneCard;
+}
+
+.ui.two.cards {
+ margin-left: @twoCardOffset;
+ margin-right: @twoCardOffset;
+}
+.ui.two.cards > .card {
+ width: @twoCard;
+ margin-left: @twoCardSpacing;
+ margin-right: @twoCardSpacing;
+}
+
+.ui.three.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+}
+.ui.three.cards > .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+}
+
+.ui.four.cards {
+ margin-left: @fourCardOffset;
+ margin-right: @fourCardOffset;
+}
+.ui.four.cards > .card {
+ width: @fourCard;
+ margin-left: @fourCardSpacing;
+ margin-right: @fourCardSpacing;
+}
+
+.ui.five.cards {
+ margin-left: @fiveCardOffset;
+ margin-right: @fiveCardOffset;
+}
+.ui.five.cards > .card {
+ width: @fiveCard;
+ margin-left: @fiveCardSpacing;
+ margin-right: @fiveCardSpacing;
+}
+
+.ui.six.cards {
+ margin-left: @sixCardOffset;
+ margin-right: @sixCardOffset;
+}
+.ui.six.cards > .card {
+ width: @sixCard;
+ margin-left: @sixCardSpacing;
+ margin-right: @sixCardSpacing;
+}
+
+.ui.seven.cards {
+ margin-left: @sevenCardOffset;
+ margin-right: @sevenCardOffset;
+}
+.ui.seven.cards > .card {
+ width: @sevenCard;
+ margin-left: @sevenCardSpacing;
+ margin-right: @sevenCardSpacing;
+}
+
+.ui.eight.cards {
+ margin-left: @eightCardOffset;
+ margin-right: @eightCardOffset;
+}
+.ui.eight.cards > .card {
+ width: @eightCard;
+ margin-left: @eightCardSpacing;
+ margin-right: @eightCardSpacing;
+ font-size: 11px;
+}
+
+.ui.nine.cards {
+ margin-left: @nineCardOffset;
+ margin-right: @nineCardOffset;
+}
+.ui.nine.cards > .card {
+ width: @nineCard;
+ margin-left: @nineCardSpacing;
+ margin-right: @nineCardSpacing;
+ font-size: 10px;
+}
+
+.ui.ten.cards {
+ margin-left: @tenCardOffset;
+ margin-right: @tenCardOffset;
+}
+.ui.ten.cards > .card {
+ width: @tenCard;
+ margin-left: @tenCardSpacing;
+ margin-right: @tenCardSpacing;
+}
+
+
+/*-------------------
+ Doubling
+--------------------*/
+
+/* Mobile Only */
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.two.doubling.cards {
+ margin-left: @oneCardOffset;
+ margin-right: @oneCardOffset;
+ }
+ .ui.two.doubling.cards .card {
+ width: @oneCard;
+ margin-left: @oneCardSpacing;
+ margin-right: @oneCardSpacing;
+ }
+ .ui.three.doubling.cards {
+ margin-left: @twoCardOffset;
+ margin-right: @twoCardOffset;
+ }
+ .ui.three.doubling.cards .card {
+ width: @twoCard;
+ margin-left: @twoCardSpacing;
+ margin-right: @twoCardSpacing;
+ }
+ .ui.four.doubling.cards {
+ margin-left: @twoCardOffset;
+ margin-right: @twoCardOffset;
+ }
+ .ui.four.doubling.cards .card {
+ width: @twoCard;
+ margin-left: @twoCardSpacing;
+ margin-right: @twoCardSpacing;
+ }
+ .ui.five.doubling.cards {
+ margin-left: @twoCardOffset;
+ margin-right: @twoCardOffset;
+ }
+ .ui.five.doubling.cards .card {
+ width: @twoCard;
+ margin-left: @twoCardSpacing;
+ margin-right: @twoCardSpacing;
+ }
+ .ui.six.doubling.cards {
+ margin-left: @twoCardOffset;
+ margin-right: @twoCardOffset;
+ }
+ .ui.six.doubling.cards .card {
+ width: @twoCard;
+ margin-left: @twoCardSpacing;
+ margin-right: @twoCardSpacing;
+ }
+ .ui.seven.doubling.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+ }
+ .ui.seven.doubling.cards .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+ }
+ .ui.eight.doubling.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+ }
+ .ui.eight.doubling.cards .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+ }
+ .ui.nine.doubling.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+ }
+ .ui.nine.doubling.cards .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+ }
+ .ui.ten.doubling.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+ }
+ .ui.ten.doubling.cards .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+ }
+}
+
+/* Tablet Only */
+@media only screen and (min-width : @tabletBreakpoint) and (max-width : @largestTabletScreen) {
+ .ui.two.doubling.cards {
+ margin-left: @oneCardOffset;
+ margin-right: @oneCardOffset;
+ }
+ .ui.two.doubling.cards .card {
+ width: @oneCard;
+ margin-left: @oneCardSpacing;
+ margin-right: @oneCardSpacing;
+ }
+ .ui.three.doubling.cards {
+ margin-left: @twoCardOffset;
+ margin-right: @twoCardOffset;
+ }
+ .ui.three.doubling.cards .card {
+ width: @twoCard;
+ margin-left: @twoCardSpacing;
+ margin-right: @twoCardSpacing;
+ }
+ .ui.four.doubling.cards {
+ margin-left: @twoCardOffset;
+ margin-right: @twoCardOffset;
+ }
+ .ui.four.doubling.cards .card {
+ width: @twoCard;
+ margin-left: @twoCardSpacing;
+ margin-right: @twoCardSpacing;
+ }
+ .ui.five.doubling.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+ }
+ .ui.five.doubling.cards .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+ }
+ .ui.six.doubling.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+ }
+ .ui.six.doubling.cards .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+ }
+ .ui.eight.doubling.cards {
+ margin-left: @threeCardOffset;
+ margin-right: @threeCardOffset;
+ }
+ .ui.eight.doubling.cards .card {
+ width: @threeCard;
+ margin-left: @threeCardSpacing;
+ margin-right: @threeCardSpacing;
+ }
+ .ui.eight.doubling.cards {
+ margin-left: @fourCardOffset;
+ margin-right: @fourCardOffset;
+ }
+ .ui.eight.doubling.cards .card {
+ width: @fourCard;
+ margin-left: @fourCardSpacing;
+ margin-right: @fourCardSpacing;
+ }
+ .ui.nine.doubling.cards {
+ margin-left: @fourCardOffset;
+ margin-right: @fourCardOffset;
+ }
+ .ui.nine.doubling.cards .card {
+ width: @fourCard;
+ margin-left: @fourCardSpacing;
+ margin-right: @fourCardSpacing;
+ }
+ .ui.ten.doubling.cards {
+ margin-left: @fiveCardOffset;
+ margin-right: @fiveCardOffset;
+ }
+ .ui.ten.doubling.cards .card {
+ width: @fiveCard;
+ margin-left: @fiveCardSpacing;
+ margin-right: @fiveCardSpacing;
+ }
+}
+
+/*-------------------
+ Stackable
+--------------------*/
+
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.stackable.cards {
+ display: block !important;
+ }
+ .ui.stackable.cards .card:first-child {
+ margin-top: 0em !important;
+ }
+ .ui.stackable.cards > .card {
+ display: block !important;
+ height: auto !important;
+ margin: @stackableRowSpacing @stackableCardSpacing;
+ padding: 0 !important;
+ width: @stackableMargin !important;
+ }
+}
+
+
+/*--------------
+ Size
+---------------*/
+
+.ui.cards > .card {
+ font-size: @medium;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/views/comment.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/views/comment.less b/semantic/src/definitions/views/comment.less
new file mode 100755
index 0000000..7009ebf
--- /dev/null
+++ b/semantic/src/definitions/views/comment.less
@@ -0,0 +1,255 @@
+/*!
+ * # Semantic UI - Comment
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'view';
+@element : 'comment';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Standard
+*******************************/
+
+
+/*--------------
+ Comments
+---------------*/
+
+.ui.comments {
+ margin: @margin;
+ max-width: @maxWidth;
+}
+
+.ui.comments:first-child {
+ margin-top: 0em;
+}
+.ui.comments:last-child {
+ margin-bottom: 0em;
+}
+
+/*--------------
+ Comment
+---------------*/
+
+.ui.comments .comment {
+ position: relative;
+ background: @commentBackground;
+ margin: @commentMargin;
+ padding: @commentPadding;
+ border: @commentBorder;
+ border-top: @commentDivider;
+ line-height: @commentLineHeight;
+}
+.ui.comments .comment:first-child {
+ margin-top: @firstCommentMargin;
+ padding-top: @firstCommentPadding;
+}
+
+
+/*--------------------
+ Nested Comments
+---------------------*/
+
+.ui.comments .comment .comments {
+ margin: @nestedCommentsMargin;
+ padding: @nestedCommentsPadding;
+}
+.ui.comments .comment .comments:before{
+ position: absolute;
+ top: 0px;
+ left: 0px;
+}
+.ui.comments .comment .comments .comment {
+ border: @nestedCommentBorder;
+ border-top: @nestedCommentDivider;
+ background: @nestedCommentBackground;
+}
+
+/*--------------
+ Avatar
+---------------*/
+
+.ui.comments .comment .avatar {
+ display: @avatarDisplay;
+ width: @avatarWidth;
+ height: @avatarHeight;
+ float: @avatarFloat;
+ margin: @avatarMargin;
+}
+.ui.comments .comment img.avatar,
+.ui.comments .comment .avatar img {
+ display: block;
+ margin: 0em auto;
+ width: 100%;
+ height: 100%;
+ border-radius: @avatarBorderRadius;
+}
+
+/*--------------
+ Content
+---------------*/
+
+.ui.comments .comment > .content {
+ display: block;
+}
+/* If there is an avatar move content over */
+.ui.comments .comment > .avatar ~ .content {
+ margin-left: @contentMargin;
+}
+
+/*--------------
+ Author
+---------------*/
+
+.ui.comments .comment .author {
+ font-size: @authorFontSize;
+ color: @authorColor;
+ font-weight: @authorFontWeight;
+}
+.ui.comments .comment a.author {
+ cursor: pointer;
+}
+.ui.comments .comment a.author:hover {
+ color: @authorHoverColor;
+}
+
+/*--------------
+ Metadata
+---------------*/
+
+.ui.comments .comment .metadata {
+ display: @metadataDisplay;
+ margin-left: @metadataSpacing;
+ color: @metadataColor;
+ font-size: @metadataFontSize;
+}
+.ui.comments .comment .metadata > * {
+ display: inline-block;
+ margin: 0em @metadataContentSpacing 0em 0em;
+}
+.ui.comments .comment .metadata > :last-child {
+ margin-right: 0em;
+}
+
+/*--------------------
+ Comment Text
+---------------------*/
+
+.ui.comments .comment .text {
+ margin: @textMargin;
+ font-size: @textFontSize;
+ word-wrap: @textWordWrap;
+ color: @textColor;
+ line-height: @textLineHeight;
+}
+
+
+/*--------------------
+ User Actions
+---------------------*/
+
+.ui.comments .comment .actions {
+ font-size: @actionFontSize;
+}
+.ui.comments .comment .actions a {
+ cursor: pointer;
+ display: inline-block;
+ margin: 0em @actionContentDistance 0em 0em;
+ color: @actionLinkColor;
+}
+.ui.comments .comment .actions a:last-child {
+ margin-right: 0em;
+}
+.ui.comments .comment .actions a.active,
+.ui.comments .comment .actions a:hover {
+ color: @actionLinkHoverColor;
+}
+
+/*--------------------
+ Reply Form
+---------------------*/
+
+.ui.comments > .reply.form {
+ margin-top: @replyDistance;
+}
+.ui.comments .comment .reply.form {
+ width: 100%;
+ margin-top: @commentReplyDistance;
+}
+.ui.comments .reply.form textarea {
+ font-size: @replyFontSize;
+ height: @replyHeight;
+}
+
+/*******************************
+ State
+*******************************/
+
+.ui.collapsed.comments,
+.ui.comments .collapsed.comments,
+.ui.comments .collapsed.comment {
+ display: none;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------------
+ Threaded
+---------------------*/
+
+.ui.threaded.comments .comment .comments {
+ margin: @threadedCommentMargin;
+ padding: @threadedCommentPadding;
+ box-shadow: @threadedCommentBoxShadow;
+}
+
+/*--------------------
+ Minimal
+---------------------*/
+
+.ui.minimal.comments .comment .actions {
+ opacity: 0;
+ position: @minimalActionPosition;
+ top: @minimalActionTop;
+ right: @minimalActionRight;
+ left: @minimalActionLeft;
+ transition: @minimalTransition;
+ transition-delay: @minimalTransitionDelay;
+}
+.ui.minimal.comments .comment > .content:hover > .actions {
+ opacity: 1;
+}
+
+/*--------------------
+ Sizes
+---------------------*/
+
+.ui.small.comments {
+ font-size: @small;
+}
+.ui.comments {
+ font-size: @medium;
+}
+.ui.large.comments {
+ font-size: @large;
+}
+.ui.huge.comments {
+ font-size: @huge;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/views/feed.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/views/feed.less b/semantic/src/definitions/views/feed.less
new file mode 100755
index 0000000..2447904
--- /dev/null
+++ b/semantic/src/definitions/views/feed.less
@@ -0,0 +1,278 @@
+/*!
+ * # Semantic UI - Feed
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'view';
+@element : 'feed';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Activity Feed
+*******************************/
+
+.ui.feed {
+ margin: @margin;
+}
+.ui.feed:first-child {
+ margin-top: 0em;
+}
+.ui.feed:last-child {
+ margin-bottom: 0em;
+}
+
+
+/*******************************
+ Content
+*******************************/
+
+/* Event */
+.ui.feed > .event {
+ display: flex;
+ flex-direction: row;
+ width: @eventWidth;
+ padding: @eventPadding;
+ margin: @eventMargin;
+ background: @eventBackground;
+ border-top: @eventDivider;
+}
+.ui.feed > .event:first-child {
+ border-top: 0px;
+ padding-top: 0em;
+}
+.ui.feed > .event:last-child {
+ padding-bottom: 0em;
+}
+
+/* Event Label */
+.ui.feed > .event > .label {
+ display: block;
+ flex: 0 0 auto;
+ width: @labelWidth;
+ height: @labelHeight;
+ align-self: @labelAlignSelf;
+ text-align: @labelTextAlign;
+}
+.ui.feed > .event > .label .icon {
+ opacity: @iconLabelOpacity;
+ font-size: @iconLabelSize;
+ width: @iconLabelWidth;
+ padding: @iconLabelPadding;
+ background: @iconLabelBackground;
+ border: @iconLabelBorder;
+ border-radius: @iconLabelBorderRadius;
+ color: @iconLabelColor;
+}
+.ui.feed > .event > .label img {
+ width: @imageLabelWidth;
+ height: @imageLabelHeight;
+ border-radius: @imageLabelBorderRadius;
+}
+.ui.feed > .event > .label + .content {
+ margin: @labeledContentMargin;
+}
+
+/*--------------
+ Content
+---------------*/
+
+/* Content */
+.ui.feed > .event > .content {
+ display: block;
+ flex: 1 1 auto;
+ align-self: @contentAlignSelf;
+ text-align: @contentTextAlign;
+ word-wrap: @contentWordWrap;
+}
+.ui.feed > .event:last-child > .content {
+ padding-bottom: @lastLabeledContentPadding;
+}
+
+/* Link */
+.ui.feed > .event > .content a {
+ cursor: pointer;
+}
+
+/*--------------
+ Date
+---------------*/
+
+.ui.feed > .event > .content .date {
+ margin: @dateMargin;
+ padding: @datePadding;
+ color: @dateColor;
+ font-weight: @dateFontWeight;
+ font-size: @dateFontSize;
+ font-style: @dateFontStyle;
+ color: @dateColor;
+}
+
+/*--------------
+ Summary
+---------------*/
+
+.ui.feed > .event > .content .summary {
+ margin: @summaryMargin;
+ font-size: @summaryFontSize;
+ font-weight: @summaryFontWeight;
+ color: @summaryColor;
+}
+
+/* Summary Image */
+.ui.feed > .event > .content .summary img {
+ display: inline-block;
+ width: @summaryImageWidth;
+ height: @summaryImageHeight;
+ margin: @summaryImageMargin;
+ border-radius: @summaryImageBorderRadius;
+ vertical-align: @summaryImageVerticalAlign;
+}
+/*--------------
+ User
+---------------*/
+
+.ui.feed > .event > .content .user {
+ display: inline-block;
+ font-weight: @userFontWeight;
+ margin-right: @userDistance;
+ vertical-align: baseline;
+}
+.ui.feed > .event > .content .user img {
+ margin: @userImageMargin;
+ width: @userImageWidth;
+ height: @userImageHeight;
+ vertical-align: @userImageVerticalAlign;
+}
+/*--------------
+ Inline Date
+---------------*/
+
+/* Date inside Summary */
+.ui.feed > .event > .content .summary > .date {
+ display: @summaryDateDisplay;
+ float: @summaryDateFloat;
+ font-weight: @summaryDateFontWeight;
+ font-size: @summaryDateFontSize;
+ font-style: @summaryDateFontStyle;
+ margin: @summaryDateMargin;
+ padding: @summaryDatePadding;
+ color: @summaryDateColor;
+}
+
+/*--------------
+ Extra Summary
+---------------*/
+
+.ui.feed > .event > .content .extra {
+ margin: @extraMargin;
+ background: @extraBackground;
+ padding: @extraPadding;
+ color: @extraColor;
+}
+
+/* Images */
+.ui.feed > .event > .content .extra.images img {
+ display: inline-block;
+ margin: @extraImageMargin;
+ width: @extraImageWidth;
+}
+
+/* Text */
+.ui.feed > .event > .content .extra.text {
+ padding: @extraTextPadding;
+ border-left: @extraTextPointer;
+ font-size: @extraTextFontSize;
+ max-width: @extraTextMaxWidth;
+ line-height: @extraTextLineHeight;
+}
+
+/*--------------
+ Meta
+---------------*/
+
+.ui.feed > .event > .content .meta {
+ display: @metadataDisplay;
+ font-size: @metadataFontSize;
+ margin: @metadataMargin;
+ background: @metadataBackground;
+ border: @metadataBorder;
+ border-radius: @metadataBorderRadius;
+ box-shadow: @metadataBoxShadow;
+ padding: @metadataPadding;
+ color: @metadataColor;
+}
+
+.ui.feed > .event > .content .meta > * {
+ position: relative;
+ margin-left: @metadataElementSpacing;
+}
+.ui.feed > .event > .content .meta > *:after {
+ content: @metadataDivider;
+ color: @metadataDividerColor;
+ top: 0em;
+ left: @metadataDividerOffset;
+ opacity: 1;
+ position: absolute;
+ vertical-align: top;
+}
+
+.ui.feed > .event > .content .meta .like {
+ color: @likeColor;
+ transition: @likeTransition;
+}
+.ui.feed > .event > .content .meta .like:hover .icon {
+ color: @likeHoverColor;
+}
+.ui.feed > .event > .content .meta .active.like .icon {
+ color: @likeActiveColor;
+}
+
+/* First element */
+.ui.feed > .event > .content .meta > :first-child {
+ margin-left: 0em;
+}
+.ui.feed > .event > .content .meta > :first-child::after {
+ display: none;
+}
+
+/* Action */
+.ui.feed > .event > .content .meta a,
+.ui.feed > .event > .content .meta > .icon {
+ cursor: @metadataActionCursor;
+ opacity: @metadataActionOpacity;
+ color: @metadataActionColor;
+ transition: @metadataActionTransition;
+}
+.ui.feed > .event > .content .meta a:hover,
+.ui.feed > .event > .content .meta a:hover .icon,
+.ui.feed > .event > .content .meta > .icon:hover {
+ color: @metadataActionHoverColor;
+}
+
+
+
+/*******************************
+ Variations
+*******************************/
+
+.ui.small.feed {
+ font-size: @small;
+}
+.ui.feed {
+ font-size: @medium;
+}
+.ui.large.feed {
+ font-size: @large;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/views/item.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/views/item.less b/semantic/src/definitions/views/item.less
new file mode 100755
index 0000000..cba0f47
--- /dev/null
+++ b/semantic/src/definitions/views/item.less
@@ -0,0 +1,464 @@
+/*!
+ * # Semantic UI - Item
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'view';
+@element : 'item';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Standard
+*******************************/
+
+/*--------------
+ Item
+---------------*/
+
+.ui.items > .item {
+ display: @display;
+ margin: @itemSpacing 0em;
+ width: @width;
+ min-height: @minHeight;
+ background: @background;
+ padding: @padding;
+
+ border: @border;
+ border-radius: @borderRadius;
+ box-shadow: @boxShadow;
+ transition: @transition;
+ z-index: @zIndex;
+}
+.ui.items > .item a {
+ cursor: pointer;
+}
+
+/*--------------
+ Items
+---------------*/
+
+.ui.items {
+ margin: @groupMargin;
+}
+
+.ui.items:first-child {
+ margin-top: 0em !important;
+}
+.ui.items:last-child {
+ margin-bottom: 0em !important;
+}
+
+/*--------------
+ Item
+---------------*/
+
+.ui.items > .item:after {
+ display: block;
+ content: ' ';
+ height: 0px;
+ clear: both;
+ overflow: hidden;
+ visibility: hidden;
+}
+.ui.items > .item:first-child {
+ margin-top: 0em;
+}
+.ui.items > .item:last-child {
+ margin-bottom: 0em;
+}
+
+
+
+/*--------------
+ Images
+---------------*/
+
+.ui.items > .item > .image {
+ position: relative;
+ flex: 0 0 auto;
+ display: @imageDisplay;
+ float: @imageFloat;
+ margin: @imageMargin;
+ padding: @imagePadding;
+ max-height: @imageMaxHeight;
+ align-self: @imageVerticalAlign;
+}
+.ui.items > .item > .image > img {
+ display: block;
+ width: 100%;
+ height: auto;
+ border-radius: @imageBorderRadius;
+ border: @imageBorder;
+}
+
+.ui.items > .item > .image:only-child > img {
+ border-radius: @borderRadius;
+}
+
+
+/*--------------
+ Content
+---------------*/
+
+.ui.items > .item > .content {
+ display: block;
+ flex: 1 1 auto;
+ background: @contentBackground;
+ margin: @contentMargin;
+ padding: @contentPadding;
+ box-shadow: @contentBoxShadow;
+ font-size: @contentFontSize;
+ border: @contentBorder;
+ border-radius: @contentBorderRadius;
+}
+.ui.items > .item > .content:after {
+ display: block;
+ content: ' ';
+ height: 0px;
+ clear: both;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+.ui.items > .item > .image + .content {
+ min-width: 0;
+ width: @contentWidth;
+ display: @contentDisplay;
+ margin-left: @contentOffset;
+ align-self: @contentVerticalAlign;
+ padding-left: @contentImageDistance;
+}
+
+.ui.items > .item > .content > .header {
+ display: inline-block;
+ margin: @headerMargin;
+ font-family: @headerFont;
+ font-weight: @headerFontWeight;
+ color: @headerColor;
+}
+/* Default Header Size */
+.ui.items > .item > .content > .header:not(.ui) {
+ font-size: @headerFontSize;
+}
+
+/*--------------
+ Floated
+---------------*/
+
+.ui.items > .item [class*="left floated"] {
+ float: left;
+}
+.ui.items > .item [class*="right floated"] {
+ float: right;
+}
+
+
+/*--------------
+ Content Image
+---------------*/
+
+.ui.items > .item .content img {
+ align-self: @contentImageVerticalAlign;
+ width: @contentImageWidth;
+}
+.ui.items > .item img.avatar,
+.ui.items > .item .avatar img {
+ width: @avatarSize;
+ height: @avatarSize;
+ border-radius: @avatarBorderRadius;
+}
+
+
+/*--------------
+ Description
+---------------*/
+
+.ui.items > .item > .content > .description {
+ margin-top: @descriptionDistance;
+ max-width: @descriptionMaxWidth;
+ font-size: @descriptionFontSize;
+ line-height: @descriptionLineHeight;
+ color: @descriptionColor;
+}
+
+/*--------------
+ Paragraph
+---------------*/
+
+.ui.items > .item > .content p {
+ margin: 0em 0em @paragraphDistance;
+}
+.ui.items > .item > .content p:last-child {
+ margin-bottom: 0em;
+}
+
+/*--------------
+ Meta
+---------------*/
+
+.ui.items > .item .meta {
+ margin: @metaMargin;
+ font-size: @metaFontSize;
+ line-height: @metaLineHeight;
+ color: @metaColor;
+}
+.ui.items > .item .meta * {
+ margin-right: @metaSpacing;
+}
+.ui.items > .item .meta :last-child {
+ margin-right: 0em;
+}
+
+.ui.items > .item .meta [class*="right floated"] {
+ margin-right: 0em;
+ margin-left: @metaSpacing;
+}
+
+/*--------------
+ Links
+---------------*/
+
+/* Generic */
+.ui.items > .item > .content a:not(.ui) {
+ color: @contentLinkColor;
+ transition: @contentLinkTransition;
+}
+.ui.items > .item > .content a:not(.ui):hover {
+ color: @contentLinkHoverColor;
+}
+
+/* Header */
+.ui.items > .item > .content > a.header {
+ color: @headerLinkColor;
+}
+.ui.items > .item > .content > a.header:hover {
+ color: @headerLinkHoverColor;
+}
+
+/* Meta */
+.ui.items > .item .meta > a:not(.ui) {
+ color: @metaLinkColor;
+}
+.ui.items > .item .meta > a:not(.ui):hover {
+ color: @metaLinkHoverColor;
+}
+
+
+
+/*--------------
+ Labels
+---------------*/
+
+/*-----Star----- */
+
+/* Icon */
+.ui.items > .item > .content .favorite.icon {
+ cursor: pointer;
+ opacity: @actionOpacity;
+ transition: @actionTransition;
+}
+.ui.items > .item > .content .favorite.icon:hover {
+ opacity: @actionHoverOpacity;
+ color: @favoriteColor;
+}
+.ui.items > .item > .content .active.favorite.icon {
+ color: @favoriteActiveColor;
+}
+
+/*-----Like----- */
+
+/* Icon */
+.ui.items > .item > .content .like.icon {
+ cursor: pointer;
+ opacity: @actionOpacity;
+ transition: @actionTransition;
+}
+.ui.items > .item > .content .like.icon:hover {
+ opacity: @actionHoverOpacity;
+ color: @likeColor;
+}
+.ui.items > .item > .content .active.like.icon {
+ color: @likeActiveColor;
+}
+
+/*----------------
+ Extra Content
+-----------------*/
+
+.ui.items > .item .extra {
+ display: @extraDisplay;
+ position: @extraPosition;
+ background: @extraBackground;
+ margin: @extraMargin;
+ width: @extraWidth;
+ padding: @extraPadding;
+ top: @extraTop;
+ left: @extraLeft;
+ color: @extraColor;
+ box-shadow: @extraBoxShadow;
+ transition: @extraTransition;
+ border-top: @extraDivider;
+}
+.ui.items > .item .extra > * {
+ margin: (@extraRowSpacing / 2) @extraHorizontalSpacing (@extraRowSpacing / 2) 0em;
+}
+.ui.items > .item .extra > [class*="right floated"] {
+ margin: (@extraRowSpacing / 2) 0em (@extraRowSpacing / 2) @extraHorizontalSpacing;
+}
+
+.ui.items > .item .extra:after {
+ display: block;
+ content: ' ';
+ height: 0px;
+ clear: both;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+
+/*******************************
+ Responsive
+*******************************/
+
+/* Default Image Width */
+.ui.items > .item > .image:not(.ui) {
+ width: @imageWidth;
+}
+
+
+/* Tablet Only */
+@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
+ .ui.items > .item {
+ margin: @tabletItemSpacing 0em;
+ }
+ .ui.items > .item > .image:not(.ui) {
+ width: @tabletImageWidth;
+ }
+ .ui.items > .item > .image + .content {
+ display: block;
+ padding: 0em 0em 0em @tabletContentImageDistance;
+ }
+
+}
+
+/* Mobile Only */
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.items > .item {
+ flex-direction: column;
+ margin: @mobileItemSpacing 0em;
+ }
+ .ui.items > .item > .image {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ .ui.items > .item > .image,
+ .ui.items > .item > .image > img {
+ max-width: 100% !important;
+ width: @mobileImageWidth !important;
+ max-height: @mobileImageMaxHeight !important;
+ }
+ .ui.items > .item > .image + .content {
+ display: block;
+ padding: @mobileContentImageDistance 0em 0em;
+ }
+
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*-------------------
+ Aligned
+--------------------*/
+
+.ui.items > .item > .image + [class*="top aligned"].content {
+ align-self: flex-start;
+}
+.ui.items > .item > .image + [class*="middle aligned"].content {
+ align-self: center;
+}
+.ui.items > .item > .image + [class*="bottom aligned"].content {
+ align-self: flex-end;
+}
+
+
+/*--------------
+ Relaxed
+---------------*/
+
+.ui.relaxed.items > .item {
+ margin: @relaxedItemSpacing 0em;
+}
+.ui[class*="very relaxed"].items > .item {
+ margin: @veryRelaxedItemSpacing 0em;
+}
+
+
+/*-------------------
+ Divided
+--------------------*/
+
+.ui.divided.items > .item {
+ border-top: @dividedBorder;
+ margin: @dividedMargin;
+ padding: @dividedPadding;
+}
+.ui.divided.items > .item:first-child {
+ border-top: none;
+ margin-top: @dividedFirstLastMargin !important;
+ padding-top: @dividedFirstLastPadding !important;
+}
+.ui.divided.items > .item:last-child {
+ margin-bottom: @dividedFirstLastMargin !important;
+ padding-bottom: @dividedFirstLastPadding !important;
+}
+
+/* Relaxed Divided */
+.ui.relaxed.divided.items > .item {
+ margin: 0em;
+ padding: @relaxedItemSpacing 0em;
+}
+.ui[class*="very relaxed"].divided.items > .item {
+ margin: 0em;
+ padding: @veryRelaxedItemSpacing 0em;
+}
+
+
+/*-------------------
+ Link
+--------------------*/
+
+.ui.items a.item:hover,
+.ui.link.items > .item:hover {
+ cursor: pointer;
+}
+
+.ui.items a.item:hover .content .header,
+.ui.link.items > .item:hover .content .header {
+ color: @headerLinkHoverColor;
+}
+
+
+/*--------------
+ Size
+---------------*/
+
+.ui.items > .item {
+ font-size: @medium;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/views/statistic.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/views/statistic.less b/semantic/src/definitions/views/statistic.less
new file mode 100755
index 0000000..e345c45
--- /dev/null
+++ b/semantic/src/definitions/views/statistic.less
@@ -0,0 +1,557 @@
+/*!
+ * # Semantic UI - Statistic
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'view';
+@element : 'statistic';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Statistic
+*******************************/
+
+/* Standalone */
+.ui.statistic {
+ display: inline-flex;
+ flex-direction: column;
+ margin: @margin;
+ max-width: @maxWidth;
+}
+
+.ui.statistic + .ui.statistic {
+ margin: 0em 0em 0em @horizontalSpacing;
+}
+
+.ui.statistic:first-child {
+ margin-top: 0em;
+}
+.ui.statistic:last-child {
+ margin-bottom: 0em;
+}
+
+
+
+/*******************************
+ Group
+*******************************/
+
+/* Grouped */
+.ui.statistics {
+ display: flex;
+ align-items: flex-start;
+ flex-wrap: wrap;
+}
+.ui.statistics > .statistic {
+ display: inline-flex;
+ flex: 0 1 auto;
+ flex-direction: column;
+ margin: @elementMargin;
+ max-width: @elementMaxWidth;
+}
+.ui.statistics {
+ display: flex;
+ margin: @groupMargin;
+}
+
+/* Clearing */
+.ui.statistics:after {
+ display: block;
+ content: ' ';
+ height: 0px;
+ clear: both;
+ overflow: hidden;
+ visibility: hidden;
+}
+
+.ui.statistics:first-child {
+ margin-top: 0em;
+}
+.ui.statistics:last-child {
+ margin-bottom: 0em;
+}
+
+
+/*******************************
+ Content
+*******************************/
+
+
+/*--------------
+ Value
+---------------*/
+
+.ui.statistics .statistic > .value,
+.ui.statistic > .value {
+ font-family: @valueFont;
+ font-size: @valueSize;
+ font-weight: @valueFontWeight;
+ line-height: @valueLineHeight;
+ color: @valueColor;
+ text-transform: @valueTextTransform;
+ text-align: @textAlign;
+}
+
+/*--------------
+ Label
+---------------*/
+
+.ui.statistics .statistic > .label,
+.ui.statistic > .label {
+ font-family: @labelFont;
+ font-size: @labelSize;
+ font-weight: @labelFontWeight;
+ color: @labelColor;
+ text-transform: @labelTextTransform;
+ text-align: @textAlign;
+}
+
+/* Top Label */
+.ui.statistics .statistic > .label ~ .value,
+.ui.statistic > .label ~ .value {
+ margin-top: @topLabelDistance;
+}
+
+/* Bottom Label */
+.ui.statistics .statistic > .value ~ .label,
+.ui.statistic > .value ~ .label {
+ margin-top: @bottomLabelDistance;
+}
+
+
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Icon Value
+---------------*/
+
+.ui.statistics .statistic > .value .icon,
+.ui.statistic > .value .icon {
+ opacity: 1;
+ width: auto;
+ margin: 0em;
+}
+
+/*--------------
+ Text Value
+---------------*/
+
+.ui.statistics .statistic > .text.value,
+.ui.statistic > .text.value {
+ line-height: @textValueLineHeight;
+ min-height: @textValueMinHeight;
+ font-weight: @textValueFontWeight;
+ text-align: center;
+}
+.ui.statistics .statistic > .text.value + .label,
+.ui.statistic > .text.value + .label {
+ text-align: center;
+}
+
+/*--------------
+ Image Value
+---------------*/
+
+.ui.statistics .statistic > .value img,
+.ui.statistic > .value img {
+ max-height: @imageHeight;
+ vertical-align: @imageVerticalAlign;
+}
+
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*--------------
+ Count
+---------------*/
+
+
+.ui.ten.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.ten.statistics .statistic {
+ min-width: @tenColumn;
+ margin: @itemMargin;
+}
+
+.ui.nine.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.nine.statistics .statistic {
+ min-width: @nineColumn;
+ margin: @itemMargin;
+}
+
+.ui.eight.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.eight.statistics .statistic {
+ min-width: @eightColumn;
+ margin: @itemMargin;
+}
+
+.ui.seven.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.seven.statistics .statistic {
+ min-width: @sevenColumn;
+ margin: @itemMargin;
+}
+
+.ui.six.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.six.statistics .statistic {
+ min-width: @sixColumn;
+ margin: @itemMargin;
+}
+
+.ui.five.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.five.statistics .statistic {
+ min-width: @fiveColumn;
+ margin: @itemMargin;
+}
+
+.ui.four.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.four.statistics .statistic {
+ min-width: @fourColumn;
+ margin: @itemMargin;
+}
+
+.ui.three.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.three.statistics .statistic {
+ min-width: @threeColumn;
+ margin: @itemMargin;
+}
+
+.ui.two.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.two.statistics .statistic {
+ min-width: @twoColumn;
+ margin: @itemMargin;
+}
+
+.ui.one.statistics {
+ margin: @itemGroupMargin;
+}
+.ui.one.statistics .statistic {
+ min-width: @oneColumn;
+ margin: @itemMargin;
+}
+
+
+
+
+/*--------------
+ Horizontal
+---------------*/
+
+.ui.horizontal.statistic {
+ flex-direction: row;
+ align-items: center;
+}
+.ui.horizontal.statistics {
+ flex-direction: column;
+ margin: 0em;
+ max-width: none;
+}
+.ui.horizontal.statistics .statistic {
+ flex-direction: row;
+ align-items: center;
+ max-width: none;
+ margin: @horizontalGroupElementMargin;
+}
+
+.ui.horizontal.statistic > .text.value,
+.ui.horizontal.statistics > .statistic > .text.value {
+ min-height: 0em !important;
+}
+.ui.horizontal.statistics .statistic > .value .icon,
+.ui.horizontal.statistic > .value .icon {
+ width: @iconWidth;
+}
+
+.ui.horizontal.statistics .statistic > .value,
+.ui.horizontal.statistic > .value {
+ display: inline-block;
+ vertical-align: middle;
+}
+.ui.horizontal.statistics .statistic > .label,
+.ui.horizontal.statistic > .label {
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0em 0em 0em @horizontalLabelDistance;
+}
+
+/*--------------
+ Colors
+---------------*/
+
+.ui.red.statistics .statistic > .value,
+.ui.statistics .red.statistic > .value,
+.ui.red.statistic > .value {
+ color: @red;
+}
+.ui.orange.statistics .statistic > .value,
+.ui.statistics .orange.statistic > .value,
+.ui.orange.statistic > .value {
+ color: @orange;
+}
+.ui.yellow.statistics .statistic > .value,
+.ui.statistics .yellow.statistic > .value,
+.ui.yellow.statistic > .value {
+ color: @yellow;
+}
+.ui.olive.statistics .statistic > .value,
+.ui.statistics .olive.statistic > .value,
+.ui.olive.statistic > .value {
+ color: @olive;
+}
+.ui.green.statistics .statistic > .value,
+.ui.statistics .green.statistic > .value,
+.ui.green.statistic > .value {
+ color: @green;
+}
+.ui.teal.statistics .statistic > .value,
+.ui.statistics .teal.statistic > .value,
+.ui.teal.statistic > .value {
+ color: @teal;
+}
+.ui.blue.statistics .statistic > .value,
+.ui.statistics .blue.statistic > .value,
+.ui.blue.statistic > .value {
+ color: @blue;
+}
+.ui.violet.statistics .statistic > .value,
+.ui.statistics .violet.statistic > .value,
+.ui.violet.statistic > .value {
+ color: @violet;
+}
+.ui.purple.statistics .statistic > .value,
+.ui.statistics .purple.statistic > .value,
+.ui.purple.statistic > .value {
+ color: @purple;
+}
+.ui.pink.statistics .statistic > .value,
+.ui.statistics .pink.statistic > .value,
+.ui.pink.statistic > .value {
+ color: @pink;
+}
+.ui.brown.statistics .statistic > .value,
+.ui.statistics .brown.statistic > .value,
+.ui.brown.statistic > .value {
+ color: @brown;
+}
+.ui.grey.statistics .statistic > .value,
+.ui.statistics .grey.statistic > .value,
+.ui.grey.statistic > .value {
+ color: @grey;
+}
+
+/*--------------
+ Inverted
+---------------*/
+
+.ui.inverted.statistics .statistic > .value,
+.ui.inverted.statistic .value {
+ color: @invertedValueColor;
+}
+.ui.inverted.statistics .statistic > .label,
+.ui.inverted.statistic .label {
+ color: @invertedLabelColor;
+}
+
+.ui.inverted.red.statistics .statistic > .value,
+.ui.statistics .inverted.red.statistic > .value,
+.ui.inverted.red.statistic > .value {
+ color: @lightRed;
+}
+.ui.inverted.orange.statistics .statistic > .value,
+.ui.statistics .inverted.orange.statistic > .value,
+.ui.inverted.orange.statistic > .value {
+ color: @lightOrange;
+}
+.ui.inverted.yellow.statistics .statistic > .value,
+.ui.statistics .inverted.yellow.statistic > .value,
+.ui.inverted.yellow.statistic > .value {
+ color: @lightYellow;
+}
+.ui.inverted.olive.statistics .statistic > .value,
+.ui.statistics .inverted.olive.statistic > .value,
+.ui.inverted.olive.statistic > .value {
+ color: @lightOlive;
+}
+.ui.inverted.green.statistics .statistic > .value,
+.ui.statistics .inverted.green.statistic > .value,
+.ui.inverted.green.statistic > .value {
+ color: @lightGreen;
+}
+.ui.inverted.teal.statistics .statistic > .value,
+.ui.statistics .inverted.teal.statistic > .value,
+.ui.inverted.teal.statistic > .value {
+ color: @lightTeal;
+}
+.ui.inverted.blue.statistics .statistic > .value,
+.ui.statistics .inverted.blue.statistic > .value,
+.ui.inverted.blue.statistic > .value {
+ color: @lightBlue;
+}
+.ui.inverted.violet.statistics .statistic > .value,
+.ui.statistics .inverted.violet.statistic > .value,
+.ui.inverted.violet.statistic > .value {
+ color: @lightViolet;
+}
+.ui.inverted.purple.statistics .statistic > .value,
+.ui.statistics .inverted.purple.statistic > .value,
+.ui.inverted.purple.statistic > .value {
+ color: @lightPurple;
+}
+.ui.inverted.pink.statistics .statistic > .value,
+.ui.statistics .inverted.pink.statistic > .value,
+.ui.inverted.pink.statistic > .value {
+ color: @lightPink;
+}
+.ui.inverted.brown.statistics .statistic > .value,
+.ui.statistics .inverted.brown.statistic > .value,
+.ui.inverted.brown.statistic > .value {
+ color: @lightBrown;
+}
+.ui.inverted.grey.statistics .statistic > .value,
+.ui.statistics .inverted.grey.statistic > .value,
+.ui.inverted.grey.statistic > .value {
+ color: @lightGrey;
+}
+
+/*--------------
+ Floated
+---------------*/
+
+.ui[class*="left floated"].statistic {
+ float: left;
+ margin: @leftFloatedMargin;
+}
+.ui[class*="right floated"].statistic {
+ float: right;
+ margin: @rightFloatedMargin;
+}
+.ui.floated.statistic:last-child {
+ margin-bottom: 0em;
+}
+
+
+/*--------------
+ Sizes
+---------------*/
+
+
+/* Mini */
+.ui.mini.statistics .statistic > .value,
+.ui.mini.statistic > .value {
+ font-size: @miniValueSize !important;
+}
+.ui.mini.horizontal.statistics .statistic > .value,
+.ui.mini.horizontal.statistic > .value {
+ font-size: @miniHorizontalValueSize !important;
+}
+.ui.mini.statistics .statistic > .text.value,
+.ui.mini.statistic > .text.value {
+ font-size: @miniTextValueSize !important;
+}
+
+
+/* Tiny */
+.ui.tiny.statistics .statistic > .value,
+.ui.tiny.statistic > .value {
+ font-size: @tinyValueSize !important;
+}
+.ui.tiny.horizontal.statistics .statistic > .value,
+.ui.tiny.horizontal.statistic > .value {
+ font-size: @tinyHorizontalValueSize !important;
+}
+.ui.tiny.statistics .statistic > .text.value,
+.ui.tiny.statistic > .text.value {
+ font-size: @tinyTextValueSize !important;
+}
+
+/* Small */
+.ui.small.statistics .statistic > .value,
+.ui.small.statistic > .value {
+ font-size: @smallValueSize !important;
+}
+.ui.small.horizontal.statistics .statistic > .value,
+.ui.small.horizontal.statistic > .value {
+ font-size: @smallHorizontalValueSize !important;
+}
+.ui.small.statistics .statistic > .text.value,
+.ui.small.statistic > .text.value {
+ font-size: @smallTextValueSize !important;
+}
+
+/* Medium */
+.ui.statistics .statistic > .value,
+.ui.statistic > .value {
+ font-size: @valueSize !important;
+}
+.ui.horizontal.statistics .statistic > .value,
+.ui.horizontal.statistic > .value {
+ font-size: @horizontalValueSize !important;
+}
+.ui.statistics .statistic > .text.value,
+.ui.statistic > .text.value {
+ font-size: @textValueSize !important;
+}
+
+/* Large */
+.ui.large.statistics .statistic > .value,
+.ui.large.statistic > .value {
+ font-size: @largeValueSize !important;
+}
+.ui.large.horizontal.statistics .statistic > .value,
+.ui.large.horizontal.statistic > .value {
+ font-size: @largeHorizontalValueSize !important;
+}
+.ui.large.statistics .statistic > .text.value,
+.ui.large.statistic > .text.value {
+ font-size: @largeTextValueSize !important;
+}
+
+/* Huge */
+.ui.huge.statistics .statistic > .value,
+.ui.huge.statistic > .value {
+ font-size: @hugeValueSize !important;
+}
+.ui.huge.horizontal.statistics .statistic > .value,
+.ui.huge.horizontal.statistic > .value {
+ font-size: @hugeHorizontalValueSize !important;
+}
+.ui.huge.statistics .statistic > .text.value,
+.ui.huge.statistic > .text.value {
+ font-size: @hugeTextValueSize !important;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/semantic.less
----------------------------------------------------------------------
diff --git a/semantic/src/semantic.less b/semantic/src/semantic.less
new file mode 100644
index 0000000..c646474
--- /dev/null
+++ b/semantic/src/semantic.less
@@ -0,0 +1,66 @@
+/*
+
+\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557
+\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551
+\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551
+\u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2551\u255a\u2588\u2588\u2554\u255d\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551\u255a\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551
+\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255a\u2550\u255d \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551
+\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d
+
+ Import this file into your LESS project to use Semantic UI without build tools
+*/
+
+/* Global */
+& { @import "definitions/globals/reset"; }
+& { @import "definitions/globals/site"; }
+
+/* Elements */
+& { @import "definitions/elements/button"; }
+& { @import "definitions/elements/container"; }
+& { @import "definitions/elements/divider"; }
+& { @import "definitions/elements/flag"; }
+& { @import "definitions/elements/header"; }
+& { @import "definitions/elements/icon"; }
+& { @import "definitions/elements/image"; }
+& { @import "definitions/elements/input"; }
+& { @import "definitions/elements/label"; }
+& { @import "definitions/elements/list"; }
+& { @import "definitions/elements/loader"; }
+& { @import "definitions/elements/rail"; }
+& { @import "definitions/elements/reveal"; }
+& { @import "definitions/elements/segment"; }
+& { @import "definitions/elements/step"; }
+
+/* Collections */
+& { @import "definitions/collections/breadcrumb"; }
+& { @import "definitions/collections/form"; }
+& { @import "definitions/collections/grid"; }
+& { @import "definitions/collections/menu"; }
+& { @import "definitions/collections/message"; }
+& { @import "definitions/collections/table"; }
+
+/* Views */
+& { @import "definitions/views/ad"; }
+& { @import "definitions/views/card"; }
+& { @import "definitions/views/comment"; }
+& { @import "definitions/views/feed"; }
+& { @import "definitions/views/item"; }
+& { @import "definitions/views/statistic"; }
+
+/* Modules */
+& { @import "definitions/modules/accordion"; }
+& { @import "definitions/modules/checkbox"; }
+& { @import "definitions/modules/dimmer"; }
+& { @import "definitions/modules/dropdown"; }
+& { @import "definitions/modules/embed"; }
+& { @import "definitions/modules/modal"; }
+& { @import "definitions/modules/nag"; }
+& { @import "definitions/modules/popup"; }
+& { @import "definitions/modules/progress"; }
+& { @import "definitions/modules/rating"; }
+& { @import "definitions/modules/search"; }
+& { @import "definitions/modules/shape"; }
+& { @import "definitions/modules/sidebar"; }
+& { @import "definitions/modules/sticky"; }
+& { @import "definitions/modules/tab"; }
+& { @import "definitions/modules/transition"; }
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/breadcrumb.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/breadcrumb.overrides b/semantic/src/site/collections/breadcrumb.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/collections/breadcrumb.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/breadcrumb.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/breadcrumb.variables b/semantic/src/site/collections/breadcrumb.variables
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/collections/breadcrumb.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/form.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/form.overrides b/semantic/src/site/collections/form.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/collections/form.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/form.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/form.variables b/semantic/src/site/collections/form.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/collections/form.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/grid.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/grid.overrides b/semantic/src/site/collections/grid.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/collections/grid.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/grid.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/grid.variables b/semantic/src/site/collections/grid.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/collections/grid.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/menu.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/menu.overrides b/semantic/src/site/collections/menu.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/collections/menu.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/menu.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/menu.variables b/semantic/src/site/collections/menu.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/collections/menu.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/message.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/message.overrides b/semantic/src/site/collections/message.overrides
new file mode 100644
index 0000000..96091c3
--- /dev/null
+++ b/semantic/src/site/collections/message.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/message.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/message.variables b/semantic/src/site/collections/message.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/collections/message.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/table.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/table.overrides b/semantic/src/site/collections/table.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/collections/table.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/collections/table.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/collections/table.variables b/semantic/src/site/collections/table.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/collections/table.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/button.overrides b/semantic/src/site/elements/button.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/button.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/button.variables b/semantic/src/site/elements/button.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/button.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/container.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/container.overrides b/semantic/src/site/elements/container.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/container.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/container.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/container.variables b/semantic/src/site/elements/container.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/container.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/divider.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/divider.overrides b/semantic/src/site/elements/divider.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/divider.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/divider.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/divider.variables b/semantic/src/site/elements/divider.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/divider.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/flag.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/flag.overrides b/semantic/src/site/elements/flag.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/flag.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/flag.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/flag.variables b/semantic/src/site/elements/flag.variables
new file mode 100644
index 0000000..e3e125d
--- /dev/null
+++ b/semantic/src/site/elements/flag.variables
@@ -0,0 +1,3 @@
+/*-------------------
+ Flag Variables
+--------------------*/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/header.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/header.overrides b/semantic/src/site/elements/header.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/header.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/header.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/header.variables b/semantic/src/site/elements/header.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/header.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/icon.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/icon.overrides b/semantic/src/site/elements/icon.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/icon.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/icon.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/icon.variables b/semantic/src/site/elements/icon.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/icon.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/image.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/image.overrides b/semantic/src/site/elements/image.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/image.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/image.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/image.variables b/semantic/src/site/elements/image.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/image.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/input.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/input.overrides b/semantic/src/site/elements/input.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/input.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/input.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/input.variables b/semantic/src/site/elements/input.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/input.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/label.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/label.overrides b/semantic/src/site/elements/label.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/label.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/label.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/label.variables b/semantic/src/site/elements/label.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/label.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/list.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/list.overrides b/semantic/src/site/elements/list.overrides
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/list.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/list.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/list.variables b/semantic/src/site/elements/list.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/list.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/loader.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/loader.overrides b/semantic/src/site/elements/loader.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/loader.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/loader.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/loader.variables b/semantic/src/site/elements/loader.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/loader.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/rail.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/rail.overrides b/semantic/src/site/elements/rail.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/rail.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/rail.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/rail.variables b/semantic/src/site/elements/rail.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/rail.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/reveal.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/reveal.overrides b/semantic/src/site/elements/reveal.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/reveal.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/reveal.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/reveal.variables b/semantic/src/site/elements/reveal.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/reveal.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/segment.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/segment.overrides b/semantic/src/site/elements/segment.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/segment.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/segment.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/segment.variables b/semantic/src/site/elements/segment.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/segment.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/step.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/step.overrides b/semantic/src/site/elements/step.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/elements/step.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/elements/step.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/elements/step.variables b/semantic/src/site/elements/step.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/elements/step.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/globals/reset.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/globals/reset.overrides b/semantic/src/site/globals/reset.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/globals/reset.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/globals/reset.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/globals/reset.variables b/semantic/src/site/globals/reset.variables
new file mode 100644
index 0000000..cd95544
--- /dev/null
+++ b/semantic/src/site/globals/reset.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Global Variables
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/globals/site.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/globals/site.overrides b/semantic/src/site/globals/site.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/globals/site.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/globals/site.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/globals/site.variables b/semantic/src/site/globals/site.variables
new file mode 100644
index 0000000..af19ae5
--- /dev/null
+++ b/semantic/src/site/globals/site.variables
@@ -0,0 +1,16 @@
+/*******************************
+ User Global Variables
+*******************************/
+
+@primaryColor : @brown;
+@brown : #A76B00;
+@red : #A7003C;
+@green : #00A76B;
+@purple : #6B00A7;
+@blue : #003DA7;
+@teal : #0090A7;
+@black : #271900;
+@white : #FFF5E3;
+@grey : #FFE7BC;
+
+@pageBackground : @white;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/accordion.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/accordion.overrides b/semantic/src/site/modules/accordion.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/accordion.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/accordion.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/accordion.variables b/semantic/src/site/modules/accordion.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/accordion.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/chatroom.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/chatroom.overrides b/semantic/src/site/modules/chatroom.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/chatroom.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/chatroom.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/chatroom.variables b/semantic/src/site/modules/chatroom.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/chatroom.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/checkbox.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/checkbox.overrides b/semantic/src/site/modules/checkbox.overrides
new file mode 100644
index 0000000..cba59ef
--- /dev/null
+++ b/semantic/src/site/modules/checkbox.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Site Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/checkbox.variables
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/checkbox.variables b/semantic/src/site/modules/checkbox.variables
new file mode 100644
index 0000000..6f085f9
--- /dev/null
+++ b/semantic/src/site/modules/checkbox.variables
@@ -0,0 +1,3 @@
+/*******************************
+ User Variable Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/site/modules/dimmer.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/site/modules/dimmer.overrides b/semantic/src/site/modules/dimmer.overrides
new file mode 100644
index 0000000..660e664
--- /dev/null
+++ b/semantic/src/site/modules/dimmer.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ User Overrides
+*******************************/
[06/48] incubator-senssoft-tap git commit: Fixed bug in user_profile
url
Posted by ar...@apache.org.
Fixed bug in user_profile url
To keep with our convention, all urls must end with a /
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/4290cb01
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/4290cb01
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/4290cb01
Branch: refs/heads/master
Commit: 4290cb01e0ab78e246df7387ed91186fa78a6384
Parents: b27a8e7
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Wed Jul 20 13:36:10 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Wed Jul 20 13:36:10 2016 -0400
----------------------------------------------------------------------
app_mgr/urls.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/4290cb01/app_mgr/urls.py
----------------------------------------------------------------------
diff --git a/app_mgr/urls.py b/app_mgr/urls.py
index 827f2e3..28dd27e 100644
--- a/app_mgr/urls.py
+++ b/app_mgr/urls.py
@@ -22,7 +22,7 @@ urlpatterns = [
url(r'^register/', views.register, name='register'),
url(r'^login/$', views.login_user, name='login'),
url(r'^logout/$', views.logout_user, name='logout'),
- url(r'^user_profile$', views.view_profile, name='view_profile'),
+ url(r'^user_profile/$', views.view_profile, name='view_profile'),
url(r'^reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', views.reset_confirm, name='reset_confirm'),
url(r'^reset/$', views.reset, name='reset'),
url(r'^reset/sent/$', views.reset_sent, name='reset_sent'),
[13/48] incubator-senssoft-tap git commit: Merge branch 'endpoints'
Posted by ar...@apache.org.
Merge branch 'endpoints'
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/1c688a70
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/1c688a70
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/1c688a70
Branch: refs/heads/master
Commit: 1c688a705ace4302f912fe201ad3b0296aba6050
Parents: 5a97089 5eb5a23
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Tue Oct 11 14:03:57 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Tue Oct 11 14:03:57 2016 -0400
----------------------------------------------------------------------
Vagrantfile | 77 ++++++++++++++++++++++++++++++++++++
app_mgr/apps.py | 2 +-
app_mgr/distillviews.py | 48 ++++++++++++++++++++++
app_mgr/urls.py | 13 +++++-
app_mgr/views.py | 62 ++++++++++++++++++++++++-----
requirements.txt | 3 ++
tap/templates/index.html | 17 ++++++++
tap/urls.py | 4 +-
vagrant/bash_aliases | 3 ++
vagrant/provision_as_root.sh | 34 ++++++++++++++++
vagrant/provision_as_vagrant.sh | 72 +++++++++++++++++++++++++++++++++
vagrant/provision_databases.sh | 9 +++++
12 files changed, 332 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/1c688a70/app_mgr/apps.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/1c688a70/app_mgr/urls.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/1c688a70/app_mgr/views.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/1c688a70/tap/urls.py
----------------------------------------------------------------------
[14/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/project/install.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/project/install.js b/semantic/tasks/config/project/install.js
new file mode 100644
index 0000000..2055365
--- /dev/null
+++ b/semantic/tasks/config/project/install.js
@@ -0,0 +1,763 @@
+/*******************************
+ Set-up
+*******************************/
+
+var
+ fs = require('fs'),
+ path = require('path'),
+ defaults = require('../defaults'),
+ release = require('./release'),
+
+ requireDotFile = require('require-dot-file')
+;
+
+/*******************************
+ When to Ask
+*******************************/
+
+/* Preconditions for install questions */
+
+var when = {
+
+ // path
+ changeRoot: function(questions) {
+ return (questions.useRoot !== undefined && questions.useRoot !== true);
+ },
+
+ // permissions
+ changePermissions: function(questions) {
+ return (questions.changePermissions && questions.changePermissions === true);
+ },
+
+ // install
+ hasConfig: function() {
+ return requireDotFile('semantic.json', process.cwd());
+ },
+
+ allowOverwrite: function(questions) {
+ return (questions.overwrite === undefined || questions.overwrite == 'yes');
+ },
+ notAuto: function(questions) {
+ return (questions.install !== 'auto' && (questions.overwrite === undefined || questions.overwrite == 'yes'));
+ },
+ custom: function(questions) {
+ return (questions.install === 'custom' && (questions.overwrite === undefined || questions.overwrite == 'yes'));
+ },
+ express: function(questions) {
+ return (questions.install === 'express' && (questions.overwrite === undefined || questions.overwrite == 'yes'));
+ },
+
+ // customize
+ customize: function(questions) {
+ return (questions.customize === true);
+ },
+ primaryColor: function(questions) {
+ return (questions.primaryColor);
+ },
+ secondaryColor: function(questions) {
+ return (questions.secondaryColor);
+ }
+};
+
+/*******************************
+ Response Filters
+*******************************/
+
+/* Filters to user input from install questions */
+
+var filter = {
+ removeTrailingSlash: function(path) {
+ return path.replace(/(\/$|\\$)+/mg, '');
+ }
+};
+
+/*******************************
+ Configuration
+*******************************/
+
+module.exports = {
+
+ // check whether install is setup
+ isSetup: function() {
+ return when.hasConfig();
+ },
+
+ // detect whether there is a semantic.json configuration and that the auto-install option is set to true
+ shouldAutoInstall: function() {
+ var
+ config = when.hasConfig()
+ ;
+ return config['autoInstall'];
+ },
+
+ // checks if files are in a PM directory
+ getPackageManager: function(directory) {
+ var
+ // returns last matching result (avoid sub-module detection)
+ walk = function(directory) {
+ var
+ pathArray = directory.split(path.sep),
+ folder = pathArray[pathArray.length - 1],
+ nextDirectory = path.join(directory, path.sep, '..')
+ ;
+ if( folder == 'bower_components') {
+ return {
+ name: 'Bower',
+ root: nextDirectory
+ };
+ }
+ else if(folder == 'node_modules') {
+ return {
+ name: 'NPM',
+ root: nextDirectory
+ };
+ }
+ else if(folder == 'composer') {
+ return {
+ name: 'Composer',
+ root: nextDirectory
+ };
+ }
+ if(path.resolve(directory) == path.resolve(nextDirectory)) {
+ return false;
+ }
+ // recurse downward
+ return walk(nextDirectory);
+ }
+ ;
+ // start walk from current directory if none specified
+ directory = directory || (__dirname + path.sep);
+ return walk(directory);
+ },
+
+ // checks if files is PMed submodule
+ isSubModule: function(directory) {
+ var
+ moduleFolders = 0,
+ walk = function(directory) {
+ var
+ pathArray = directory.split(path.sep),
+ folder = pathArray[pathArray.length - 2],
+ nextDirectory = path.join(directory, path.sep, '..')
+ ;
+ if( folder == 'bower_components') {
+ moduleFolders++;
+ }
+ else if(folder == 'node_modules') {
+ moduleFolders++;
+ }
+ else if(folder == 'composer') {
+ moduleFolders++;
+ }
+ if(path.resolve(directory) == path.resolve(nextDirectory)) {
+ return (moduleFolders > 1);
+ }
+ // recurse downward
+ return walk(nextDirectory);
+ }
+ ;
+ // start walk from current directory if none specified
+ directory = directory || (__dirname + path.sep);
+ return walk(directory);
+ },
+
+
+ createJSON: function(answers) {
+ var
+ json = {
+ paths: {
+ source: {},
+ output: {}
+ }
+ }
+ ;
+
+ // add components
+ if(answers.components) {
+ json.components = answers.components;
+ }
+
+ // add rtl choice
+ if(answers.rtl) {
+ json.rtl = answers.rtl;
+ }
+
+ // add permissions
+ if(answers.permission) {
+ json.permission = answers.permission;
+ }
+
+ // add path to semantic
+ if(answers.semanticRoot) {
+ json.base = path.normalize(answers.semanticRoot);
+ }
+
+ // record version number to avoid re-installing on same version
+ json.version = release.version;
+
+ // add dist folder paths
+ if(answers.dist) {
+ answers.dist = path.normalize(answers.dist);
+
+ json.paths.output = {
+ packaged : path.normalize(answers.dist + '/'),
+ uncompressed : path.normalize(answers.dist + '/components/'),
+ compressed : path.normalize(answers.dist + '/components/'),
+ themes : path.normalize(answers.dist + '/themes/')
+ };
+ }
+
+ // add site path
+ if(answers.site) {
+ json.paths.source.site = path.normalize(answers.site + '/');
+ }
+ if(answers.packaged) {
+ json.paths.output.packaged = path.normalize(answers.packaged + '/');
+ }
+ if(answers.compressed) {
+ json.paths.output.compressed = path.normalize(answers.compressed + '/');
+ }
+ if(answers.uncompressed) {
+ json.paths.output.uncompressed = path.normalize(answers.uncompressed + '/');
+ }
+ return json;
+ },
+
+ // files cleaned up after install
+ setupFiles: [
+ './src/theme.config.example',
+ './semantic.json.example',
+ './src/_site'
+ ],
+
+ regExp: {
+ // used to match siteFolder variable in theme.less
+ siteVariable: /@siteFolder .*\'(.*)/mg
+ },
+
+ // source paths (when installing)
+ source: {
+ config : './semantic.json.example',
+ definitions : './src/definitions',
+ gulpFile : './gulpfile.js',
+ lessImport : './src/semantic.less',
+ site : './src/_site',
+ tasks : './tasks',
+ themeConfig : './src/theme.config.example',
+ themeImport : './src/theme.less',
+ themes : './src/themes',
+ defaultTheme : './src/themes/default',
+ userGulpFile : './tasks/config/npm/gulpfile.js'
+ },
+
+ // expected final filenames
+ files: {
+ config : 'semantic.json',
+ lessImport : 'src/semantic.less',
+ site : 'src/site',
+ themeConfig : 'src/theme.config',
+ themeImport : 'src/theme.less'
+ },
+
+ // folder paths to files relative to root
+ folders: {
+ config : './',
+ definitions : 'src/definitions/',
+ lessImport : 'src/',
+ modules : 'node_modules/',
+ site : 'src/site/',
+ tasks : 'tasks/',
+ themeConfig : 'src/',
+ themeImport : 'src/',
+ themes : 'src/themes/',
+
+ defaultTheme : 'default/' // only path that is relative to another directory and not root
+ },
+
+ // questions asked during install
+ questions: {
+
+ root: [
+ {
+ type : 'list',
+ name : 'useRoot',
+ message :
+ ' \n' +
+ ' {packageMessage} \n' +
+ ' \n' +
+ ' Is this your project folder?\n' +
+ ' \x1b[92m{root}\x1b[0m \n' +
+ ' \n ' +
+ '\n',
+ choices: [
+ {
+ name : 'Yes',
+ value : true
+ },
+ {
+ name : 'No, let me specify',
+ value : false
+ }
+ ]
+ },
+ {
+ type : 'input',
+ name : 'customRoot',
+ message : 'Please enter the absolute path to your project root',
+ default : '/my/project/path',
+ when : when.changeRoot
+ },
+ {
+ type : 'input',
+ name : 'semanticRoot',
+ message : 'Where should we put Semantic UI inside your project?',
+ default : 'semantic/'
+ }
+ ],
+
+ setup: [
+ {
+ type: 'list',
+ name: 'overwrite',
+ message: 'It looks like you have a semantic.json file already.',
+ when: when.hasConfig,
+ choices: [
+ {
+ name: 'Yes, extend my current settings.',
+ value: 'yes'
+ },
+ {
+ name: 'Skip install',
+ value: 'no'
+ }
+ ]
+ },
+ {
+ type: 'list',
+ name: 'install',
+ message: 'Set-up Semantic UI',
+ when: when.allowOverwrite,
+ choices: [
+ {
+ name: 'Automatic (Use defaults locations and all components)',
+ value: 'auto'
+ },
+ {
+ name: 'Express (Set components and output folder)',
+ value: 'express'
+ },
+ {
+ name: 'Custom (Customize all src/dist values)',
+ value: 'custom'
+ }
+ ]
+ },
+ {
+ type: 'checkbox',
+ name: 'components',
+ message: 'What components should we include in the package?',
+
+ // duplicated manually from tasks/defaults.js with additional property
+ choices: [
+ { name: "reset", checked: true },
+ { name: "site", checked: true },
+ { name: "button", checked: true },
+ { name: "container", checked: true },
+ { name: "divider", checked: true },
+ { name: "flag", checked: true },
+ { name: "header", checked: true },
+ { name: "icon", checked: true },
+ { name: "image", checked: true },
+ { name: "input", checked: true },
+ { name: "label", checked: true },
+ { name: "list", checked: true },
+ { name: "loader", checked: true },
+ { name: "rail", checked: true },
+ { name: "reveal", checked: true },
+ { name: "segment", checked: true },
+ { name: "step", checked: true },
+ { name: "breadcrumb", checked: true },
+ { name: "form", checked: true },
+ { name: "grid", checked: true },
+ { name: "menu", checked: true },
+ { name: "message", checked: true },
+ { name: "table", checked: true },
+ { name: "ad", checked: true },
+ { name: "card", checked: true },
+ { name: "comment", checked: true },
+ { name: "feed", checked: true },
+ { name: "item", checked: true },
+ { name: "statistic", checked: true },
+ { name: "accordion", checked: true },
+ { name: "checkbox", checked: true },
+ { name: "dimmer", checked: true },
+ { name: "dropdown", checked: true },
+ { name: "embed", checked: true },
+ { name: "modal", checked: true },
+ { name: "nag", checked: true },
+ { name: "popup", checked: true },
+ { name: "progress", checked: true },
+ { name: "rating", checked: true },
+ { name: "search", checked: true },
+ { name: "shape", checked: true },
+ { name: "sidebar", checked: true },
+ { name: "sticky", checked: true },
+ { name: "tab", checked: true },
+ { name: "transition", checked: true },
+ { name: "api", checked: true },
+ { name: "form", checked: true },
+ { name: "state", checked: true },
+ { name: "visibility", checked: true }
+ ],
+ when: when.notAuto
+ },
+ {
+ type: 'list',
+ name: 'changePermissions',
+ when: when.notAuto,
+ message: 'Should we set permissions on outputted files?',
+ choices: [
+ {
+ name: 'No',
+ value: false
+ },
+ {
+ name: 'Yes',
+ value: true
+ }
+ ]
+ },
+ {
+ type: 'input',
+ name: 'permission',
+ message: 'What octal file permission should outputted files receive?',
+ default: defaults.permission,
+ when: when.changePermissions
+ },
+ {
+ type: 'list',
+ name: 'rtl',
+ message: 'Do you use a RTL (Right-To-Left) language?',
+ when: when.notAuto,
+ choices: [
+ {
+ name: 'No',
+ value: false
+ },
+ {
+ name: 'Yes',
+ value: true
+ },
+ {
+ name: 'Build Both',
+ value: 'both'
+ }
+ ]
+ },
+ {
+ type: 'input',
+ name: 'dist',
+ message: 'Where should we output Semantic UI?',
+ default: defaults.paths.output.packaged,
+ filter: filter.removeTrailingSlash,
+ when: when.express
+ },
+ {
+ type: 'input',
+ name: 'site',
+ message: 'Where should we put your site folder?',
+ default: defaults.paths.source.site,
+ filter: filter.removeTrailingSlash,
+ when: when.custom
+ },
+ {
+ type: 'input',
+ name: 'packaged',
+ message: 'Where should we output a packaged version?',
+ default: defaults.paths.output.packaged,
+ filter: filter.removeTrailingSlash,
+ when: when.custom
+ },
+ {
+ type: 'input',
+ name: 'compressed',
+ message: 'Where should we output compressed components?',
+ default: defaults.paths.output.compressed,
+ filter: filter.removeTrailingSlash,
+ when: when.custom
+ },
+ {
+ type: 'input',
+ name: 'uncompressed',
+ message: 'Where should we output uncompressed components?',
+ default: defaults.paths.output.uncompressed,
+ filter: filter.removeTrailingSlash,
+ when: when.custom
+ }
+ ],
+
+
+ cleanup: [
+ {
+ type: 'list',
+ name: 'cleanup',
+ message: 'Should we remove set-up files?',
+ choices: [
+ {
+ name: 'Yes (re-install will require redownloading semantic).',
+ value: 'yes'
+ },
+ {
+ name: 'No Thanks',
+ value: 'no'
+ }
+ ]
+ },
+ {
+ type: 'list',
+ name: 'build',
+ message: 'Do you want to build Semantic now?',
+ choices: [
+ {
+ name: 'Yes',
+ value: 'yes'
+ },
+ {
+ name: 'No',
+ value: 'no'
+ }
+ ]
+ },
+ ],
+ site: [
+ {
+ type: 'list',
+ name: 'customize',
+ message: 'You have not yet customized your site, can we help you do that?',
+ choices: [
+ {
+ name: 'Yes, ask me a few questions',
+ value: true
+ },
+ {
+ name: 'No I\'ll do it myself',
+ value: false
+ }
+ ]
+ },
+ {
+ type: 'list',
+ name: 'headerFont',
+ message: 'Select your header font',
+ choices: [
+ {
+ name: 'Helvetica Neue, Arial, sans-serif',
+ value: 'Helvetica Neue, Arial, sans-serif;'
+ },
+ {
+ name: 'Lato (Google Fonts)',
+ value: 'Lato'
+ },
+ {
+ name: 'Open Sans (Google Fonts)',
+ value: 'Open Sans'
+ },
+ {
+ name: 'Source Sans Pro (Google Fonts)',
+ value: 'Source Sans Pro'
+ },
+ {
+ name: 'Droid (Google Fonts)',
+ value: 'Droid'
+ },
+ {
+ name: 'I\'ll choose on my own',
+ value: false
+ }
+ ],
+ when: when.customize
+ },
+ {
+ type: 'list',
+ name: 'pageFont',
+ message: 'Select your page font',
+ choices: [
+ {
+ name: 'Helvetica Neue, Arial, sans-serif',
+ value: 'Helvetica Neue, Arial, sans-serif;'
+ },
+ {
+ name: 'Lato (Import from Google Fonts)',
+ value: 'Lato'
+ },
+ {
+ name: 'Open Sans (Import from Google Fonts)',
+ value: 'Open Sans'
+ },
+ {
+ name: 'Source Sans Pro (Import from Google Fonts)',
+ value: 'Source Sans Pro'
+ },
+ {
+ name: 'Droid (Google Fonts)',
+ value: 'Droid'
+ },
+ {
+ name: 'I\'ll choose on my own',
+ value: false
+ }
+ ],
+ when: when.customize
+ },
+ {
+ type: 'list',
+ name: 'fontSize',
+ message: 'Select your base font size',
+ default: '14px',
+ choices: [
+ {
+ name: '12px',
+ },
+ {
+ name: '13px',
+ },
+ {
+ name: '14px (Recommended)',
+ value: '14px'
+ },
+ {
+ name: '15px',
+ },
+ {
+ name: '16px',
+ },
+ {
+ name: 'I\'ll choose on my own',
+ value: false
+ }
+ ],
+ when: when.customize
+ },
+ {
+ type: 'list',
+ name: 'primaryColor',
+ message: 'Select the closest name for your primary brand color',
+ default: '14px',
+ choices: [
+ {
+ name: 'Blue'
+ },
+ {
+ name: 'Green'
+ },
+ {
+ name: 'Orange'
+ },
+ {
+ name: 'Pink'
+ },
+ {
+ name: 'Purple'
+ },
+ {
+ name: 'Red'
+ },
+ {
+ name: 'Teal'
+ },
+ {
+ name: 'Yellow'
+ },
+ {
+ name: 'Black'
+ },
+ {
+ name: 'I\'ll choose on my own',
+ value: false
+ }
+ ],
+ when: when.customize
+ },
+ {
+ type: 'input',
+ name: 'PrimaryHex',
+ message: 'Enter a hexcode for your primary brand color',
+ when: when.primaryColor
+ },
+ {
+ type: 'list',
+ name: 'secondaryColor',
+ message: 'Select the closest name for your secondary brand color',
+ default: '14px',
+ choices: [
+ {
+ name: 'Blue'
+ },
+ {
+ name: 'Green'
+ },
+ {
+ name: 'Orange'
+ },
+ {
+ name: 'Pink'
+ },
+ {
+ name: 'Purple'
+ },
+ {
+ name: 'Red'
+ },
+ {
+ name: 'Teal'
+ },
+ {
+ name: 'Yellow'
+ },
+ {
+ name: 'Black'
+ },
+ {
+ name: 'I\'ll choose on my own',
+ value: false
+ }
+ ],
+ when: when.customize
+ },
+ {
+ type: 'input',
+ name: 'secondaryHex',
+ message: 'Enter a hexcode for your secondary brand color',
+ when: when.secondaryColor
+ }
+ ]
+
+ },
+
+ settings: {
+
+ /* Rename Files */
+ rename: {
+ json : { extname : '.json' }
+ },
+
+ /* Copy Install Folders */
+ wrench: {
+
+ // overwrite existing files update & install (default theme / definition)
+ overwrite: {
+ forceDelete : true,
+ excludeHiddenUnix : true,
+ preserveFiles : false
+ },
+
+ // only create files that don't exist (site theme update)
+ merge: {
+ forceDelete : false,
+ excludeHiddenUnix : true,
+ preserveFiles : true
+ }
+
+ }
+ }
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/project/release.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/project/release.js b/semantic/tasks/config/project/release.js
new file mode 100644
index 0000000..865811d
--- /dev/null
+++ b/semantic/tasks/config/project/release.js
@@ -0,0 +1,65 @@
+/*******************************
+ Release Config
+*******************************/
+
+var
+ requireDotFile = require('require-dot-file'),
+ config,
+ npmPackage,
+ version
+;
+
+
+/*******************************
+ Derived Values
+*******************************/
+
+try {
+ config = requireDotFile('semantic.json');
+}
+catch(error) {}
+
+
+try {
+ npmPackage = require('../../../package.json');
+}
+catch(error) {
+ // generate fake package
+ npmPackage = {
+ name: 'Unknown',
+ version: 'x.x'
+ };
+}
+
+// looks for version in config or package.json (whichever is available)
+version = (npmPackage && npmPackage.version !== undefined && npmPackage.name == 'semantic-ui')
+ ? npmPackage.version
+ : config.version
+;
+
+
+/*******************************
+ Export
+*******************************/
+
+module.exports = {
+
+ title : 'Semantic UI',
+ repository : 'https://github.com/Semantic-Org/Semantic-UI',
+ url : 'http://www.semantic-ui.com/',
+
+ banner: ''
+ + ' /*' + '\n'
+ + ' * # <%= title %> - <%= version %>' + '\n'
+ + ' * <%= repository %>' + '\n'
+ + ' * <%= url %>' + '\n'
+ + ' *' + '\n'
+ + ' * Copyright 2014 Contributors' + '\n'
+ + ' * Released under the MIT license' + '\n'
+ + ' * http://opensource.org/licenses/MIT' + '\n'
+ + ' *' + '\n'
+ + ' */' + '\n',
+
+ version : version
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/tasks.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/tasks.js b/semantic/tasks/config/tasks.js
new file mode 100644
index 0000000..517fdc2
--- /dev/null
+++ b/semantic/tasks/config/tasks.js
@@ -0,0 +1,164 @@
+var
+ console = require('better-console'),
+ config = require('./user'),
+ release = require('./project/release')
+;
+
+
+module.exports = {
+
+ banner : release.banner,
+
+ log: {
+ created: function(file) {
+ return 'Created: ' + file;
+ },
+ modified: function(file) {
+ return 'Modified: ' + file;
+ }
+ },
+
+ filenames: {
+ concatenatedCSS : 'semantic.css',
+ concatenatedJS : 'semantic.js',
+ concatenatedMinifiedCSS : 'semantic.min.css',
+ concatenatedMinifiedJS : 'semantic.min.js',
+ concatenatedRTLCSS : 'semantic.rtl.css',
+ concatenatedMinifiedRTLCSS : 'semantic.rtl.min.css'
+ },
+
+ regExp: {
+
+ comments: {
+
+ // remove all comments from config files (.variable)
+ variables : {
+ in : /(\/\*[\s\S]+?\*\/+)[\s\S]+?\/\* End Config \*\//,
+ out : '$1',
+ },
+
+ // add version to first comment
+ license: {
+ in : /(^\/\*[\s\S]+)(# Semantic UI )([\s\S]+?\*\/)/,
+ out : '$1$2' + release.version + ' $3'
+ },
+
+ // adds uniform spacing around comments
+ large: {
+ in : /(\/\*\*\*\*[\s\S]+?\*\/)/mg,
+ out : '\n\n$1\n'
+ },
+ small: {
+ in : /(\/\*---[\s\S]+?\*\/)/mg,
+ out : '\n$1\n'
+ },
+ tiny: {
+ in : /(\/\* [\s\S]+? \*\/)/mg,
+ out : '\n$1'
+ }
+ },
+
+ theme: /.*(\/|\\)themes(\/|\\).*?(?=(\/|\\))/mg
+
+ },
+
+ settings: {
+
+ /* Remove Files in Clean */
+ del: {
+ silent : true
+ },
+
+ concatCSS: {
+ rebaseUrls: false
+ },
+
+ /* Comment Banners */
+ header: {
+ title : release.title,
+ version : release.version,
+ repository : release.repository,
+ url : release.url
+ },
+
+ plumber: {
+ less: {
+ errorHandler: function(error) {
+ var
+ regExp = {
+ variable : /@(\S.*?)\s/,
+ theme : /themes[\/\\]+(.*?)[\/\\].*/,
+ element : /[\/\\]([^\/\\*]*)\.overrides/
+ },
+ theme,
+ element
+ ;
+ if(error.filename.match(/theme.less/)) {
+ if(error.line == 5) {
+ element = regExp.variable.exec(error.message)[1];
+ if(element) {
+ console.error('Missing theme.config value for ', element);
+ }
+ console.error('Most likely new UI was added in an update. You will need to add missing elements from theme.config.example');
+ }
+ if(error.line == 46) {
+ element = regExp.element.exec(error.message)[1];
+ theme = regExp.theme.exec(error.message)[1];
+ console.error(theme + ' is not an available theme for ' + element);
+ }
+ }
+ else {
+ console.log(error);
+ }
+ this.emit('end');
+ }
+ }
+ },
+
+ /* What Browsers to Prefix */
+ prefix: {
+ browsers: [
+ 'last 2 versions',
+ '> 1%',
+ 'opera 12.1',
+ 'bb 10',
+ 'android 4'
+ ]
+ },
+
+ /* File Renames */
+ rename: {
+ minJS : { extname : '.min.js' },
+ minCSS : { extname : '.min.css' },
+ rtlCSS : { extname : '.rtl.css' },
+ rtlMinCSS : { extname : '.rtl.min.css' }
+ },
+
+ /* Minified CSS Concat */
+ minify: {
+ processImport : false,
+ restructuring : false,
+ keepSpecialComments : 1
+ },
+
+ /* Minified JS Settings */
+ uglify: {
+ mangle : true,
+ preserveComments : 'some'
+ },
+
+ /* Minified Concat CSS Settings */
+ concatMinify: {
+ processImport : false,
+ restructuring : false,
+ keepSpecialComments : false
+ },
+
+ /* Minified Concat JS */
+ concatUglify: {
+ mangle : true,
+ preserveComments : false
+ }
+
+ }
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/user.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/user.js b/semantic/tasks/config/user.js
new file mode 100644
index 0000000..7b7c16d
--- /dev/null
+++ b/semantic/tasks/config/user.js
@@ -0,0 +1,58 @@
+/*******************************
+ Set-up
+*******************************/
+
+var
+ // npm dependencies
+ extend = require('extend'),
+ fs = require('fs'),
+ path = require('path'),
+ requireDotFile = require('require-dot-file'),
+
+ // semantic.json defaults
+ defaults = require('./defaults'),
+ config = require('./project/config'),
+
+ // Final config object
+ gulpConfig = {},
+
+ // semantic.json settings
+ userConfig
+
+;
+
+
+/*******************************
+ User Config
+*******************************/
+
+try {
+ // looks for config file across all parent directories
+ userConfig = requireDotFile('semantic.json');
+}
+catch(error) {
+ if(error.code === 'MODULE_NOT_FOUND') {
+ console.error('No semantic.json config found');
+ }
+}
+
+// extend user config with defaults
+gulpConfig = (!userConfig)
+ ? extend(true, {}, defaults)
+ : extend(false, {}, defaults, userConfig)
+;
+
+/*******************************
+ Add Derived Values
+*******************************/
+
+// adds calculated values
+config.addDerivedValues(gulpConfig);
+
+
+/*******************************
+ Export
+*******************************/
+
+module.exports = gulpConfig;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/docs/build.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/docs/build.js b/semantic/tasks/docs/build.js
new file mode 100644
index 0000000..c937576
--- /dev/null
+++ b/semantic/tasks/docs/build.js
@@ -0,0 +1,189 @@
+/*******************************
+ Build Docs
+*******************************/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ fs = require('fs'),
+ map = require('map-stream'),
+
+ // gulp dependencies
+ autoprefixer = require('gulp-autoprefixer'),
+ chmod = require('gulp-chmod'),
+ clone = require('gulp-clone'),
+ flatten = require('gulp-flatten'),
+ gulpif = require('gulp-if'),
+ header = require('gulp-header'),
+ less = require('gulp-less'),
+ minifyCSS = require('gulp-minify-css'),
+ plumber = require('gulp-plumber'),
+ print = require('gulp-print'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ uglify = require('gulp-uglify'),
+
+ // user config
+ config = require('../config/docs'),
+
+ // install config
+ tasks = require('../config/tasks'),
+ configSetup = require('../config/project/config'),
+ install = require('../config/project/install'),
+
+ // metadata parsing
+ metadata = require('./metadata'),
+
+ // shorthand
+ globs,
+ assets,
+ output,
+ source,
+
+ banner = tasks.banner,
+ comments = tasks.regExp.comments,
+ log = tasks.log,
+ settings = tasks.settings
+;
+
+// add internal tasks (concat release)
+require('../collections/internal')(gulp);
+
+module.exports = function(callback) {
+
+ var
+ stream,
+ compressedStream,
+ uncompressedStream
+ ;
+
+ // use a different config
+ config = configSetup.addDerivedValues(config);
+
+ // shorthand
+ globs = config.globs;
+ assets = config.paths.assets;
+ output = config.paths.output;
+ source = config.paths.source;
+
+ /*--------------
+ Parse metadata
+ ---------------*/
+
+ // parse all *.html.eco in docs repo, data will end up in
+ // metadata.result object. Note this assumes that the docs
+ // repository is present and in proper directory location as
+ // specified by docs.json.
+ console.info('Building Metadata');
+ gulp.src(config.paths.template.eco + globs.eco)
+ .pipe(map(metadata.parser))
+ .on('end', function() {
+ fs.writeFile(output.metadata + '/metadata.json', JSON.stringify(metadata.result, null, 2));
+ })
+ ;
+
+ /*--------------
+ Copy Examples
+ ---------------*/
+
+ console.info('Copying examples');
+ // copy src/ to server
+ gulp.src('examples/**/*.*')
+ .pipe(gulp.dest(output.examples))
+ .pipe(print(log.created))
+ ;
+
+ /*--------------
+ Copy Source
+ ---------------*/
+
+ console.info('Copying LESS source');
+ // copy src/ to server
+ gulp.src('src/**/*.*')
+ .pipe(gulp.dest(output.less))
+ .pipe(print(log.created))
+ ;
+
+ /*--------------
+ Build
+ ---------------*/
+
+ console.info('Building Semantic for docs');
+
+ if( !install.isSetup() ) {
+ console.error('Cannot build files. Run "gulp install" to set-up Semantic');
+ return;
+ }
+
+ // unified css stream
+ stream = gulp.src(source.definitions + '/**/' + globs.components + '.less')
+ .pipe(plumber())
+ .pipe(less(settings.less))
+ .pipe(autoprefixer(settings.prefix))
+ .pipe(flatten())
+ ;
+
+ // two concurrent streams from same source to concat release
+ uncompressedStream = stream.pipe(clone());
+ compressedStream = stream.pipe(clone());
+
+ uncompressedStream
+ .pipe(plumber())
+ .pipe(replace(comments.variables.in, comments.variables.out))
+ .pipe(replace(comments.large.in, comments.large.out))
+ .pipe(replace(comments.small.in, comments.small.out))
+ .pipe(replace(comments.tiny.in, comments.tiny.out))
+ .pipe(replace(assets.source, assets.uncompressed))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package uncompressed docs css');
+ })
+ ;
+
+ compressedStream = stream
+ .pipe(plumber())
+ .pipe(clone())
+ .pipe(replace(assets.source, assets.compressed))
+ .pipe(minifyCSS(settings.minify))
+ .pipe(rename(settings.rename.minCSS))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ callback();
+ gulp.start('package compressed docs css');
+ })
+ ;
+
+ // copy assets
+ gulp.src(source.themes + '/**/assets/**/' + globs.components + '?(s).*')
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.themes))
+ ;
+
+ // copy source javascript
+ gulp.src(source.definitions + '/**/' + globs.components + '.js')
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(print(log.created))
+ .pipe(uglify(settings.uglify))
+ .pipe(rename(settings.rename.minJS))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed docs js');
+ gulp.start('package uncompressed docs js');
+ })
+ ;
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/docs/metadata.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/docs/metadata.js b/semantic/tasks/docs/metadata.js
new file mode 100644
index 0000000..bfc8630
--- /dev/null
+++ b/semantic/tasks/docs/metadata.js
@@ -0,0 +1,138 @@
+
+/*******************************
+ Summarize Docs
+*******************************/
+
+var
+ // node dependencies
+ console = require('better-console'),
+ fs = require('fs'),
+ YAML = require('yamljs')
+;
+
+var data = {};
+
+/**
+ * Test for prefix in string.
+ * @param {string} str
+ * @param {string} prefix
+ * @return {boolean}
+ */
+function startsWith(str, prefix) {
+ return str.indexOf(prefix) === 0;
+};
+
+function inArray(needle, haystack) {
+ var length = haystack.length;
+ for(var i = 0; i < length; i++) {
+ if(haystack[i] == needle) return true;
+ }
+ return false;
+}
+
+/**
+ * Parses a file for metadata and stores result in data object.
+ * @param {File} file - object provided by map-stream.
+ * @param {function(?,File)} - callback provided by map-stream to
+ * reply when done.
+ */
+function parser(file, callback) {
+ // file exit conditions
+ if(file.isNull()) {
+ return callback(null, file); // pass along
+ }
+
+ if(file.isStream()) {
+ return callback(new Error('Streaming not supported'));
+ }
+
+ try {
+
+ var
+ /** @type {string} */
+ text = String(file.contents.toString('utf8')),
+ lines = text.split('\n'),
+ filename = file.path.substring(0, file.path.length - 4),
+ key = 'server/documents',
+ position = filename.indexOf(key)
+ ;
+
+ // exit conditions
+ if(!lines) {
+ return;
+ }
+ if(position < 0) {
+ return callback(null, file);
+ }
+
+ filename = filename.substring(position + key.length + 1, filename.length);
+
+ var
+ lineCount = lines.length,
+ active = false,
+ yaml = [],
+ categories = [
+ 'UI Element',
+ 'UI Global',
+ 'UI Collection',
+ 'UI View',
+ 'UI Module',
+ 'UI Behavior'
+ ],
+ index,
+ meta,
+ line
+ ;
+
+ for(index = 0; index < lineCount; index++) {
+
+ line = lines[index];
+
+ // Wait for metadata block to begin
+ if(!active) {
+ if(startsWith(line, '---')) {
+ active = true;
+ }
+ continue;
+ }
+ // End of metadata block, stop parsing.
+ if(startsWith(line, '---')) {
+ break;
+ }
+ yaml.push(line);
+ }
+
+
+ // Parse yaml.
+ meta = YAML.parse(yaml.join('\n'));
+ if(meta && meta.type && meta.title && inArray(meta.type, categories) ) {
+ meta.category = meta.type;
+ meta.filename = filename;
+ meta.url = '/' + filename;
+ meta.title = meta.title;
+ // Primary key will by filepath
+ data[meta.element] = meta;
+ }
+ else {
+ // skip
+ // console.log(meta);
+ }
+
+
+ }
+
+ catch(error) {
+ console.log(error, filename);
+ }
+
+ callback(null, file);
+
+}
+
+/**
+ * Export function expected by map-stream.
+ */
+module.exports = {
+ result : data,
+ parser : parser
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/docs/serve.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/docs/serve.js b/semantic/tasks/docs/serve.js
new file mode 100644
index 0000000..5393670
--- /dev/null
+++ b/semantic/tasks/docs/serve.js
@@ -0,0 +1,255 @@
+/*******************************
+ Serve Docs
+*******************************/
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ fs = require('fs'),
+
+ // gulp dependencies
+ autoprefixer = require('gulp-autoprefixer'),
+ chmod = require('gulp-chmod'),
+ clone = require('gulp-clone'),
+ gulpif = require('gulp-if'),
+ header = require('gulp-header'),
+ less = require('gulp-less'),
+ minifyCSS = require('gulp-minify-css'),
+ plumber = require('gulp-plumber'),
+ print = require('gulp-print'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ uglify = require('gulp-uglify'),
+ util = require('gulp-util'),
+ watch = require('gulp-watch'),
+
+ // user config
+ config = require('../config/docs'),
+
+ // task config
+ tasks = require('../config/tasks'),
+ configSetup = require('../config/project/config'),
+ install = require('../config/project/install'),
+
+ // shorthand
+ banner = tasks.banner,
+ comments = tasks.regExp.comments,
+ log = tasks.log,
+ settings = tasks.settings,
+
+ globs,
+ assets,
+ output,
+ source
+;
+
+require('../collections/internal')(gulp);
+
+module.exports = function () {
+
+ // use a different config
+ config = configSetup.addDerivedValues(config);
+
+ // shorthand
+ globs = config.globs;
+ assets = config.paths.assets;
+ output = config.paths.output;
+ source = config.paths.source;
+
+
+ /*--------------
+ Copy Source
+ ---------------*/
+
+ gulp
+ .watch([
+ 'src/**/*.*'
+ ], function(file) {
+ console.clear();
+ return gulp.src(file.path, {
+ base: 'src/'
+ })
+ .pipe(gulp.dest(output.less))
+ .pipe(print(log.created))
+ ;
+ })
+ ;
+
+ /*--------------
+ Copy Examples
+ ---------------*/
+
+ gulp
+ .watch([
+ 'examples/**/*.*'
+ ], function(file) {
+ console.clear();
+ return gulp.src(file.path, {
+ base: 'examples/'
+ })
+ .pipe(gulp.dest(output.examples))
+ .pipe(print(log.created))
+ ;
+ })
+ ;
+
+ /*--------------
+ Watch CSS
+ ---------------*/
+
+ gulp
+ .watch([
+ source.config,
+ source.definitions + '/**/*.less',
+ source.site + '/**/*.{overrides,variables}',
+ source.themes + '/**/*.{overrides,variables}'
+ ], function(file) {
+
+ var
+ lessPath,
+
+ stream,
+ compressedStream,
+ uncompressedStream,
+
+ isDefinition,
+ isPackagedTheme,
+ isSiteTheme,
+ isConfig
+ ;
+
+ // log modified file
+ gulp.src(file.path)
+ .pipe(print(log.modified))
+ ;
+
+ /*--------------
+ Find Source
+ ---------------*/
+
+ // recompile on *.override , *.variable change
+ isConfig = (file.path.indexOf('theme.config') !== -1 || file.path.indexOf('site.variables') !== -1);
+ isPackagedTheme = (file.path.indexOf(source.themes) !== -1);
+ isSiteTheme = (file.path.indexOf(source.site) !== -1);
+ isDefinition = (file.path.indexOf(source.definitions) !== -1);
+
+ if(isConfig) {
+ // console.info('Rebuilding all files');
+ // cant rebuild paths are wrong
+ // gulp.start('build-docs');
+ return;
+ }
+ else if(isPackagedTheme) {
+ console.log('Change detected in packaged theme');
+ lessPath = util.replaceExtension(file.path, '.less');
+ lessPath = lessPath.replace(tasks.regExp.theme, source.definitions);
+ }
+ else if(isSiteTheme) {
+ console.log('Change detected in site theme');
+ lessPath = util.replaceExtension(file.path, '.less');
+ lessPath = lessPath.replace(source.site, source.definitions);
+ }
+ else {
+ console.log('Change detected in definition');
+ lessPath = file.path;
+ }
+
+ /*--------------
+ Create CSS
+ ---------------*/
+
+ if( fs.existsSync(lessPath) ) {
+
+ // unified css stream
+ stream = gulp.src(lessPath)
+ .pipe(plumber())
+ .pipe(less(settings.less))
+ .pipe(replace(comments.variables.in, comments.variables.out))
+ .pipe(replace(comments.large.in, comments.large.out))
+ .pipe(replace(comments.small.in, comments.small.out))
+ .pipe(replace(comments.tiny.in, comments.tiny.out))
+ .pipe(autoprefixer(settings.prefix))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ ;
+
+ // use 2 concurrent streams from same pipe
+ uncompressedStream = stream.pipe(clone());
+ compressedStream = stream.pipe(clone());
+
+ uncompressedStream
+ .pipe(plumber())
+ .pipe(replace(assets.source, assets.uncompressed))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package uncompressed docs css');
+ })
+ ;
+
+ compressedStream = stream
+ .pipe(plumber())
+ .pipe(replace(assets.source, assets.compressed))
+ .pipe(minifyCSS(settings.minify))
+ .pipe(rename(settings.rename.minCSS))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed docs css');
+ })
+ ;
+
+ }
+ else {
+ console.log('Cannot find UI definition at path', lessPath);
+ }
+ })
+ ;
+
+ /*--------------
+ Watch JS
+ ---------------*/
+
+ gulp
+ .watch([
+ source.definitions + '/**/*.js'
+ ], function(file) {
+ gulp.src(file.path)
+ .pipe(plumber())
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .pipe(uglify(settings.uglify))
+ .pipe(rename(settings.rename.minJS))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed docs js');
+ gulp.start('package uncompressed docs js');
+ })
+ ;
+ })
+ ;
+
+ /*--------------
+ Watch Assets
+ ---------------*/
+
+ // only copy assets that match component names (or their plural)
+ gulp
+ .watch([
+ source.themes + '/**/assets/**/' + globs.components + '?(s).*'
+ ], function(file) {
+ // copy assets
+ gulp.src(file.path, { base: source.themes })
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.themes))
+ .pipe(print(log.created))
+ ;
+ })
+ ;
+
+
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/install.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/install.js b/semantic/tasks/install.js
new file mode 100644
index 0000000..f1d822b
--- /dev/null
+++ b/semantic/tasks/install.js
@@ -0,0 +1,457 @@
+/*******************************
+ Install Task
+*******************************/
+
+/*
+ Install tasks
+
+ For more notes
+
+ * Runs automatically after npm update (hooks)
+ * (NPM) Install - Will ask for where to put semantic (outside pm folder)
+ * (NPM) Upgrade - Will look for semantic install, copy over files and update if new version
+ * Standard installer runs asking for paths to site files etc
+
+*/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ extend = require('extend'),
+ fs = require('fs'),
+ mkdirp = require('mkdirp'),
+ path = require('path'),
+ runSequence = require('run-sequence'),
+
+ // gulp dependencies
+ chmod = require('gulp-chmod'),
+ del = require('del'),
+ jsonEditor = require('gulp-json-editor'),
+ plumber = require('gulp-plumber'),
+ prompt = require('gulp-prompt'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ requireDotFile = require('require-dot-file'),
+ wrench = require('wrench'),
+
+ // install config
+ install = require('./config/project/install'),
+
+ // user config
+ config = require('./config/user'),
+
+ // release config (name/title/etc)
+ release = require('./config/project/release'),
+
+ // shorthand
+ questions = install.questions,
+ files = install.files,
+ folders = install.folders,
+ regExp = install.regExp,
+ settings = install.settings,
+ source = install.source
+;
+
+// Export install task
+module.exports = function (callback) {
+
+var
+ currentConfig = requireDotFile('semantic.json'),
+ manager = install.getPackageManager(),
+ rootQuestions = questions.root,
+ installFolder = false,
+ answers
+;
+
+console.clear();
+
+/* Test NPM install
+manager = {
+ name : 'NPM',
+ root : path.normalize(__dirname + '/../')
+};
+*/
+
+
+/* Don't do end user config if SUI is a sub-module */
+if( install.isSubModule() ) {
+ console.info('SUI is a sub-module, skipping end-user install');
+ return;
+}
+
+/*-----------------
+ Update SUI
+-----------------*/
+
+// run update scripts if semantic.json exists
+if(currentConfig && manager.name === 'NPM') {
+
+ var
+ updateFolder = path.join(manager.root, currentConfig.base),
+ updatePaths = {
+ config : path.join(manager.root, files.config),
+ tasks : path.join(updateFolder, folders.tasks),
+ themeImport : path.join(updateFolder, folders.themeImport),
+ definition : path.join(currentConfig.paths.source.definitions),
+ site : path.join(currentConfig.paths.source.site),
+ theme : path.join(currentConfig.paths.source.themes),
+ defaultTheme : path.join(currentConfig.paths.source.themes, folders.defaultTheme)
+ }
+ ;
+
+ // duck-type if there is a project installed
+ if( fs.existsSync(updatePaths.definition) ) {
+
+ // perform update if new version
+ if(currentConfig.version !== release.version) {
+ console.log('Updating Semantic UI from ' + currentConfig.version + ' to ' + release.version);
+
+ console.info('Updating ui definitions...');
+ wrench.copyDirSyncRecursive(source.definitions, updatePaths.definition, settings.wrench.overwrite);
+
+ console.info('Updating default theme...');
+ wrench.copyDirSyncRecursive(source.themes, updatePaths.theme, settings.wrench.merge);
+ wrench.copyDirSyncRecursive(source.defaultTheme, updatePaths.defaultTheme, settings.wrench.overwrite);
+
+ console.info('Updating tasks...');
+ wrench.copyDirSyncRecursive(source.tasks, updatePaths.tasks, settings.wrench.overwrite);
+
+ console.info('Updating gulpfile.js');
+ gulp.src(source.userGulpFile)
+ .pipe(plumber())
+ .pipe(gulp.dest(updateFolder))
+ ;
+
+ // copy theme import
+ console.info('Updating theme import file');
+ gulp.src(source.themeImport)
+ .pipe(plumber())
+ .pipe(gulp.dest(updatePaths.themeImport))
+ ;
+
+ console.info('Adding new site theme files...');
+ wrench.copyDirSyncRecursive(source.site, updatePaths.site, settings.wrench.merge);
+
+ console.info('Updating version...');
+
+ // update version number in semantic.json
+ gulp.src(updatePaths.config)
+ .pipe(plumber())
+ .pipe(rename(settings.rename.json)) // preserve file extension
+ .pipe(jsonEditor({
+ version: release.version
+ }))
+ .pipe(gulp.dest(manager.root))
+ ;
+
+ console.info('Update complete! Run "\x1b[92mgulp build\x1b[0m" to rebuild dist/ files.');
+
+ return;
+ }
+ else {
+ console.log('Current version of Semantic UI already installed');
+ return;
+ }
+
+ }
+ else {
+ console.error('Cannot locate files to update at path: ', updatePaths.definition);
+ console.log('Running installer');
+ }
+
+}
+
+/*--------------
+ Determine Root
+---------------*/
+
+// PM that supports Build Tools (NPM Only Now)
+if(manager.name == 'NPM') {
+ rootQuestions[0].message = rootQuestions[0].message
+ .replace('{packageMessage}', 'We detected you are using \x1b[92m' + manager.name + '\x1b[0m. Nice! ')
+ .replace('{root}', manager.root)
+ ;
+ // set default path to detected PM root
+ rootQuestions[0].default = manager.root;
+ rootQuestions[1].default = manager.root;
+
+ // insert PM questions after "Install Type" question
+ Array.prototype.splice.apply(questions.setup, [2, 0].concat(rootQuestions));
+
+ // omit cleanup questions for managed install
+ questions.cleanup = [];
+}
+
+
+/*--------------
+ Create SUI
+---------------*/
+
+gulp.task('run setup', function() {
+
+ // If auto-install is switched on, we skip the configuration section and simply reuse the configuration from semantic.json
+ if(install.shouldAutoInstall()) {
+ answers = {
+ overwrite : 'yes',
+ install : 'auto',
+ };
+ }
+ else {
+ return gulp
+ .src('gulpfile.js')
+ .pipe(prompt.prompt(questions.setup, function(setupAnswers) {
+ // hoist
+ answers = setupAnswers;
+ }))
+ ;
+ }
+});
+
+gulp.task('create install files', function(callback) {
+
+ /*--------------
+ Exit Conditions
+ ---------------*/
+
+ // if config exists and user specifies not to proceed
+ if(answers.overwrite !== undefined && answers.overwrite == 'no') {
+ return;
+ }
+ console.clear();
+ if(install.shouldAutoInstall()) {
+ console.log('Auto-Installing (Without User Interaction)');
+ }
+ else {
+ console.log('Installing');
+ }
+ console.log('------------------------------');
+
+
+ /*--------------
+ Paths
+ ---------------*/
+
+ var
+ installPaths = {
+ config : files.config,
+ configFolder : folders.config,
+ site : answers.site || folders.site,
+ themeConfig : files.themeConfig,
+ themeConfigFolder : folders.themeConfig
+ }
+ ;
+
+ /*--------------
+ NPM Install
+ ---------------*/
+
+ // Check if PM install
+ if(answers.useRoot || answers.customRoot) {
+
+ // Set root to custom root path if set
+ if(answers.customRoot) {
+ if(answers.customRoot === '') {
+ console.log('Unable to proceed, invalid project root');
+ return;
+ }
+ manager.root = answers.customRoot;
+ }
+
+ // special install paths only for PM install
+ installPaths = extend(false, {}, installPaths, {
+ definition : folders.definitions,
+ lessImport : folders.lessImport,
+ tasks : folders.tasks,
+ theme : folders.themes,
+ defaultTheme : path.join(folders.themes, folders.defaultTheme),
+ themeImport : folders.themeImport
+ });
+
+ // add project root to semantic root
+ installFolder = path.join(manager.root, answers.semanticRoot);
+
+ // add install folder to all output paths
+ for(var destination in installPaths) {
+ if( installPaths.hasOwnProperty(destination) ) {
+ // config goes in project root, rest in install folder
+ installPaths[destination] = (destination == 'config' || destination == 'configFolder')
+ ? path.normalize( path.join(manager.root, installPaths[destination]) )
+ : path.normalize( path.join(installFolder, installPaths[destination]) )
+ ;
+ }
+ }
+
+ // create project folders
+ try {
+ mkdirp.sync(installFolder);
+ mkdirp.sync(installPaths.definition);
+ mkdirp.sync(installPaths.theme);
+ mkdirp.sync(installPaths.tasks);
+ }
+ catch(error) {
+ console.error('NPM does not have permissions to create folders at your specified path. Adjust your folders permissions and run "npm install" again');
+ }
+
+ console.log('Installing to \x1b[92m' + answers.semanticRoot + '\x1b[0m');
+
+ console.info('Copying UI definitions');
+ wrench.copyDirSyncRecursive(source.definitions, installPaths.definition, settings.wrench.overwrite);
+
+ console.info('Copying UI themes');
+ wrench.copyDirSyncRecursive(source.themes, installPaths.theme, settings.wrench.merge);
+ wrench.copyDirSyncRecursive(source.defaultTheme, installPaths.defaultTheme, settings.wrench.overwrite);
+
+ console.info('Copying gulp tasks');
+ wrench.copyDirSyncRecursive(source.tasks, installPaths.tasks, settings.wrench.overwrite);
+
+ // copy theme import
+ console.info('Adding theme files');
+ gulp.src(source.themeImport)
+ .pipe(plumber())
+ .pipe(gulp.dest(installPaths.themeImport))
+ ;
+ gulp.src(source.lessImport)
+ .pipe(plumber())
+ .pipe(gulp.dest(installPaths.lessImport))
+ ;
+
+ // create gulp file
+ console.info('Creating gulpfile.js');
+ gulp.src(source.userGulpFile)
+ .pipe(plumber())
+ .pipe(gulp.dest(installFolder))
+ ;
+
+ }
+
+
+ /*--------------
+ Site Theme
+ ---------------*/
+
+ // Copy _site templates folder to destination
+ if( fs.existsSync(installPaths.site) ) {
+ console.info('Site folder exists, merging files (no overwrite)', installPaths.site);
+ }
+ else {
+ console.info('Creating site theme folder', installPaths.site);
+ }
+ wrench.copyDirSyncRecursive(source.site, installPaths.site, settings.wrench.merge);
+
+ /*--------------
+ Theme Config
+ ---------------*/
+
+ gulp.task('create theme.config', function() {
+ var
+ // determine path to site theme folder from theme config
+ // force CSS path variable to use forward slashes for paths
+ pathToSite = path.relative(path.resolve(installPaths.themeConfigFolder), path.resolve(installPaths.site)).replace(/\\/g,'/'),
+ siteVariable = "@siteFolder : '" + pathToSite + "/';"
+ ;
+
+ // rewrite site variable in theme.less
+ console.info('Adjusting @siteFolder to: ', pathToSite + '/');
+
+ if(fs.existsSync(installPaths.themeConfig)) {
+ console.info('Modifying src/theme.config (LESS config)', installPaths.themeConfig);
+ return gulp.src(installPaths.themeConfig)
+ .pipe(plumber())
+ .pipe(replace(regExp.siteVariable, siteVariable))
+ .pipe(gulp.dest(installPaths.themeConfigFolder))
+ ;
+ }
+ else {
+ console.info('Creating src/theme.config (LESS config)', installPaths.themeConfig);
+ return gulp.src(source.themeConfig)
+ .pipe(plumber())
+ .pipe(rename({ extname : '' }))
+ .pipe(replace(regExp.siteVariable, siteVariable))
+ .pipe(gulp.dest(installPaths.themeConfigFolder))
+ ;
+ }
+ });
+
+ /*--------------
+ Semantic.json
+ ---------------*/
+
+ gulp.task('create semantic.json', function() {
+
+ var
+ jsonConfig = install.createJSON(answers)
+ ;
+
+ // adjust variables in theme.less
+ if( fs.existsSync(files.config) ) {
+ console.info('Extending config file (semantic.json)', installPaths.config);
+ return gulp.src(installPaths.config)
+ .pipe(plumber())
+ .pipe(rename(settings.rename.json)) // preserve file extension
+ .pipe(jsonEditor(jsonConfig))
+ .pipe(gulp.dest(installPaths.configFolder))
+ ;
+ }
+ else {
+ console.info('Creating config file (semantic.json)', installPaths.config);
+ return gulp.src(source.config)
+ .pipe(plumber())
+ .pipe(rename({ extname : '' })) // remove .template from ext
+ .pipe(jsonEditor(jsonConfig))
+ .pipe(gulp.dest(installPaths.configFolder))
+ ;
+ }
+
+ });
+
+ runSequence(
+ 'create theme.config',
+ 'create semantic.json',
+ callback
+ );
+
+});
+
+gulp.task('clean up install', function() {
+
+ // Completion Message
+ if(installFolder) {
+ console.log('\n Setup Complete! \n Installing Peer Dependencies. \x1b[0;31mPlease refrain from ctrl + c\x1b[0m... \n After completion navigate to \x1b[92m' + answers.semanticRoot + '\x1b[0m and run "\x1b[92mgulp build\x1b[0m" to build');
+ process.exit(0);
+ }
+ else {
+ console.log('');
+ console.log('');
+ }
+
+ // If auto-install is switched on, we skip the configuration section and simply build the dependencies
+ if(install.shouldAutoInstall()) {
+ return gulp.start('build');
+ }
+ else {
+ return gulp
+ .src('gulpfile.js')
+ .pipe(prompt.prompt(questions.cleanup, function(answers) {
+ if(answers.cleanup == 'yes') {
+ del(install.setupFiles);
+ }
+ if(answers.build == 'yes') {
+ gulp.start('build');
+ }
+ }))
+ ;
+ }
+
+
+});
+
+runSequence(
+ 'run setup',
+ 'create install files',
+ 'clean up install',
+ callback
+);
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/rtl/build.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/rtl/build.js b/semantic/tasks/rtl/build.js
new file mode 100644
index 0000000..21d4ea4
--- /dev/null
+++ b/semantic/tasks/rtl/build.js
@@ -0,0 +1,132 @@
+/*******************************
+ Build Task
+*******************************/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ fs = require('fs'),
+
+ // gulp dependencies
+ autoprefixer = require('gulp-autoprefixer'),
+ chmod = require('gulp-chmod'),
+ clone = require('gulp-clone'),
+ flatten = require('gulp-flatten'),
+ gulpif = require('gulp-if'),
+ less = require('gulp-less'),
+ minifyCSS = require('gulp-minify-css'),
+ plumber = require('gulp-plumber'),
+ print = require('gulp-print'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ rtlcss = require('gulp-rtlcss'),
+ uglify = require('gulp-uglify'),
+
+ // user config
+ config = require('../config/user'),
+
+ // install config
+ tasks = require('../config/tasks'),
+ install = require('../config/project/install'),
+
+ // shorthand
+ globs = config.globs,
+ assets = config.paths.assets,
+ output = config.paths.output,
+ source = config.paths.source,
+
+ banner = tasks.banner,
+ comments = tasks.regExp.comments,
+ log = tasks.log,
+ settings = tasks.settings
+;
+
+// add internal tasks (concat release)
+require('../collections/internal')(gulp);
+
+module.exports = function(callback) {
+
+ var
+ stream,
+ compressedStream,
+ uncompressedStream
+ ;
+
+ console.info('Building Semantic');
+
+ if( !install.isSetup() ) {
+ console.error('Cannot build files. Run "gulp install" to set-up Semantic');
+ return;
+ }
+
+ // unified css stream
+ stream = gulp.src(source.definitions + '/**/' + globs.components + '.less')
+ .pipe(plumber())
+ .pipe(less(settings.less))
+ .pipe(autoprefixer(settings.prefix))
+ .pipe(rtlcss())
+ .pipe(replace(comments.variables.in, comments.variables.out))
+ .pipe(replace(comments.license.in, comments.license.out))
+ .pipe(replace(comments.large.in, comments.large.out))
+ .pipe(replace(comments.small.in, comments.small.out))
+ .pipe(replace(comments.tiny.in, comments.tiny.out))
+ .pipe(flatten())
+ ;
+
+ // two concurrent streams from same source to concat release
+ uncompressedStream = stream.pipe(clone());
+ compressedStream = stream.pipe(clone());
+
+ uncompressedStream
+ .pipe(plumber())
+ .pipe(replace(assets.source, assets.uncompressed))
+ .pipe(rename(settings.rename.rtlCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package uncompressed rtl css');
+ })
+ ;
+
+ compressedStream = stream
+ .pipe(plumber())
+ .pipe(clone())
+ .pipe(replace(assets.source, assets.compressed))
+ .pipe(minifyCSS(settings.minify))
+ .pipe(rename(settings.rename.rtlMinCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ callback();
+ gulp.start('package compressed rtl css');
+ })
+ ;
+
+ // copy assets
+ gulp.src(source.themes + '/**/assets/**/' + globs.components + '?(s).*')
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.themes))
+ ;
+
+ // copy source javascript
+ gulp.src(source.definitions + '/**/' + globs.components + '.js')
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(replace(comments.license.in, comments.license.out))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .pipe(uglify(settings.uglify))
+ .pipe(rename(settings.rename.minJS))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed js');
+ gulp.start('package uncompressed js');
+ })
+ ;
+
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/rtl/watch.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/rtl/watch.js b/semantic/tasks/rtl/watch.js
new file mode 100644
index 0000000..5c0d901
--- /dev/null
+++ b/semantic/tasks/rtl/watch.js
@@ -0,0 +1,221 @@
+/*******************************
+ Watch Task
+*******************************/
+
+var
+ gulp = require('gulp'),
+
+ // node deps
+ console = require('better-console'),
+ fs = require('fs'),
+
+ // gulp deps
+ autoprefixer = require('gulp-autoprefixer'),
+ chmod = require('gulp-chmod'),
+ clone = require('gulp-clone'),
+ gulpif = require('gulp-if'),
+ less = require('gulp-less'),
+ minifyCSS = require('gulp-minify-css'),
+ plumber = require('gulp-plumber'),
+ print = require('gulp-print'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ rtlcss = require('gulp-rtlcss'),
+ uglify = require('gulp-uglify'),
+ util = require('gulp-util'),
+ watch = require('gulp-watch'),
+
+ // user config
+ config = require('../config/user'),
+
+ // task config
+ tasks = require('../config/tasks'),
+ install = require('../config/project/install'),
+
+ // shorthand
+ globs = config.globs,
+ assets = config.paths.assets,
+ output = config.paths.output,
+ source = config.paths.source,
+
+ banner = tasks.banner,
+ comments = tasks.regExp.comments,
+ log = tasks.log,
+ settings = tasks.settings
+
+;
+
+// add internal tasks (concat release)
+require('../collections/internal')(gulp);
+
+module.exports = function(callback) {
+
+ if( !install.isSetup() ) {
+ console.error('Cannot watch files. Run "gulp install" to set-up Semantic');
+ return;
+ }
+
+ console.clear();
+ console.log('Watching source files for changes');
+
+ /*--------------
+ Watch CSS
+ ---------------*/
+
+ gulp
+ .watch([
+ source.config,
+ source.definitions + '/**/*.less',
+ source.site + '/**/*.{overrides,variables}',
+ source.themes + '/**/*.{overrides,variables}'
+ ], function(file) {
+
+ var
+ lessPath,
+
+ stream,
+ compressedStream,
+ uncompressedStream,
+
+ isDefinition,
+ isPackagedTheme,
+ isSiteTheme,
+ isConfig
+ ;
+
+ // log modified file
+ gulp.src(file.path)
+ .pipe(print(log.modified))
+ ;
+
+ /*--------------
+ Find Source
+ ---------------*/
+
+ // recompile on *.override , *.variable change
+ isConfig = (file.path.indexOf('.config') !== -1);
+ isPackagedTheme = (file.path.indexOf(source.themes) !== -1);
+ isSiteTheme = (file.path.indexOf(source.site) !== -1);
+ isDefinition = (file.path.indexOf(source.definitions) !== -1);
+
+
+ if(isConfig) {
+ console.log('Change detected in theme config');
+ // cant tell which theme was changed in theme.config, rebuild all
+ gulp.start('build');
+ }
+ else if(isPackagedTheme) {
+ console.log('Change detected in packaged theme');
+ lessPath = lessPath.replace(tasks.regExp.theme, source.definitions);
+ lessPath = util.replaceExtension(file.path, '.less');
+ }
+ else if(isSiteTheme) {
+ console.log('Change detected in site theme');
+ lessPath = lessPath.replace(source.site, source.definitions);
+ lessPath = util.replaceExtension(file.path, '.less');
+ }
+ else if(isDefinition) {
+ console.log('Change detected in definition');
+ lessPath = util.replaceExtension(file.path, '.less');
+ }
+
+ /*--------------
+ Create CSS
+ ---------------*/
+
+ if( fs.existsSync(lessPath) ) {
+
+ // unified css stream
+ stream = gulp.src(lessPath)
+ .pipe(plumber())
+ .pipe(less(settings.less))
+ .pipe(replace(comments.variables.in, comments.variables.out))
+ .pipe(replace(comments.license.in, comments.license.out))
+ .pipe(replace(comments.large.in, comments.large.out))
+ .pipe(replace(comments.small.in, comments.small.out))
+ .pipe(replace(comments.tiny.in, comments.tiny.out))
+ .pipe(autoprefixer(settings.prefix))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(rtlcss())
+ ;
+
+ // use 2 concurrent streams from same pipe
+ uncompressedStream = stream.pipe(clone());
+ compressedStream = stream.pipe(clone());
+
+ uncompressedStream
+ .pipe(plumber())
+ .pipe(replace(assets.source, assets.uncompressed))
+ .pipe(rename(settings.rename.rtlCSS))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package uncompressed rtl css');
+ })
+ ;
+
+ compressedStream = stream
+ .pipe(plumber())
+ .pipe(replace(assets.source, assets.compressed))
+ .pipe(minifyCSS(settings.minify))
+ .pipe(rename(settings.rename.minCSS))
+ .pipe(rename(settings.rename.rtlMinCSS))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed rtl css');
+ })
+ ;
+
+ }
+ else {
+ console.log('Cannot find UI definition at path', lessPath);
+ }
+ })
+ ;
+
+ /*--------------
+ Watch JS
+ ---------------*/
+
+ gulp
+ .watch([
+ source.definitions + '/**/*.js'
+ ], function(file) {
+ gulp.src(file.path)
+ .pipe(plumber())
+ .pipe(replace(comments.license.in, comments.license.out))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .pipe(uglify(settings.uglify))
+ .pipe(rename(settings.rename.minJS))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed js');
+ gulp.start('package uncompressed js');
+ })
+ ;
+ })
+ ;
+
+ /*--------------
+ Watch Assets
+ ---------------*/
+
+ // only copy assets that match component names (or their plural)
+ gulp
+ .watch([
+ source.themes + '/**/assets/**/' + globs.components + '?(s).*'
+ ], function(file) {
+ // copy assets
+ gulp.src(file.path, { base: source.themes })
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.themes))
+ .pipe(print(log.created))
+ ;
+ })
+ ;
+
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/version.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/version.js b/semantic/tasks/version.js
new file mode 100644
index 0000000..df49f55
--- /dev/null
+++ b/semantic/tasks/version.js
@@ -0,0 +1,11 @@
+/*******************************
+ Version Task
+*******************************/
+
+var
+ release = require('./config/project/release')
+;
+
+module.exports = function(callback) {
+ console.log(release.title + ' ' + release.version);
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/watch.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/watch.js b/semantic/tasks/watch.js
new file mode 100644
index 0000000..518c79a
--- /dev/null
+++ b/semantic/tasks/watch.js
@@ -0,0 +1,231 @@
+/*******************************
+ Watch Task
+*******************************/
+
+var
+ gulp = require('gulp-help')(require('gulp')),
+
+ // node dependencies
+ console = require('better-console'),
+ fs = require('fs'),
+
+ // gulp dependencies
+ autoprefixer = require('gulp-autoprefixer'),
+ chmod = require('gulp-chmod'),
+ clone = require('gulp-clone'),
+ gulpif = require('gulp-if'),
+ less = require('gulp-less'),
+ minifyCSS = require('gulp-minify-css'),
+ plumber = require('gulp-plumber'),
+ print = require('gulp-print'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ uglify = require('gulp-uglify'),
+ util = require('gulp-util'),
+ watch = require('gulp-watch'),
+
+ // user config
+ config = require('./config/user'),
+
+ // task config
+ tasks = require('./config/tasks'),
+ install = require('./config/project/install'),
+
+ // shorthand
+ globs = config.globs,
+ assets = config.paths.assets,
+ output = config.paths.output,
+ source = config.paths.source,
+
+ banner = tasks.banner,
+ comments = tasks.regExp.comments,
+ log = tasks.log,
+ settings = tasks.settings
+
+;
+
+// add tasks referenced using gulp.run (sub-tasks)
+if(config.rtl) {
+ require('./collections/rtl')(gulp);
+}
+require('./collections/internal')(gulp);
+
+
+// export task
+module.exports = function(callback) {
+
+ if( !install.isSetup() ) {
+ console.error('Cannot watch files. Run "gulp install" to set-up Semantic');
+ return;
+ }
+
+ // check for right-to-left (RTL) language
+ if(config.rtl == 'both') {
+ gulp.start('watch-rtl');
+ }
+ if(config.rtl === true || config.rtl === 'Yes') {
+ gulp.start('watch-rtl');
+ return;
+ }
+
+ //console.clear();
+ console.log('Watching source files for changes');
+
+ /*--------------
+ Watch CSS
+ ---------------*/
+
+ gulp
+ .watch([
+ source.config,
+ source.definitions + '/**/*.less',
+ source.site + '/**/*.{overrides,variables}',
+ source.themes + '/**/*.{overrides,variables}'
+ ], function(file) {
+
+ var
+ lessPath,
+
+ stream,
+ compressedStream,
+ uncompressedStream,
+
+ isDefinition,
+ isPackagedTheme,
+ isSiteTheme,
+ isConfig
+ ;
+
+ // log modified file
+ gulp.src(file.path)
+ .pipe(print(log.modified))
+ ;
+
+ /*--------------
+ Find Source
+ ---------------*/
+
+ // recompile on *.override , *.variable change
+ isConfig = (file.path.indexOf('theme.config') !== -1 || file.path.indexOf('site.variables') !== -1);
+ isPackagedTheme = (file.path.indexOf(source.themes) !== -1);
+ isSiteTheme = (file.path.indexOf(source.site) !== -1);
+ isDefinition = (file.path.indexOf(source.definitions) !== -1);
+
+ if(isConfig) {
+ console.info('Rebuilding all UI');
+ // impossible to tell which file was updated in theme.config, rebuild all
+ gulp.start('build-css');
+ return;
+ }
+ else if(isPackagedTheme) {
+ console.log('Change detected in packaged theme');
+ lessPath = util.replaceExtension(file.path, '.less');
+ lessPath = lessPath.replace(tasks.regExp.theme, source.definitions);
+ }
+ else if(isSiteTheme) {
+ console.log('Change detected in site theme');
+ lessPath = util.replaceExtension(file.path, '.less');
+ lessPath = lessPath.replace(source.site, source.definitions);
+ }
+ else {
+ console.log('Change detected in definition');
+ lessPath = file.path;
+ }
+
+ /*--------------
+ Create CSS
+ ---------------*/
+
+ if( fs.existsSync(lessPath) ) {
+
+ // unified css stream
+ stream = gulp.src(lessPath)
+ .pipe(plumber(settings.plumber.less))
+ .pipe(less(settings.less))
+ .pipe(print(log.created))
+ .pipe(replace(comments.variables.in, comments.variables.out))
+ .pipe(replace(comments.license.in, comments.license.out))
+ .pipe(replace(comments.large.in, comments.large.out))
+ .pipe(replace(comments.small.in, comments.small.out))
+ .pipe(replace(comments.tiny.in, comments.tiny.out))
+ .pipe(autoprefixer(settings.prefix))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ ;
+
+ // use 2 concurrent streams from same pipe
+ uncompressedStream = stream.pipe(clone());
+ compressedStream = stream.pipe(clone());
+
+ uncompressedStream
+ .pipe(plumber())
+ .pipe(replace(assets.source, assets.uncompressed))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package uncompressed css');
+ })
+ ;
+
+ compressedStream = stream
+ .pipe(plumber())
+ .pipe(replace(assets.source, assets.compressed))
+ .pipe(minifyCSS(settings.minify))
+ .pipe(rename(settings.rename.minCSS))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed css');
+ })
+ ;
+ }
+ else {
+ console.log('Cannot find UI definition at path', lessPath);
+ }
+ })
+ ;
+
+ /*--------------
+ Watch JS
+ ---------------*/
+
+ gulp
+ .watch([
+ source.definitions + '/**/*.js'
+ ], function(file) {
+ gulp.src(file.path)
+ .pipe(plumber())
+ .pipe(replace(comments.license.in, comments.license.out))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.uncompressed))
+ .pipe(print(log.created))
+ .pipe(uglify(settings.uglify))
+ .pipe(rename(settings.rename.minJS))
+ .pipe(gulp.dest(output.compressed))
+ .pipe(print(log.created))
+ .on('end', function() {
+ gulp.start('package compressed js');
+ gulp.start('package uncompressed js');
+ })
+ ;
+ })
+ ;
+
+ /*--------------
+ Watch Assets
+ ---------------*/
+
+ // only copy assets that match component names (or their plural)
+ gulp
+ .watch([
+ source.themes + '/**/assets/**/*.*'
+ ], function(file) {
+ // copy assets
+ gulp.src(file.path, { base: source.themes })
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.themes))
+ .pipe(print(log.created))
+ ;
+ })
+ ;
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/stylesheets/main.scss
----------------------------------------------------------------------
diff --git a/stylesheets/main.scss b/stylesheets/main.scss
new file mode 100644
index 0000000..9381e44
--- /dev/null
+++ b/stylesheets/main.scss
@@ -0,0 +1,59 @@
+$brown: #A76B00;
+$black: #271900;
+$background: #FFF5E3;
+
+#react-container {
+ display: flex;
+ min-height: 100vh;
+ flex-direction: column;
+}
+
+#main-container {
+ min-height: 100vh;
+ flex: 1;
+}
+
+.site-footer {
+ width: 100%;
+ background-color: $brown;
+ height: 50px;
+ margin-top: 20px;
+}
+
+.site-header {
+ width: 100%;
+ background-color: $brown;
+ height: 50px;
+}
+
+#page-wrapper {
+ padding-top: 40px;
+ min-height: calc(100vh - 120px);
+}
+
+#main-masthead {
+ padding: 60px 0;
+}
+
+#homepage-container {
+ margin-top: -60px;
+}
+
+#results-controls {
+ background-color: $background;
+}
+
+.tooltip {
+ position: absolute;
+ text-align: center;
+ font: 12px sans-serif;
+ min-width: 100px;
+ min-height: 24px;
+ padding: 4px;
+ pointer-events: none;
+ background-color: #A76B00;
+}
+
+#counts-details {
+ word-wrap: break-word;
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/tap/templates/index.html
----------------------------------------------------------------------
diff --git a/tap/templates/index.html b/tap/templates/index.html
index b25cad7..f27ea2d 100644
--- a/tap/templates/index.html
+++ b/tap/templates/index.html
@@ -3,15 +3,20 @@
<head>
<meta charset="utf-8">
<title>Tap Home</title>
- <!-- <link href="{{ STATIC_URL }}js/components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> -->
+ {% load staticfiles %}
+ <link rel="stylesheet" href="{% static "semantic.min.css" %}">
+ <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> -->
+ <script src="{% static "jquery-3.0.0.min.js" %}"></script>
+ <script src="{% static "semantic.min.js" %}"></script>
+ <link href="{% static "styles.min.css" %}" rel="stylesheet">
</head>
<body>
- <div class="container">
- <h1>Hello Tap!</h1>
- <div class="react-container"></div>
+ <div id="main-container">
+ <div id="react-container" />
</div>
<!-- <script src="{{ STATIC_URL }}js/components/jquery/dist/jquery.min.js"></script>
<script src="{{ STATIC_URL }}js/components/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="{{ STATIC_URL }}js/es5-shim.min.js"></script> -->
+ <script src="{% static "app.js" %}"></script>
</body>
-</html>
\ No newline at end of file
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/tasks/build.js
----------------------------------------------------------------------
diff --git a/tasks/build.js b/tasks/build.js
new file mode 100644
index 0000000..cef2a15
--- /dev/null
+++ b/tasks/build.js
@@ -0,0 +1,41 @@
+import gulp from 'gulp';
+import gulpLoadPlugins from 'gulp-load-plugins';
+
+import browserify from 'browserify';
+import watchify from 'watchify';
+import babelify from 'babelify';
+import buffer from 'vinyl-buffer';
+import source from 'vinyl-source-stream';
+import assign from 'lodash.assign';
+
+const plugins = gulpLoadPlugins();
+
+var customOpts = {
+ entries : ['./public/index.jsx'],
+ debug : true,
+ extensions : ['.js', '.jsx']
+};
+
+var opts = assign({}, watchify.args, customOpts);
+// var b = watchify(browserify(opts), { poll : 500 });
+var b = watchify(browserify(opts));
+
+b.transform(babelify, { presets : [ 'es2015', 'react' ] });
+
+function bundle () {
+ return b.bundle()
+ .on('error', plugins.util.log.bind(plugins.util, 'Browserify Error'))
+ .pipe(source('app.js'))
+ .pipe(buffer())
+ .pipe(plugins.sourcemaps.init({ loadMaps : true }))
+ // .pipe(plugins.uglify())
+ // .on('error', plugins.util.log)
+ .pipe(plugins.sourcemaps.write('./'))
+ .pipe(gulp.dest('build/js'))
+ .pipe(gulp.dest('static'));
+}
+
+
+gulp.task('js', bundle);
+b.on('update', bundle);
+b.on('log', plugins.util.log);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/tasks/django.js
----------------------------------------------------------------------
diff --git a/tasks/django.js b/tasks/django.js
new file mode 100644
index 0000000..d780024
--- /dev/null
+++ b/tasks/django.js
@@ -0,0 +1,28 @@
+import gulp from 'gulp';
+import { exec } from 'child_process';
+
+gulp.task('django', () => {
+ // For Vagrant
+ var django = exec('cd /vagrant; /vagrant/manage.py runserver 0.0.0.0:8000');
+
+ // For Not-Vagrant
+ // var django = exec('manage.py runserver 0.0.0.0:8000');
+
+ // django.stderr.on('data', (data) => {
+ // process.stdout.write(data);
+ // });
+ //
+ // django.stdout.on('data', (data) => {
+ // process.stdout.write(data);
+ // });
+
+ process.on('SIGTERM', () => {
+ django.kill();
+ process.exit();
+ });
+
+ process.on('SIGINT', () => {
+ django.kill();
+ process.exit();
+ });
+});
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/tasks/filesystem.js
----------------------------------------------------------------------
diff --git a/tasks/filesystem.js b/tasks/filesystem.js
new file mode 100644
index 0000000..03ee130
--- /dev/null
+++ b/tasks/filesystem.js
@@ -0,0 +1,15 @@
+import gulp from 'gulp';
+import del from 'del';
+// import fs from 'fs-extra';
+
+// Clean out .tmp and build directories
+gulp.task('clean', () =>
+ del(['.tmp', 'build/*', 'static/styles.min.css', 'static/app.js'], { dot : true })
+);
+
+
+// // Symlink built files to Django static folder
+// gulp.task('symlink', () => {
+// fs.ensureSymlink('./build/styles/styles.min.css', './static/styles.min.css', (err) => {});
+// fs.ensureSymlink('./build/js/app.min.js', './static/app.min.js', (err) => {});
+// });
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/tasks/styles.js
----------------------------------------------------------------------
diff --git a/tasks/styles.js b/tasks/styles.js
new file mode 100644
index 0000000..7941d6c
--- /dev/null
+++ b/tasks/styles.js
@@ -0,0 +1,98 @@
+import gulp from 'gulp';
+import runSequence from 'run-sequence';
+import gulpLoadPlugins from 'gulp-load-plugins';
+
+import buildSemantic from '../semantic/tasks/build';
+import watchSemantic from '../semantic/tasks/watch';
+
+const plugins = gulpLoadPlugins();
+
+const AUTOPREFIXER_BROWSERS = [
+ 'ie >= 10',
+ 'ie_mob >= 10',
+ 'ff >= 30',
+ 'chrome >= 34',
+ 'safari >= 7',
+ 'opera >= 23',
+ 'ios >= 7',
+ 'android >= 4.4',
+ 'bb >= 10'
+];
+
+// Semantic UI tasks
+gulp.task('buildSemantic', buildSemantic);
+gulp.task('watchSemantic', watchSemantic);
+
+
+// Copy Semantic UI
+gulp.task('copySemantic', () => {
+ return gulp.src([
+ 'semantic/dist/semantic.min.css',
+ 'semantic/dist/semantic.min.js',
+ 'semantic/dist/themes/default/assets/fonts/icons.woff2',
+ ], { base : 'semantic/dist' })
+ .pipe(gulp.dest('static'));
+});
+
+
+// Build and prefix styles
+gulp.task('sass', () => {
+ return gulp.src([
+ 'stylesheets/**/*.scss',
+ 'stylesheets/**/*.css'
+ ], { base : 'stylesheets' })
+ .pipe(plugins.newer('.tmp/styles'))
+ .pipe(plugins.sourcemaps.init())
+ .pipe(plugins.sass({
+ precision : 10
+ }).on('error', plugins.sass.logError))
+ .pipe(plugins.autoprefixer(AUTOPREFIXER_BROWSERS))
+ .pipe(gulp.dest('.tmp/styles'));
+});
+
+
+// Concatenate and minify styles
+gulp.task('bundle:styles', () => {
+ return gulp.src([
+ // 'semantic/dist/semantic.css',
+ '.tmp/styles/**/*.css'
+ ])
+ .pipe(plugins.concat('styles.min.css'))
+ .pipe(plugins.cssnano())
+ .pipe(plugins.size({ title : 'styles' }))
+ .pipe(plugins.sourcemaps.write('./'))
+ .pipe(gulp.dest('build/styles'))
+ .pipe(gulp.dest('static'));
+});
+
+
+// Build the styles
+gulp.task('styles:build', (done) => {
+ return runSequence(
+ [
+ // 'buildSemantic',
+ 'sass'
+ ],
+ 'copySemantic',
+ 'bundle:styles',
+ done
+ );
+});
+
+
+// Watch for style changes
+gulp.task('styles:watch', () => {
+ gulp.watch(['stylesheets/**/*.scss', 'stylesheets/**/*.css'], ['sass', 'bundle:styles']);
+ gulp.watch(['semantic/dist/semantic.min.css'], ['copySemantic']);
+});
+
+
+// Development task for all styles
+gulp.task('styles', () => {
+ return runSequence(
+ [
+ // 'watchSemantic',
+ 'styles:watch'
+ ]
+ );
+});
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/tasks/test.js
----------------------------------------------------------------------
diff --git a/tasks/test.js b/tasks/test.js
new file mode 100644
index 0000000..11472e5
--- /dev/null
+++ b/tasks/test.js
@@ -0,0 +1,26 @@
+import gulp from 'gulp';
+import runSequence from 'run-sequence';
+import gulpLoadPlugins from 'gulp-load-plugins';
+
+const plugins = gulpLoadPlugins();
+
+// Lint JS
+gulp.task('lint', () =>
+ gulp.src('public/**/*.{js,jsx}')
+ .pipe(plugins.eslint())
+ .pipe(plugins.eslint.format())
+);
+
+
+// Test JS
+gulp.task('mocha', () =>
+ gulp.src(['test/**/*.js'], { read : false })
+ .pipe(plugins.mocha({ reporter : list }))
+ .on('error', plugins.util.log)
+);
+
+
+// Test and lint watching
+gulp.task('test', () => {
+ gulp.watch(['public/**/*.{js,jsx}'], ['lint', 'mocha']);
+});
[19/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/modal.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/modal.variables b/semantic/src/themes/default/modules/modal.variables
new file mode 100644
index 0000000..783f32c
--- /dev/null
+++ b/semantic/src/themes/default/modules/modal.variables
@@ -0,0 +1,151 @@
+/*******************************
+ Modal
+*******************************/
+
+@background: @white;
+@border: none;
+@zIndex: 1001;
+@borderRadius: @defaultBorderRadius;
+@transformOrigin: 50% 25%;
+@boxShadow:
+ 1px 3px 3px 0px rgba(0, 0, 0, 0.2),
+ 1px 3px 15px 2px rgba(0, 0, 0, 0.2)
+;
+
+/* Close Icon */
+@closeOpacity: 0.8;
+@closeSize: 1.25em;
+@closeColor: @white;
+
+@closeHitbox: 2.25rem;
+@closeDistance: 0.25rem;
+@closeHitBoxOffset: (@closeHitbox - 1rem) / 2;
+@closePadding: @closeHitBoxOffset 0rem 0rem 0rem;
+@closeTop: -(@closeDistance + @closeHitbox);
+@closeRight: -(@closeDistance + @closeHitbox);
+
+/* Header */
+@headerMargin: 0em;
+@headerVerticalPadding: 1.25rem;
+@headerHorizontalPadding: 1.5rem;
+@headerPadding: @headerVerticalPadding @headerHorizontalPadding;
+@headerBackground: @white;
+@headerColor: @darkTextColor;
+@headerFontSize: @huge;
+@headerBoxShadow: none;
+@headerFontWeight: bold;
+@headerFontFamily: @headerFont;
+@headerBorder: 1px solid @borderColor;
+
+/* Content */
+@contentFontSize: 1em;
+@contentPadding: 1.5rem;
+@contentLineHeight: 1.4;
+@contentBackground: #FFFFFF;
+
+/* Image / Description */
+@imageWidth: '';
+@imageIconSize: 8rem;
+@imageVerticalAlign: top;
+
+@descriptionDistance: 2em;
+@descriptionMinWidth: '';
+@descriptionWidth: auto;
+@descriptionVerticalAlign: top;
+
+/* Modal Actions */
+@actionBorder: 1px solid @borderColor;
+@actionBackground: @offWhite;
+@actionPadding: 1rem 1rem;
+@actionAlign: right;
+
+@buttonDistance: 0.75em;
+
+/* Inner Close Position (Tablet/Mobile) */
+@innerCloseTop: (@headerVerticalPadding - @closeHitBoxOffset + (@lineHeight - 1em));
+@innerCloseRight: 1rem;
+@innerCloseColor: @textColor;
+
+/* Mobile Positions */
+@mobileHeaderPadding: 0.75rem 1rem;
+@mobileContentPadding: 1rem;
+@mobileImagePadding: 0rem 0rem 1rem;
+@mobileDescriptionPadding: 1rem 0rem ;
+@mobileButtonDistance: 1rem;
+@mobileActionPadding: 1rem 1rem (1rem - @mobileButtonDistance);
+@mobileImageIconSize: 5rem;
+@mobileCloseTop: 0.5rem;
+@mobileCloseRight: 0.5rem;
+
+/* Responsive Widths */
+@mobileWidth: 95%;
+@tabletWidth: 88%;
+@computerWidth: 850px;
+@largeMonitorWidth: 900px;
+@widescreenMonitorWidth: 950px;
+
+@mobileMargin: 0em 0em 0em -(@mobileWidth / 2);
+@tabletMargin: 0em 0em 0em -(@tabletWidth / 2);
+@computerMargin: 0em 0em 0em -(@computerWidth / 2);
+@largeMonitorMargin: 0em 0em 0em -(@largeMonitorWidth / 2);
+@widescreenMonitorMargin: 0em 0em 0em -(@widescreenMonitorWidth / 2);
+
+@fullScreenWidth: 95%;
+@fullScreenOffset: (100% - @fullScreenWidth) / 2;
+@fullScreenMargin: 1em auto;
+
+/* Coupling */
+@invertedBoxShadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Basic */
+@basicModalHeaderColor: @white;
+@basicModalColor: @white;
+@basicModalCloseTop: 1rem;
+@basicModalCloseRight: 1.5rem;
+@basicInnerCloseColor: @white;
+
+@basicInvertedModalColor: @textColor;
+@basicInvertedModalHeaderColor: @darkTextColor;
+
+/* Scrolling Margin */
+@scrollingMargin: 3.5rem;
+@mobileScrollingMargin: 1rem;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Size Widths */
+@smallRatio: 0.8;
+@largeRatio: 1.2;
+
+/* Derived Responsive Sizes */
+@smallHeaderSize: 1.3em;
+@smallMobileWidth: @mobileWidth;
+@smallTabletWidth: (@tabletWidth * @smallRatio);
+@smallComputerWidth: (@computerWidth * @smallRatio);
+@smallLargeMonitorWidth: (@largeMonitorWidth * @smallRatio);
+@smallWidescreenMonitorWidth: (@widescreenMonitorWidth * @smallRatio);
+
+@smallMobileMargin: 0em 0em 0em -(@smallMobileWidth / 2);
+@smallTabletMargin: 0em 0em 0em -(@smallTabletWidth / 2);
+@smallComputerMargin: 0em 0em 0em -(@smallComputerWidth / 2);
+@smallLargeMonitorMargin: 0em 0em 0em -(@smallLargeMonitorWidth / 2);
+@smallWidescreenMonitorMargin: 0em 0em 0em -(@smallWidescreenMonitorWidth / 2);
+
+@largeHeaderSize: 1.6em;
+@largeMobileWidth: @mobileWidth;
+@largeTabletWidth: @tabletWidth;
+@largeComputerWidth: (@computerWidth * @largeRatio);
+@largeLargeMonitorWidth: (@largeMonitorWidth * @largeRatio);
+@largeWidescreenMonitorWidth: (@widescreenMonitorWidth * @largeRatio);
+
+@largeMobileMargin: 0em 0em 0em -(@largeMobileWidth / 2);
+@largeTabletMargin: 0em 0em 0em -(@largeTabletWidth / 2);
+@largeComputerMargin: 0em 0em 0em -(@largeComputerWidth / 2);
+@largeLargeMonitorMargin: 0em 0em 0em -(@largeLargeMonitorWidth / 2);
+@largeWidescreenMonitorMargin: 0em 0em 0em -(@largeWidescreenMonitorWidth / 2);
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/nag.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/nag.overrides b/semantic/src/themes/default/modules/nag.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/nag.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/nag.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/nag.variables b/semantic/src/themes/default/modules/nag.variables
new file mode 100644
index 0000000..9b45789
--- /dev/null
+++ b/semantic/src/themes/default/modules/nag.variables
@@ -0,0 +1,74 @@
+/*******************************
+ Nag
+*******************************/
+
+/*--------------
+ Collection
+---------------*/
+
+@position: relative;
+@width: 100%;
+@zIndex: 999;
+@margin: 0em;
+
+@background: #555555;
+@opacity: 0.95;
+@minHeight: 0em;
+@padding: 0.75em 1em;
+@lineHeight: 1em;
+@boxShadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);
+
+@fontSize: 1rem;
+@textAlign: center;
+@color: @textColor;
+
+@transition: 0.2s background ease;
+
+
+/*--------------
+ Elements
+---------------*/
+
+/* Title */
+@titleColor: @white;
+@titleMargin: 0em 0.5em;
+
+@closeSize: 1em;
+@closeMargin: (-@closeSize / 2) 0em 0em;
+@closeTop: 50%;
+@closeRight: 1em;
+@closeColor: @white;
+@closeTransition: opacity 0.2s ease;
+@closeOpacity: 0.4;
+
+
+/*--------------
+ States
+---------------*/
+
+/* Hover */
+@nagHoverBackground: @background;
+@nagHoverOpacity: 1;
+
+@closeHoverOpacity: 1;
+
+/*--------------
+ Variations
+---------------*/
+
+/* Top / Bottom */
+@top: 0em;
+@bottom: 0em;
+@borderRadius: @defaultBorderRadius;
+@topBorderRadius: 0em 0em @borderRadius @borderRadius;
+@bottomBorderRadius: @borderRadius @borderRadius 0em 0em;
+
+/* Inverted */
+@invertedBackground: @darkWhite;
+
+/*--------------
+ Plural
+---------------*/
+
+@groupedBorderRadius: 0em;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/popup.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/popup.overrides b/semantic/src/themes/default/modules/popup.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/popup.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/popup.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/popup.variables b/semantic/src/themes/default/modules/popup.variables
new file mode 100644
index 0000000..c7e0db8
--- /dev/null
+++ b/semantic/src/themes/default/modules/popup.variables
@@ -0,0 +1,137 @@
+/*******************************
+ Popup
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@zIndex: 1900;
+@background: @white;
+
+@maxWidth: 250px;
+@borderColor: @solidBorderColor;
+@borderWidth: 1px;
+@boxShadow: @floatingShadow;
+@color: @textColor;
+
+@verticalPadding: 0.833em;
+@horizontalPadding: 1em;
+@fontWeight: normal;
+@fontStyle: normal;
+@borderRadius: @defaultBorderRadius;
+
+/*-------------------
+ Parts
+--------------------*/
+
+/* Placement */
+@arrowSize: @relative10px;
+@arrowWidth: 1em;
+@arrowDistanceFromEdge: 1em;
+@boxArrowOffset: 0em;
+@popupDistanceAway: @arrowSize;
+
+
+/* Header */
+@headerFontFamily: @headerFont;
+@headerFontSize: @relativeLarge;
+@headerDistance: @relative7px;
+@headerLineHeight: 1.2;
+
+/* Content Border */
+@border: @borderWidth solid @borderColor;
+
+/* Arrow */
+@arrowBackground: @white;
+@arrowZIndex: 2;
+@arrowJitter: 0.05em;
+@arrowOffset: -(@arrowSize / 2) + @arrowJitter;
+
+@arrowStroke: @borderWidth;
+@arrowColor: darken(@borderColor, 10);
+
+/* Arrow color by position */
+@arrowTopBackground: @arrowBackground;
+@arrowCenterBackground: @arrowBackground;
+@arrowBottomBackground: @arrowBackground;
+
+@arrowBoxShadow: @arrowStroke @arrowStroke 0px 0px @arrowColor;
+@leftArrowBoxShadow: @arrowStroke -@arrowStroke 0px 0px @arrowColor;
+@rightArrowBoxShadow: -@arrowStroke @arrowStroke 0px 0px @arrowColor;
+@bottomArrowBoxShadow: -@arrowStroke -@arrowStroke 0px 0px @arrowColor;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Tooltip */
+@tooltipBackground: @background;
+@tooltipBorderRadius: @borderRadius;
+@tooltipPadding: @verticalPadding @horizontalPadding;
+@tooltipFontWeight: @fontWeight;
+@tooltipFontStyle: @fontStyle;
+@tooltipColor: @color;
+@tooltipBorder: @border;
+@tooltipBoxShadow: @boxShadow;
+@tooltipMaxWidth: none;
+@tooltipFontSize: @medium;
+@tooltipLineHeight: @lineHeight;
+@tooltipDistanceAway: @relative7px;
+@tooltipZIndex: 1;
+@tooltipDuration: @defaultDuration;
+@tooltipEasing: @defaultEasing;
+
+/* Inverted */
+@tooltipInvertedBackground: @invertedBackground;
+@tooltipInvertedColor: @invertedColor;
+@tooltipInvertedBorder: @invertedBorder;
+@tooltipInvertedBoxShadow: @invertedBoxShadow;
+@tooltipInvertedHeaderBackground: @invertedHeaderBackground;
+@tooltipInvertedHeaderColor: @invertedHeaderColor;
+
+/* Arrow */
+@tooltipArrowVerticalOffset: -@2px;
+@tooltipArrowHorizontalOffset: -@1px;
+@tooltipArrowBoxShadow: @arrowBoxShadow;
+@tooltipArrowBackground: @arrowBackground;
+@tooltipArrowTopBackground: @arrowTopBackground;
+@tooltipArrowCenterBackground: @arrowCenterBackground;
+@tooltipArrowBottomBackground: @arrowBottomBackground;
+
+/*-------------------
+ Coupling
+--------------------*/
+
+/* Grid Inside Popup */
+@nestedGridMargin: -0.7rem -0.875rem; /* (padding * @medium) */
+@nestedGridWidth: ~"calc(100% + 1.75rem)";
+
+/*-------------------
+ States
+--------------------*/
+
+@loadingZIndex: -1;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Wide */
+@wideWidth: 350px;
+@veryWideWidth: 550px;
+
+/* Inverted */
+@invertedBackground: @black;
+@invertedColor: @white;
+@invertedBorder: none;
+@invertedBoxShadow: none;
+
+@invertedHeaderBackground: none;
+@invertedHeaderColor: @white;
+@invertedArrowColor: @invertedBackground;
+
+/* Arrow color by position */
+@invertedArrowTopBackground: @invertedBackground;
+@invertedArrowCenterBackground: @invertedBackground;
+@invertedArrowBottomBackground: @invertedBackground;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/progress.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/progress.overrides b/semantic/src/themes/default/modules/progress.overrides
new file mode 100644
index 0000000..cdba171
--- /dev/null
+++ b/semantic/src/themes/default/modules/progress.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Progress
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/progress.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/progress.variables b/semantic/src/themes/default/modules/progress.variables
new file mode 100644
index 0000000..6a60d72
--- /dev/null
+++ b/semantic/src/themes/default/modules/progress.variables
@@ -0,0 +1,113 @@
+/*******************************
+ Progress
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@verticalSpacing: 1em;
+@margin: @verticalSpacing 0em (@labelHeight + @verticalSpacing);
+@firstMargin: 0em 0em (@labelHeight + @verticalSpacing);
+@lastMargin: 0em 0em (@labelHeight);
+
+@background: @strongTransparentBlack;
+@border: none;
+@boxShadow: none;
+@padding: 0em;
+@borderRadius: @defaultBorderRadius;
+
+/* Bar */
+@barPosition: relative;
+@barHeight: 1.75em;
+@barBackground: #888888;
+@barBorderRadius: @borderRadius;
+@barTransitionEasing: @defaultEasing;
+@barTransitionDuration: @defaultDuration;
+@barTransition:
+ width @barTransitionDuration @barTransitionEasing,
+ background-color @barTransitionDuration @barTransitionEasing
+;
+@barInitialWidth: 0%;
+@barMinWidth: 2em;
+
+/* Progress Bar Label */
+@progressWidth: auto;
+@progressSize: @relativeSmall;
+@progressPosition: absolute;
+@progressTop: 50%;
+@progressRight: 0.5em;
+@progressLeft: auto;
+@progressBottom: auto;
+@progressOffset: -0.5em;
+@progressColor: @invertedLightTextColor;
+@progressTextShadow: none;
+@progressFontWeight: bold;
+@progressTextAlign: left;
+
+/* Label */
+@labelWidth: 100%;
+@labelHeight: 1.5em;
+@labelSize: 1em;
+@labelPosition: absolute;
+@labelTop: 100%;
+@labelLeft: 0%;
+@labelRight: auto;
+@labelBottom: auto;
+@labelOffset: (@labelHeight - 1.3em);
+@labelColor: @textColor;
+@labelTextShadow: none;
+@labelFontWeight: bold;
+@labelTextAlign: center;
+@labelTransition: color 0.4s @defaultEasing;
+
+/*-------------------
+ Types
+--------------------*/
+
+@indicatingFirstColor: #D95C5C;
+@indicatingSecondColor: #EFBC72;
+@indicatingThirdColor: #E6BB48;
+@indicatingFourthColor: #DDC928;
+@indicatingFifthColor: #B4D95C;
+@indicatingSixthColor: #66DA81;
+
+@indicatingFirstLabelColor: @textColor;
+@indicatingSecondLabelColor: @textColor;
+@indicatingThirdLabelColor: @textColor;
+@indicatingFourthLabelColor: @textColor;
+@indicatingFifthLabelColor: @textColor;
+@indicatingSixthLabelColor: @textColor;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Active */
+@activePulseColor: @white;
+@activePulseMaxOpacity: 0.3;
+@activePulseDuration: 2s;
+@activeMinWidth: @barMinWidth;
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Attached */
+@attachedBackground: transparent;
+@attachedHeight: 0.2rem;
+@attachedBorderRadius: @borderRadius;
+
+/* Inverted */
+@invertedBackground: @transparentWhite;
+@invertedBorder: none;
+@invertedBarBackground: @barBackground;
+@invertedProgressColor: @offWhite;
+@invertedLabelColor: @white;
+
+/* Sizing */
+@tinyBarHeight: 0.5em;
+@smallBarHeight: 1em;
+@largeBarHeight: 2.5em;
+@bigBarHeight: 3.5em;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/rating.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/rating.overrides b/semantic/src/themes/default/modules/rating.overrides
new file mode 100644
index 0000000..37ce3b6
--- /dev/null
+++ b/semantic/src/themes/default/modules/rating.overrides
@@ -0,0 +1,68 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
+@font-face {
+ font-family: 'Rating';
+ src:
+ url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3
AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDA
wEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBh
UABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhU
PCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIG
BwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFB
w4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAc
wCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'),
+ url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+
xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t
/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2
Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+I
foWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGm
ImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJ
WWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAE
AAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff')
+ ;
+ font-weight: normal;
+ font-style: normal;
+}
+.ui.rating .icon {
+ font-family: 'Rating';
+ line-height: 1;
+ backface-visibility: hidden;
+ font-weight: normal;
+ font-style: normal;
+ text-align: center;
+}
+
+/* Empty Star */
+.ui.rating .icon:before {
+ content: '\f005';
+}
+/* Active Star */
+.ui.rating .active.icon:before {
+ content: '\f005';
+}
+
+/*-------------------
+ Star
+--------------------*/
+
+/* Unfilled Star */
+.ui.star.rating .icon:before {
+ content: '\f005';
+}
+/* Active Star */
+.ui.star.rating .active.icon:before {
+ content: '\f005';
+}
+
+/* Partial */
+.ui.star.rating .partial.icon:before {
+ content: '\f006';
+}
+.ui.star.rating .partial.icon {
+ content: '\f005';
+}
+
+/*-------------------
+ Heart
+--------------------*/
+
+/* Empty Heart
+.ui.heart.rating .icon:before {
+ content: '\f08a';
+}
+*/
+.ui.heart.rating .icon:before {
+ content: '\f004';
+}
+/* Active */
+.ui.heart.rating .active.icon:before {
+ content: '\f004';
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/rating.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/rating.variables b/semantic/src/themes/default/modules/rating.variables
new file mode 100644
index 0000000..0f42f0d
--- /dev/null
+++ b/semantic/src/themes/default/modules/rating.variables
@@ -0,0 +1,103 @@
+/*******************************
+ Rating
+*******************************/
+
+@margin: 0em @relativeMini;
+@whiteSpace: nowrap;
+@verticalAlign: baseline;
+
+@iconCursor: pointer;
+@iconWidth: 1.25em;
+@iconHeight: auto;
+@iconTransition:
+ opacity @defaultDuration @defaultEasing,
+ background @defaultDuration @defaultEasing,
+ text-shadow @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing
+;
+
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Standard */
+@inactiveBackground: transparent;
+@inactiveColor: rgba(0, 0, 0, 0.15);
+
+@selectedBackground: @inactiveBackground;
+@selectedColor: @textColor;
+
+@activeBackground: @inactiveBackground;
+@activeColor: @darkTextColor;
+
+/* Star */
+@starIconWidth: @iconWidth;
+@starIconHeight: @iconHeight;
+@starShadowWidth: 1px;
+
+@starInactiveBackground: @inactiveBackground;
+@starInactiveColor: @inactiveColor;
+@starInactiveTextShadow: none;
+
+@starActiveBackground: @activeBackground;
+@starActiveColor: #FFE623;
+@starActiveShadowColor: #DDC507;
+@starActiveTextShadow:
+ 0px -@starShadowWidth 0px @starActiveShadowColor,
+ -@starShadowWidth 0px 0px @starActiveShadowColor,
+ 0px @starShadowWidth 0px @starActiveShadowColor,
+ @starShadowWidth 0px 0px @starActiveShadowColor
+;
+
+@starSelectedBackground: @selectedBackground;
+@starSelectedColor: #FFCC00;
+@starSelectedShadowColor: #E6A200;
+@starSelectedTextShadow:
+ 0px -@starShadowWidth 0px @starSelectedShadowColor,
+ -@starShadowWidth 0px 0px @starSelectedShadowColor,
+ 0px @starShadowWidth 0px @starSelectedShadowColor,
+ @starShadowWidth 0px 0px @starSelectedShadowColor
+;
+
+/* Heart */
+@heartIconWidth: 1.4em;
+@heartIconHeight: @iconHeight;
+@heartShadowWidth: 1px;
+
+@heartInactiveBackground: @inactiveBackground;
+@heartInactiveColor: @inactiveColor;
+@heartInactiveTextShadow: none;
+
+@heartActiveBackground: @activeBackground;
+@heartActiveColor: #FF6D75;
+@heartActiveShadowColor: #CD0707;
+@heartActiveTextShadow:
+ 0px -@heartShadowWidth 0px @heartActiveShadowColor,
+ -@heartShadowWidth 0px 0px @heartActiveShadowColor,
+ 0px @heartShadowWidth 0px @heartActiveShadowColor,
+ @heartShadowWidth 0px 0px @heartActiveShadowColor
+;
+
+@heartSelectedBackground: @selectedBackground;
+@heartSelectedColor: #FF3000;
+@heartSelectedShadowColor: #AA0101;
+@heartSelectedTextShadow:
+ 0px -@heartShadowWidth 0px @heartSelectedShadowColor,
+ -@heartShadowWidth 0px 0px @heartSelectedShadowColor,
+ 0px @heartShadowWidth 0px @heartSelectedShadowColor,
+ @heartShadowWidth 0px 0px @heartSelectedShadowColor
+;
+
+/*-------------------
+ States
+--------------------*/
+
+@interactiveActiveIconOpacity: 1;
+@interactiveSelectedIconOpacity: 1;
+
+/*-------------------
+ Variations
+--------------------*/
+
+@massive: 2rem;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/search.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/search.overrides b/semantic/src/themes/default/modules/search.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/search.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/search.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/search.variables b/semantic/src/themes/default/modules/search.variables
new file mode 100644
index 0000000..c84249f
--- /dev/null
+++ b/semantic/src/themes/default/modules/search.variables
@@ -0,0 +1,158 @@
+/*******************************
+ Search
+*******************************/
+
+/* Search Prompt */
+@promptBackground: @inputBackground;
+@promptVerticalPadding: @inputVerticalPadding;
+@promptHorizontalPadding: @inputHorizontalPadding;
+@promptLineHeight: @inputLineHeight;
+@promptFontSize: @relativeMedium;
+@promptPadding: (@promptVerticalPadding + ((1em - @promptLineHeight) / 2)) @promptHorizontalPadding;
+@promptBorder: 1px solid @borderColor;
+@promptBorderRadius: @circularRadius;
+@promptColor: @textColor;
+@promptTransition:
+ background-color @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing,
+ box-shadow @defaultDuration @defaultEasing,
+ border-color @defaultDuration @defaultEasing
+;
+@promptBoxShadow: 0em 0em 0em 0em transparent inset;
+
+/* Result Box */
+@resultsWidth: 18em;
+@resultsBackground: #FFFFFF;
+@resultsDistance: 0.5em;
+@resultsBorderRadius: @defaultBorderRadius;
+@resultsBorder: 1px solid @solidBorderColor;
+@resultsBoxShadow: @floatingShadow;
+
+/* Result */
+@resultFontSize: 1em;
+@resultVerticalPadding: @relativeTiny;
+@resultHorizontalPadding: @relativeLarge;
+@resultPadding: @resultVerticalPadding @resultHorizontalPadding;
+@resultTextColor: @textColor;
+@resultLineHeight: 1.33;
+@resultDivider: 1px solid @internalBorderColor;
+@resultLastDivider: none;
+
+/* Result Image */
+@resultImageFloat: right;
+@resultImageBackground: none;
+@resultImageWidth: 5em;
+@resultImageHeight: 3em;
+@resultImageBorderRadius: 0.25em;
+@resultImageMargin: 0em 6em 0em 0em;
+
+/* Result Content */
+@resultTitleFont: @headerFont;
+@resultTitleMargin: -@headerLineHeightOffset 0em 0em;
+@resultTitleFontWeight: bold;
+@resultTitleFontSize: @relativeMedium;
+@resultTitleColor: @darkTextColor;
+
+/* Description */
+@resultDescriptionFontSize: @relativeSmall;
+@resultDescriptionDistance: 0;
+@resultDescriptionColor: @lightTextColor;
+
+/* Price */
+@resultPriceFloat: right;
+@resultPriceColor: @green;
+
+/* Special Message */
+@messageVerticalPadding: 1em;
+@messageHorizontalPadding: 1em;
+@messageHeaderFontSize: @medium;
+@messageHeaderFontWeight: bold;
+@messageHeaderColor: @textColor;
+@messageDescriptionDistance: 0.25rem;
+@messageDescriptionFontSize: 1em;
+@messageDescriptionColor: @textColor;
+
+/* All Results Link */
+@actionBorder: none;
+@actionBackground: @darkWhite;
+@actionPadding: @relativeSmall @relativeMedium;
+@actionColor: @textColor;
+@actionFontWeight: bold;
+@actionAlign: center;
+
+
+/*******************************
+ States
+*******************************/
+
+/* Focus */
+@promptFocusBackground: @promptBackground;
+@promptFocusBorderColor: @selectedBorderColor;
+@promptFocusColor: @selectedTextColor;
+
+/* Hover */
+@resultHoverBackground: @offWhite;
+@actionHoverBackground: #E0E0E0;
+
+/* Loading */
+@invertedLoaderFillColor: rgba(0, 0, 0, 0.15);
+
+/* Active Category */
+@categoryActiveBackground: @darkWhite;
+@categoryNameActiveColor: @textColor;
+
+/* Active Result */
+@resultActiveBorderLeft: @internalBorderColor;
+@resultActiveBackground: @darkWhite;
+@resultActiveBoxShadow: none;
+@resultActiveTitleColor: @darkTextColor;
+@resultActiveDescriptionColor: @darkTextColor;
+@resultsZIndex: 998;
+
+
+/*******************************
+ Types
+*******************************/
+
+/* Selection */
+@selectionPromptBorderRadius: @defaultBorderRadius;
+
+@selectionCloseTop: 0em;
+@selectionCloseTransition:
+ color @defaultDuration @defaultEasing,
+ opacity @defaultDuration @defaultEasing
+;
+@selectionCloseRight: 0em;
+@selectionCloseIconOpacity: 0.8;
+@selectionCloseIconColor: '';
+@selectionCloseIconHoverOpacity: 1;
+@selectionCloseIconHoverColor: @red;
+
+@selectionCloseIconInputRight: 1.85714em;
+
+/* Category */
+@categoryBackground: @darkWhite;
+@categoryBoxShadow: none;
+@categoryDivider: 1px solid @internalBorderColor;
+@categoryTransition:
+ background @defaultDuration @defaultEasing,
+ border-color @defaultDuration @defaultEasing
+;
+
+@categoryResultsWidth: 28em;
+
+@categoryResultBackground: @white;
+@categoryResultLeftBorder: 1px solid @borderColor;
+@categoryResultDivider: @resultDivider;
+@categoryResultLastDivider: none;
+@categoryResultPadding: @resultPadding;
+@categoryResultTransition: @categoryTransition;
+
+@categoryNameWidth: 100px;
+@categoryNameBackground: transparent;
+@categoryNameFont: @pageFont;
+@categoryNameFontSize: 1em;
+@categoryNameFloat: left;
+@categoryNamePadding: 0.4em 1em;
+@categoryNameFontWeight: bold;
+@categoryNameColor: @lightTextColor;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/shape.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/shape.overrides b/semantic/src/themes/default/modules/shape.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/shape.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/shape.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/shape.variables b/semantic/src/themes/default/modules/shape.variables
new file mode 100644
index 0000000..332c685
--- /dev/null
+++ b/semantic/src/themes/default/modules/shape.variables
@@ -0,0 +1,40 @@
+/*******************************
+ Shape
+*******************************/
+
+@display: inline-block;
+
+/* Animating */
+@perspective: 2000px;
+
+@duration: 0.6s;
+@easing: ease-in-out;
+
+@hiddenSideOpacity: 0.6;
+@animatingZIndex: 100;
+
+@transition:
+ transform @duration @easing,
+ left @duration @easing,
+ width @duration @easing,
+ height @duration @easing
+;
+@sideTransition: opacity @duration @easing;
+@backfaceVisibility: hidden;
+
+/* Side */
+@sideMargin: 0em;
+
+/*--------------
+ Types
+---------------*/
+
+/* Cube */
+@cubeSize: 15em;
+@cubeBackground: #E6E6E6;
+@cubePadding: 2em;
+@cubeTextColor: @textColor;
+@cubeBoxShadow: 0px 0px 2px rgba(0, 0, 0, 0.3);
+
+@cubeTextAlign: center;
+@cubeFontSize: 2em;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/sidebar.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/sidebar.overrides b/semantic/src/themes/default/modules/sidebar.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/sidebar.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/sidebar.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/sidebar.variables b/semantic/src/themes/default/modules/sidebar.variables
new file mode 100644
index 0000000..e38f70e
--- /dev/null
+++ b/semantic/src/themes/default/modules/sidebar.variables
@@ -0,0 +1,45 @@
+/*******************************
+ Sidebar
+*******************************/
+
+/*-------------------
+ Content
+--------------------*/
+
+/* Animation */
+@perspective: 1500px;
+@duration: 500ms;
+@easing: @defaultEasing;
+
+/* Dimmer */
+@dimmerColor: rgba(0, 0, 0, 0.4);
+@dimmerTransition: opacity @duration;
+
+/* Color below page */
+@canvasBackground: @lightBlack;
+
+/* Shadow */
+@boxShadow: 0px 0px 20px @borderColor;
+@horizontalBoxShadow: @boxShadow;
+@verticalBoxShadow: @boxShadow;
+
+/* Layering */
+@bottomLayer: 1;
+@middleLayer: 2;
+@fixedLayer: 101;
+@topLayer: 102;
+@dimmerLayer: 1000;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Width */
+@veryThinWidth: 60px;
+@thinWidth: 150px;
+@width: 260px;
+@wideWidth: 350px;
+@veryWideWidth: 475px;
+
+/* Height */
+@height: 36px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/sticky.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/sticky.overrides b/semantic/src/themes/default/modules/sticky.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/sticky.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/sticky.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/sticky.variables b/semantic/src/themes/default/modules/sticky.variables
new file mode 100644
index 0000000..083c364
--- /dev/null
+++ b/semantic/src/themes/default/modules/sticky.variables
@@ -0,0 +1,7 @@
+/*******************************
+ Sticky
+*******************************/
+
+@transitionDuration: @defaultDuration;
+@transition: none;
+@zIndex: 800;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/tab.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/tab.overrides b/semantic/src/themes/default/modules/tab.overrides
new file mode 100644
index 0000000..354d6f9
--- /dev/null
+++ b/semantic/src/themes/default/modules/tab.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Tab Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/tab.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/tab.variables b/semantic/src/themes/default/modules/tab.variables
new file mode 100644
index 0000000..7d0a5c6
--- /dev/null
+++ b/semantic/src/themes/default/modules/tab.variables
@@ -0,0 +1,11 @@
+/*******************************
+ Tab
+*******************************/
+
+/* Loading */
+@loadingMinHeight: 250px;
+@loadingContentPosition: relative;
+@loadingContentOffset: -10000px;
+
+@loaderDistanceFromTop: 100px;
+@loaderSize: 2.5em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/transition.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/transition.overrides b/semantic/src/themes/default/modules/transition.overrides
new file mode 100644
index 0000000..1ceb8c0
--- /dev/null
+++ b/semantic/src/themes/default/modules/transition.overrides
@@ -0,0 +1,910 @@
+/*******************************
+ Transitions
+*******************************/
+
+/*
+ Some transitions adapted from Animate CSS
+ https://github.com/daneden/animate.css
+
+ Additional transitions adapted from Glide
+ by Nick Pettit - https://github.com/nickpettit/glide
+*/
+
+/*--------------
+ Browse
+---------------*/
+
+.transition.browse {
+ animation-duration: 500ms;
+}
+.transition.browse.in {
+ animation-name: browseIn;
+}
+.transition.browse.out,
+.transition.browse.left.out {
+ animation-name: browseOutLeft;
+}
+.transition.browse.right.out {
+ animation-name: browseOutRight;
+}
+
+/* In */
+@keyframes browseIn {
+ 0% {
+ transform: scale(0.8) translateZ(0px);
+ z-index: -1;
+ }
+ 10% {
+ transform: scale(0.8) translateZ(0px);
+ z-index: -1;
+ opacity: 0.7;
+ }
+ 80% {
+ transform: scale(1.05) translateZ(0px);
+ opacity: 1;
+ z-index: 999;
+ }
+ 100% {
+ transform: scale(1) translateZ(0px);
+ z-index: 999;
+ }
+}
+
+/* Out */
+@keyframes browseOutLeft {
+ 0% {
+ z-index: 999;
+ transform: translateX(0%) rotateY(0deg) rotateX(0deg);
+ }
+ 50% {
+ z-index: -1;
+ transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);
+ }
+ 80% {
+ opacity: 1;
+ }
+ 100% {
+ z-index: -1;
+ transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);
+ opacity: 0;
+ }
+}
+@keyframes browseOutRight {
+ 0% {
+ z-index: 999;
+ transform: translateX(0%) rotateY(0deg) rotateX(0deg);
+ }
+ 50% {
+ z-index: 1;
+ transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);
+ }
+ 80% {
+ opacity: 1;
+ }
+ 100% {
+ z-index: 1;
+ transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);
+ opacity: 0;
+ }
+}
+
+
+/*--------------
+ Drop
+---------------*/
+
+.drop.transition {
+ transform-origin: top center;
+ animation-duration: 400ms;
+ animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);
+}
+.drop.transition.in {
+ animation-name: dropIn;
+}
+.drop.transition.out {
+ animation-name: dropOut;
+}
+
+/* Drop */
+@keyframes dropIn {
+ 0% {
+ opacity: 0;
+ transform: scale(0);
+ }
+ 100% {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+@keyframes dropOut {
+ 0% {
+ opacity: 1;
+ transform: scale(1);
+ }
+ 100% {
+ opacity: 0;
+ transform: scale(0);
+ }
+}
+
+/*--------------
+ Fade
+---------------*/
+
+.transition.fade.in {
+ animation-name: fadeIn;
+}
+.transition[class*="fade up"].in {
+ animation-name: fadeInUp;
+}
+.transition[class*="fade down"].in {
+ animation-name: fadeInDown;
+}
+.transition[class*="fade left"].in {
+ animation-name: fadeInLeft;
+}
+.transition[class*="fade right"].in {
+ animation-name: fadeInRight;
+}
+
+.transition.fade.out {
+ animation-name: fadeOut;
+}
+.transition[class*="fade up"].out {
+ animation-name: fadeOutUp;
+}
+.transition[class*="fade down"].out {
+ animation-name: fadeOutDown;
+}
+.transition[class*="fade left"].out {
+ animation-name: fadeOutLeft;
+}
+.transition[class*="fade right"].out {
+ animation-name: fadeOutRight;
+}
+
+/* In */
+@keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ transform: translateY(10%);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+}
+@keyframes fadeInDown {
+ 0% {
+ opacity: 0;
+ transform: translateY(-10%);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+}
+@keyframes fadeInLeft {
+ 0% {
+ opacity: 0;
+ transform: translateX(10%);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateX(0%);
+ }
+}
+@keyframes fadeInRight {
+ 0% {
+ opacity: 0;
+ transform: translateX(-10%);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateX(0%);
+ }
+}
+
+/* Out */
+@keyframes fadeOut {
+ 0% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+}
+@keyframes fadeOutUp {
+ 0% {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+ 100% {
+ opacity: 0;
+ transform: translateY(5%);
+ }
+}
+@keyframes fadeOutDown {
+ 0% {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+ 100% {
+ opacity: 0;
+ transform: translateY(-5%);
+ }
+}
+@keyframes fadeOutLeft {
+ 0% {
+ opacity: 1;
+ transform: translateX(0%);
+ }
+ 100% {
+ opacity: 0;
+ transform: translateX(5%);
+ }
+}
+@keyframes fadeOutRight {
+ 0% {
+ opacity: 1;
+ transform: translateX(0%);
+ }
+ 100% {
+ opacity: 0;
+ transform: translateX(-5%);
+ }
+}
+
+/*--------------
+ Flips
+---------------*/
+
+.flip.transition.in,
+.flip.transition.out {
+ animation-duration: 600ms;
+}
+.horizontal.flip.transition.in {
+ animation-name: horizontalFlipIn;
+}
+.horizontal.flip.transition.out {
+ animation-name: horizontalFlipOut;
+}
+.vertical.flip.transition.in {
+ animation-name: verticalFlipIn;
+}
+.vertical.flip.transition.out {
+ animation-name: verticalFlipOut;
+}
+
+/* In */
+@keyframes horizontalFlipIn {
+ 0% {
+ transform: perspective(2000px) rotateY(-90deg);
+ opacity: 0;
+ }
+ 100% {
+ transform: perspective(2000px) rotateY(0deg);
+ opacity: 1;
+ }
+}
+@keyframes verticalFlipIn {
+ 0% {
+ transform: perspective(2000px) rotateX(-90deg);
+ opacity: 0;
+ }
+ 100% {
+ transform: perspective(2000px) rotateX(0deg);
+ opacity: 1;
+ }
+}
+
+/* Out */
+@keyframes horizontalFlipOut {
+ 0% {
+ transform: perspective(2000px) rotateY(0deg);
+ opacity: 1;
+ }
+ 100% {
+ transform: perspective(2000px) rotateY(90deg);
+ opacity: 0;
+ }
+}
+@keyframes verticalFlipOut {
+ 0% {
+ transform: perspective(2000px) rotateX(0deg);
+ opacity: 1;
+ }
+ 100% {
+ transform: perspective(2000px) rotateX(-90deg);
+ opacity: 0;
+ }
+}
+
+/*--------------
+ Scale
+---------------*/
+
+.scale.transition.in {
+ animation-name: scaleIn;
+}
+.scale.transition.out {
+ animation-name: scaleOut;
+}
+
+@keyframes scaleIn {
+ 0% {
+ opacity: 0;
+ transform: scale(0.8);
+ }
+ 100% {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+/* Out */
+@keyframes scaleOut {
+ 0% {
+ opacity: 1;
+ transform: scale(1);
+ }
+ 100% {
+ opacity: 0;
+ transform: scale(0.9);
+ }
+}
+
+
+/*--------------
+ Fly
+---------------*/
+
+/* Inward */
+.transition.fly {
+ animation-duration: 0.6s;
+ transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+}
+.transition.fly.in {
+ animation-name: flyIn;
+}
+.transition[class*="fly up"].in {
+ animation-name: flyInUp;
+}
+.transition[class*="fly down"].in {
+ animation-name: flyInDown;
+}
+.transition[class*="fly left"].in {
+ animation-name: flyInLeft;
+}
+.transition[class*="fly right"].in {
+ animation-name: flyInRight;
+}
+
+/* Outward */
+.transition.fly.out {
+ animation-name: flyOut;
+}
+.transition[class*="fly up"].out {
+ animation-name: flyOutUp;
+}
+.transition[class*="fly down"].out {
+ animation-name: flyOutDown;
+}
+.transition[class*="fly left"].out {
+ animation-name: flyOutLeft;
+}
+.transition[class*="fly right"].out {
+ animation-name: flyOutRight;
+}
+
+/* In */
+@keyframes flyIn {
+ 0% {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+ 20% {
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+ 40% {
+ transform: scale3d(.9, .9, .9);
+ }
+ 60% {
+ opacity: 1;
+ transform: scale3d(1.03, 1.03, 1.03);
+ }
+ 80% {
+ transform: scale3d(.97, .97, .97);
+ }
+ 100% {
+ opacity: 1;
+ transform: scale3d(1, 1, 1);
+ }
+}
+@keyframes flyInUp {
+ 0% {
+ opacity: 0;
+ transform: translate3d(0, 1500px, 0);
+ }
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+ 75% {
+ transform: translate3d(0, 10px, 0);
+ }
+ 90% {
+ transform: translate3d(0, -5px, 0);
+ }
+ 100% {
+ transform: translate3d(0, 0, 0);
+ }
+}
+@keyframes flyInDown {
+ 0% {
+ opacity: 0;
+ transform: translate3d(0, -1500px, 0);
+ }
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, 25px, 0);
+ }
+ 75% {
+ transform: translate3d(0, -10px, 0);
+ }
+ 90% {
+ transform: translate3d(0, 5px, 0);
+ }
+ 100% {
+ transform: none;
+ }
+}
+@keyframes flyInLeft {
+ 0% {
+ opacity: 0;
+ transform: translate3d(1500px, 0, 0);
+ }
+ 60% {
+ opacity: 1;
+ transform: translate3d(-25px, 0, 0);
+ }
+ 75% {
+ transform: translate3d(10px, 0, 0);
+ }
+ 90% {
+ transform: translate3d(-5px, 0, 0);
+ }
+ 100% {
+ transform: none;
+ }
+}
+@keyframes flyInRight {
+ 0% {
+ opacity: 0;
+ transform: translate3d(-1500px, 0, 0);
+ }
+ 60% {
+ opacity: 1;
+ transform: translate3d(25px, 0, 0);
+ }
+ 75% {
+ transform: translate3d(-10px, 0, 0);
+ }
+ 90% {
+ transform: translate3d(5px, 0, 0);
+ }
+ 100% {
+ transform: none;
+ }
+}
+
+/* Out */
+@keyframes flyOut {
+ 20% {
+ transform: scale3d(.9, .9, .9);
+ }
+ 50%, 55% {
+ opacity: 1;
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+ 100% {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+}
+@keyframes flyOutUp {
+ 20% {
+ transform: translate3d(0, 10px, 0);
+ }
+ 40%, 45% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+ 100% {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+@keyframes flyOutDown {
+ 20% {
+ transform: translate3d(0, -10px, 0);
+ }
+ 40%, 45% {
+ opacity: 1;
+ transform: translate3d(0, 20px, 0);
+ }
+ 100% {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+@keyframes flyOutRight {
+ 20% {
+ opacity: 1;
+ transform: translate3d(20px, 0, 0);
+ }
+ 100% {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+@keyframes flyOutLeft {
+ 20% {
+ opacity: 1;
+ transform: translate3d(-20px, 0, 0);
+ }
+ 100% {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+/*--------------
+ Slide
+---------------*/
+
+.transition.slide.in,
+.transition[class*="slide down"].in {
+ animation-name: slideInY;
+ transform-origin: top center;
+}
+.transition[class*="slide up"].in {
+ animation-name: slideInY;
+ transform-origin: bottom center;
+}
+.transition[class*="slide left"].in {
+ animation-name: slideInX;
+ transform-origin: center right;
+}
+.transition[class*="slide right"].in {
+ animation-name: slideInX;
+ transform-origin: center left;
+}
+
+.transition.slide.out,
+.transition[class*="slide down"].out {
+ animation-name: slideOutY;
+ transform-origin: top center;
+}
+.transition[class*="slide up"].out {
+ animation-name: slideOutY;
+ transform-origin: bottom center;
+}
+.transition[class*="slide left"].out {
+ animation-name: slideOutX;
+ transform-origin: center right;
+}
+.transition[class*="slide right"].out {
+ animation-name: slideOutX;
+ transform-origin: center left;
+}
+
+/* In */
+@keyframes slideInY {
+ 0% {
+ opacity: 0;
+ transform: scaleY(0);
+ }
+ 100% {
+ opacity: 1;
+ transform: scaleY(1);
+ }
+}
+@keyframes slideInX {
+ 0% {
+ opacity: 0;
+ transform: scaleX(0);
+ }
+ 100% {
+ opacity: 1;
+ transform: scaleX(1);
+ }
+}
+
+/* Out */
+@keyframes slideOutY {
+ 0% {
+ opacity: 1;
+ transform: scaleY(1);
+ }
+ 100% {
+ opacity: 0;
+ transform: scaleY(0);
+ }
+}
+@keyframes slideOutX {
+ 0% {
+ opacity: 1;
+ transform: scaleX(1);
+ }
+ 100% {
+ opacity: 0;
+ transform: scaleX(0);
+ }
+}
+
+
+/*--------------
+ Swing
+---------------*/
+
+.transition.swing {
+ animation-duration: 800ms;
+}
+
+.transition[class*="swing down"].in {
+ animation-name: swingInX;
+ transform-origin: top center;
+}
+.transition[class*="swing up"].in {
+ animation-name: swingInX;
+ transform-origin: bottom center;
+}
+.transition[class*="swing left"].in {
+ animation-name: swingInY;
+ transform-origin: center right;
+}
+.transition[class*="swing right"].in {
+ animation-name: swingInY;
+ transform-origin: center left;
+}
+
+.transition.swing.out,
+.transition[class*="swing down"].out {
+ animation-name: swingOutX;
+ transform-origin: top center;
+}
+.transition[class*="swing up"].out {
+ animation-name: swingOutX;
+ transform-origin: bottom center;
+}
+.transition[class*="swing left"].out {
+ animation-name: swingOutY;
+ transform-origin: center right;
+}
+.transition[class*="swing right"].out {
+ animation-name: swingOutY;
+ transform-origin: center left;
+}
+
+/* In */
+@keyframes swingInX {
+ 0% {
+ transform: perspective(1000px) rotateX(90deg);
+ opacity: 0;
+ }
+ 40% {
+ transform: perspective(1000px) rotateX(-30deg);
+ opacity: 1;
+ }
+ 60% {
+ transform: perspective(1000px) rotateX(15deg);
+ }
+ 80% {
+ transform: perspective(1000px) rotateX(-7.5deg);
+ }
+ 100% {
+ transform: perspective(1000px) rotateX(0deg);
+ }
+}
+@keyframes swingInY {
+ 0% {
+ transform: perspective(1000px) rotateY(-90deg);
+ opacity: 0;
+ }
+ 40% {
+ transform: perspective(1000px) rotateY(30deg);
+ opacity: 1;
+ }
+ 60% {
+ transform: perspective(1000px) rotateY(-17.5deg);
+ }
+ 80% {
+ transform: perspective(1000px) rotateY(7.5deg);
+ }
+ 100% {
+ transform: perspective(1000px) rotateY(0deg);
+ }
+}
+
+/* Out */
+@keyframes swingOutX {
+ 0% {
+ transform: perspective(1000px) rotateX(0deg);
+ }
+ 40% {
+ transform: perspective(1000px) rotateX(-7.5deg);
+ }
+ 60% {
+ transform: perspective(1000px) rotateX(17.5deg);
+ }
+ 80% {
+ transform: perspective(1000px) rotateX(-30deg);
+ opacity: 1;
+ }
+ 100% {
+ transform: perspective(1000px) rotateX(90deg);
+ opacity: 0;
+ }
+}
+@keyframes swingOutY {
+ 0% {
+ transform: perspective(1000px) rotateY(0deg);
+ }
+ 40% {
+ transform: perspective(1000px) rotateY(7.5deg);
+ }
+ 60% {
+ transform: perspective(1000px) rotateY(-10deg);
+ }
+ 80% {
+ transform: perspective(1000px) rotateY(30deg);
+ opacity: 1;
+ }
+ 100% {
+ transform: perspective(1000px) rotateY(-90deg);
+ opacity: 0;
+ }
+}
+
+
+/*******************************
+ Static Animations
+*******************************/
+
+/*--------------
+ Emphasis
+---------------*/
+
+.flash.transition {
+ animation-duration: 750ms;
+ animation-name: flash;
+}
+.shake.transition {
+ animation-duration: 750ms;
+ animation-name: shake;
+}
+.bounce.transition {
+ animation-duration: 750ms;
+ animation-name: bounce;
+}
+.tada.transition {
+ animation-duration: 750ms;
+ animation-name: tada;
+}
+.pulse.transition {
+ animation-duration: 500ms;
+ animation-name: pulse;
+}
+.jiggle.transition {
+ animation-duration: 750ms;
+ animation-name: jiggle;
+}
+
+/* Flash */
+@keyframes flash {
+ 0%, 50%, 100% {
+ opacity: 1;
+ }
+ 25%, 75% {
+ opacity: 0;
+ }
+}
+
+/* Shake */
+@keyframes shake {
+ 0%, 100% {
+ transform: translateX(0);
+ }
+ 10%, 30%, 50%, 70%, 90% {
+ transform: translateX(-10px);
+ }
+ 20%, 40%, 60%, 80% {
+ transform: translateX(10px);
+ }
+}
+
+/* Bounce */
+@keyframes bounce {
+ 0%, 20%, 50%, 80%, 100% {
+ transform: translateY(0);
+ }
+ 40% {
+ transform: translateY(-30px);
+ }
+ 60% {
+ transform: translateY(-15px);
+ }
+}
+
+/* Tada */
+@keyframes tada {
+ 0% {
+ transform: scale(1);
+ }
+ 10%, 20% {
+ transform: scale(0.9) rotate(-3deg);
+ }
+ 30%, 50%, 70%, 90% {
+ transform: scale(1.1) rotate(3deg);
+ }
+ 40%, 60%, 80% {
+ transform: scale(1.1) rotate(-3deg);
+ }
+ 100% {
+ transform: scale(1) rotate(0);
+ }
+}
+
+/* Pulse */
+@keyframes pulse {
+ 0% {
+ transform: scale(1);
+ opacity: 1;
+ }
+ 50% {
+ transform: scale(0.9);
+ opacity: 0.7;
+ }
+ 100% {
+ transform: scale(1);
+ opacity: 1;
+ }
+
+}
+
+/* Rubberband */
+@keyframes jiggle {
+ 0% {
+ transform: scale3d(1, 1, 1);
+ }
+ 30% {
+ transform: scale3d(1.25, 0.75, 1);
+ }
+ 40% {
+ transform: scale3d(0.75, 1.25, 1);
+ }
+ 50% {
+ transform: scale3d(1.15, 0.85, 1);
+ }
+ 65% {
+ transform: scale3d(.95, 1.05, 1);
+ }
+ 75% {
+ transform: scale3d(1.05, .95, 1);
+ }
+ 100% {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/transition.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/transition.variables b/semantic/src/themes/default/modules/transition.variables
new file mode 100644
index 0000000..d8b7d37
--- /dev/null
+++ b/semantic/src/themes/default/modules/transition.variables
@@ -0,0 +1,10 @@
+/*******************************
+ Transition
+*******************************/
+
+@transitionDefaultEasing: @defaultEasing;
+@transitionDefaultFill: both;
+@transitionDefaultDuration: 300ms;
+
+@use3DAcceleration: translateZ(0);
+@backfaceVisibility: hidden;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/ad.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/ad.overrides b/semantic/src/themes/default/views/ad.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/views/ad.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/ad.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/ad.variables b/semantic/src/themes/default/views/ad.variables
new file mode 100644
index 0000000..19644d5
--- /dev/null
+++ b/semantic/src/themes/default/views/ad.variables
@@ -0,0 +1,13 @@
+/*******************************
+ Advertisement
+*******************************/
+
+@margin: 1em 0em;
+@overflow: hidden;
+
+@testBackground: @lightBlack;
+@testColor: @white;
+@testFontWeight: bold;
+@testText: 'Ad';
+@testFontSize: @relativeMedium;
+@testMobileFontSize: @relativeTiny;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/card.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/card.overrides b/semantic/src/themes/default/views/card.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/views/card.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/card.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/card.variables b/semantic/src/themes/default/views/card.variables
new file mode 100644
index 0000000..cd71b85
--- /dev/null
+++ b/semantic/src/themes/default/views/card.variables
@@ -0,0 +1,220 @@
+/*******************************
+ Card
+*******************************/
+
+/*-------------------
+ View
+--------------------*/
+
+/* Shadow */
+@shadowDistance: 1px;
+@shadowBoxShadow: 0px @shadowDistance 3px 0px @solidBorderColor;
+
+/* Card */
+@fontFamily: @pageFont;
+@display: flex;
+@background: @white;
+@borderRadius: @defaultBorderRadius;
+@margin: 1em 0em;
+@minHeight: 0px;
+@padding: 0em;
+@width: 290px;
+@borderWidth: 1px;
+@borderShadow: 0px 0px 0px @borderWidth @solidBorderColor;
+@boxShadow:
+ @shadowBoxShadow,
+ @borderShadow
+;
+@border: none;
+@zIndex: '';
+@transition:
+ box-shadow @defaultDuration @defaultEasing,
+ transform @defaultDuration @defaultEasing
+;
+
+/* Card Group */
+@horizontalSpacing: 1em;
+@rowSpacing: 1.75em;
+
+@groupMargin: -(@rowSpacing / 2) -(@horizontalSpacing / 2);
+@groupDisplay: flex;
+
+@groupCardFloat: none;
+@groupCardDisplay: flex;
+@groupCardMargin: (@rowSpacing / 2) (@horizontalSpacing / 2);
+
+/* Consecutive Cards */
+@consecutiveGroupDistance: (@rowSpacing / 2);
+
+/*-------------------
+ Content
+--------------------*/
+
+
+/* Image */
+@imageBackground: @transparentBlack;
+@imagePadding: 0em;
+@imageBorder: none;
+@imageBoxShadow: none;
+@imageBorder: none;
+
+/* Content */
+@contentDivider: @borderWidth solid @internalBorderColor;
+@contentMargin: 0em;
+@contentBackground: none;
+@contentPadding: 1em 1em;
+@contentFontSize: 1em;
+@contentBorderRadius: 0em;
+@contentBoxShadow: none;
+@contentBorder: none;
+
+
+/* Header */
+@headerMargin: '';
+@headerFontWeight: bold;
+@headerFontSize: @relativeBig;
+@headerLineHeightOffset: -(@lineHeight - 1em) / 2;
+@headerColor: @darkTextColor;
+
+/* Metadata */
+@metaFontSize: @relativeMedium;
+@metaSpacing: 0.3em;
+@metaColor: @lightTextColor;
+
+/* Icons */
+@actionOpacity: 0.75;
+@actionHoverOpacity: 1;
+@actionTransition: color @defaultDuration @defaultEasing;
+
+@starColor: #FFB70A;
+@starActiveColor: #FFE623;
+
+@likeColor: #FF2733;
+@likeActiveColor: #FF2733;
+
+/* Links */
+@contentLinkColor: '';
+@contentLinkHoverColor: '';
+@contentLinkTransition: color @defaultDuration @defaultEasing;
+
+@headerLinkColor: @headerColor;
+@headerLinkHoverColor: @linkHoverColor;
+
+@metaLinkColor: @lightTextColor;
+@metaLinkHoverColor: @textColor;
+
+/* Description */
+@descriptionDistance: 0.5em;
+@descriptionColor: rgba(0, 0, 0, 0.68);
+
+/* Content Image */
+@contentImageWidth: '';
+@contentImageVerticalAlign: middle;
+
+/* Avatar Image */
+@avatarSize: 2em;
+@avatarBorderRadius: @circularRadius;
+
+/* Paragraph */
+@paragraphDistance: 0.5em;
+
+/* Dimmer */
+@dimmerZIndex: 10;
+@dimmerColor: '';
+
+/* Additional Content */
+@extraDivider: 1px solid rgba(0, 0, 0, 0.05);
+@extraBackground: none;
+@extraPosition: static;
+@extraWidth: auto;
+@extraTop: 0em;
+@extraLeft: 0em;
+@extraMargin: 0em 0em;
+@extraPadding: 0.75em 1em;
+@extraBoxShadow: none;
+@extraColor: @lightTextColor;
+@extraTransition: color @defaultDuration @defaultEasing;
+
+/* Extra Links */
+@extraLinkColor: @unselectedTextColor;
+@extraLinkHoverColor: @linkHoverColor;
+
+/* Buttons */
+@buttonMargin: 0px -@borderWidth;
+@buttonWidth: ~"calc(100% + "(@borderWidth * 2)~")";
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Link */
+@linkHoverBackground: @white;
+@linkHoverBorder: @border;
+@linkHoverZIndex: 5;
+@linkHoverRaiseDistance: 3px;
+@linkHoverTransform: translateY(-@linkHoverRaiseDistance);
+
+@shadowHoverBoxShadow: 0px @shadowDistance @linkHoverRaiseDistance 0px @solidSelectedBorderColor;
+@linkHoverBoxShadow:
+ @shadowHoverBoxShadow,
+ @borderShadow
+;
+
+
+/* Raised */
+@raisedShadow:
+ @borderShadow,
+ @floatingShadow
+;
+@raisedShadowHover:
+ @borderShadow,
+ @floatingShadowHover
+;
+
+/* Card Count */
+@wideCardSpacing: 1em;
+@cardSpacing: 0.75em;
+@smallCardSpacing: 0.5em;
+
+@oneCardSpacing: 0em;
+@twoCardSpacing: @wideCardSpacing;
+@threeCardSpacing: @wideCardSpacing;
+@fourCardSpacing: @cardSpacing;
+@fiveCardSpacing: @cardSpacing;
+@sixCardSpacing: @cardSpacing;
+@sevenCardSpacing: @smallCardSpacing;
+@eightCardSpacing: @smallCardSpacing;
+@nineCardSpacing: @smallCardSpacing;
+@tenCardSpacing: @smallCardSpacing;
+
+@oneCard: @oneColumn;
+@oneCardOffset: 0em;
+@twoCard: ~"calc("@twoColumn~" - "(@twoCardSpacing * 2)~")";
+@twoCardOffset: -@twoCardSpacing;
+@threeCard: ~"calc("@threeColumn~" - "(@threeCardSpacing * 2)~")";
+@threeCardOffset: -@threeCardSpacing;
+@fourCard: ~"calc("@fourColumn~" - "(@fourCardSpacing * 2)~")";
+@fourCardOffset: -@fourCardSpacing;
+@fiveCard: ~"calc("@fiveColumn~" - "(@fiveCardSpacing * 2)~")";
+@fiveCardOffset: -@fiveCardSpacing;
+@sixCard: ~"calc("@sixColumn~" - "(@sixCardSpacing * 2)~")";
+@sixCardOffset: -@sixCardSpacing;
+@sevenCard: ~"calc("@sevenColumn~" - "(@sevenCardSpacing * 2)~")";
+@sevenCardOffset: -@sevenCardSpacing;
+@eightCard: ~"calc("@eightColumn~" - "(@sevenCardSpacing * 2)~")";
+@eightCardOffset: -@sevenCardSpacing;
+@nineCard: ~"calc("@nineColumn~" - "(@nineCardSpacing * 2)~")";
+@nineCardOffset: -@nineCardSpacing;
+@tenCard: ~"calc("@tenColumn~" - "(@tenCardSpacing * 2)~")";
+@tenCardOffset: -@tenCardSpacing;
+
+/* Stackable */
+@stackableRowSpacing: 1em;
+@stackableCardSpacing: 1em;
+@stackableMargin: ~"calc("@oneColumn~" - "(@stackableCardSpacing * 2)~")";
+
+/* Sizes */
+@medium: 1em;
+
+/* Colored */
+@coloredShadowDistance: 2px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/comment.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/comment.overrides b/semantic/src/themes/default/views/comment.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/views/comment.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/comment.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/comment.variables b/semantic/src/themes/default/views/comment.variables
new file mode 100644
index 0000000..7407f91
--- /dev/null
+++ b/semantic/src/themes/default/views/comment.variables
@@ -0,0 +1,104 @@
+/*******************************
+ Comments
+*******************************/
+
+
+/*-------------------
+ View
+--------------------*/
+
+@maxWidth: 650px;
+@margin: 1.5em 0em;
+
+/*-------------------
+ Elements
+--------------------*/
+
+/* Comment */
+@commentBackground: none;
+@commentMargin: 0.5em 0em 0em;
+@commentPadding: 0.5em 0em 0em;
+@commentDivider: none;
+@commentBorder: none;
+@commentLineHeight: 1.2;
+@firstCommentMargin: 0em;
+@firstCommentPadding: 0em;
+
+/* Nested Comment */
+@nestedCommentsMargin: 0em 0em 0.5em 0.5em;
+@nestedCommentsPadding: 1em 0em 1em 1em;
+
+@nestedCommentDivider: none;
+@nestedCommentBorder: none;
+@nestedCommentBackground: none;
+
+/* Avatar */
+@avatarDisplay: block;
+@avatarFloat: left;
+@avatarWidth: 2.5em;
+@avatarHeight: auto;
+@avatarSpacing: 1em;
+@avatarMargin: (@commentLineHeight - 1em) 0em 0em;
+@avatarBorderRadius: 0.25rem;
+
+/* Content */
+@contentMargin: @avatarWidth + @avatarSpacing;
+
+/* Author */
+@authorFontSize: 1em;
+@authorColor: @textColor;
+@authorHoverColor: @linkHoverColor;
+@authorFontWeight: bold;
+
+/* Metadata */
+@metadataDisplay: inline-block;
+@metadataFontSize: 0.875em;
+@metadataSpacing: 0.5em;
+@metadataContentSpacing: 0.5em;
+@metadataColor: @lightTextColor;
+
+/* Text */
+@textFontSize: 1em;
+@textMargin: 0.25em 0em 0.5em;
+@textWordWrap: break-word;
+@textLineHeight: 1.3;
+
+/* Actions */
+@actionFontSize: 0.875em;
+@actionContentDistance: 0.75em;
+@actionLinkColor: @unselectedTextColor;
+@actionLinkHoverColor: @hoveredTextColor;
+
+/* Reply */
+@replyDistance: 1em;
+@replyHeight: 12em;
+@replyFontSize: 1em;
+
+@commentReplyDistance: @replyDistance;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Threaded */
+@threadedCommentMargin: -1.5em 0 -1em (@avatarWidth / 2);
+@threadedCommentPadding: 3em 0em 2em 2.25em;
+@threadedCommentBoxShadow: -1px 0px 0px @borderColor;
+
+
+/* Minimal */
+@minimalActionPosition: absolute;
+@minimalActionTop: 0px;
+@minimalActionRight: 0px;
+@minimalActionLeft: auto;
+
+@minimalTransitionDelay: 0.1s;
+@minimalEasing: @defaultEasing;
+@minimalDuration: 0.2s;
+@minimalTransition: opacity @minimalDuration @minimalEasing;
+
+/* Sizes */
+@small: 0.9em;
+@medium: 1em;
+@large: 1.1em;
+@huge: 1.2em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/feed.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/feed.overrides b/semantic/src/themes/default/views/feed.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/views/feed.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/feed.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/feed.variables b/semantic/src/themes/default/views/feed.variables
new file mode 100644
index 0000000..9930501
--- /dev/null
+++ b/semantic/src/themes/default/views/feed.variables
@@ -0,0 +1,141 @@
+/*******************************
+ Feed
+*******************************/
+
+/*-------------------
+ Feed
+--------------------*/
+
+@margin: 1em 0em;
+
+/*-------------------
+ Elements
+--------------------*/
+
+/* Event */
+@eventWidth: 100%;
+@eventPadding: @3px 0em;
+@eventMargin: 0em;
+@eventBackground: none;
+@eventDivider: none;
+
+/* Event Label */
+@labelWidth: 2.5em;
+@labelHeight: auto;
+@labelAlignSelf: stretch;
+@labelTextAlign: left;
+
+/* Icon Label */
+@iconLabelOpacity: 1;
+@iconLabelWidth: 100%;
+@iconLabelSize: 1.5em;
+@iconLabelPadding: 0.25em;
+@iconLabelBackground: none;
+@iconLabelBorderRadius: none;
+@iconLabelBorder: none;
+@iconLabelColor: rgba(0, 0, 0, 0.6);
+
+/* Image Label */
+@imageLabelWidth: 100%;
+@imageLabelHeight: auto;
+@imageLabelBorderRadius: @circularRadius;
+
+/* Content w/ Label */
+@labeledContentMargin: 0.5em 0em @relative5px @relativeLarge;
+@lastLabeledContentPadding: 0em;
+
+/* Content */
+@contentAlignSelf: stretch;
+@contentTextAlign: left;
+@contentWordWrap: break-word;
+
+/* Date */
+@dateMargin: -0.5rem 0em 0em;
+@datePadding: 0em;
+@dateColor: @lightTextColor;
+@dateFontSize: @relativeMedium;
+@dateFontWeight: normal;
+@dateFontStyle: normal;
+
+/* Summary */
+@summaryMargin: 0em;
+@summaryFontSize: @relativeMedium;
+@summaryFontWeight: bold;
+@summaryColor: @textColor;
+
+/* Summary Image */
+@summaryImageWidth: auto;
+@summaryImageHeight: 10em;
+@summaryImageMargin: -0.25em 0.25em 0em 0em;
+@summaryImageVerticalAlign: middle;
+@summaryImageBorderRadius: 0.25em;
+
+/* Summary Date */
+@summaryDateDisplay: inline-block;
+@summaryDateFloat: none;
+@summaryDateMargin: 0em 0em 0em 0.5em;
+@summaryDatePadding: 0em;
+@summaryDateFontSize: @relativeTiny;
+@summaryDateFontWeight: @dateFontWeight;
+@summaryDateFontStyle: @dateFontStyle;
+@summaryDateColor: @dateColor;
+
+/* User */
+@userFontWeight: bold;
+@userDistance: 0em;
+@userImageWidth: @summaryImageWidth;
+@userImageHeight: @summaryImageHeight;
+@userImageMargin: @summaryImageMargin;
+@userImageVerticalAlign: @summaryImageVerticalAlign;
+
+/* Extra Summary Data */
+@extraMargin: 0.5em 0em 0em;
+@extraBackground: none;
+@extraPadding: 0em;
+@extraColor: @textColor;
+
+/* Extra Images */
+@extraImageMargin: 0em 0.25em 0em 0em;
+@extraImageWidth: 6em;
+
+/* Extra Text */
+@extraTextPadding: 0em;
+@extraTextPointer: none;
+@extraTextFontSize: @relativeMedium;
+@extraTextLineHeight: @lineHeight;
+@extraTextMaxWidth: 500px;
+
+/* Metadata Group */
+@metadataDisplay: inline-block;
+@metadataFontSize: @relativeTiny;
+@metadataMargin: 0.5em 0em 0em;
+@metadataBackground: none;
+@metadataBorder: none;
+@metadataBorderRadius: 0;
+@metadataBoxShadow: none;
+@metadataPadding: 0em;
+@metadataColor: rgba(0, 0, 0, 0.6);
+
+@metadataElementSpacing: 0.75em;
+
+/* Like */
+@likeColor: '';
+@likeHoverColor: #FF2733;
+@likeActiveColor: #EF404A;
+@likeTransition: 0.2s color ease;
+
+/* Metadata Divider */
+@metadataDivider: '';
+@metadataDividerColor: rgba(0, 0, 0, 0.2);
+@metadataDividerOffset: -1em;
+
+@metadataActionCursor: pointer;
+@metadataActionOpacity: 1;
+@metadataActionColor: rgba(0, 0, 0, 0.5);
+@metadataActionTransition: color @defaultDuration @defaultEasing;
+
+@metadataActionHoverColor: @selectedTextColor;
+
+/*-------------------
+ Variations
+--------------------*/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/item.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/item.overrides b/semantic/src/themes/default/views/item.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/views/item.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/item.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/item.variables b/semantic/src/themes/default/views/item.variables
new file mode 100644
index 0000000..f474603
--- /dev/null
+++ b/semantic/src/themes/default/views/item.variables
@@ -0,0 +1,154 @@
+/*******************************
+ Item
+*******************************/
+
+/*-------------------
+ View
+--------------------*/
+
+/* Group */
+@groupMargin: 1.5em 0em;
+
+/* Item */
+@display: flex;
+@background: transparent;
+@borderRadius: 0rem;
+@minHeight: 0px;
+@padding: 0em;
+@width: 100%;
+@boxShadow: none;
+@border: none;
+@zIndex: '';
+@transition: box-shadow @defaultDuration @defaultEasing;
+
+/* Responsive */
+@itemSpacing: 1em;
+@imageWidth: 175px;
+@contentImageDistance: 1.5em;
+
+@tabletItemSpacing: 1em;
+@tabletImageWidth: 150px;
+@tabletContentImageDistance: 1em;
+
+@mobileItemSpacing: 2em;
+@mobileImageWidth: auto;
+@mobileImageMaxHeight: 250px;
+@mobileContentImageDistance: 1.5em;
+
+/*-------------------
+ Content
+--------------------*/
+
+/* Image */
+@imageDisplay: block;
+@imageFloat: none;
+@imageMaxHeight: '';
+@imageVerticalAlign: top;
+@imageMargin: 0em;
+@imagePadding: 0em;
+@imageBorder: none;
+@imageBorderRadius: 0.125rem;
+@imageBoxShadow: none;
+@imageBorder: none;
+
+/* Content */
+@contentDisplay: block;
+@contentVerticalAlign: top;
+
+@contentWidth: auto;
+@contentOffset: 0em;
+@contentBackground: none;
+@contentMargin: 0em;
+@contentPadding: 0em;
+@contentFontSize: 1em;
+@contentBorder: none;
+@contentBorderRadius: 0em;
+@contentBoxShadow: none;
+
+/* Header */
+@headerMargin: -@lineHeightOffset 0em 0em;
+@headerFontWeight: bold;
+@headerFontSize: @relativeBig;
+@headerColor: @darkTextColor;
+
+/* Metadata */
+@metaMargin: 0.5em 0em 0.5em;
+@metaFontSize: 1em;
+@metaLineHeight: 1em;
+@metaSpacing: 0.3em;
+@metaColor: rgba(0, 0, 0, 0.6);
+
+/* Icons */
+@actionOpacity: 0.75;
+@actionHoverOpacity: 1;
+@actionTransition: color @defaultDuration @defaultEasing;
+
+/* Actions */
+@favoriteColor: #FFB70A;
+@favoriteActiveColor: #FFE623;
+@likeColor: #FF2733;
+@likeActiveColor: #FF2733;
+
+/* Links */
+@headerLinkColor: @headerColor;
+@headerLinkHoverColor: @linkHoverColor;
+@metaLinkColor: @lightTextColor;
+@metaLinkHoverColor: @textColor;
+@contentLinkColor: '';
+@contentLinkHoverColor: '';
+@contentLinkTransition: color @defaultDuration @defaultEasing;
+
+
+/* Description */
+@descriptionDistance: 0.6em;
+@descriptionMaxWidth: auto;
+@descriptionFontSize: 1em;
+@descriptionLineHeight: @lineHeight;
+@descriptionColor: @textColor;
+
+/* Content Image */
+@contentImageWidth: '';
+@contentImageVerticalAlign: middle;
+
+/* Avatar Image */
+@avatarSize: @contentImageWidth;
+@avatarBorderRadius: @circularRadius;
+
+/* Paragraph */
+@paragraphDistance: 0.5em;
+
+/* Additional Content */
+@extraDivider: none;
+@extraHorizontalSpacing: 0.5rem;
+@extraRowSpacing: 0.5rem;
+
+@extraBackground: none;
+@extraDisplay: block;
+@extraPosition: relative;
+@extraMargin: (1rem - @extraRowSpacing) 0em 0em;
+@extraTop: 0em;
+@extraLeft: 0em;
+@extraWidth: 100%;
+@extraPadding: 0em 0em 0em;
+@extraBoxShadow: none;
+@extraColor: @lightTextColor;
+@extraTransition: color @defaultDuration @defaultEasing;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Relaxed */
+@relaxedItemSpacing: 1.5em;
+@veryRelaxedItemSpacing: 2em;
+
+/* Divided */
+@dividedBorder: 1px solid @borderColor;
+@dividedMargin: 0em;
+@dividedPadding: 1em 0em;
+
+@dividedFirstLastMargin: 0em;
+@dividedFirstLastPadding: 0em;
+
+/* Sizes */
+@medium: 1em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/statistic.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/statistic.overrides b/semantic/src/themes/default/views/statistic.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/views/statistic.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/views/statistic.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/views/statistic.variables b/semantic/src/themes/default/views/statistic.variables
new file mode 100644
index 0000000..9c0fcb1
--- /dev/null
+++ b/semantic/src/themes/default/views/statistic.variables
@@ -0,0 +1,98 @@
+/*******************************
+ Statistic
+*******************************/
+
+/*-------------------
+ View
+--------------------*/
+
+@margin: 1em 0em;
+@textAlign: center;
+@maxWidth: auto;
+
+/* Group */
+@horizontalSpacing: 1.5em;
+@rowSpacing: 2em;
+@groupMargin: 1em -@horizontalSpacing -@rowSpacing;
+
+/* Group Element */
+@elementMargin: 0em @horizontalSpacing @rowSpacing;
+@elementMaxWidth: @maxWidth;
+
+/*-------------------
+ Content
+--------------------*/
+
+/* Value */
+@valueFont: @pageFont;
+@valueFontWeight: normal;
+@valueLineHeight: 1em;
+@valueColor: @black;
+@valueTextTransform: uppercase;
+
+/* Label */
+@labelSize: @relativeMedium;
+@topLabelDistance: 0rem;
+@bottomLabelDistance: 0rem;
+@labelFont: @headerFont;
+@labelFontWeight: bold;
+@labelColor: @textColor;
+@labelLineHeight: @relativeLarge;
+@labelTextTransform: uppercase;
+
+/* Text */
+@textValueLineHeight: 1em;
+@textValueMinHeight: 2em;
+@textValueFontWeight: bold;
+
+/* Label Image */
+@imageHeight: 3rem;
+@imageVerticalAlign: baseline;
+
+/*-------------------
+ Types
+--------------------*/
+
+@horizontalGroupElementMargin: 1em 0em;
+@horizontalLabelDistance: 0.75em;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Floated */
+@leftFloatedMargin: 0em 2em 1em 0em;
+@rightFloatedMargin: 0em 0em 1em 2em;
+
+/* Inverted */
+@invertedValueColor: @white;
+@invertedLabelColor: @invertedTextColor;
+
+/* Item Width */
+@itemGroupMargin: 0em 0em -@rowSpacing;
+@itemMargin: 0em 0em @rowSpacing;
+
+/* Size */
+@miniTextValueSize: 1rem;
+@miniValueSize: 1.5rem;
+@miniHorizontalValueSize: 1.5rem;
+
+@tinyTextValueSize: 1rem;
+@tinyValueSize: 2rem;
+@tinyHorizontalValueSize: 2rem;
+
+@smallTextValueSize: 1rem;
+@smallValueSize: 3rem;
+@smallHorizontalValueSize: 2rem;
+
+@textValueSize: 2rem;
+@valueSize: 4rem;
+@horizontalValueSize: 3rem;
+
+@largeTextValueSize: 2.5rem;
+@largeValueSize: 5rem;
+@largeHorizontalValueSize: 4rem;
+
+@hugeTextValueSize: 2.5rem;
+@hugeValueSize: 6rem;
+@hugeHorizontalValueSize: 5rem;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/duo/elements/loader.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/duo/elements/loader.overrides b/semantic/src/themes/duo/elements/loader.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/duo/elements/loader.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/duo/elements/loader.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/duo/elements/loader.variables b/semantic/src/themes/duo/elements/loader.variables
new file mode 100644
index 0000000..0608cfd
--- /dev/null
+++ b/semantic/src/themes/duo/elements/loader.variables
@@ -0,0 +1,6 @@
+/*******************************
+ Loader
+*******************************/
+
+@shapeBorderColor: @primaryColor @primaryColor @secondaryColor @secondaryColor;
+@invertedShapeBorderColor: @lightPrimaryColor @lightPrimaryColor @lightSecondaryColor @lightSecondaryColor;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/fixed-width/collections/grid.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/fixed-width/collections/grid.overrides b/semantic/src/themes/fixed-width/collections/grid.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/fixed-width/collections/grid.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
[29/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/shape.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/shape.less b/semantic/src/definitions/modules/shape.less
new file mode 100755
index 0000000..c2c87f9
--- /dev/null
+++ b/semantic/src/definitions/modules/shape.less
@@ -0,0 +1,150 @@
+/*!
+ * # Semantic UI - Shape
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'shape';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Shape
+*******************************/
+
+.ui.shape {
+ position: relative;
+ vertical-align: top;
+ display: @display;
+ perspective: @perspective;
+ transition: @transition;
+}
+
+.ui.shape .sides {
+ transform-style: preserve-3d;
+}
+
+.ui.shape .side {
+ opacity: 1;
+ width: 100%;
+
+ margin: @sideMargin !important;
+ backface-visibility: @backfaceVisibility;
+}
+
+.ui.shape .side {
+ display: none;
+}
+
+.ui.shape .side * {
+ backface-visibility: visible !important;
+}
+
+/*******************************
+ Types
+*******************************/
+
+.ui.cube.shape .side {
+ min-width: @cubeSize;
+ height: @cubeSize;
+
+ padding: @cubePadding;
+
+ background-color: @cubeBackground;
+ color: @cubeTextColor;
+ box-shadow: @cubeBoxShadow;
+}
+.ui.cube.shape .side > .content {
+ width: 100%;
+ height: 100%;
+ display: table;
+
+ text-align: @cubeTextAlign;
+ user-select: text;
+}
+.ui.cube.shape .side > .content > div {
+ display: table-cell;
+ vertical-align: middle;
+ font-size: @cubeFontSize;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+.ui.text.shape.animating .sides {
+ position: static;
+}
+.ui.text.shape .side {
+ white-space: nowrap;
+}
+.ui.text.shape .side > * {
+ white-space: normal;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Loading
+---------------*/
+
+.ui.loading.shape {
+ position: absolute;
+ top: -9999px;
+ left: -9999px;
+}
+
+
+/*--------------
+ Animating
+---------------*/
+
+.ui.shape .animating.side {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ display: block;
+ z-index: @animatingZIndex;
+}
+.ui.shape .hidden.side {
+ opacity: @hiddenSideOpacity;
+}
+
+
+/*--------------
+ CSS
+---------------*/
+
+.ui.shape.animating .sides {
+ position: absolute;
+}
+.ui.shape.animating .sides {
+ transition: @transition;
+}
+.ui.shape.animating .side {
+ transition: @sideTransition;
+}
+
+/*--------------
+ Active
+---------------*/
+
+.ui.shape .active.side {
+ display: block;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/sidebar.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/sidebar.js b/semantic/src/definitions/modules/sidebar.js
new file mode 100644
index 0000000..ba063f8
--- /dev/null
+++ b/semantic/src/definitions/modules/sidebar.js
@@ -0,0 +1,1036 @@
+/*!
+ * # Semantic UI - Sidebar
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.sidebar = function(parameters) {
+ var
+ $allModules = $(this),
+ $window = $(window),
+ $document = $(document),
+ $html = $('html'),
+ $head = $('head'),
+
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); },
+
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.sidebar.settings, parameters)
+ : $.extend({}, $.fn.sidebar.settings),
+
+ selector = settings.selector,
+ className = settings.className,
+ namespace = settings.namespace,
+ regExp = settings.regExp,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $module = $(this),
+ $context = $(settings.context),
+
+ $sidebars = $module.children(selector.sidebar),
+ $fixed = $context.children(selector.fixed),
+ $pusher = $context.children(selector.pusher),
+ $style,
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ elementNamespace,
+ id,
+ currentScroll,
+ transitionEvent,
+
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.debug('Initializing sidebar', parameters);
+
+ module.create.id();
+
+ transitionEvent = module.get.transitionEvent();
+
+ if(module.is.ios()) {
+ module.set.ios();
+ }
+
+ // avoids locking rendering if initialized in onReady
+ if(settings.delaySetup) {
+ requestAnimationFrame(module.setup.layout);
+ }
+ else {
+ module.setup.layout();
+ }
+
+ requestAnimationFrame(function() {
+ module.setup.cache();
+ });
+
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ create: {
+ id: function() {
+ id = (Math.random().toString(16) + '000000000').substr(2,8);
+ elementNamespace = '.' + id;
+ module.verbose('Creating unique id for element', id);
+ }
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module for', $module);
+ $module
+ .off(eventNamespace)
+ .removeData(moduleNamespace)
+ ;
+ if(module.is.ios()) {
+ module.remove.ios();
+ }
+ // bound by uuid
+ $context.off(elementNamespace);
+ $window.off(elementNamespace);
+ $document.off(elementNamespace);
+ },
+
+ event: {
+ clickaway: function(event) {
+ var
+ clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),
+ clickedContext = ($context.is(event.target))
+ ;
+ if(clickedInPusher) {
+ module.verbose('User clicked on dimmed page');
+ module.hide();
+ }
+ if(clickedContext) {
+ module.verbose('User clicked on dimmable context (scaled out page)');
+ module.hide();
+ }
+ },
+ touch: function(event) {
+ //event.stopPropagation();
+ },
+ containScroll: function(event) {
+ if(element.scrollTop <= 0) {
+ element.scrollTop = 1;
+ }
+ if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {
+ element.scrollTop = element.scrollHeight - element.offsetHeight - 1;
+ }
+ },
+ scroll: function(event) {
+ if( $(event.target).closest(selector.sidebar).length === 0 ) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ bind: {
+ clickaway: function() {
+ module.verbose('Adding clickaway events to context', $context);
+ if(settings.closable) {
+ $context
+ .on('click' + elementNamespace, module.event.clickaway)
+ .on('touchend' + elementNamespace, module.event.clickaway)
+ ;
+ }
+ },
+ scrollLock: function() {
+ if(settings.scrollLock) {
+ module.debug('Disabling page scroll');
+ $window
+ .on('DOMMouseScroll' + elementNamespace, module.event.scroll)
+ ;
+ }
+ module.verbose('Adding events to contain sidebar scroll');
+ $document
+ .on('touchmove' + elementNamespace, module.event.touch)
+ ;
+ $module
+ .on('scroll' + eventNamespace, module.event.containScroll)
+ ;
+ }
+ },
+ unbind: {
+ clickaway: function() {
+ module.verbose('Removing clickaway events from context', $context);
+ $context.off(elementNamespace);
+ },
+ scrollLock: function() {
+ module.verbose('Removing scroll lock from page');
+ $document.off(elementNamespace);
+ $window.off(elementNamespace);
+ $module.off('scroll' + eventNamespace);
+ }
+ },
+
+ add: {
+ inlineCSS: function() {
+ var
+ width = module.cache.width || $module.outerWidth(),
+ height = module.cache.height || $module.outerHeight(),
+ isRTL = module.is.rtl(),
+ direction = module.get.direction(),
+ distance = {
+ left : width,
+ right : -width,
+ top : height,
+ bottom : -height
+ },
+ style
+ ;
+
+ if(isRTL){
+ module.verbose('RTL detected, flipping widths');
+ distance.left = -width;
+ distance.right = width;
+ }
+
+ style = '<style>';
+
+ if(direction === 'left' || direction === 'right') {
+ module.debug('Adding CSS rules for animation distance', width);
+ style += ''
+ + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'
+ + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'
+ + ' -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'
+ + ' transform: translate3d('+ distance[direction] + 'px, 0, 0);'
+ + ' }'
+ ;
+ }
+ else if(direction === 'top' || direction == 'bottom') {
+ style += ''
+ + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'
+ + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'
+ + ' -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'
+ + ' transform: translate3d(0, ' + distance[direction] + 'px, 0);'
+ + ' }'
+ ;
+ }
+
+ /* IE is only browser not to create context with transforms */
+ /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */
+ if( module.is.ie() ) {
+ if(direction === 'left' || direction === 'right') {
+ module.debug('Adding CSS rules for animation distance', width);
+ style += ''
+ + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'
+ + ' -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'
+ + ' transform: translate3d('+ distance[direction] + 'px, 0, 0);'
+ + ' }'
+ ;
+ }
+ else if(direction === 'top' || direction == 'bottom') {
+ style += ''
+ + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'
+ + ' -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'
+ + ' transform: translate3d(0, ' + distance[direction] + 'px, 0);'
+ + ' }'
+ ;
+ }
+ /* opposite sides visible forces content overlay */
+ style += ''
+ + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'
+ + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'
+ + ' -webkit-transform: translate3d(0px, 0, 0);'
+ + ' transform: translate3d(0px, 0, 0);'
+ + ' }'
+ ;
+ }
+ style += '</style>';
+ $style = $(style)
+ .appendTo($head)
+ ;
+ module.debug('Adding sizing css to head', $style);
+ }
+ },
+
+ refresh: function() {
+ module.verbose('Refreshing selector cache');
+ $context = $(settings.context);
+ $sidebars = $context.children(selector.sidebar);
+ $pusher = $context.children(selector.pusher);
+ $fixed = $context.children(selector.fixed);
+ module.clear.cache();
+ },
+
+ refreshSidebars: function() {
+ module.verbose('Refreshing other sidebars');
+ $sidebars = $context.children(selector.sidebar);
+ },
+
+ repaint: function() {
+ module.verbose('Forcing repaint event');
+ element.style.display = 'none';
+ var ignored = element.offsetHeight;
+ element.scrollTop = element.scrollTop;
+ element.style.display = '';
+ },
+
+ setup: {
+ cache: function() {
+ module.cache = {
+ width : $module.outerWidth(),
+ height : $module.outerHeight(),
+ rtl : ($module.css('direction') == 'rtl')
+ };
+ },
+ layout: function() {
+ if( $context.children(selector.pusher).length === 0 ) {
+ module.debug('Adding wrapper element for sidebar');
+ module.error(error.pusher);
+ $pusher = $('<div class="pusher" />');
+ $context
+ .children()
+ .not(selector.omitted)
+ .not($sidebars)
+ .wrapAll($pusher)
+ ;
+ module.refresh();
+ }
+ if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {
+ module.debug('Moved sidebar to correct parent element');
+ module.error(error.movedSidebar, element);
+ $module.detach().prependTo($context);
+ module.refresh();
+ }
+ module.clear.cache();
+ module.set.pushable();
+ module.set.direction();
+ }
+ },
+
+ attachEvents: function(selector, event) {
+ var
+ $toggle = $(selector)
+ ;
+ event = $.isFunction(module[event])
+ ? module[event]
+ : module.toggle
+ ;
+ if($toggle.length > 0) {
+ module.debug('Attaching sidebar events to element', selector, event);
+ $toggle
+ .on('click' + eventNamespace, event)
+ ;
+ }
+ else {
+ module.error(error.notFound, selector);
+ }
+ },
+
+ show: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if(module.is.hidden()) {
+ module.refreshSidebars();
+ if(settings.overlay) {
+ module.error(error.overlay);
+ settings.transition = 'overlay';
+ }
+ module.refresh();
+ if(module.othersActive()) {
+ module.debug('Other sidebars currently visible');
+ if(settings.exclusive) {
+ // if not overlay queue animation after hide
+ if(settings.transition != 'overlay') {
+ module.hideOthers(module.show);
+ return;
+ }
+ else {
+ module.hideOthers();
+ }
+ }
+ else {
+ settings.transition = 'overlay';
+ }
+ }
+ module.pushPage(function() {
+ callback.call(element);
+ settings.onShow.call(element);
+ });
+ settings.onChange.call(element);
+ settings.onVisible.call(element);
+ }
+ else {
+ module.debug('Sidebar is already visible');
+ }
+ },
+
+ hide: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if(module.is.visible() || module.is.animating()) {
+ module.debug('Hiding sidebar', callback);
+ module.refreshSidebars();
+ module.pullPage(function() {
+ callback.call(element);
+ settings.onHidden.call(element);
+ });
+ settings.onChange.call(element);
+ settings.onHide.call(element);
+ }
+ },
+
+ othersAnimating: function() {
+ return ($sidebars.not($module).filter('.' + className.animating).length > 0);
+ },
+ othersVisible: function() {
+ return ($sidebars.not($module).filter('.' + className.visible).length > 0);
+ },
+ othersActive: function() {
+ return(module.othersVisible() || module.othersAnimating());
+ },
+
+ hideOthers: function(callback) {
+ var
+ $otherSidebars = $sidebars.not($module).filter('.' + className.visible),
+ sidebarCount = $otherSidebars.length,
+ callbackCount = 0
+ ;
+ callback = callback || function(){};
+ $otherSidebars
+ .sidebar('hide', function() {
+ callbackCount++;
+ if(callbackCount == sidebarCount) {
+ callback();
+ }
+ })
+ ;
+ },
+
+ toggle: function() {
+ module.verbose('Determining toggled direction');
+ if(module.is.hidden()) {
+ module.show();
+ }
+ else {
+ module.hide();
+ }
+ },
+
+ pushPage: function(callback) {
+ var
+ transition = module.get.transition(),
+ $transition = (transition === 'overlay' || module.othersActive())
+ ? $module
+ : $pusher,
+ animate,
+ dim,
+ transitionEnd
+ ;
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if(settings.transition == 'scale down') {
+ module.scrollToTop();
+ }
+ module.set.transition(transition);
+ module.repaint();
+ animate = function() {
+ module.bind.clickaway();
+ module.add.inlineCSS();
+ module.set.animating();
+ module.set.visible();
+ };
+ dim = function() {
+ module.set.dimmed();
+ };
+ transitionEnd = function(event) {
+ if( event.target == $transition[0] ) {
+ $transition.off(transitionEvent + elementNamespace, transitionEnd);
+ module.remove.animating();
+ module.bind.scrollLock();
+ callback.call(element);
+ }
+ };
+ $transition.off(transitionEvent + elementNamespace);
+ $transition.on(transitionEvent + elementNamespace, transitionEnd);
+ requestAnimationFrame(animate);
+ if(settings.dimPage && !module.othersVisible()) {
+ requestAnimationFrame(dim);
+ }
+ },
+
+ pullPage: function(callback) {
+ var
+ transition = module.get.transition(),
+ $transition = (transition == 'overlay' || module.othersActive())
+ ? $module
+ : $pusher,
+ animate,
+ transitionEnd
+ ;
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ module.verbose('Removing context push state', module.get.direction());
+
+ module.unbind.clickaway();
+ module.unbind.scrollLock();
+
+ animate = function() {
+ module.set.transition(transition);
+ module.set.animating();
+ module.remove.visible();
+ if(settings.dimPage && !module.othersVisible()) {
+ $pusher.removeClass(className.dimmed);
+ }
+ };
+ transitionEnd = function(event) {
+ if( event.target == $transition[0] ) {
+ $transition.off(transitionEvent + elementNamespace, transitionEnd);
+ module.remove.animating();
+ module.remove.transition();
+ module.remove.inlineCSS();
+ if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {
+ module.scrollBack();
+ }
+ callback.call(element);
+ }
+ };
+ $transition.off(transitionEvent + elementNamespace);
+ $transition.on(transitionEvent + elementNamespace, transitionEnd);
+ requestAnimationFrame(animate);
+ },
+
+ scrollToTop: function() {
+ module.verbose('Scrolling to top of page to avoid animation issues');
+ currentScroll = $(window).scrollTop();
+ $module.scrollTop(0);
+ window.scrollTo(0, 0);
+ },
+
+ scrollBack: function() {
+ module.verbose('Scrolling back to original page position');
+ window.scrollTo(0, currentScroll);
+ },
+
+ clear: {
+ cache: function() {
+ module.verbose('Clearing cached dimensions');
+ module.cache = {};
+ }
+ },
+
+ set: {
+
+ // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios
+ ios: function() {
+ $html.addClass(className.ios);
+ },
+
+ // container
+ pushed: function() {
+ $context.addClass(className.pushed);
+ },
+ pushable: function() {
+ $context.addClass(className.pushable);
+ },
+
+ // pusher
+ dimmed: function() {
+ $pusher.addClass(className.dimmed);
+ },
+
+ // sidebar
+ active: function() {
+ $module.addClass(className.active);
+ },
+ animating: function() {
+ $module.addClass(className.animating);
+ },
+ transition: function(transition) {
+ transition = transition || module.get.transition();
+ $module.addClass(transition);
+ },
+ direction: function(direction) {
+ direction = direction || module.get.direction();
+ $module.addClass(className[direction]);
+ },
+ visible: function() {
+ $module.addClass(className.visible);
+ },
+ overlay: function() {
+ $module.addClass(className.overlay);
+ }
+ },
+ remove: {
+
+ inlineCSS: function() {
+ module.debug('Removing inline css styles', $style);
+ if($style && $style.length > 0) {
+ $style.remove();
+ }
+ },
+
+ // ios scroll on html not document
+ ios: function() {
+ $html.removeClass(className.ios);
+ },
+
+ // context
+ pushed: function() {
+ $context.removeClass(className.pushed);
+ },
+ pushable: function() {
+ $context.removeClass(className.pushable);
+ },
+
+ // sidebar
+ active: function() {
+ $module.removeClass(className.active);
+ },
+ animating: function() {
+ $module.removeClass(className.animating);
+ },
+ transition: function(transition) {
+ transition = transition || module.get.transition();
+ $module.removeClass(transition);
+ },
+ direction: function(direction) {
+ direction = direction || module.get.direction();
+ $module.removeClass(className[direction]);
+ },
+ visible: function() {
+ $module.removeClass(className.visible);
+ },
+ overlay: function() {
+ $module.removeClass(className.overlay);
+ }
+ },
+
+ get: {
+ direction: function() {
+ if($module.hasClass(className.top)) {
+ return className.top;
+ }
+ else if($module.hasClass(className.right)) {
+ return className.right;
+ }
+ else if($module.hasClass(className.bottom)) {
+ return className.bottom;
+ }
+ return className.left;
+ },
+ transition: function() {
+ var
+ direction = module.get.direction(),
+ transition
+ ;
+ transition = ( module.is.mobile() )
+ ? (settings.mobileTransition == 'auto')
+ ? settings.defaultTransition.mobile[direction]
+ : settings.mobileTransition
+ : (settings.transition == 'auto')
+ ? settings.defaultTransition.computer[direction]
+ : settings.transition
+ ;
+ module.verbose('Determined transition', transition);
+ return transition;
+ },
+ transitionEvent: function() {
+ var
+ element = document.createElement('element'),
+ transitions = {
+ 'transition' :'transitionend',
+ 'OTransition' :'oTransitionEnd',
+ 'MozTransition' :'transitionend',
+ 'WebkitTransition' :'webkitTransitionEnd'
+ },
+ transition
+ ;
+ for(transition in transitions){
+ if( element.style[transition] !== undefined ){
+ return transitions[transition];
+ }
+ }
+ }
+ },
+
+ is: {
+
+ ie: function() {
+ var
+ isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),
+ isIE = ('ActiveXObject' in window)
+ ;
+ return (isIE11 || isIE);
+ },
+
+ ios: function() {
+ var
+ userAgent = navigator.userAgent,
+ isIOS = userAgent.match(regExp.ios),
+ isMobileChrome = userAgent.match(regExp.mobileChrome)
+ ;
+ if(isIOS && !isMobileChrome) {
+ module.verbose('Browser was found to be iOS', userAgent);
+ return true;
+ }
+ else {
+ return false;
+ }
+ },
+ mobile: function() {
+ var
+ userAgent = navigator.userAgent,
+ isMobile = userAgent.match(regExp.mobile)
+ ;
+ if(isMobile) {
+ module.verbose('Browser was found to be mobile', userAgent);
+ return true;
+ }
+ else {
+ module.verbose('Browser is not mobile, using regular transition', userAgent);
+ return false;
+ }
+ },
+ hidden: function() {
+ return !module.is.visible();
+ },
+ visible: function() {
+ return $module.hasClass(className.visible);
+ },
+ // alias
+ open: function() {
+ return module.is.visible();
+ },
+ closed: function() {
+ return module.is.hidden();
+ },
+ vertical: function() {
+ return $module.hasClass(className.top);
+ },
+ animating: function() {
+ return $context.hasClass(className.animating);
+ },
+ rtl: function () {
+ if(module.cache.rtl === undefined) {
+ module.cache.rtl = ($module.css('direction') == 'rtl');
+ }
+ return module.cache.rtl;
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ }
+ ;
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ module.invoke('destroy');
+ }
+ module.initialize();
+ }
+ });
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.sidebar.settings = {
+
+ name : 'Sidebar',
+ namespace : 'sidebar',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ transition : 'auto',
+ mobileTransition : 'auto',
+
+ defaultTransition : {
+ computer: {
+ left : 'uncover',
+ right : 'uncover',
+ top : 'overlay',
+ bottom : 'overlay'
+ },
+ mobile: {
+ left : 'uncover',
+ right : 'uncover',
+ top : 'overlay',
+ bottom : 'overlay'
+ }
+ },
+
+ context : 'body',
+ exclusive : false,
+ closable : true,
+ dimPage : true,
+ scrollLock : false,
+ returnScroll : false,
+ delaySetup : false,
+
+ duration : 500,
+
+ onChange : function(){},
+ onShow : function(){},
+ onHide : function(){},
+
+ onHidden : function(){},
+ onVisible : function(){},
+
+ className : {
+ active : 'active',
+ animating : 'animating',
+ dimmed : 'dimmed',
+ ios : 'ios',
+ pushable : 'pushable',
+ pushed : 'pushed',
+ right : 'right',
+ top : 'top',
+ left : 'left',
+ bottom : 'bottom',
+ visible : 'visible'
+ },
+
+ selector: {
+ fixed : '.fixed',
+ omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',
+ pusher : '.pusher',
+ sidebar : '.ui.sidebar'
+ },
+
+ regExp: {
+ ios : /(iPad|iPhone|iPod)/g,
+ mobileChrome : /(CriOS)/g,
+ mobile : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g
+ },
+
+ error : {
+ method : 'The method you called is not defined.',
+ pusher : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',
+ movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',
+ overlay : 'The overlay setting is no longer supported, use animation: overlay',
+ notFound : 'There were no elements that matched the specified selector'
+ }
+
+};
+
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/sidebar.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/sidebar.less b/semantic/src/definitions/modules/sidebar.less
new file mode 100755
index 0000000..6affda9
--- /dev/null
+++ b/semantic/src/definitions/modules/sidebar.less
@@ -0,0 +1,552 @@
+/*!
+ * # Semantic UI - Sidebar
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'sidebar';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Sidebar
+*******************************/
+
+/* Sidebar Menu */
+.ui.sidebar {
+ position: fixed;
+ top: 0;
+ left: 0;
+
+ backface-visibility: hidden;
+ transition: none;
+ will-change: transform;
+ transform: translate3d(0, 0, 0);
+ visibility: hidden;
+ -webkit-overflow-scrolling: touch;
+
+ height: 100% !important;
+ max-height: 100%;
+ border-radius: 0em !important;
+ margin: 0em !important;
+ overflow-y: auto !important;
+ z-index: @topLayer;
+}
+
+/* GPU Layers for Child Elements */
+.ui.sidebar > * {
+ backface-visibility: hidden;
+}
+
+
+/*--------------
+ Direction
+---------------*/
+
+.ui.left.sidebar {
+ right: auto;
+ left: 0px;
+ transform: translate3d(-100%, 0, 0);
+}
+.ui.right.sidebar {
+ right: 0px !important;
+ left: auto !important;
+ transform: translate3d(100%, 0%, 0);
+}
+
+.ui.top.sidebar,
+.ui.bottom.sidebar {
+ width: 100% !important;
+ height: auto !important;
+}
+.ui.top.sidebar {
+ top: 0px !important;
+ bottom: auto !important;
+ transform: translate3d(0, -100%, 0);
+}
+.ui.bottom.sidebar {
+ top: auto !important;
+ bottom: 0px !important;
+ transform: translate3d(0, 100%, 0);
+}
+
+
+/*--------------
+ Pushable
+---------------*/
+
+.pushable {
+ height: 100%;
+ overflow-x: hidden;
+ padding: 0em !important;
+}
+
+/* Whole Page */
+body.pushable {
+ background: @canvasBackground !important;
+}
+
+/* Page Context */
+.pushable:not(body) {
+ transform: translate3d(0, 0, 0);
+}
+.pushable:not(body) > .ui.sidebar,
+.pushable:not(body) > .fixed,
+.pushable:not(body) > .pusher:after {
+ position: absolute;
+}
+
+
+/*--------------
+ Fixed
+---------------*/
+
+.pushable > .fixed {
+ position: fixed;
+ backface-visibility: hidden;
+
+ transition: transform @duration @easing;
+ will-change: transform;
+ z-index: @fixedLayer;
+}
+
+/*--------------
+ Page
+---------------*/
+
+.pushable > .pusher {
+ position: relative;
+ backface-visibility: hidden;
+ overflow: hidden;
+ min-height: 100%;
+ transition: transform @duration @easing;
+ z-index: @middleLayer;
+}
+
+body.pushable > .pusher {
+ background: @pageBackground;
+}
+
+/* Pusher should inherit background from context */
+.pushable > .pusher {
+ background: inherit;
+}
+
+/*--------------
+ Dimmer
+---------------*/
+
+.pushable > .pusher:after {
+ position: fixed;
+ top: 0px;
+ right: 0px;
+ content: '';
+ background-color: @dimmerColor;
+ overflow: hidden;
+ opacity: 0;
+ transition: @dimmerTransition;
+ will-change: opacity;
+ z-index: @dimmerLayer;
+}
+
+/*--------------
+ Coupling
+---------------*/
+
+.ui.sidebar.menu .item {
+ border-radius: 0em !important;
+}
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Dimmed
+---------------*/
+
+.pushable > .pusher.dimmed:after {
+ width: 100% !important;
+ height: 100% !important;
+ opacity: 1 !important;
+}
+
+/*--------------
+ Animating
+---------------*/
+
+.ui.animating.sidebar {
+ visibility: visible;
+}
+
+/*--------------
+ Visible
+---------------*/
+
+.ui.visible.sidebar {
+ visibility: visible;
+ transform: translate3d(0, 0, 0);
+}
+
+/* Shadow Direction */
+.ui.left.visible.sidebar,
+.ui.right.visible.sidebar {
+ box-shadow: @horizontalBoxShadow;
+}
+.ui.top.visible.sidebar,
+.ui.bottom.visible.sidebar {
+ box-shadow: @verticalBoxShadow;
+}
+
+/* Visible On Load */
+.ui.visible.left.sidebar ~ .fixed,
+.ui.visible.left.sidebar ~ .pusher {
+ transform: translate3d(@width, 0, 0);
+}
+.ui.visible.right.sidebar ~ .fixed,
+.ui.visible.right.sidebar ~ .pusher {
+ transform: translate3d(-@width, 0, 0);
+}
+.ui.visible.top.sidebar ~ .fixed,
+.ui.visible.top.sidebar ~ .pusher {
+ transform: translate3d(0, @height, 0);
+}
+.ui.visible.bottom.sidebar ~ .fixed,
+.ui.visible.bottom.sidebar ~ .pusher {
+ transform: translate3d(0, -@height, 0);
+}
+
+/* opposite sides visible forces content overlay */
+.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,
+.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,
+.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,
+.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {
+ transform: translate3d(0, 0, 0);
+}
+
+/*--------------
+ iOS
+---------------*/
+
+/*
+ iOS incorrectly sizes document when content
+ is presented outside of view with 2Dtranslate
+*/
+html.ios {
+ overflow-x: hidden;
+ -webkit-overflow-scrolling: touch;
+}
+
+html.ios,
+html.ios body {
+ height: initial !important;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Width
+---------------*/
+
+/* Left / Right */
+.ui.thin.left.sidebar,
+.ui.thin.right.sidebar {
+ width: @thinWidth;
+}
+.ui[class*="very thin"].left.sidebar,
+.ui[class*="very thin"].right.sidebar {
+ width: @veryThinWidth;
+}
+.ui.left.sidebar,
+.ui.right.sidebar {
+ width: @width;
+}
+.ui.wide.left.sidebar,
+.ui.wide.right.sidebar {
+ width: @wideWidth;
+}
+.ui[class*="very wide"].left.sidebar,
+.ui[class*="very wide"].right.sidebar {
+ width: @veryWideWidth;
+}
+
+/* Left Visible */
+.ui.visible.thin.left.sidebar ~ .fixed,
+.ui.visible.thin.left.sidebar ~ .pusher {
+ transform: translate3d(@thinWidth, 0, 0);
+}
+.ui.visible[class*="very thin"].left.sidebar ~ .fixed,
+.ui.visible[class*="very thin"].left.sidebar ~ .pusher {
+ transform: translate3d(@veryThinWidth, 0, 0);
+}
+.ui.visible.wide.left.sidebar ~ .fixed,
+.ui.visible.wide.left.sidebar ~ .pusher {
+ transform: translate3d(@wideWidth, 0, 0);
+}
+.ui.visible[class*="very wide"].left.sidebar ~ .fixed,
+.ui.visible[class*="very wide"].left.sidebar ~ .pusher {
+ transform: translate3d(@veryWideWidth, 0, 0);
+}
+
+/* Right Visible */
+.ui.visible.thin.right.sidebar ~ .fixed,
+.ui.visible.thin.right.sidebar ~ .pusher {
+ transform: translate3d(-@thinWidth, 0, 0);
+}
+.ui.visible[class*="very thin"].right.sidebar ~ .fixed,
+.ui.visible[class*="very thin"].right.sidebar ~ .pusher {
+ transform: translate3d(-@veryThinWidth, 0, 0);
+}
+.ui.visible.wide.right.sidebar ~ .fixed,
+.ui.visible.wide.right.sidebar ~ .pusher {
+ transform: translate3d(-@wideWidth, 0, 0);
+}
+.ui.visible[class*="very wide"].right.sidebar ~ .fixed,
+.ui.visible[class*="very wide"].right.sidebar ~ .pusher {
+ transform: translate3d(-@veryWideWidth, 0, 0);
+}
+
+
+
+/*******************************
+ Animations
+*******************************/
+
+/*--------------
+ Overlay
+---------------*/
+
+/* Set-up */
+.ui.overlay.sidebar {
+ z-index: @topLayer;
+}
+
+/* Initial */
+.ui.left.overlay.sidebar {
+ transform: translate3d(-100%, 0%, 0);
+}
+.ui.right.overlay.sidebar {
+ transform: translate3d(100%, 0%, 0);
+}
+.ui.top.overlay.sidebar {
+ transform: translate3d(0%, -100%, 0);
+}
+.ui.bottom.overlay.sidebar {
+ transform: translate3d(0%, 100%, 0);
+}
+
+/* Animation */
+.animating.ui.overlay.sidebar,
+.ui.visible.overlay.sidebar {
+ transition: transform @duration @easing;
+}
+
+/* End - Sidebar */
+.ui.visible.left.overlay.sidebar {
+ transform: translate3d(0%, 0%, 0);
+}
+.ui.visible.right.overlay.sidebar {
+ transform: translate3d(0%, 0%, 0);
+}
+.ui.visible.top.overlay.sidebar {
+ transform: translate3d(0%, 0%, 0);
+}
+.ui.visible.bottom.overlay.sidebar {
+ transform: translate3d(0%, 0%, 0);
+}
+
+/* End - Pusher */
+.ui.visible.overlay.sidebar ~ .fixed,
+.ui.visible.overlay.sidebar ~ .pusher {
+ transform: none !important;
+}
+
+
+
+/*--------------
+ Push
+---------------*/
+
+/* Initial */
+.ui.push.sidebar {
+ transition: transform @duration @easing;
+ z-index: @topLayer;
+}
+
+/* Sidebar - Initial */
+.ui.left.push.sidebar {
+ transform: translate3d(-100%, 0, 0);
+}
+.ui.right.push.sidebar {
+ transform: translate3d(100%, 0, 0);
+}
+.ui.top.push.sidebar {
+ transform: translate3d(0%, -100%, 0);
+}
+.ui.bottom.push.sidebar {
+ transform: translate3d(0%, 100%, 0);
+}
+
+/* End */
+.ui.visible.push.sidebar {
+ transform: translate3d(0%, 0, 0);
+}
+
+
+/*--------------
+ Uncover
+---------------*/
+
+/* Initial */
+.ui.uncover.sidebar {
+ transform: translate3d(0, 0, 0);
+ z-index: @bottomLayer;
+}
+
+/* End */
+.ui.visible.uncover.sidebar {
+ transform: translate3d(0, 0, 0);
+ transition: transform @duration @easing;
+}
+
+
+/*--------------
+ Slide Along
+---------------*/
+
+/* Initial */
+.ui.slide.along.sidebar {
+ z-index: @bottomLayer;
+}
+
+/* Sidebar - Initial */
+.ui.left.slide.along.sidebar {
+ transform: translate3d(-50%, 0, 0);
+}
+.ui.right.slide.along.sidebar {
+ transform: translate3d(50%, 0, 0);
+}
+.ui.top.slide.along.sidebar {
+ transform: translate3d(0, -50%, 0);
+}
+.ui.bottom.slide.along.sidebar {
+ transform: translate3d(0%, 50%, 0);
+}
+
+/* Animation */
+.ui.animating.slide.along.sidebar {
+ transition: transform @duration @easing;
+}
+
+/* End */
+.ui.visible.slide.along.sidebar {
+ transform: translate3d(0%, 0, 0);
+}
+
+
+/*--------------
+ Slide Out
+---------------*/
+
+/* Initial */
+.ui.slide.out.sidebar {
+ z-index: @bottomLayer;
+}
+
+/* Sidebar - Initial */
+.ui.left.slide.out.sidebar {
+ transform: translate3d(50%, 0, 0);
+}
+.ui.right.slide.out.sidebar {
+ transform: translate3d(-50%, 0, 0);
+}
+.ui.top.slide.out.sidebar {
+ transform: translate3d(0%, 50%, 0);
+}
+.ui.bottom.slide.out.sidebar {
+ transform: translate3d(0%, -50%, 0);
+}
+
+/* Animation */
+.ui.animating.slide.out.sidebar {
+ transition: transform @duration @easing;
+}
+
+/* End */
+.ui.visible.slide.out.sidebar {
+ transform: translate3d(0%, 0, 0);
+}
+
+/*--------------
+ Scale Down
+---------------*/
+
+/* Initial */
+.ui.scale.down.sidebar {
+ transition: transform @duration @easing;
+ z-index: @topLayer;
+}
+
+/* Sidebar - Initial */
+.ui.left.scale.down.sidebar {
+ transform: translate3d(-100%, 0, 0);
+}
+.ui.right.scale.down.sidebar {
+ transform: translate3d(100%, 0, 0);
+}
+.ui.top.scale.down.sidebar {
+ transform: translate3d(0%, -100%, 0);
+}
+.ui.bottom.scale.down.sidebar {
+ transform: translate3d(0%, 100%, 0);
+}
+
+/* Pusher - Initial */
+.ui.scale.down.left.sidebar ~ .pusher {
+ transform-origin: 75% 50%;
+}
+.ui.scale.down.right.sidebar ~ .pusher {
+ transform-origin: 25% 50%;
+}
+.ui.scale.down.top.sidebar ~ .pusher {
+ transform-origin: 50% 75%;
+}
+.ui.scale.down.bottom.sidebar ~ .pusher {
+ transform-origin: 50% 25%;
+}
+
+/* Animation */
+.ui.animating.scale.down > .visible.ui.sidebar {
+ transition: transform @duration @easing;
+}
+.ui.visible.scale.down.sidebar ~ .pusher,
+.ui.animating.scale.down.sidebar ~ .pusher {
+ display: block !important;
+ width: 100%;
+ height: 100%;
+ overflow: hidden !important;
+}
+
+/* End */
+.ui.visible.scale.down.sidebar {
+ transform: translate3d(0, 0, 0);
+}
+.ui.visible.scale.down.sidebar ~ .pusher {
+ transform: scale(0.75);
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/sticky.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/sticky.js b/semantic/src/definitions/modules/sticky.js
new file mode 100644
index 0000000..c98a264
--- /dev/null
+++ b/semantic/src/definitions/modules/sticky.js
@@ -0,0 +1,936 @@
+/*!
+ * # Semantic UI - Sticky
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.sticky = function(parameters) {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.sticky.settings, parameters)
+ : $.extend({}, $.fn.sticky.settings),
+
+ className = settings.className,
+ namespace = settings.namespace,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $module = $(this),
+ $window = $(window),
+ $scroll = $(settings.scrollContext),
+ $container,
+ $context,
+
+ selector = $module.selector || '',
+ instance = $module.data(moduleNamespace),
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); },
+
+ element = this,
+
+ documentObserver,
+ observer,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+
+ module.determineContainer();
+ module.determineContext();
+ module.verbose('Initializing sticky', settings, $container);
+
+ module.save.positions();
+ module.checkErrors();
+ module.bind.events();
+
+ if(settings.observeChanges) {
+ module.observeChanges();
+ }
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous instance');
+ module.reset();
+ if(documentObserver) {
+ documentObserver.disconnect();
+ }
+ if(observer) {
+ observer.disconnect();
+ }
+ $window
+ .off('load' + eventNamespace, module.event.load)
+ .off('resize' + eventNamespace, module.event.resize)
+ ;
+ $scroll
+ .off('scrollchange' + eventNamespace, module.event.scrollchange)
+ ;
+ $module.removeData(moduleNamespace);
+ },
+
+ observeChanges: function() {
+ if('MutationObserver' in window) {
+ documentObserver = new MutationObserver(module.event.documentChanged);
+ observer = new MutationObserver(module.event.changed);
+ documentObserver.observe(document, {
+ childList : true,
+ subtree : true
+ });
+ observer.observe(element, {
+ childList : true,
+ subtree : true
+ });
+ observer.observe($context[0], {
+ childList : true,
+ subtree : true
+ });
+ module.debug('Setting up mutation observer', observer);
+ }
+ },
+
+ determineContainer: function() {
+ $container = $module.offsetParent();
+ },
+
+ determineContext: function() {
+ if(settings.context) {
+ $context = $(settings.context);
+ }
+ else {
+ $context = $container;
+ }
+ if($context.length === 0) {
+ module.error(error.invalidContext, settings.context, $module);
+ return;
+ }
+ },
+
+ checkErrors: function() {
+ if( module.is.hidden() ) {
+ module.error(error.visible, $module);
+ }
+ if(module.cache.element.height > module.cache.context.height) {
+ module.reset();
+ module.error(error.elementSize, $module);
+ return;
+ }
+ },
+
+ bind: {
+ events: function() {
+ $window
+ .on('load' + eventNamespace, module.event.load)
+ .on('resize' + eventNamespace, module.event.resize)
+ ;
+ // pub/sub pattern
+ $scroll
+ .off('scroll' + eventNamespace)
+ .on('scroll' + eventNamespace, module.event.scroll)
+ .on('scrollchange' + eventNamespace, module.event.scrollchange)
+ ;
+ }
+ },
+
+ event: {
+ changed: function(mutations) {
+ clearTimeout(module.timer);
+ module.timer = setTimeout(function() {
+ module.verbose('DOM tree modified, updating sticky menu', mutations);
+ module.refresh();
+ }, 100);
+ },
+ documentChanged: function(mutations) {
+ [].forEach.call(mutations, function(mutation) {
+ if(mutation.removedNodes) {
+ [].forEach.call(mutation.removedNodes, function(node) {
+ if(node == element || $(node).find(element).length > 0) {
+ module.debug('Element removed from DOM, tearing down events');
+ module.destroy();
+ }
+ });
+ }
+ });
+ },
+ load: function() {
+ module.verbose('Page contents finished loading');
+ requestAnimationFrame(module.refresh);
+ },
+ resize: function() {
+ module.verbose('Window resized');
+ requestAnimationFrame(module.refresh);
+ },
+ scroll: function() {
+ requestAnimationFrame(function() {
+ $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );
+ });
+ },
+ scrollchange: function(event, scrollPosition) {
+ module.stick(scrollPosition);
+ settings.onScroll.call(element);
+ }
+ },
+
+ refresh: function(hardRefresh) {
+ module.reset();
+ if(!settings.context) {
+ module.determineContext();
+ }
+ if(hardRefresh) {
+ module.determineContainer();
+ }
+ module.save.positions();
+ module.stick();
+ settings.onReposition.call(element);
+ },
+
+ supports: {
+ sticky: function() {
+ var
+ $element = $('<div/>'),
+ element = $element[0]
+ ;
+ $element.addClass(className.supported);
+ return($element.css('position').match('sticky'));
+ }
+ },
+
+ save: {
+ lastScroll: function(scroll) {
+ module.lastScroll = scroll;
+ },
+ elementScroll: function(scroll) {
+ module.elementScroll = scroll;
+ },
+ positions: function() {
+ var
+ scrollContext = {
+ height : $scroll.height()
+ },
+ element = {
+ margin: {
+ top : parseInt($module.css('margin-top'), 10),
+ bottom : parseInt($module.css('margin-bottom'), 10),
+ },
+ offset : $module.offset(),
+ width : $module.outerWidth(),
+ height : $module.outerHeight()
+ },
+ context = {
+ offset : $context.offset(),
+ height : $context.outerHeight()
+ },
+ container = {
+ height: $container.outerHeight()
+ }
+ ;
+ if( !module.is.standardScroll() ) {
+ module.debug('Non-standard scroll. Removing scroll offset from element offset');
+
+ scrollContext.top = $scroll.scrollTop();
+ scrollContext.left = $scroll.scrollLeft();
+
+ element.offset.top += scrollContext.top;
+ context.offset.top += scrollContext.top;
+ element.offset.left += scrollContext.left;
+ context.offset.left += scrollContext.left;
+ }
+ module.cache = {
+ fits : ( element.height < scrollContext.height ),
+ scrollContext : {
+ height : scrollContext.height
+ },
+ element: {
+ margin : element.margin,
+ top : element.offset.top - element.margin.top,
+ left : element.offset.left,
+ width : element.width,
+ height : element.height,
+ bottom : element.offset.top + element.height
+ },
+ context: {
+ top : context.offset.top,
+ height : context.height,
+ bottom : context.offset.top + context.height
+ }
+ };
+ module.set.containerSize();
+ module.set.size();
+ module.stick();
+ module.debug('Caching element positions', module.cache);
+ }
+ },
+
+ get: {
+ direction: function(scroll) {
+ var
+ direction = 'down'
+ ;
+ scroll = scroll || $scroll.scrollTop();
+ if(module.lastScroll !== undefined) {
+ if(module.lastScroll < scroll) {
+ direction = 'down';
+ }
+ else if(module.lastScroll > scroll) {
+ direction = 'up';
+ }
+ }
+ return direction;
+ },
+ scrollChange: function(scroll) {
+ scroll = scroll || $scroll.scrollTop();
+ return (module.lastScroll)
+ ? (scroll - module.lastScroll)
+ : 0
+ ;
+ },
+ currentElementScroll: function() {
+ if(module.elementScroll) {
+ return module.elementScroll;
+ }
+ return ( module.is.top() )
+ ? Math.abs(parseInt($module.css('top'), 10)) || 0
+ : Math.abs(parseInt($module.css('bottom'), 10)) || 0
+ ;
+ },
+
+ elementScroll: function(scroll) {
+ scroll = scroll || $scroll.scrollTop();
+ var
+ element = module.cache.element,
+ scrollContext = module.cache.scrollContext,
+ delta = module.get.scrollChange(scroll),
+ maxScroll = (element.height - scrollContext.height + settings.offset),
+ elementScroll = module.get.currentElementScroll(),
+ possibleScroll = (elementScroll + delta)
+ ;
+ if(module.cache.fits || possibleScroll < 0) {
+ elementScroll = 0;
+ }
+ else if(possibleScroll > maxScroll ) {
+ elementScroll = maxScroll;
+ }
+ else {
+ elementScroll = possibleScroll;
+ }
+ return elementScroll;
+ }
+ },
+
+ remove: {
+ lastScroll: function() {
+ delete module.lastScroll;
+ },
+ elementScroll: function(scroll) {
+ delete module.elementScroll;
+ },
+ offset: function() {
+ $module.css('margin-top', '');
+ }
+ },
+
+ set: {
+ offset: function() {
+ module.verbose('Setting offset on element', settings.offset);
+ $module
+ .css('margin-top', settings.offset)
+ ;
+ },
+ containerSize: function() {
+ var
+ tagName = $container.get(0).tagName
+ ;
+ if(tagName === 'HTML' || tagName == 'body') {
+ // this can trigger for too many reasons
+ //module.error(error.container, tagName, $module);
+ module.determineContainer();
+ }
+ else {
+ if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {
+ module.debug('Context has padding, specifying exact height for container', module.cache.context.height);
+ $container.css({
+ height: module.cache.context.height
+ });
+ }
+ }
+ },
+ minimumSize: function() {
+ var
+ element = module.cache.element
+ ;
+ $container
+ .css('min-height', element.height)
+ ;
+ },
+ scroll: function(scroll) {
+ module.debug('Setting scroll on element', scroll);
+ if(module.elementScroll == scroll) {
+ return;
+ }
+ if( module.is.top() ) {
+ $module
+ .css('bottom', '')
+ .css('top', -scroll)
+ ;
+ }
+ if( module.is.bottom() ) {
+ $module
+ .css('top', '')
+ .css('bottom', scroll)
+ ;
+ }
+ },
+ size: function() {
+ if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {
+ element.style.setProperty('width', module.cache.element.width + 'px', 'important');
+ element.style.setProperty('height', module.cache.element.height + 'px', 'important');
+ }
+ }
+ },
+
+ is: {
+ standardScroll: function() {
+ return ($scroll[0] == window);
+ },
+ top: function() {
+ return $module.hasClass(className.top);
+ },
+ bottom: function() {
+ return $module.hasClass(className.bottom);
+ },
+ initialPosition: function() {
+ return (!module.is.fixed() && !module.is.bound());
+ },
+ hidden: function() {
+ return (!$module.is(':visible'));
+ },
+ bound: function() {
+ return $module.hasClass(className.bound);
+ },
+ fixed: function() {
+ return $module.hasClass(className.fixed);
+ }
+ },
+
+ stick: function(scroll) {
+ var
+ cachedPosition = scroll || $scroll.scrollTop(),
+ cache = module.cache,
+ fits = cache.fits,
+ element = cache.element,
+ scrollContext = cache.scrollContext,
+ context = cache.context,
+ offset = (module.is.bottom() && settings.pushing)
+ ? settings.bottomOffset
+ : settings.offset,
+ scroll = {
+ top : cachedPosition + offset,
+ bottom : cachedPosition + offset + scrollContext.height
+ },
+ direction = module.get.direction(scroll.top),
+ elementScroll = (fits)
+ ? 0
+ : module.get.elementScroll(scroll.top),
+
+ // shorthand
+ doesntFit = !fits,
+ elementVisible = (element.height !== 0)
+ ;
+
+ if(elementVisible) {
+
+ if( module.is.initialPosition() ) {
+ if(scroll.top >= context.bottom) {
+ module.debug('Initial element position is bottom of container');
+ module.bindBottom();
+ }
+ else if(scroll.top > element.top) {
+ if( (element.height + scroll.top - elementScroll) >= context.bottom ) {
+ module.debug('Initial element position is bottom of container');
+ module.bindBottom();
+ }
+ else {
+ module.debug('Initial element position is fixed');
+ module.fixTop();
+ }
+ }
+
+ }
+ else if( module.is.fixed() ) {
+
+ // currently fixed top
+ if( module.is.top() ) {
+ if( scroll.top <= element.top ) {
+ module.debug('Fixed element reached top of container');
+ module.setInitialPosition();
+ }
+ else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {
+ module.debug('Fixed element reached bottom of container');
+ module.bindBottom();
+ }
+ // scroll element if larger than screen
+ else if(doesntFit) {
+ module.set.scroll(elementScroll);
+ module.save.lastScroll(scroll.top);
+ module.save.elementScroll(elementScroll);
+ }
+ }
+
+ // currently fixed bottom
+ else if(module.is.bottom() ) {
+
+ // top edge
+ if( (scroll.bottom - element.height) <= element.top) {
+ module.debug('Bottom fixed rail has reached top of container');
+ module.setInitialPosition();
+ }
+ // bottom edge
+ else if(scroll.bottom >= context.bottom) {
+ module.debug('Bottom fixed rail has reached bottom of container');
+ module.bindBottom();
+ }
+ // scroll element if larger than screen
+ else if(doesntFit) {
+ module.set.scroll(elementScroll);
+ module.save.lastScroll(scroll.top);
+ module.save.elementScroll(elementScroll);
+ }
+
+ }
+ }
+ else if( module.is.bottom() ) {
+ if( scroll.top <= element.top ) {
+ module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');
+ module.setInitialPosition();
+ }
+ else {
+ if(settings.pushing) {
+ if(module.is.bound() && scroll.bottom <= context.bottom ) {
+ module.debug('Fixing bottom attached element to bottom of browser.');
+ module.fixBottom();
+ }
+ }
+ else {
+ if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {
+ module.debug('Fixing bottom attached element to top of browser.');
+ module.fixTop();
+ }
+ }
+ }
+ }
+ }
+ },
+
+ bindTop: function() {
+ module.debug('Binding element to top of parent container');
+ module.remove.offset();
+ $module
+ .css({
+ left : '',
+ top : '',
+ marginBottom : ''
+ })
+ .removeClass(className.fixed)
+ .removeClass(className.bottom)
+ .addClass(className.bound)
+ .addClass(className.top)
+ ;
+ settings.onTop.call(element);
+ settings.onUnstick.call(element);
+ },
+ bindBottom: function() {
+ module.debug('Binding element to bottom of parent container');
+ module.remove.offset();
+ $module
+ .css({
+ left : '',
+ top : ''
+ })
+ .removeClass(className.fixed)
+ .removeClass(className.top)
+ .addClass(className.bound)
+ .addClass(className.bottom)
+ ;
+ settings.onBottom.call(element);
+ settings.onUnstick.call(element);
+ },
+
+ setInitialPosition: function() {
+ module.debug('Returning to initial position');
+ module.unfix();
+ module.unbind();
+ },
+
+
+ fixTop: function() {
+ module.debug('Fixing element to top of page');
+ module.set.minimumSize();
+ module.set.offset();
+ $module
+ .css({
+ left : module.cache.element.left,
+ bottom : '',
+ marginBottom : ''
+ })
+ .removeClass(className.bound)
+ .removeClass(className.bottom)
+ .addClass(className.fixed)
+ .addClass(className.top)
+ ;
+ settings.onStick.call(element);
+ },
+
+ fixBottom: function() {
+ module.debug('Sticking element to bottom of page');
+ module.set.minimumSize();
+ module.set.offset();
+ $module
+ .css({
+ left : module.cache.element.left,
+ bottom : '',
+ marginBottom : ''
+ })
+ .removeClass(className.bound)
+ .removeClass(className.top)
+ .addClass(className.fixed)
+ .addClass(className.bottom)
+ ;
+ settings.onStick.call(element);
+ },
+
+ unbind: function() {
+ if( module.is.bound() ) {
+ module.debug('Removing container bound position on element');
+ module.remove.offset();
+ $module
+ .removeClass(className.bound)
+ .removeClass(className.top)
+ .removeClass(className.bottom)
+ ;
+ }
+ },
+
+ unfix: function() {
+ if( module.is.fixed() ) {
+ module.debug('Removing fixed position on element');
+ module.remove.offset();
+ $module
+ .removeClass(className.fixed)
+ .removeClass(className.top)
+ .removeClass(className.bottom)
+ ;
+ settings.onUnstick.call(element);
+ }
+ },
+
+ reset: function() {
+ module.debug('Resetting elements position');
+ module.unbind();
+ module.unfix();
+ module.resetCSS();
+ module.remove.offset();
+ module.remove.lastScroll();
+ },
+
+ resetCSS: function() {
+ $module
+ .css({
+ width : '',
+ height : ''
+ })
+ ;
+ $container
+ .css({
+ height: ''
+ })
+ ;
+ },
+
+ setting: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ settings[name] = value;
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 0);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.sticky.settings = {
+
+ name : 'Sticky',
+ namespace : 'sticky',
+
+ silent : false,
+ debug : false,
+ verbose : true,
+ performance : true,
+
+ // whether to stick in the opposite direction on scroll up
+ pushing : false,
+
+ context : false,
+
+ // Context to watch scroll events
+ scrollContext : window,
+
+ // Offset to adjust scroll
+ offset : 0,
+
+ // Offset to adjust scroll when attached to bottom of screen
+ bottomOffset : 0,
+
+ jitter : 5, // will only set container height if difference between context and container is larger than this number
+
+ // Whether to automatically observe changes with Mutation Observers
+ observeChanges : false,
+
+ // Called when position is recalculated
+ onReposition : function(){},
+
+ // Called on each scroll
+ onScroll : function(){},
+
+ // Called when element is stuck to viewport
+ onStick : function(){},
+
+ // Called when element is unstuck from viewport
+ onUnstick : function(){},
+
+ // Called when element reaches top of context
+ onTop : function(){},
+
+ // Called when element reaches bottom of context
+ onBottom : function(){},
+
+ error : {
+ container : 'Sticky element must be inside a relative container',
+ visible : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',
+ method : 'The method you called is not defined.',
+ invalidContext : 'Context specified does not exist',
+ elementSize : 'Sticky element is larger than its container, cannot create sticky.'
+ },
+
+ className : {
+ bound : 'bound',
+ fixed : 'fixed',
+ supported : 'native',
+ top : 'top',
+ bottom : 'bottom'
+ }
+
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/sticky.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/sticky.less b/semantic/src/definitions/modules/sticky.less
new file mode 100755
index 0000000..9ee898d
--- /dev/null
+++ b/semantic/src/definitions/modules/sticky.less
@@ -0,0 +1,74 @@
+/*!
+ * # Semantic UI - Sticky
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'sticky';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Sticky
+*******************************/
+
+.ui.sticky {
+ position: static;
+ transition: @transition;
+ z-index: @zIndex;
+}
+
+/*******************************
+ States
+*******************************/
+
+/* Bound */
+.ui.sticky.bound {
+ position: absolute;
+ left: auto;
+ right: auto;
+}
+
+/* Fixed */
+.ui.sticky.fixed {
+ position: fixed;
+ left: auto;
+ right: auto;
+}
+
+/* Bound/Fixed Position */
+.ui.sticky.bound.top,
+.ui.sticky.fixed.top {
+ top: 0px;
+ bottom: auto;
+}
+.ui.sticky.bound.bottom,
+.ui.sticky.fixed.bottom {
+ top: auto;
+ bottom: 0px;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+.ui.native.sticky {
+ position: -webkit-sticky;
+ position: -moz-sticky;
+ position: -ms-sticky;
+ position: -o-sticky;
+ position: sticky;
+}
+
+.loadUIOverrides();
[35/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/dimmer.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dimmer.less b/semantic/src/definitions/modules/dimmer.less
new file mode 100755
index 0000000..ff6c605
--- /dev/null
+++ b/semantic/src/definitions/modules/dimmer.less
@@ -0,0 +1,189 @@
+/*!
+ * # Semantic UI - Dimmer
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'dimmer';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Dimmer
+*******************************/
+
+.dimmable:not(.body) {
+ position: @dimmablePosition;
+}
+
+.ui.dimmer {
+ display: none;
+ position: @dimmerPosition;
+ top: 0em !important;
+ left: 0em !important;
+
+ width: 100%;
+ height: 100%;
+
+ text-align: @textAlign;
+ vertical-align: @verticalAlign;
+
+ background-color: @backgroundColor;
+ opacity: @hiddenOpacity;
+ line-height: @lineHeight;
+
+ animation-fill-mode: both;
+ animation-duration: @duration;
+ transition: @transition;
+
+ user-select: none;
+ will-change: opacity;
+ z-index: @zIndex;
+}
+
+/* Dimmer Content */
+.ui.dimmer > .content {
+ width: 100%;
+ height: 100%;
+ display: @contentDisplay;
+ user-select: text;
+}
+.ui.dimmer > .content > * {
+ display: @contentChildDisplay;
+ vertical-align: @verticalAlign;
+ color: @textColor;
+}
+
+
+/* Loose Coupling */
+.ui.segment > .ui.dimmer {
+ border-radius: inherit !important;
+}
+
+/*******************************
+ States
+*******************************/
+
+.animating.dimmable:not(body),
+.dimmed.dimmable:not(body) {
+ overflow: @overflow;
+}
+
+.dimmed.dimmable > .ui.animating.dimmer,
+.dimmed.dimmable > .ui.visible.dimmer,
+.ui.active.dimmer {
+ display: block;
+ opacity: @visibleOpacity;
+}
+
+.ui.disabled.dimmer {
+ width: 0 !important;
+ height: 0 !important;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Page
+---------------*/
+
+.ui.page.dimmer {
+ position: @pageDimmerPosition;
+ transform-style: @transformStyle;
+ perspective: @perspective;
+ transform-origin: center center;
+}
+
+body.animating.in.dimmable,
+body.dimmed.dimmable {
+ overflow: hidden;
+}
+
+body.dimmable > .dimmer {
+ position: fixed;
+}
+
+/*--------------
+ Blurring
+---------------*/
+
+.blurring.dimmable > :not(.dimmer) {
+ filter: @blurredStartFilter;
+ transition: @blurredTransition;
+}
+.blurring.dimmed.dimmable > :not(.dimmer) {
+ filter: @blurredEndFilter;
+}
+
+/* Dimmer Color */
+.blurring.dimmable > .dimmer {
+ background-color: @blurredBackgroundColor;
+}
+.blurring.dimmable > .inverted.dimmer {
+ background-color: @blurredInvertedBackgroundColor;
+}
+
+/*--------------
+ Aligned
+---------------*/
+
+.ui.dimmer > .top.aligned.content > * {
+ vertical-align: top;
+}
+.ui.dimmer > .bottom.aligned.content > * {
+ vertical-align: bottom;
+}
+
+/*--------------
+ Inverted
+---------------*/
+
+.ui.inverted.dimmer {
+ background-color: @invertedBackgroundColor;
+}
+.ui.inverted.dimmer > .content > * {
+ color: @textColor;
+}
+
+/*--------------
+ Simple
+---------------*/
+
+/* Displays without javascript */
+.ui.simple.dimmer {
+ display: block;
+ overflow: hidden;
+ opacity: 1;
+ width: 0%;
+ height: 0%;
+ z-index: -100;
+ background-color: @simpleStartBackgroundColor;
+}
+.dimmed.dimmable > .ui.simple.dimmer {
+ overflow: visible;
+ opacity: 1;
+ width: 100%;
+ height: 100%;
+ background-color: @simpleEndBackgroundColor;
+ z-index: @simpleZIndex;
+}
+
+.ui.simple.inverted.dimmer {
+ background-color: @simpleInvertedStartBackgroundColor;
+}
+.dimmed.dimmable > .ui.simple.inverted.dimmer {
+ background-color: @simpleInvertedEndBackgroundColor;
+}
+
+.loadUIOverrides();
[41/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/collections/grid.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/collections/grid.less b/semantic/src/definitions/collections/grid.less
new file mode 100755
index 0000000..ebeb4a1
--- /dev/null
+++ b/semantic/src/definitions/collections/grid.less
@@ -0,0 +1,1920 @@
+/*!
+ * # Semantic UI - Grid
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'collection';
+@element : 'grid';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Standard
+*******************************/
+
+.ui.grid {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: stretch;
+ padding: 0em;
+}
+
+/*----------------------
+ Remove Gutters
+-----------------------*/
+
+.ui.grid {
+ margin-top: -(@rowSpacing / 2);
+ margin-bottom: -(@rowSpacing / 2);
+ margin-left: -(@gutterWidth / 2);
+ margin-right: -(@gutterWidth / 2);
+}
+.ui.relaxed.grid {
+ margin-left: -(@relaxedGutterWidth / 2);
+ margin-right: -(@relaxedGutterWidth / 2);
+}
+.ui[class*="very relaxed"].grid {
+ margin-left: -(@veryRelaxedGutterWidth / 2);
+ margin-right: -(@veryRelaxedGutterWidth / 2);
+}
+
+
+/* Preserve Rows Spacing on Consecutive Grids */
+.ui.grid + .grid {
+ margin-top: @consecutiveGridDistance;
+}
+
+/*-------------------
+ Columns
+--------------------*/
+
+/* Standard 16 column */
+.ui.grid > .column:not(.row),
+.ui.grid > .row > .column {
+ position: relative;
+ display: inline-block;
+
+ width: @oneWide;
+ padding-left: (@gutterWidth / 2);
+ padding-right: (@gutterWidth / 2);
+ vertical-align: top;
+}
+
+.ui.grid > * {
+ padding-left: (@gutterWidth / 2);
+ padding-right: (@gutterWidth / 2);
+}
+
+/*-------------------
+ Rows
+--------------------*/
+
+.ui.grid > .row {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: inherit;
+ align-items: stretch;
+ width: 100% !important;
+ padding: 0rem;
+ padding-top: (@rowSpacing / 2);
+ padding-bottom: (@rowSpacing / 2);
+}
+
+/*-------------------
+ Columns
+--------------------*/
+
+/* Vertical padding when no rows */
+.ui.grid > .column:not(.row) {
+ padding-top: (@rowSpacing / 2);
+ padding-bottom: (@rowSpacing / 2);
+}
+.ui.grid > .row > .column {
+ margin-top: 0em;
+ margin-bottom: 0em;
+}
+
+/*-------------------
+ Content
+--------------------*/
+
+.ui.grid > .row > img,
+.ui.grid > .row > .column > img {
+ max-width: @columnMaxImageWidth;
+}
+
+/*-------------------
+ Loose Coupling
+--------------------*/
+
+/* Collapse Margin on Consecutive Grid */
+.ui.grid > .ui.grid:first-child {
+ margin-top: 0em;
+}
+.ui.grid > .ui.grid:last-child {
+ margin-bottom: 0em;
+}
+
+/* Segment inside Aligned Grid */
+.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),
+.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {
+ width: 100%;
+}
+
+/* Align Dividers with Gutter */
+.ui.grid .row + .ui.divider {
+ flex-grow: 1;
+ margin: (@rowSpacing / 2) (@gutterWidth / 2);
+}
+.ui.grid .column + .ui.vertical.divider {
+ height: ~"calc(50% - "(@rowSpacing/2)~")";
+}
+
+/* Remove Border on Last Horizontal Segment */
+.ui.grid > .row > .column:last-child > .horizontal.segment,
+.ui.grid > .column:last-child > .horizontal.segment {
+ box-shadow: none;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*-----------------------
+ Page Grid
+-------------------------*/
+
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.page.grid {
+ width: @mobileWidth;
+ padding-left: @mobileGutter;
+ padding-right: @mobileGutter;
+ margin-left: 0em;
+ margin-right: 0em;
+ }
+}
+@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
+ .ui.page.grid {
+ width: @tabletWidth;
+ margin-left: @tabletMargin;
+ margin-right: @tabletMargin;
+ padding-left: @tabletGutter;
+ padding-right: @tabletGutter;
+ }
+}
+@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {
+ .ui.page.grid {
+ width: @computerWidth;
+ margin-left: @computerMargin;
+ margin-right: @computerMargin;
+ padding-left: @computerGutter;
+ padding-right: @computerGutter;
+ }
+}
+@media only screen and (min-width: @largeMonitorBreakpoint) and (max-width: @largestLargeMonitor) {
+ .ui.page.grid {
+ width: @largeMonitorWidth;
+ margin-left: @largeMonitorMargin;
+ margin-right: @largeMonitorMargin;
+ padding-left: @largeMonitorGutter;
+ padding-right: @largeMonitorGutter;
+ }
+}
+@media only screen and (min-width: @widescreenMonitorBreakpoint) {
+ .ui.page.grid {
+ width: @widescreenMonitorWidth;
+ margin-left: @widescreenMargin;
+ margin-right: @widescreenMargin;
+ padding-left: @widescreenMonitorGutter;
+ padding-right: @widescreenMonitorGutter;
+ }
+}
+
+
+/*-------------------
+ Column Count
+--------------------*/
+
+/* Assume full width with one column */
+.ui.grid > .column:only-child,
+.ui.grid > .row > .column:only-child {
+ width: @oneColumn;
+}
+
+/* Grid Based */
+.ui[class*="one column"].grid > .row > .column,
+.ui[class*="one column"].grid > .column:not(.row) {
+ width: @oneColumn;
+}
+.ui[class*="two column"].grid > .row > .column,
+.ui[class*="two column"].grid > .column:not(.row) {
+ width: @twoColumn;
+}
+.ui[class*="three column"].grid > .row > .column,
+.ui[class*="three column"].grid > .column:not(.row) {
+ width: @threeColumn;
+}
+.ui[class*="four column"].grid > .row > .column,
+.ui[class*="four column"].grid > .column:not(.row) {
+ width: @fourColumn;
+}
+.ui[class*="five column"].grid > .row > .column,
+.ui[class*="five column"].grid > .column:not(.row) {
+ width: @fiveColumn;
+}
+.ui[class*="six column"].grid > .row > .column,
+.ui[class*="six column"].grid > .column:not(.row) {
+ width: @sixColumn;
+}
+.ui[class*="seven column"].grid > .row > .column,
+.ui[class*="seven column"].grid > .column:not(.row) {
+ width: @sevenColumn;
+}
+.ui[class*="eight column"].grid > .row > .column,
+.ui[class*="eight column"].grid > .column:not(.row) {
+ width: @eightColumn;
+}
+.ui[class*="nine column"].grid > .row > .column,
+.ui[class*="nine column"].grid > .column:not(.row) {
+ width: @nineColumn;
+}
+.ui[class*="ten column"].grid > .row > .column,
+.ui[class*="ten column"].grid > .column:not(.row) {
+ width: @tenColumn;
+}
+.ui[class*="eleven column"].grid > .row > .column,
+.ui[class*="eleven column"].grid > .column:not(.row) {
+ width: @elevenColumn;
+}
+.ui[class*="twelve column"].grid > .row > .column,
+.ui[class*="twelve column"].grid > .column:not(.row) {
+ width: @twelveColumn;
+}
+.ui[class*="thirteen column"].grid > .row > .column,
+.ui[class*="thirteen column"].grid > .column:not(.row) {
+ width: @thirteenColumn;
+}
+.ui[class*="fourteen column"].grid > .row > .column,
+.ui[class*="fourteen column"].grid > .column:not(.row) {
+ width: @fourteenColumn;
+}
+.ui[class*="fifteen column"].grid > .row > .column,
+.ui[class*="fifteen column"].grid > .column:not(.row) {
+ width: @fifteenColumn;
+}
+.ui[class*="sixteen column"].grid > .row > .column,
+.ui[class*="sixteen column"].grid > .column:not(.row) {
+ width: @sixteenColumn;
+}
+
+/* Row Based Overrides */
+.ui.grid > [class*="one column"].row > .column {
+ width: @oneColumn !important;
+}
+.ui.grid > [class*="two column"].row > .column {
+ width: @twoColumn !important;
+}
+.ui.grid > [class*="three column"].row > .column {
+ width: @threeColumn !important;
+}
+.ui.grid > [class*="four column"].row > .column {
+ width: @fourColumn !important;
+}
+.ui.grid > [class*="five column"].row > .column {
+ width: @fiveColumn !important;
+}
+.ui.grid > [class*="six column"].row > .column {
+ width: @sixColumn !important;
+}
+.ui.grid > [class*="seven column"].row > .column {
+ width: @sevenColumn !important;
+}
+.ui.grid > [class*="eight column"].row > .column {
+ width: @eightColumn !important;
+}
+.ui.grid > [class*="nine column"].row > .column {
+ width: @nineColumn !important;
+}
+.ui.grid > [class*="ten column"].row > .column {
+ width: @tenColumn !important;
+}
+.ui.grid > [class*="eleven column"].row > .column {
+ width: @elevenColumn !important;
+}
+.ui.grid > [class*="twelve column"].row > .column {
+ width: @twelveColumn !important;
+}
+.ui.grid > [class*="thirteen column"].row > .column {
+ width: @thirteenColumn !important;
+}
+.ui.grid > [class*="fourteen column"].row > .column {
+ width: @fourteenColumn !important;
+}
+.ui.grid > [class*="fifteen column"].row > .column {
+ width: @fifteenColumn !important;
+}
+.ui.grid > [class*="sixteen column"].row > .column {
+ width: @sixteenColumn !important;
+}
+
+/* Celled Page */
+.ui.celled.page.grid {
+ box-shadow: none;
+}
+
+/*-------------------
+ Column Width
+--------------------*/
+
+/* Sizing Combinations */
+.ui.grid > .row > [class*="one wide"].column,
+.ui.grid > .column.row > [class*="one wide"].column,
+.ui.grid > [class*="one wide"].column,
+.ui.column.grid > [class*="one wide"].column {
+ width: @oneWide !important;
+}
+.ui.grid > .row > [class*="two wide"].column,
+.ui.grid > .column.row > [class*="two wide"].column,
+.ui.grid > [class*="two wide"].column,
+.ui.column.grid > [class*="two wide"].column {
+ width: @twoWide !important;
+}
+.ui.grid > .row > [class*="three wide"].column,
+.ui.grid > .column.row > [class*="three wide"].column,
+.ui.grid > [class*="three wide"].column,
+.ui.column.grid > [class*="three wide"].column {
+ width: @threeWide !important;
+}
+.ui.grid > .row > [class*="four wide"].column,
+.ui.grid > .column.row > [class*="four wide"].column,
+.ui.grid > [class*="four wide"].column,
+.ui.column.grid > [class*="four wide"].column {
+ width: @fourWide !important;
+}
+.ui.grid > .row > [class*="five wide"].column,
+.ui.grid > .column.row > [class*="five wide"].column,
+.ui.grid > [class*="five wide"].column,
+.ui.column.grid > [class*="five wide"].column {
+ width: @fiveWide !important;
+}
+.ui.grid > .row > [class*="six wide"].column,
+.ui.grid > .column.row > [class*="six wide"].column,
+.ui.grid > [class*="six wide"].column,
+.ui.column.grid > [class*="six wide"].column {
+ width: @sixWide !important;
+}
+.ui.grid > .row > [class*="seven wide"].column,
+.ui.grid > .column.row > [class*="seven wide"].column,
+.ui.grid > [class*="seven wide"].column,
+.ui.column.grid > [class*="seven wide"].column {
+ width: @sevenWide !important;
+}
+.ui.grid > .row > [class*="eight wide"].column,
+.ui.grid > .column.row > [class*="eight wide"].column,
+.ui.grid > [class*="eight wide"].column,
+.ui.column.grid > [class*="eight wide"].column {
+ width: @eightWide !important;
+}
+.ui.grid > .row > [class*="nine wide"].column,
+.ui.grid > .column.row > [class*="nine wide"].column,
+.ui.grid > [class*="nine wide"].column,
+.ui.column.grid > [class*="nine wide"].column {
+ width: @nineWide !important;
+}
+.ui.grid > .row > [class*="ten wide"].column,
+.ui.grid > .column.row > [class*="ten wide"].column,
+.ui.grid > [class*="ten wide"].column,
+.ui.column.grid > [class*="ten wide"].column {
+ width: @tenWide !important;
+}
+.ui.grid > .row > [class*="eleven wide"].column,
+.ui.grid > .column.row > [class*="eleven wide"].column,
+.ui.grid > [class*="eleven wide"].column,
+.ui.column.grid > [class*="eleven wide"].column {
+ width: @elevenWide !important;
+}
+.ui.grid > .row > [class*="twelve wide"].column,
+.ui.grid > .column.row > [class*="twelve wide"].column,
+.ui.grid > [class*="twelve wide"].column,
+.ui.column.grid > [class*="twelve wide"].column {
+ width: @twelveWide !important;
+}
+.ui.grid > .row > [class*="thirteen wide"].column,
+.ui.grid > .column.row > [class*="thirteen wide"].column,
+.ui.grid > [class*="thirteen wide"].column,
+.ui.column.grid > [class*="thirteen wide"].column {
+ width: @thirteenWide !important;
+}
+.ui.grid > .row > [class*="fourteen wide"].column,
+.ui.grid > .column.row > [class*="fourteen wide"].column,
+.ui.grid > [class*="fourteen wide"].column,
+.ui.column.grid > [class*="fourteen wide"].column {
+ width: @fourteenWide !important;
+}
+.ui.grid > .row > [class*="fifteen wide"].column,
+.ui.grid > .column.row > [class*="fifteen wide"].column,
+.ui.grid > [class*="fifteen wide"].column,
+.ui.column.grid > [class*="fifteen wide"].column {
+ width: @fifteenWide !important;
+}
+.ui.grid > .row > [class*="sixteen wide"].column,
+.ui.grid > .column.row > [class*="sixteen wide"].column,
+.ui.grid > [class*="sixteen wide"].column,
+.ui.column.grid > [class*="sixteen wide"].column {
+ width: @sixteenWide !important;
+}
+
+/*----------------------
+ Width per Device
+-----------------------*/
+
+/* Mobile Sizing Combinations */
+@media only screen and (min-width: @mobileBreakpoint) and (max-width: @largestMobileScreen) {
+ .ui.grid > .row > [class*="one wide mobile"].column,
+ .ui.grid > .column.row > [class*="one wide mobile"].column,
+ .ui.grid > [class*="one wide mobile"].column,
+ .ui.column.grid > [class*="one wide mobile"].column {
+ width: @oneWide !important;
+ }
+ .ui.grid > .row > [class*="two wide mobile"].column,
+ .ui.grid > .column.row > [class*="two wide mobile"].column,
+ .ui.grid > [class*="two wide mobile"].column,
+ .ui.column.grid > [class*="two wide mobile"].column {
+ width: @twoWide !important;
+ }
+ .ui.grid > .row > [class*="three wide mobile"].column,
+ .ui.grid > .column.row > [class*="three wide mobile"].column,
+ .ui.grid > [class*="three wide mobile"].column,
+ .ui.column.grid > [class*="three wide mobile"].column {
+ width: @threeWide !important;
+ }
+ .ui.grid > .row > [class*="four wide mobile"].column,
+ .ui.grid > .column.row > [class*="four wide mobile"].column,
+ .ui.grid > [class*="four wide mobile"].column,
+ .ui.column.grid > [class*="four wide mobile"].column {
+ width: @fourWide !important;
+ }
+ .ui.grid > .row > [class*="five wide mobile"].column,
+ .ui.grid > .column.row > [class*="five wide mobile"].column,
+ .ui.grid > [class*="five wide mobile"].column,
+ .ui.column.grid > [class*="five wide mobile"].column {
+ width: @fiveWide !important;
+ }
+ .ui.grid > .row > [class*="six wide mobile"].column,
+ .ui.grid > .column.row > [class*="six wide mobile"].column,
+ .ui.grid > [class*="six wide mobile"].column,
+ .ui.column.grid > [class*="six wide mobile"].column {
+ width: @sixWide !important;
+ }
+ .ui.grid > .row > [class*="seven wide mobile"].column,
+ .ui.grid > .column.row > [class*="seven wide mobile"].column,
+ .ui.grid > [class*="seven wide mobile"].column,
+ .ui.column.grid > [class*="seven wide mobile"].column {
+ width: @sevenWide !important;
+ }
+ .ui.grid > .row > [class*="eight wide mobile"].column,
+ .ui.grid > .column.row > [class*="eight wide mobile"].column,
+ .ui.grid > [class*="eight wide mobile"].column,
+ .ui.column.grid > [class*="eight wide mobile"].column {
+ width: @eightWide !important;
+ }
+ .ui.grid > .row > [class*="nine wide mobile"].column,
+ .ui.grid > .column.row > [class*="nine wide mobile"].column,
+ .ui.grid > [class*="nine wide mobile"].column,
+ .ui.column.grid > [class*="nine wide mobile"].column {
+ width: @nineWide !important;
+ }
+ .ui.grid > .row > [class*="ten wide mobile"].column,
+ .ui.grid > .column.row > [class*="ten wide mobile"].column,
+ .ui.grid > [class*="ten wide mobile"].column,
+ .ui.column.grid > [class*="ten wide mobile"].column {
+ width: @tenWide !important;
+ }
+ .ui.grid > .row > [class*="eleven wide mobile"].column,
+ .ui.grid > .column.row > [class*="eleven wide mobile"].column,
+ .ui.grid > [class*="eleven wide mobile"].column,
+ .ui.column.grid > [class*="eleven wide mobile"].column {
+ width: @elevenWide !important;
+ }
+ .ui.grid > .row > [class*="twelve wide mobile"].column,
+ .ui.grid > .column.row > [class*="twelve wide mobile"].column,
+ .ui.grid > [class*="twelve wide mobile"].column,
+ .ui.column.grid > [class*="twelve wide mobile"].column {
+ width: @twelveWide !important;
+ }
+ .ui.grid > .row > [class*="thirteen wide mobile"].column,
+ .ui.grid > .column.row > [class*="thirteen wide mobile"].column,
+ .ui.grid > [class*="thirteen wide mobile"].column,
+ .ui.column.grid > [class*="thirteen wide mobile"].column {
+ width: @thirteenWide !important;
+ }
+ .ui.grid > .row > [class*="fourteen wide mobile"].column,
+ .ui.grid > .column.row > [class*="fourteen wide mobile"].column,
+ .ui.grid > [class*="fourteen wide mobile"].column,
+ .ui.column.grid > [class*="fourteen wide mobile"].column {
+ width: @fourteenWide !important;
+ }
+ .ui.grid > .row > [class*="fifteen wide mobile"].column,
+ .ui.grid > .column.row > [class*="fifteen wide mobile"].column,
+ .ui.grid > [class*="fifteen wide mobile"].column,
+ .ui.column.grid > [class*="fifteen wide mobile"].column {
+ width: @fifteenWide !important;
+ }
+ .ui.grid > .row > [class*="sixteen wide mobile"].column,
+ .ui.grid > .column.row > [class*="sixteen wide mobile"].column,
+ .ui.grid > [class*="sixteen wide mobile"].column,
+ .ui.column.grid > [class*="sixteen wide mobile"].column {
+ width: @sixteenWide !important;
+ }
+}
+
+/* Tablet Sizing Combinations */
+@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
+ .ui.grid > .row > [class*="one wide tablet"].column,
+ .ui.grid > .column.row > [class*="one wide tablet"].column,
+ .ui.grid > [class*="one wide tablet"].column,
+ .ui.column.grid > [class*="one wide tablet"].column {
+ width: @oneWide !important;
+ }
+ .ui.grid > .row > [class*="two wide tablet"].column,
+ .ui.grid > .column.row > [class*="two wide tablet"].column,
+ .ui.grid > [class*="two wide tablet"].column,
+ .ui.column.grid > [class*="two wide tablet"].column {
+ width: @twoWide !important;
+ }
+ .ui.grid > .row > [class*="three wide tablet"].column,
+ .ui.grid > .column.row > [class*="three wide tablet"].column,
+ .ui.grid > [class*="three wide tablet"].column,
+ .ui.column.grid > [class*="three wide tablet"].column {
+ width: @threeWide !important;
+ }
+ .ui.grid > .row > [class*="four wide tablet"].column,
+ .ui.grid > .column.row > [class*="four wide tablet"].column,
+ .ui.grid > [class*="four wide tablet"].column,
+ .ui.column.grid > [class*="four wide tablet"].column {
+ width: @fourWide !important;
+ }
+ .ui.grid > .row > [class*="five wide tablet"].column,
+ .ui.grid > .column.row > [class*="five wide tablet"].column,
+ .ui.grid > [class*="five wide tablet"].column,
+ .ui.column.grid > [class*="five wide tablet"].column {
+ width: @fiveWide !important;
+ }
+ .ui.grid > .row > [class*="six wide tablet"].column,
+ .ui.grid > .column.row > [class*="six wide tablet"].column,
+ .ui.grid > [class*="six wide tablet"].column,
+ .ui.column.grid > [class*="six wide tablet"].column {
+ width: @sixWide !important;
+ }
+ .ui.grid > .row > [class*="seven wide tablet"].column,
+ .ui.grid > .column.row > [class*="seven wide tablet"].column,
+ .ui.grid > [class*="seven wide tablet"].column,
+ .ui.column.grid > [class*="seven wide tablet"].column {
+ width: @sevenWide !important;
+ }
+ .ui.grid > .row > [class*="eight wide tablet"].column,
+ .ui.grid > .column.row > [class*="eight wide tablet"].column,
+ .ui.grid > [class*="eight wide tablet"].column,
+ .ui.column.grid > [class*="eight wide tablet"].column {
+ width: @eightWide !important;
+ }
+ .ui.grid > .row > [class*="nine wide tablet"].column,
+ .ui.grid > .column.row > [class*="nine wide tablet"].column,
+ .ui.grid > [class*="nine wide tablet"].column,
+ .ui.column.grid > [class*="nine wide tablet"].column {
+ width: @nineWide !important;
+ }
+ .ui.grid > .row > [class*="ten wide tablet"].column,
+ .ui.grid > .column.row > [class*="ten wide tablet"].column,
+ .ui.grid > [class*="ten wide tablet"].column,
+ .ui.column.grid > [class*="ten wide tablet"].column {
+ width: @tenWide !important;
+ }
+ .ui.grid > .row > [class*="eleven wide tablet"].column,
+ .ui.grid > .column.row > [class*="eleven wide tablet"].column,
+ .ui.grid > [class*="eleven wide tablet"].column,
+ .ui.column.grid > [class*="eleven wide tablet"].column {
+ width: @elevenWide !important;
+ }
+ .ui.grid > .row > [class*="twelve wide tablet"].column,
+ .ui.grid > .column.row > [class*="twelve wide tablet"].column,
+ .ui.grid > [class*="twelve wide tablet"].column,
+ .ui.column.grid > [class*="twelve wide tablet"].column {
+ width: @twelveWide !important;
+ }
+ .ui.grid > .row > [class*="thirteen wide tablet"].column,
+ .ui.grid > .column.row > [class*="thirteen wide tablet"].column,
+ .ui.grid > [class*="thirteen wide tablet"].column,
+ .ui.column.grid > [class*="thirteen wide tablet"].column {
+ width: @thirteenWide !important;
+ }
+ .ui.grid > .row > [class*="fourteen wide tablet"].column,
+ .ui.grid > .column.row > [class*="fourteen wide tablet"].column,
+ .ui.grid > [class*="fourteen wide tablet"].column,
+ .ui.column.grid > [class*="fourteen wide tablet"].column {
+ width: @fourteenWide !important;
+ }
+ .ui.grid > .row > [class*="fifteen wide tablet"].column,
+ .ui.grid > .column.row > [class*="fifteen wide tablet"].column,
+ .ui.grid > [class*="fifteen wide tablet"].column,
+ .ui.column.grid > [class*="fifteen wide tablet"].column {
+ width: @fifteenWide !important;
+ }
+ .ui.grid > .row > [class*="sixteen wide tablet"].column,
+ .ui.grid > .column.row > [class*="sixteen wide tablet"].column,
+ .ui.grid > [class*="sixteen wide tablet"].column,
+ .ui.column.grid > [class*="sixteen wide tablet"].column {
+ width: @sixteenWide !important;
+ }
+}
+
+/* Computer/Desktop Sizing Combinations */
+@media only screen and (min-width: @computerBreakpoint) {
+ .ui.grid > .row > [class*="one wide computer"].column,
+ .ui.grid > .column.row > [class*="one wide computer"].column,
+ .ui.grid > [class*="one wide computer"].column,
+ .ui.column.grid > [class*="one wide computer"].column {
+ width: @oneWide !important;
+ }
+ .ui.grid > .row > [class*="two wide computer"].column,
+ .ui.grid > .column.row > [class*="two wide computer"].column,
+ .ui.grid > [class*="two wide computer"].column,
+ .ui.column.grid > [class*="two wide computer"].column {
+ width: @twoWide !important;
+ }
+ .ui.grid > .row > [class*="three wide computer"].column,
+ .ui.grid > .column.row > [class*="three wide computer"].column,
+ .ui.grid > [class*="three wide computer"].column,
+ .ui.column.grid > [class*="three wide computer"].column {
+ width: @threeWide !important;
+ }
+ .ui.grid > .row > [class*="four wide computer"].column,
+ .ui.grid > .column.row > [class*="four wide computer"].column,
+ .ui.grid > [class*="four wide computer"].column,
+ .ui.column.grid > [class*="four wide computer"].column {
+ width: @fourWide !important;
+ }
+ .ui.grid > .row > [class*="five wide computer"].column,
+ .ui.grid > .column.row > [class*="five wide computer"].column,
+ .ui.grid > [class*="five wide computer"].column,
+ .ui.column.grid > [class*="five wide computer"].column {
+ width: @fiveWide !important;
+ }
+ .ui.grid > .row > [class*="six wide computer"].column,
+ .ui.grid > .column.row > [class*="six wide computer"].column,
+ .ui.grid > [class*="six wide computer"].column,
+ .ui.column.grid > [class*="six wide computer"].column {
+ width: @sixWide !important;
+ }
+ .ui.grid > .row > [class*="seven wide computer"].column,
+ .ui.grid > .column.row > [class*="seven wide computer"].column,
+ .ui.grid > [class*="seven wide computer"].column,
+ .ui.column.grid > [class*="seven wide computer"].column {
+ width: @sevenWide !important;
+ }
+ .ui.grid > .row > [class*="eight wide computer"].column,
+ .ui.grid > .column.row > [class*="eight wide computer"].column,
+ .ui.grid > [class*="eight wide computer"].column,
+ .ui.column.grid > [class*="eight wide computer"].column {
+ width: @eightWide !important;
+ }
+ .ui.grid > .row > [class*="nine wide computer"].column,
+ .ui.grid > .column.row > [class*="nine wide computer"].column,
+ .ui.grid > [class*="nine wide computer"].column,
+ .ui.column.grid > [class*="nine wide computer"].column {
+ width: @nineWide !important;
+ }
+ .ui.grid > .row > [class*="ten wide computer"].column,
+ .ui.grid > .column.row > [class*="ten wide computer"].column,
+ .ui.grid > [class*="ten wide computer"].column,
+ .ui.column.grid > [class*="ten wide computer"].column {
+ width: @tenWide !important;
+ }
+ .ui.grid > .row > [class*="eleven wide computer"].column,
+ .ui.grid > .column.row > [class*="eleven wide computer"].column,
+ .ui.grid > [class*="eleven wide computer"].column,
+ .ui.column.grid > [class*="eleven wide computer"].column {
+ width: @elevenWide !important;
+ }
+ .ui.grid > .row > [class*="twelve wide computer"].column,
+ .ui.grid > .column.row > [class*="twelve wide computer"].column,
+ .ui.grid > [class*="twelve wide computer"].column,
+ .ui.column.grid > [class*="twelve wide computer"].column {
+ width: @twelveWide !important;
+ }
+ .ui.grid > .row > [class*="thirteen wide computer"].column,
+ .ui.grid > .column.row > [class*="thirteen wide computer"].column,
+ .ui.grid > [class*="thirteen wide computer"].column,
+ .ui.column.grid > [class*="thirteen wide computer"].column {
+ width: @thirteenWide !important;
+ }
+ .ui.grid > .row > [class*="fourteen wide computer"].column,
+ .ui.grid > .column.row > [class*="fourteen wide computer"].column,
+ .ui.grid > [class*="fourteen wide computer"].column,
+ .ui.column.grid > [class*="fourteen wide computer"].column {
+ width: @fourteenWide !important;
+ }
+ .ui.grid > .row > [class*="fifteen wide computer"].column,
+ .ui.grid > .column.row > [class*="fifteen wide computer"].column,
+ .ui.grid > [class*="fifteen wide computer"].column,
+ .ui.column.grid > [class*="fifteen wide computer"].column {
+ width: @fifteenWide !important;
+ }
+ .ui.grid > .row > [class*="sixteen wide computer"].column,
+ .ui.grid > .column.row > [class*="sixteen wide computer"].column,
+ .ui.grid > [class*="sixteen wide computer"].column,
+ .ui.column.grid > [class*="sixteen wide computer"].column {
+ width: @sixteenWide !important;
+ }
+}
+
+/* Large Monitor Sizing Combinations */
+@media only screen and (min-width: @largeMonitorBreakpoint) and (max-width: @largestLargeMonitor){
+ .ui.grid > .row > [class*="one wide large screen"].column,
+ .ui.grid > .column.row > [class*="one wide large screen"].column,
+ .ui.grid > [class*="one wide large screen"].column,
+ .ui.column.grid > [class*="one wide large screen"].column {
+ width: @oneWide !important;
+ }
+ .ui.grid > .row > [class*="two wide large screen"].column,
+ .ui.grid > .column.row > [class*="two wide large screen"].column,
+ .ui.grid > [class*="two wide large screen"].column,
+ .ui.column.grid > [class*="two wide large screen"].column {
+ width: @twoWide !important;
+ }
+ .ui.grid > .row > [class*="three wide large screen"].column,
+ .ui.grid > .column.row > [class*="three wide large screen"].column,
+ .ui.grid > [class*="three wide large screen"].column,
+ .ui.column.grid > [class*="three wide large screen"].column {
+ width: @threeWide !important;
+ }
+ .ui.grid > .row > [class*="four wide large screen"].column,
+ .ui.grid > .column.row > [class*="four wide large screen"].column,
+ .ui.grid > [class*="four wide large screen"].column,
+ .ui.column.grid > [class*="four wide large screen"].column {
+ width: @fourWide !important;
+ }
+ .ui.grid > .row > [class*="five wide large screen"].column,
+ .ui.grid > .column.row > [class*="five wide large screen"].column,
+ .ui.grid > [class*="five wide large screen"].column,
+ .ui.column.grid > [class*="five wide large screen"].column {
+ width: @fiveWide !important;
+ }
+ .ui.grid > .row > [class*="six wide large screen"].column,
+ .ui.grid > .column.row > [class*="six wide large screen"].column,
+ .ui.grid > [class*="six wide large screen"].column,
+ .ui.column.grid > [class*="six wide large screen"].column {
+ width: @sixWide !important;
+ }
+ .ui.grid > .row > [class*="seven wide large screen"].column,
+ .ui.grid > .column.row > [class*="seven wide large screen"].column,
+ .ui.grid > [class*="seven wide large screen"].column,
+ .ui.column.grid > [class*="seven wide large screen"].column {
+ width: @sevenWide !important;
+ }
+ .ui.grid > .row > [class*="eight wide large screen"].column,
+ .ui.grid > .column.row > [class*="eight wide large screen"].column,
+ .ui.grid > [class*="eight wide large screen"].column,
+ .ui.column.grid > [class*="eight wide large screen"].column {
+ width: @eightWide !important;
+ }
+ .ui.grid > .row > [class*="nine wide large screen"].column,
+ .ui.grid > .column.row > [class*="nine wide large screen"].column,
+ .ui.grid > [class*="nine wide large screen"].column,
+ .ui.column.grid > [class*="nine wide large screen"].column {
+ width: @nineWide !important;
+ }
+ .ui.grid > .row > [class*="ten wide large screen"].column,
+ .ui.grid > .column.row > [class*="ten wide large screen"].column,
+ .ui.grid > [class*="ten wide large screen"].column,
+ .ui.column.grid > [class*="ten wide large screen"].column {
+ width: @tenWide !important;
+ }
+ .ui.grid > .row > [class*="eleven wide large screen"].column,
+ .ui.grid > .column.row > [class*="eleven wide large screen"].column,
+ .ui.grid > [class*="eleven wide large screen"].column,
+ .ui.column.grid > [class*="eleven wide large screen"].column {
+ width: @elevenWide !important;
+ }
+ .ui.grid > .row > [class*="twelve wide large screen"].column,
+ .ui.grid > .column.row > [class*="twelve wide large screen"].column,
+ .ui.grid > [class*="twelve wide large screen"].column,
+ .ui.column.grid > [class*="twelve wide large screen"].column {
+ width: @twelveWide !important;
+ }
+ .ui.grid > .row > [class*="thirteen wide large screen"].column,
+ .ui.grid > .column.row > [class*="thirteen wide large screen"].column,
+ .ui.grid > [class*="thirteen wide large screen"].column,
+ .ui.column.grid > [class*="thirteen wide large screen"].column {
+ width: @thirteenWide !important;
+ }
+ .ui.grid > .row > [class*="fourteen wide large screen"].column,
+ .ui.grid > .column.row > [class*="fourteen wide large screen"].column,
+ .ui.grid > [class*="fourteen wide large screen"].column,
+ .ui.column.grid > [class*="fourteen wide large screen"].column {
+ width: @fourteenWide !important;
+ }
+ .ui.grid > .row > [class*="fifteen wide large screen"].column,
+ .ui.grid > .column.row > [class*="fifteen wide large screen"].column,
+ .ui.grid > [class*="fifteen wide large screen"].column,
+ .ui.column.grid > [class*="fifteen wide large screen"].column {
+ width: @fifteenWide !important;
+ }
+ .ui.grid > .row > [class*="sixteen wide large screen"].column,
+ .ui.grid > .column.row > [class*="sixteen wide large screen"].column,
+ .ui.grid > [class*="sixteen wide large screen"].column,
+ .ui.column.grid > [class*="sixteen wide large screen"].column {
+ width: @sixteenWide !important;
+ }
+}
+
+/* Widescreen Sizing Combinations */
+@media only screen and (min-width: @widescreenMonitorBreakpoint) {
+ .ui.grid > .row > [class*="one wide widescreen"].column,
+ .ui.grid > .column.row > [class*="one wide widescreen"].column,
+ .ui.grid > [class*="one wide widescreen"].column,
+ .ui.column.grid > [class*="one wide widescreen"].column {
+ width: @oneWide !important;
+ }
+ .ui.grid > .row > [class*="two wide widescreen"].column,
+ .ui.grid > .column.row > [class*="two wide widescreen"].column,
+ .ui.grid > [class*="two wide widescreen"].column,
+ .ui.column.grid > [class*="two wide widescreen"].column {
+ width: @twoWide !important;
+ }
+ .ui.grid > .row > [class*="three wide widescreen"].column,
+ .ui.grid > .column.row > [class*="three wide widescreen"].column,
+ .ui.grid > [class*="three wide widescreen"].column,
+ .ui.column.grid > [class*="three wide widescreen"].column {
+ width: @threeWide !important;
+ }
+ .ui.grid > .row > [class*="four wide widescreen"].column,
+ .ui.grid > .column.row > [class*="four wide widescreen"].column,
+ .ui.grid > [class*="four wide widescreen"].column,
+ .ui.column.grid > [class*="four wide widescreen"].column {
+ width: @fourWide !important;
+ }
+ .ui.grid > .row > [class*="five wide widescreen"].column,
+ .ui.grid > .column.row > [class*="five wide widescreen"].column,
+ .ui.grid > [class*="five wide widescreen"].column,
+ .ui.column.grid > [class*="five wide widescreen"].column {
+ width: @fiveWide !important;
+ }
+ .ui.grid > .row > [class*="six wide widescreen"].column,
+ .ui.grid > .column.row > [class*="six wide widescreen"].column,
+ .ui.grid > [class*="six wide widescreen"].column,
+ .ui.column.grid > [class*="six wide widescreen"].column {
+ width: @sixWide !important;
+ }
+ .ui.grid > .row > [class*="seven wide widescreen"].column,
+ .ui.grid > .column.row > [class*="seven wide widescreen"].column,
+ .ui.grid > [class*="seven wide widescreen"].column,
+ .ui.column.grid > [class*="seven wide widescreen"].column {
+ width: @sevenWide !important;
+ }
+ .ui.grid > .row > [class*="eight wide widescreen"].column,
+ .ui.grid > .column.row > [class*="eight wide widescreen"].column,
+ .ui.grid > [class*="eight wide widescreen"].column,
+ .ui.column.grid > [class*="eight wide widescreen"].column {
+ width: @eightWide !important;
+ }
+ .ui.grid > .row > [class*="nine wide widescreen"].column,
+ .ui.grid > .column.row > [class*="nine wide widescreen"].column,
+ .ui.grid > [class*="nine wide widescreen"].column,
+ .ui.column.grid > [class*="nine wide widescreen"].column {
+ width: @nineWide !important;
+ }
+ .ui.grid > .row > [class*="ten wide widescreen"].column,
+ .ui.grid > .column.row > [class*="ten wide widescreen"].column,
+ .ui.grid > [class*="ten wide widescreen"].column,
+ .ui.column.grid > [class*="ten wide widescreen"].column {
+ width: @tenWide !important;
+ }
+ .ui.grid > .row > [class*="eleven wide widescreen"].column,
+ .ui.grid > .column.row > [class*="eleven wide widescreen"].column,
+ .ui.grid > [class*="eleven wide widescreen"].column,
+ .ui.column.grid > [class*="eleven wide widescreen"].column {
+ width: @elevenWide !important;
+ }
+ .ui.grid > .row > [class*="twelve wide widescreen"].column,
+ .ui.grid > .column.row > [class*="twelve wide widescreen"].column,
+ .ui.grid > [class*="twelve wide widescreen"].column,
+ .ui.column.grid > [class*="twelve wide widescreen"].column {
+ width: @twelveWide !important;
+ }
+ .ui.grid > .row > [class*="thirteen wide widescreen"].column,
+ .ui.grid > .column.row > [class*="thirteen wide widescreen"].column,
+ .ui.grid > [class*="thirteen wide widescreen"].column,
+ .ui.column.grid > [class*="thirteen wide widescreen"].column {
+ width: @thirteenWide !important;
+ }
+ .ui.grid > .row > [class*="fourteen wide widescreen"].column,
+ .ui.grid > .column.row > [class*="fourteen wide widescreen"].column,
+ .ui.grid > [class*="fourteen wide widescreen"].column,
+ .ui.column.grid > [class*="fourteen wide widescreen"].column {
+ width: @fourteenWide !important;
+ }
+ .ui.grid > .row > [class*="fifteen wide widescreen"].column,
+ .ui.grid > .column.row > [class*="fifteen wide widescreen"].column,
+ .ui.grid > [class*="fifteen wide widescreen"].column,
+ .ui.column.grid > [class*="fifteen wide widescreen"].column {
+ width: @fifteenWide !important;
+ }
+ .ui.grid > .row > [class*="sixteen wide widescreen"].column,
+ .ui.grid > .column.row > [class*="sixteen wide widescreen"].column,
+ .ui.grid > [class*="sixteen wide widescreen"].column,
+ .ui.column.grid > [class*="sixteen wide widescreen"].column {
+ width: @sixteenWide !important;
+ }
+}
+
+/*----------------------
+ Centered
+-----------------------*/
+
+.ui.centered.grid,
+.ui.centered.grid > .row,
+.ui.grid > .centered.row {
+ text-align: center;
+ justify-content: center;
+}
+.ui.centered.grid > .column:not(.aligned):not(:justified):not(.row),
+.ui.centered.grid > .row > .column:not(.aligned):not(:justified),
+.ui.grid .centered.row > .column:not(.aligned):not(:justified) {
+ text-align: left;
+}
+
+.ui.grid > .centered.column,
+.ui.grid > .row > .centered.column {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/*----------------------
+ Relaxed
+-----------------------*/
+
+.ui.relaxed.grid > .column:not(.row),
+.ui.relaxed.grid > .row > .column,
+.ui.grid > .relaxed.row > .column {
+ padding-left: (@relaxedGutterWidth / 2);
+ padding-right: (@relaxedGutterWidth / 2);
+}
+
+.ui[class*="very relaxed"].grid > .column:not(.row),
+.ui[class*="very relaxed"].grid > .row > .column,
+.ui.grid > [class*="very relaxed"].row > .column {
+ padding-left: (@veryRelaxedGutterWidth / 2);
+ padding-right: (@veryRelaxedGutterWidth / 2);
+}
+
+/* Coupling with UI Divider */
+.ui.relaxed.grid .row + .ui.divider,
+.ui.grid .relaxed.row + .ui.divider {
+ margin-left: (@relaxedGutterWidth / 2);
+ margin-right: (@relaxedGutterWidth / 2);
+}
+.ui[class*="very relaxed"].grid .row + .ui.divider,
+.ui.grid [class*="very relaxed"].row + .ui.divider {
+ margin-left: (@veryRelaxedGutterWidth / 2);
+ margin-right: (@veryRelaxedGutterWidth / 2);
+}
+
+
+/*----------------------
+ Padded
+-----------------------*/
+
+.ui.padded.grid:not(.vertically):not(.horizontally) {
+ margin: 0em !important;
+}
+[class*="horizontally padded"].ui.grid {
+ margin-left: 0em !important;
+ margin-right: 0em !important;
+}
+[class*="vertically padded"].ui.grid {
+ margin-top: 0em !important;
+ margin-bottom: 0em !important;
+}
+
+/*----------------------
+ "Floated"
+-----------------------*/
+
+.ui.grid [class*="left floated"].column {
+ margin-right: auto;
+}
+.ui.grid [class*="right floated"].column {
+ margin-left: auto;
+}
+
+
+/*----------------------
+ Divided
+-----------------------*/
+
+.ui.divided.grid:not([class*="vertically divided"]) > .column:not(.row),
+.ui.divided.grid:not([class*="vertically divided"]) > .row > .column {
+ box-shadow: @dividedBorder;
+}
+
+/* Swap from padding to margin on columns to have dividers align */
+.ui[class*="vertically divided"].grid > .column:not(.row),
+.ui[class*="vertically divided"].grid > .row > .column {
+ margin-top: (@rowSpacing / 2);
+ margin-bottom: (@rowSpacing / 2);
+ padding-top: 0rem;
+ padding-bottom: 0rem;
+}
+.ui[class*="vertically divided"].grid > .row {
+ margin-top: 0em;
+ margin-bottom: 0em;
+}
+
+
+
+/* No divider on first column on row */
+.ui.divided.grid:not([class*="vertically divided"]) > .column:first-child,
+.ui.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child {
+ box-shadow: none;
+}
+
+/* No space on top of first row */
+.ui[class*="vertically divided"].grid > .row:first-child > .column {
+ margin-top: 0em;
+}
+
+
+/* Divided Row */
+.ui.grid > .divided.row > .column {
+ box-shadow: @dividedBorder;
+}
+.ui.grid > .divided.row > .column:first-child {
+ box-shadow: none;
+}
+
+/* Vertically Divided */
+.ui[class*="vertically divided"].grid > .row {
+ position: relative;
+}
+.ui[class*="vertically divided"].grid > .row:before {
+ position: absolute;
+ content: "";
+ top: 0em;
+ left: 0px;
+
+ width: ~"calc(100% - "@gutterWidth~")";
+ height: 1px;
+
+ margin: 0% (@gutterWidth / 2);
+ box-shadow: @verticallyDividedBorder;
+}
+
+/* Padded Horizontally Divided */
+[class*="horizontally padded"].ui.divided.grid,
+.ui.padded.divided.grid:not(.vertically):not(.horizontally) {
+ width: 100%;
+}
+
+/* First Row Vertically Divided */
+.ui[class*="vertically divided"].grid > .row:first-child:before {
+ box-shadow: none;
+}
+
+/* Inverted Divided */
+.ui.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row),
+.ui.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column {
+ box-shadow: @dividedInvertedBorder;
+}
+.ui.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row):first-child,
+.ui.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child {
+ box-shadow: none;
+}
+.ui.inverted[class*="vertically divided"].grid > .row:before {
+ box-shadow: @verticallyDividedInvertedBorder;
+}
+
+/* Relaxed */
+.ui.relaxed[class*="vertically divided"].grid > .row:before {
+ margin-left: (@relaxedGutterWidth / 2);
+ margin-right: (@relaxedGutterWidth / 2);
+ width: ~"calc(100% - "@relaxedGutterWidth~")";
+}
+.ui[class*="very relaxed"][class*="vertically divided"].grid > .row:before {
+ margin-left: @veryRelaxedGutterWidth;
+ margin-right: @veryRelaxedGutterWidth;
+ width: ~"calc(100% - "@veryRelaxedGutterWidth~")";
+}
+
+/*----------------------
+ Celled
+-----------------------*/
+
+.ui.celled.grid {
+ width: 100%;
+ margin: @celledMargin;
+ box-shadow: @celledGridDivider;
+}
+
+.ui.celled.grid > .row {
+ width: 100% !important;
+ margin: 0em;
+ padding: 0em;
+ box-shadow: @celledRowDivider;
+}
+.ui.celled.grid > .column:not(.row),
+.ui.celled.grid > .row > .column {
+ box-shadow: @celledColumnDivider;
+}
+
+.ui.celled.grid > .column:first-child,
+.ui.celled.grid > .row > .column:first-child {
+ box-shadow: none;
+}
+
+.ui.celled.grid > .column:not(.row),
+.ui.celled.grid > .row > .column {
+ padding: @celledPadding;
+}
+.ui.relaxed.celled.grid > .column:not(.row),
+.ui.relaxed.celled.grid > .row > .column {
+ padding: @celledRelaxedPadding;
+}
+.ui[class*="very relaxed"].celled.grid > .column:not(.row),
+.ui[class*="very relaxed"].celled.grid > .row > .column {
+ padding: @celledVeryRelaxedPadding;
+}
+
+/* Internally Celled */
+.ui[class*="internally celled"].grid {
+ box-shadow: none;
+ margin: 0em;
+}
+.ui[class*="internally celled"].grid > .row:first-child {
+ box-shadow: none;
+}
+.ui[class*="internally celled"].grid > .row > .column:first-child {
+ box-shadow: none;
+}
+
+/*----------------------
+ Vertically Aligned
+-----------------------*/
+
+/* Top Aligned */
+.ui[class*="top aligned"].grid > .column:not(.row),
+.ui[class*="top aligned"].grid > .row > .column,
+.ui.grid > [class*="top aligned"].row > .column,
+.ui.grid > [class*="top aligned"].column:not(.row),
+.ui.grid > .row > [class*="top aligned"].column {
+ flex-direction: column;
+ vertical-align: top;
+ align-self: flex-start !important;
+}
+
+/* Middle Aligned */
+.ui[class*="middle aligned"].grid > .column:not(.row),
+.ui[class*="middle aligned"].grid > .row > .column,
+.ui.grid > [class*="middle aligned"].row > .column,
+.ui.grid > [class*="middle aligned"].column:not(.row),
+.ui.grid > .row > [class*="middle aligned"].column {
+ flex-direction: column;
+ vertical-align: middle;
+ align-self: center !important;
+}
+
+/* Bottom Aligned */
+.ui[class*="bottom aligned"].grid > .column:not(.row),
+.ui[class*="bottom aligned"].grid > .row > .column,
+.ui.grid > [class*="bottom aligned"].row > .column,
+.ui.grid > [class*="bottom aligned"].column:not(.row),
+.ui.grid > .row > [class*="bottom aligned"].column {
+ flex-direction: column;
+ vertical-align: bottom;
+ align-self: flex-end !important;
+}
+
+/* Stretched */
+.ui.stretched.grid > .row > .column,
+.ui.stretched.grid > .column,
+.ui.grid > .stretched.row > .column,
+.ui.grid > .stretched.column:not(.row),
+.ui.grid > .row > .stretched.column {
+ display: inline-flex !important;
+ align-self: stretch;
+ flex-direction: column;
+}
+
+.ui.stretched.grid > .row > .column > *,
+.ui.stretched.grid > .column > *,
+.ui.grid > .stretched.row > .column > *,
+.ui.grid > .stretched.column:not(.row) > *,
+.ui.grid > .row > .stretched.column > * {
+ flex-grow: 1;
+}
+
+/*----------------------
+ Horizontally Centered
+-----------------------*/
+
+/* Left Aligned */
+.ui[class*="left aligned"].grid > .column,
+.ui[class*="left aligned"].grid > .row > .column,
+.ui.grid > [class*="left aligned"].row > .column,
+.ui.grid > [class*="left aligned"].column.column,
+.ui.grid > .row > [class*="left aligned"].column {
+ text-align: left;
+ align-self: inherit;
+}
+
+/* Center Aligned */
+.ui[class*="center aligned"].grid > .column,
+.ui[class*="center aligned"].grid > .row > .column,
+.ui.grid > [class*="center aligned"].row > .column,
+.ui.grid > [class*="center aligned"].column.column,
+.ui.grid > .row > [class*="center aligned"].column {
+ text-align: center;
+ align-self: inherit;
+}
+.ui[class*="center aligned"].grid {
+ justify-content: center;
+}
+
+/* Right Aligned */
+.ui[class*="right aligned"].grid > .column,
+.ui[class*="right aligned"].grid > .row > .column,
+.ui.grid > [class*="right aligned"].row > .column,
+.ui.grid > [class*="right aligned"].column.column,
+.ui.grid > .row > [class*="right aligned"].column {
+ text-align: right;
+ align-self: inherit;
+}
+
+/* Justified */
+.ui.justified.grid > .column,
+.ui.justified.grid > .row > .column,
+.ui.grid > .justified.row > .column,
+.ui.grid > .justified.column.column,
+.ui.grid > .row > .justified.column {
+ text-align: justify;
+ hyphens: auto;
+}
+
+/*----------------------
+ Colored
+-----------------------*/
+
+.ui.grid > .row > .red.column,
+.ui.grid > .row > .orange.column,
+.ui.grid > .row > .yellow.column,
+.ui.grid > .row > .olive.column,
+.ui.grid > .row > .green.column,
+.ui.grid > .row > .teal.column,
+.ui.grid > .row > .blue.column,
+.ui.grid > .row > .violet.column,
+.ui.grid > .row > .purple.column,
+.ui.grid > .row > .pink.column,
+.ui.grid > .row > .brown.column,
+.ui.grid > .row > .grey.column,
+.ui.grid > .row > .black.column {
+ margin-top: -(@rowSpacing / 2);
+ margin-bottom: -(@rowSpacing / 2);
+ padding-top: (@rowSpacing / 2);
+ padding-bottom: (@rowSpacing / 2);
+}
+
+/* Red */
+.ui.grid > .red.row,
+.ui.grid > .red.column,
+.ui.grid > .row > .red.column {
+ background-color: @red !important;
+ color: @white;
+}
+/* Orange */
+.ui.grid > .orange.row,
+.ui.grid > .orange.column,
+.ui.grid > .row > .orange.column {
+ background-color: @orange !important;
+ color: @white;
+}
+/* Yellow */
+.ui.grid > .yellow.row,
+.ui.grid > .yellow.column,
+.ui.grid > .row > .yellow.column {
+ background-color: @yellow !important;
+ color: @white;
+}
+/* Olive */
+.ui.grid > .olive.row,
+.ui.grid > .olive.column,
+.ui.grid > .row > .olive.column {
+ background-color: @olive !important;
+ color: @white;
+}
+/* Green */
+.ui.grid > .green.row,
+.ui.grid > .green.column,
+.ui.grid > .row > .green.column {
+ background-color: @green !important;
+ color: @white;
+}
+/* Teal */
+.ui.grid > .teal.row,
+.ui.grid > .teal.column,
+.ui.grid > .row > .teal.column {
+ background-color: @teal !important;
+ color: @white;
+}
+/* Blue */
+.ui.grid > .blue.row,
+.ui.grid > .blue.column,
+.ui.grid > .row > .blue.column {
+ background-color: @blue !important;
+ color: @white;
+}
+/* Violet */
+.ui.grid > .violet.row,
+.ui.grid > .violet.column,
+.ui.grid > .row > .violet.column {
+ background-color: @violet !important;
+ color: @white;
+}
+/* Purple */
+.ui.grid > .purple.row,
+.ui.grid > .purple.column,
+.ui.grid > .row > .purple.column {
+ background-color: @purple !important;
+ color: @white;
+}
+/* Pink */
+.ui.grid > .pink.row,
+.ui.grid > .pink.column,
+.ui.grid > .row > .pink.column {
+ background-color: @pink !important;
+ color: @white;
+}
+/* Brown */
+.ui.grid > .brown.row,
+.ui.grid > .brown.column,
+.ui.grid > .row > .brown.column {
+ background-color: @brown !important;
+ color: @white;
+}
+/* Grey */
+.ui.grid > .grey.row,
+.ui.grid > .grey.column,
+.ui.grid > .row > .grey.column {
+ background-color: @grey !important;
+ color: @white;
+}
+/* Black */
+.ui.grid > .black.row,
+.ui.grid > .black.column,
+.ui.grid > .row > .black.column {
+ background-color: @black !important;
+ color: @white;
+}
+
+
+/*----------------------
+ Equal Width
+-----------------------*/
+
+.ui[class*="equal width"].grid > .column:not(.row),
+.ui[class*="equal width"].grid > .row > .column,
+.ui.grid > [class*="equal width"].row > .column {
+ display: inline-block;
+ flex-grow: 1;
+}
+.ui[class*="equal width"].grid > .wide.column,
+.ui[class*="equal width"].grid > .row > .wide.column,
+.ui.grid > [class*="equal width"].row > .wide.column {
+ flex-grow: 0;
+}
+
+
+/*----------------------
+ Reverse
+-----------------------*/
+
+
+/* Mobile */
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui[class*="mobile reversed"].grid,
+ .ui[class*="mobile reversed"].grid > .row,
+ .ui.grid > [class*="mobile reversed"].row {
+ flex-direction: row-reverse;
+ }
+ .ui[class*="mobile vertically reversed"].grid,
+ .ui.stackable[class*="mobile reversed"] {
+ flex-direction: column-reverse;
+ }
+
+ /* Divided Reversed */
+ .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child,
+ .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child {
+ box-shadow: @dividedBorder;
+ }
+ .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child,
+ .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child {
+ box-shadow: none;
+ }
+ /* Vertically Divided Reversed */
+ .ui.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:first-child:before {
+ box-shadow: @verticallyDividedBorder;
+ }
+ .ui.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:last-child:before {
+ box-shadow: none;
+ }
+ /* Celled Reversed */
+ .ui[class*="mobile reversed"].celled.grid > .row > .column:first-child {
+ box-shadow: @celledColumnDivider;
+ }
+ .ui[class*="mobile reversed"].celled.grid > .row > .column:last-child {
+ box-shadow: none;
+ }
+}
+
+/* Tablet */
+@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
+ .ui[class*="tablet reversed"].grid,
+ .ui[class*="tablet reversed"].grid > .row,
+ .ui.grid > [class*="tablet reversed"].row {
+ flex-direction: row-reverse;
+ }
+ .ui[class*="tablet vertically reversed"].grid {
+ flex-direction: column-reverse;
+ }
+
+ /* Divided Reversed */
+ .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child,
+ .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child {
+ box-shadow: @dividedBorder;
+ }
+ .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child,
+ .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child {
+ box-shadow: none;
+ }
+ /* Vertically Divided Reversed */
+ .ui.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:first-child:before {
+ box-shadow: @verticallyDividedBorder;
+ }
+ .ui.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:last-child:before {
+ box-shadow: none;
+ }
+ /* Celled Reversed */
+ .ui[class*="tablet reversed"].celled.grid > .row > .column:first-child {
+ box-shadow: @celledColumnDivider;
+ }
+ .ui[class*="tablet reversed"].celled.grid > .row > .column:last-child {
+ box-shadow: none;
+ }
+}
+
+/* Computer */
+@media only screen and (min-width: @computerBreakpoint) {
+ .ui[class*="computer reversed"].grid,
+ .ui[class*="computer reversed"].grid > .row,
+ .ui.grid > [class*="computer reversed"].row {
+ flex-direction: row-reverse;
+ }
+ .ui[class*="computer vertically reversed"].grid {
+ flex-direction: column-reverse;
+ }
+
+ /* Divided Reversed */
+ .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child,
+ .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child {
+ box-shadow: @dividedBorder;
+ }
+ .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child,
+ .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child {
+ box-shadow: none;
+ }
+ /* Vertically Divided Reversed */
+ .ui.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:first-child:before {
+ box-shadow: @verticallyDividedBorder;
+ }
+ .ui.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:last-child:before {
+ box-shadow: none;
+ }
+ /* Celled Reversed */
+ .ui[class*="computer reversed"].celled.grid > .row > .column:first-child {
+ box-shadow: @celledColumnDivider;
+ }
+ .ui[class*="computer reversed"].celled.grid > .row > .column:last-child {
+ box-shadow: none;
+ }
+}
+
+
+/*-------------------
+ Doubling
+--------------------*/
+
+/* Tablet Only */
+@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
+ .ui.doubling.grid {
+ width: auto;
+ }
+ .ui.grid > .doubling.row,
+ .ui.doubling.grid > .row {
+ margin: 0em !important;
+ padding: 0em !important;
+ }
+ .ui.grid > .doubling.row > .column,
+ .ui.doubling.grid > .row > .column {
+ display: inline-block !important;
+ padding-top: (@rowSpacing / 2) !important;
+ padding-bottom: (@rowSpacing / 2) !important;
+ box-shadow: none !important;
+ margin: 0em;
+ }
+ .ui[class*="two column"].doubling.grid > .row > .column,
+ .ui[class*="two column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="two column"].doubling.row.row > .column {
+ width: @oneColumn !important;
+ }
+ .ui[class*="three column"].doubling.grid > .row > .column,
+ .ui[class*="three column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="three column"].doubling.row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="four column"].doubling.grid > .row > .column,
+ .ui[class*="four column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="four column"].doubling.row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="five column"].doubling.grid > .row > .column,
+ .ui[class*="five column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="five column"].doubling.row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="six column"].doubling.grid > .row > .column,
+ .ui[class*="six column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="six column"].doubling.row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="seven column"].doubling.grid > .row > .column,
+ .ui[class*="seven column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="seven column"].doubling.row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="eight column"].doubling.grid > .row > .column,
+ .ui[class*="eight column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="eight column"].doubling.row.row > .column {
+ width: @fourColumn !important;
+ }
+ .ui[class*="nine column"].doubling.grid > .row > .column,
+ .ui[class*="nine column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="nine column"].doubling.row.row > .column {
+ width: @fourColumn !important;
+ }
+ .ui[class*="ten column"].doubling.grid > .row > .column,
+ .ui[class*="ten column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="ten column"].doubling.row.row > .column {
+ width: @fiveColumn !important;
+ }
+ .ui[class*="eleven column"].doubling.grid > .row > .column,
+ .ui[class*="eleven column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="eleven column"].doubling.row.row > .column {
+ width: @fiveColumn !important;
+ }
+ .ui[class*="twelve column"].doubling.grid > .row > .column,
+ .ui[class*="twelve column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="twelve column"].doubling.row.row > .column {
+ width: @sixColumn !important;
+ }
+ .ui[class*="thirteen column"].doubling.grid > .row > .column,
+ .ui[class*="thirteen column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="thirteen column"].doubling.row.row > .column {
+ width: @sixColumn !important;
+ }
+ .ui[class*="fourteen column"].doubling.grid > .row > .column,
+ .ui[class*="fourteen column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="fourteen column"].doubling.row.row > .column {
+ width: @sevenColumn !important;
+ }
+ .ui[class*="fifteen column"].doubling.grid > .row > .column,
+ .ui[class*="fifteen column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="fifteen column"].doubling.row.row > .column {
+ width: @sevenColumn !important;
+ }
+ .ui[class*="sixteen column"].doubling.grid > .row > .column,
+ .ui[class*="sixteen column"].doubling.grid > .column:not(.row),
+ .ui.grid > [class*="sixteen column"].doubling.row.row > .column {
+ width: @eightColumn !important;
+ }
+}
+
+/* Mobile Only */
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.grid > .doubling.row,
+ .ui.doubling.grid > .row {
+ margin: 0em !important;
+ padding: 0em !important;
+ }
+ .ui.grid > .doubling.row > .column,
+ .ui.doubling.grid > .row > .column {
+ padding-top: (@rowSpacing / 2) !important;
+ padding-bottom: (@rowSpacing / 2) !important;
+ margin: 0em !important;
+ box-shadow: none !important;
+ }
+ .ui[class*="two column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="two column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="two column"].doubling:not(.stackable).row.row > .column {
+ width: @oneColumn !important;
+ }
+ .ui[class*="three column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="three column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="three column"].doubling:not(.stackable).row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="four column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="four column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="four column"].doubling:not(.stackable).row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="five column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="five column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="five column"].doubling:not(.stackable).row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="six column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="six column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="six column"].doubling:not(.stackable).row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="seven column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="seven column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="seven column"].doubling:not(.stackable).row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="eight column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="eight column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="eight column"].doubling:not(.stackable).row.row > .column {
+ width: @twoColumn !important;
+ }
+ .ui[class*="nine column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="nine column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="nine column"].doubling:not(.stackable).row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="ten column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="ten column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="ten column"].doubling:not(.stackable).row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="eleven column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="eleven column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="eleven column"].doubling:not(.stackable).row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="twelve column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="twelve column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="twelve column"].doubling:not(.stackable).row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="thirteen column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="thirteen column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="thirteen column"].doubling:not(.stackable).row.row > .column {
+ width: @threeColumn !important;
+ }
+ .ui[class*="fourteen column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="fourteen column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="fourteen column"].doubling:not(.stackable).row.row > .column {
+ width: @fourColumn !important;
+ }
+ .ui[class*="fifteen column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="fifteen column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="fifteen column"].doubling:not(.stackable).row.row > .column {
+ width: @fourColumn !important;
+ }
+ .ui[class*="sixteen column"].doubling:not(.stackable).grid > .row > .column,
+ .ui[class*="sixteen column"].doubling:not(.stackable).grid > .column:not(.row),
+ .ui.grid > [class*="sixteen column"].doubling:not(.stackable).row.row > .column {
+ width: @fourColumn !important;
+ }
+}
+
+/*-------------------
+ Stackable
+--------------------*/
+
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.stackable.grid {
+ width: auto;
+ margin-left: 0em !important;
+ margin-right: 0em !important;
+ }
+ .ui.stackable.grid > .row > .wide.column,
+ .ui.stackable.grid > .wide.column,
+ .ui.stackable.grid > .column.grid > .column,
+ .ui.stackable.grid > .column.row > .column,
+ .ui.stackable.grid > .row > .column,
+ .ui.stackable.grid > .column:not(.row),
+ .ui.grid > .stackable.stackable.row > .column {
+ width: 100% !important;
+ margin: 0em 0em !important;
+ box-shadow: none !important;
+ padding: (@stackableRowSpacing / 2) (@stackableGutter / 2) !important;
+ }
+ .ui.stackable.grid:not(.vertically) > .row {
+ margin: 0em;
+ padding: 0em;
+ }
+
+ /* Coupling */
+ .ui.container > .ui.stackable.grid > .column,
+ .ui.container > .ui.stackable.grid > .row > .column {
+ padding-left: 0em !important;
+ padding-right: 0em !important;
+ }
+
+ /* Don't pad inside segment or nested grid */
+ .ui.grid .ui.stackable.grid,
+ .ui.segment:not(.vertical) .ui.stackable.page.grid {
+ margin-left: -(@stackableGutter / 2) !important;
+ margin-right: -(@stackableGutter / 2) !important;
+ }
+
+ /* Divided Stackable */
+ .ui.stackable.divided.grid > .row:first-child > .column:first-child,
+ .ui.stackable.celled.grid > .row:first-child > .column:first-child,
+ .ui.stackable.divided.grid > .column:not(.row):first-child,
+ .ui.stackable.celled.grid > .column:not(.row):first-child {
+ border-top: none !important;
+ }
+ .ui.inverted.stackable.celled.grid > .column:not(.row),
+ .ui.inverted.stackable.divided.grid > .column:not(.row),
+ .ui.inverted.stackable.celled.grid > .row > .column,
+ .ui.inverted.stackable.divided.grid > .row > .column {
+ border-top: @stackableInvertedMobileBorder;
+ }
+
+ .ui.stackable.celled.grid > .column:not(.row),
+ .ui.stackable.divided:not(.vertically).grid > .column:not(.row),
+ .ui.stackable.celled.grid > .row > .column,
+ .ui.stackable.divided:not(.vertically).grid > .row > .column {
+ border-top: @stackableMobileBorder;
+ box-shadow: none !important;
+ padding-top: @stackableRowSpacing !important;
+ padding-bottom: @stackableRowSpacing !important;
+ }
+
+ .ui.stackable.celled.grid > .row {
+ box-shadow: none !important;
+ }
+ .ui.stackable.divided:not(.vertically).grid > .column:not(.row),
+ .ui.stackable.divided:not(.vertically).grid > .row > .column {
+ padding-left: 0em !important;
+ padding-right: 0em !important;
+ }
+
+}
+
+/*----------------------
+ Only (Device)
+-----------------------*/
+
+
+/* These include arbitrary class repetitions for forced specificity */
+
+/* Mobile Only Hide */
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui[class*="tablet only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="tablet only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="tablet only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.mobile) {
+ display: none !important;
+ }
+ .ui[class*="computer only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="computer only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="computer only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="computer only"].column:not(.mobile) {
+ display: none !important;
+ }
+ .ui[class*="large screen only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="large screen only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="large screen only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile) {
+ display: none !important;
+ }
+ .ui[class*="widescreen only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) {
+ display: none !important;
+ }
+}
+/* Tablet Only Hide */
+@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
+ .ui[class*="mobile only"].grid.grid.grid:not(.tablet),
+ .ui.grid.grid.grid > [class*="mobile only"].row:not(.tablet),
+ .ui.grid.grid.grid > [class*="mobile only"].column:not(.tablet),
+ .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.tablet) {
+ display: none !important;
+ }
+ .ui[class*="computer only"].grid.grid.grid:not(.tablet),
+ .ui.grid.grid.grid > [class*="computer only"].row:not(.tablet),
+ .ui.grid.grid.grid > [class*="computer only"].column:not(.tablet),
+ .ui.grid.grid.grid > .row > [class*="computer only"].column:not(.tablet) {
+ display: none !important;
+ }
+ .ui[class*="large screen only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="large screen only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="large screen only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile) {
+ display: none !important;
+ }
+ .ui[class*="widescreen only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) {
+ display: none !important;
+ }
+}
+
+/* Computer Only Hide */
+@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {
+ .ui[class*="mobile only"].grid.grid.grid:not(.computer),
+ .ui.grid.grid.grid > [class*="mobile only"].row:not(.computer),
+ .ui.grid.grid.grid > [class*="mobile only"].column:not(.computer),
+ .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer) {
+ display: none !important;
+ }
+ .ui[class*="tablet only"].grid.grid.grid:not(.computer),
+ .ui.grid.grid.grid > [class*="tablet only"].row:not(.computer),
+ .ui.grid.grid.grid > [class*="tablet only"].column:not(.computer),
+ .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer) {
+ display: none !important;
+ }
+ .ui[class*="large screen only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="large screen only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="large screen only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile) {
+ display: none !important;
+ }
+ .ui[class*="widescreen only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) {
+ display: none !important;
+ }
+}
+
+/* Large Screen Only Hide */
+@media only screen and (min-width: @largeMonitorBreakpoint) and (max-width: @largestLargeMonitor) {
+ .ui[class*="mobile only"].grid.grid.grid:not(.computer),
+ .ui.grid.grid.grid > [class*="mobile only"].row:not(.computer),
+ .ui.grid.grid.grid > [class*="mobile only"].column:not(.computer),
+ .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer) {
+ display: none !important;
+ }
+ .ui[class*="tablet only"].grid.grid.grid:not(.computer),
+ .ui.grid.grid.grid > [class*="tablet only"].row:not(.computer),
+ .ui.grid.grid.grid > [class*="tablet only"].column:not(.computer),
+ .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer) {
+ display: none !important;
+ }
+ .ui[class*="widescreen only"].grid.grid.grid:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile),
+ .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile),
+ .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) {
+ display: none !important;
+ }
+}
+
+/* Widescreen Only Hide */
+@media only screen and (min-width: @widescreenMonitorBreakpoint) {
+ .ui[class*="mobile only"].grid.grid.grid:not(.computer),
+ .ui.grid.grid.grid > [class*="mobile only"].row:not(.computer),
+ .ui.grid.grid.grid > [class*="mobile only"].column:not(.computer),
+ .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer) {
+ display: none !important;
+ }
+ .ui[class*="tablet only"].grid.grid.grid:not(.computer),
+ .ui.grid.grid.grid > [class*="tablet only"].row:not(.computer),
+ .ui.grid.grid.grid > [class*="tablet only"].column:not(.computer),
+ .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer) {
+ display: none !important;
+ }
+}
+
+
+.loadUIOverrides();
[16/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/form.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/form.overrides b/semantic/src/themes/github/collections/form.overrides
new file mode 100644
index 0000000..89df9c0
--- /dev/null
+++ b/semantic/src/themes/github/collections/form.overrides
@@ -0,0 +1,16 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.selection.dropdown {
+ background-color: #FAFAFA;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;
+ border-color: #CCCCCC;
+}
+
+.ui.selection.dropdown:focus {
+ box-shadow:
+ 0px 1px 2px rgba(0, 0, 0, 0.075) inset,
+ 0px 0px 5px rgba(81, 167, 232, 0.5)
+ ;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/form.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/form.variables b/semantic/src/themes/github/collections/form.variables
new file mode 100644
index 0000000..e08c868
--- /dev/null
+++ b/semantic/src/themes/github/collections/form.variables
@@ -0,0 +1,40 @@
+/*******************************
+ Form
+*******************************/
+
+/*-------------------
+ Elements
+--------------------*/
+
+@inputBackground: #FAFAFA;
+@inputBorder: 1px solid #CCCCCC;
+@inputBoxShadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;
+@inputBorderRadius: 3px;
+
+@labelFontWeight: bold;
+@labelDistance: 6px;
+
+/*-------------------
+ States
+--------------------*/
+
+@inputFocusBackground: #FFFFFF;
+@inputFocusBoxShadow:
+ 0px 1px 2px rgba(0, 0, 0, 0.075) inset,
+ 0px 0px 5px rgba(81, 167, 232, 0.5)
+;
+@inputFocusBorderColor: #51A7E8;
+@inputFocusBorderRadius: @inputBorderRadius;
+
+/*-------------------
+ Types
+--------------------*/
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/*-------------------
+ Groups
+--------------------*/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/grid.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/grid.variables b/semantic/src/themes/github/collections/grid.variables
new file mode 100644
index 0000000..7b08138
--- /dev/null
+++ b/semantic/src/themes/github/collections/grid.variables
@@ -0,0 +1,2 @@
+
+@gutterWidth: 1.538rem;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/menu.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/menu.overrides b/semantic/src/themes/github/collections/menu.overrides
new file mode 100644
index 0000000..06d7827
--- /dev/null
+++ b/semantic/src/themes/github/collections/menu.overrides
@@ -0,0 +1,7 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.menu .item > .label {
+ box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/menu.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/menu.variables b/semantic/src/themes/github/collections/menu.variables
new file mode 100644
index 0000000..1479320
--- /dev/null
+++ b/semantic/src/themes/github/collections/menu.variables
@@ -0,0 +1,61 @@
+/*-------------------
+ Collection
+--------------------*/
+
+@itemVerticalPadding: 1em;
+@itemHorizontalPadding: 1.25em;
+
+@background: #FFFFFF linear-gradient(rgba(255, 255, 255, 0.05), rgba(0, 0, 0, 0.05));
+@fontWeight: normal;
+
+@activeBorderSize: 0em;
+
+@hoverBackground: rgba(0, 0, 0, 0.02);
+@downBackground: rgba(0, 0, 0, 0.06);
+
+@activeBackground: rgba(0, 0, 0, 0.04);
+@activeHoverBackground: rgba(0, 0, 0, 0.04);
+
+
+@headerBackground: rgba(0, 0, 0, 0.08);
+
+@subMenuMargin: 0.5em -0.6em 0;
+@subMenuHorizontalPadding: 0.7em;
+
+@arrowHoverColor: #EEEEEE;
+@arrowActiveColor: #EEEEEE;
+@arrowVerticalHoverColor: #F4F4F4;
+@arrowVerticalActiveColor: #F4F4F4;
+
+@dividerBackground: #E8E8E8;
+@verticalDividerBackground: #E8E8E8;
+
+/*-------------------
+ Elements
+--------------------*/
+
+@buttonOffset: -0.15em;
+@buttonVerticalPadding: 0.75em;
+
+/*-------------------
+ Types
+--------------------*/
+
+@paginationMinWidth: 3.5em;
+
+@tieredActiveItemBackground: #F5F5F5;
+@tieredActiveMenuBackground: #F5F5F5;
+
+/*-------------------
+ Variations
+--------------------*/
+
+@verticalBackground: #FFFFFF;
+@verticalItemBackground: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.02));
+
+@invertedBackground: @black linear-gradient(rgba(255, 255, 255, 0.05), rgba(0, 0, 0, 0.0));
+@invertedBoxShadow :
+ 0px 1px 2px 0px rgba(0, 0, 0, 0.15),
+ 0px 0px 0px 1px rgba(255, 255, 255, 0.15)
+;
+@secondaryVerticalPadding: 0.75em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/message.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/message.overrides b/semantic/src/themes/github/collections/message.overrides
new file mode 100644
index 0000000..01519ed
--- /dev/null
+++ b/semantic/src/themes/github/collections/message.overrides
@@ -0,0 +1,11 @@
+.ui.info.message {
+ background: linear-gradient(#D8EBF8, #D0E3EF);
+}
+.ui.error.message {
+ background: linear-gradient(#F8D8D8, #EFD0D0);
+}
+.ui.warning.message {
+ background: linear-gradient(#FFE3C8, #F5DAC0);
+}
+.ui.success.message {
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/message.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/message.variables b/semantic/src/themes/github/collections/message.variables
new file mode 100644
index 0000000..165eef6
--- /dev/null
+++ b/semantic/src/themes/github/collections/message.variables
@@ -0,0 +1,29 @@
+@background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.05)) #FEFEFE;
+@boxShadow:
+ 0px 0px 0px 1px rgba(255, 255, 255, 0.3) inset,
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.2) inset
+;
+@verticalPadding: 15px;
+@horizontalPadding: 15px;
+
+@headerFontSize: 1.15em;
+
+@infoTextColor: #264C72;
+@warningTextColor: #613A00;
+@errorTextColor: #991111;
+
+@floatingBoxShadow:
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,
+ 0px 2px 3px 0px rgba(0, 0, 0, 0.1),
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.05) inset
+;
+
+@infoBorderColor: #97C1DA;
+@errorBorderColor: #DA9797;
+@warningBorderColor: #DCA874;
+
+@small: 12px;
+@medium: 13px;
+@large: 14px;
+@huge: 16px;
+@massive: 18px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/table.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/table.variables b/semantic/src/themes/github/collections/table.variables
new file mode 100644
index 0000000..0387ce6
--- /dev/null
+++ b/semantic/src/themes/github/collections/table.variables
@@ -0,0 +1,8 @@
+/*******************************
+ User Variable Overrides
+*******************************/
+
+@background: #F8F8F8;
+
+@cellVerticalPadding: @relative6px;
+@cellHorizontalPadding: @relative8px;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/button.overrides b/semantic/src/themes/github/elements/button.overrides
new file mode 100644
index 0000000..6273007
--- /dev/null
+++ b/semantic/src/themes/github/elements/button.overrides
@@ -0,0 +1,4 @@
+/*******************************
+ Overrides
+*******************************/
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/button.variables b/semantic/src/themes/github/elements/button.variables
new file mode 100644
index 0000000..3967fa5
--- /dev/null
+++ b/semantic/src/themes/github/elements/button.variables
@@ -0,0 +1,77 @@
+/*-------------------
+ Button Variables
+--------------------*/
+
+/* Button Variables */
+@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;
+@textTransform: none;
+@fontWeight: bold;
+@textColor: #333333;
+
+@textShadow: 0px 1px 0px rgba(255, 255, 255, 0.9);
+@invertedTextShadow: 0px -1px 0px rgba(0, 0, 0, 0.25);
+
+@borderRadius: @relativeBorderRadius;
+
+@verticalPadding: 0.75em;
+@horizontalPadding: 1.15em;
+
+@backgroundColor: #FAFAFA;
+@backgroundImage: linear-gradient(rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.1));
+@boxShadow:
+ 0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,
+ 0 0 0 1px rgba(0, 0, 0, 0.13) inset,
+ 0 1px 3px rgba(0, 0, 0, 0.05)
+;
+
+@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0.2));
+@coloredBoxShadow:
+ 0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,
+ 0 0 0 1px rgba(0, 0, 0, 0.1) inset,
+ 0 1px 3px rgba(0, 0, 0, 0.05)
+;
+
+@hoverBackgroundColor: #E0E0E0;
+@hoverBackgroundImage: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.08));
+@hoverBoxShadow: @boxShadow;
+
+@downBackgroundColor: '';
+@downBackgroundImage: '';
+@downBoxShadow:
+ 0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,
+ 0 0 0 1px rgba(0, 0, 0, 0.13) inset,
+ 0 3px 5px rgba(0, 0, 0, 0.15) inset !important
+;
+@activeBackgroundColor: #DFDFDF;
+@activeBackgroundImage: none;
+@activeBoxShadow:
+ 0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,
+ 0 0 0 1px rgba(0, 0, 0, 0.13) inset,
+ 0 3px 5px rgba(0, 0, 0, 0.1) inset !important
+;
+
+@labeledIconBackgroundColor: transparent;
+@labeledIconBorder: transparent;
+@labeledIconPadding: (@horizontalPadding + 2.25em);
+
+@basicFontWeight: bold;
+@basicTextColor: @linkColor;
+@basicHoverTextColor: @linkHoverColor;
+
+@basicHoverBackground: #E0E0E0;
+
+@blue: #3072B3;
+@green: #60B044;
+@black: #5D5D5D;
+
+@primaryColor: @blue;
+@secondaryColor: @black;
+
+@mini: 0.6rem;
+@tiny: 0.7rem;
+@small: 0.85rem;
+@medium: 0.92rem;
+@large: 1rem;
+@big: 1.125rem;
+@huge: 1.25rem;
+@massive: 1.3rem;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/header.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/header.variables b/semantic/src/themes/github/elements/header.variables
new file mode 100644
index 0000000..ae1da01
--- /dev/null
+++ b/semantic/src/themes/github/elements/header.variables
@@ -0,0 +1,9 @@
+/*******************************
+ Header
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@iconMargin: @4px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/icon.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/icon.overrides b/semantic/src/themes/github/elements/icon.overrides
new file mode 100644
index 0000000..c86b7ed
--- /dev/null
+++ b/semantic/src/themes/github/elements/icon.overrides
@@ -0,0 +1,208 @@
+/* Octicons */
+
+.icon.alert:before { content: '\f02d'} /* \uf02d */
+.icon.alignment.align:before { content: '\f08a'} /* \uf08a */
+.icon.alignment.aligned.to:before { content: '\f08e'} /* \uf08e */
+.icon.alignment.unalign:before { content: '\f08b'} /* \uf08b */
+.icon.arrow.down:before { content: '\f03f'} /* \uf03f */
+.icon.arrow.left:before { content: '\f040'} /* \uf040 */
+.icon.arrow.right:before { content: '\f03e'} /* \uf03e */
+.icon.arrow.small.down:before { content: '\f0a0'} /* \uf0a0 */
+.icon.arrow.small.left:before { content: '\f0a1'} /* \uf0a1 */
+.icon.arrow.small.right:before { content: '\f071'} /* \uf071 */
+.icon.arrow.small.up:before { content: '\f09f'} /* \uf09f */
+.icon.arrow.up:before { content: '\f03d'} /* \uf03d */
+.icon.beer:before { content: '\f069'} /* \uf069 */
+.icon.book:before { content: '\f007'} /* \uf007 */
+.icon.bookmark:before { content: '\f07b'} /* \uf07b */
+.icon.briefcase:before { content: '\f0d3'} /* \uf0d3 */
+.icon.broadcast:before { content: '\f048'} /* \uf048 */
+.icon.browser:before { content: '\f0c5'} /* \uf0c5 */
+.icon.bug:before { content: '\f091'} /* \uf091 */
+.icon.calendar:before { content: '\f068'} /* \uf068 */
+.icon.check:before { content: '\f03a'} /* \uf03a */
+.icon.checklist:before { content: '\f076'} /* \uf076 */
+.icon.chevron.down:before { content: '\f0a3'} /* \uf0a3 */
+.icon.chevron.left:before { content: '\f0a4'} /* \uf0a4 */
+.icon.chevron.right:before { content: '\f078'} /* \uf078 */
+.icon.chevron.up:before { content: '\f0a2'} /* \uf0a2 */
+.icon.circle.slash:before { content: '\f084'} /* \uf084 */
+.icon.circuit.board:before { content: '\f0d6'} /* \uf0d6 */
+.icon.clippy:before { content: '\f035'} /* \uf035 */
+.icon.clock:before { content: '\f046'} /* \uf046 */
+.icon.cloud.download:before { content: '\f00b'} /* \uf00b */
+.icon.cloud.upload:before { content: '\f00c'} /* \uf00c */
+.icon.code:before { content: '\f05f'} /* \uf05f */
+.icon.color.mode:before { content: '\f065'} /* \uf065 */
+.icon.comment.add:before,
+.icon.comment:before { content: '\f02b'} /* \uf02b */
+.icon.comment.discussion:before { content: '\f04f'} /* \uf04f */
+.icon.credit.card:before { content: '\f045'} /* \uf045 */
+.icon.dash:before { content: '\f0ca'} /* \uf0ca */
+.icon.dashboard:before { content: '\f07d'} /* \uf07d */
+.icon.database:before { content: '\f096'} /* \uf096 */
+.icon.device.camera:before { content: '\f056'} /* \uf056 */
+.icon.device.camera.video:before { content: '\f057'} /* \uf057 */
+.icon.device.desktop:before { content: '\f27c'} /* \uf27c */
+.icon.device.mobile:before { content: '\f038'} /* \uf038 */
+.icon.diff:before { content: '\f04d'} /* \uf04d */
+.icon.diff.added:before { content: '\f06b'} /* \uf06b */
+.icon.diff.ignored:before { content: '\f099'} /* \uf099 */
+.icon.diff.modified:before { content: '\f06d'} /* \uf06d */
+.icon.diff.removed:before { content: '\f06c'} /* \uf06c */
+.icon.diff.renamed:before { content: '\f06e'} /* \uf06e */
+.icon.ellipsis:before { content: '\f09a'} /* \uf09a */
+.icon.eye.unwatch:before,
+.icon.eye.watch:before,
+.icon.eye:before { content: '\f04e'} /* \uf04e */
+.icon.file.binary:before { content: '\f094'} /* \uf094 */
+.icon.file.code:before { content: '\f010'} /* \uf010 */
+.icon.file.directory:before { content: '\f016'} /* \uf016 */
+.icon.file.media:before { content: '\f012'} /* \uf012 */
+.icon.file.pdf:before { content: '\f014'} /* \uf014 */
+.icon.file.submodule:before { content: '\f017'} /* \uf017 */
+.icon.file.symlink.directory:before { content: '\f0b1'} /* \uf0b1 */
+.icon.file.symlink.file:before { content: '\f0b0'} /* \uf0b0 */
+.icon.file.text:before { content: '\f011'} /* \uf011 */
+.icon.file.zip:before { content: '\f013'} /* \uf013 */
+.icon.flame:before { content: '\f0d2'} /* \uf0d2 */
+.icon.fold:before { content: '\f0cc'} /* \uf0cc */
+.icon.gear:before { content: '\f02f'} /* \uf02f */
+.icon.gift:before { content: '\f042'} /* \uf042 */
+.icon.gist:before { content: '\f00e'} /* \uf00e */
+.icon.gist.secret:before { content: '\f08c'} /* \uf08c */
+.icon.git.branch.create:before,
+.icon.git.branch.delete:before,
+.icon.git.branch:before { content: '\f020'} /* \uf020 */
+.icon.git.commit:before { content: '\f01f'} /* \uf01f */
+.icon.git.compare:before { content: '\f0ac'} /* \uf0ac */
+.icon.git.merge:before { content: '\f023'} /* \uf023 */
+.icon.git.pull.request.abandoned:before,
+.icon.git.pull.request:before { content: '\f009'} /* \uf009 */
+.icon.globe:before { content: '\f0b6'} /* \uf0b6 */
+.icon.graph:before { content: '\f043'} /* \uf043 */
+.icon.heart:before { content: '\2665'} /* \u2665 */
+.icon.history:before { content: '\f07e'} /* \uf07e */
+.icon.home:before { content: '\f08d'} /* \uf08d */
+.icon.horizontal.rule:before { content: '\f070'} /* \uf070 */
+.icon.hourglass:before { content: '\f09e'} /* \uf09e */
+.icon.hubot:before { content: '\f09d'} /* \uf09d */
+.icon.inbox:before { content: '\f0cf'} /* \uf0cf */
+.icon.info:before { content: '\f059'} /* \uf059 */
+.icon.issue.closed:before { content: '\f028'} /* \uf028 */
+.icon.issue.opened:before { content: '\f026'} /* \uf026 */
+.icon.issue.reopened:before { content: '\f027'} /* \uf027 */
+.icon.jersey:before { content: '\f019'} /* \uf019 */
+.icon.jump.down:before { content: '\f072'} /* \uf072 */
+.icon.jump.left:before { content: '\f0a5'} /* \uf0a5 */
+.icon.jump.right:before { content: '\f0a6'} /* \uf0a6 */
+.icon.jump.up:before { content: '\f073'} /* \uf073 */
+.icon.key:before { content: '\f049'} /* \uf049 */
+.icon.keyboard:before { content: '\f00d'} /* \uf00d */
+.icon.law:before { content: '\f0d8'} /* \uf0d8 */
+.icon.light.bulb:before { content: '\f000'} /* \uf000 */
+.icon.linkify:before { content: '\f05c'} /* \uf05c */
+.icon.linkify.external:before { content: '\f07f'} /* \uf07f */
+.icon.list.ordered:before { content: '\f062'} /* \uf062 */
+.icon.list.unordered:before { content: '\f061'} /* \uf061 */
+.icon.location:before { content: '\f060'} /* \uf060 */
+.icon.gist.private:before,
+.icon.mirror.private:before,
+.icon.git.fork.private:before,
+.icon.lock:before { content: '\f06a'} /* \uf06a */
+.icon.logo.github:before { content: '\f092'} /* \uf092 */
+.icon.mail:before { content: '\f03b'} /* \uf03b */
+.icon.mail.read:before { content: '\f03c'} /* \uf03c */
+.icon.mail.reply:before { content: '\f051'} /* \uf051 */
+.icon.mark.github:before { content: '\f00a'} /* \uf00a */
+.icon.markdown:before { content: '\f0c9'} /* \uf0c9 */
+.icon.megaphone:before { content: '\f077'} /* \uf077 */
+.icon.mention:before { content: '\f0be'} /* \uf0be */
+.icon.microscope:before { content: '\f089'} /* \uf089 */
+.icon.milestone:before { content: '\f075'} /* \uf075 */
+.icon.mirror.public:before,
+.icon.mirror:before { content: '\f024'} /* \uf024 */
+.icon.mortar.board:before { content: '\f0d7'} /* \uf0d7 */
+.icon.move.down:before { content: '\f0a8'} /* \uf0a8 */
+.icon.move.left:before { content: '\f074'} /* \uf074 */
+.icon.move.right:before { content: '\f0a9'} /* \uf0a9 */
+.icon.move.up:before { content: '\f0a7'} /* \uf0a7 */
+.icon.mute:before { content: '\f080'} /* \uf080 */
+.icon.no.newline:before { content: '\f09c'} /* \uf09c */
+.icon.octoface:before { content: '\f008'} /* \uf008 */
+.icon.organization:before { content: '\f037'} /* \uf037 */
+.icon.package:before { content: '\f0c4'} /* \uf0c4 */
+.icon.paintcan:before { content: '\f0d1'} /* \uf0d1 */
+.icon.pencil:before { content: '\f058'} /* \uf058 */
+.icon.person.add:before,
+.icon.person.follow:before,
+.icon.person:before { content: '\f018'} /* \uf018 */
+.icon.pin:before { content: '\f041'} /* \uf041 */
+.icon.playback.fast.forward:before { content: '\f0bd'} /* \uf0bd */
+.icon.playback.pause:before { content: '\f0bb'} /* \uf0bb */
+.icon.playback.play:before { content: '\f0bf'} /* \uf0bf */
+.icon.playback.rewind:before { content: '\f0bc'} /* \uf0bc */
+.icon.plug:before { content: '\f0d4'} /* \uf0d4 */
+.icon.repo.create:before,
+.icon.gist.new:before,
+.icon.file.directory.create:before,
+.icon.file.add:before,
+.icon.plus:before { content: '\f05d'} /* \uf05d */
+.icon.podium:before { content: '\f0af'} /* \uf0af */
+.icon.primitive.dot:before { content: '\f052'} /* \uf052 */
+.icon.primitive.square:before { content: '\f053'} /* \uf053 */
+.icon.pulse:before { content: '\f085'} /* \uf085 */
+.icon.puzzle:before { content: '\f0c0'} /* \uf0c0 */
+.icon.question:before { content: '\f02c'} /* \uf02c */
+.icon.quote:before { content: '\f063'} /* \uf063 */
+.icon.radio.tower:before { content: '\f030'} /* \uf030 */
+.icon.repo.delete:before,
+.icon.repo:before { content: '\f001'} /* \uf001 */
+.icon.repo.clone:before { content: '\f04c'} /* \uf04c */
+.icon.repo.force.push:before { content: '\f04a'} /* \uf04a */
+.icon.gist.fork:before,
+.icon.repo.forked:before { content: '\f002'} /* \uf002 */
+.icon.repo.pull:before { content: '\f006'} /* \uf006 */
+.icon.repo.push:before { content: '\f005'} /* \uf005 */
+.icon.rocket:before { content: '\f033'} /* \uf033 */
+.icon.rss:before { content: '\f034'} /* \uf034 */
+.icon.ruby:before { content: '\f047'} /* \uf047 */
+.icon.screen.full:before { content: '\f066'} /* \uf066 */
+.icon.screen.normal:before { content: '\f067'} /* \uf067 */
+.icon.search.save:before,
+.icon.search:before { content: '\f02e'} /* \uf02e */
+.icon.server:before { content: '\f097'} /* \uf097 */
+.icon.settings:before { content: '\f07c'} /* \uf07c */
+.icon.log.in:before,
+.icon.sign.in:before { content: '\f036'} /* \uf036 */
+.icon.log.out:before,
+.icon.sign.out:before { content: '\f032'} /* \uf032 */
+.icon.split:before { content: '\f0c6'} /* \uf0c6 */
+.icon.squirrel:before { content: '\f0b2'} /* \uf0b2 */
+.icon.star.add:before,
+.icon.star.delete:before,
+.icon.star:before { content: '\f02a'} /* \uf02a */
+.icon.steps:before { content: '\f0c7'} /* \uf0c7 */
+.icon.stop:before { content: '\f08f'} /* \uf08f */
+.icon.repo.sync:before,
+.icon.sync:before { content: '\f087'} /* \uf087 */
+.icon.tag.remove:before,
+.icon.tag.add:before,
+.icon.tag:before { content: '\f015'} /* \uf015 */
+.icon.telescope:before { content: '\f088'} /* \uf088 */
+.icon.terminal:before { content: '\f0c8'} /* \uf0c8 */
+.icon.three.bars:before { content: '\f05e'} /* \uf05e */
+.icon.thumbsdown:before { content: '\f0db'} /* \uf0db */
+.icon.thumbsup:before { content: '\f0da'} /* \uf0da */
+.icon.tools:before { content: '\f031'} /* \uf031 */
+.icon.trashcan:before { content: '\f0d0'} /* \uf0d0 */
+.icon.triangle.down:before { content: '\f05b'} /* \uf05b */
+.icon.triangle.left:before { content: '\f044'} /* \uf044 */
+.icon.triangle.right:before { content: '\f05a'} /* \uf05a */
+.icon.triangle.up:before { content: '\f0aa'} /* \uf0aa */
+.icon.unfold:before { content: '\f039'} /* \uf039 */
+.icon.unmute:before { content: '\f0ba'} /* \uf0ba */
+.icon.versions:before { content: '\f064'} /* \uf064 */
+.icon.remove.close:before,
+.icon.x:before { content: '\f081'} /* \uf081 */
+.icon.zap:before { content: '\26A1'} /* \u26a1 */
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/icon.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/icon.variables b/semantic/src/themes/github/elements/icon.variables
new file mode 100644
index 0000000..3ff3802
--- /dev/null
+++ b/semantic/src/themes/github/elements/icon.variables
@@ -0,0 +1,13 @@
+@fontPath: '../../themes/github/assets/fonts';
+@fontName: 'octicons';
+@fallbackSRC: '';
+
+@width: 1em;
+@height: 1em;
+
+@small: 13px;
+@medium: 16px;
+@large: 18px;
+@big : 20px;
+@huge: 28px;
+@massive: 32px;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/image.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/image.variables b/semantic/src/themes/github/elements/image.variables
new file mode 100644
index 0000000..2480c17
--- /dev/null
+++ b/semantic/src/themes/github/elements/image.variables
@@ -0,0 +1,5 @@
+/*******************************
+ User Variable Overrides
+*******************************/
+
+@miniWidth: 20px;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/input.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/input.overrides b/semantic/src/themes/github/elements/input.overrides
new file mode 100644
index 0000000..d19fea9
--- /dev/null
+++ b/semantic/src/themes/github/elements/input.overrides
@@ -0,0 +1,32 @@
+/*******************************
+ Input
+*******************************/
+
+/* Labeled Input has padding */
+.ui.labeled.input {
+ background-color: @white;
+ border: @borderWidth solid @borderColor;
+ border-radius: @borderRadius !important;
+}
+.ui.labeled.input input {
+ box-shadow: none !important;
+ border: none !important;
+}
+.ui.labeled.input .label {
+ font-weight: normal;
+ align-self: center;
+ font-size: 12px;
+ margin: @2px;
+ border-radius: @borderRadius !important;
+ padding: @relative5px @relative8px !important;
+}
+
+/* GitHub Uses Focus Group with class name added */
+.ui.labeled.input.focused {
+ border-color: @focusBorderColor;
+ box-shadow: @focusBoxShadow;
+}
+.ui.labeled.input.focused .label {
+ background-color: #E1EAF5;
+ color: #4078C0;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/input.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/input.variables b/semantic/src/themes/github/elements/input.variables
new file mode 100644
index 0000000..7bb9354
--- /dev/null
+++ b/semantic/src/themes/github/elements/input.variables
@@ -0,0 +1,16 @@
+/*******************************
+ Input
+*******************************/
+
+@boxShadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;
+
+@verticalPadding: @relative7px;
+@horizontalPadding: @relative8px;
+
+@borderColor: #CCCCCC;
+
+@focusBorderColor: #51A7E8;
+@focusBoxShadow:
+ 0 1px 2px rgba(0, 0, 0, 0.075) inset,
+ 0 0 5px rgba(81, 167, 232, 0.5)
+;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/label.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/label.overrides b/semantic/src/themes/github/elements/label.overrides
new file mode 100644
index 0000000..5826cb2
--- /dev/null
+++ b/semantic/src/themes/github/elements/label.overrides
@@ -0,0 +1,9 @@
+/*******************************
+ Site Overrides
+*******************************/
+
+/* Notification Label on GitHub */
+.ui.floating.blue.label {
+ border: 2px solid #f3f3f3 !important;
+ background-image: linear-gradient(#7aa1d3, #4078c0) !important;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/label.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/label.variables b/semantic/src/themes/github/elements/label.variables
new file mode 100644
index 0000000..8a1e13f
--- /dev/null
+++ b/semantic/src/themes/github/elements/label.variables
@@ -0,0 +1,4 @@
+/*******************************
+ User Variable Overrides
+*******************************/
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/segment.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/segment.overrides b/semantic/src/themes/github/elements/segment.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/github/elements/segment.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/segment.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/segment.variables b/semantic/src/themes/github/elements/segment.variables
new file mode 100644
index 0000000..4c53f05
--- /dev/null
+++ b/semantic/src/themes/github/elements/segment.variables
@@ -0,0 +1,40 @@
+/*******************************
+ Standard
+*******************************/
+
+/*-------------------
+ Segment
+--------------------*/
+
+@segmentBorderWidth: 1px;
+@border: 1px solid #D8DEE2;
+@boxShadow: 0px 1px 3px rgba(0, 0, 0, 0.075);
+
+@verticalPadding: 20px;
+@horizontalPadding: 20px;
+
+@borderRadius: 4px;
+
+/*******************************
+ Variations
+*******************************/
+
+
+/* Raised */
+@raisedBoxShadow: 0px 1px 3px rgba(0, 0, 0, 0.075);
+
+/* Colors */
+@coloredBorderSize: 0.5em;
+
+/* Ordinality */
+@secondaryBackground: #F9F9F9;
+@secondaryColor: @textColor;
+
+@tertiaryBackground: #F0F0F0;
+@tertiaryColor: @textColor;
+
+@secondaryInvertedBackground: #555555;
+@secondaryInvertedColor: @textColor;
+
+@tertiaryInvertedBackground: #333333;
+@tertiaryInvertedColor: @textColor;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/step.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/step.overrides b/semantic/src/themes/github/elements/step.overrides
new file mode 100644
index 0000000..f4c076d
--- /dev/null
+++ b/semantic/src/themes/github/elements/step.overrides
@@ -0,0 +1,26 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.steps .step:after {
+ display: none;
+}
+.ui.steps .completed.step:before {
+ opacity: 0.5;
+}
+
+.ui.steps .step.active:after {
+ display: block;
+ border: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+ border-left: 1px solid rgba(0, 0, 0, 0.2);
+}
+.ui.vertical.steps .step.active:after {
+ display: block;
+ border: none;
+ top: 50%;
+ right: 0%;
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+ border-right: 1px solid rgba(0, 0, 0, 0.2);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/elements/step.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/elements/step.variables b/semantic/src/themes/github/elements/step.variables
new file mode 100644
index 0000000..ff8dad8
--- /dev/null
+++ b/semantic/src/themes/github/elements/step.variables
@@ -0,0 +1,26 @@
+/*-------------------
+ Step Variables
+--------------------*/
+
+/* Step */
+@background: transparent linear-gradient(transparent, rgba(0, 0, 0, 0.07));
+@verticalPadding: 1em;
+
+@arrowDisplay: none;
+@lastArrowDisplay: none;
+@activeArrowDisplay: block;
+@activeLastArrowDisplay: block;
+
+/* Group */
+@stepsBackground: #FFFFFF;
+@stepsBoxShadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.15);
+
+/* States */
+@activeBackground: #FFFFFF;
+@activeIconColor: @darkTextColor;
+
+/* Arrow */
+@arrowTopOffset: 100%;
+@arrowRightOffset: 50%;
+@arrowBorderColor: rgba(0, 0, 0, 0.2);
+@arrowBorderWidth: 0px 0px @borderWidth @borderWidth;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/globals/site.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/globals/site.variables b/semantic/src/themes/github/globals/site.variables
new file mode 100644
index 0000000..b5879ee
--- /dev/null
+++ b/semantic/src/themes/github/globals/site.variables
@@ -0,0 +1,47 @@
+/*******************************
+ User Global Variables
+*******************************/
+
+@pageMinWidth : 1049px;
+@pageOverflowX : visible;
+
+@emSize: 13px;
+@fontSize : 13px;
+@fontName : 'Arial';
+@importGoogleFonts : false;
+
+@h1: 2.25em;
+
+@defaultBorderRadius: 0.2307em;
+
+@disabledOpacity: 0.3;
+
+/* Colors */
+@blue: #80A6CD;
+@green: #78CB5B;
+@orange: #D26911;
+@black: #333333;
+@primaryColor: @green;
+@secondaryColor: @black;
+
+/* Links */
+@linkColor: #4078C0;
+@linkHoverColor: @linkColor;
+@linkHoverUnderline: underline;
+
+/* Borders */
+@borderColor: rgba(0, 0, 0, 0.13);
+@solidBorderColor: #DDDDDD;
+@internalBorderColor: rgba(0, 0, 0, 0.06);
+@selectedBorderColor: #51A7E8;
+
+/* Breakpoints */
+@largeMonitorBreakpoint: 1049px;
+@computerBreakpoint: @largeMonitorBreakpoint;
+@tabletBreakpoint: @largeMonitorBreakpoint;
+
+@infoBackgroundColor: #E6F1F6;
+
+@infoTextColor: #4E575B;
+@warningTextColor: #613A00;
+@errorTextColor: #991111;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/modules/dropdown.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/modules/dropdown.overrides b/semantic/src/themes/github/modules/dropdown.overrides
new file mode 100644
index 0000000..7a1043d
--- /dev/null
+++ b/semantic/src/themes/github/modules/dropdown.overrides
@@ -0,0 +1,53 @@
+/*******************************
+ User Overrides
+*******************************/
+
+/* Smaller Icon */
+.ui.dropdown > .dropdown.icon {
+ font-size: 12px;
+}
+
+
+/* Dropdown Carets */
+@font-face {
+ font-family: 'Dropdown';
+ src:
+ url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYF
BwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'),
+ url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+Lk
AgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff')
+ ;
+ font-weight: normal;
+ font-style: normal;
+}
+
+.ui.dropdown > .dropdown.icon {
+ font-family: 'Dropdown';
+ line-height: 1;
+ height: 1em;
+ width: 1.23em;
+ backface-visibility: hidden;
+ font-weight: normal;
+ font-style: normal;
+ text-align: center;
+}
+
+.ui.dropdown > .dropdown.icon {
+ width: auto;
+}
+.ui.dropdown > .dropdown.icon:before {
+ content: '\f0d7';
+}
+
+/* Sub Menu */
+.ui.dropdown .menu .item .dropdown.icon:before {
+ content: '\f0da'/*rtl:'\f0d9'*/;
+}
+
+.ui.dropdown .item .left.dropdown.icon:before,
+.ui.dropdown .left.menu .item .dropdown.icon:before {
+ content: "\f0d9"/*rtl:"\f0da"*/;
+}
+
+/* Vertical Menu Dropdown */
+.ui.vertical.menu .dropdown.item > .dropdown.icon:before {
+ content: "\f0da"/*rtl:"\f0d9"*/;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/modules/dropdown.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/modules/dropdown.variables b/semantic/src/themes/github/modules/dropdown.variables
new file mode 100644
index 0000000..d4ee8c0
--- /dev/null
+++ b/semantic/src/themes/github/modules/dropdown.variables
@@ -0,0 +1,35 @@
+/*******************************
+ User Variable Overrides
+*******************************/
+
+@transition:
+ width @defaultDuration @defaultEasing
+;
+
+@menuPadding: 0px;
+
+@itemVerticalPadding: @relative8px;
+@itemHorizontalPadding: @relative14px;
+
+@dropdownIconMargin: 0em 0em 0em 2px;
+
+@raisedBoxShadow: 0px 3px 12px rgba(0, 0, 0, 0.15);
+
+@menuPadding: @relative5px 0px;
+
+@menuHeaderMargin: 0em;
+@menuHeaderPadding: @relative6px @itemHorizontalPadding;
+@menuHeaderFontSize: @relative12px;
+@menuHeaderTextTransform: none;
+@menuHeaderFontWeight: normal;
+@menuHeaderColor: #767676;
+
+@menuDividerMargin: @relative8px 0em;
+
+@disabledOpacity: 0.6;
+
+/* States */
+@hoveredItemBackground: #4078C0;
+@hoveredItemColor: @white;
+
+@pointingArrowSize: @relative9px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/modules/popup.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/modules/popup.variables b/semantic/src/themes/github/modules/popup.variables
new file mode 100644
index 0000000..81a8173
--- /dev/null
+++ b/semantic/src/themes/github/modules/popup.variables
@@ -0,0 +1,12 @@
+/*******************************
+ Popup
+*******************************/
+
+
+@small: @relative10px;
+@medium: @relative11px;
+@large: @relative13px;
+
+@verticalPadding: @relative7px;
+@horizontalPadding: @relative11px;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/gmail/collections/message.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/gmail/collections/message.overrides b/semantic/src/themes/gmail/collections/message.overrides
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/gmail/collections/message.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/gmail/collections/message.variables b/semantic/src/themes/gmail/collections/message.variables
new file mode 100644
index 0000000..16902bc
--- /dev/null
+++ b/semantic/src/themes/gmail/collections/message.variables
@@ -0,0 +1,15 @@
+@background: #F3F3F3;
+
+@boxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset;
+@borderRadius: 4px;
+@verticalPadding: 7px;
+@horizontalPadding: 15px;
+
+@headerFontSize: 1em;
+
+@floatingBoxShadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+
+@iconSize: 1.5em;
+@iconDistance: 1em;
+
+@warningBackgroundColor: #F9EDBE;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/instagram/views/card.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/instagram/views/card.overrides b/semantic/src/themes/instagram/views/card.overrides
new file mode 100644
index 0000000..f2b0a74
--- /dev/null
+++ b/semantic/src/themes/instagram/views/card.overrides
@@ -0,0 +1,12 @@
+/*******************************
+ Overrides
+*******************************/
+
+
+@import url(http://fonts.googleapis.com/css?family=Montserrat:700,400);
+
+.ui.cards > .card,
+.ui.card {
+ font-family: 'Montserrat';
+ font-size-adjust: 0.5;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/instagram/views/card.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/instagram/views/card.variables b/semantic/src/themes/instagram/views/card.variables
new file mode 100644
index 0000000..94e63b1
--- /dev/null
+++ b/semantic/src/themes/instagram/views/card.variables
@@ -0,0 +1,23 @@
+/*******************************
+ Card
+*******************************/
+
+/*-------------------
+ View
+--------------------*/
+
+@borderBoxShadow: none;
+@shadowBoxShadow: none;
+@boxShadow: none;
+
+
+@internalBorderColor: #EDEDEE;
+@border: 1px solid #EDEDEE;
+
+@contentPadding: 14px 20px;
+
+@metaColor: #A5A7AA;
+
+@linkHoverRaiseDistance: 0px;
+@linkHoverBoxShadow: none;
+@linkHoverBorder: 1px solid #D0D0D8;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/collections/menu.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/collections/menu.overrides b/semantic/src/themes/material/collections/menu.overrides
new file mode 100644
index 0000000..8eea17f
--- /dev/null
+++ b/semantic/src/themes/material/collections/menu.overrides
@@ -0,0 +1 @@
+@import url(http://fonts.googleapis.com/css?family=Roboto);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/collections/menu.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/collections/menu.variables b/semantic/src/themes/material/collections/menu.variables
new file mode 100644
index 0000000..ccc1345
--- /dev/null
+++ b/semantic/src/themes/material/collections/menu.variables
@@ -0,0 +1,10 @@
+/*******************************
+ Menu
+*******************************/
+
+@fontFamily: 'Roboto', Arial, sans-serif;
+@boxShadow: 0px 1px 6px rgba(0, 0, 0, 0.2);
+@dividerSize: 0px;
+
+@itemVerticalPadding: @relativeLarge;
+@itemHorizontalPadding: @relativeLarge;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/elements/button.overrides b/semantic/src/themes/material/elements/button.overrides
new file mode 100644
index 0000000..751266a
--- /dev/null
+++ b/semantic/src/themes/material/elements/button.overrides
@@ -0,0 +1,15 @@
+@import url(http://fonts.googleapis.com/css?family=Roboto);
+
+.ui.primary.button:hover {
+ box-shadow:
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.3) inset,
+ 0px 2px 3px 0px rgba(0, 0, 0, 0.35) !important
+ ;
+}
+
+.ui.secondary.button:hover {
+ box-shadow:
+ 0px 0px 0px 1px rgba(0, 0, 0, 0.2) inset,
+ 0px 2px 3px 0px rgba(0, 0, 0, 0.3) !important
+ ;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/elements/button.variables b/semantic/src/themes/material/elements/button.variables
new file mode 100644
index 0000000..da7dcbd
--- /dev/null
+++ b/semantic/src/themes/material/elements/button.variables
@@ -0,0 +1,97 @@
+/*******************************
+ Button
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@googleFontName : 'Roboto';
+@pageFont : 'Roboto', Arial, sans-serif;
+
+@medium: 13px;
+
+@verticalPadding : 0.8em;
+@horizontalPadding : 0.8em;
+@borderRadius : @relative3px;
+@color : #222222;
+@fontWeight : normal;
+@textTransform : none;
+
+@backgroundColor : @white;
+@backgroundImage : linear-gradient(transparent, rgba(0, 0, 0, 0.02));
+
+@solidBorderColor: #DDDDDD;
+
+@borderBoxShadowColor: @solidBorderColor;
+@borderBoxShadow: 0px 0px 0px 1px @solidBorderColor inset;
+@shadowBoxShadow: 0px 0px 0px 0px transparent;
+
+@transition:
+ opacity 0.3s @defaultEasing,
+ background-color 0.3s @defaultEasing,
+ color 0.3s @defaultEasing,
+ box-shadow 0.3s @defaultEasing,
+ background 0.3s @defaultEasing
+;
+/*-------------------
+ State
+--------------------*/
+
+@hoverBackgroundColor: @white;
+@hoverBoxShadow:
+ @borderBoxShadow,
+ 0px 2px 3px 0px rgba(0, 0, 0, 0.2) !important
+;
+
+@downBackgroundColor: @white;
+@downBackgroundImage: linear-gradient(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.04));
+@downTextColor: #222222;
+@downBoxShadow: @borderBoxShadow;
+
+@activeBackgroundColor: #F0F0F0;
+@activeBoxShadow: 0px 0px 0px 1px #DDDDDD;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Basic */
+@basicBorderSize: 0px;
+@basicBorderRadius: 4px;
+@basicColoredBorderSize: 1px;
+@basicHoverBackground: @white;
+@basicHoverBoxShadow: @hoverBoxShadow;
+@basicDownBackground: @white;
+@basicDownBoxShadow: @downBoxShadow;
+
+@basicActiveBackground: #FFFFFF;
+@basicActiveBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
+
+/* Labeled */
+@labeledIconBackgroundColor: transparent;
+@labeledIconWidth: 2em;
+
+@labeledLabelBorderOffset: 0px;
+
+/* Colored */
+@coloredBackgroundImage : @subtleGradient;
+@coloredBoxShadow : 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset;
+
+/* Primary */
+@primaryColor : #4184F3;
+@primaryBoxShadow : 0px 0px 0px 1px #0157E4 inset;
+
+/* Secondary */
+@secondaryColor : #EEEEEE;
+@secondaryBackgroundImage : @backgroundImage;
+@secondaryTextColor : @textColor;
+@secondaryBoxShadow : @borderBoxShadow;
+
+/* Emotive */
+@positiveColor: #3D9400;
+@negativeColor: #D34836;
+
+/* Inverted */
+@invertedBorderSize: 1px;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/elements/header.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/elements/header.overrides b/semantic/src/themes/material/elements/header.overrides
new file mode 100644
index 0000000..7278edc
--- /dev/null
+++ b/semantic/src/themes/material/elements/header.overrides
@@ -0,0 +1,15 @@
+/*******************************
+ Overrides
+*******************************/
+
+@import url(http://fonts.googleapis.com/css?family=Roboto);
+
+h1.ui.header,
+.ui.huge.header {
+ font-weight: normal;
+}
+
+h2.ui.header,
+.ui.large.header {
+ font-weight: normal;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/elements/header.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/elements/header.variables b/semantic/src/themes/material/elements/header.variables
new file mode 100644
index 0000000..6764f01
--- /dev/null
+++ b/semantic/src/themes/material/elements/header.variables
@@ -0,0 +1,21 @@
+/*-------------------
+ Header
+--------------------*/
+
+@headerFont : 'Roboto', Arial, sans-serif;
+@fontWeight: normal;
+
+@iconSize: 2em;
+@iconOffset: 0.2em;
+@iconAlignment: top;
+
+@subHeaderFontSize: 1rem;
+
+
+/* HTML Headings */
+@h1 : 2.25rem;
+@h2 : 2rem;
+@h3 : 1.75rem;
+@h4 : 1.5rem;
+@h5 : 1.25rem;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/globals/site.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/globals/site.overrides b/semantic/src/themes/material/globals/site.overrides
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/globals/site.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/globals/site.variables b/semantic/src/themes/material/globals/site.variables
new file mode 100644
index 0000000..ffaee11
--- /dev/null
+++ b/semantic/src/themes/material/globals/site.variables
@@ -0,0 +1,120 @@
+/*******************************
+ Site Settings
+*******************************/
+
+/*-------------------
+ Fonts
+--------------------*/
+
+@headerFont : 'Roboto', 'Helvetica Neue', Arial, Helvetica, sans-serif;
+@pageFont : 'Roboto', 'Helvetica Neue', Arial, Helvetica, sans-serif;
+@googleFontName : 'Roboto';
+
+/*-------------------
+ Base Sizes
+--------------------*/
+
+@emSize : 14px;
+@fontSize : 13px;
+
+/*--------------
+ Page
+---------------*/
+
+@pageBackground : #F9F9F9;
+@lineHeight : 1.33;
+@textColor : #212121;
+
+/*--------------
+ Page Heading
+---------------*/
+
+@headerLineHeight : 1.33em;
+@headerFontWeight : 400;
+
+@h1 : 2.25rem;
+@h2 : 2rem;
+@h3 : 1.75rem;
+@h4 : 1.5rem;
+@h5 : 1.25rem;
+
+/*--------------
+ Paragraphs
+---------------*/
+
+@paragraphLineHeight: 1.7em;
+
+/*-------------------
+ Site Colors
+--------------------*/
+
+/*--- Colors ---*/
+@black : #1B1C1D;
+@blue : #2196F3;
+@green : #4CAF50;
+@grey : #9E9E9E;
+@orange : #FF9800;
+@pink : #E91E63;
+@purple : #9C27B0;
+@red : #F44336;
+@teal : #1de9b6;
+@yellow : #FFEB3B;
+
+/*--- Light Colors ---*/
+@lightBlack : #333333;
+@lightBlue : #2979FF;
+@lightGreen : #00E676;
+@lightOrange : #FF9100;
+@lightPink : #F50057;
+@lightPurple : #D500F9;
+@lightRed : #FF1744;
+@lightTeal : #1DE9B6;
+@lightYellow : #FFEA00;
+
+/*--- Neutrals ---*/
+@fullBlack : #000000;
+@darkGrey : #AAAAAA;
+@lightGrey : #DCDDDE;
+@offWhite : #FAFAFA;
+@darkWhite : #F0F0F0;
+@white : #FFFFFF;
+
+/*-------------------
+ Brand Colors
+--------------------*/
+
+@primaryColor : @blue;
+@secondaryColor : @grey;
+
+@lightPrimaryColor : @lightBlue;
+@lightSecondaryColor : @lightGrey;
+
+/*-------------------
+ Paragraph
+--------------------*/
+
+@paragraphMargin : 0em 0em 1.53em;
+
+/*-------------------
+ Links
+--------------------*/
+
+@linkColor : #009FDA;
+@linkUnderline : none;
+@linkHoverColor : lighten(@linkColor, 5);
+@linkHoverUnderline : @linkUnderline;
+
+/*-------------------
+ Highlighted Text
+--------------------*/
+
+@highlightBackground : #009FDA;
+@highlightColor : @white;
+
+/*-------------------
+ Accents
+--------------------*/
+
+/* 4px @ default em */
+@relativeBorderRadius: @relative4px;
+@absoluteBorderRadius: 4px;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/modules/dropdown.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/modules/dropdown.overrides b/semantic/src/themes/material/modules/dropdown.overrides
new file mode 100644
index 0000000..40fcd92
--- /dev/null
+++ b/semantic/src/themes/material/modules/dropdown.overrides
@@ -0,0 +1,5 @@
+@import url(http://fonts.googleapis.com/css?family=Roboto:400,700);
+
+.ui.dropdown {
+ font-family: 'Roboto';
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/modules/dropdown.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/modules/dropdown.variables b/semantic/src/themes/material/modules/dropdown.variables
new file mode 100644
index 0000000..5ed6e1a
--- /dev/null
+++ b/semantic/src/themes/material/modules/dropdown.variables
@@ -0,0 +1,20 @@
+/*******************************
+ Menu
+*******************************/
+
+@menuBorderRadius: @borderRadius;
+@menuBorderColor: #DADADA;
+@menuBoxShadow: 0px 2px 4px rgba(0, 0, 0, 0.2);
+
+@menuPadding: @relative8px 0em;
+@itemVerticalPadding: 1em;
+@itemHorizontalPadding: 1.5em;
+
+@menuHeaderFontSize: @small;
+@menuHeaderFontWeight: bold;
+@menuHeaderTextTransform: none;
+
+@selectionBorderEmWidth: 0em;
+@selectionItemDivider: none;
+
+@labelBoxShadow: none;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/modules/modal.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/modules/modal.overrides b/semantic/src/themes/material/modules/modal.overrides
new file mode 100644
index 0000000..6b9b947
--- /dev/null
+++ b/semantic/src/themes/material/modules/modal.overrides
@@ -0,0 +1,6 @@
+@import url(http://fonts.googleapis.com/css?family=Roboto);
+
+.ui.modal .header {
+ font-family: "Roboto", Arial, Sans-serif !important;
+ font-weight: 400 !important;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/material/modules/modal.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/material/modules/modal.variables b/semantic/src/themes/material/modules/modal.variables
new file mode 100644
index 0000000..5629729
--- /dev/null
+++ b/semantic/src/themes/material/modules/modal.variables
@@ -0,0 +1,15 @@
+@boxShadow: 0px 10px 18px rgba(0, 0, 0, 0.22);
+@borderRadius: 0em;
+
+
+@headerBackground: @white;
+@headerVerticalPadding: 1.7142rem;
+@headerHorizontalPadding: 1.7142rem;
+@headerFontWeight: 400;
+@headerFontFamily: 'Roboto', "Helvetica Neue", Arial, sans-serif;
+@headerBorder: none;
+
+@contentPadding: 1rem 2rem 2rem;
+
+@actionBorder: none;
+@actionBackground: @white;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/pulsar/elements/loader.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/pulsar/elements/loader.overrides b/semantic/src/themes/pulsar/elements/loader.overrides
new file mode 100644
index 0000000..5ddd401
--- /dev/null
+++ b/semantic/src/themes/pulsar/elements/loader.overrides
@@ -0,0 +1,70 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
+.ui.loader:after {
+ -webkit-animation: loader-pulsar 2s infinite linear;
+ animation: loader-pulsar 2s infinite linear;
+}
+
+@-webkit-keyframes loader-pulsar {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 0;
+ }
+ 20% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+ 40% {
+ -webkit-transform: rotate(740deg);
+ transform: rotate(740deg);
+ opacity: 1;
+ }
+ 60% {
+ -webkit-transform: rotate(1120deg);
+ transform: rotate(1120deg);
+ opacity: 1;
+ }
+ 80% {
+ -webkit-transform: rotate(1440deg);
+ transform: rotate(1440deg);
+ }
+ 100% {
+ -webkit-transform: rotate(1800deg);
+ transform: rotate(1800deg);
+ opacity: 0;
+ }
+}
+
+@keyframes loader-pulsar {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ opacity: 0;
+ }
+ 20% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+ 40% {
+ -webkit-transform: rotate(740deg);
+ transform: rotate(740deg);
+ opacity: 1;
+ }
+ 60% {
+ -webkit-transform: rotate(1120deg);
+ transform: rotate(1120deg);
+ opacity: 1;
+ }
+ 80% {
+ -webkit-transform: rotate(1440deg);
+ transform: rotate(1440deg);
+ }
+ 100% {
+ -webkit-transform: rotate(1800deg);
+ transform: rotate(1800deg);
+ opacity: 0;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/pulsar/elements/loader.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/pulsar/elements/loader.variables b/semantic/src/themes/pulsar/elements/loader.variables
new file mode 100644
index 0000000..29ab5cf
--- /dev/null
+++ b/semantic/src/themes/pulsar/elements/loader.variables
@@ -0,0 +1,7 @@
+/*******************************
+ Loader
+*******************************/
+
+@loaderSpeed: 2s;
+@loaderLineColor: @primaryColor;
+@invertedLoaderLineColor: @lightPrimaryColor;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/raised/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/raised/elements/button.overrides b/semantic/src/themes/raised/elements/button.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/raised/elements/button.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/raised/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/raised/elements/button.variables b/semantic/src/themes/raised/elements/button.variables
new file mode 100644
index 0000000..eced62f
--- /dev/null
+++ b/semantic/src/themes/raised/elements/button.variables
@@ -0,0 +1,27 @@
+/*******************************
+ Button
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@backgroundColor: #F8F8F8;
+@backgroundImage: linear-gradient(transparent, rgba(0, 0, 0, 0.05));
+@verticalAlign: middle;
+@borderRadius: 0.4em;
+@borderBoxShadowColor: @borderColor;
+
+/* Shadow */
+@shadowDistance: 0.3em;
+@verticalPadding: 1em;
+@horizontalPadding: 2em;
+
+/* transition box shadow as well */
+@transition:
+ opacity @defaultDuration @defaultEasing,
+ background-color @defaultDuration @defaultEasing,
+ box-shadow @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing,
+ background @defaultDuration @defaultEasing
+;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/resetcss/globals/reset.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/resetcss/globals/reset.overrides b/semantic/src/themes/resetcss/globals/reset.overrides
new file mode 100644
index 0000000..3377df5
--- /dev/null
+++ b/semantic/src/themes/resetcss/globals/reset.overrides
@@ -0,0 +1,52 @@
+/*******************************
+ Overrides
+*******************************/
+
+/**
+ * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
+ * http://cssreset.com
+ */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/resetcss/globals/reset.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/resetcss/globals/reset.variables b/semantic/src/themes/resetcss/globals/reset.variables
new file mode 100644
index 0000000..0eedf27
--- /dev/null
+++ b/semantic/src/themes/resetcss/globals/reset.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Reset
+*******************************/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/round/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/round/elements/button.overrides b/semantic/src/themes/round/elements/button.overrides
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/round/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/round/elements/button.variables b/semantic/src/themes/round/elements/button.variables
new file mode 100644
index 0000000..9261206
--- /dev/null
+++ b/semantic/src/themes/round/elements/button.variables
@@ -0,0 +1,138 @@
+/*******************************
+ Button
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+@borderRadius: @circularRadius;
+@textTransform: uppercase;
+@backgroundColor: #FFFFFF;
+@backgroundImage: none;
+@fontWeight: bold;
+@textColor: rgba(0, 0, 0, 0.6);
+@boxShadow:
+ 0px 0px 0px 2px rgba(0, 0, 0, 0.2) inset
+;
+
+/* Padding */
+@verticalPadding: 1.25em;
+@horizontalPadding: 3em;
+
+/* Icon */
+@iconOpacity: 0.8;
+@iconDistance: 0.4em;
+@iconTransition: opacity @defaultDuration @defaultEasing;
+@iconMargin: 0em @iconDistance 0em -(@iconDistance / 2);
+@iconVerticalAlign: top;
+
+/*-------------------
+ Group
+--------------------*/
+
+@verticalBoxShadow: 0px 0px 0px 1px @borderColor inset;
+
+
+/*-------------------
+ States
+--------------------*/
+
+@hoverBackgroundColor: #FAFAFA;
+@hoverBackgroundImage: none;
+@hoverBoxShadow: 0px 0px 0px 2px rgba(0, 0, 0, 0.3) inset;
+
+@downBackgroundColor: #F0F0F0;
+@downBackgroundImage: none;
+@downBoxShadow: 0px 0px 0px 2px rgba(0, 0, 0, 0.35) inset !important;
+
+@activeBackgroundColor: #DDDDDD;
+@activeBackgroundImage: none;
+@activeBoxShadow: 0px 0px 0px 2px rgba(0, 0, 0, 0.3) inset !important;
+
+@loadingBackgroundColor: #FFFFFF;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Labeled Icon */
+@labeledIconWidth: 1em + (@verticalPadding * 2);
+@labeledIconBackgroundColor: transparent;
+@labeledIconPadding: (@horizontalPadding + 1em);
+@labeledIconBorder: rgba(0, 0, 0, 0.05);
+@labeledIconColor: '';
+
+@labeledIconLeftShadow: none;
+@labeledIconRightShadow: none;
+
+/* Basic */
+@basicBoxShadow: 0px 0px 0px 1px @borderColor;
+@iconOffset: 0.05em;
+@basicLoadingColor: #FFFFFF;
+
+@basicHoverBackground: #FAFAFA;
+@basicHoverBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15);
+
+@basicDownBackground: rgba(0, 0, 0, 0.02);
+@basicDownBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2);
+
+@basicActiveBackground: @transparentBlack;
+@basicActiveColor: @selectedTextColor;
+
+/* Basic Inverted */
+@basicInvertedBackground: transparent;
+@basicInvertedHoverBackground: transparent;
+@basicInvertedDownBackground: @transparentWhite;
+@basicInvertedActiveBackground: @transparentWhite;
+
+@basicInvertedBoxShadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5);
+@basicInvertedHoverBoxShadow: 0px 0px 0px 2px @selectedWhiteBorderColor;
+@basicInvertedDownBoxShadow: 0px 0px 0px 2px @selectedWhiteBorderColor;
+@basicInvertedActiveBoxShadow: 0px 0px 0px 2px @selectedWhiteBorderColor;
+
+@basicInvertedColor: @darkWhite;
+@basicInvertedHoverColor: @darkWhiteHover;
+@basicInvertedDownColor: @darkWhiteActive;
+@basicInvertedActiveColor: @invertedTextColor;
+
+
+/* Basic Group */
+@basicGroupBorder: 1px solid @borderColor;
+@basicGroupBoxShadow: 0px 0px 0px 1px @borderColor;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Colors */
+@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.05), rgba(0, 0, 0, 0.1));
+@coloredBoxShadow: @shadowBoxShadow;
+
+/* Compact */
+@compactVerticalPadding: (@verticalPadding * 0.75);
+@compactHorizontalPadding: (@horizontalPadding * 0.75);
+
+/* Attached */
+@attachedOffset: -1px;
+@attachedBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
+@attachedHorizontalPadding: 0.75em;
+
+/* Floated */
+@floatedMargin: 0.25em;
+
+/* Animated */
+@animationDuration: 0.3s;
+@animationEasing: ease;
+@fadeScaleHigh: 1.5;
+@fadeScaleLow: 0.75;
+
+/* Sizing */
+@mini: 0.7rem;
+@tiny: 0.8rem;
+@small: 0.875rem;
+@medium: 1rem;
+@large: 1.125rem;
+@big: 1.25rem;
+@huge: 1.375rem;
+@massive: 1.5rem;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/rtl/globals/site.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/rtl/globals/site.overrides b/semantic/src/themes/rtl/globals/site.overrides
new file mode 100644
index 0000000..a73302b
--- /dev/null
+++ b/semantic/src/themes/rtl/globals/site.overrides
@@ -0,0 +1,6 @@
+/*******************************
+ Global Overrides
+*******************************/
+
+/* Import Droid Arabic Kufi */
+@import 'http://fonts.googleapis.com/earlyaccess/droidarabickufi.css';
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/rtl/globals/site.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/rtl/globals/site.variables b/semantic/src/themes/rtl/globals/site.variables
new file mode 100644
index 0000000..898d724
--- /dev/null
+++ b/semantic/src/themes/rtl/globals/site.variables
@@ -0,0 +1,14 @@
+/*******************************
+ Site Settings
+*******************************/
+
+/*-------------------
+ Fonts
+--------------------*/
+
+@googleFontName : 'Droid Sans';
+
+/* Kufi imported in site.overrides */
+@headerFont : 'Droid Arabic Kufi', 'Droid Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;
+@pageFont : 'Droid Arabic Kufi', 'Droid Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/striped/modules/progress.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/striped/modules/progress.overrides b/semantic/src/themes/striped/modules/progress.overrides
new file mode 100644
index 0000000..606cfe4
--- /dev/null
+++ b/semantic/src/themes/striped/modules/progress.overrides
@@ -0,0 +1,29 @@
+/*******************************
+ Progress
+*******************************/
+
+.ui.progress .bar {
+ background-size: 30px 30px;
+ background-image:
+ linear-gradient(
+ 135deg, rgba(255, 255, 255, 0.08) 25%, transparent 25%,
+ transparent 50%, rgba(255, 255, 255, 0.08) 50%, rgba(255, 255, 255, 0.08) 75%,
+ transparent 75%, transparent
+ )
+ ;
+}
+
+.ui.progress.active .bar:after {
+ animation: none;
+}
+.ui.progress.active .bar {
+ animation: progress-striped 3s linear infinite;
+}
+@keyframes progress-striped {
+ 0% {
+ background-position: 0px 0;
+ }
+ 100% {
+ background-position: 60px 0;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/striped/modules/progress.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/striped/modules/progress.variables b/semantic/src/themes/striped/modules/progress.variables
new file mode 100644
index 0000000..cdba171
--- /dev/null
+++ b/semantic/src/themes/striped/modules/progress.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Progress
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/timeline/views/feed.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/timeline/views/feed.overrides b/semantic/src/themes/timeline/views/feed.overrides
new file mode 100644
index 0000000..4b51e34
--- /dev/null
+++ b/semantic/src/themes/timeline/views/feed.overrides
@@ -0,0 +1,27 @@
+/*******************************
+ User Variable Overrides
+*******************************/
+
+.ui.feed > .event .label {
+ border-left: 3px solid #DDDDDD;
+}
+.ui.feed > .event:last-child .label {
+ border-left-color: transparent;
+}
+
+.ui.feed > .event > .label {
+ margin-left: 1.6em;
+}
+
+.ui.feed > .event > .label > img,
+.ui.feed > .event > .label > .icon {
+ background-color: #009FDA;
+ border-radius: 500rem;
+ color: #FFFFFF;
+ width: 3rem;
+ height: 3rem;
+ line-height: 1.5;
+ left: -1.6rem;
+ opacity: 1;
+ position: relative;
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/timeline/views/feed.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/timeline/views/feed.variables b/semantic/src/themes/timeline/views/feed.variables
new file mode 100644
index 0000000..d1345e8
--- /dev/null
+++ b/semantic/src/themes/timeline/views/feed.variables
@@ -0,0 +1,36 @@
+/*******************************
+ Feed
+*******************************/
+
+/*-------------------
+ Elements
+--------------------*/
+
+@eventMargin: 0em;
+@eventDivider: none;
+@eventPadding: 0em;
+
+/* Event Label */
+@labelWidth: 3em;
+@labelHeight: auto;
+
+@labeledContentMargin: 0.75em 0em 2em 0.75em;
+
+/* Icon */
+@iconLabelBackground: @primaryColor;
+@iconLabelBorderRadius: @circularRadius;
+@iconLabelColor: @white;
+
+/* Metadata Group */
+@metadataDisplay: inline-block;
+@metadataMargin: 1em 0em 0em;
+@metadataBackground: @white @subtleGradient;
+@metadataBorder: 1px solid @solidBorderColor;
+@metadataBorderRadius: 0.25em;
+@metadataBoxShadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+@metadataPadding: 0.5em 1em;
+@metadataColor: rgba(0, 0, 0, 0.6);
+
+/*-------------------
+ Variations
+--------------------*/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/twitter/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/twitter/elements/button.overrides b/semantic/src/themes/twitter/elements/button.overrides
new file mode 100644
index 0000000..44a0f45
--- /dev/null
+++ b/semantic/src/themes/twitter/elements/button.overrides
@@ -0,0 +1,13 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.primary.button {
+ box-shadow:
+ 0px 0px 0px 1px #3B88C3 inset,
+ 0 2px 0 rgba(255, 255, 255, 0.15) inset
+ ;
+}
+.ui.primary.button > .icon {
+ color: #FFFFFF;
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/twitter/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/twitter/elements/button.variables b/semantic/src/themes/twitter/elements/button.variables
new file mode 100644
index 0000000..1a8ecc3
--- /dev/null
+++ b/semantic/src/themes/twitter/elements/button.variables
@@ -0,0 +1,44 @@
+/*-------------------
+ Global Variables
+--------------------*/
+
+@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;
+@textColor: #66757F;
+@blue: #55ACEE;
+
+/*-------------------
+ Button Variables
+--------------------*/
+
+@backgroundColor: #F5F8FA;
+@backgroundImage: linear-gradient(@white, @backgroundColor);
+@color: #66757F;
+@borderBoxShadowColor: #E1E8ED;
+
+@textTransform: none;
+@fontWeight: bold;
+@textColor: #333333;
+
+@horizontalPadding: 1.284em;
+@verticalPadding: 0.8571em;
+
+@activeBackgroundColor: rgba(0, 0, 0, 0.1);
+
+@primaryColor: @blue;
+@coloredBackgroundImage: @subtleGradient;
+
+
+/*-------------------
+ States
+--------------------*/
+
+@hoverBackgroundColor: #E1E8ED;
+@hoverBackgroundImage: linear-gradient(@white, @hoverBackgroundColor);
+@hoverColor: #292F33;
+
+@downBackgroundColor: #E1E8ED;
+@downColor: #292F33;
+@downPressedShadow: 0px 1px 4px rgba(0, 0, 0, 0.2) inset;
+
+@labeledIconBackgroundColor: rgba(85, 172, 238, 0.05);
+@labeledIconBorder: rgba(0, 0, 0, 0.1);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/README.md
----------------------------------------------------------------------
diff --git a/semantic/tasks/README.md b/semantic/tasks/README.md
new file mode 100644
index 0000000..c602e22
--- /dev/null
+++ b/semantic/tasks/README.md
@@ -0,0 +1,17 @@
+## Tasks
+
+* Watch - Compile only changed files from source
+* Build - Build all files from source
+* Version - Output version number
+* Install - Run Installer to Set-up Paths
+
+## How to use
+
+These tasks can be imported into your own gulpfile allowing you to avoid using Semantic's build tools
+
+```javascript
+var
+ watch = require('path/to/semantic/tasks/watch')
+;
+gulp.task('watch ui', watch);
+```
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/components/create.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/components/create.js b/semantic/tasks/admin/components/create.js
new file mode 100644
index 0000000..3d4ed6d
--- /dev/null
+++ b/semantic/tasks/admin/components/create.js
@@ -0,0 +1,332 @@
+/*******************************
+ Create Component Repos
+*******************************/
+
+/*
+ This will create individual component repositories for each SUI component
+
+ * copy component files from release
+ * create commonjs files as index.js for NPM release
+ * create release notes that filter only items related to component
+ * custom package.json file from template
+ * create bower.json from template
+ * create README from template
+ * create meteor.js file
+*/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ del = require('del'),
+ fs = require('fs'),
+ path = require('path'),
+ runSequence = require('run-sequence'),
+
+ // admin dependencies
+ concatFileNames = require('gulp-concat-filenames'),
+ debug = require('gulp-debug'),
+ flatten = require('gulp-flatten'),
+ git = require('gulp-git'),
+ jsonEditor = require('gulp-json-editor'),
+ plumber = require('gulp-plumber'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ tap = require('gulp-tap'),
+ util = require('gulp-util'),
+
+ // config
+ config = require('../../config/user'),
+ release = require('../../config/admin/release'),
+ project = require('../../config/project/release'),
+
+ // shorthand
+ version = project.version,
+ output = config.paths.output
+
+;
+
+
+module.exports = function(callback) {
+ var
+ stream,
+ index,
+ tasks = []
+ ;
+
+ for(index in release.components) {
+
+ var
+ component = release.components[index]
+ ;
+
+ // streams... designed to save time and make coding fun...
+ (function(component) {
+
+ var
+ outputDirectory = path.join(release.outputRoot, component),
+ isJavascript = fs.existsSync(output.compressed + component + '.js'),
+ isCSS = fs.existsSync(output.compressed + component + '.css'),
+ capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1),
+ packageName = release.packageRoot + component,
+ repoName = release.componentRepoRoot + capitalizedComponent,
+ gitURL = 'https://github.com/' + release.org + '/' + repoName + '.git',
+ repoURL = 'https://github.com/' + release.org + '/' + repoName + '/',
+ concatSettings = {
+ newline : '',
+ root : outputDirectory,
+ prepend : " '",
+ append : "',"
+ },
+ regExp = {
+ match : {
+ // templated values
+ name : '{component}',
+ titleName : '{Component}',
+ version : '{version}',
+ files : '{files}',
+ // release notes
+ spacedVersions : /(###.*\n)\n+(?=###)/gm,
+ spacedLists : /(^- .*\n)\n+(?=^-)/gm,
+ trim : /^\s+|\s+$/g,
+ unrelatedNotes : new RegExp('^((?!(^.*(' + component + ').*$|###.*)).)*$', 'gmi'),
+ whitespace : /\n\s*\n\s*\n/gm,
+ // npm
+ componentExport : /(.*)\$\.fn\.\w+\s*=\s*function\(([^\)]*)\)\s*{/g,
+ componentReference: '$.fn.' + component,
+ settingsExport : /\$\.fn\.\w+\.settings\s*=/g,
+ settingsReference : /\$\.fn\.\w+\.settings/g,
+ trailingComma : /,(?=[^,]*$)/,
+ jQuery : /jQuery/g,
+ },
+ replace : {
+ // readme
+ name : component,
+ titleName : capitalizedComponent,
+ // release notes
+ spacedVersions : '',
+ spacedLists : '$1',
+ trim : '',
+ unrelatedNotes : '',
+ whitespace : '\n\n',
+ // npm
+ componentExport : 'var _module = module;\n$1module.exports = function($2) {',
+ componentReference: '_module.exports',
+ settingsExport : 'module.exports.settings =',
+ settingsReference : '_module.exports.settings',
+ jQuery : 'require("jquery")'
+ }
+ },
+ task = {
+ all : component + ' creating',
+ repo : component + ' create repo',
+ bower : component + ' create bower.json',
+ readme : component + ' create README',
+ npm : component + ' create NPM Module',
+ notes : component + ' create release notes',
+ composer : component + ' create composer.json',
+ package : component + ' create package.json',
+ meteor : component + ' create meteor package.js',
+ },
+ // paths to includable assets
+ manifest = {
+ assets : outputDirectory + '/assets/**/' + component + '?(s).*',
+ component : outputDirectory + '/' + component + '+(.js|.css)'
+ }
+ ;
+
+ // copy dist files into output folder adjusting asset paths
+ gulp.task(task.repo, false, function() {
+ return gulp.src(release.source + component + '.*')
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(replace(release.paths.source, release.paths.output))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ // create npm module
+ gulp.task(task.npm, false, function() {
+ return gulp.src(release.source + component + '!(*.min|*.map).js')
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(replace(regExp.match.componentExport, regExp.replace.componentExport))
+ .pipe(replace(regExp.match.componentReference, regExp.replace.componentReference))
+ .pipe(replace(regExp.match.settingsExport, regExp.replace.settingsExport))
+ .pipe(replace(regExp.match.settingsReference, regExp.replace.settingsReference))
+ .pipe(replace(regExp.match.jQuery, regExp.replace.jQuery))
+ .pipe(rename('index.js'))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ // create readme
+ gulp.task(task.readme, false, function() {
+ return gulp.src(release.templates.readme)
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(replace(regExp.match.name, regExp.replace.name))
+ .pipe(replace(regExp.match.titleName, regExp.replace.titleName))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ // extend bower.json
+ gulp.task(task.bower, false, function() {
+ return gulp.src(release.templates.bower)
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(jsonEditor(function(bower) {
+ bower.name = packageName;
+ bower.description = capitalizedComponent + ' - Semantic UI';
+ if(isJavascript) {
+ if(isCSS) {
+ bower.main = [
+ component + '.js',
+ component + '.css'
+ ];
+ }
+ else {
+ bower.main = [
+ component + '.js'
+ ];
+ }
+ bower.dependencies = {
+ jquery: '>=1.8'
+ };
+ }
+ else {
+ bower.main = [
+ component + '.css'
+ ];
+ }
+ return bower;
+ }))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ // extend package.json
+ gulp.task(task.package, false, function() {
+ return gulp.src(release.templates.package)
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(jsonEditor(function(npm) {
+ if(isJavascript) {
+ npm.dependencies = {
+ jquery: 'x.x.x'
+ };
+ npm.main = 'index.js';
+ }
+ npm.name = packageName;
+ if(version) {
+ npm.version = version;
+ }
+ npm.title = 'Semantic UI - ' + capitalizedComponent;
+ npm.description = 'Single component release of ' + component;
+ npm.repository = {
+ type : 'git',
+ url : gitURL
+ };
+ return npm;
+ }))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ // extend composer.json
+ gulp.task(task.composer, false, function() {
+ return gulp.src(release.templates.composer)
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(jsonEditor(function(composer) {
+ if(isJavascript) {
+ composer.dependencies = {
+ jquery: 'x.x.x'
+ };
+ composer.main = component + '.js';
+ }
+ composer.name = 'semantic/' + component;
+ if(version) {
+ composer.version = version;
+ }
+ composer.description = 'Single component release of ' + component;
+ return composer;
+ }))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ // create release notes
+ gulp.task(task.notes, false, function() {
+ return gulp.src(release.templates.notes)
+ .pipe(plumber())
+ .pipe(flatten())
+ // Remove release notes for lines not mentioning component
+ .pipe(replace(regExp.match.unrelatedNotes, regExp.replace.unrelatedNotes))
+ .pipe(replace(regExp.match.whitespace, regExp.replace.whitespace))
+ .pipe(replace(regExp.match.spacedVersions, regExp.replace.spacedVersions))
+ .pipe(replace(regExp.match.spacedLists, regExp.replace.spacedLists))
+ .pipe(replace(regExp.match.trim, regExp.replace.trim))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ // Creates meteor package.js
+ gulp.task(task.meteor, function() {
+ var
+ filenames = ''
+ ;
+ return gulp.src(manifest.component)
+ .pipe(concatFileNames('empty.txt', concatSettings))
+ .pipe(tap(function(file) {
+ filenames += file.contents;
+ }))
+ .on('end', function() {
+ gulp.src(manifest.assets)
+ .pipe(concatFileNames('empty.txt', concatSettings))
+ .pipe(tap(function(file) {
+ filenames += file.contents;
+ }))
+ .on('end', function() {
+ // remove trailing slash
+ filenames = filenames.replace(regExp.match.trailingComma, '').trim();
+ gulp.src(release.templates.meteor.component)
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(replace(regExp.match.name, regExp.replace.name))
+ .pipe(replace(regExp.match.titleName, regExp.replace.titleName))
+ .pipe(replace(regExp.match.version, version))
+ .pipe(replace(regExp.match.files, filenames))
+ .pipe(rename(release.files.meteor))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ })
+ ;
+ })
+ ;
+ });
+
+
+ // synchronous tasks in orchestrator? I think not
+ gulp.task(task.all, false, function(callback) {
+ runSequence([
+ task.repo,
+ task.npm,
+ task.bower,
+ task.readme,
+ task.package,
+ task.composer,
+ task.notes,
+ task.meteor
+ ], callback);
+ });
+
+ tasks.push(task.all);
+
+ })(component);
+ }
+
+ runSequence(tasks, callback);
+};
[46/48] incubator-senssoft-tap git commit: jquery switched
Posted by ar...@apache.org.
jquery switched
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/39ef6894
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/39ef6894
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/39ef6894
Branch: refs/heads/master
Commit: 39ef689479f210a53e35eb37ae4536699f4f248b
Parents: db97ec6
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Wed Jul 27 15:23:23 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Tue Oct 11 14:41:24 2016 -0400
----------------------------------------------------------------------
tap/templates/index.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/39ef6894/tap/templates/index.html
----------------------------------------------------------------------
diff --git a/tap/templates/index.html b/tap/templates/index.html
index f27ea2d..fc706b4 100644
--- a/tap/templates/index.html
+++ b/tap/templates/index.html
@@ -5,8 +5,8 @@
<title>Tap Home</title>
{% load staticfiles %}
<link rel="stylesheet" href="{% static "semantic.min.css" %}">
- <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> -->
- <script src="{% static "jquery-3.0.0.min.js" %}"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
+ <!-- <script src="{% static "jquery-3.0.0.min.js" %}"></script> -->
<script src="{% static "semantic.min.js" %}"></script>
<link href="{% static "styles.min.css" %}" rel="stylesheet">
</head>
[40/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/collections/menu.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/collections/menu.less b/semantic/src/definitions/collections/menu.less
new file mode 100755
index 0000000..3266135
--- /dev/null
+++ b/semantic/src/definitions/collections/menu.less
@@ -0,0 +1,1972 @@
+/*
+ * # Semantic - Menu
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Copyright 2015 Contributor
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'collection';
+@element : 'menu';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Standard
+*******************************/
+
+/*--------------
+ Menu
+---------------*/
+
+.ui.menu {
+ display: flex;
+ margin: @margin;
+ font-family: @fontFamily;
+ background: @background;
+ font-weight: @fontWeight;
+ border: @border;
+ box-shadow: @boxShadow;
+ border-radius: @borderRadius;
+ min-height: @minHeight;
+}
+
+.ui.menu:after {
+ content: '';
+ display: block;
+ height: 0px;
+ clear: both;
+ visibility: hidden;
+}
+
+.ui.menu:first-child {
+ margin-top: 0rem;
+}
+.ui.menu:last-child {
+ margin-bottom: 0rem;
+}
+
+
+/*--------------
+ Sub-Menu
+---------------*/
+
+.ui.menu .menu {
+ margin: 0em;
+}
+
+.ui.menu:not(.vertical) > .menu {
+ display: flex;
+}
+
+/*--------------
+ Item
+---------------*/
+
+.ui.menu:not(.vertical) .item {
+ display: flex;
+ align-items: center;
+}
+
+.ui.menu .item {
+ position: relative;
+ vertical-align: middle;
+ line-height: 1;
+ text-decoration: none;
+ -webkit-tap-highlight-color: transparent;
+ flex: 0 0 auto;
+ user-select: none;
+
+ background: @itemBackground;
+ padding: @itemVerticalPadding @itemHorizontalPadding;
+ text-transform: @itemTextTransform;
+ color: @itemTextColor;
+ font-weight: @itemFontWeight;
+ transition: @itemTransition;
+}
+
+.ui.menu > .item:first-child {
+ border-radius: @borderRadius 0px 0px @borderRadius;
+}
+
+/* Border */
+.ui.menu .item:before {
+ position: absolute;
+ content: '';
+ top: 0%;
+ right: 0px;
+ height: 100%;
+
+ width: @dividerSize;
+ background: @dividerBackground;
+}
+
+/*--------------
+ Text Content
+---------------*/
+
+.ui.menu .text.item > *,
+.ui.menu .item > a:not(.ui),
+.ui.menu .item > p:only-child {
+ user-select: text;
+ line-height: @textLineHeight;
+}
+.ui.menu .item > p:first-child {
+ margin-top: 0;
+}
+.ui.menu .item > p:last-child {
+ margin-bottom: 0;
+}
+
+/*--------------
+ Icons
+---------------*/
+
+.ui.menu .item > i.icon {
+ opacity: @iconOpacity;
+ float: @iconFloat;
+ margin: @iconMargin;
+}
+
+/*--------------
+ Button
+---------------*/
+
+.ui.menu:not(.vertical) .item > .button {
+ position: relative;
+ top: @buttonOffset;
+ margin: @buttonMargin;
+ padding-bottom: @buttonVerticalPadding;
+ padding-top: @buttonVerticalPadding;
+ font-size: @buttonSize;
+}
+
+/*----------------
+ Grid / Container
+-----------------*/
+
+.ui.menu > .grid,
+.ui.menu > .container {
+ display: flex;
+ align-items: inherit;
+ flex-direction: inherit;
+}
+
+/*--------------
+ Inputs
+---------------*/
+
+.ui.menu .item > .input {
+ width: 100%;
+}
+.ui.menu:not(.vertical) .item > .input {
+ position: relative;
+ top: @inputOffset;
+ margin: @inputVerticalMargin 0em;
+}
+.ui.menu .item > .input input {
+ font-size: @inputSize;
+ padding-top: @inputVerticalPadding;
+ padding-bottom: @inputVerticalPadding;
+}
+
+
+/*--------------
+ Header
+---------------*/
+
+.ui.menu .header.item,
+.ui.vertical.menu .header.item {
+ margin: 0em;
+ background: @headerBackground;
+ text-transform: @headerTextTransform;
+ font-weight: @headerWeight;
+}
+
+.ui.vertical.menu .item > .header:not(.ui) {
+ margin: @verticalHeaderMargin;
+ font-size: @verticalHeaderFontSize;
+ font-weight: @verticalHeaderFontWeight;
+}
+
+/*--------------
+ Popup
+---------------*/
+
+.ui.menu .ui.popup {
+ display: none;
+}
+.ui.menu .ui.visible.popup {
+ display: block;
+}
+
+
+/*--------------
+ Dropdowns
+---------------*/
+
+
+/* Dropdown Icon */
+.ui.menu .item > i.dropdown.icon {
+ padding: 0em;
+ float: @dropdownIconFloat;
+ margin: 0em 0em 0em @dropdownIconDistance;
+}
+
+/* Menu */
+.ui.menu .dropdown.item .menu {
+ left: 0px;
+ min-width: ~"calc(100% - 1px)";
+ border-radius: 0em 0em @dropdownMenuBorderRadius @dropdownMenuBorderRadius;
+ background: @dropdownBackground;
+ margin: @dropdownMenuDistance 0px 0px;
+ box-shadow: @dropdownMenuBoxShadow;
+ flex-direction: column !important;
+}
+
+
+/* Menu Items */
+.ui.menu .ui.dropdown .menu > .item {
+ margin: 0;
+ text-align: left;
+ font-size: @dropdownItemFontSize !important;
+ padding: @dropdownItemPadding !important;
+ background: @dropdownItemBackground !important;
+ color: @dropdownItemColor !important;
+ text-transform: @dropdownItemTextTransform !important;
+ font-weight: @dropdownItemFontWeight !important;
+ box-shadow: @dropdownItemBoxShadow !important;
+ transition: @dropdownItemTransition !important;
+}
+.ui.menu .ui.dropdown .menu > .item:hover {
+ background: @dropdownHoveredItemBackground !important;
+ color: @dropdownHoveredItemColor !important;
+}
+.ui.menu .ui.dropdown .menu > .selected.item {
+ background: @dropdownSelectedItemBackground !important;
+ color: @dropdownSelectedItemColor !important;
+}
+.ui.menu .ui.dropdown .menu > .active.item {
+ background: @dropdownActiveItemBackground !important;
+ font-weight: @dropdownActiveItemFontWeight !important;
+ color: @dropdownActiveItemColor !important;
+}
+
+.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {
+ display: block;
+}
+.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {
+ display: inline-block;
+ font-size: @dropdownItemIconFontSize !important;
+ float: @dropdownItemIconFloat;
+ margin: @dropdownItemIconMargin;
+}
+
+
+/* Secondary */
+.ui.secondary.menu .dropdown.item > .menu,
+.ui.text.menu .dropdown.item > .menu {
+ border-radius: @dropdownMenuBorderRadius;
+ margin-top: @secondaryDropdownMenuDistance;
+}
+
+/* Pointing */
+.ui.menu .pointing.dropdown.item .menu {
+ margin-top: @pointingDropdownMenuDistance;
+}
+
+/* Inverted */
+.ui.inverted.menu .search.dropdown.item > .search,
+.ui.inverted.menu .search.dropdown.item > .text {
+ color: @invertedSelectionDropdownColor;
+}
+
+/* Vertical */
+.ui.vertical.menu .dropdown.item > .icon {
+ float: right;
+ content: "\f0da";
+ margin-left: 1em;
+}
+.ui.vertical.menu .dropdown.item .menu {
+ top: 0% !important;
+ left: 100%;
+ min-width: 0;
+ margin: 0em 0em 0em @dropdownMenuDistance;
+ box-shadow: @dropdownVerticalMenuBoxShadow;
+ border-radius: 0em @dropdownMenuBorderRadius @dropdownMenuBorderRadius @dropdownMenuBorderRadius;
+}
+.ui.vertical.menu .active.dropdown.item {
+ border-top-right-radius: 0em;
+ border-bottom-right-radius: 0em;
+}
+.ui.vertical.menu .dropdown.active.item {
+ box-shadow: none;
+}
+
+/* Evenly Divided */
+.ui.item.menu .dropdown .menu .item {
+ width: 100%;
+}
+
+/*--------------
+ Labels
+---------------*/
+
+.ui.menu .item > .label {
+ background: @labelBackground;
+ color: @labelTextColor;
+ margin-left: @labelTextMargin;
+ padding: @labelVerticalPadding @labelHorizontalPadding;
+}
+.ui.vertical.menu .item > .label {
+ background: @labelBackground;
+ color: @labelTextColor;
+ margin-top: @labelOffset;
+ margin-bottom: @labelOffset;
+ padding: @labelVerticalPadding @labelHorizontalPadding;
+}
+.ui.menu .item > .floating.label {
+ padding: @labelVerticalPadding @labelHorizontalPadding;
+}
+
+/*--------------
+ Images
+---------------*/
+
+.ui.menu .item > img:not(.ui) {
+ display: inline-block;
+ vertical-align: middle;
+ margin: @imageMargin;
+ width: @imageWidth;
+}
+.ui.vertical.menu .item > img:not(.ui):only-child {
+ display: block;
+ max-width: 100%;
+ width: @verticalImageWidth;
+}
+
+/*******************************
+ Coupling
+*******************************/
+
+/*--------------
+ Sidebar
+---------------*/
+
+/* Show vertical dividers below last */
+
+.ui.vertical.sidebar.menu > .item:first-child:before {
+ display: block !important;
+}
+.ui.vertical.sidebar.menu > .item::before {
+ top: auto;
+ bottom: 0px;
+}
+
+/*--------------
+ Container
+---------------*/
+
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.menu > .ui.container {
+ width: 100% !important;
+ margin-left: 0em !important;
+ margin-right: 0em !important;
+ }
+}
+@media only screen and (min-width: @tabletBreakpoint) {
+ .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {
+ border-left: @dividerSize solid @dividerBackground;
+ }
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Hover
+---------------*/
+
+
+.ui.link.menu .item:hover,
+.ui.menu .dropdown.item:hover,
+.ui.menu .link.item:hover,
+.ui.menu a.item:hover {
+ cursor: pointer;
+ background: @hoverItemBackground;
+ color: @hoverItemTextColor;
+}
+
+
+/*--------------
+ Pressed
+---------------*/
+
+.ui.link.menu .item:active,
+.ui.menu .link.item:active,
+.ui.menu a.item:active {
+ background: @pressedItemBackground;
+ color: @pressedItemTextColor;
+}
+
+
+/*--------------
+ Active
+---------------*/
+
+.ui.menu .active.item {
+ background: @activeItemBackground;
+ color: @activeItemTextColor;
+ font-weight: @activeItemFontWeight;
+ box-shadow: @activeItemBoxShadow;
+}
+.ui.menu .active.item > i.icon {
+ opacity: @activeIconOpacity;
+}
+
+/*--------------
+ Active Hover
+---------------*/
+
+.ui.menu .active.item:hover,
+.ui.vertical.menu .active.item:hover {
+ background-color: @activeHoverItemBackground;
+ color: @activeHoverItemColor;
+}
+
+
+/*--------------
+ Disabled
+---------------*/
+
+.ui.menu .item.disabled,
+.ui.menu .item.disabled:hover {
+ cursor: default;
+ background-color: transparent !important;
+ color: @disabledTextColor;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+/*------------------
+Floated Menu / Item
+-------------------*/
+
+/* Left Floated */
+.ui.menu:not(.vertical) .left.item,
+.ui.menu:not(.vertical) .left.menu {
+ display: flex;
+ margin-right: auto !important;
+}
+/* Right Floated */
+.ui.menu:not(.vertical) .right.item,
+.ui.menu:not(.vertical) .right.menu {
+ display: flex;
+ margin-left: auto !important;
+}
+
+/* Swapped Borders */
+.ui.menu .right.item::before,
+.ui.menu .right.menu > .item::before {
+ right: auto;
+ left: 0;
+}
+
+
+/*--------------
+ Vertical
+---------------*/
+
+.ui.vertical.menu {
+ display: block;
+ flex-direction: column;
+ background: @verticalBackground;
+ box-shadow: @verticalBoxShadow;
+}
+
+/*--- Item ---*/
+.ui.vertical.menu .item {
+ display: block;
+ background: @verticalItemBackground;
+ border-top: none;
+ border-right: none;
+}
+.ui.vertical.menu > .item:first-child {
+ border-radius: @borderRadius @borderRadius 0px 0px;
+}
+.ui.vertical.menu > .item:last-child {
+ border-radius: 0px 0px @borderRadius @borderRadius;
+}
+
+/*--- Label ---*/
+.ui.vertical.menu .item > .label {
+ float: right;
+ text-align: center;
+}
+
+/*--- Icon ---*/
+.ui.vertical.menu .item > i.icon {
+ width: @iconWidth;
+ float: @verticalIconFloat;
+ margin: @verticalIconMargin;
+}
+.ui.vertical.menu .item > .label + i.icon {
+ float: @labelAndIconFloat;
+ margin: @labelAndIconMargin;
+}
+
+
+/*--- Border ---*/
+.ui.vertical.menu .item:before {
+ position: absolute;
+ content: '';
+ top: 0%;
+ left: 0px;
+ width: 100%;
+ height: @dividerSize;
+ background: @verticalDividerBackground;
+}
+
+.ui.vertical.menu .item:first-child:before {
+ display: none !important;
+}
+
+
+/*--- Sub Menu ---*/
+.ui.vertical.menu .item > .menu {
+ margin: @subMenuMargin;
+}
+.ui.vertical.menu .menu .item {
+ background: none;
+ padding: @subMenuVerticalPadding @subMenuHorizontalPadding;
+ font-size: @subMenuFontSize;
+ color: @subMenuTextColor;
+}
+.ui.vertical.menu .item .menu a.item:hover,
+.ui.vertical.menu .item .menu .link.item:hover {
+ color: @darkTextColor;
+}
+.ui.vertical.menu .menu .item:before {
+ display: none;
+}
+
+/* Vertical Active */
+.ui.vertical.menu .active.item {
+ background: @activeItemBackground;
+ border-radius: 0em;
+ box-shadow: @verticalActiveBoxShadow;
+}
+.ui.vertical.menu > .active.item:first-child {
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+.ui.vertical.menu > .active.item:last-child {
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+.ui.vertical.menu > .active.item:only-child {
+ border-radius: @borderRadius;
+}
+.ui.vertical.menu .active.item .menu .active.item {
+ border-left: none;
+}
+.ui.vertical.menu .item .menu .active.item {
+ background-color: @subMenuActiveBackground;
+ font-weight: @subMenuActiveFontWeight;
+ color: @subMenuActiveTextColor;
+}
+
+
+/*--------------
+ Tabular
+---------------*/
+
+.ui.tabular.menu {
+ border-radius: 0em;
+ box-shadow: none !important;
+ border: none;
+ background: @tabularBackground;
+ border-bottom: @tabularBorderWidth solid @tabularBorderColor;
+}
+.ui.tabular.fluid.menu {
+ width: @tabularFluidWidth !important;
+}
+.ui.tabular.menu .item {
+ background: transparent;
+ border-bottom: none;
+
+ border-left: @tabularBorderWidth solid transparent;
+ border-right: @tabularBorderWidth solid transparent;
+ border-top: @tabularOppositeBorderWidth solid transparent;
+ padding: @tabularVerticalPadding @tabularHorizontalPadding;
+ color: @tabularTextColor;
+}
+.ui.tabular.menu .item:before {
+ display: none;
+}
+
+/* Hover */
+.ui.tabular.menu .item:hover {
+ background-color: transparent;
+ color: @tabularHoveredTextColor;
+}
+
+/* Active */
+.ui.tabular.menu .active.item {
+ background: @tabularActiveBackground;
+ color: @tabularActiveColor;
+ border-top-width: @tabularBorderWidth;
+ border-color: @tabularBorderColor;
+ font-weight: @tabularActiveWeight;
+ margin-bottom: -@tabularBorderWidth;
+ box-shadow: @tabularActiveBoxShadow;
+ border-radius: @tabularBorderRadius @tabularBorderRadius 0px 0px !important;
+}
+
+/* Coupling with segment for attachment */
+.ui.tabular.menu + .attached:not(.top).segment,
+.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {
+ border-top: none;
+ margin-left: 0px;
+ margin-top: 0px;
+ margin-right: 0px;
+ width: 100%;
+}
+.top.attached.segment + .ui.bottom.tabular.menu {
+ position: relative;
+ width: @tabularFluidWidth;
+ left: -@tabularFluidOffset;
+}
+
+/* Bottom Vertical Tabular */
+.ui.bottom.tabular.menu {
+ background: @tabularBackground;
+ border-radius: 0em;
+ box-shadow: none !important;
+ border-bottom: none;
+ border-top: @tabularBorderWidth solid @tabularBorderColor;
+}
+.ui.bottom.tabular.menu .item {
+ background: none;
+ border-left: @tabularBorderWidth solid transparent;
+ border-right: @tabularBorderWidth solid transparent;
+ border-bottom: @tabularBorderWidth solid transparent;
+ border-top: none;
+}
+.ui.bottom.tabular.menu .active.item {
+ background: @tabularActiveBackground;
+ color: @tabularActiveColor;
+ border-color: @tabularBorderColor;
+ margin: -@tabularBorderWidth 0px 0px 0px;
+ border-radius: 0px 0px @tabularBorderRadius @tabularBorderRadius !important;
+}
+
+/* Vertical Tabular (Left) */
+.ui.vertical.tabular.menu {
+ background: @tabularVerticalBackground;
+ border-radius: 0em;
+ box-shadow: none !important;
+ border-bottom: none;
+ border-right: @tabularBorderWidth solid @tabularBorderColor;
+}
+.ui.vertical.tabular.menu .item {
+ background: none;
+ border-left: @tabularBorderWidth solid transparent;
+ border-bottom: @tabularBorderWidth solid transparent;
+ border-top: @tabularBorderWidth solid transparent;
+ border-right: none;
+}
+.ui.vertical.tabular.menu .active.item {
+ background: @tabularActiveBackground;
+ color: @tabularActiveColor;
+ border-color: @tabularBorderColor;
+ margin: 0px -@tabularBorderWidth 0px 0px;
+ border-radius: @tabularBorderRadius 0px 0px @tabularBorderRadius !important;
+}
+
+/* Vertical Right Tabular */
+.ui.vertical.right.tabular.menu {
+ background: @tabularVerticalBackground;
+ border-radius: 0em;
+ box-shadow: none !important;
+ border-bottom: none;
+ border-right: none;
+ border-left: @tabularBorderWidth solid @tabularBorderColor;
+}
+.ui.vertical.right.tabular.menu .item {
+ background: none;
+ border-right: @tabularBorderWidth solid transparent;
+ border-bottom: @tabularBorderWidth solid transparent;
+ border-top: @tabularBorderWidth solid transparent;
+ border-left: none;
+}
+.ui.vertical.right.tabular.menu .active.item {
+ background: @tabularActiveBackground;
+ color: @tabularActiveColor;
+ border-color: @tabularBorderColor;
+ margin: 0px 0px 0px -@tabularBorderWidth;
+ border-radius: 0px @tabularBorderRadius @tabularBorderRadius 0px !important;
+}
+
+/* Dropdown */
+.ui.tabular.menu .active.dropdown.item {
+ margin-bottom: 0px;
+ border-left: @tabularBorderWidth solid transparent;
+ border-right: @tabularBorderWidth solid transparent;
+ border-top: @tabularOppositeBorderWidth solid transparent;
+ border-bottom: none;
+}
+
+
+
+/*--------------
+ Pagination
+---------------*/
+
+.ui.pagination.menu {
+ margin: 0em;
+ display: inline-flex;
+ vertical-align: middle;
+}
+.ui.pagination.menu .item:last-child {
+ border-radius: 0em @borderRadius @borderRadius 0em;
+}
+.ui.compact.menu .item:last-child {
+ border-radius: 0em @borderRadius @borderRadius 0em;
+}
+.ui.pagination.menu .item:last-child:before {
+ display: none;
+}
+
+.ui.pagination.menu .item {
+ min-width: @paginationMinWidth;
+ text-align: center;
+}
+.ui.pagination.menu .icon.item i.icon {
+ vertical-align: top;
+}
+
+/* Active */
+.ui.pagination.menu .active.item {
+ border-top: none;
+ padding-top: @itemVerticalPadding;
+ background-color: @paginationActiveBackground;
+ color: @paginationActiveTextColor;
+ box-shadow: none;
+}
+
+/*--------------
+ Secondary
+---------------*/
+
+.ui.secondary.menu {
+ background: @secondaryBackground;
+ margin-left: -@secondaryItemSpacing;
+ margin-right: -@secondaryItemSpacing;
+ border-radius: 0em;
+ border: none;
+ box-shadow: none;
+}
+
+/* Item */
+.ui.secondary.menu .item {
+ align-self: center;
+ box-shadow: none;
+ border: none;
+ padding: @secondaryItemPadding;
+ margin: @secondaryItemMargin;
+ background: @secondaryItemBackground;
+ transition: @secondaryItemTransition;
+ border-radius: @secondaryItemBorderRadius;
+}
+
+/* No Divider */
+.ui.secondary.menu .item:before {
+ display: none !important;
+}
+
+/* Header */
+.ui.secondary.menu .header.item {
+ border-radius: 0em;
+ border-right: @secondaryHeaderBorder;
+ background: @secondaryHeaderBackground;
+}
+
+/* Image */
+.ui.secondary.menu .item > img:not(.ui) {
+ margin: 0em;
+}
+
+/* Hover */
+.ui.secondary.menu .dropdown.item:hover,
+.ui.secondary.menu .link.item:hover,
+.ui.secondary.menu a.item:hover {
+ background: @secondaryHoverItemBackground;
+ color: @secondaryHoverItemColor;
+}
+
+/* Active */
+.ui.secondary.menu .active.item {
+ box-shadow: none;
+ background: @secondaryActiveItemBackground;
+ color: @secondaryActiveItemColor;
+ border-radius: @secondaryItemBorderRadius;
+}
+
+/* Active Hover */
+.ui.secondary.menu .active.item:hover {
+ box-shadow: none;
+ background: @secondaryActiveHoverItemBackground;
+ color: @secondaryActiveHoverItemColor;
+}
+
+
+/* Inverted */
+.ui.secondary.inverted.menu .link.item,
+.ui.secondary.inverted.menu a.item {
+ color: @secondaryInvertedColor !important;
+}
+.ui.secondary.inverted.menu .dropdown.item:hover,
+.ui.secondary.inverted.menu .link.item:hover,
+.ui.secondary.inverted.menu a.item:hover {
+ background: @secondaryInvertedHoverBackground;
+ color: @secondaryInvertedHoverColor !important;
+}
+.ui.secondary.inverted.menu .active.item {
+ background: @secondaryInvertedActiveBackground;
+ color: @secondaryInvertedActiveColor !important;
+}
+
+/* Fix item margins */
+.ui.secondary.item.menu {
+ margin-left: 0em;
+ margin-right: 0em;
+}
+.ui.secondary.item.menu .item:last-child {
+ margin-right: 0em;
+}
+.ui.secondary.attached.menu {
+ box-shadow: none;
+}
+
+/* Sub Menu */
+.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {
+ margin: @secondaryMenuSubMenuMargin;
+}
+.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {
+ margin: @secondaryMenuSubMenuItemMargin;
+ padding: @secondaryMenuSubMenuItemPadding;
+}
+
+
+/*---------------------
+ Secondary Vertical
+-----------------------*/
+
+.ui.secondary.vertical.menu > .item {
+ border: none;
+ margin: @secondaryVerticalItemMargin;
+ border-radius: @secondaryVerticalItemBorderRadius !important;
+}
+.ui.secondary.vertical.menu > .header.item {
+ border-radius: 0em;
+}
+
+/* Sub Menu */
+.ui.vertical.secondary.menu .item > .menu .item {
+ background-color: transparent;
+}
+
+/* Inverted */
+.ui.secondary.inverted.menu {
+ background-color: transparent;
+}
+
+/*---------------------
+ Secondary Pointing
+-----------------------*/
+
+.ui.secondary.pointing.menu {
+ margin-left: 0em;
+ margin-right: 0em;
+ border-bottom: @secondaryPointingBorderWidth solid @secondaryPointingBorderColor;
+}
+
+.ui.secondary.pointing.menu .item {
+ border-bottom-color: transparent;
+ border-bottom-style: solid;
+ border-radius: 0em;
+ align-self: flex-end;
+
+ margin: 0em 0em -@secondaryPointingBorderWidth;
+ padding: @secondaryPointingItemVerticalPadding @secondaryPointingItemHorizontalPadding;
+ border-bottom-width: @secondaryPointingBorderWidth;
+ transition: @secondaryItemTransition;
+}
+
+/* Item Types */
+.ui.secondary.pointing.menu .header.item {
+ color: @secondaryPointingHeaderColor !important;
+}
+.ui.secondary.pointing.menu .text.item {
+ box-shadow: none !important;
+}
+.ui.secondary.pointing.menu .item:after {
+ display: none;
+}
+
+/* Hover */
+.ui.secondary.pointing.menu .dropdown.item:hover,
+.ui.secondary.pointing.menu .link.item:hover,
+.ui.secondary.pointing.menu a.item:hover {
+ background-color: transparent;
+ color: @secondaryPointingHoverTextColor;
+}
+
+/* Pressed */
+.ui.secondary.pointing.menu .dropdown.item:active,
+.ui.secondary.pointing.menu .link.item:active,
+.ui.secondary.pointing.menu a.item:active {
+ background-color: transparent;
+ border-color: @secondaryPointingBorderColor;
+}
+
+/* Active */
+.ui.secondary.pointing.menu .active.item {
+ background-color: transparent;
+ box-shadow: none;
+ border-color: @secondaryPointingActiveBorderColor;
+ font-weight: @secondaryPointingActiveFontWeight;
+ color: @secondaryPointingActiveTextColor;
+}
+
+/* Active Hover */
+.ui.secondary.pointing.menu .active.item:hover {
+ border-color: @secondaryPointingActiveHoverBorderColor;
+ color: @secondaryPointingActiveHoverTextColor;
+}
+
+/* Active Dropdown */
+.ui.secondary.pointing.menu .active.dropdown.item {
+ border-color: @secondaryPointingActiveDropdownBorderColor;
+}
+
+/* Vertical Pointing */
+.ui.secondary.vertical.pointing.menu {
+ border-bottom-width: 0px;
+ border-right-width: @secondaryPointingBorderWidth;
+ border-right-style: solid;
+ border-right-color: @secondaryPointingBorderColor;
+}
+.ui.secondary.vertical.pointing.menu .item {
+ border-bottom: none;
+ border-right-style: solid;
+ border-right-color: transparent;
+ border-radius: 0em !important;
+ margin: @secondaryVerticalPointingItemMargin;
+ border-right-width: @secondaryPointingBorderWidth;
+}
+
+/* Vertical Active */
+.ui.secondary.vertical.pointing.menu .active.item {
+ border-color: @secondaryPointingActiveBorderColor;
+}
+
+/* Inverted */
+.ui.secondary.inverted.pointing.menu {
+ border-color: @secondaryPointingInvertedBorderColor;
+}
+
+.ui.secondary.inverted.pointing.menu {
+ border-width: @secondaryPointingBorderWidth;
+ border-color: @secondaryPointingBorderColor;
+}
+.ui.secondary.inverted.pointing.menu .item {
+ color: @secondaryPointingInvertedItemTextColor;
+}
+.ui.secondary.inverted.pointing.menu .header.item {
+ color: @secondaryPointingInvertedItemHeaderColor !important;
+}
+
+/* Hover */
+.ui.secondary.inverted.pointing.menu .link.item:hover,
+.ui.secondary.inverted.pointing.menu a.item:hover {
+ color: @secondaryPointingInvertedItemHoverTextColor;
+}
+
+
+/* Active */
+.ui.secondary.inverted.pointing.menu .active.item {
+ border-color: @secondaryPointingInvertedActiveBorderColor;
+ color: @secondaryPointingInvertedActiveColor;
+}
+
+/*--------------
+ Text Menu
+---------------*/
+
+.ui.text.menu {
+ background: none transparent;
+ border-radius: 0px;
+ box-shadow: none;
+ border: none;
+
+ margin: @textMenuMargin;
+}
+.ui.text.menu .item {
+ border-radius: 0px;
+ box-shadow: none;
+ align-self: center;
+ margin: @textMenuItemMargin;
+ padding: @textMenuItemPadding;
+ font-weight: @textMenuItemFontWeight;
+ color: @textMenuItemColor;
+ transition: @textMenuItemTransition;
+}
+
+/* Border */
+.ui.text.menu .item:before,
+.ui.text.menu .menu .item:before {
+ display: none !important;
+}
+
+/* Header */
+.ui.text.menu .header.item {
+ background-color: transparent;
+ opacity: 1;
+ color: @textMenuHeaderColor;
+ font-size: @textMenuHeaderSize;
+ text-transform: @textMenuHeaderTextTransform;
+ font-weight: @textMenuHeaderFontWeight;
+}
+
+/* Image */
+.ui.text.menu .item > img:not(.ui) {
+ margin: 0em;
+}
+
+/*--- fluid text ---*/
+.ui.text.item.menu .item {
+ margin: 0em;
+}
+
+/*--- vertical text ---*/
+.ui.vertical.text.menu {
+ margin: @textVerticalMenuMargin;
+}
+.ui.vertical.text.menu:first-child {
+ margin-top: 0rem;
+}
+.ui.vertical.text.menu:last-child {
+ margin-bottom: 0rem;
+}
+.ui.vertical.text.menu .item {
+ margin: @textVerticalMenuItemMargin;
+ padding-left: 0em;
+ padding-right: 0em;
+}
+.ui.vertical.text.menu .item > i.icon {
+ float: @textVerticalMenuIconFloat;
+ margin: @iconMargin;
+}
+.ui.vertical.text.menu .header.item {
+ margin: @textVerticalMenuHeaderMargin;
+}
+
+/* Vertical Sub Menu */
+.ui.vertical.text.menu .item:not(.dropdown) > .menu {
+ margin: @textMenuSubMenuMargin;
+}
+.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {
+ margin: @textMenuSubMenuItemMargin;
+ padding: @textMenuSubMenuItemPadding;
+}
+
+/*--- hover ---*/
+.ui.text.menu .item:hover {
+ opacity: 1;
+ background-color: transparent;
+}
+
+/*--- active ---*/
+.ui.text.menu .active.item {
+ background-color: transparent;
+ border: none;
+ box-shadow: none;
+ font-weight: @textMenuActiveItemFontWeight;
+ color: @textMenuActiveItemColor;
+}
+
+/*--- active hover ---*/
+.ui.text.menu .active.item:hover {
+ background-color: transparent;
+}
+
+/* Disable Bariations */
+.ui.text.pointing.menu .active.item:after {
+ box-shadow: none;
+}
+.ui.text.attached.menu {
+ box-shadow: none;
+}
+
+/* Inverted */
+.ui.inverted.text.menu,
+.ui.inverted.text.menu .item,
+.ui.inverted.text.menu .item:hover,
+.ui.inverted.text.menu .active.item {
+ background-color: transparent !important;
+}
+
+/* Fluid */
+.ui.fluid.text.menu {
+ margin-left: 0em;
+ margin-right: 0em;
+}
+
+/*--------------
+ Icon Only
+---------------*/
+
+/* Vertical Menu */
+.ui.vertical.icon.menu {
+ display: inline-block;
+ width: auto;
+}
+
+/* Item */
+.ui.icon.menu .item {
+ height: auto;
+ text-align: @iconMenuTextAlign;
+ color: @iconMenuItemColor;
+}
+
+/* Icon */
+.ui.icon.menu .item > .icon:not(.dropdown) {
+ margin: 0;
+ opacity: 1;
+}
+
+/* Icon Gylph */
+.ui.icon.menu .icon:before {
+ opacity: 1;
+}
+
+/* (x) Item Icon */
+.ui.menu .icon.item > .icon {
+ width: auto;
+ margin: 0em auto;
+}
+
+/* Vertical Icon */
+.ui.vertical.icon.menu .item > .icon:not(.dropdown) {
+ display: block;
+ opacity: 1;
+ margin: 0em auto;
+ float: none;
+}
+
+/* Inverted */
+.ui.inverted.icon.menu .item {
+ color: @iconMenuInvertedItemColor;
+}
+
+/*--------------
+ Labeled Icon
+---------------*/
+
+/* Menu */
+.ui.labeled.icon.menu {
+ text-align: center;
+}
+
+/* Item */
+.ui.labeled.icon.menu .item {
+ min-width: @labeledIconMinWidth;
+ flex-direction: column;
+}
+
+/* Icon */
+.ui.labeled.icon.menu .item > .icon:not(.dropdown) {
+ height: 1em;
+ display: block;
+ font-size: @labeledIconSize !important;
+ margin: 0em auto @labeledIconTextMargin !important;
+}
+
+/* Fluid */
+.ui.fluid.labeled.icon.menu > .item {
+ min-width: 0em;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Stackable
+---------------*/
+
+@media only screen and (max-width: @largestMobileScreen) {
+ .ui.stackable.menu {
+ flex-direction: column;
+ }
+ .ui.stackable.menu .item {
+ width: 100% !important;
+ }
+ .ui.stackable.menu .item:before {
+ position: absolute;
+ content: '';
+ top: auto;
+ bottom: 0px;
+ left: 0px;
+ width: 100%;
+ height: @dividerSize;
+ background: @verticalDividerBackground;
+ }
+
+ .ui.stackable.menu .left.menu,
+ .ui.stackable.menu .left.item {
+ margin-right: 0 !important;
+ }
+ .ui.stackable.menu .right.menu,
+ .ui.stackable.menu .right.item {
+ margin-left: 0 !important;
+ }
+}
+
+/*--------------
+ Colors
+---------------*/
+
+/*--- Standard Colors ---*/
+.ui.menu .red.active.item,
+.ui.red.menu .active.item {
+ border-color: @red !important;
+ color: @red !important;
+}
+.ui.menu .orange.active.item,
+.ui.orange.menu .active.item {
+ border-color: @orange !important;
+ color: @orange !important;
+}
+.ui.menu .yellow.active.item,
+.ui.yellow.menu .active.item {
+ border-color: @yellow !important;
+ color: @yellow !important;
+}
+.ui.menu .olive.active.item,
+.ui.olive.menu .active.item {
+ border-color: @olive !important;
+ color: @olive !important;
+}
+.ui.menu .green.active.item,
+.ui.green.menu .active.item {
+ border-color: @green !important;
+ color: @green !important;
+}
+.ui.menu .teal.active.item,
+.ui.teal.menu .active.item {
+ border-color: @teal !important;
+ color: @teal !important;
+}
+.ui.menu .blue.active.item,
+.ui.blue.menu .active.item {
+ border-color: @blue !important;
+ color: @blue !important;
+}
+.ui.menu .violet.active.item,
+.ui.violet.menu .active.item {
+ border-color: @violet !important;
+ color: @violet !important;
+}
+.ui.menu .purple.active.item,
+.ui.purple.menu .active.item {
+ border-color: @purple !important;
+ color: @purple !important;
+}
+.ui.menu .pink.active.item,
+.ui.pink.menu .active.item {
+ border-color: @pink !important;
+ color: @pink !important;
+}
+.ui.menu .brown.active.item,
+.ui.brown.menu .active.item {
+ border-color: @brown !important;
+ color: @brown !important;
+}
+.ui.menu .grey.active.item,
+.ui.grey.menu .active.item {
+ border-color: @grey !important;
+ color: @grey !important;
+}
+
+
+/*--------------
+ Inverted
+---------------*/
+
+.ui.inverted.menu {
+ border: @invertedBorder;
+ background: @invertedBackground;
+ box-shadow: @invertedBoxShadow;
+}
+
+/* Menu Item */
+.ui.inverted.menu .item,
+.ui.inverted.menu .item > a:not(.ui) {
+ background: @invertedItemBackground;
+ color: @invertedItemTextColor;
+}
+.ui.inverted.menu .item.menu {
+ background: @invertedSubMenuBackground;
+}
+
+/*--- Border ---*/
+.ui.inverted.menu .item:before {
+ background: @invertedDividerBackground;
+}
+.ui.vertical.inverted.menu .item:before {
+ background: @invertedVerticalDividerBackground;
+}
+
+/* Sub Menu */
+.ui.vertical.inverted.menu .menu .item,
+.ui.vertical.inverted.menu .menu .item a:not(.ui) {
+ color: @invertedSubMenuColor;
+}
+
+/* Header */
+.ui.inverted.menu .header.item {
+ margin: 0em;
+ background: @invertedHeaderBackground;
+ box-shadow: none;
+}
+
+/* Disabled */
+.ui.inverted.menu .item.disabled,
+.ui.inverted.menu .item.disabled:hover {
+ color: @invertedDisabledTextColor;
+}
+
+/*--- Hover ---*/
+.ui.link.inverted.menu .item:hover,
+.ui.inverted.menu .dropdown.item:hover,
+.ui.inverted.menu .link.item:hover,
+.ui.inverted.menu a.item:hover {
+ background: @invertedHoverBackground;
+ color: @invertedHoverColor;
+}
+.ui.vertical.inverted.menu .item .menu a.item:hover,
+.ui.vertical.inverted.menu .item .menu .link.item:hover {
+ background: @invertedSubMenuBackground;
+ color: @invertedSubMenuHoverColor;
+}
+
+/*--- Pressed ---*/
+.ui.inverted.menu a.item:active,
+.ui.inverted.menu .link.item:active{
+ background: @invertedMenuPressedBackground;
+ color: @invertedMenuPressedColor;
+}
+
+/*--- Active ---*/
+.ui.inverted.menu .active.item {
+ background: @invertedActiveBackground;
+ color: @invertedActiveColor !important;
+}
+.ui.inverted.vertical.menu .item .menu .active.item {
+ background: @invertedSubMenuActiveBackground;
+ color: @invertedSubMenuActiveColor;
+}
+.ui.inverted.pointing.menu .active.item:after {
+ background: @invertedArrowActiveColor !important;
+ margin: 0em !important;
+ box-shadow: none !important;
+ border: none !important;
+}
+
+/*--- Active Hover ---*/
+.ui.inverted.menu .active.item:hover {
+ background: @invertedActiveHoverBackground;
+ color: @invertedActiveHoverColor !important;
+}
+.ui.inverted.pointing.menu .active.item:hover:after {
+ background: @invertedArrowActiveHoverColor !important;
+}
+
+
+/*--------------
+ Floated
+---------------*/
+
+.ui.floated.menu {
+ float: left;
+ margin: 0rem @floatedDistance 0rem 0rem;
+}
+.ui.floated.menu .item:last-child:before {
+ display: none;
+}
+
+.ui.right.floated.menu {
+ float: right;
+ margin: 0rem 0rem 0rem @floatedDistance;
+}
+
+
+/*--------------
+ Inverted
+---------------*/
+
+/* Red */
+.ui.inverted.menu .red.active.item,
+.ui.inverted.red.menu {
+ background-color: @red;
+}
+.ui.inverted.red.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.red.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Orange */
+.ui.inverted.menu .orange.active.item,
+.ui.inverted.orange.menu {
+ background-color: @orange;
+}
+.ui.inverted.orange.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.orange.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Yellow */
+.ui.inverted.menu .yellow.active.item,
+.ui.inverted.yellow.menu {
+ background-color: @yellow;
+}
+.ui.inverted.yellow.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.yellow.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Olive */
+.ui.inverted.menu .olive.active.item,
+.ui.inverted.olive.menu {
+ background-color: @olive;
+}
+.ui.inverted.olive.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.olive.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Green */
+.ui.inverted.menu .green.active.item,
+.ui.inverted.green.menu {
+ background-color: @green;
+}
+.ui.inverted.green.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.green.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Teal */
+.ui.inverted.menu .teal.active.item,
+.ui.inverted.teal.menu {
+ background-color: @teal;
+}
+.ui.inverted.teal.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.teal.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Blue */
+.ui.inverted.menu .blue.active.item,
+.ui.inverted.blue.menu {
+ background-color: @blue;
+}
+.ui.inverted.blue.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.blue.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Violet */
+.ui.inverted.menu .violet.active.item,
+.ui.inverted.violet.menu {
+ background-color: @violet;
+}
+.ui.inverted.violet.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.violet.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Purple */
+.ui.inverted.menu .purple.active.item,
+.ui.inverted.purple.menu {
+ background-color: @purple;
+}
+.ui.inverted.purple.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.purple.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Pink */
+.ui.inverted.menu .pink.active.item,
+.ui.inverted.pink.menu {
+ background-color: @pink;
+}
+.ui.inverted.pink.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.pink.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Brown */
+.ui.inverted.menu .brown.active.item,
+.ui.inverted.brown.menu {
+ background-color: @brown;
+}
+.ui.inverted.brown.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.brown.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+/* Grey */
+.ui.inverted.menu .grey.active.item,
+.ui.inverted.grey.menu {
+ background-color: @grey;
+}
+.ui.inverted.grey.menu .item:before {
+ background-color: @invertedColoredDividerBackground;
+}
+.ui.inverted.grey.menu .active.item {
+ background-color: @invertedColoredActiveBackground !important;
+}
+
+
+/*--------------
+ Fitted
+---------------*/
+
+.ui.fitted.menu .item,
+.ui.fitted.menu .item .menu .item,
+.ui.menu .fitted.item {
+ padding: 0em;
+}
+.ui.horizontally.fitted.menu .item,
+.ui.horizontally.fitted.menu .item .menu .item,
+.ui.menu .horizontally.fitted.item {
+ padding-top: @itemVerticalPadding;
+ padding-bottom: @itemVerticalPadding;
+}
+.ui.vertically.fitted.menu .item,
+.ui.vertically.fitted.menu .item .menu .item,
+.ui.menu .vertically.fitted.item {
+ padding-left: @itemHorizontalPadding;
+ padding-right: @itemHorizontalPadding;
+}
+
+/*--------------
+ Borderless
+---------------*/
+
+.ui.borderless.menu .item:before,
+.ui.borderless.menu .item .menu .item:before,
+.ui.menu .borderless.item:before {
+ background: none !important;
+}
+
+/*-------------------
+ Compact
+--------------------*/
+
+.ui.compact.menu {
+ display: inline-flex;
+ margin: 0em;
+ vertical-align: middle;
+}
+.ui.compact.vertical.menu {
+ display: inline-block;
+}
+.ui.compact.menu .item:last-child {
+ border-radius: 0em @borderRadius @borderRadius 0em;
+}
+.ui.compact.menu .item:last-child:before {
+ display: none;
+}
+.ui.compact.vertical.menu {
+ width: auto !important;
+}
+.ui.compact.vertical.menu .item:last-child::before {
+ display: block;
+}
+
+/*-------------------
+ Fluid
+--------------------*/
+
+.ui.menu.fluid,
+.ui.vertical.menu.fluid {
+ width: 100% !important;
+}
+
+
+/*-------------------
+ Evenly Sized
+--------------------*/
+
+.ui.item.menu,
+.ui.item.menu .item {
+ width: 100%;
+ padding-left: 0em !important;
+ padding-right: 0em !important;
+ margin-left: 0em !important;
+ margin-right: 0em !important;
+ text-align: center;
+ justify-content: center;
+}
+
+.ui.item.menu .item:last-child:before {
+ display: none;
+}
+
+.ui.menu.two.item .item {
+ width: 50%;
+}
+.ui.menu.three.item .item {
+ width: 33.333%;
+}
+.ui.menu.four.item .item {
+ width: 25%;
+}
+.ui.menu.five.item .item {
+ width: 20%;
+}
+.ui.menu.six.item .item {
+ width: 16.666%;
+}
+.ui.menu.seven.item .item {
+ width: 14.285%;
+}
+.ui.menu.eight.item .item {
+ width: 12.500%;
+}
+.ui.menu.nine.item .item {
+ width: 11.11%;
+}
+.ui.menu.ten.item .item {
+ width: 10.0%;
+}
+.ui.menu.eleven.item .item {
+ width: 9.09%;
+}
+.ui.menu.twelve.item .item {
+ width: 8.333%;
+}
+
+/*--------------
+ Fixed
+---------------*/
+
+.ui.menu.fixed {
+ position: fixed;
+ z-index: 101;
+ margin: 0em;
+ width: 100%;
+}
+.ui.menu.fixed,
+.ui.menu.fixed .item:first-child,
+.ui.menu.fixed .item:last-child {
+ border-radius: 0px !important;
+}
+
+.ui.fixed.menu,
+.ui[class*="top fixed"].menu {
+ top: 0px;
+ left: 0px;
+ right: auto;
+ bottom: auto;
+}
+.ui[class*="top fixed"].menu {
+ border-top: none;
+ border-left: none;
+ border-right: none;
+}
+.ui[class*="right fixed"].menu {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+ top: 0px;
+ right: 0px;
+ left: auto;
+ bottom: auto;
+ width: auto;
+ height: 100%;
+}
+.ui[class*="bottom fixed"].menu {
+ border-bottom: none;
+ border-left: none;
+ border-right: none;
+ bottom: 0px;
+ left: 0px;
+ top: auto;
+ right: auto;
+}
+.ui[class*="left fixed"].menu {
+ border-top: none;
+ border-bottom: none;
+ border-left: none;
+ top: 0px;
+ left: 0px;
+ right: auto;
+ bottom: auto;
+ width: auto;
+ height: 100%;
+}
+
+/* Coupling with Grid */
+.ui.fixed.menu + .ui.grid {
+ padding-top: @fixedPrecedingGridMargin;
+}
+
+
+/*-------------------
+ Pointing
+--------------------*/
+
+.ui.pointing.menu .item:after {
+ visibility: hidden;
+ position: absolute;
+ content: '';
+ top: 100%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ background: none;
+
+ margin: (@arrowBorderWidth / 2) 0em 0em;
+ width: @arrowSize;
+ height: @arrowSize;
+
+ border: none;
+ border-bottom: @arrowBorder;
+ border-right: @arrowBorder;
+
+ z-index: @arrowZIndex;
+ transition: @arrowTransition;
+}
+.ui.vertical.pointing.menu .item:after {
+ position: absolute;
+ top: 50%;
+ right: 0%;
+ bottom: auto;
+ left: auto;
+
+ transform: translateX(50%) translateY(-50%) rotate(45deg);
+ margin: 0em -(@arrowBorderWidth / 2) 0em 0em;
+
+ border: none;
+ border-top: @arrowBorder;
+ border-right: @arrowBorder;
+}
+
+/* Active */
+.ui.pointing.menu .active.item:after {
+ visibility: visible;
+}
+.ui.pointing.menu .active.dropdown.item:after {
+ visibility: hidden;
+}
+
+/* Don't double up pointers */
+.ui.pointing.menu .dropdown.active.item:after,
+.ui.pointing.menu .active.item .menu .active.item:after {
+ display: none;
+}
+
+/* Colors */
+.ui.pointing.menu .active.item:hover:after {
+ background-color: @arrowHoverColor;
+}
+.ui.pointing.menu .active.item:after {
+ background-color: @arrowActiveColor;
+}
+.ui.pointing.menu .active.item:hover:after {
+ background-color: @arrowActiveHoverColor;
+}
+
+.ui.vertical.pointing.menu .active.item:hover:after {
+ background-color: @arrowVerticalHoverColor;
+}
+.ui.vertical.pointing.menu .active.item:after {
+ background-color: @arrowVerticalActiveColor;
+}
+.ui.vertical.pointing.menu .menu .active.item:after {
+ background-color: @arrowVerticalSubMenuColor;
+}
+
+
+
+/*--------------
+ Attached
+---------------*/
+
+/* Middle */
+.ui.attached.menu {
+ top: 0px;
+ bottom: 0px;
+ border-radius: 0px;
+ margin: 0em @attachedHorizontalOffset;
+ width: @attachedWidth;
+ max-width: @attachedWidth;
+ box-shadow: @attachedBoxShadow;
+}
+.ui.attached + .ui.attached.menu:not(.top) {
+ border-top: none;
+}
+
+/* Top */
+.ui[class*="top attached"].menu {
+ bottom: 0px;
+ margin-bottom: 0em;
+ top: @attachedTopOffset;
+ margin-top: @verticalMargin;
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+.ui.menu[class*="top attached"]:first-child {
+ margin-top: 0em;
+}
+
+/* Bottom */
+.ui[class*="bottom attached"].menu {
+ bottom: 0px;
+ margin-top: 0em;
+ top: @attachedBottomOffset;
+ margin-bottom: @verticalMargin;
+ box-shadow: @attachedBottomBoxShadow;
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+.ui[class*="bottom attached"].menu:last-child {
+ margin-bottom: 0em;
+}
+
+/* Attached Menu Item */
+.ui.top.attached.menu > .item:first-child {
+ border-radius: @borderRadius 0em 0em 0em;
+}
+.ui.bottom.attached.menu > .item:first-child {
+ border-radius: 0em 0em 0em @borderRadius;
+}
+
+/* Tabular Attached */
+.ui.attached.menu:not(.tabular) {
+ border: @attachedBorder;
+}
+.ui.attached.inverted.menu {
+ border: none;
+}
+.ui.attached.tabular.menu {
+ margin-left: 0;
+ margin-right: 0;
+ width: 100%;
+}
+
+/*--------------
+ Sizes
+---------------*/
+
+/* Mini */
+.ui.mini.menu {
+ font-size: @mini;
+}
+.ui.mini.vertical.menu {
+ width: @miniWidth;
+}
+
+/* Tiny */
+.ui.tiny.menu {
+ font-size: @tiny;
+}
+.ui.tiny.vertical.menu {
+ width: @tinyWidth;
+}
+
+/* Small */
+.ui.small.menu {
+ font-size: @small;
+}
+.ui.small.vertical.menu {
+ width: @smallWidth;
+}
+
+/* Medium */
+.ui.menu {
+ font-size: @medium;
+}
+.ui.vertical.menu {
+ width: @mediumWidth;
+}
+
+/* Large */
+.ui.large.menu {
+ font-size: @large;
+}
+.ui.large.vertical.menu {
+ width: @largeWidth;
+}
+
+/* Huge */
+.ui.huge.menu {
+ font-size: @huge;
+}
+.ui.huge.vertical.menu {
+ width: @hugeWidth;
+}
+
+/* Big */
+.ui.big.menu {
+ font-size: @big;
+}
+.ui.big.vertical.menu {
+ width: @bigWidth;
+}
+
+/* Massive */
+.ui.massive.menu {
+ font-size: @massive;
+}
+.ui.massive.vertical.menu {
+ width: @massiveWidth;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/collections/message.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/collections/message.less b/semantic/src/definitions/collections/message.less
new file mode 100755
index 0000000..5de262f
--- /dev/null
+++ b/semantic/src/definitions/collections/message.less
@@ -0,0 +1,478 @@
+/*!
+ * # Semantic UI - Message
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'collection';
+@element : 'message';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Message
+*******************************/
+
+.ui.message {
+ position: relative;
+ min-height: 1em;
+ margin: @verticalMargin 0em;
+ background: @background;
+ padding: @verticalPadding @horizontalPadding;
+ line-height: @lineHeight;
+ color: @textColor;
+ transition: @transition;
+ border-radius: @borderRadius;
+ box-shadow: @boxShadow;
+}
+
+.ui.message:first-child {
+ margin-top: 0em;
+}
+.ui.message:last-child {
+ margin-bottom: 0em;
+}
+
+
+/*--------------
+ Content
+---------------*/
+
+/* Header */
+.ui.message .header {
+ display: @headerDisplay;
+ font-family: @headerFont;
+ font-weight: @headerFontWeight;
+ margin: @headerMargin;
+}
+
+/* Default font size */
+.ui.message .header:not(.ui) {
+ font-size: @headerFontSize;
+}
+
+/* Paragraph */
+.ui.message p {
+ opacity: @messageTextOpacity;
+ margin: @messageParagraphMargin 0em;
+}
+.ui.message p:first-child {
+ margin-top: 0em;
+}
+.ui.message p:last-child {
+ margin-bottom: 0em;
+}
+.ui.message .header + p {
+ margin-top: @headerParagraphDistance;
+}
+
+/* List */
+.ui.message .list:not(.ui) {
+ text-align: left;
+ padding: 0em;
+ opacity: @listOpacity;
+ list-style-position: @listStylePosition;
+ margin: @listMargin 0em 0em;
+}
+.ui.message .list:not(.ui):first-child {
+ margin-top: 0em;
+}
+.ui.message .list:not(.ui):last-child {
+ margin-bottom: 0em;
+}
+.ui.message .list:not(.ui) li {
+ position: relative;
+ list-style-type: none;
+ margin: 0em 0em @listItemMargin @listItemIndent;
+ padding: 0em;
+}
+.ui.message .list:not(.ui) li:before {
+ position: absolute;
+ content: '\u2022';
+ left: -1em;
+ height: 100%;
+ vertical-align: baseline;
+}
+.ui.message .list:not(.ui) li:last-child {
+ margin-bottom: 0em;
+}
+
+
+/* Icon */
+.ui.message > .icon {
+ margin-right: @iconDistance;
+}
+
+/* Close Icon */
+.ui.message > .close.icon {
+ cursor: pointer;
+ position: absolute;
+ margin: 0em;
+ top: @closeTopDistance;
+ right: @closeRightDistance;
+ opacity: @closeOpacity;
+ transition: @closeTransition;
+}
+.ui.message > .close.icon:hover {
+ opacity: 1;
+}
+
+/* First / Last Element */
+.ui.message > :first-child {
+ margin-top: 0em;
+}
+.ui.message > :last-child {
+ margin-bottom: 0em;
+}
+
+/*******************************
+ Coupling
+*******************************/
+
+.ui.dropdown .menu > .message {
+ margin: 0px -@borderWidth;
+}
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Visible
+---------------*/
+
+.ui.visible.visible.visible.visible.message {
+ display: block;
+}
+
+.ui.icon.visible.visible.visible.visible.message {
+ display: flex;
+}
+
+/*--------------
+ Hidden
+---------------*/
+
+.ui.hidden.hidden.hidden.hidden.message {
+ display: none;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Compact
+---------------*/
+
+.ui.compact.message {
+ display: inline-block;
+}
+
+
+/*--------------
+ Attached
+---------------*/
+
+.ui.attached.message {
+ margin-bottom: @attachedYOffset;
+ border-radius: @borderRadius @borderRadius 0em 0em;
+ box-shadow: @attachedBoxShadow;
+ margin-left: @attachedXOffset;
+ margin-right: @attachedXOffset;
+}
+.ui.attached + .ui.attached.message:not(.top):not(.bottom) {
+ margin-top: @attachedYOffset;
+ border-radius: 0em;
+}
+.ui.bottom.attached.message {
+ margin-top: @attachedYOffset;
+ border-radius: 0em 0em @borderRadius @borderRadius;
+ box-shadow: @attachedBottomBoxShadow;
+}
+.ui.bottom.attached.message:not(:last-child) {
+ margin-bottom: @verticalMargin;
+}
+.ui.attached.icon.message {
+ width: auto;
+}
+
+
+/*--------------
+ Icon
+---------------*/
+
+.ui.icon.message {
+ display: flex;
+ width: 100%;
+ align-items: center;
+}
+.ui.icon.message > .icon:not(.close) {
+ display: block;
+ flex: 0 0 auto;
+ width: auto;
+ line-height: 1;
+ vertical-align: @iconVerticalAlign;
+ font-size: @iconSize;
+ opacity: @iconOpacity;
+}
+.ui.icon.message > .content {
+ display: block;
+ flex: 1 1 auto;
+ vertical-align: @iconVerticalAlign;
+}
+
+
+.ui.icon.message .icon:not(.close) + .content {
+ padding-left: @iconContentDistance;
+}
+.ui.icon.message .circular.icon {
+ width: 1em;
+}
+
+/*--------------
+ Floating
+---------------*/
+
+.ui.floating.message {
+ box-shadow: @floatingBoxShadow;
+}
+
+
+/*--------------
+ Colors
+---------------*/
+
+.ui.black.message {
+ background-color: @black;
+ color: @invertedTextColor;
+}
+
+/*--------------
+ Types
+---------------*/
+
+/* Positive */
+.ui.positive.message {
+ background-color: @positiveBackgroundColor;
+ color: @positiveTextColor;
+}
+.ui.positive.message,
+.ui.attached.positive.message {
+ box-shadow: @positiveBoxShadow;
+}
+.ui.positive.message .header {
+ color: @positiveHeaderColor;
+}
+
+/* Negative */
+.ui.negative.message {
+ background-color: @negativeBackgroundColor;
+ color: @negativeTextColor;
+}
+.ui.negative.message,
+.ui.attached.negative.message {
+ box-shadow: @negativeBoxShadow;
+}
+.ui.negative.message .header {
+ color: @negativeHeaderColor;
+}
+
+/* Info */
+.ui.info.message {
+ background-color: @infoBackgroundColor;
+ color: @infoTextColor;
+}
+.ui.info.message,
+.ui.attached.info.message {
+ box-shadow: @infoBoxShadow;
+}
+.ui.info.message .header {
+ color: @infoHeaderColor;
+}
+
+/* Warning */
+.ui.warning.message {
+ background-color: @warningBackgroundColor;
+ color: @warningTextColor;
+}
+.ui.warning.message,
+.ui.attached.warning.message {
+ box-shadow: @warningBoxShadow;
+}
+.ui.warning.message .header {
+ color: @warningHeaderColor;
+}
+
+/* Error */
+.ui.error.message {
+ background-color: @errorBackgroundColor;
+ color: @errorTextColor;
+}
+.ui.error.message,
+.ui.attached.error.message {
+ box-shadow: @errorBoxShadow;
+}
+.ui.error.message .header {
+ color: @errorHeaderColor;
+}
+
+/* Success */
+.ui.success.message {
+ background-color: @successBackgroundColor;
+ color: @successTextColor;
+}
+.ui.success.message,
+.ui.attached.success.message {
+ box-shadow: @successBoxShadow;
+}
+.ui.success.message .header {
+ color: @successHeaderColor;
+}
+
+
+/* Colors */
+.ui.inverted.message,
+.ui.black.message {
+ background-color: @black;
+ color: @invertedTextColor;
+}
+
+.ui.red.message {
+ background-color: @redBackground;
+ color: @redTextColor;
+ box-shadow: @redBoxShadow;
+}
+.ui.red.message .header {
+ color: @redHeaderColor;
+}
+
+.ui.orange.message {
+ background-color: @orangeBackground;
+ color: @orangeTextColor;
+ box-shadow: @orangeBoxShadow;
+}
+.ui.orange.message .header {
+ color: @orangeHeaderColor;
+}
+
+.ui.yellow.message {
+ background-color: @yellowBackground;
+ color: @yellowTextColor;
+ box-shadow: @yellowBoxShadow;
+}
+.ui.yellow.message .header {
+ color: @yellowHeaderColor;
+}
+
+.ui.olive.message {
+ background-color: @oliveBackground;
+ color: @oliveTextColor;
+ box-shadow: @oliveBoxShadow;
+}
+.ui.olive.message .header {
+ color: @oliveHeaderColor;
+}
+
+.ui.green.message {
+ background-color: @greenBackground;
+ color: @greenTextColor;
+ box-shadow: @greenBoxShadow;
+}
+.ui.green.message .header {
+ color: @greenHeaderColor;
+}
+
+.ui.teal.message {
+ background-color: @tealBackground;
+ color: @tealTextColor;
+ box-shadow: @tealBoxShadow;
+}
+.ui.teal.message .header {
+ color: @tealHeaderColor;
+}
+
+.ui.blue.message {
+ background-color: @blueBackground;
+ color: @blueTextColor;
+ box-shadow: @blueBoxShadow;
+}
+.ui.blue.message .header {
+ color: @blueHeaderColor;
+}
+
+.ui.violet.message {
+ background-color: @violetBackground;
+ color: @violetTextColor;
+ box-shadow: @violetBoxShadow;
+}
+.ui.violet.message .header {
+ color: @violetHeaderColor;
+}
+
+.ui.purple.message {
+ background-color: @purpleBackground;
+ color: @purpleTextColor;
+ box-shadow: @purpleBoxShadow;
+}
+.ui.purple.message .header {
+ color: @purpleHeaderColor;
+}
+
+.ui.pink.message {
+ background-color: @pinkBackground;
+ color: @pinkTextColor;
+ box-shadow: @pinkBoxShadow;
+}
+.ui.pink.message .header {
+ color: @pinkHeaderColor;
+}
+
+.ui.brown.message {
+ background-color: @brownBackground;
+ color: @brownTextColor;
+ box-shadow: @brownBoxShadow;
+}
+.ui.brown.message .header {
+ color: @brownHeaderColor;
+}
+
+/*--------------
+ Sizes
+---------------*/
+
+.ui.mini.message {
+ font-size: @relativeMini;
+}
+.ui.tiny.message {
+ font-size: @relativeTiny;
+}
+.ui.small.message {
+ font-size: @relativeSmall;
+}
+.ui.message {
+ font-size: @relativeMedium;
+}
+.ui.large.message {
+ font-size: @relativeLarge;
+}
+.ui.big.message {
+ font-size: @relativeBig;
+}
+.ui.huge.message {
+ font-size: @relativeHuge;
+}
+.ui.massive.message {
+ font-size: @relativeMassive;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/collections/table.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/collections/table.less b/semantic/src/definitions/collections/table.less
new file mode 100755
index 0000000..b72dbac
--- /dev/null
+++ b/semantic/src/definitions/collections/table.less
@@ -0,0 +1,1114 @@
+/*!
+ * # Semantic UI - Table
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'collection';
+@element : 'table';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Table
+*******************************/
+
+/* Prototype */
+.ui.table {
+ width: 100%;
+ background: @background;
+ margin: @margin;
+ border: @border;
+ box-shadow: @boxShadow;
+ border-radius: @borderRadius;
+ text-align: @textAlign;
+ color: @color;
+ border-collapse: @borderCollapse;
+ border-spacing: @borderSpacing;
+}
+
+.ui.table:first-child {
+ margin-top: 0em;
+}
+.ui.table:last-child {
+ margin-bottom: 0em;
+}
+
+/*******************************
+ Parts
+*******************************/
+
+/* Table Content */
+.ui.table th,
+.ui.table td {
+ transition: @transition;
+}
+
+/* Headers */
+.ui.table thead {
+ box-shadow: @headerBoxShadow;
+}
+.ui.table thead th {
+ cursor: auto;
+ background: @headerBackground;
+ text-align: @headerAlign;
+ color: @headerColor;
+ padding: @headerVerticalPadding @headerHorizontalPadding;
+ vertical-align: @headerVerticalAlign;
+ font-style: @headerFontStyle;
+ font-weight: @headerFontWeight;
+ text-transform: @headerTextTransform;
+ border-bottom: @headerBorder;
+ border-left: @headerDivider;
+}
+
+.ui.table thead tr > th:first-child {
+ border-left: none;
+}
+
+.ui.table thead tr:first-child > th:first-child {
+ border-radius: @borderRadius 0em 0em 0em;
+}
+.ui.table thead tr:first-child > th:last-child {
+ border-radius: 0em @borderRadius 0em 0em;
+}
+.ui.table thead tr:first-child > th:only-child {
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+
+/* Footer */
+.ui.table tfoot {
+ box-shadow: @footerBoxShadow;
+}
+.ui.table tfoot th {
+ cursor: auto;
+ border-top: @footerBorder;
+ background: @footerBackground;
+ text-align: @footerAlign;
+ color: @footerColor;
+ padding: @footerVerticalPadding @footerHorizontalPadding;
+ vertical-align: @footerVerticalAlign;
+ font-style: @footerFontStyle;
+ font-weight: @footerFontWeight;
+ text-transform: @footerTextTransform;
+}
+.ui.table tfoot tr > th:first-child {
+ border-left: none;
+}
+.ui.table tfoot tr:first-child > th:first-child {
+ border-radius: 0em 0em 0em @borderRadius;
+}
+.ui.table tfoot tr:first-child > th:last-child {
+ border-radius: 0em 0em @borderRadius 0em;
+}
+.ui.table tfoot tr:first-child > th:only-child {
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+
+/* Table Row */
+.ui.table tr td {
+ border-top: @rowBorder;
+}
+.ui.table tr:first-child td {
+ border-top: none;
+}
+
+/* Table Cells */
+.ui.table td {
+ padding: @cellVerticalPadding @cellHorizontalPadding;
+ text-align: @cellTextAlign;
+}
+
+/* Icons */
+.ui.table > .icon {
+ vertical-align: @iconVerticalAlign;
+}
+.ui.table > .icon:only-child {
+ margin: 0em;
+}
+
+/* Table Segment */
+.ui.table.segment {
+ padding: 0em;
+}
+.ui.table.segment:after {
+ display: none;
+}
+.ui.table.segment.stacked:after {
+ display: block;
+}
+
+
+/* Responsive */
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.table:not(.unstackable) {
+ width: 100%;
+ }
+ .ui.table:not(.unstackable) tbody,
+ .ui.table:not(.unstackable) tr,
+ .ui.table:not(.unstackable) tr > th,
+ .ui.table:not(.unstackable) tr > td {
+ display: block !important;
+ width: auto !important;
+ display: block !important;
+ }
+
+ .ui.table:not(.unstackable) {
+ padding: 0em;
+ }
+ .ui.table:not(.unstackable) thead {
+ display: @responsiveHeaderDisplay;
+ }
+ .ui.table:not(.unstackable) tfoot {
+ display: @responsiveFooterDisplay;
+ }
+ .ui.table:not(.unstackable) tr {
+ padding-top: @responsiveRowVerticalPadding;
+ padding-bottom: @responsiveRowVerticalPadding;
+ box-shadow: @responsiveRowBoxShadow;
+ }
+
+ .ui.table:not(.unstackable) tr > th,
+ .ui.table:not(.unstackable) tr > td {
+ background: none;
+ border: none !important;
+ padding: @responsiveCellVerticalPadding @responsiveCellHorizontalPadding !important;
+ box-shadow: @responsiveCellBoxShadow;
+ }
+ .ui.table:not(.unstackable) th:first-child,
+ .ui.table:not(.unstackable) td:first-child {
+ font-weight: bold;
+ }
+
+ /* Definition Table */
+ .ui.definition.table:not(.unstackable) thead th:first-child {
+ box-shadow: none !important;
+ }
+}
+
+
+/*******************************
+ Coupling
+*******************************/
+
+/* UI Image */
+.ui.table th .image,
+.ui.table th .image img,
+.ui.table td .image,
+.ui.table td .image img {
+ max-width: none;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Complex
+---------------*/
+
+.ui.structured.table {
+ border-collapse: collapse;
+}
+.ui.structured.table thead th {
+ border-left: @headerDivider;
+ border-right: @headerDivider;
+}
+.ui.structured.sortable.table thead th {
+ border-left: @sortableBorder;
+ border-right: @sortableBorder;
+}
+.ui.structured.basic.table th {
+ border-left: @basicTableHeaderDivider;
+ border-right: @basicTableHeaderDivider;
+}
+.ui.structured.celled.table tr th,
+.ui.structured.celled.table tr td {
+ border-left: @cellBorder;
+ border-right: @cellBorder;
+}
+
+/*--------------
+ Definition
+---------------*/
+
+.ui.definition.table thead:not(.full-width) th:first-child {
+ pointer-events: none;
+ background: @definitionHeaderBackground;
+ font-weight: @definitionHeaderFontWeight;
+ color: @definitionHeaderColor;
+ box-shadow: -@borderWidth -@borderWidth 0px @borderWidth @definitionPageBackground;
+}
+
+.ui.definition.table tfoot:not(.full-width) th:first-child {
+ pointer-events: none;
+ background: @definitionFooterBackground;
+ font-weight: @definitionFooterColor;
+ color: @definitionFooterFontWeight;
+ box-shadow: @borderWidth @borderWidth 0px @borderWidth @definitionPageBackground;
+}
+
+/* Remove Border */
+.ui.celled.definition.table thead:not(.full-width) th:first-child {
+ box-shadow: 0px -@borderWidth 0px @borderWidth @definitionPageBackground;
+}
+.ui.celled.definition.table tfoot:not(.full-width) th:first-child {
+ box-shadow: 0px @borderWidth 0px @borderWidth @definitionPageBackground;
+}
+
+/* Highlight Defining Column */
+.ui.definition.table tr td:first-child:not(.ignored),
+.ui.definition.table tr td.definition {
+ background: @definitionColumnBackground;
+ font-weight: @definitionColumnFontWeight;
+ color: @definitionColumnColor;
+ text-transform: @definitionColumnTextTransform;
+ box-shadow: @definitionColumnBoxShadow;
+ text-align: @definitionColumnTextAlign;
+ font-size: @definitionColumnFontSize;
+ padding-left: @definitionColumnHorizontalPadding;
+ padding-right: @definitionColumnHorizontalPadding;
+}
+
+
+/* Fix 2nd Column */
+.ui.definition.table thead:not(.full-width) th:nth-child(2) {
+ border-left: @borderWidth solid @borderColor;
+}
+.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {
+ border-left: @borderWidth solid @borderColor;
+}
+.ui.definition.table td:nth-child(2) {
+ border-left: @borderWidth solid @borderColor;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Positive
+---------------*/
+
+.ui.table tr.positive,
+.ui.table td.positive {
+ box-shadow: @positiveBoxShadow;
+}
+.ui.table tr.positive,
+.ui.table td.positive {
+ background: @positiveBackgroundColor !important;
+ color: @positiveColor !important;
+}
+
+/*--------------
+ Negative
+---------------*/
+
+.ui.table tr.negative,
+.ui.table td.negative {
+ box-shadow: @negativeBoxShadow;
+}
+.ui.table tr.negative,
+.ui.table td.negative {
+ background: @negativeBackgroundColor !important;
+ color: @negativeColor !important;
+}
+
+/*--------------
+ Error
+---------------*/
+
+.ui.table tr.error,
+.ui.table td.error {
+ box-shadow: @errorBoxShadow;
+}
+.ui.table tr.error,
+.ui.table td.error {
+ background: @errorBackgroundColor !important;
+ color: @errorColor !important;
+}
+/*--------------
+ Warning
+---------------*/
+
+.ui.table tr.warning,
+.ui.table td.warning {
+ box-shadow: @warningBoxShadow;
+}
+.ui.table tr.warning,
+.ui.table td.warning {
+ background: @warningBackgroundColor !important;
+ color: @warningColor !important;
+}
+
+/*--------------
+ Active
+---------------*/
+
+.ui.table tr.active,
+.ui.table td.active {
+ box-shadow: @activeBoxShadow;
+}
+.ui.table tr.active,
+.ui.table td.active {
+ background: @activeBackgroundColor !important;
+ color: @activeColor !important;
+}
+
+
+
+/*--------------
+ Disabled
+---------------*/
+
+.ui.table tr.disabled td,
+.ui.table tr td.disabled,
+.ui.table tr.disabled:hover,
+.ui.table tr:hover td.disabled {
+ pointer-events: none;
+ color: @disabledTextColor;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Stackable
+---------------*/
+
+@media only screen and (max-width : @largestTabletScreen) {
+
+ .ui[class*="tablet stackable"].table,
+ .ui[class*="tablet stackable"].table tbody,
+ .ui[class*="tablet stackable"].table tr,
+ .ui[class*="tablet stackable"].table tr > th,
+ .ui[class*="tablet stackable"].table tr > td {
+ display: block !important;
+ width: 100% !important;
+ display: block !important;
+ }
+
+ .ui[class*="tablet stackable"].table {
+ padding: 0em;
+ }
+ .ui[class*="tablet stackable"].table thead {
+ display: @responsiveHeaderDisplay;
+ }
+ .ui[class*="tablet stackable"].table tfoot {
+ display: @responsiveFooterDisplay;
+ }
+ .ui[class*="tablet stackable"].table tr {
+ padding-top: @responsiveRowVerticalPadding;
+ padding-bottom: @responsiveRowVerticalPadding;
+ box-shadow: @responsiveRowBoxShadow;
+ }
+ .ui[class*="tablet stackable"].table tr > th,
+ .ui[class*="tablet stackable"].table tr > td {
+ background: none;
+ border: none !important;
+ padding: @responsiveCellVerticalPadding @responsiveCellHorizontalPadding;
+ box-shadow: @responsiveCellBoxShadow;
+ }
+
+ /* Definition Table */
+ .ui.definition[class*="tablet stackable"].table thead th:first-child {
+ box-shadow: none !important;
+ }
+}
+
+/*--------------
+ Text Alignment
+---------------*/
+
+.ui.table[class*="left aligned"],
+.ui.table [class*="left aligned"] {
+ text-align: left;
+}
+.ui.table[class*="center aligned"],
+.ui.table [class*="center aligned"] {
+ text-align: center;
+}
+.ui.table[class*="right aligned"],
+.ui.table [class*="right aligned"] {
+ text-align: right;
+}
+
+/*------------------
+ Vertical Alignment
+------------------*/
+
+.ui.table[class*="top aligned"],
+.ui.table [class*="top aligned"] {
+ vertical-align: top;
+}
+.ui.table[class*="middle aligned"],
+.ui.table [class*="middle aligned"] {
+ vertical-align: middle;
+}
+.ui.table[class*="bottom aligned"],
+.ui.table [class*="bottom aligned"] {
+ vertical-align: bottom;
+}
+
+/*--------------
+ Collapsing
+---------------*/
+
+.ui.table th.collapsing,
+.ui.table td.collapsing {
+ width: 1px;
+ white-space: nowrap;
+}
+
+/*--------------
+ Fixed
+---------------*/
+
+.ui.fixed.table {
+ table-layout: fixed;
+}
+
+.ui.fixed.table th,
+.ui.fixed.table td {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+
+/*--------------
+ Selectable
+---------------*/
+
+.ui.selectable.table tbody tr:hover,
+.ui.table tbody tr td.selectable:hover {
+ background: @selectableBackground !important;
+ color: @selectableTextColor !important;
+}
+.ui.selectable.inverted.table tbody tr:hover,
+.ui.inverted.table tbody tr td.selectable:hover {
+ background: @selectableInvertedBackground !important;
+ color: @selectableInvertedTextColor !important;
+}
+
+/* Selectable Cell Link */
+.ui.table tbody tr td.selectable {
+ padding: 0em;
+}
+.ui.table tbody tr td.selectable > a:not(.ui) {
+ display: block;
+ color: inherit;
+ padding: @cellVerticalPadding @cellHorizontalPadding;
+}
+
+/* Other States */
+.ui.selectable.table tr.error:hover,
+.ui.table tr td.selectable.error:hover,
+.ui.selectable.table tr:hover td.error {
+ background: @errorBackgroundHover !important;
+ color: @errorColorHover !important;
+}
+.ui.selectable.table tr.warning:hover,
+.ui.table tr td.selectable.warning:hover,
+.ui.selectable.table tr:hover td.warning {
+ background: @warningBackgroundHover !important;
+ color: @warningColorHover !important;
+}
+.ui.selectable.table tr.active:hover,
+.ui.table tr td.selectable.active:hover,
+.ui.selectable.table tr:hover td.active {
+ background: @activeBackgroundColor !important;
+ color: @activeColor !important;
+}
+.ui.selectable.table tr.positive:hover,
+.ui.table tr td.selectable.positive:hover,
+.ui.selectable.table tr:hover td.positive {
+ background: @positiveBackgroundHover !important;
+ color: @positiveColorHover !important;
+}
+.ui.selectable.table tr.negative:hover,
+.ui.table tr td.selectable.negative:hover,
+.ui.selectable.table tr:hover td.negative {
+ background: @negativeBackgroundHover !important;
+ color: @negativeColorHover !important;
+}
+
+
+
+/*-------------------
+ Attached
+--------------------*/
+
+/* Middle */
+.ui.attached.table {
+ top: 0px;
+ bottom: 0px;
+ border-radius: 0px;
+ margin: 0em @attachedHorizontalOffset;
+ width: @attachedWidth;
+ max-width: @attachedWidth;
+ box-shadow: @attachedBoxShadow;
+ border: @attachedBorder;
+}
+.ui.attached + .ui.attached.table:not(.top) {
+ border-top: none;
+}
+
+/* Top */
+.ui[class*="top attached"].table {
+ bottom: 0px;
+ margin-bottom: 0em;
+ top: @attachedTopOffset;
+ margin-top: @verticalMargin;
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+.ui.table[class*="top attached"]:first-child {
+ margin-top: 0em;
+}
+
+/* Bottom */
+.ui[class*="bottom attached"].table {
+ bottom: 0px;
+ margin-top: 0em;
+ top: @attachedBottomOffset;
+ margin-bottom: @verticalMargin;
+ box-shadow: @attachedBottomBoxShadow;
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+.ui[class*="bottom attached"].table:last-child {
+ margin-bottom: 0em;
+}
+
+/*--------------
+ Striped
+---------------*/
+
+/* Table Striping */
+.ui.striped.table > tr:nth-child(2n),
+.ui.striped.table tbody tr:nth-child(2n) {
+ background-color: @stripedBackground;
+}
+
+/* Stripes */
+.ui.inverted.striped.table > tr:nth-child(2n),
+.ui.inverted.striped.table tbody tr:nth-child(2n) {
+ background-color: @invertedStripedBackground;
+}
+
+/* Allow striped active hover */
+.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {
+ background: @activeBackgroundHover !important;
+ color: @activeColorHover !important;
+}
+
+/*--------------
+ Single Line
+---------------*/
+
+.ui.table[class*="single line"],
+.ui.table [class*="single line"] {
+ white-space: nowrap;
+}
+.ui.table[class*="single line"],
+.ui.table [class*="single line"] {
+ white-space: nowrap;
+}
+
+/*-------------------
+ Colors
+--------------------*/
+
+/* Red */
+.ui.red.table {
+ border-top: @coloredBorderSize solid @red;
+}
+.ui.inverted.red.table {
+ background-color: @red !important;
+ color: @white !important;
+}
+
+/* Orange */
+.ui.orange.table {
+ border-top: @coloredBorderSize solid @orange;
+}
+.ui.inverted.orange.table {
+ background-color: @orange !important;
+ color: @white !important;
+}
+
+/* Yellow */
+.ui.yellow.table {
+ border-top: @coloredBorderSize solid @yellow;
+}
+.ui.inverted.yellow.table {
+ background-color: @yellow !important;
+ color: @white !important;
+}
+
+/* Olive */
+.ui.olive.table {
+ border-top: @coloredBorderSize solid @olive;
+}
+.ui.inverted.olive.table {
+ background-color: @olive !important;
+ color: @white !important;
+}
+
+/* Green */
+.ui.green.table {
+ border-top: @coloredBorderSize solid @green;
+}
+.ui.inverted.green.table {
+ background-color: @green !important;
+ color: @white !important;
+}
+
+/* Teal */
+.ui.teal.table {
+ border-top: @coloredBorderSize solid @teal;
+}
+.ui.inverted.teal.table {
+ background-color: @teal !important;
+ color: @white !important;
+}
+
+/* Blue */
+.ui.blue.table {
+ border-top: @coloredBorderSize solid @blue;
+}
+.ui.inverted.blue.table {
+ background-color: @blue !important;
+ color: @white !important;
+}
+
+/* Violet */
+.ui.violet.table {
+ border-top: @coloredBorderSize solid @violet;
+}
+.ui.inverted.violet.table {
+ background-color: @violet !important;
+ color: @white !important;
+}
+
+/* Purple */
+.ui.purple.table {
+ border-top: @coloredBorderSize solid @purple;
+}
+.ui.inverted.purple.table {
+ background-color: @purple !important;
+ color: @white !important;
+}
+
+/* Pink */
+.ui.pink.table {
+ border-top: @coloredBorderSize solid @pink;
+}
+.ui.inverted.pink.table {
+ background-color: @pink !important;
+ color: @white !important;
+}
+
+/* Brown */
+.ui.brown.table {
+ border-top: @coloredBorderSize solid @brown;
+}
+.ui.inverted.brown.table {
+ background-color: @brown !important;
+ color: @white !important;
+}
+
+/* Grey */
+.ui.grey.table {
+ border-top: @coloredBorderSize solid @grey;
+}
+.ui.inverted.grey.table {
+ background-color: @grey !important;
+ color: @white !important;
+}
+
+/* Black */
+.ui.black.table {
+ border-top: @coloredBorderSize solid @black;
+}
+.ui.inverted.black.table {
+ background-color: @black !important;
+ color: @white !important;
+}
+
+
+/*--------------
+ Column Count
+---------------*/
+
+/* Grid Based */
+.ui.one.column.table td {
+ width: @oneColumn;
+}
+.ui.two.column.table td {
+ width: @twoColumn;
+}
+.ui.three.column.table td {
+ width: @threeColumn;
+}
+.ui.four.column.table td {
+ width: @fourColumn;
+}
+.ui.five.column.table td {
+ width: @fiveColumn;
+}
+.ui.six.column.table td {
+ width: @sixColumn;
+}
+.ui.seven.column.table td {
+ width: @sevenColumn;
+}
+.ui.eight.column.table td {
+ width: @eightColumn;
+}
+.ui.nine.column.table td {
+ width: @nineColumn;
+}
+.ui.ten.column.table td {
+ width: @tenColumn;
+}
+.ui.eleven.column.table td {
+ width: @elevenColumn;
+}
+.ui.twelve.column.table td {
+ width: @twelveColumn;
+}
+.ui.thirteen.column.table td {
+ width: @thirteenColumn;
+}
+.ui.fourteen.column.table td {
+ width: @fourteenColumn;
+}
+.ui.fifteen.column.table td {
+ width: @fifteenColumn;
+}
+.ui.sixteen.column.table td {
+ width: @sixteenColumn;
+}
+
+/* Column Width */
+.ui.table th.one.wide,
+.ui.table td.one.wide {
+ width: @oneWide;
+}
+.ui.table th.two.wide,
+.ui.table td.two.wide {
+ width: @twoWide;
+}
+.ui.table th.three.wide,
+.ui.table td.three.wide {
+ width: @threeWide;
+}
+.ui.table th.four.wide,
+.ui.table td.four.wide {
+ width: @fourWide;
+}
+.ui.table th.five.wide,
+.ui.table td.five.wide {
+ width: @fiveWide;
+}
+.ui.table th.six.wide,
+.ui.table td.six.wide {
+ width: @sixWide;
+}
+.ui.table th.seven.wide,
+.ui.table td.seven.wide {
+ width: @sevenWide;
+}
+.ui.table th.eight.wide,
+.ui.table td.eight.wide {
+ width: @eightWide;
+}
+.ui.table th.nine.wide,
+.ui.table td.nine.wide {
+ width: @nineWide;
+}
+.ui.table th.ten.wide,
+.ui.table td.ten.wide {
+ width: @tenWide;
+}
+.ui.table th.eleven.wide,
+.ui.table td.eleven.wide {
+ width: @elevenWide;
+}
+.ui.table th.twelve.wide,
+.ui.table td.twelve.wide {
+ width: @twelveWide;
+}
+.ui.table th.thirteen.wide,
+.ui.table td.thirteen.wide {
+ width: @thirteenWide;
+}
+.ui.table th.fourteen.wide,
+.ui.table td.fourteen.wide {
+ width: @fourteenWide;
+}
+.ui.table th.fifteen.wide,
+.ui.table td.fifteen.wide {
+ width: @fifteenWide;
+}
+.ui.table th.sixteen.wide,
+.ui.table td.sixteen.wide {
+ width: @sixteenWide;
+}
+
+/*--------------
+ Sortable
+---------------*/
+
+.ui.sortable.table thead th {
+ cursor: pointer;
+ white-space: nowrap;
+ border-left: @sortableBorder;
+ color: @sortableColor;
+}
+.ui.sortable.table thead th:first-child {
+ border-left: none;
+}
+.ui.sortable.table thead th.sorted,
+.ui.sortable.table thead th.sorted:hover {
+ user-select: none;
+}
+
+.ui.sortable.table thead th:after {
+ display: none;
+ font-style: normal;
+ font-weight: normal;
+ text-decoration: inherit;
+ content: '';
+ height: 1em;
+ width: @sortableIconWidth;
+ opacity: @sortableIconOpacity;
+ margin: 0em 0em 0em @sortableIconDistance;
+ font-family: @sortableIconFont;
+}
+.ui.sortable.table thead th.ascending:after {
+ content: @sortableIconAscending;
+}
+.ui.sortable.table thead th.descending:after {
+ content: @sortableIconDescending;
+}
+
+/* Hover */
+.ui.sortable.table th.disabled:hover {
+ cursor: auto;
+ color: @sortableDisabledColor;
+}
+.ui.sortable.table thead th:hover {
+ background: @sortableHoverBackground;
+ color: @sortableHoverColor;
+}
+
+/* Sorted */
+.ui.sortable.table thead th.sorted {
+ background: @sortableActiveBackground;
+ color: @sortableActiveColor;
+}
+.ui.sortable.table thead th.sorted:after {
+ display: inline-block;
+}
+
+/* Sorted Hover */
+.ui.sortable.table thead th.sorted:hover {
+ background: @sortableActiveHoverBackground;
+ color: @sortableActiveHoverColor;
+}
+
+/* Inverted */
+.ui.inverted.sortable.table thead th.sorted {
+ background: @sortableInvertedActiveBackground;
+ color: @sortableInvertedActiveColor;
+}
+.ui.inverted.sortable.table thead th:hover {
+ background: @sortableInvertedHoverBackground;
+ color: @sortableInvertedHoverColor;
+}
+.ui.inverted.sortable.table thead th {
+ border-left-color: @sortableInvertedBorderColor;
+ border-right-color: @sortableInvertedBorderColor;
+}
+
+
+/*--------------
+ Inverted
+---------------*/
+
+/* Text Color */
+.ui.inverted.table {
+ background: @invertedBackground;
+ color: @invertedCellColor;
+ border: @invertedBorder;
+}
+.ui.inverted.table th {
+ background-color: @invertedHeaderBackground;
+ border-color: @invertedHeaderBorderColor !important;
+ color: @invertedHeaderColor;
+}
+.ui.inverted.table tr td {
+ border-color: @invertedCellBorderColor !important;
+}
+
+.ui.inverted.table tr.disabled td,
+.ui.inverted.table tr td.disabled,
+.ui.inverted.table tr.disabled:hover td,
+.ui.inverted.table tr:hover td.disabled {
+ pointer-events: none;
+ color: @invertedDisabledTextColor;
+}
+
+/* Definition */
+.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,
+.ui.inverted.definition.table thead:not(.full-width) th:first-child {
+ background: @definitionPageBackground;
+}
+.ui.inverted.definition.table tr td:first-child {
+ background: @invertedDefinitionColumnBackground;
+ color: @invertedDefinitionColumnColor;
+}
+
+/*--------------
+ Collapsing
+---------------*/
+
+.ui.collapsing.table {
+ width: auto;
+}
+
+/*--------------
+ Basic
+---------------*/
+
+.ui.basic.table {
+ background: @basicTableBackground;
+ border: @basicTableBorder;
+ box-shadow: @basicBoxShadow;
+}
+.ui.basic.table thead,
+.ui.basic.table tfoot {
+ box-shadow: none;
+}
+.ui.basic.table th {
+ background: @basicTableHeaderBackground;
+ border-left: @basicTableHeaderDivider;
+}
+.ui.basic.table tbody tr {
+ border-bottom: @basicTableCellBorder;
+}
+.ui.basic.table td {
+ background: @basicTableCellBackground;
+}
+.ui.basic.striped.table tbody tr:nth-child(2n) {
+ background-color: @basicTableStripedBackground !important;
+}
+
+/* Very Basic */
+.ui[class*="very basic"].table {
+ border: none;
+}
+.ui[class*="very basic"].table:not(.sortable):not(.striped) th,
+.ui[class*="very basic"].table:not(.sortable):not(.striped) td {
+ padding: @basicTableCellPadding;
+}
+.ui[class*="very basic"].table:not(.sortable):not(.striped) th:first-child,
+.ui[class*="very basic"].table:not(.sortable):not(.striped) td:first-child {
+ padding-left: 0em;
+}
+.ui[class*="very basic"].table:not(.sortable):not(.striped) th:last-child,
+.ui[class*="very basic"].table:not(.sortable):not(.striped) td:last-child {
+ padding-right: 0em;
+}
+.ui[class*="very basic"].table:not(.sortable):not(.striped) thead tr:first-child th {
+ padding-top: 0em;
+}
+
+/*--------------
+ Celled
+---------------*/
+
+.ui.celled.table tr th,
+.ui.celled.table tr td {
+ border-left: @cellBorder;
+}
+.ui.celled.table tr th:first-child,
+.ui.celled.table tr td:first-child {
+ border-left: none;
+}
+
+/*--------------
+ Padded
+---------------*/
+
+.ui.padded.table th {
+ padding-left: @paddedHorizontalPadding;
+ padding-right: @paddedHorizontalPadding;
+}
+.ui.padded.table th,
+.ui.padded.table td {
+ padding: @paddedVerticalPadding @paddedHorizontalPadding;
+}
+
+/* Very */
+.ui[class*="very padded"].table th {
+ padding-left: @veryPaddedHorizontalPadding;
+ padding-right: @veryPaddedHorizontalPadding;
+}
+.ui[class*="very padded"].table td {
+ padding: @veryPaddedVerticalPadding @veryPaddedHorizontalPadding;
+}
+
+/*--------------
+ Compact
+---------------*/
+
+.ui.compact.table th {
+ padding-left: @compactHorizontalPadding;
+ padding-right: @compactHorizontalPadding;
+}
+.ui.compact.table td {
+ padding: @compactVerticalPadding @compactHorizontalPadding;
+}
+
+/* Very */
+.ui[class*="very compact"].table th {
+ padding-left: @veryCompactHorizontalPadding;
+ padding-right: @veryCompactHorizontalPadding;
+}
+.ui[class*="very compact"].table td {
+ padding: @veryCompactVerticalPadding @veryCompactHorizontalPadding;
+}
+
+/*--------------
+ Sizes
+---------------*/
+
+/* Small */
+.ui.small.table {
+ font-size: @small;
+}
+
+/* Standard */
+.ui.table {
+ font-size: @medium;
+}
+
+/* Large */
+.ui.large.table {
+ font-size: @large;
+}
+
+.loadUIOverrides();
[07/48] incubator-senssoft-tap git commit: Fixed bug for redirect
from /login/ to /user_profile/
Posted by ar...@apache.org.
Fixed bug for redirect from /login/ to /user_profile/
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/5d7e522d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/5d7e522d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/5d7e522d
Branch: refs/heads/master
Commit: 5d7e522dc36eb5db4eedb6931ca4838387e47503
Parents: 4290cb0
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Wed Jul 20 13:48:53 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Wed Jul 20 13:48:53 2016 -0400
----------------------------------------------------------------------
app_mgr/views.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/5d7e522d/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index 2d4ae9a..d3f8336 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -255,7 +255,7 @@ def login_user(request):
# If the account is valid and active, we can log the user in.
# We'll send the user back to the homepage.
login(request, user)
- return HttpResponseRedirect('/app_mgr/user_profile')
+ return HttpResponseRedirect('/app_mgr/user_profile/')
else:
# An inactive account was used - no logging in!
return HttpResponse("Your TAP account is disabled.")
[15/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/components/init.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/components/init.js b/semantic/tasks/admin/components/init.js
new file mode 100644
index 0000000..7f836d3
--- /dev/null
+++ b/semantic/tasks/admin/components/init.js
@@ -0,0 +1,170 @@
+/*******************************
+ Init Repos
+*******************************/
+
+/*
+
+ This task pulls the latest version of each component from GitHub
+
+ * Creates new repo if doesnt exist (locally & GitHub)
+ * Adds remote it doesnt exists
+ * Pulls latest changes from repo
+
+*/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ del = require('del'),
+ fs = require('fs'),
+ path = require('path'),
+ git = require('gulp-git'),
+ githubAPI = require('github'),
+ mkdirp = require('mkdirp'),
+
+ // admin files
+ github = require('../../config/admin/github.js'),
+ release = require('../../config/admin/release'),
+ project = require('../../config/project/release'),
+
+
+ // oAuth configuration for GitHub
+ oAuth = fs.existsSync(__dirname + '/../../config/admin/oauth.js')
+ ? require('../../config/admin/oauth')
+ : false,
+
+ // shorthand
+ version = project.version
+;
+
+module.exports = function(callback) {
+
+ var
+ index = -1,
+ total = release.components.length,
+ timer,
+ stream,
+ stepRepo
+ ;
+
+ if(!oAuth) {
+ console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');
+ return;
+ }
+
+ // Do Git commands synchronously per component, to avoid issues
+ stepRepo = function() {
+
+ index = index + 1;
+
+ if(index >= total) {
+ callback();
+ return;
+ }
+
+ var
+ component = release.components[index]
+ outputDirectory = path.resolve(release.outputRoot + component),
+ capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1),
+ repoName = release.componentRepoRoot + capitalizedComponent,
+
+ gitOptions = { cwd: outputDirectory },
+ pullOptions = { args: '-q', cwd: outputDirectory, quiet: true },
+ resetOptions = { args: '-q --hard', cwd: outputDirectory, quiet: true },
+
+ gitURL = 'https://github.com/' + release.org + '/' + repoName + '.git',
+ repoURL = 'https://github.com/' + release.org + '/' + repoName + '/',
+ localRepoSetup = fs.existsSync(path.join(outputDirectory, '.git'))
+ ;
+
+ console.log('Processing repository: ' + outputDirectory);
+
+ // create folder if doesn't exist
+ if( !fs.existsSync(outputDirectory) ) {
+ mkdirp.sync(outputDirectory);
+ }
+
+ // clean folder
+ if(release.outputRoot.search('../repos') == 0) {
+ console.info('Cleaning dir', outputDirectory);
+ del.sync([outputDirectory + '**/*'], {silent: true, force: true});
+ }
+
+ // set-up local repo
+ function setupRepo() {
+ if(localRepoSetup) {
+ addRemote();
+ }
+ else {
+ initRepo();
+ }
+ }
+
+ function initRepo() {
+ console.info('Initializing repository for ' + component);
+ git.init(gitOptions, function(error) {
+ if(error) {
+ console.error('Error initializing repo', error);
+ }
+ addRemote();
+ });
+ }
+
+ function createRepo() {
+ console.info('Creating GitHub repo ' + repoURL);
+ github.repos.createFromOrg({
+ org : release.org,
+ name : repoName,
+ homepage : release.homepage
+ }, function() {
+ setupRepo();
+ });
+ }
+
+ function addRemote() {
+ console.info('Adding remote origin as ' + gitURL);
+ git.addRemote('origin', gitURL, gitOptions, function(){
+ pullFiles();
+ });
+ }
+
+ function pullFiles() {
+ console.info('Pulling ' + component + ' files');
+ git.pull('origin', 'master', pullOptions, function(error) {
+ resetFiles();
+ });
+ }
+
+ function resetFiles() {
+ console.info('Resetting files to head');
+ git.reset('HEAD', resetOptions, function(error) {
+ nextRepo();
+ });
+ }
+
+ function nextRepo() {
+ //console.log('Sleeping for 1 second...');
+ // avoid rate throttling
+ global.clearTimeout(timer);
+ timer = global.setTimeout(function() {
+ stepRepo()
+ }, 0);
+ }
+
+
+ if(localRepoSetup) {
+ pullFiles();
+ }
+ else {
+ setupRepo();
+ // createRepo() only use to create remote repo (easier to do manually)
+ }
+
+ };
+
+ stepRepo();
+
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/components/update.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/components/update.js b/semantic/tasks/admin/components/update.js
new file mode 100644
index 0000000..e4b57a5
--- /dev/null
+++ b/semantic/tasks/admin/components/update.js
@@ -0,0 +1,184 @@
+/*******************************
+ Update Repos
+*******************************/
+
+/*
+
+ This task update all SUI individual component repos with new versions of components
+
+ * Commits changes from create repo
+ * Pushes changes to GitHub
+ * Tag new releases if version changed in main repo
+
+*/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ fs = require('fs'),
+ path = require('path'),
+ git = require('gulp-git'),
+ githubAPI = require('github'),
+ requireDotFile = require('require-dot-file'),
+
+ // admin files
+ github = require('../../config/admin/github.js'),
+ release = require('../../config/admin/release'),
+ project = require('../../config/project/release'),
+
+
+ // oAuth configuration for GitHub
+ oAuth = fs.existsSync(__dirname + '/../../config/admin/oauth.js')
+ ? require('../../config/admin/oauth')
+ : false,
+
+ // shorthand
+ version = project.version
+;
+
+module.exports = function(callback) {
+
+ var
+ index = -1,
+ total = release.components.length,
+ timer,
+ stream,
+ stepRepo
+ ;
+
+ if(!oAuth) {
+ console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');
+ return;
+ }
+
+ // Do Git commands synchronously per component, to avoid issues
+ stepRepo = function() {
+
+ index = index + 1;
+ if(index >= total) {
+ callback();
+ return;
+ }
+
+ var
+ component = release.components[index],
+ outputDirectory = path.resolve(path.join(release.outputRoot, component)),
+ capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1),
+ repoName = release.componentRepoRoot + capitalizedComponent,
+
+ gitURL = 'https://github.com/' + release.org + '/' + repoName + '.git',
+ repoURL = 'https://github.com/' + release.org + '/' + repoName + '/',
+
+ commitArgs = (oAuth.name !== undefined && oAuth.email !== undefined)
+ ? '--author "' + oAuth.name + ' <' + oAuth.email + '>"'
+ : '',
+
+ componentPackage = fs.existsSync(outputDirectory + 'package.json' )
+ ? require(outputDirectory + 'package.json')
+ : false,
+
+ isNewVersion = (version && componentPackage.version != version),
+
+ commitMessage = (isNewVersion)
+ ? 'Updated component to version ' + version
+ : 'Updated files from main repo',
+
+ gitOptions = { cwd: outputDirectory },
+ commitOptions = { args: commitArgs, cwd: outputDirectory },
+ releaseOptions = { tag_name: version, owner: release.org, repo: repoName },
+
+ fileModeOptions = { args : 'config core.fileMode false', cwd: outputDirectory },
+ usernameOptions = { args : 'config user.name "' + oAuth.name + '"', cwd: outputDirectory },
+ emailOptions = { args : 'config user.email "' + oAuth.email + '"', cwd: outputDirectory },
+ versionOptions = { args : 'rev-parse --verify HEAD', cwd: outputDirectory },
+
+ localRepoSetup = fs.existsSync(path.join(outputDirectory, '.git')),
+ canProceed = true
+ ;
+
+
+ console.info('Processing repository:' + outputDirectory);
+
+ function setConfig() {
+ git.exec(fileModeOptions, function() {
+ git.exec(usernameOptions, function () {
+ git.exec(emailOptions, function () {
+ commitFiles();
+ });
+ });
+ });
+ }
+
+
+ // standard path
+ function commitFiles() {
+ // commit files
+ console.info('Committing ' + component + ' files', commitArgs);
+ gulp.src('./', gitOptions)
+ .pipe(git.add(gitOptions))
+ .pipe(git.commit(commitMessage, commitOptions))
+ .on('error', function(error) {
+ // canProceed = false; bug in git commit <https://github.com/stevelacy/gulp-git/issues/49>
+ })
+ .on('finish', function(callback) {
+ if(canProceed) {
+ pushFiles();
+ }
+ else {
+ console.info('Nothing new to commit');
+ nextRepo();
+ }
+ })
+ ;
+ }
+
+ // push changes to remote
+ function pushFiles() {
+ console.info('Pushing files for ' + component);
+ git.push('origin', 'master', { args: '', cwd: outputDirectory }, function(error) {
+ console.info('Push completed successfully');
+ getSHA();
+ });
+ }
+
+ // gets SHA of last commit
+ function getSHA() {
+ git.exec(versionOptions, function(error, version) {
+ version = version.trim();
+ createRelease(version);
+ });
+ }
+
+ // create release on GitHub.com
+ function createRelease(version) {
+ if(version) {
+ releaseOptions.target_commitish = version;
+ }
+ github.releases.createRelease(releaseOptions, function() {
+ nextRepo();
+ });
+ }
+
+ // Steps to next repository
+ function nextRepo() {
+ console.log('Sleeping for 1 second...');
+ // avoid rate throttling
+ global.clearTimeout(timer);
+ timer = global.setTimeout(stepRepo, 1000);
+ }
+
+
+ if(localRepoSetup) {
+ setConfig();
+ }
+ else {
+ console.error('Repository must be setup before running update components');
+ }
+
+ };
+
+ stepRepo();
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/distributions/create.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/distributions/create.js b/semantic/tasks/admin/distributions/create.js
new file mode 100644
index 0000000..732707f
--- /dev/null
+++ b/semantic/tasks/admin/distributions/create.js
@@ -0,0 +1,219 @@
+/*******************************
+ Create Distributions
+*******************************/
+
+/*
+ This will create individual distribution repositories for each SUI distribution
+
+ * copy distribution files to release
+ * update package.json file
+*/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ del = require('del'),
+ fs = require('fs'),
+ path = require('path'),
+ runSequence = require('run-sequence'),
+ mergeStream = require('merge-stream'),
+
+ // admin dependencies
+ concatFileNames = require('gulp-concat-filenames'),
+ debug = require('gulp-debug'),
+ flatten = require('gulp-flatten'),
+ git = require('gulp-git'),
+ jsonEditor = require('gulp-json-editor'),
+ plumber = require('gulp-plumber'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ tap = require('gulp-tap'),
+
+ // config
+ config = require('../../config/user'),
+ release = require('../../config/admin/release'),
+ project = require('../../config/project/release'),
+
+ // shorthand
+ version = project.version,
+ output = config.paths.output
+
+;
+
+
+module.exports = function(callback) {
+ var
+ stream,
+ index,
+ tasks = []
+ ;
+
+ for(index in release.distributions) {
+
+ var
+ distribution = release.distributions[index]
+ ;
+
+ // streams... designed to save time and make coding fun...
+ (function(distribution) {
+
+ var
+ distLowerCase = distribution.toLowerCase(),
+ outputDirectory = path.join(release.outputRoot, distLowerCase),
+ packageFile = path.join(outputDirectory, release.files.npm),
+ repoName = release.distRepoRoot + distribution,
+ regExp = {
+ match : {
+ files : '{files}',
+ version : '{version}'
+ }
+ },
+ task = {
+ all : distribution + ' copying files',
+ repo : distribution + ' create repo',
+ meteor : distribution + ' create meteor package.js',
+ package : distribution + ' create package.json'
+ },
+ gatherFiles,
+ createList
+ ;
+
+ // get files for meteor
+ gatherFiles = function(dir) {
+ var
+ dir = dir || path.resolve('.'),
+ list = fs.readdirSync(dir),
+ omitted = [
+ '.git',
+ 'node_modules',
+ 'package.js',
+ 'LICENSE',
+ 'README.md',
+ 'package.json',
+ 'bower.json',
+ '.gitignore'
+ ],
+ files = []
+ ;
+ list.forEach(function(file) {
+ var
+ isOmitted = (omitted.indexOf(file) > -1),
+ filePath = path.join(dir, file),
+ stat = fs.statSync(filePath)
+ ;
+ if(!isOmitted) {
+ if(stat && stat.isDirectory()) {
+ files = files.concat(gatherFiles(filePath));
+ }
+ else {
+ files.push(filePath.replace(outputDirectory + path.sep, ''));
+ }
+ }
+ });
+ return files;
+ };
+
+ // spaces out list correctly
+ createList = function(files) {
+ var filenames = '';
+ for(var file in files) {
+ if(file == (files.length - 1) ) {
+ filenames += "'" + files[file] + "'";
+ }
+ else {
+ filenames += "'" + files[file] + "',\n ";
+ }
+ }
+ return filenames;
+ };
+
+
+ gulp.task(task.meteor, function() {
+ var
+ files = gatherFiles(outputDirectory),
+ filenames = createList(files)
+ ;
+ gulp.src(release.templates.meteor[distLowerCase])
+ .pipe(plumber())
+ .pipe(flatten())
+ .pipe(replace(regExp.match.version, version))
+ .pipe(replace(regExp.match.files, filenames))
+ .pipe(rename(release.files.meteor))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ if(distribution == 'CSS') {
+ gulp.task(task.repo, function() {
+ var
+ themes,
+ components,
+ releases
+ ;
+ themes = gulp.src('dist/themes/default/**/*', { base: 'dist/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ components = gulp.src('dist/components/*', { base: 'dist/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ releases = gulp.src('dist/*', { base: 'dist/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ return mergeStream(themes, components, releases);
+ });
+ }
+ else if(distribution == 'LESS') {
+ gulp.task(task.repo, function() {
+ var
+ definitions,
+ themeImport,
+ themeConfig,
+ siteTheme,
+ themes
+ ;
+ definitions = gulp.src('src/definitions/**/*', { base: 'src/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ themeImport = gulp.src('src/semantic.less', { base: 'src/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ themeImport = gulp.src('src/theme.less', { base: 'src/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ themeConfig = gulp.src('src/theme.config.example', { base: 'src/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ siteTheme = gulp.src('src/_site/**/*', { base: 'src/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ themes = gulp.src('src/themes/**/*', { base: 'src/' })
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ return mergeStream(definitions, themeImport, themeConfig, siteTheme, themes);
+ });
+ }
+
+ // extend package.json
+ gulp.task(task.package, function() {
+ return gulp.src(packageFile)
+ .pipe(plumber())
+ .pipe(jsonEditor(function(package) {
+ if(version) {
+ package.version = version;
+ }
+ return package;
+ }))
+ .pipe(gulp.dest(outputDirectory))
+ ;
+ });
+
+ tasks.push(task.meteor);
+ tasks.push(task.repo);
+ tasks.push(task.package);
+
+ })(distribution);
+ }
+ runSequence(tasks, callback);
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/distributions/init.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/distributions/init.js b/semantic/tasks/admin/distributions/init.js
new file mode 100644
index 0000000..8ed75a0
--- /dev/null
+++ b/semantic/tasks/admin/distributions/init.js
@@ -0,0 +1,169 @@
+/*******************************
+ Init Dist Repos
+*******************************/
+
+/*
+
+ This task pulls the latest version of distribution from GitHub
+
+ * Creates new repo if doesnt exist (locally & GitHub)
+ * Adds remote it doesnt exists
+ * Pulls latest changes from repo
+
+*/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ del = require('del'),
+ fs = require('fs'),
+ path = require('path'),
+ git = require('gulp-git'),
+ githubAPI = require('github'),
+ mkdirp = require('mkdirp'),
+
+ // admin files
+ github = require('../../config/admin/github.js'),
+ release = require('../../config/admin/release'),
+ project = require('../../config/project/release'),
+
+
+ // oAuth configuration for GitHub
+ oAuth = fs.existsSync(__dirname + '/../../config/admin/oauth.js')
+ ? require('../../config/admin/oauth')
+ : false,
+
+ // shorthand
+ version = project.version
+;
+
+module.exports = function(callback) {
+
+ var
+ index = -1,
+ total = release.distributions.length,
+ timer,
+ stream,
+ stepRepo
+ ;
+
+ if(!oAuth) {
+ console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');
+ return;
+ }
+
+ // Do Git commands synchronously per component, to avoid issues
+ stepRepo = function() {
+
+ index = index + 1;
+
+ if(index >= total) {
+ callback();
+ return;
+ }
+
+ var
+ component = release.distributions[index],
+ lowerCaseComponent = component.toLowerCase(),
+ outputDirectory = path.resolve(release.outputRoot + lowerCaseComponent),
+ repoName = release.distRepoRoot + component,
+
+ gitOptions = { cwd: outputDirectory },
+ pullOptions = { args: '-q', cwd: outputDirectory, quiet: true },
+ resetOptions = { args: '-q --hard', cwd: outputDirectory, quiet: true },
+ gitURL = 'git@github.com:' + release.org + '/' + repoName + '.git',
+ repoURL = 'https://github.com/' + release.org + '/' + repoName + '/',
+ localRepoSetup = fs.existsSync(path.join(outputDirectory, '.git'))
+ ;
+
+ console.log('Processing repository: ' + outputDirectory);
+
+ // create folder if doesn't exist
+ if( !fs.existsSync(outputDirectory) ) {
+ mkdirp.sync(outputDirectory);
+ }
+
+ // clean folder
+ if(release.outputRoot.search('../repos') == 0) {
+ console.info('Cleaning dir', outputDirectory);
+ del.sync([outputDirectory + '**/*'], {silent: true, force: true});
+ }
+
+ // set-up local repo
+ function setupRepo() {
+ if(localRepoSetup) {
+ addRemote();
+ }
+ else {
+ initRepo();
+ }
+ }
+
+ function initRepo() {
+ console.info('Initializing repository for ' + component);
+ git.init(gitOptions, function(error) {
+ if(error) {
+ console.error('Error initializing repo', error);
+ }
+ addRemote();
+ });
+ }
+
+ function createRepo() {
+ console.info('Creating GitHub repo ' + repoURL);
+ github.repos.createFromOrg({
+ org : release.org,
+ name : repoName,
+ homepage : release.homepage
+ }, function() {
+ setupRepo();
+ });
+ }
+
+ function addRemote() {
+ console.info('Adding remote origin as ' + gitURL);
+ git.addRemote('origin', gitURL, gitOptions, function(){
+ pullFiles();
+ });
+ }
+
+ function pullFiles() {
+ console.info('Pulling ' + component + ' files');
+ git.pull('origin', 'master', pullOptions, function(error) {
+ resetFiles();
+ });
+ }
+
+ function resetFiles() {
+ console.info('Resetting files to head');
+ git.reset('HEAD', resetOptions, function(error) {
+ nextRepo();
+ });
+ }
+
+ function nextRepo() {
+ //console.log('Sleeping for 1 second...');
+ // avoid rate throttling
+ global.clearTimeout(timer);
+ timer = global.setTimeout(function() {
+ stepRepo()
+ }, 0);
+ }
+
+
+ if(localRepoSetup) {
+ pullFiles();
+ }
+ else {
+ setupRepo();
+ // createRepo() only use to create remote repo (easier to do manually)
+ }
+
+ };
+
+ stepRepo();
+
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/distributions/update.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/distributions/update.js b/semantic/tasks/admin/distributions/update.js
new file mode 100644
index 0000000..e7b3f2c
--- /dev/null
+++ b/semantic/tasks/admin/distributions/update.js
@@ -0,0 +1,179 @@
+/*******************************
+ Update Repos
+*******************************/
+
+/*
+
+ This task update all SUI individual distribution repos with new versions of distributions
+
+ * Commits changes from create repo
+ * Pushes changes to GitHub
+ * Tag new releases if version changed in main repo
+
+*/
+
+var
+ gulp = require('gulp'),
+
+ // node dependencies
+ console = require('better-console'),
+ fs = require('fs'),
+ path = require('path'),
+ git = require('gulp-git'),
+ githubAPI = require('github'),
+ requireDotFile = require('require-dot-file'),
+
+ // admin files
+ github = require('../../config/admin/github.js'),
+ release = require('../../config/admin/release'),
+ project = require('../../config/project/release'),
+
+
+ // oAuth configuration for GitHub
+ oAuth = fs.existsSync(__dirname + '/../../config/admin/oauth.js')
+ ? require('../../config/admin/oauth')
+ : false,
+
+ // shorthand
+ version = project.version
+;
+
+module.exports = function(callback) {
+
+ var
+ index = -1,
+ total = release.distributions.length,
+ timer,
+ stream,
+ stepRepo
+ ;
+
+ if(!oAuth) {
+ console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');
+ return;
+ }
+
+ // Do Git commands synchronously per distribution, to avoid issues
+ stepRepo = function() {
+
+ index = index + 1;
+ if(index >= total) {
+ callback();
+ return;
+ }
+
+ var
+ distribution = release.distributions[index],
+ outputDirectory = path.resolve(path.join(release.outputRoot, distribution.toLowerCase() )),
+ repoName = release.distRepoRoot + distribution,
+
+ commitArgs = (oAuth.name !== undefined && oAuth.email !== undefined)
+ ? '--author "' + oAuth.name + ' <' + oAuth.email + '>"'
+ : '',
+
+ distributionPackage = fs.existsSync(outputDirectory + 'package.json' )
+ ? require(outputDirectory + 'package.json')
+ : false,
+
+ isNewVersion = (version && distributionPackage.version != version),
+
+ commitMessage = (isNewVersion)
+ ? 'Updated distribution to version ' + version
+ : 'Updated files from main repo',
+
+ gitOptions = { cwd: outputDirectory },
+ commitOptions = { args: commitArgs, cwd: outputDirectory },
+ releaseOptions = { tag_name: version, owner: release.org, repo: repoName },
+
+ fileModeOptions = { args : 'config core.fileMode false', cwd: outputDirectory },
+ usernameOptions = { args : 'config user.name "' + oAuth.name + '"', cwd: outputDirectory },
+ emailOptions = { args : 'config user.email "' + oAuth.email + '"', cwd: outputDirectory },
+ versionOptions = { args : 'rev-parse --verify HEAD', cwd: outputDirectory },
+
+ localRepoSetup = fs.existsSync(path.join(outputDirectory, '.git')),
+ canProceed = true
+ ;
+
+
+ console.info('Processing repository:' + outputDirectory);
+
+ function setConfig() {
+ git.exec(fileModeOptions, function() {
+ git.exec(usernameOptions, function () {
+ git.exec(emailOptions, function () {
+ commitFiles();
+ });
+ });
+ });
+ }
+
+ // standard path
+ function commitFiles() {
+ // commit files
+ console.info('Committing ' + distribution + ' files', commitArgs);
+ gulp.src('./', gitOptions)
+ .pipe(git.add(gitOptions))
+ .pipe(git.commit(commitMessage, commitOptions))
+ .on('error', function(error) {
+ // canProceed = false; bug in git commit <https://github.com/stevelacy/gulp-git/issues/49>
+ })
+ .on('finish', function(callback) {
+ if(canProceed) {
+ pushFiles();
+ }
+ else {
+ console.info('Nothing new to commit');
+ nextRepo();
+ }
+ })
+ ;
+ }
+
+ // push changes to remote
+ function pushFiles() {
+ console.info('Pushing files for ' + distribution);
+ git.push('origin', 'master', { args: '', cwd: outputDirectory }, function(error) {
+ console.info('Push completed successfully');
+ getSHA();
+ });
+ }
+
+ // gets SHA of last commit
+ function getSHA() {
+ git.exec(versionOptions, function(error, version) {
+ version = version.trim();
+ createRelease(version);
+ });
+ }
+
+ // create release on GitHub.com
+ function createRelease(version) {
+ if(version) {
+ releaseOptions.target_commitish = version;
+ }
+ github.releases.createRelease(releaseOptions, function() {
+ nextRepo();
+ });
+ }
+
+ // Steps to next repository
+ function nextRepo() {
+ console.log('Sleeping for 1 second...');
+ // avoid rate throttling
+ global.clearTimeout(timer);
+ timer = global.setTimeout(stepRepo, 500);
+ }
+
+
+ if(localRepoSetup) {
+ setConfig();
+ }
+ else {
+ console.error('Repository must be setup before running update distributions');
+ }
+
+ };
+
+ stepRepo();
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/publish.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/publish.js b/semantic/tasks/admin/publish.js
new file mode 100644
index 0000000..e80c86a
--- /dev/null
+++ b/semantic/tasks/admin/publish.js
@@ -0,0 +1,25 @@
+/*******************************
+ Release All
+*******************************/
+
+/*
+ This task update all SUI individual component repos with new versions of components
+
+ * Commits changes from create components to GitHub and Tags
+
+*/
+
+var
+ runSequence = require('run-sequence')
+;
+
+/* Release All */
+module.exports = function(callback) {
+
+ runSequence(
+ 'update distributions', // commit less/css versions to github
+ 'update components', // commit components to github
+ callback
+ );
+
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/register.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/register.js b/semantic/tasks/admin/register.js
new file mode 100644
index 0000000..12ef1c3
--- /dev/null
+++ b/semantic/tasks/admin/register.js
@@ -0,0 +1,55 @@
+/*******************************
+ Register PM
+*******************************/
+
+/*
+ Task to register component repos with Package Managers
+ * Registers component with bower
+ * Registers component with NPM
+*/
+
+var
+ // node dependencies
+ process = require('child_process'),
+
+ // config
+ release = require('../config/admin/release'),
+
+ // register components and distributions
+ repos = release.distributions.concat(release.components),
+ total = repos.length,
+ index = -1,
+
+ stream,
+ stepRepo
+;
+
+module.exports = function(callback) {
+
+ console.log('Registering repos with package managers');
+
+ // Do Git commands synchronously per component, to avoid issues
+ stepRepo = function() {
+ index = index + 1;
+ if(index >= total) {
+ callback();
+ return;
+ }
+ var
+ repo = repos[index].toLowerCase(),
+ outputDirectory = release.outputRoot + repo + '/',
+ exec = process.exec,
+ execSettings = {cwd: outputDirectory},
+ updateNPM = 'npm publish'
+ ;
+
+ /* Register with NPM */
+ exec(updateNPM, execSettings, function(err, stdout, stderr) {
+ console.log(err, stdout, stderr);
+ stepRepo();
+ });
+
+ };
+ stepRepo();
+};
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/admin/release.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/admin/release.js b/semantic/tasks/admin/release.js
new file mode 100644
index 0000000..a247e8b
--- /dev/null
+++ b/semantic/tasks/admin/release.js
@@ -0,0 +1,29 @@
+/*******************************
+ Release
+*******************************/
+
+/*
+ This task update all SUI individual component repos with new versions of components
+
+ * Initializes repositories with current versions
+ * Creates local files at ../distributions/ with each repo for release
+
+*/
+
+var
+ runSequence = require('run-sequence')
+;
+
+/* Release All */
+module.exports = function(callback) {
+
+ runSequence(
+ //'build', // build Semantic
+ 'init distributions', // sync with current github version
+ 'create distributions', // update each repo with changes from master repo
+ 'init components', // sync with current github version
+ 'create components', // update each repo
+ callback
+ );
+
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/build.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/build.js b/semantic/tasks/build.js
new file mode 100644
index 0000000..56ea879
--- /dev/null
+++ b/semantic/tasks/build.js
@@ -0,0 +1,50 @@
+/*******************************
+ Build Task
+*******************************/
+
+var
+ // dependencies
+ gulp = require('gulp-help')(require('gulp')),
+ runSequence = require('run-sequence'),
+
+ // config
+ config = require('./config/user'),
+ install = require('./config/project/install'),
+
+ // task sequence
+ tasks = []
+;
+
+
+// sub-tasks
+if(config.rtl) {
+ require('./collections/rtl')(gulp);
+}
+require('./collections/build')(gulp);
+
+
+module.exports = function(callback) {
+
+ console.info('Building Semantic');
+
+ if( !install.isSetup() ) {
+ console.error('Cannot find semantic.json. Run "gulp install" to set-up Semantic');
+ return 1;
+ }
+
+ // check for right-to-left (RTL) language
+ if(config.rtl === true || config.rtl === 'Yes') {
+ gulp.start('build-rtl');
+ return;
+ }
+
+ if(config.rtl == 'both') {
+ tasks.push('build-rtl');
+ }
+
+ tasks.push('build-javascript');
+ tasks.push('build-css');
+ tasks.push('build-assets');
+
+ runSequence(tasks, callback);
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/check-install.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/check-install.js b/semantic/tasks/check-install.js
new file mode 100644
index 0000000..9bab87e
--- /dev/null
+++ b/semantic/tasks/check-install.js
@@ -0,0 +1,28 @@
+/*******************************
+ Check Install
+*******************************/
+
+var
+ // node dependencies
+ gulp = require('gulp'),
+ fs = require('fs'),
+ console = require('better-console'),
+ install = require('./config/project/install')
+;
+
+// export task
+module.exports = function() {
+
+ setTimeout(function() {
+ if( !install.isSetup() ) {
+ console.log('Starting install...');
+ gulp.start('install');
+ return;
+ }
+ else {
+ gulp.start('watch');
+ }
+ }, 50); // Delay to allow console.clear to remove messages from check event
+
+
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/clean.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/clean.js b/semantic/tasks/clean.js
new file mode 100644
index 0000000..f435b4e
--- /dev/null
+++ b/semantic/tasks/clean.js
@@ -0,0 +1,14 @@
+/*******************************
+ Clean Task
+*******************************/
+
+var
+ del = require('del'),
+ config = require('./config/user'),
+ tasks = require('./config/tasks')
+;
+
+// cleans distribution files
+module.exports = function(callback) {
+ return del([config.paths.clean], tasks.settings.del, callback);
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/collections/README.md
----------------------------------------------------------------------
diff --git a/semantic/tasks/collections/README.md b/semantic/tasks/collections/README.md
new file mode 100644
index 0000000..1cae511
--- /dev/null
+++ b/semantic/tasks/collections/README.md
@@ -0,0 +1,16 @@
+## How to use
+
+These are collections of tasks that are imported together.
+
+To import them into gulp:
+```javascript
+var
+ gulp = require('gulp'),
+ // modified to point to semantic folder
+ install = require('tasks/collections/install')
+;
+gulp = install(gulp);
+
+// tasks are now injected and ready to be used
+gulp.start('install');
+```
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/collections/admin.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/collections/admin.js b/semantic/tasks/collections/admin.js
new file mode 100644
index 0000000..a384d1f
--- /dev/null
+++ b/semantic/tasks/collections/admin.js
@@ -0,0 +1,49 @@
+/*******************************
+ Admin Task Collection
+*******************************/
+
+/*
+ This are tasks to be run by project maintainers
+ - Creating Component Repos
+ - Syncing with GitHub via APIs
+ - Modifying package files
+*/
+
+/*******************************
+ Tasks
+*******************************/
+
+
+module.exports = function(gulp) {
+ var
+ // less/css distributions
+ initComponents = require('../admin/components/init'),
+ createComponents = require('../admin/components/create'),
+ updateComponents = require('../admin/components/update'),
+
+ // single component releases
+ initDistributions = require('../admin/distributions/init'),
+ createDistributions = require('../admin/distributions/create'),
+ updateDistributions = require('../admin/distributions/update'),
+
+ release = require('../admin/release'),
+ publish = require('../admin/publish'),
+ register = require('../admin/register')
+ ;
+
+ /* Release */
+ gulp.task('init distributions', 'Grabs each component from GitHub', initDistributions);
+ gulp.task('create distributions', 'Updates files in each repo', createDistributions);
+ gulp.task('init components', 'Grabs each component from GitHub', initComponents);
+ gulp.task('create components', 'Updates files in each repo', createComponents);
+
+ /* Publish */
+ gulp.task('update distributions', 'Commits component updates from create to GitHub', updateDistributions);
+ gulp.task('update components', 'Commits component updates from create to GitHub', updateComponents);
+
+ /* Tasks */
+ gulp.task('release', 'Stages changes in GitHub repos for all distributions', release);
+ gulp.task('publish', 'Publishes all releases (components, package)', publish);
+ gulp.task('register', 'Registers all packages with NPM', register);
+
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/collections/build.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/collections/build.js b/semantic/tasks/collections/build.js
new file mode 100644
index 0000000..f7ea287
--- /dev/null
+++ b/semantic/tasks/collections/build.js
@@ -0,0 +1,19 @@
+/*******************************
+ Define Sub-Tasks
+*******************************/
+
+module.exports = function(gulp) {
+
+ var
+ // build sub-tasks
+ buildJS = require('./../build/javascript'),
+ buildCSS = require('./../build/css'),
+ buildAssets = require('./../build/assets')
+ ;
+
+ // in case these tasks are undefined during import, less make sure these are available in scope
+ gulp.task('build-javascript', 'Builds all javascript from source', buildJS);
+ gulp.task('build-css', 'Builds all css from source', buildCSS);
+ gulp.task('build-assets', 'Copies all assets from source', buildAssets);
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/collections/internal.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/collections/internal.js b/semantic/tasks/collections/internal.js
new file mode 100644
index 0000000..f9067f2
--- /dev/null
+++ b/semantic/tasks/collections/internal.js
@@ -0,0 +1,227 @@
+/*******************************
+ Internal Task Collection
+*******************************/
+
+/* These tasks create packaged files from **dist** components
+ Not intended to be called directly by a user because
+ these do not build fresh from **src**
+*/
+
+module.exports = function(gulp) {
+
+ var
+ // node dependencies
+ fs = require('fs'),
+ chmod = require('gulp-chmod'),
+ concat = require('gulp-concat'),
+ concatCSS = require('gulp-concat-css'),
+ clone = require('gulp-clone'),
+ dedupe = require('gulp-dedupe'),
+ gulpif = require('gulp-if'),
+ header = require('gulp-header'),
+ less = require('gulp-less'),
+ minifyCSS = require('gulp-minify-css'),
+ plumber = require('gulp-plumber'),
+ print = require('gulp-print'),
+ rename = require('gulp-rename'),
+ replace = require('gulp-replace'),
+ uglify = require('gulp-uglify'),
+
+ // user config
+ config = require('./../config/user'),
+ docsConfig = require('./../config/docs'),
+
+ // install config
+ tasks = require('./../config/tasks'),
+ release = require('./../config/project/release'),
+
+ // shorthand
+ globs = config.globs,
+ assets = config.paths.assets,
+ output = config.paths.output,
+
+ banner = tasks.banner,
+ filenames = tasks.filenames,
+ log = tasks.log,
+ settings = tasks.settings
+ ;
+
+ /*--------------
+ Packaged
+ ---------------*/
+
+ gulp.task('package uncompressed css', function() {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')
+ .pipe(plumber())
+ .pipe(dedupe())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedCSS, settings.concatCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package compressed css', function() {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')
+ .pipe(plumber())
+ .pipe(dedupe())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedMinifiedCSS, settings.concatCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(minifyCSS(settings.concatMinify))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package uncompressed js', function() {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.js')
+ .pipe(plumber())
+ .pipe(dedupe())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concat(filenames.concatenatedJS))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package compressed js', function() {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.js')
+ .pipe(plumber())
+ .pipe(dedupe())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concat(filenames.concatenatedMinifiedJS))
+ .pipe(uglify(settings.concatUglify))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ /*--------------
+ RTL
+ ---------------*/
+
+ if(config.rtl) {
+
+ gulp.task('package uncompressed rtl css', function () {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignoredRTL + '.rtl.css')
+ .pipe(dedupe())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedRTLCSS, settings.concatCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package compressed rtl css', function () {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignoredRTL + '.rtl.css')
+ .pipe(dedupe())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedMinifiedRTLCSS, settings.concatCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(minifyCSS(settings.concatMinify))
+ .pipe(header(banner, settings.header))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package uncompressed docs css', function() {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')
+ .pipe(dedupe())
+ .pipe(plumber())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedCSS, settings.concatCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package compressed docs css', function() {
+ return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')
+ .pipe(dedupe())
+ .pipe(plumber())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedMinifiedCSS, settings.concatCSS))
+ .pipe(minifyCSS(settings.concatMinify))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(output.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ }
+
+ /*--------------
+ Docs
+ ---------------*/
+
+ var
+ docsOutput = docsConfig.paths.output
+ ;
+
+ gulp.task('package uncompressed docs css', function() {
+ return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.css')
+ .pipe(dedupe())
+ .pipe(plumber())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedCSS, settings.concatCSS))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(docsOutput.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package compressed docs css', function() {
+ return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.css')
+ .pipe(dedupe())
+ .pipe(plumber())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concatCSS(filenames.concatenatedMinifiedCSS, settings.concatCSS))
+ .pipe(minifyCSS(settings.concatMinify))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(docsOutput.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package uncompressed docs js', function() {
+ return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.js')
+ .pipe(dedupe())
+ .pipe(plumber())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concat(filenames.concatenatedJS))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(docsOutput.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+ gulp.task('package compressed docs js', function() {
+ return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.js')
+ .pipe(dedupe())
+ .pipe(plumber())
+ .pipe(replace(assets.uncompressed, assets.packaged))
+ .pipe(concat(filenames.concatenatedMinifiedJS))
+ .pipe(uglify(settings.concatUglify))
+ .pipe(header(banner, settings.header))
+ .pipe(gulpif(config.hasPermission, chmod(config.permission)))
+ .pipe(gulp.dest(docsOutput.packaged))
+ .pipe(print(log.created))
+ ;
+ });
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/collections/rtl.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/collections/rtl.js b/semantic/tasks/collections/rtl.js
new file mode 100644
index 0000000..4c8e70a
--- /dev/null
+++ b/semantic/tasks/collections/rtl.js
@@ -0,0 +1,16 @@
+/*******************************
+ Define Sub-Tasks
+*******************************/
+
+module.exports = function(gulp) {
+
+ var
+ // rtl
+ buildRTL = require('./../rtl/build'),
+ watchRTL = require('./../rtl/watch')
+ ;
+
+ gulp.task('watch-rtl', 'Build all files as RTL', watchRTL);
+ gulp.task('build-rtl', 'Watch files as RTL ', buildRTL);
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/github.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/github.js b/semantic/tasks/config/admin/github.js
new file mode 100644
index 0000000..6f0f4c2
--- /dev/null
+++ b/semantic/tasks/config/admin/github.js
@@ -0,0 +1,37 @@
+/*******************************
+ GitHub Login
+*******************************/
+/*
+ Logs into GitHub using OAuth
+*/
+
+var
+ fs = require('fs'),
+ path = require('path'),
+ githubAPI = require('github'),
+
+ // stores oauth info for GitHub API
+ oAuthConfig = path.join(__dirname, 'oauth.js'),
+ oAuth = fs.existsSync(oAuthConfig)
+ ? require(oAuthConfig)
+ : false,
+ github
+;
+
+if(!oAuth) {
+ console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');
+}
+
+github = new githubAPI({
+ version : '3.0.0',
+ debug : true,
+ protocol : 'https',
+ timeout : 5000
+});
+
+github.authenticate({
+ type: 'oauth',
+ token: oAuth.token
+});
+
+module.exports = github;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/oauth.example.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/oauth.example.js b/semantic/tasks/config/admin/oauth.example.js
new file mode 100644
index 0000000..c4d864a
--- /dev/null
+++ b/semantic/tasks/config/admin/oauth.example.js
@@ -0,0 +1,11 @@
+/*
+ Used to import GitHub Auth Token
+ To Automate GitHub Updates
+*/
+
+module.exports = {
+ token : 'AN-OAUTH2-TOKEN',
+ username : 'github-username',
+ name : 'Your Name',
+ email : 'user@email.com'
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/release.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/release.js b/semantic/tasks/config/admin/release.js
new file mode 100644
index 0000000..94ee736
--- /dev/null
+++ b/semantic/tasks/config/admin/release.js
@@ -0,0 +1,111 @@
+/*******************************
+ Release Settings
+*******************************/
+
+// release settings
+module.exports = {
+
+ // path to components for repos
+ source : './dist/components/',
+
+ // modified asset paths for component repos
+ paths: {
+ source : '../themes/default/assets/',
+ output : 'assets/'
+ },
+
+ templates: {
+ bower : './tasks/config/admin/templates/bower.json',
+ composer : './tasks/config/admin/templates/composer.json',
+ package : './tasks/config/admin/templates/package.json',
+ meteor : {
+ css : './tasks/config/admin/templates/css-package.js',
+ component : './tasks/config/admin/templates/component-package.js',
+ less : './tasks/config/admin/templates/less-package.js',
+ },
+ readme : './tasks/config/admin/templates/README.md',
+ notes : './RELEASE-NOTES.md'
+ },
+
+ org : 'Semantic-Org',
+ repo : 'Semantic-UI',
+
+ // files created for package managers
+ files: {
+ composer : 'composer.json',
+ config : 'semantic.json',
+ npm : 'package.json',
+ meteor : 'package.js'
+ },
+
+ // root name for distribution repos
+ distRepoRoot : 'Semantic-UI-',
+
+ // root name for single component repos
+ componentRepoRoot : 'UI-',
+
+ // root name for package managers
+ packageRoot : 'semantic-ui-',
+
+ // root path to repos
+ outputRoot : '../repos/',
+
+ homepage : 'http://www.semantic-ui.com',
+
+ // distributions that get separate repos
+ distributions: [
+ 'LESS',
+ 'CSS'
+ ],
+
+ // components that get separate repositories for bower/npm
+ components : [
+ 'accordion',
+ 'ad',
+ 'api',
+ 'breadcrumb',
+ 'button',
+ 'card',
+ 'checkbox',
+ 'comment',
+ 'container',
+ 'dimmer',
+ 'divider',
+ 'dropdown',
+ 'embed',
+ 'feed',
+ 'flag',
+ 'form',
+ 'grid',
+ 'header',
+ 'icon',
+ 'image',
+ 'input',
+ 'item',
+ 'label',
+ 'list',
+ 'loader',
+ 'menu',
+ 'message',
+ 'modal',
+ 'nag',
+ 'popup',
+ 'progress',
+ 'rail',
+ 'rating',
+ 'reset',
+ 'reveal',
+ 'search',
+ 'segment',
+ 'shape',
+ 'sidebar',
+ 'site',
+ 'statistic',
+ 'step',
+ 'sticky',
+ 'tab',
+ 'table',
+ 'transition',
+ 'visibility'
+ ]
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/templates/README.md
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/templates/README.md b/semantic/tasks/config/admin/templates/README.md
new file mode 100644
index 0000000..ec1d4eb
--- /dev/null
+++ b/semantic/tasks/config/admin/templates/README.md
@@ -0,0 +1,32 @@
+# Semantic {Component}
+
+This repository contains pre-compiled {component} files using the default themes. This is intended for use in projects that do not need all the bells and whistles of Semantic UI, and want to keep file size to a minimum.
+
+For the latest changes please see the [Release Notes](https://github.com/Semantic-Org/UI-{Component}/blob/master/RELEASE-NOTES.md)
+
+**Special Note**
+An update in `2.0.8` has fixed an issue which may have prevented some single component modules from working correctly. Please see notes in [this pull request](https://github.com/Semantic-Org/Semantic-UI/pull/2816).
+
+If you're looking for the full version of Semantic including all components and build tools [check out the main project repository](https://github.com/Semantic-Org/Semantic-UI/tree/1.0)
+
+#### To install with Bower
+```
+bower install semantic-ui-{component}
+```
+
+#### To install with NPM
+```
+npm install semantic-ui-{component}
+```
+
+#### To install with Meteor
+```
+meteor add semantic:ui-{component}
+```
+
+
+## Addendum
+
+This element's definitions (required class names, html structures) are available in the [UI Docs](http://www.semantic-ui.com)
+
+Please consider checking out [all the benefits to theming](http://www.learnsemantic.com/guide/expert.html) before using these stand-alone releases.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/templates/bower.json
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/templates/bower.json b/semantic/tasks/config/admin/templates/bower.json
new file mode 100644
index 0000000..ab4951a
--- /dev/null
+++ b/semantic/tasks/config/admin/templates/bower.json
@@ -0,0 +1,29 @@
+{
+ "name" : "Component",
+ "description" : "Component distribution",
+ "homepage" : "http://www.semantic-ui.com",
+ "author": {
+ "name" : "Jack Lukic",
+ "web" : "http://www.jacklukic.com"
+ },
+ "ignore": [
+ "./index.js"
+ ],
+ "keywords": [
+ "semantic",
+ "ui",
+ "css3",
+ "framework"
+ ],
+ "license" : [
+ "http://semantic-ui.mit-license.org/"
+ ],
+ "ignore": [
+ "docs",
+ "node",
+ "server",
+ "spec",
+ "src",
+ "test"
+ ]
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/templates/component-package.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/templates/component-package.js b/semantic/tasks/config/admin/templates/component-package.js
new file mode 100644
index 0000000..74cd51b
--- /dev/null
+++ b/semantic/tasks/config/admin/templates/component-package.js
@@ -0,0 +1,14 @@
+
+Package.describe({
+ name : 'semantic:ui-{component}',
+ summary : 'Semantic UI - {Component}: Single component release',
+ version : '{version}',
+ git : 'git://github.com/Semantic-Org/UI-{Component}.git',
+});
+
+Package.onUse(function(api) {
+ api.versionsFrom('1.0');
+ api.addFiles([
+ {files}
+ ], 'client');
+});
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/templates/composer.json
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/templates/composer.json b/semantic/tasks/config/admin/templates/composer.json
new file mode 100644
index 0000000..b47d2e1
--- /dev/null
+++ b/semantic/tasks/config/admin/templates/composer.json
@@ -0,0 +1,20 @@
+{
+ "name" : "semantic/ui",
+ "description" : "Semantic empowers designers and developers by creating a shared vocabulary for UI.",
+ "homepage" : "http://www.semantic-ui.com",
+ "authors": [
+ {
+ "name" : "Jack Lukic",
+ "email": "jacklukic@gmail.com",
+ "web" : "http://www.jacklukic.com",
+ "role" : "Creator"
+ }
+ ],
+ "keywords": [
+ "semantic",
+ "ui",
+ "css",
+ "framework"
+ ],
+ "license" : "MIT"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/templates/css-package.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/templates/css-package.js b/semantic/tasks/config/admin/templates/css-package.js
new file mode 100644
index 0000000..0949ce3
--- /dev/null
+++ b/semantic/tasks/config/admin/templates/css-package.js
@@ -0,0 +1,34 @@
+var
+ where = 'client' // Adds files only to the client
+;
+
+Package.describe({
+ name : 'semantic:ui-css',
+ summary : 'Semantic UI - CSS Release of Semantic UI',
+ version : '{version}',
+ git : 'git://github.com/Semantic-Org/Semantic-UI-CSS.git',
+});
+
+Package.onUse(function(api) {
+
+ api.versionsFrom('1.0');
+
+ api.use('jquery', 'client');
+
+ api.addFiles([
+ // icons
+ 'themes/default/assets/fonts/icons.eot',
+ 'themes/default/assets/fonts/icons.svg',
+ 'themes/default/assets/fonts/icons.ttf',
+ 'themes/default/assets/fonts/icons.woff',
+ 'themes/default/assets/fonts/icons.woff2',
+
+ // flags
+ 'themes/default/assets/images/flags.png',
+
+ // release
+ 'semantic.css',
+ 'semantic.js'
+ ], 'client');
+
+});
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/templates/less-package.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/templates/less-package.js b/semantic/tasks/config/admin/templates/less-package.js
new file mode 100644
index 0000000..e2f8a25
--- /dev/null
+++ b/semantic/tasks/config/admin/templates/less-package.js
@@ -0,0 +1,21 @@
+var
+ where = 'client' // Adds files only to the client
+;
+
+Package.describe({
+ name : 'semantic:ui',
+ summary : 'Semantic UI - LESS Release of Semantic UI',
+ version : '{version}',
+ git : 'git://github.com/Semantic-Org/Semantic-UI-LESS.git',
+});
+
+Package.onUse(function(api) {
+
+ api.versionsFrom('1.0');
+ api.use('less', 'client');
+
+ api.addFiles([
+ {files}
+ ], 'client');
+
+});
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/admin/templates/package.json
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/admin/templates/package.json b/semantic/tasks/config/admin/templates/package.json
new file mode 100644
index 0000000..5d96785
--- /dev/null
+++ b/semantic/tasks/config/admin/templates/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "semantic",
+ "version": "1.0.0",
+ "title": "Semantic UI",
+ "description": "Semantic empowers designers and developers by creating a shared vocabulary for UI.",
+ "homepage": "http://www.semantic-ui.com",
+ "author": "Jack Lukic <ja...@semantic-ui.com>",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/Semantic-Org/Semantic-UI.git"
+ },
+ "bugs": {
+ "url": "https://github.com/Semantic-Org/Semantic-UI/issues"
+ },
+ "devDependencies": {}
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/defaults.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/defaults.js b/semantic/tasks/config/defaults.js
new file mode 100644
index 0000000..2c0e9eb
--- /dev/null
+++ b/semantic/tasks/config/defaults.js
@@ -0,0 +1,117 @@
+/*******************************
+ Default Paths
+*******************************/
+
+module.exports = {
+
+ // base path added to all other paths
+ base : '',
+
+ // base path when installed with npm
+ pmRoot: 'semantic/',
+
+ // octal permission for output files, i.e. 644 (false does not adjust)
+ permission : 744,
+
+ // whether to generate rtl files
+ rtl : false,
+
+ // file paths
+ files: {
+ config : 'semantic.json',
+ site : 'src/site',
+ theme : 'src/theme.config'
+ },
+
+ // folder paths
+ paths: {
+ source: {
+ config : 'src/theme.config',
+ definitions : 'src/definitions/',
+ site : 'src/site/',
+ themes : 'src/themes/'
+ },
+ output: {
+ packaged : 'dist/',
+ uncompressed : 'dist/components/',
+ compressed : 'dist/components/',
+ themes : 'dist/themes/'
+ },
+ clean : 'dist/'
+ },
+
+ // components to include in package
+ components: [
+
+ // global
+ 'reset',
+ 'site',
+
+ // elements
+ 'button',
+ 'container',
+ 'divider',
+ 'flag',
+ 'header',
+ 'icon',
+ 'image',
+ 'input',
+ 'label',
+ 'list',
+ 'loader',
+ 'rail',
+ 'reveal',
+ 'segment',
+ 'step',
+
+ // collections
+ 'breadcrumb',
+ 'form',
+ 'grid',
+ 'menu',
+ 'message',
+ 'table',
+
+ // views
+ 'ad',
+ 'card',
+ 'comment',
+ 'feed',
+ 'item',
+ 'statistic',
+
+ // modules
+ 'accordion',
+ 'checkbox',
+ 'dimmer',
+ 'dropdown',
+ 'embed',
+ 'modal',
+ 'nag',
+ 'popup',
+ 'progress',
+ 'rating',
+ 'search',
+ 'shape',
+ 'sidebar',
+ 'sticky',
+ 'tab',
+ 'transition',
+
+ // behaviors
+ 'api',
+ 'form',
+ 'state',
+ 'visibility'
+ ],
+
+ // whether to load admin tasks
+ admin: false,
+
+ // globs used for matching file patterns
+ globs : {
+ ignored : '!(*.min|*.map|*.rtl)',
+ ignoredRTL : '!(*.min|*.map)'
+ }
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/docs.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/docs.js b/semantic/tasks/config/docs.js
new file mode 100644
index 0000000..d04b095
--- /dev/null
+++ b/semantic/tasks/config/docs.js
@@ -0,0 +1,32 @@
+/*******************************
+ Docs
+*******************************/
+
+/* Paths used for "serve-docs" and "build-docs" tasks */
+module.exports = {
+ base: '',
+ globs: {
+ eco: '**/*.html.eco'
+ },
+ paths: {
+ clean: '../docs/out/dist/',
+ source: {
+ config : 'src/theme.config',
+ definitions : 'src/definitions/',
+ site : 'src/site/',
+ themes : 'src/themes/'
+ },
+ output: {
+ examples : '../docs/out/examples/',
+ less : '../docs/out/src/',
+ metadata : '../docs/out/',
+ packaged : '../docs/out/dist/',
+ uncompressed : '../docs/out/dist/components/',
+ compressed : '../docs/out/dist/components/',
+ themes : '../docs/out/dist/themes/'
+ },
+ template: {
+ eco: '../docs/server/documents/'
+ },
+ }
+};
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/npm/gulpfile.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/npm/gulpfile.js b/semantic/tasks/config/npm/gulpfile.js
new file mode 100644
index 0000000..bde1960
--- /dev/null
+++ b/semantic/tasks/config/npm/gulpfile.js
@@ -0,0 +1,72 @@
+/*******************************
+ Set-up
+*******************************/
+
+var
+ gulp = require('gulp-help')(require('gulp')),
+
+ // read user config to know what task to load
+ config = require('./tasks/config/user'),
+
+ // watch changes
+ watch = require('./tasks/watch'),
+
+ // build all files
+ build = require('./tasks/build'),
+ buildJS = require('./tasks/build/javascript'),
+ buildCSS = require('./tasks/build/css'),
+ buildAssets = require('./tasks/build/assets'),
+
+ // utility
+ clean = require('./tasks/clean'),
+ version = require('./tasks/version'),
+
+ // docs tasks
+ serveDocs = require('./tasks/docs/serve'),
+ buildDocs = require('./tasks/docs/build'),
+
+ // rtl
+ buildRTL = require('./tasks/rtl/build'),
+ watchRTL = require('./tasks/rtl/watch')
+;
+
+
+/*******************************
+ Tasks
+*******************************/
+
+gulp.task('default', false, [
+ 'watch'
+]);
+
+gulp.task('watch', 'Watch for site/theme changes', watch);
+
+gulp.task('build', 'Builds all files from source', build);
+gulp.task('build-javascript', 'Builds all javascript from source', buildJS);
+gulp.task('build-css', 'Builds all css from source', buildCSS);
+gulp.task('build-assets', 'Copies all assets from source', buildAssets);
+
+gulp.task('clean', 'Clean dist folder', clean);
+gulp.task('version', 'Displays current version of Semantic', version);
+
+/*--------------
+ Docs
+---------------*/
+
+/*
+ Lets you serve files to a local documentation instance
+ https://github.com/Semantic-Org/Semantic-UI-Docs/
+*/
+
+gulp.task('serve-docs', 'Serve file changes to SUI Docs', serveDocs);
+gulp.task('build-docs', 'Build all files and add to SUI Docs', buildDocs);
+
+
+/*--------------
+ RTL
+---------------*/
+
+if(config.rtl) {
+ gulp.task('watch-rtl', 'Watch files as RTL', watchRTL);
+ gulp.task('build-rtl', 'Build all files as RTL', buildRTL);
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/tasks/config/project/config.js
----------------------------------------------------------------------
diff --git a/semantic/tasks/config/project/config.js b/semantic/tasks/config/project/config.js
new file mode 100644
index 0000000..80706cb
--- /dev/null
+++ b/semantic/tasks/config/project/config.js
@@ -0,0 +1,141 @@
+/*******************************
+ Set-up
+*******************************/
+
+var
+ extend = require('extend'),
+ fs = require('fs'),
+ path = require('path'),
+
+ defaults = require('../defaults')
+;
+
+
+/*******************************
+ Exports
+*******************************/
+
+module.exports = {
+
+ getPath: function(file, directory) {
+ var
+ configPath,
+ walk = function(directory) {
+ var
+ nextDirectory = path.resolve( path.join(directory, path.sep, '..') ),
+ currentPath = path.normalize( path.join(directory, file) )
+ ;
+ if( fs.existsSync(currentPath) ) {
+ // found file
+ configPath = path.normalize(directory);
+ return;
+ }
+ else {
+ // reached file system root, let's stop
+ if(nextDirectory == directory) {
+ return;
+ }
+ // otherwise recurse
+ walk(nextDirectory, file);
+ }
+ }
+ ;
+
+ // start walk from outside require-dot-files directory
+ file = file || defaults.files.config;
+ directory = directory || path.join(__dirname, path.sep, '..');
+ walk(directory);
+ return configPath || '';
+ },
+
+ // adds additional derived values to a config object
+ addDerivedValues: function(config) {
+
+ config = config || extend(false, {}, defaults);
+
+ /*--------------
+ File Paths
+ ---------------*/
+
+ var
+ configPath = this.getPath(),
+ sourcePaths = {},
+ outputPaths = {},
+ folder
+ ;
+
+ // resolve paths (config location + base + path)
+ for(folder in config.paths.source) {
+ if(config.paths.source.hasOwnProperty(folder)) {
+ sourcePaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.source[folder]));
+ }
+ }
+ for(folder in config.paths.output) {
+ if(config.paths.output.hasOwnProperty(folder)) {
+ outputPaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.output[folder]));
+ }
+ }
+
+ // set config paths to full paths
+ config.paths.source = sourcePaths;
+ config.paths.output = outputPaths;
+
+ // resolve "clean" command path
+ config.paths.clean = path.resolve( path.join(configPath, config.base, config.paths.clean) );
+
+ /*--------------
+ CSS URLs
+ ---------------*/
+
+ // determine asset paths in css by finding relative path between themes and output
+ // force forward slashes
+
+ config.paths.assets = {
+ source : '../../themes', // source asset path is always the same
+ uncompressed : '.' + path.sep + path.relative(config.paths.output.uncompressed, config.paths.output.themes).replace(/\\/g, '/'),
+ compressed : '.' + path.sep + path.relative(config.paths.output.compressed, config.paths.output.themes).replace(/\\/g, '/'),
+ packaged : '.' + path.sep + path.relative(config.paths.output.packaged, config.paths.output.themes).replace(/\\/g, '/')
+ };
+
+ /*--------------
+ Permission
+ ---------------*/
+
+ if(config.permission) {
+ config.hasPermissions = true;
+ }
+ else {
+ // pass blank object to avoid causing errors
+ config.permission = {};
+ config.hasPermissions = false;
+ }
+
+ /*--------------
+ Globs
+ ---------------*/
+
+ if(!config.globs) {
+ config.globs = {};
+ }
+
+ // remove duplicates from component array
+ if(config.components instanceof Array) {
+ config.components = config.components.filter(function(component, index) {
+ return config.components.indexOf(component) == index;
+ });
+ }
+
+ // takes component object and creates file glob matching selected components
+ config.globs.components = (typeof config.components == 'object')
+ ? (config.components.length > 1)
+ ? '{' + config.components.join(',') + '}'
+ : config.components[0]
+ : '{' + defaults.components.join(',') + '}'
+ ;
+
+ return config;
+
+ }
+
+};
+
[02/48] incubator-senssoft-tap git commit: Fix index URL so anything
else can be served
Posted by ar...@apache.org.
Fix index URL so anything else can be served
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/8528e641
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/8528e641
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/8528e641
Branch: refs/heads/master
Commit: 8528e641eca06f20bcf60eb40ea6bb5cae4190b5
Parents: ccbf069
Author: Stephen York <Stephen York>
Authored: Thu Jun 30 03:07:02 2016 -0400
Committer: Stephen York <Stephen York>
Committed: Thu Jun 30 03:07:02 2016 -0400
----------------------------------------------------------------------
tap/urls.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/8528e641/tap/urls.py
----------------------------------------------------------------------
diff --git a/tap/urls.py b/tap/urls.py
index 05b102f..02779d1 100644
--- a/tap/urls.py
+++ b/tap/urls.py
@@ -24,5 +24,5 @@ urlpatterns = [
url(r'^app_mgr/', include('app_mgr.urls', namespace='app_mgr')),
#url(r'^api-auth/', include('rest_framework.urls')),
url(r'^api-token-auth/', token_views.obtain_auth_token),
- url(r'', TemplateView.as_view(template_name='index.html')),
+ url(r'^', TemplateView.as_view(template_name='index.html')),
]
[42/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/behaviors/visibility.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/behaviors/visibility.js b/semantic/src/definitions/behaviors/visibility.js
new file mode 100644
index 0000000..f2f186c
--- /dev/null
+++ b/semantic/src/definitions/behaviors/visibility.js
@@ -0,0 +1,1283 @@
+/*!
+ * # Semantic UI - Visibility
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.visibility = function(parameters) {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue,
+
+ moduleCount = $allModules.length,
+ loadedCount = 0
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.visibility.settings, parameters)
+ : $.extend({}, $.fn.visibility.settings),
+
+ className = settings.className,
+ namespace = settings.namespace,
+ error = settings.error,
+ metadata = settings.metadata,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $window = $(window),
+
+ $module = $(this),
+ $context = $(settings.context),
+
+ $placeholder,
+
+ selector = $module.selector || '',
+ instance = $module.data(moduleNamespace),
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); },
+
+ element = this,
+ disabled = false,
+
+ contextObserver,
+ observer,
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.debug('Initializing', settings);
+
+ module.setup.cache();
+
+ if( module.should.trackChanges() ) {
+
+ if(settings.type == 'image') {
+ module.setup.image();
+ }
+ if(settings.type == 'fixed') {
+ module.setup.fixed();
+ }
+
+ if(settings.observeChanges) {
+ module.observeChanges();
+ }
+ module.bind.events();
+ }
+
+ module.save.position();
+ if( !module.is.visible() ) {
+ module.error(error.visible, $module);
+ }
+
+ if(settings.initialCheck) {
+ module.checkVisibility();
+ }
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.debug('Storing instance', module);
+ $module
+ .data(moduleNamespace, module)
+ ;
+ instance = module;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module');
+ if(observer) {
+ observer.disconnect();
+ }
+ if(contextObserver) {
+ contextObserver.disconnect();
+ }
+ $window
+ .off('load' + eventNamespace, module.event.load)
+ .off('resize' + eventNamespace, module.event.resize)
+ ;
+ $context
+ .off('scroll' + eventNamespace, module.event.scroll)
+ .off('scrollchange' + eventNamespace, module.event.scrollchange)
+ ;
+ if(settings.type == 'fixed') {
+ module.resetFixed();
+ module.remove.placeholder();
+ }
+ $module
+ .off(eventNamespace)
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ observeChanges: function() {
+ if('MutationObserver' in window) {
+ contextObserver = new MutationObserver(module.event.contextChanged);
+ observer = new MutationObserver(module.event.changed);
+ contextObserver.observe(document, {
+ childList : true,
+ subtree : true
+ });
+ observer.observe(element, {
+ childList : true,
+ subtree : true
+ });
+ module.debug('Setting up mutation observer', observer);
+ }
+ },
+
+ bind: {
+ events: function() {
+ module.verbose('Binding visibility events to scroll and resize');
+ if(settings.refreshOnLoad) {
+ $window
+ .on('load' + eventNamespace, module.event.load)
+ ;
+ }
+ $window
+ .on('resize' + eventNamespace, module.event.resize)
+ ;
+ // pub/sub pattern
+ $context
+ .off('scroll' + eventNamespace)
+ .on('scroll' + eventNamespace, module.event.scroll)
+ .on('scrollchange' + eventNamespace, module.event.scrollchange)
+ ;
+ }
+ },
+
+ event: {
+ changed: function(mutations) {
+ module.verbose('DOM tree modified, updating visibility calculations');
+ module.timer = setTimeout(function() {
+ module.verbose('DOM tree modified, updating sticky menu');
+ module.refresh();
+ }, 100);
+ },
+ contextChanged: function(mutations) {
+ [].forEach.call(mutations, function(mutation) {
+ if(mutation.removedNodes) {
+ [].forEach.call(mutation.removedNodes, function(node) {
+ if(node == element || $(node).find(element).length > 0) {
+ module.debug('Element removed from DOM, tearing down events');
+ module.destroy();
+ }
+ });
+ }
+ });
+ },
+ resize: function() {
+ module.debug('Window resized');
+ if(settings.refreshOnResize) {
+ requestAnimationFrame(module.refresh);
+ }
+ },
+ load: function() {
+ module.debug('Page finished loading');
+ requestAnimationFrame(module.refresh);
+ },
+ // publishes scrollchange event on one scroll
+ scroll: function() {
+ if(settings.throttle) {
+ clearTimeout(module.timer);
+ module.timer = setTimeout(function() {
+ $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);
+ }, settings.throttle);
+ }
+ else {
+ requestAnimationFrame(function() {
+ $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);
+ });
+ }
+ },
+ // subscribes to scrollchange
+ scrollchange: function(event, scrollPosition) {
+ module.checkVisibility(scrollPosition);
+ },
+ },
+
+ precache: function(images, callback) {
+ if (!(images instanceof Array)) {
+ images = [images];
+ }
+ var
+ imagesLength = images.length,
+ loadedCounter = 0,
+ cache = [],
+ cacheImage = document.createElement('img'),
+ handleLoad = function() {
+ loadedCounter++;
+ if (loadedCounter >= images.length) {
+ if ($.isFunction(callback)) {
+ callback();
+ }
+ }
+ }
+ ;
+ while (imagesLength--) {
+ cacheImage = document.createElement('img');
+ cacheImage.onload = handleLoad;
+ cacheImage.onerror = handleLoad;
+ cacheImage.src = images[imagesLength];
+ cache.push(cacheImage);
+ }
+ },
+
+ enableCallbacks: function() {
+ module.debug('Allowing callbacks to occur');
+ disabled = false;
+ },
+
+ disableCallbacks: function() {
+ module.debug('Disabling all callbacks temporarily');
+ disabled = true;
+ },
+
+ should: {
+ trackChanges: function() {
+ if(methodInvoked) {
+ module.debug('One time query, no need to bind events');
+ return false;
+ }
+ module.debug('Callbacks being attached');
+ return true;
+ }
+ },
+
+ setup: {
+ cache: function() {
+ module.cache = {
+ occurred : {},
+ screen : {},
+ element : {},
+ };
+ },
+ image: function() {
+ var
+ src = $module.data(metadata.src)
+ ;
+ if(src) {
+ module.verbose('Lazy loading image', src);
+ settings.once = true;
+ settings.observeChanges = false;
+
+ // show when top visible
+ settings.onOnScreen = function() {
+ module.debug('Image on screen', element);
+ module.precache(src, function() {
+ module.set.image(src, function() {
+ loadedCount++;
+ if(loadedCount == moduleCount) {
+ settings.onAllLoaded.call(this);
+ }
+ settings.onLoad.call(this);
+ });
+ });
+ };
+ }
+ },
+ fixed: function() {
+ module.debug('Setting up fixed');
+ settings.once = false;
+ settings.observeChanges = false;
+ settings.initialCheck = true;
+ settings.refreshOnLoad = true;
+ if(!parameters.transition) {
+ settings.transition = false;
+ }
+ module.create.placeholder();
+ module.debug('Added placeholder', $placeholder);
+ settings.onTopPassed = function() {
+ module.debug('Element passed, adding fixed position', $module);
+ module.show.placeholder();
+ module.set.fixed();
+ if(settings.transition) {
+ if($.fn.transition !== undefined) {
+ $module.transition(settings.transition, settings.duration);
+ }
+ }
+ };
+ settings.onTopPassedReverse = function() {
+ module.debug('Element returned to position, removing fixed', $module);
+ module.hide.placeholder();
+ module.remove.fixed();
+ };
+ }
+ },
+
+ create: {
+ placeholder: function() {
+ module.verbose('Creating fixed position placeholder');
+ $placeholder = $module
+ .clone(false)
+ .css('display', 'none')
+ .addClass(className.placeholder)
+ .insertAfter($module)
+ ;
+ }
+ },
+
+ show: {
+ placeholder: function() {
+ module.verbose('Showing placeholder');
+ $placeholder
+ .css('display', 'block')
+ .css('visibility', 'hidden')
+ ;
+ }
+ },
+ hide: {
+ placeholder: function() {
+ module.verbose('Hiding placeholder');
+ $placeholder
+ .css('display', 'none')
+ .css('visibility', '')
+ ;
+ }
+ },
+
+ set: {
+ fixed: function() {
+ module.verbose('Setting element to fixed position');
+ $module
+ .addClass(className.fixed)
+ .css({
+ position : 'fixed',
+ top : settings.offset + 'px',
+ left : 'auto',
+ zIndex : settings.zIndex
+ })
+ ;
+ settings.onFixed.call(element);
+ },
+ image: function(src, callback) {
+ $module
+ .attr('src', src)
+ ;
+ if(settings.transition) {
+ if( $.fn.transition !== undefined ) {
+ $module.transition(settings.transition, settings.duration, callback);
+ }
+ else {
+ $module.fadeIn(settings.duration, callback);
+ }
+ }
+ else {
+ $module.show();
+ }
+ }
+ },
+
+ is: {
+ onScreen: function() {
+ var
+ calculations = module.get.elementCalculations()
+ ;
+ return calculations.onScreen;
+ },
+ offScreen: function() {
+ var
+ calculations = module.get.elementCalculations()
+ ;
+ return calculations.offScreen;
+ },
+ visible: function() {
+ if(module.cache && module.cache.element) {
+ return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);
+ }
+ return false;
+ }
+ },
+
+ refresh: function() {
+ module.debug('Refreshing constants (width/height)');
+ if(settings.type == 'fixed') {
+ module.resetFixed();
+ }
+ module.reset();
+ module.save.position();
+ if(settings.checkOnRefresh) {
+ module.checkVisibility();
+ }
+ settings.onRefresh.call(element);
+ },
+
+ resetFixed: function () {
+ module.remove.fixed();
+ module.remove.occurred();
+ },
+
+ reset: function() {
+ module.verbose('Resetting all cached values');
+ if( $.isPlainObject(module.cache) ) {
+ module.cache.screen = {};
+ module.cache.element = {};
+ }
+ },
+
+ checkVisibility: function(scroll) {
+ module.verbose('Checking visibility of element', module.cache.element);
+
+ if( !disabled && module.is.visible() ) {
+
+ // save scroll position
+ module.save.scroll(scroll);
+
+ // update calculations derived from scroll
+ module.save.calculations();
+
+ // percentage
+ module.passed();
+
+ // reverse (must be first)
+ module.passingReverse();
+ module.topVisibleReverse();
+ module.bottomVisibleReverse();
+ module.topPassedReverse();
+ module.bottomPassedReverse();
+
+ // one time
+ module.onScreen();
+ module.offScreen();
+ module.passing();
+ module.topVisible();
+ module.bottomVisible();
+ module.topPassed();
+ module.bottomPassed();
+
+ // on update callback
+ if(settings.onUpdate) {
+ settings.onUpdate.call(element, module.get.elementCalculations());
+ }
+ }
+ },
+
+ passed: function(amount, newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ amountInPixels
+ ;
+ // assign callback
+ if(amount && newCallback) {
+ settings.onPassed[amount] = newCallback;
+ }
+ else if(amount !== undefined) {
+ return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);
+ }
+ else if(calculations.passing) {
+ $.each(settings.onPassed, function(amount, callback) {
+ if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {
+ module.execute(callback, amount);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callback);
+ }
+ });
+ }
+ },
+
+ onScreen: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onOnScreen,
+ callbackName = 'onScreen'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for onScreen', newCallback);
+ settings.onOnScreen = newCallback;
+ }
+ if(calculations.onScreen) {
+ module.execute(callback, callbackName);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback !== undefined) {
+ return calculations.onOnScreen;
+ }
+ },
+
+ offScreen: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onOffScreen,
+ callbackName = 'offScreen'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for offScreen', newCallback);
+ settings.onOffScreen = newCallback;
+ }
+ if(calculations.offScreen) {
+ module.execute(callback, callbackName);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback !== undefined) {
+ return calculations.onOffScreen;
+ }
+ },
+
+ passing: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onPassing,
+ callbackName = 'passing'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for passing', newCallback);
+ settings.onPassing = newCallback;
+ }
+ if(calculations.passing) {
+ module.execute(callback, callbackName);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback !== undefined) {
+ return calculations.passing;
+ }
+ },
+
+
+ topVisible: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onTopVisible,
+ callbackName = 'topVisible'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for top visible', newCallback);
+ settings.onTopVisible = newCallback;
+ }
+ if(calculations.topVisible) {
+ module.execute(callback, callbackName);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return calculations.topVisible;
+ }
+ },
+
+ bottomVisible: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onBottomVisible,
+ callbackName = 'bottomVisible'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for bottom visible', newCallback);
+ settings.onBottomVisible = newCallback;
+ }
+ if(calculations.bottomVisible) {
+ module.execute(callback, callbackName);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return calculations.bottomVisible;
+ }
+ },
+
+ topPassed: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onTopPassed,
+ callbackName = 'topPassed'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for top passed', newCallback);
+ settings.onTopPassed = newCallback;
+ }
+ if(calculations.topPassed) {
+ module.execute(callback, callbackName);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return calculations.topPassed;
+ }
+ },
+
+ bottomPassed: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onBottomPassed,
+ callbackName = 'bottomPassed'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for bottom passed', newCallback);
+ settings.onBottomPassed = newCallback;
+ }
+ if(calculations.bottomPassed) {
+ module.execute(callback, callbackName);
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return calculations.bottomPassed;
+ }
+ },
+
+ passingReverse: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onPassingReverse,
+ callbackName = 'passingReverse'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for passing reverse', newCallback);
+ settings.onPassingReverse = newCallback;
+ }
+ if(!calculations.passing) {
+ if(module.get.occurred('passing')) {
+ module.execute(callback, callbackName);
+ }
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback !== undefined) {
+ return !calculations.passing;
+ }
+ },
+
+
+ topVisibleReverse: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onTopVisibleReverse,
+ callbackName = 'topVisibleReverse'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for top visible reverse', newCallback);
+ settings.onTopVisibleReverse = newCallback;
+ }
+ if(!calculations.topVisible) {
+ if(module.get.occurred('topVisible')) {
+ module.execute(callback, callbackName);
+ }
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return !calculations.topVisible;
+ }
+ },
+
+ bottomVisibleReverse: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onBottomVisibleReverse,
+ callbackName = 'bottomVisibleReverse'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for bottom visible reverse', newCallback);
+ settings.onBottomVisibleReverse = newCallback;
+ }
+ if(!calculations.bottomVisible) {
+ if(module.get.occurred('bottomVisible')) {
+ module.execute(callback, callbackName);
+ }
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return !calculations.bottomVisible;
+ }
+ },
+
+ topPassedReverse: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onTopPassedReverse,
+ callbackName = 'topPassedReverse'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for top passed reverse', newCallback);
+ settings.onTopPassedReverse = newCallback;
+ }
+ if(!calculations.topPassed) {
+ if(module.get.occurred('topPassed')) {
+ module.execute(callback, callbackName);
+ }
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return !calculations.onTopPassed;
+ }
+ },
+
+ bottomPassedReverse: function(newCallback) {
+ var
+ calculations = module.get.elementCalculations(),
+ callback = newCallback || settings.onBottomPassedReverse,
+ callbackName = 'bottomPassedReverse'
+ ;
+ if(newCallback) {
+ module.debug('Adding callback for bottom passed reverse', newCallback);
+ settings.onBottomPassedReverse = newCallback;
+ }
+ if(!calculations.bottomPassed) {
+ if(module.get.occurred('bottomPassed')) {
+ module.execute(callback, callbackName);
+ }
+ }
+ else if(!settings.once) {
+ module.remove.occurred(callbackName);
+ }
+ if(newCallback === undefined) {
+ return !calculations.bottomPassed;
+ }
+ },
+
+ execute: function(callback, callbackName) {
+ var
+ calculations = module.get.elementCalculations(),
+ screen = module.get.screenCalculations()
+ ;
+ callback = callback || false;
+ if(callback) {
+ if(settings.continuous) {
+ module.debug('Callback being called continuously', callbackName, calculations);
+ callback.call(element, calculations, screen);
+ }
+ else if(!module.get.occurred(callbackName)) {
+ module.debug('Conditions met', callbackName, calculations);
+ callback.call(element, calculations, screen);
+ }
+ }
+ module.save.occurred(callbackName);
+ },
+
+ remove: {
+ fixed: function() {
+ module.debug('Removing fixed position');
+ $module
+ .removeClass(className.fixed)
+ .css({
+ position : '',
+ top : '',
+ left : '',
+ zIndex : ''
+ })
+ ;
+ settings.onUnfixed.call(element);
+ },
+ placeholder: function() {
+ module.debug('Removing placeholder content');
+ if($placeholder) {
+ $placeholder.remove();
+ }
+ },
+ occurred: function(callback) {
+ if(callback) {
+ var
+ occurred = module.cache.occurred
+ ;
+ if(occurred[callback] !== undefined && occurred[callback] === true) {
+ module.debug('Callback can now be called again', callback);
+ module.cache.occurred[callback] = false;
+ }
+ }
+ else {
+ module.cache.occurred = {};
+ }
+ }
+ },
+
+ save: {
+ calculations: function() {
+ module.verbose('Saving all calculations necessary to determine positioning');
+ module.save.direction();
+ module.save.screenCalculations();
+ module.save.elementCalculations();
+ },
+ occurred: function(callback) {
+ if(callback) {
+ if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {
+ module.verbose('Saving callback occurred', callback);
+ module.cache.occurred[callback] = true;
+ }
+ }
+ },
+ scroll: function(scrollPosition) {
+ scrollPosition = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;
+ module.cache.scroll = scrollPosition;
+ },
+ direction: function() {
+ var
+ scroll = module.get.scroll(),
+ lastScroll = module.get.lastScroll(),
+ direction
+ ;
+ if(scroll > lastScroll && lastScroll) {
+ direction = 'down';
+ }
+ else if(scroll < lastScroll && lastScroll) {
+ direction = 'up';
+ }
+ else {
+ direction = 'static';
+ }
+ module.cache.direction = direction;
+ return module.cache.direction;
+ },
+ elementPosition: function() {
+ var
+ element = module.cache.element,
+ screen = module.get.screenSize()
+ ;
+ module.verbose('Saving element position');
+ // (quicker than $.extend)
+ element.fits = (element.height < screen.height);
+ element.offset = $module.offset();
+ element.width = $module.outerWidth();
+ element.height = $module.outerHeight();
+ // store
+ module.cache.element = element;
+ return element;
+ },
+ elementCalculations: function() {
+ var
+ screen = module.get.screenCalculations(),
+ element = module.get.elementPosition()
+ ;
+ // offset
+ if(settings.includeMargin) {
+ element.margin = {};
+ element.margin.top = parseInt($module.css('margin-top'), 10);
+ element.margin.bottom = parseInt($module.css('margin-bottom'), 10);
+ element.top = element.offset.top - element.margin.top;
+ element.bottom = element.offset.top + element.height + element.margin.bottom;
+ }
+ else {
+ element.top = element.offset.top;
+ element.bottom = element.offset.top + element.height;
+ }
+
+ // visibility
+ element.topVisible = (screen.bottom >= element.top);
+ element.topPassed = (screen.top >= element.top);
+ element.bottomVisible = (screen.bottom >= element.bottom);
+ element.bottomPassed = (screen.top >= element.bottom);
+ element.pixelsPassed = 0;
+ element.percentagePassed = 0;
+
+ // meta calculations
+ element.onScreen = (element.topVisible && !element.bottomPassed);
+ element.passing = (element.topPassed && !element.bottomPassed);
+ element.offScreen = (!element.onScreen);
+
+ // passing calculations
+ if(element.passing) {
+ element.pixelsPassed = (screen.top - element.top);
+ element.percentagePassed = (screen.top - element.top) / element.height;
+ }
+ module.cache.element = element;
+ module.verbose('Updated element calculations', element);
+ return element;
+ },
+ screenCalculations: function() {
+ var
+ scroll = module.get.scroll()
+ ;
+ module.save.direction();
+ module.cache.screen.top = scroll;
+ module.cache.screen.bottom = scroll + module.cache.screen.height;
+ return module.cache.screen;
+ },
+ screenSize: function() {
+ module.verbose('Saving window position');
+ module.cache.screen = {
+ height: $context.height()
+ };
+ },
+ position: function() {
+ module.save.screenSize();
+ module.save.elementPosition();
+ }
+ },
+
+ get: {
+ pixelsPassed: function(amount) {
+ var
+ element = module.get.elementCalculations()
+ ;
+ if(amount.search('%') > -1) {
+ return ( element.height * (parseInt(amount, 10) / 100) );
+ }
+ return parseInt(amount, 10);
+ },
+ occurred: function(callback) {
+ return (module.cache.occurred !== undefined)
+ ? module.cache.occurred[callback] || false
+ : false
+ ;
+ },
+ direction: function() {
+ if(module.cache.direction === undefined) {
+ module.save.direction();
+ }
+ return module.cache.direction;
+ },
+ elementPosition: function() {
+ if(module.cache.element === undefined) {
+ module.save.elementPosition();
+ }
+ return module.cache.element;
+ },
+ elementCalculations: function() {
+ if(module.cache.element === undefined) {
+ module.save.elementCalculations();
+ }
+ return module.cache.element;
+ },
+ screenCalculations: function() {
+ if(module.cache.screen === undefined) {
+ module.save.screenCalculations();
+ }
+ return module.cache.screen;
+ },
+ screenSize: function() {
+ if(module.cache.screen === undefined) {
+ module.save.screenSize();
+ }
+ return module.cache.screen;
+ },
+ scroll: function() {
+ if(module.cache.scroll === undefined) {
+ module.save.scroll();
+ }
+ return module.cache.scroll;
+ },
+ lastScroll: function() {
+ if(module.cache.screen === undefined) {
+ module.debug('First scroll event, no last scroll could be found');
+ return false;
+ }
+ return module.cache.screen.top;
+ }
+ },
+
+ setting: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ settings[name] = value;
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ instance.save.scroll();
+ instance.save.calculations();
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.visibility.settings = {
+
+ name : 'Visibility',
+ namespace : 'visibility',
+
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ // whether to use mutation observers to follow changes
+ observeChanges : true,
+
+ // check position immediately on init
+ initialCheck : true,
+
+ // whether to refresh calculations after all page images load
+ refreshOnLoad : true,
+
+ // whether to refresh calculations after page resize event
+ refreshOnResize : true,
+
+ // should call callbacks on refresh event (resize, etc)
+ checkOnRefresh : true,
+
+ // callback should only occur one time
+ once : true,
+
+ // callback should fire continuously whe evaluates to true
+ continuous : false,
+
+ // offset to use with scroll top
+ offset : 0,
+
+ // whether to include margin in elements position
+ includeMargin : false,
+
+ // scroll context for visibility checks
+ context : window,
+
+ // visibility check delay in ms (defaults to animationFrame)
+ throttle : false,
+
+ // special visibility type (image, fixed)
+ type : false,
+
+ // z-index to use with visibility 'fixed'
+ zIndex : '10',
+
+ // image only animation settings
+ transition : 'fade in',
+ duration : 1000,
+
+ // array of callbacks for percentage
+ onPassed : {},
+
+ // standard callbacks
+ onOnScreen : false,
+ onOffScreen : false,
+ onPassing : false,
+ onTopVisible : false,
+ onBottomVisible : false,
+ onTopPassed : false,
+ onBottomPassed : false,
+
+ // reverse callbacks
+ onPassingReverse : false,
+ onTopVisibleReverse : false,
+ onBottomVisibleReverse : false,
+ onTopPassedReverse : false,
+ onBottomPassedReverse : false,
+
+ // special callbacks for image
+ onLoad : function() {},
+ onAllLoaded : function() {},
+
+ // special callbacks for fixed position
+ onFixed : function() {},
+ onUnfixed : function() {},
+
+ // utility callbacks
+ onUpdate : false, // disabled by default for performance
+ onRefresh : function(){},
+
+ metadata : {
+ src: 'src'
+ },
+
+ className: {
+ fixed : 'fixed',
+ placeholder : 'placeholder'
+ },
+
+ error : {
+ method : 'The method you called is not defined.',
+ visible : 'Element is hidden, you must call refresh after element becomes visible'
+ }
+
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/behaviors/visit.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/behaviors/visit.js b/semantic/src/definitions/behaviors/visit.js
new file mode 100644
index 0000000..df88d0b
--- /dev/null
+++ b/semantic/src/definitions/behaviors/visit.js
@@ -0,0 +1,525 @@
+/*!
+ * # Semantic UI - Visit
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.visit = $.fn.visit = function(parameters) {
+ var
+ $allModules = $.isFunction(this)
+ ? $(window)
+ : $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.visit.settings, parameters)
+ : $.extend({}, $.fn.visit.settings),
+
+ error = settings.error,
+ namespace = settings.namespace,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = namespace + '-module',
+
+ $module = $(this),
+ $displays = $(),
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+ module
+ ;
+ module = {
+
+ initialize: function() {
+ if(settings.count) {
+ module.store(settings.key.count, settings.count);
+ }
+ else if(settings.id) {
+ module.add.id(settings.id);
+ }
+ else if(settings.increment && methodInvoked !== 'increment') {
+ module.increment();
+ }
+ module.add.display($module);
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of visit module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying instance');
+ $module
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ increment: function(id) {
+ var
+ currentValue = module.get.count(),
+ newValue = +(currentValue) + 1
+ ;
+ if(id) {
+ module.add.id(id);
+ }
+ else {
+ if(newValue > settings.limit && !settings.surpass) {
+ newValue = settings.limit;
+ }
+ module.debug('Incrementing visits', newValue);
+ module.store(settings.key.count, newValue);
+ }
+ },
+
+ decrement: function(id) {
+ var
+ currentValue = module.get.count(),
+ newValue = +(currentValue) - 1
+ ;
+ if(id) {
+ module.remove.id(id);
+ }
+ else {
+ module.debug('Removing visit');
+ module.store(settings.key.count, newValue);
+ }
+ },
+
+ get: {
+ count: function() {
+ return +(module.retrieve(settings.key.count)) || 0;
+ },
+ idCount: function(ids) {
+ ids = ids || module.get.ids();
+ return ids.length;
+ },
+ ids: function(delimitedIDs) {
+ var
+ idArray = []
+ ;
+ delimitedIDs = delimitedIDs || module.retrieve(settings.key.ids);
+ if(typeof delimitedIDs === 'string') {
+ idArray = delimitedIDs.split(settings.delimiter);
+ }
+ module.verbose('Found visited ID list', idArray);
+ return idArray;
+ },
+ storageOptions: function(data) {
+ var
+ options = {}
+ ;
+ if(settings.expires) {
+ options.expires = settings.expires;
+ }
+ if(settings.domain) {
+ options.domain = settings.domain;
+ }
+ if(settings.path) {
+ options.path = settings.path;
+ }
+ return options;
+ }
+ },
+
+ has: {
+ visited: function(id, ids) {
+ var
+ visited = false
+ ;
+ ids = ids || module.get.ids();
+ if(id !== undefined && ids) {
+ $.each(ids, function(index, value){
+ if(value == id) {
+ visited = true;
+ }
+ });
+ }
+ return visited;
+ }
+ },
+
+ set: {
+ count: function(value) {
+ module.store(settings.key.count, value);
+ },
+ ids: function(value) {
+ module.store(settings.key.ids, value);
+ }
+ },
+
+ reset: function() {
+ module.store(settings.key.count, 0);
+ module.store(settings.key.ids, null);
+ },
+
+ add: {
+ id: function(id) {
+ var
+ currentIDs = module.retrieve(settings.key.ids),
+ newIDs = (currentIDs === undefined || currentIDs === '')
+ ? id
+ : currentIDs + settings.delimiter + id
+ ;
+ if( module.has.visited(id) ) {
+ module.debug('Unique content already visited, not adding visit', id, currentIDs);
+ }
+ else if(id === undefined) {
+ module.debug('ID is not defined');
+ }
+ else {
+ module.debug('Adding visit to unique content', id);
+ module.store(settings.key.ids, newIDs);
+ }
+ module.set.count( module.get.idCount() );
+ },
+ display: function(selector) {
+ var
+ $element = $(selector)
+ ;
+ if($element.length > 0 && !$.isWindow($element[0])) {
+ module.debug('Updating visit count for element', $element);
+ $displays = ($displays.length > 0)
+ ? $displays.add($element)
+ : $element
+ ;
+ }
+ }
+ },
+
+ remove: {
+ id: function(id) {
+ var
+ currentIDs = module.get.ids(),
+ newIDs = []
+ ;
+ if(id !== undefined && currentIDs !== undefined) {
+ module.debug('Removing visit to unique content', id, currentIDs);
+ $.each(currentIDs, function(index, value){
+ if(value !== id) {
+ newIDs.push(value);
+ }
+ });
+ newIDs = newIDs.join(settings.delimiter);
+ module.store(settings.key.ids, newIDs );
+ }
+ module.set.count( module.get.idCount() );
+ }
+ },
+
+ check: {
+ limit: function(value) {
+ value = value || module.get.count();
+ if(settings.limit) {
+ if(value >= settings.limit) {
+ module.debug('Pages viewed exceeded limit, firing callback', value, settings.limit);
+ settings.onLimit.call(element, value);
+ }
+ module.debug('Limit not reached', value, settings.limit);
+ settings.onChange.call(element, value);
+ }
+ module.update.display(value);
+ }
+ },
+
+ update: {
+ display: function(value) {
+ value = value || module.get.count();
+ if($displays.length > 0) {
+ module.debug('Updating displayed view count', $displays);
+ $displays.html(value);
+ }
+ }
+ },
+
+ store: function(key, value) {
+ var
+ options = module.get.storageOptions(value)
+ ;
+ if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
+ window.localStorage.setItem(key, value);
+ module.debug('Value stored using local storage', key, value);
+ }
+ else if($.cookie !== undefined) {
+ $.cookie(key, value, options);
+ module.debug('Value stored using cookie', key, value, options);
+ }
+ else {
+ module.error(error.noCookieStorage);
+ return;
+ }
+ if(key == settings.key.count) {
+ module.check.limit(value);
+ }
+ },
+ retrieve: function(key, value) {
+ var
+ storedValue
+ ;
+ if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
+ storedValue = window.localStorage.getItem(key);
+ }
+ // get by cookie
+ else if($.cookie !== undefined) {
+ storedValue = $.cookie(key);
+ }
+ else {
+ module.error(error.noCookieStorage);
+ }
+ if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {
+ storedValue = undefined;
+ }
+ return storedValue;
+ },
+
+ setting: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ settings[name] = value;
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ module.debug('Changing internal', name, value);
+ if(value !== undefined) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else {
+ module[name] = value;
+ }
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+
+ })
+ ;
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.visit.settings = {
+
+ name : 'Visit',
+
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ namespace : 'visit',
+
+ increment : false,
+ surpass : false,
+ count : false,
+ limit : false,
+
+ delimiter : '&',
+ storageMethod : 'localstorage',
+
+ key : {
+ count : 'visit-count',
+ ids : 'visit-ids'
+ },
+
+ expires : 30,
+ domain : false,
+ path : '/',
+
+ onLimit : function() {},
+ onChange : function() {},
+
+ error : {
+ method : 'The method you called is not defined',
+ missingPersist : 'Using the persist setting requires the inclusion of PersistJS',
+ noCookieStorage : 'The default storage cookie requires $.cookie to be included.'
+ }
+
+};
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/collections/breadcrumb.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/collections/breadcrumb.less b/semantic/src/definitions/collections/breadcrumb.less
new file mode 100755
index 0000000..67a4e31
--- /dev/null
+++ b/semantic/src/definitions/collections/breadcrumb.less
@@ -0,0 +1,122 @@
+/*!
+ * # Semantic UI - Breadcrumb
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'collection';
+@element : 'breadcrumb';
+
+@import (multiple) '../../theme.config';
+
+
+/*******************************
+ Breadcrumb
+*******************************/
+
+.ui.breadcrumb {
+ line-height: 1;
+ display: @display;
+ margin: @verticalMargin 0em;
+ vertical-align: @verticalAlign;
+}
+.ui.breadcrumb:first-child {
+ margin-top: 0em;
+}
+.ui.breadcrumb:last-child {
+ margin-bottom: 0em;
+}
+
+/*******************************
+ Content
+*******************************/
+
+/* Divider */
+.ui.breadcrumb .divider {
+ display: inline-block;
+ opacity: @dividerOpacity;
+ margin: 0em @dividerSpacing 0em;
+
+ font-size: @dividerSize;
+ color: @dividerColor;
+ vertical-align: @dividerVerticalAlign;
+}
+
+/* Link */
+.ui.breadcrumb a {
+ color: @linkColor;
+}
+.ui.breadcrumb a:hover {
+ color: @linkHoverColor;
+}
+
+
+/* Icon Divider */
+.ui.breadcrumb .icon.divider {
+ font-size: @iconDividerSize;
+ vertical-align: @iconDividerVerticalAlign;
+}
+
+/* Section */
+.ui.breadcrumb a.section {
+ cursor: pointer;
+}
+.ui.breadcrumb .section {
+ display: inline-block;
+ margin: @sectionMargin;
+ padding: @sectionPadding;
+}
+
+/* Loose Coupling */
+.ui.breadcrumb.segment {
+ display: inline-block;
+ padding: @segmentPadding;
+}
+
+/*******************************
+ States
+*******************************/
+
+.ui.breadcrumb .active.section {
+ font-weight: @activeFontWeight;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+.ui.mini.breadcrumb {
+ font-size: @mini;
+}
+.ui.tiny.breadcrumb {
+ font-size: @tiny;
+}
+.ui.small.breadcrumb {
+ font-size: @small;
+}
+.ui.breadcrumb {
+ font-size: @medium;
+}
+.ui.large.breadcrumb {
+ font-size: @large;
+}
+.ui.big.breadcrumb {
+ font-size: @big;
+}
+.ui.huge.breadcrumb {
+ font-size: @huge;
+}
+.ui.massive.breadcrumb {
+ font-size: @massive;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/collections/form.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/collections/form.less b/semantic/src/definitions/collections/form.less
new file mode 100755
index 0000000..cd1242b
--- /dev/null
+++ b/semantic/src/definitions/collections/form.less
@@ -0,0 +1,1045 @@
+/*!
+ * # Semantic UI - Form
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'collection';
+@element : 'form';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Elements
+*******************************/
+
+/*--------------------
+ Form
+---------------------*/
+
+.ui.form {
+ position: relative;
+ max-width: 100%;
+}
+
+/*--------------------
+ Content
+---------------------*/
+
+.ui.form > p {
+ margin: @paragraphMargin;
+}
+
+/*--------------------
+ Field
+---------------------*/
+
+.ui.form .field {
+ clear: both;
+ margin: @fieldMargin;
+}
+
+.ui.form .field:last-child,
+.ui.form .fields:last-child .field {
+ margin-bottom: 0em;
+}
+
+.ui.form .fields .field {
+ clear: both;
+ margin: 0em;
+}
+
+
+/*--------------------
+ Labels
+---------------------*/
+
+.ui.form .field > label {
+ display: block;
+ margin: @labelMargin;
+ color: @labelColor;
+ font-size: @labelFontSize;
+ font-weight: @labelFontWeight;
+ text-transform: @labelTextTransform;
+}
+
+/*--------------------
+ Standard Inputs
+---------------------*/
+
+
+.ui.form textarea,
+.ui.form input:not([type]),
+.ui.form input[type="date"],
+.ui.form input[type="datetime-local"],
+.ui.form input[type="email"],
+.ui.form input[type="number"],
+.ui.form input[type="password"],
+.ui.form input[type="search"],
+.ui.form input[type="tel"],
+.ui.form input[type="time"],
+.ui.form input[type="text"],
+.ui.form input[type="url"] {
+ width: @inputWidth;
+ vertical-align: top;
+}
+
+/* Set max height on unusual input */
+.ui.form ::-webkit-datetime-edit,
+.ui.form ::-webkit-inner-spin-button {
+ height: @inputLineHeight;
+}
+
+.ui.form input:not([type]),
+.ui.form input[type="date"],
+.ui.form input[type="datetime-local"],
+.ui.form input[type="email"],
+.ui.form input[type="number"],
+.ui.form input[type="password"],
+.ui.form input[type="search"],
+.ui.form input[type="tel"],
+.ui.form input[type="time"],
+.ui.form input[type="text"],
+.ui.form input[type="url"] {
+ font-family: @inputFont;
+ margin: 0em;
+ outline: none;
+ -webkit-appearance: none;
+ tap-highlight-color: rgba(255, 255, 255, 0);
+
+ line-height: @inputLineHeight;
+ padding: @inputPadding;
+ font-size: @inputFontSize;
+
+ background: @inputBackground;
+ border: @inputBorder;
+ color: @inputColor;
+ border-radius: @inputBorderRadius;
+ box-shadow: @inputBoxShadow;
+ transition: @inputTransition;
+}
+
+/* Text Area */
+.ui.form textarea {
+ margin: 0em;
+ -webkit-appearance: none;
+ tap-highlight-color: rgba(255, 255, 255, 0);
+
+ padding: @textAreaPadding;
+ font-size: @textAreaFontSize;
+ background: @textAreaBackground;
+ border: @textAreaBorder;
+ outline: none;
+ color: @inputColor;
+ border-radius: @inputBorderRadius;
+ box-shadow: @inputBoxShadow;
+ transition: @textAreaTransition;
+ font-size: @textAreaFontSize;
+ line-height: @textAreaLineHeight;
+ resize: @textAreaResize;
+}
+.ui.form textarea:not([rows]) {
+ height: @textAreaHeight;
+ min-height: @textAreaMinHeight;
+ max-height: @textAreaMaxHeight;
+}
+
+.ui.form textarea,
+.ui.form input[type="checkbox"] {
+ vertical-align: @checkboxVerticalAlign;
+}
+
+/*--------------------------
+ Input w/ attached Button
+---------------------------*/
+
+.ui.form input.attached {
+ width: auto;
+}
+
+
+/*--------------------
+ Basic Select
+---------------------*/
+
+.ui.form select {
+ display: block;
+ height: auto;
+ width: 100%;
+ background: @selectBackground;
+ border: @selectBorder;
+ border-radius: @selectBorderRadius;
+ box-shadow: @selectBoxShadow;
+ padding: @selectPadding;
+ color: @selectColor;
+ transition: @selectTransition;
+}
+
+/*--------------------
+ Dropdown
+---------------------*/
+
+/* Block */
+.ui.form .field > .selection.dropdown {
+ width: 100%;
+}
+.ui.form .field > .selection.dropdown > .dropdown.icon {
+ float: right;
+}
+
+/* Inline */
+.ui.form .inline.fields .field > .selection.dropdown,
+.ui.form .inline.field > .selection.dropdown {
+ width: auto;
+}
+.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,
+.ui.form .inline.field > .selection.dropdown > .dropdown.icon {
+ float: none;
+}
+
+/*--------------------
+ UI Input
+---------------------*/
+
+/* Block */
+.ui.form .field .ui.input,
+.ui.form .fields .field .ui.input,
+.ui.form .wide.field .ui.input {
+ width: 100%;
+}
+
+/* Inline */
+.ui.form .inline.fields .field:not(.wide) .ui.input,
+.ui.form .inline.field:not(.wide) .ui.input {
+ width: auto;
+ vertical-align: middle;
+}
+
+/* Auto Input */
+.ui.form .fields .field .ui.input input,
+.ui.form .field .ui.input input {
+ width: auto;
+}
+
+/* Full Width Input */
+.ui.form .ten.fields .ui.input input,
+.ui.form .nine.fields .ui.input input,
+.ui.form .eight.fields .ui.input input,
+.ui.form .seven.fields .ui.input input,
+.ui.form .six.fields .ui.input input,
+.ui.form .five.fields .ui.input input,
+.ui.form .four.fields .ui.input input,
+.ui.form .three.fields .ui.input input,
+.ui.form .two.fields .ui.input input,
+.ui.form .wide.field .ui.input input {
+ flex: 1 0 auto;
+ width: 0px;
+}
+
+
+/*--------------------
+ Types of Messages
+---------------------*/
+
+.ui.form .success.message,
+.ui.form .warning.message,
+.ui.form .error.message {
+ display: none;
+}
+
+/* Assumptions */
+.ui.form .message:first-child {
+ margin-top: 0px;
+}
+
+/*--------------------
+ Validation Prompt
+---------------------*/
+
+.ui.form .field .prompt.label {
+ white-space: normal;
+ background: @promptBackground !important;
+ border: @promptBorder !important;
+ color: @promptTextColor !important;
+}
+.ui.form .inline.fields .field .prompt,
+.ui.form .inline.field .prompt {
+ vertical-align: top;
+ margin: @inlinePromptMargin;
+}
+.ui.form .inline.fields .field .prompt:before,
+.ui.form .inline.field .prompt:before {
+ border-width: 0px 0px @inlinePromptBorderWidth @inlinePromptBorderWidth;
+ bottom: auto;
+ right: auto;
+ top: 50%;
+ left: 0em;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------------
+ Autofilled
+---------------------*/
+
+.ui.form .field.field input:-webkit-autofill {
+ box-shadow: 0px 0px 0px 100px @inputAutoFillBackground inset !important;
+ border-color: @inputAutoFillBorder !important;
+}
+
+/* Focus */
+.ui.form .field.field input:-webkit-autofill:focus {
+ box-shadow: 0px 0px 0px 100px @inputAutoFillFocusBackground inset !important;
+ border-color: @inputAutoFillFocusBorder !important;
+}
+
+/* Error */
+.ui.form .error.error input:-webkit-autofill {
+ box-shadow: 0px 0px 0px 100px @inputAutoFillErrorBackground inset !important;
+ border-color: @inputAutoFillErrorBorder !important;
+}
+
+
+
+/*--------------------
+ Placeholder
+---------------------*/
+
+/* browsers require these rules separate */
+.ui.form ::-webkit-input-placeholder {
+ color: @inputPlaceholderColor;
+}
+.ui.form :-ms-input-placeholder {
+ color: @inputPlaceholderColor;
+}
+.ui.form ::-moz-placeholder {
+ color: @inputPlaceholderColor;
+}
+
+.ui.form :focus::-webkit-input-placeholder {
+ color: @inputPlaceholderFocusColor;
+}
+.ui.form :focus:-ms-input-placeholder {
+ color: @inputPlaceholderFocusColor;
+}
+.ui.form :focus::-moz-placeholder {
+ color: @inputPlaceholderFocusColor;
+}
+
+/* Error Placeholder */
+.ui.form .error ::-webkit-input-placeholder {
+ color: @inputErrorPlaceholderColor;
+}
+.ui.form .error :-ms-input-placeholder {
+ color: @inputErrorPlaceholderColor !important;
+}
+.ui.form .error ::-moz-placeholder {
+ color: @inputErrorPlaceholderColor;
+}
+
+.ui.form .error :focus::-webkit-input-placeholder {
+ color: @inputErrorPlaceholderFocusColor;
+}
+.ui.form .error :focus:-ms-input-placeholder {
+ color: @inputErrorPlaceholderFocusColor !important;
+}
+.ui.form .error :focus::-moz-placeholder {
+ color: @inputErrorPlaceholderFocusColor;
+}
+
+
+/*--------------------
+ Focus
+---------------------*/
+
+.ui.form input:not([type]):focus,
+.ui.form input[type="date"]:focus,
+.ui.form input[type="datetime-local"]:focus,
+.ui.form input[type="email"]:focus,
+.ui.form input[type="number"]:focus,
+.ui.form input[type="password"]:focus,
+.ui.form input[type="search"]:focus,
+.ui.form input[type="tel"]:focus,
+.ui.form input[type="time"]:focus,
+.ui.form input[type="text"]:focus,
+.ui.form input[type="url"]:focus {
+ color: @inputFocusColor;
+ border-color: @inputFocusBorderColor;
+ border-radius: @inputFocusBorderRadius;
+ background: @inputFocusBackground;
+ box-shadow: @inputFocusBoxShadow;
+}
+.ui.form textarea:focus {
+ color: @textAreaFocusColor;
+ border-color: @textAreaFocusBorderColor;
+ border-radius: @textAreaFocusBorderRadius;
+ background: @textAreaFocusBackground;
+ box-shadow: @textAreaFocusBoxShadow;
+ -webkit-appearance: none;
+}
+
+
+/*--------------------
+ Success
+---------------------*/
+
+/* On Form */
+.ui.form.success .success.message:not(:empty) {
+ display: block;
+}
+.ui.form.success .compact.success.message:not(:empty) {
+ display: inline-block;
+}
+.ui.form.success .icon.success.message:not(:empty) {
+ display: flex;
+}
+
+/*--------------------
+ Warning
+---------------------*/
+
+/* On Form */
+.ui.form.warning .warning.message:not(:empty) {
+ display: block;
+}
+.ui.form.warning .compact.warning.message:not(:empty) {
+ display: inline-block;
+}
+.ui.form.warning .icon.warning.message:not(:empty) {
+ display: flex;
+}
+
+/*--------------------
+ Error
+---------------------*/
+
+/* On Form */
+.ui.form.error .error.message:not(:empty) {
+ display: block;
+}
+.ui.form.error .compact.error.message:not(:empty) {
+ display: inline-block;
+}
+.ui.form.error .icon.error.message:not(:empty) {
+ display: flex;
+}
+
+/* On Field(s) */
+.ui.form .fields.error .field label,
+.ui.form .field.error label,
+.ui.form .fields.error .field .input,
+.ui.form .field.error .input {
+ color: @formErrorColor;
+}
+
+.ui.form .fields.error .field .corner.label,
+.ui.form .field.error .corner.label {
+ border-color: @formErrorColor;
+ color: @white;
+}
+
+.ui.form .fields.error .field textarea,
+.ui.form .fields.error .field select,
+.ui.form .fields.error .field input:not([type]),
+.ui.form .fields.error .field input[type="date"],
+.ui.form .fields.error .field input[type="datetime-local"],
+.ui.form .fields.error .field input[type="email"],
+.ui.form .fields.error .field input[type="number"],
+.ui.form .fields.error .field input[type="password"],
+.ui.form .fields.error .field input[type="search"],
+.ui.form .fields.error .field input[type="tel"],
+.ui.form .fields.error .field input[type="time"],
+.ui.form .fields.error .field input[type="text"],
+.ui.form .fields.error .field input[type="url"],
+.ui.form .field.error textarea,
+.ui.form .field.error select,
+.ui.form .field.error input:not([type]),
+.ui.form .field.error input[type="date"],
+.ui.form .field.error input[type="datetime-local"],
+.ui.form .field.error input[type="email"],
+.ui.form .field.error input[type="number"],
+.ui.form .field.error input[type="password"],
+.ui.form .field.error input[type="search"],
+.ui.form .field.error input[type="tel"],
+.ui.form .field.error input[type="time"],
+.ui.form .field.error input[type="text"],
+.ui.form .field.error input[type="url"] {
+ background: @formErrorBackground;
+ border-color: @formErrorBorder;
+ color: @formErrorColor;
+ border-radius: @inputErrorBorderRadius;
+ box-shadow: @inputErrorBoxShadow;
+}
+.ui.form .field.error textarea:focus,
+.ui.form .field.error select:focus,
+.ui.form .field.error input:not([type]):focus,
+.ui.form .field.error input[type="date"]:focus,
+.ui.form .field.error input[type="datetime-local"]:focus,
+.ui.form .field.error input[type="email"]:focus,
+.ui.form .field.error input[type="number"]:focus,
+.ui.form .field.error input[type="password"]:focus,
+.ui.form .field.error input[type="search"]:focus,
+.ui.form .field.error input[type="tel"]:focus,
+.ui.form .field.error input[type="time"]:focus,
+.ui.form .field.error input[type="text"]:focus,
+.ui.form .field.error input[type="url"]:focus {
+ background: @inputErrorFocusBackground;
+ border-color: @inputErrorFocusBorder;
+ color: @inputErrorFocusColor;
+
+ -webkit-appearance: none;
+ box-shadow: @inputErrorFocusBoxShadow;
+}
+
+/* Preserve Native Select Stylings */
+.ui.form .field.error select {
+ -webkit-appearance: menulist-button;
+}
+
+/*------------------
+ Dropdown Error
+--------------------*/
+
+.ui.form .fields.error .field .ui.dropdown,
+.ui.form .fields.error .field .ui.dropdown .item,
+.ui.form .field.error .ui.dropdown,
+.ui.form .field.error .ui.dropdown .text,
+.ui.form .field.error .ui.dropdown .item {
+ background: @formErrorBackground;
+ color: @formErrorColor;
+}
+.ui.form .fields.error .field .ui.dropdown,
+.ui.form .field.error .ui.dropdown {
+ border-color: @formErrorBorder !important;
+}
+.ui.form .fields.error .field .ui.dropdown:hover,
+.ui.form .field.error .ui.dropdown:hover {
+ border-color: @formErrorBorder !important;
+}
+.ui.form .fields.error .field .ui.dropdown:hover .menu,
+.ui.form .field.error .ui.dropdown:hover .menu {
+ border-color: @formErrorBorder;
+}
+.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,
+.ui.form .field.error .ui.multiple.selection.dropdown > .label {
+ background-color: @dropdownErrorLabelBackground;
+ color: @dropdownErrorLabelColor;
+}
+
+/* Hover */
+.ui.form .fields.error .field .ui.dropdown .menu .item:hover,
+.ui.form .field.error .ui.dropdown .menu .item:hover {
+ background-color: @dropdownErrorHoverBackground;
+}
+
+/* Selected */
+.ui.form .fields.error .field .ui.dropdown .menu .selected.item,
+.ui.form .field.error .ui.dropdown .menu .selected.item {
+ background-color: @dropdownErrorSelectedBackground;
+}
+
+
+/* Active */
+.ui.form .fields.error .field .ui.dropdown .menu .active.item,
+.ui.form .field.error .ui.dropdown .menu .active.item {
+ background-color: @dropdownErrorActiveBackground !important;
+}
+
+/*--------------------
+ Checkbox Error
+---------------------*/
+
+.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,
+.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,
+.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,
+.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {
+ color: @formErrorColor;
+}
+.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,
+.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,
+.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,
+.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {
+ background: @formErrorBackground;
+ border-color: @formErrorBorder;
+}
+.ui.form .fields.error .field .checkbox label:after,
+.ui.form .field.error .checkbox label:after,
+.ui.form .fields.error .field .checkbox .box:after,
+.ui.form .field.error .checkbox .box:after {
+ color: @formErrorColor;
+}
+
+/*--------------------
+ Disabled
+---------------------*/
+
+.ui.form .disabled.fields .field,
+.ui.form .disabled.field,
+.ui.form .field :disabled {
+ pointer-events: none;
+ opacity: @disabledOpacity;
+}
+.ui.form .field.disabled label {
+ opacity: @disabledLabelOpacity;
+}
+.ui.form .field.disabled :disabled {
+ opacity: 1;
+}
+
+
+/*--------------
+ Loading
+---------------*/
+
+.ui.loading.form {
+ position: relative;
+ cursor: default;
+ point-events: none;
+}
+.ui.loading.form:before {
+ position: absolute;
+ content: '';
+ top: 0%;
+ left: 0%;
+ background: @loaderDimmerColor;
+ width: 100%;
+ height: 100%;
+ z-index: @loaderDimmerZIndex;
+}
+.ui.loading.form:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ animation: form-spin @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @loaderLineColor @loaderFillColor @loaderFillColor @loaderFillColor;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+
+ box-shadow: 0px 0px 0px 1px transparent;
+ visibility: visible;
+ z-index: @loaderLineZIndex;
+}
+
+@keyframes form-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+
+/*******************************
+ Element Types
+*******************************/
+
+/*--------------------
+ Required Field
+---------------------*/
+
+.ui.form .required.fields:not(.grouped) > .field > label:after,
+.ui.form .required.fields.grouped > label:after,
+.ui.form .required.field > label:after,
+.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,
+.ui.form .required.field > .checkbox:after {
+ margin: @requiredMargin;
+ content: @requiredContent;
+ color: @requiredColor;
+}
+
+.ui.form .required.fields:not(.grouped) > .field > label:after,
+.ui.form .required.fields.grouped > label:after,
+.ui.form .required.field > label:after {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,
+.ui.form .required.field > .checkbox:after {
+ position: absolute;
+ top: 0%;
+ left: 100%;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*--------------------
+ Inverted Colors
+---------------------*/
+
+.ui.inverted.form label,
+.ui.form .inverted.segment label,
+.ui.form .inverted.segment .ui.checkbox label,
+.ui.form .inverted.segment .ui.checkbox .box,
+.ui.inverted.form .ui.checkbox label,
+.ui.inverted.form .ui.checkbox .box,
+.ui.inverted.form .inline.fields > label,
+.ui.inverted.form .inline.fields .field > label,
+.ui.inverted.form .inline.fields .field > p,
+.ui.inverted.form .inline.field > label,
+.ui.inverted.form .inline.field > p {
+ color: @invertedLabelColor;
+}
+
+/* Inverted Field */
+.ui.inverted.form input:not([type]),
+.ui.inverted.form input[type="date"],
+.ui.inverted.form input[type="datetime-local"],
+.ui.inverted.form input[type="email"],
+.ui.inverted.form input[type="number"],
+.ui.inverted.form input[type="password"],
+.ui.inverted.form input[type="search"],
+.ui.inverted.form input[type="tel"],
+.ui.inverted.form input[type="time"],
+.ui.inverted.form input[type="text"],
+.ui.inverted.form input[type="url"] {
+ background: @invertedInputBackground;
+ border-color: @invertedInputBorderColor;
+ color: @invertedInputColor;
+ box-shadow: @invertedInputBoxShadow;
+}
+
+
+/*--------------------
+ Field Groups
+---------------------*/
+
+/* Grouped Vertically */
+.ui.form .grouped.fields {
+ display: block;
+ margin: @groupedMargin;
+}
+.ui.form .grouped.fields:last-child {
+ margin-bottom: 0em;
+}
+
+.ui.form .grouped.fields > label {
+ margin: @groupedLabelMargin;
+ color: @groupedLabelColor;
+ font-size: @groupedLabelFontSize;
+ font-weight: @groupedLabelFontWeight;
+ text-transform: @groupedLabelTextTransform;
+}
+
+.ui.form .grouped.fields .field,
+.ui.form .grouped.inline.fields .field {
+ display: block;
+ margin: @groupedFieldMargin;
+ padding: 0em;
+}
+
+/*--------------------
+ Fields
+---------------------*/
+
+/* Split fields */
+.ui.form .fields {
+ display: flex;
+ flex-direction: row;
+ margin: @fieldsMargin;
+}
+.ui.form .fields > .field {
+ flex: 0 1 auto;
+ padding-left: (@gutterWidth / 2);
+ padding-right: (@gutterWidth / 2);
+}
+.ui.form .fields > .field:first-child {
+ border-left: none;
+ box-shadow: none;
+}
+
+/* Other Combinations */
+.ui.form .two.fields > .fields,
+.ui.form .two.fields > .field {
+ width: @twoColumn;
+}
+.ui.form .three.fields > .fields,
+.ui.form .three.fields > .field {
+ width: @threeColumn;
+}
+.ui.form .four.fields > .fields,
+.ui.form .four.fields > .field {
+ width: @fourColumn;
+}
+.ui.form .five.fields > .fields,
+.ui.form .five.fields > .field {
+ width: @fiveColumn;
+}
+.ui.form .six.fields > .fields,
+.ui.form .six.fields > .field {
+ width: @sixColumn;
+}
+.ui.form .seven.fields > .fields,
+.ui.form .seven.fields > .field {
+ width: @sevenColumn;
+}
+.ui.form .eight.fields > .fields,
+.ui.form .eight.fields > .field {
+ width: @eightColumn;
+}
+.ui.form .nine.fields > .fields,
+.ui.form .nine.fields > .field {
+ width: @nineColumn;
+}
+.ui.form .ten.fields > .fields,
+.ui.form .ten.fields > .field {
+ width: @tenColumn;
+}
+
+/* Swap to full width on mobile */
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.form .fields {
+ flex-wrap: wrap;
+ }
+
+ .ui[class*="equal width"].form .fields > .field,
+ .ui.form [class*="equal width"].fields > .field,
+ .ui.form .two.fields > .fields,
+ .ui.form .two.fields > .field,
+ .ui.form .three.fields > .fields,
+ .ui.form .three.fields > .field,
+ .ui.form .four.fields > .fields,
+ .ui.form .four.fields > .field,
+ .ui.form .five.fields > .fields,
+ .ui.form .five.fields > .field,
+ .ui.form .six.fields > .fields,
+ .ui.form .six.fields > .field,
+ .ui.form .seven.fields > .fields,
+ .ui.form .seven.fields > .field,
+ .ui.form .eight.fields > .fields,
+ .ui.form .eight.fields > .field,
+ .ui.form .nine.fields > .fields,
+ .ui.form .nine.fields > .field,
+ .ui.form .ten.fields > .fields,
+ .ui.form .ten.fields > .field {
+ width: @oneColumn !important;
+ margin: 0em 0em @rowDistance;
+ }
+}
+
+
+/* Sizing Combinations */
+.ui.form .fields .wide.field {
+ width: @oneWide;
+ padding-left: (@gutterWidth / 2);
+ padding-right: (@gutterWidth / 2);
+}
+
+.ui.form .one.wide.field {
+ width: @oneWide !important;
+}
+.ui.form .two.wide.field {
+ width: @twoWide !important;
+}
+.ui.form .three.wide.field {
+ width: @threeWide !important;
+}
+.ui.form .four.wide.field {
+ width: @fourWide !important;
+}
+.ui.form .five.wide.field {
+ width: @fiveWide !important;
+}
+.ui.form .six.wide.field {
+ width: @sixWide !important;
+}
+.ui.form .seven.wide.field {
+ width: @sevenWide !important;
+}
+.ui.form .eight.wide.field {
+ width: @eightWide !important;
+}
+.ui.form .nine.wide.field {
+ width: @nineWide !important;
+}
+.ui.form .ten.wide.field {
+ width: @tenWide !important;
+}
+.ui.form .eleven.wide.field {
+ width: @elevenWide !important;
+}
+.ui.form .twelve.wide.field {
+ width: @twelveWide !important;
+}
+.ui.form .thirteen.wide.field {
+ width: @thirteenWide !important;
+}
+.ui.form .fourteen.wide.field {
+ width: @fourteenWide !important;
+}
+.ui.form .fifteen.wide.field {
+ width: @fifteenWide !important;
+}
+.ui.form .sixteen.wide.field {
+ width: @sixteenWide !important;
+}
+
+/* Swap to full width on mobile */
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.form .two.fields > .fields,
+ .ui.form .two.fields > .field,
+ .ui.form .three.fields > .fields,
+ .ui.form .three.fields > .field,
+ .ui.form .four.fields > .fields,
+ .ui.form .four.fields > .field,
+ .ui.form .five.fields > .fields,
+ .ui.form .five.fields > .field,
+ .ui.form .fields > .two.wide.field,
+ .ui.form .fields > .three.wide.field,
+ .ui.form .fields > .four.wide.field,
+ .ui.form .fields > .five.wide.field,
+ .ui.form .fields > .six.wide.field,
+ .ui.form .fields > .seven.wide.field,
+ .ui.form .fields > .eight.wide.field,
+ .ui.form .fields > .nine.wide.field,
+ .ui.form .fields > .ten.wide.field,
+ .ui.form .fields > .eleven.wide.field,
+ .ui.form .fields > .twelve.wide.field,
+ .ui.form .fields > .thirteen.wide.field,
+ .ui.form .fields > .fourteen.wide.field,
+ .ui.form .fields > .fifteen.wide.field,
+ .ui.form .fields > .sixteen.wide.field {
+ width: @oneColumn !important;
+ }
+ .ui.form .fields {
+ margin-bottom: 0em;
+ }
+}
+
+/*--------------------
+ Equal Width
+---------------------*/
+
+.ui[class*="equal width"].form .fields > .field,
+.ui.form [class*="equal width"].fields > .field {
+ width: 100%;
+ flex: 1 1 auto;
+}
+
+/*--------------------
+ Inline Fields
+---------------------*/
+
+.ui.form .inline.fields {
+ margin: @fieldMargin;
+ align-items: center;
+}
+.ui.form .inline.fields .field {
+ margin: 0em;
+ padding: @inlineFieldsMargin;
+}
+
+/* Inline Label */
+.ui.form .inline.fields > label,
+.ui.form .inline.fields .field > label,
+.ui.form .inline.fields .field > p,
+.ui.form .inline.field > label,
+.ui.form .inline.field > p {
+ display: inline-block;
+ width: auto;
+ margin-top: 0em;
+ margin-bottom: 0em;
+ vertical-align: baseline;
+ font-size: @inlineLabelFontSize;
+ font-weight: @inlineLabelFontWeight;
+ color: @inlineLabelColor;
+ text-transform: @inlineLabelTextTransform;
+}
+
+/* Grouped Inline Label */
+.ui.form .inline.fields > label {
+ margin: @groupedInlineLabelMargin;
+}
+
+/* Inline Input */
+.ui.form .inline.fields .field > input,
+.ui.form .inline.fields .field > select,
+.ui.form .inline.field > input,
+.ui.form .inline.field > select {
+ display: inline-block;
+ width: auto;
+
+ margin-top: 0em;
+ margin-bottom: 0em;
+
+ vertical-align: middle;
+ font-size: @inlineInputSize;
+}
+
+/* Label */
+.ui.form .inline.fields .field > :first-child,
+.ui.form .inline.field > :first-child {
+ margin: 0em @inlineLabelDistance 0em 0em;
+}
+.ui.form .inline.fields .field > :only-child,
+.ui.form .inline.field > :only-child {
+ margin: 0em;
+}
+
+/* Wide */
+.ui.form .inline.fields .wide.field {
+ display: flex;
+ align-items: center;
+}
+.ui.form .inline.fields .wide.field > input,
+.ui.form .inline.fields .wide.field > select {
+ width: 100%;
+}
+
+
+/*--------------------
+ Sizes
+---------------------*/
+
+.ui.mini.form {
+ font-size: @mini;
+}
+.ui.tiny.form {
+ font-size: @tiny;
+}
+.ui.small.form {
+ font-size: @small;
+}
+.ui.form {
+ font-size: @medium;
+}
+.ui.large.form {
+ font-size: @large;
+}
+.ui.big.form {
+ font-size: @big;
+}
+.ui.huge.form {
+ font-size: @huge;
+}
+.ui.massive.form {
+ font-size: @massive;
+}
+
+.loadUIOverrides();
[25/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/assets/fonts/icons.svg
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/assets/fonts/icons.svg b/semantic/src/themes/basic/assets/fonts/icons.svg
new file mode 100644
index 0000000..b9c54d0
--- /dev/null
+++ b/semantic/src/themes/basic/assets/fonts/icons.svg
@@ -0,0 +1,450 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+Created by FontForge 20100429 at Thu Sep 20 22:09:47 2012
+ By root
+Copyright (C) 2012 by original authors @ fontello.com
+</metadata>
+<defs>
+<font id="icons" horiz-adv-x="947" >
+ <font-face
+ font-family="icons"
+ font-weight="500"
+ font-stretch="normal"
+ units-per-em="1000"
+ panose-1="2 0 6 3 0 0 0 0 0 0"
+ ascent="800"
+ descent="-200"
+ bbox="-0.666667 -200.023 1350 801.8"
+ underline-thickness="50"
+ underline-position="-100"
+ unicode-range="U+002B-1F6AB"
+ />
+<missing-glyph horiz-adv-x="364"
+d="M33 0v666h265v-666h-265zM66 33h199v600h-199v-600z" />
+ <glyph glyph-name=".notdef" horiz-adv-x="364"
+d="M33 0v666h265v-666h-265zM66 33h199v600h-199v-600z" />
+ <glyph glyph-name=".null" horiz-adv-x="0"
+ />
+ <glyph glyph-name="nonmarkingreturn" horiz-adv-x="333"
+ />
+ <glyph glyph-name="plus" unicode="+" horiz-adv-x="610"
+d="M565 350q19 0 24.5 -12.5t5.5 -37.5q0 -17 -1.5 -26t-8.5 -16.5t-20 -7.5h-210v-210q0 -19 -12.5 -24.5t-37.5 -5.5q-17 0 -26 1.5t-16.5 8.5t-7.5 20v210h-210q-19 0 -24.5 12.5t-5.5 37.5q0 17 1.5 26t8.5 16.5t20 7.5h210v210q0 19 12.5 24.5t37.5 5.5q17 0 26 -1.5
+t16.5 -8.5t7.5 -20v-210h210z" />
+ <glyph glyph-name="hyphen" unicode="-" horiz-adv-x="610"
+d="M565 350q19 0 24.5 -12.5t5.5 -37.5q0 -17 -1.5 -26t-8.5 -16.5t-20 -7.5h-520q-19 0 -24.5 12.5t-5.5 37.5q0 17 1.5 26t8.5 16.5t20 7.5h520z" />
+ <glyph glyph-name="at" unicode="@" horiz-adv-x="923"
+d="M849 516q25 -64 25 -138q0 -103 -46 -182q-59 -92 -163 -92q-43 0 -70 21q-21 15 -30 36q-43 -55 -114 -55q-81 0 -122 58q-41 52 -41 141q0 91 48 147q53 64 142 64q52 0 90 -37l7 26h85l-18 -259q-2 -32 9 -44q7 -7 20 -7q35 0 60 34.5t34 73.5t9 75q0 108 -68 176
+q-75 76 -208 76q-128 0 -214 -76q-102 -92 -102 -245q0 -133 86 -221q81 -82 204 -82q137 0 242 46l15 8v-96l-7 -3q-101 -50 -251 -50q-165 0 -269 97q-123 112 -123 308q0 182 116 294q57 56 133 84q77 31 168 31q178 0 284 -106q46 -44 69 -103zM465 199q46 0 69 40
+q17 31 17 85q0 45 -16 74q-20 28 -60 28q-44 0 -64 -38q-19 -33 -19 -83q0 -23 4 -43.5t21.5 -41.5t47.5 -21z" />
+ <glyph glyph-name="h" unicode="h" horiz-adv-x="1228"
+d="M281 54q0 56 32 138q56 164 76 215q31 82 51 144h-25h-31h-26q-51 10 -51 51q0 51 51 51h564q51 0 51 -51q0 -41 -36 -47q-15 -5 -31 -4h-15h-20h-32q11 -41 52 -144q61 -164 77 -210q30 -92 30 -143q0 -46 -40 -87q-31 -31 -87 -31h-461q-51 0 -93 31q-36 46 -36 87z
+M481 345h318l-67 206h-184z" />
+ <glyph glyph-name="uni2139" unicode="ℹ" horiz-adv-x="490"
+d="M367 800q48 0 74 -28t26 -70q0 -50 -39 -88t-95 -38q-47 0 -73.5 27t-25.5 73q0 45 36 84.5t97 39.5zM160 -200q-29 0 -45.5 13.5t-22.5 52.5t14 110l60 255q15 57 0 57q-13 0 -54.5 -18t-70.5 -38l-26 44q91 77 190 125t150 48q26 0 38.5 -20t11 -55.5t-14.5 -85.5
+l-69 -268q-16 -63 5 -63q15 0 49.5 16t69.5 44l30 -41q-84 -86 -175 -131t-140 -45z" />
+ <glyph glyph-name="arrowleft" unicode="←" horiz-adv-x="789"
+d="M0 329q0 20 15 35l345 346q15 15 35 15t34 -15l52 -52q15 -14 15 -34t-15 -35l-174 -174h433q21 0 35 -14t14 -35v-74q0 -20 -14 -34t-34 -14h-434l174 -174q15 -15 15 -35t-15 -34l-52 -52q-14 -15 -34 -15t-35 15l-345 345q-15 15 -15 35z" />
+ <glyph glyph-name="arrowup" unicode="↑" horiz-adv-x="789"
+d="M-0.5 329q-0.5 20 14.5 35l346 345q15 15 35 15t34 -15l346 -345q14 -15 14 -35t-14 -35l-52 -51q-15 -15 -34.5 -15t-33.5 15l-175 173v-433q0 -20 -14 -34.5t-34 -14.5h-74q-21 0 -35 14.5t-14 34.5v433l-173 -173q-15 -15 -35 -15t-35 15l-51 51q-15 15 -15.5 35z" />
+ <glyph glyph-name="arrowright" unicode="→" horiz-adv-x="789"
+d="M0 293v74q0 20 14 34t34 14h434l-174 174q-14 15 -14 35t14 34l52 52q15 15 35 15t34 -15l346 -346q14 -15 14 -34.5t-14 -34.5l-346 -346q-14 -15 -34 -15t-35 15l-52 52q-14 14 -14 34t14 35l174 174h-434q-20 0 -34 14t-14 35z" />
+ <glyph glyph-name="arrowdown" unicode="↓" horiz-adv-x="789"
+d="M0 328q0 20 15 35l51 51q15 15 35 15t35 -15l173 -173v433q0 20 14.5 34.5t34.5 14.5h74q21 0 34.5 -14.5t13.5 -34.5v-433l175 173q14 15 33.5 15t34.5 -15l53 -51q15 -15 15 -35t-15 -35l-347 -345q-14 -15 -34 -15t-35 15l-345 345q-15 15 -15 35z" />
+ <glyph glyph-name="house" unicode="⌂" horiz-adv-x="930"
+d="M903 285q16 -16 11 -27.5t-28 -11.5h-83v-308q0 -14 -1.5 -21t-8.5 -13.5t-22 -6.5h-204v310h-204v-310h-195q-19 0 -28.5 6.5t-11 13.5t-1.5 21v308h-83q-23 0 -28 11.5t11 27.5l401 401q16 16 37 16t37 -16z" />
+ <glyph glyph-name="uni25B4" unicode="▴" horiz-adv-x="490"
+d="M15 100l230 400l230 -400h-460z" />
+ <glyph glyph-name="uni25B8" unicode="▸" horiz-adv-x="430"
+d="M15 530l400 -230l-400 -230v460z" />
+ <glyph glyph-name="uni25BE" unicode="▾" horiz-adv-x="490"
+d="M475 500l-230 -400l-230 400h460z" />
+ <glyph glyph-name="uni25C2" unicode="◂" horiz-adv-x="430"
+d="M415 530v-460l-400 230z" />
+ <glyph glyph-name="uni2601" unicode="☁" horiz-adv-x="1291"
+d="M1292 155q0 -100 -68 -173.5t-167 -80.5v-1h-783v1q-7 -1 -19 -1q-106 0 -180.5 74.5t-74.5 180.5q0 66 33.5 124.5t90.5 92.5q-7 29 -7 56q0 106 74.5 180.5t180.5 74.5q92 0 167 -63q39 82 116 131t167 49q129 0 221 -92t92 -221q0 -50 -15 -93q77 -26 124.5 -92.5
+t47.5 -146.5z" />
+ <glyph glyph-name="uni2611" unicode="☑"
+d="M0 92v474q0 32 12.5 61t33.5 50t50 34t62 13h553q13 0 26 -3l-96 -96h-483q-24 0 -41.5 -17.5t-17.5 -41.5v-474q0 -24 17.5 -41.5t41.5 -17.5h553q24 0 41 17.5t17 41.5v167l99 99v-266q0 -33 -12.5 -61t-34 -50t-50 -34.5t-60.5 -12.5h-553q-33 0 -62 12.5t-50 34.5
+t-33.5 50t-12.5 61zM198 431q0 17 11 28l51 51q12 12 28.5 12t28.5 -12l175 -175l335 337q12 12 29.5 12t28.5 -12l51 -50q11 -12 11 -29t-11 -28l-365 -366l-51 -50q-12 -12 -28.5 -12t-28.5 12l-51 50l-203 204q-11 11 -11 28z" />
+ <glyph glyph-name="uni2661" unicode="♡" horiz-adv-x="880"
+d="M795 591q70 -65 70 -156t-70 -156l-355 -330l-355 330q-70 65 -70 156t70 156q62 58 149.5 58t149.5 -58l56 -52l56 52q62 58 149.5 58t149.5 -58zM743 330q42 38 42 105t-37 100q-42 39 -102 39q-49 0 -102 -49l-104 -91l-104 91q-53 49 -102 49q-60 0 -102 -39
+q-37 -33 -37 -100t42 -105l303 -286z" />
+ <glyph glyph-name="heart" unicode="♥" horiz-adv-x="890"
+d="M804 591q70 -65 70 -156t-70 -156l-359 -330l-359 330q-70 65 -70 156t70 156q63 58 151 58t151 -58l57 -52l57 52q63 58 151 58t151 -58z" />
+ <glyph glyph-name="uni2691" unicode="⚑"
+d="M0 645q0 32 23 55.5t56 23.5t56 -23.5t23 -55.5q0 -21 -10.5 -38.5t-28.5 -29.5v-623q0 -8 -6 -14t-14 -6h-40q-8 0 -13.5 6t-5.5 14v623q-18 12 -29 29.5t-11 38.5zM158 148v383q0 17 10 34t25 25q53 28 96.5 44t73.5 23q36 9 64 10q35 0 64 -6t55.5 -15.5t51.5 -21.5
+l50 -27q33 -14 75 -16q36 -3 84.5 7t106.5 45q14 9 23.5 3.5t9.5 -22.5v-384q0 -16 -9.5 -33.5t-23.5 -25.5q-58 -35 -106.5 -45t-84.5 -8q-42 3 -75 17l-50 27q-25 12 -51.5 21.5t-55.5 15.5t-64 6q-28 -1 -64 -10q-30 -7 -73.5 -23t-96.5 -45q-15 -9 -25 -2.5t-10 23.5z
+" />
+ <glyph glyph-name="uni2699" unicode="⚙" horiz-adv-x="787"
+d="M0 271v117q0 7 7 9q20 6 42 9t43 5q4 0 8 0.5t9 1.5l11 29q6 14 14 29l-28 39q-15 20 -32 39q-6 5 0 13q20 24 42 46t46 42q5 5 13 0q11 -12 23.5 -21.5t24.5 -17.5q8 -5 15 -11t15 -11q27 15 58 24q3 30 6 54.5t8 47.5q2 9 10 9h117q9 0 9 -9q4 -20 7 -40l6 -41l3 -21
+q15 -5 29 -10.5t28 -13.5l14 10l12 10l28 19q13 10 26 22q6 6 12 -1l12 -12q5 -5 11 -10l32 -31l31 -34q4 -7 0 -13q-14 -16 -28 -35l-31 -42q15 -30 25 -61q13 -3 26 -4.5t27 -3.5q11 -2 24 -4l25 -4q7 -2 7 -9v-117q0 -7 -7 -10q-19 -5 -40 -7.5t-42 -4.5q-5 -1 -10 -1.5
+t-10 -1.5q-5 -15 -11 -29l-13 -29q12 -18 27.5 -38.5t32.5 -39.5q5 -5 0 -13q-40 -49 -89 -88q-5 -5 -12 0q-12 11 -24 20.5t-25 18.5q-7 5 -14.5 11t-14.5 11q-28 -15 -58 -24q-2 -25 -6 -51t-10 -51q-2 -9 -9 -9h-117q-8 0 -10 9q-3 20 -5.5 40t-5.5 41l-3 21l-29 10
+q-15 5 -28 14l-14 -10l-13 -10q-27 -19 -53 -41q-7 -6 -13 1l-11 11l-12 11l-32 31q-15 16 -30 34q-5 7 0 13q16 19 30 39l29 38q-16 30 -26 61q-12 3 -25 4.5t-26 3.5t-26 3.5t-25 4.5q-7 2 -7 9zM275 329q0 -25 9.5 -46.5t25.5 -37.5t37.5 -25.5t46 -9.5t46 9.5t37.5 25.5
+t25.5 37.5t9.5 46.5q0 24 -9.5 45.5t-25.5 37.5t-37.5 25.5t-46 9.5t-46 -9.5t-37.5 -25.5t-25.5 -37.5t-9.5 -45.5z" />
+ <glyph glyph-name="uni26A0" unicode="⚠" horiz-adv-x="894"
+d="M5.5 -41q-14.5 25 6.5 59l387 671q19 35 48 35q28 0 49 -35l387 -671q20 -34 6 -59t-54 -25h-775q-40 0 -54.5 25zM168 53h558l-279 483zM389 391q0 6 4.5 10.5t9.5 4.5h89q5 0 9 -4.5t4 -10.5l-7 -192q0 -12 -14 -12h-73q-14 0 -14 12zM392 133q0 14 13 14h82
+q14 0 14 -14l1 -51q0 -14 -14 -14h-82q-13 0 -13 14z" />
+ <glyph glyph-name="uni26A1" unicode="⚡" horiz-adv-x="430"
+d="M55 -150q-4 3 35 92l79 182q40 93 38 99t-94.5 45t-97.5 54q-4 12 84 120.5t179.5 210t96.5 97.5t-74.5 -186t-77.5 -188q1 -3 95 -42.5t97 -56.5q3 -20 -174 -226t-186 -201z" />
+ <glyph glyph-name="uni26EF" unicode="⛯"
+d="M0 346v88q0 7 5 7q15 4 31 6l32 4q5 0 8 0.5t7 0.5q6 22 18 44q-9 15 -21 30l-24 29q-5 6 0 10q15 18 31.5 35t34.5 32q6 4 10 -1q8 -8 18 -15l18 -14l23 -16q22 11 44 18q2 22 4.5 41t6.5 37q0 5 7 5h88q7 0 7 -6q3 -15 5.5 -30.5t4.5 -31.5l2 -15q21 -7 43 -18l20 15
+l21 15q10 8 19 16q6 4 10 -1q5 -4 9 -8l9 -9l23 -23l24 -26q3 -6 0 -10q-11 -11 -22 -25l-23 -33q6 -11 11 -23l9 -23q8 -2 18 -3t21 -3l19 -2q9 -1 17 -4q7 -2 7 -7v-88q0 -6 -6 -8q-14 -3 -31 -5l-32 -4q-4 0 -14 -2q-7 -21 -18 -43q9 -15 20.5 -30t24.5 -29q4 -6 0 -10
+q-15 -18 -31.5 -35t-34.5 -32q-7 -4 -10 1q-8 7 -17.5 14.5t-19.5 13.5q-5 6 -11 9.5t-11 7.5q-22 -11 -44 -18q-2 -18 -4 -38.5t-8 -39.5q-2 -5 -7 -5h-88q-7 0 -7 5q-3 15 -5 31l-4 31l-2 16q-21 7 -43 18l-10 -7q-5 -3 -10 -8l-21 -15q-10 -8 -19 -16q-7 -4 -10 1
+q-5 4 -8 8l-10 9l-24 22q-12 12 -23 27q-4 4 0 9q12 14 23.5 29.5t20.5 29.5q-10 21 -19 46q-8 2 -18 3t-21 3l-19 2q-9 1 -19 3q-5 3 -5 8zM207 389q0 -37 26.5 -63.5t63.5 -26.5t63 26.5t26 63.5t-26 63t-63 26t-63.5 -26t-26.5 -63zM552 132q-3 6 4 9l22 8q10 4 22 8
+q1 6 1.5 10t2.5 9.5t3.5 9t4.5 8.5q-8 11 -14 21t-13 20q-3 6 2 9l66 59q4 4 9 1l18 -15l19 -16q19 8 37 9q5 11 11 21.5t11 20.5q3 5 8 3l85 -26q5 -3 5 -9q-2 -11 -4.5 -22.5t-4.5 -22.5q9 -6 15 -13.5t12 -16.5q12 1 23.5 1.5t23.5 0.5q5 0 7 -5l19 -87q2 -5 -4 -8
+q-11 -5 -21 -9l-23 -7q-1 -6 -1.5 -10t-2.5 -9.5t-4 -9t-4 -7.5l15 -21l12 -20q2 -5 -2 -9l-66 -60q-4 -4 -9 0q-9 8 -18.5 15t-17.5 15q-21 -8 -39 -9l-10 -22l-11 -20q-3 -5 -8 -3l-85 26q-5 3 -5 9q2 11 3.5 23t4.5 23q-15 13 -26 29q-12 -2 -24.5 -3t-23.5 1q-5 0 -8 5z
+M589 573q0 5 6 8q10 2 20.5 4.5t21.5 4.5q2 4 3 8.5t3 8.5t5 7t5 8q-6 10 -10 20l-8 20q-2 4 2 8l67 44q5 3 9 -1q8 -7 15 -15l14 -16q17 3 35 3q12 19 25 34q3 4 9 3l72 -36q5 -3 3 -9q-2 -10 -5.5 -19.5t-6.5 -20.5q10 -13 19 -30q11 -1 22 -1.5t22 -2.5q5 -2 5 -7l5 -81
+q0 -4 -5 -6q-10 -2 -20 -5l-22 -5q-2 -4 -3 -7.5t-3 -7.5q-3 -8 -9 -15q6 -11 10 -21t8 -19q2 -5 -3 -8l-66 -45q-6 -3 -9 1q-13 13 -29 32q-9 -2 -18 -3t-18 0q-6 -10 -12 -19l-13 -17q-3 -3 -9 -1l-72 36q-6 2 -3 7l6 21q3 10 7 20q-6 6 -11 13.5t-9 16.5q-11 1 -22 1.5
+t-22 2.5q-5 0 -5 6zM693 148q-8 -23 3 -44.5t36 -29.5q23 -8 44.5 3t28.5 35q9 23 -2 44.5t-36 30.5q-23 7 -44.5 -4t-29.5 -35zM716.5 528q7.5 -21 27.5 -32q21 -9 42 -2t31 27q10 21 3 42t-27 30q-20 11 -41 3.5t-32 -27.5t-3.5 -41z" />
+ <glyph glyph-name="uni2708" unicode="✈" horiz-adv-x="1030"
+d="M282 -170l125 400h-179l-113 -100h-100l80 170l-80 170h100l113 -100h179l-125 400h100l225 -400h258q6 0 16 -0.5t36 -4t46 -10.5t36 -21t16 -34q0 -31 -37.5 -48.5t-75.5 -19.5l-37 -2h-258l-225 -400h-100z" />
+ <glyph glyph-name="uni2709" unicode="✉" horiz-adv-x="930"
+d="M45 536q-23 12 -28 33q1 19 25 21h846q33 0 23 -25q-7 -19 -26 -29l-375 -202q-19 -10 -45 -10t-45 10zM896 436q15 4 17 1.5t2 -12.5v-367q0 -16 -17 -32t-33 -16h-800q-16 0 -33 16t-17 32v367q0 10 2 12.5t17 -1.5l386 -202q19 -10 45 -10t45 10z" />
+ <glyph glyph-name="uni270D" unicode="✍"
+d="M0 92v474q0 32 12.5 61t33.5 50t50 34t62 13h553q2 0 5 -0.5t5 -0.5l-98 -98h-465q-24 0 -41.5 -17.5t-17.5 -41.5v-474q0 -24 17.5 -41.5t41.5 -17.5h553q24 0 41 17.5t17 41.5v229l99 98v-327q0 -33 -12.5 -61t-34 -50t-50 -34.5t-60.5 -12.5h-553q-33 0 -62 12.5
+t-50 34.5t-33.5 50t-12.5 61zM324 101l56 169l335 335l113 -114l-334 -335zM445 257q3 -4 8.5 -4t8.5 4l263 262q10 10 0.5 18.5t-18.5 -0.5l-262 -262q-9 -9 0 -18zM772 662l47 48q15 15 35 15t33 -15l24 -23l23 -23q13 -15 13.5 -34.5t-13.5 -34.5l-49 -47z" />
+ <glyph glyph-name="uni2715" unicode="✕" horiz-adv-x="500"
+d="M467 142q17 -17 17 -42t-17 -42t-42 -17t-42 17l-133 151l-133 -151q-17 -17 -42 -17t-42 17t-17 42t17 42l137 158l-137 158q-17 17 -17 42t17 42t42 17t42 -17l133 -151l133 151q17 17 42 17t42 -17t17 -42t-17 -42l-137 -158z" />
+ <glyph glyph-name="uni2716" unicode="✖" horiz-adv-x="870"
+d="M435 720q174 0 297 -123t123 -297t-123 -297t-297 -123t-297 123t-123 297t123 297t297 123zM521 300l153 153l-86 86l-153 -153l-153 153l-86 -86l153 -153l-153 -153l86 -87l153 154l153 -153l86 86z" />
+ <glyph glyph-name="uni2731" unicode="✱" horiz-adv-x="733"
+d="M1 457q-5 19 5 37l37 64q11 18 30.5 23t37.5 -5l170 -99v197q0 21 14 35.5t36 14.5h72q21 0 35.5 -14.5t14.5 -34.5v-198l170 99q18 10 37.5 5t30.5 -23l35 -64q11 -18 6 -37t-23 -29l-171 -99l171 -99q18 -11 23 -29.5t-5 -36.5l-36 -65q-11 -17 -30.5 -22t-37.5 5
+l-170 99v-197q0 -21 -14.5 -35.5t-35.5 -14.5h-72q-22 0 -36 14.5t-14 34.5v198l-170 -99q-18 -11 -37.5 -5.5t-30.5 22.5l-37 65q-9 18 -4.5 36.5t22.5 29.5l172 99l-172 99q-18 10 -23 29z" />
+ <glyph glyph-name="uni2753" unicode="❓" horiz-adv-x="610"
+d="M15 476q5 130 77 202t203 72q128 0 214 -62t86 -183q0 -68 -42 -125q-13 -19 -88 -78l-46 -32q-29 -22 -42 -43.5t-14 -60.5q0 -13 -15 -13h-129q-16 0 -16 12q2 52 6.5 79.5t20.5 45.5q17 20 49.5 46t56.5 42l23 16q61 46 61 102q0 44 -25 79q-25 36 -93 36
+q-67 0 -94 -44q-28 -45 -28 -91h-165zM292 54q45 -2 73.5 -31t27.5 -75t-31.5 -73t-75.5 -25q-44 2 -72.5 30.5t-27.5 73.5q1 46 31.5 74t74.5 26z" />
+ <glyph glyph-name="uni2757" unicode="❗" horiz-adv-x="789"
+d="M0 329q0 82 31 153.5t84.5 125.5t125.5 85t154 31t153.5 -31t125 -85t84.5 -125.5t31 -153.5t-31 -153.5t-84.5 -125.5t-125 -85t-153.5 -31t-154 31t-125.5 85t-84.5 125.5t-31 153.5zM333 579l6 -365q2 -15 16 -15h80q14 0 14 15l8 365q1 6 -4 11q-4 4 -11 4h-95
+q-7 0 -10 -4q-4 -4 -4 -11zM336 66q0 -15 15 -15h89q5 0 10 4t5 11v86q0 6 -5 10.5t-10 4.5h-89q-15 0 -15 -15v-86z" />
+ <glyph glyph-name="uni2795" unicode="➕" horiz-adv-x="870"
+d="M435 720q174 0 297 -123t123 -297t-123 -297t-297 -123t-297 123t-123 297t123 297t297 123zM486 249h202l-1 102h-201v201h-102v-201h-202v-102h202v-202h102v202z" />
+ <glyph glyph-name="uni27A2" unicode="➢" horiz-adv-x="890"
+d="M863 717q6 -6 9 -12t2.5 -14.5t-2 -15.5t-7.5 -19.5t-12 -23.5l-16 -30l-18 -37q-54 -113 -147 -287l-158 -292l-65 -117l-54 380l-380 54q442 248 696 370l37 18l30 16q11 6 23.5 12t19.5 7.5t15.5 2t14.5 -2.5t12 -9zM772 619l-304 -279l28 -233z" />
+ <glyph glyph-name="uni27A6" unicode="➦"
+d="M0 4q0 107 37 202t112 166t190.5 112.5t273.5 42.5v150q0 37 18 45t46 -18l252 -254q18 -17 18 -42q0 -24 -18 -42l-252 -254q-26 -26 -45 -18t-19 44v170q-135 -1 -237 -29t-172.5 -76t-110.5 -112.5t-51 -139.5q-2 -17 -19 -17h-1q-17 0 -19 17q-3 26 -3 53z" />
+ <glyph glyph-name="uni27F2" unicode="⟲" horiz-adv-x="970"
+d="M546 710q169 0 289 -120t120 -290t-120 -290t-289 -120q-140 0 -251 87l70 75q83 -60 181 -60q127 0 217 90.5t90 217.5t-90 217t-217 90q-124 0 -213 -86.5t-93 -210.5h143l-184 -205l-184 205h123q4 167 123 283.5t285 116.5z" />
+ <glyph glyph-name="uni27F3" unicode="⟳" horiz-adv-x="970"
+d="M424 710q166 0 285 -116.5t123 -283.5h123l-184 -205l-184 205h143q-4 124 -93 210.5t-213 86.5q-127 0 -217 -90t-90 -217t90 -217.5t217 -90.5q98 0 181 60l70 -75q-111 -87 -251 -87q-169 0 -289 120t-120 290t120 290t289 120z" />
+ <glyph glyph-name="uni2B0C" unicode="⬌" horiz-adv-x="394"
+d="M0.5 131q4.5 12 28.5 12h100v372h-100q-24 0 -28.5 11t12.5 28l158 159q10 11 27 11q16 0 26 -11l158 -159q17 -16 12 -27.5t-29 -11.5h-100v-372h100q24 0 29 -11t-12 -28l-158 -159q-10 -11 -27 -11q-16 0 -26 11l-158 159q-17 15 -12.5 27z" />
+ <glyph glyph-name="uni2B0D" unicode="⬍" horiz-adv-x="789"
+d="M0 310q0 16 11 26l158 159q16 16 27.5 11.5t11.5 -28.5v-101h373v101q0 24 11 28.5t28 -12.5l159 -158q10 -10 10 -26t-10 -26l-159 -159q-16 -17 -27.5 -12t-11.5 29v101h-373v-101q0 -24 -11 -28.5t-28 12.5l-158 158q-11 10 -11 26z" />
+ <glyph glyph-name="uni2ECF" unicode="⻏" horiz-adv-x="789"
+d="M0 -30v102q0 15 10.5 25.5t25.5 10.5h718q14 0 24.5 -10.5t10.5 -25.5v-102q0 -15 -10.5 -25.5t-24.5 -10.5h-718q-15 0 -25.5 10.5t-10.5 25.5zM3 239q-9 23 8 39l358 359q11 11 25.5 11t25.5 -11l359 -359q17 -16 7 -39q-8 -22 -32 -22h-718q-24 0 -33 22z" />
+ <glyph glyph-name="uniE700" unicode="" horiz-adv-x="1030"
+d="M634 78q89 -32 135 -65t46 -58v-105h-800v201q13 6 29.5 11.5t32 10t19.5 5.5q94 34 129.5 69t35.5 95q0 20 -10 31.5t-24 31.5t-21 58q-2 12 -9.5 17.5t-14.5 8t-14 17t-9 43.5q0 15 4.5 25.5t8.5 13.5l5 3q-9 50 -13 88q-2 21 5.5 47.5t27.5 55.5t63.5 48.5t104.5 19.5
+t104.5 -19.5t63.5 -48.5t27.5 -55.5t5.5 -47.5l-13 -88q18 -8 18 -42q-2 -29 -9 -43.5t-14 -17t-14.5 -8t-9.5 -17.5q-7 -38 -21 -58t-24 -31.5t-10 -31.5q0 -60 35.5 -95t129.5 -69zM865 350h150v-100h-150v-150h-100v150h-150v100h150v150h100v-150z" />
+ <glyph glyph-name="uniE701" unicode="" horiz-adv-x="413"
+d="M0.5 423.5q4.5 13.5 26.5 17.5l251 35l111 228q10 20 25 20v-667l-223 -118q-22 -10 -33.5 -1.5t-6.5 31.5l43 248l-181 177q-17 16 -12.5 29.5z" />
+ <glyph glyph-name="uniE704" unicode="" horiz-adv-x="950"
+d="M469 760q94 1 179.5 -34.5t148 -96t100 -145t38.5 -178.5t-34.5 -179.5t-96 -148t-145 -100t-178.5 -38.5t-179.5 34.5t-148 96t-100 145t-38.5 178.5t34.5 179.5t96 148t145 100t178.5 38.5zM535 84q1 31 -18 50t-50 20q-29 0 -48 -19t-20 -47q-1 -30 18 -48.5t50 -19.5
+q29 0 48 18t20 46zM475 486q67 0 67 -66q0 -14 -11 -31.5t-24 -27.5q-3 -1 -16 -10.5t-33 -25.5t-31 -28q-16 -19 -18 -87h107q0 21 5 34q6 16 28 34l28 19q30 23 43.5 36t26 37.5t12.5 55.5q0 74 -53.5 114t-135.5 40q-84 0 -128 -46.5t-48 -130.5h111v5q0 28 16 53
+q15 25 54 25z" />
+ <glyph glyph-name="uniE705" unicode="" horiz-adv-x="950"
+d="M469 760q94 1 179.5 -34.5t148 -96t100 -145t38.5 -178.5t-34.5 -179.5t-96 -148t-145 -100t-178.5 -38.5t-179.5 34.5t-148 96t-100 145t-38.5 178.5t34.5 179.5t96 148t145 100t178.5 38.5zM520 607q-43 0 -65.5 -23.5t-22.5 -50.5q-1 -28 15.5 -43.5t48.5 -15.5
+q38 0 61 21.5t23 52.5q0 59 -60 59zM400 12q30 0 84.5 27t105.5 78l-18 24q-46 -36 -72 -36q-12 0 -3 38l42 159q26 96 -21 96q-31 0 -91 -28.5t-115 -74.5l16 -26q17 11 42.5 22t33.5 11t0 -34l-37 -151q-27 -105 33 -105z" />
+ <glyph glyph-name="uniE708" unicode=""
+d="M0 -26v276q0 17 11.5 28.5t28.5 11.5h355q17 0 28.5 -11.5t11.5 -28.5v-276q0 -17 -11.5 -28.5t-28.5 -11.5h-355q-17 0 -28.5 11.5t-11.5 28.5zM0 408v277q0 16 11.5 27.5t28.5 11.5h355q17 0 28.5 -11.5t11.5 -27.5v-277q0 -17 -11.5 -28t-28.5 -11h-355
+q-17 0 -28.5 11t-11.5 28zM514 -26v276q0 17 11 28.5t28 11.5h355q16 0 27.5 -11.5t11.5 -28.5v-276q0 -17 -11.5 -28.5t-27.5 -11.5h-355q-17 0 -28 11.5t-11 28.5zM514 408v277q0 16 11 27.5t28 11.5h355q16 0 27.5 -11.5t11.5 -27.5v-277q0 -17 -11.5 -28t-27.5 -11h-355
+q-17 0 -28 11t-11 28z" />
+ <glyph glyph-name="uniE70B" unicode=""
+d="M0 328.5q0 22.5 13 42.5q40 64 91.5 115t111 86.5t124.5 54t134 18.5q27 0 54 -4t53 -9l45 81q5 8 13 10q6 3 15 -1l68 -39q7 -5 10 -12.5t-1 -15.5l-398 -710q-4 -8 -12 -10q-2 -1 -5 -1t-10 2l-69 39q-8 4 -10 12t2 16l34 59q-75 34 -138.5 91t-111.5 134
+q-13 19 -13 41.5zM79 329q42 -67 98.5 -117.5t123.5 -81.5l30 54q-45 32 -71.5 81.5t-26.5 109.5q0 40 13 76.5t35 66.5q-60 -31 -111.5 -78.5t-90.5 -110.5zM316 375q0 -11 8.5 -20t21 -9t21 9t8.5 20q0 40 27 67.5t67 27.5q13 0 21.5 9t8.5 20q0 13 -8.5 21.5t-21.5 8.5
+q-31 0 -59.5 -12t-49 -32.5t-32.5 -49t-12 -60.5zM477 13l45 82q107 13 196 74.5t150 159.5q-55 87 -134 145l39 71q47 -34 88 -77t75 -97q11 -20 11 -42.5t-11 -41.5q-82 -131 -201.5 -202t-257.5 -72zM556 155l146 262q2 -10 3 -20t1 -22q0 -38 -11 -72t-31 -62.5
+t-48 -50.5t-60 -35z" />
+ <glyph glyph-name="uniE70D" unicode="" horiz-adv-x="945"
+d="M0 434v229q0 25 18 43t43 18h228q26 0 57 -12.5t48 -30.5l338 -377q16 -18 16.5 -43.5t-16.5 -43.5l-266 -264q-18 -18 -43 -18.5t-43 18.5l-337 377q-17 19 -30 49t-13 55zM99 566q0 -24 17.5 -41.5t41.5 -17.5t41.5 17.5t17.5 41.5t-17.5 41.5t-41.5 17.5t-41.5 -17.5
+t-17.5 -41.5zM399 723h87q26 0 57 -13t48 -31l337 -376q17 -19 17.5 -44t-17.5 -43l-265 -264q-18 -18 -43 -18.5t-43 18.5l-6 7l258 258q18 18 17.5 43.5t-17.5 43.5l-336 377q-16 16 -43 28t-51 14z" />
+ <glyph glyph-name="uniE711" unicode="" horiz-adv-x="1030"
+d="M776 443q99 0 169 -68.5t70 -165.5t-70 -165.5t-169 -68.5h-191v190h105l-175 230l-175 -230h105v-190h-249q-75 0 -128 52t-53 125t53 125t128 52q7 0 21 -2q-3 18 -3 38q0 108 78 184t188 76q89 0 159.5 -52t95.5 -133q19 3 41 3z" />
+ <glyph glyph-name="uniE714" unicode="" horiz-adv-x="1350"
+d="M277 350l312 -311l-139 -139l-450 450l450 450l139 -139zM900 800l450 -450l-450 -450l-139 139l312 311l-312 311z" />
+ <glyph glyph-name="uniE715" unicode=""
+d="M0 92v474q0 32 12.5 61t33.5 50t50 34t62 13h429q-3 -16 -3 -33v-26q-84 -11 -159 -40h-267q-24 0 -41.5 -17.5t-17.5 -41.5v-474q0 -24 17.5 -41.5t41.5 -17.5h553q24 0 41 17.5t17 41.5v57q9 5 17 11t16 14l66 65v-147q0 -33 -12.5 -61t-34 -50t-50 -34.5t-60.5 -12.5
+h-553q-33 0 -62 12.5t-50 34.5t-33.5 50t-12.5 61zM198 134v19q0 85 29 160.5t89 132t151 89t215 33.5v119q0 29 15 35.5t36 -14.5l201 -201q13 -13 13 -34q0 -20 -13 -32l-201 -202q-21 -21 -36 -14.5t-15 36.5v133q-106 0 -187 -22t-137 -60t-87.5 -89.5t-39.5 -110.5
+q-3 -14 -16 -14t-15 14q-2 12 -2 22z" />
+ <glyph glyph-name="uniE716" unicode=""
+d="M0 -46v178q0 24 9.5 45.5t26 37.5t38 25.5t45.5 9.5h710q25 0 46.5 -9.5t37 -25.5t25 -37.5t9.5 -45.5v-178q0 -20 -20 -20h-907q-20 0 -20 20zM138 33q0 -8 5.5 -13.5t14.5 -5.5h631q9 0 14.5 5.5t5.5 13.5v20q0 9 -5.5 14.5t-14.5 5.5h-631q-9 0 -14.5 -5.5t-5.5 -14.5
+v-20zM158 309v376q0 16 11.5 27.5t28.5 11.5h335v-197q0 -25 17 -42.5t42 -17.5h197v-158h-631zM592 527v197l197 -197h-197z" />
+ <glyph glyph-name="uniE718" unicode="" horiz-adv-x="830"
+d="M715 650q41 0 70.5 -29.5t29.5 -70.5v-350q0 -41 -29.5 -70.5t-70.5 -29.5h-200v-150l-200 150h-200q-41 0 -70.5 29.5t-29.5 70.5v350q0 41 29.5 70.5t70.5 29.5h600z" />
+ <glyph glyph-name="uniE720" unicode=""
+d="M0 443q0 58 30.5 109t82.5 89t122 60.5t150 22.5t150 -22.5t122 -60.5t82 -89t30 -109q0 -59 -30 -110t-82 -89t-122 -60t-150 -22q-19 0 -36.5 1.5t-35.5 3.5q-36 -28 -77 -48t-89 -30q-21 -5 -42 -6q-12 -2 -17 11v1q-2 6 2 10l8 8q18 18 31.5 39t22.5 67
+q-70 38 -111 96t-41 128zM321 77l13 8q13 -2 26 -2h25q98 0 182.5 27.5t147 76t98 114.5t35.5 142q0 20 -3 41q48 -38 75 -86t27 -104q0 -69 -41 -126.5t-110 -96.5q8 -46 22 -66.5t31 -38.5q5 -5 8.5 -9.5t1.5 -9.5q-1 -6 -6.5 -10t-10.5 -3q-11 2 -21 3.5t-21 4.5
+q-93 20 -165 76q-18 -2 -36 -3.5t-37 -1.5q-69 0 -129.5 17t-111.5 47z" />
+ <glyph glyph-name="uniE722" unicode="" horiz-adv-x="1030"
+d="M915 700q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-800q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h800zM915 0v600h-800v-600h800zM465 195v-90h-250v90h250zM465 345v-90h-250v90h250zM465 495v-90h-250v90h250zM810 175
+q2 0 3.5 -17.5t1.5 -35.5v-17h-250q0 70 5 70q10 2 24 7t37.5 22t23.5 37q0 16 -13.5 34.5t-27.5 45.5t-14 64q0 55 20.5 82.5t69.5 27.5t69.5 -27.5t20.5 -82.5q0 -37 -14 -64t-27.5 -45.5t-13.5 -34.5q0 -20 21.5 -36.5t42.5 -22.5z" />
+ <glyph glyph-name="uniE724" unicode="" horiz-adv-x="557"
+d="M0 445q0 58 22 108.5t60 88t88.5 60t108.5 22.5t108.5 -22.5t88.5 -60t60 -88t22 -108.5q0 -42 -12.5 -79t-31.5 -71l-189 -327q-19 -34 -46 -34t-46 34l-189 327q-19 34 -31.5 71.5t-12.5 78.5zM141 444.5q0 -28.5 10.5 -53.5t29.5 -44t44.5 -29.5t53.5 -10.5t53.5 10.5
+t44 29.5t29.5 44t11 53.5t-11 54t-29.5 44t-44 29.5t-53.5 11t-53.5 -11t-44.5 -29.5t-29.5 -44t-10.5 -54z" />
+ <glyph glyph-name="uniE729" unicode="" horiz-adv-x="682"
+d="M0 546.5q0 8.5 0.5 17t0.5 18.5q12 6 34.5 10t49.5 7.5t55 5.5t52 3q-3 17 -1.5 33.5t7.5 34.5q1 5 6 12.5t19.5 15.5t42.5 14t75 6t75 -6t42.5 -14t19.5 -16l6 -13q7 -18 8 -34t-1 -33q23 -1 51.5 -3t55.5 -5.5t49 -7.5t34 -10q1 -10 1 -18v-17v-17q0 -8 -1 -18
+q-10 -6 -32 -10.5t-48 -7.5t-53.5 -5t-50.5 -3t-39 -1.5t-17 -0.5l-100 -1h-14h-29q-20 0 -57 1q-2 0 -17.5 0.5t-38.5 1.5t-50.5 3t-53.5 5t-47.5 7.5t-32.5 10.5q0 10 -0.5 18t-0.5 16.5zM71 444q43 -6 88.5 -8.5t79.5 -3.5q9 -1 24 -1h78h77q15 0 24 1q35 1 80.5 3.5
+t89.5 8.5q-6 -80 -9 -163t-7 -163q-1 -20 -1.5 -44.5t-2 -47.5t-6.5 -42.5t-15 -30.5q-13 -11 -44.5 -15t-61.5 -4h-248q-31 0 -62 4t-43 15q-11 11 -15.5 30.5t-6.5 42.5t-2.5 47.5t-1.5 44.5q-4 80 -7.5 163t-7.5 163zM155 337q1 -15 1 -29t1 -23q0 -12 1 -20
+q2 -36 3.5 -72t3.5 -70q1 -9 1 -18v-21v-13q0 -6 0.5 -14.5t1.5 -20.5q1 -8 10 -14.5t15 -6.5q5 -1 10 -1t9 -1h11q5 0 5 20v301q0 9 -5.5 14.5t-14.5 5.5l-34 2q-9 0 -14 -5t-5 -14zM268.5 625.5q0.5 -6.5 2.5 -15.5q9 1 21 1h49l71 -1q1 9 1.5 15.5t-0.5 11.5
+q-12 4 -31.5 5.5t-40.5 1.5t-40.5 -1.5t-31.5 -5.5q-1 -5 -0.5 -11.5zM307 33q0 -8 5.5 -14t13.5 -6h30q8 0 14 6t6 14v300q0 9 -11.5 14t-15.5 5h-15q-3 0 -15 -5t-12 -14v-300zM455 33q0 -20 4 -20h12q3 1 13.5 1.5t15.5 0.5q5 1 9 7t5 14q0 12 0.5 20.5t0.5 14.5
+q0 7 1 13v21q0 9 1 18q2 34 3 69.5t3 71.5q0 9 1 21q1 9 1.5 23t1.5 29q0 9 -5 14t-14 5l-34 -2q-9 0 -14 -5.5t-5 -14.5v-301z" />
+ <glyph glyph-name="uniE730" unicode="" horiz-adv-x="730"
+d="M615 750q41 0 70.5 -29.5t29.5 -70.5v-700q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v700q0 41 29.5 70.5t70.5 29.5h500zM615 -50v700h-500v-700h500z" />
+ <glyph glyph-name="uniE736" unicode="" horiz-adv-x="730"
+d="M665 550q21 0 35.5 -14.5t14.5 -35.5v-600q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-150q-21 0 -35.5 14.5t-14.5 35.5v600q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h150zM115 150h100v351q0 21 14 35t35 14h151v100
+h-300v-500zM615 -50v500h-300v-500h300z" />
+ <glyph glyph-name="uniE73A" unicode="" horiz-adv-x="790"
+d="M15 680q155 0 295.5 -60t242.5 -162t162 -242.5t60 -295.5h-118q0 130 -51 249t-137 205t-205 137t-249 51v118zM15 443q142 0 262.5 -70t190.5 -190.5t70 -262.5h-118q0 167 -119 286t-286 119v118zM128 147q47 0 80.5 -33.5t33.5 -80.5t-33.5 -80t-80.5 -33t-80 33
+t-33 80t33 80.5t80 33.5z" />
+ <glyph glyph-name="uniE73D" unicode="" horiz-adv-x="1006"
+d="M209 74q33 0 56 -23t23 -56t-23 -55t-56 -22q-31 0 -54.5 22t-23.5 55t22.5 56t55.5 23zM738.5 74q32.5 0 55 -23t22.5 -56t-22.5 -55t-55 -22t-55.5 22t-23 55t23 56t55.5 23zM261 662h565q26 0 40.5 -13.5t14.5 -36.5v-233q0 -20 -13 -34t-33 -16l-505 -57
+q-20 -2 -29 -16.5t0 -28t31 -13.5h479q27 0 37.5 -21t0 -41t-37.5 -20h-489q-52 0 -84 33t-27 77t47 76l43 32l-155 339h-76q-28 0 -39 22.5t0 45t39 22.5h89q31 0 45 -12.5t26 -41.5zM606 592h-130l26 -84h124zM294 592l38 -84h127l-28 84h-137zM402 351l100 10l-32 101
+h-119zM546 366l113 12l-25 84h-119zM812 395v67h-132l20 -78zM812 508v84h-161l19 -84h142z" />
+ <glyph glyph-name="uniE744" unicode="" horiz-adv-x="789"
+d="M0 -22v269q0 27 13.5 33t33.5 -13l86 -85l141 141q6 6 15.5 6t16.5 -6l82 -82q7 -8 7 -17.5t-7 -15.5l-141 -141l86 -85q20 -20 13.5 -34t-33.5 -14h-268q-19 0 -31 13q-14 14 -14 31zM395 434.5q0 9.5 6 15.5l141 141l-85 85q-20 20 -14 34t34 14h267q19 0 32 -13
+q13 -14 13 -32v-268q0 -27 -13.5 -33t-33.5 13l-85 85l-141 -140q-7 -7 -16 -7t-17 7l-82 81q-6 8 -6 17.5z" />
+ <glyph glyph-name="uniE746" unicode="" horiz-adv-x="789"
+d="M0 38.5q0 9.5 6 16.5l141 140l-85 86q-20 20 -13.5 33.5t33.5 13.5h267q20 0 32 -13q14 -13 14 -31v-269q0 -27 -14 -33t-34 14l-85 86l-141 -141q-6 -8 -15.5 -8t-17.5 8l-82 82q-6 6 -6 15.5zM395 373v269q0 27 13.5 33t33.5 -14l85 -86l141 141q7 8 16.5 8t16.5 -8
+l82 -82q6 -6 6 -15.5t-6 -16.5l-141 -140l85 -86q20 -20 14 -33.5t-34 -13.5h-267q-21 0 -32 13q-13 13 -13 31z" />
+ <glyph glyph-name="uniE750" unicode="" horiz-adv-x="789"
+d="M0 394.5q0 68.5 26 128.5t70.5 104.5t104.5 70.5t128 26t128 -26t104.5 -70.5t70.5 -104.5t26 -129q0 -50 -14.5 -95.5t-40.5 -85.5l177 -176q9 -10 9 -24t-9 -23l-46 -46q-10 -10 -23.5 -10t-23.5 10l-176 177q-40 -27 -85.5 -41t-96.5 -14q-68 0 -128 25.5t-104.5 70.5
+t-70.5 104.5t-26 128zM132 394q0 -41 15 -76.5t42 -62.5t63 -42.5t77.5 -15.5t77 15.5t62.5 42.5t42 62.5t15 76.5t-15 77t-42 63t-62.5 42.5t-77 15.5t-77.5 -15.5t-63 -42.5t-42 -63t-15 -77zM198 378v33q0 7 4.5 12t11.5 5h82v82q0 6 4.5 11t12.5 5h32q8 0 12.5 -5
+t4.5 -11v-82h82q17 0 17 -17v-33q0 -16 -17 -16h-82v-83q0 -16 -17 -16h-32q-17 0 -17 16v83h-82q-7 0 -11.5 4.5t-4.5 11.5z" />
+ <glyph glyph-name="uniE751" unicode="" horiz-adv-x="789"
+d="M0 394.5q0 68.5 26 128.5t70.5 104.5t104.5 70.5t128 26t128 -26t104.5 -70.5t70.5 -104.5t26 -129q0 -50 -14.5 -95.5t-40.5 -85.5l177 -176q9 -10 9 -24t-9 -23l-46 -46q-10 -10 -23.5 -10t-23.5 10l-176 177q-40 -27 -85.5 -41t-96.5 -14q-68 0 -128 25.5t-104.5 70.5
+t-70.5 104.5t-26 128zM132 394q0 -41 15 -76.5t42 -62.5t63 -42.5t77.5 -15.5t77 15.5t62.5 42.5t42 62.5t15 76.5t-15 77t-42 63t-62.5 42.5t-77 15.5t-77.5 -15.5t-63 -42.5t-42 -63t-15 -77zM198 378v33q0 7 4.5 12t11.5 5h230q17 0 17 -17v-33q0 -16 -17 -16h-230
+q-7 0 -11.5 4.5t-4.5 11.5z" />
+ <glyph glyph-name="uniE75C" unicode="" horiz-adv-x="789"
+d="M0 406.5q0 19.5 15 34.5l51 52q15 15 35 15t35 -15l261 -262l257 262q14 15 34 15t35 -15l52 -52q14 -15 15 -34.5t-14 -34.5l-347 -346q-14 -15 -34 -15t-35 15l-345 346q-15 15 -15 34.5z" />
+ <glyph glyph-name="uniE75D" unicode="" horiz-adv-x="495"
+d="M0 327.5q0 19.5 15 34.5l345 346q15 15 35 15t34 -15l52 -52q15 -14 15 -34t-15 -35l-261 -262l261 -257q15 -15 15 -34.5t-15 -34.5l-52 -52q-14 -15 -34 -15t-35 15l-345 346q-15 15 -15 34.5z" />
+ <glyph glyph-name="uniE75E" unicode="" horiz-adv-x="495"
+d="M0 34q0 20 15 35l261 261l-261 258q-15 15 -15 34.5t15 33.5l51 53q15 15 35 15t35 -15l345 -346q15 -15 15 -35t-15 -35l-345 -345q-15 -15 -35 -15t-35 15l-51 51q-15 15 -15 35z" />
+ <glyph glyph-name="uniE75F" unicode="" horiz-adv-x="789"
+d="M-0.5 116.5q-0.5 19.5 14.5 34.5l346 346q15 15 35 15t34 -15l346 -346q14 -15 14 -34.5t-14 -33.5l-52 -53q-15 -15 -35 -15t-34 15l-261 262l-257 -262q-15 -15 -35 -15t-35 15l-51 53q-15 14 -15.5 33.5z" />
+ <glyph glyph-name="uniE762" unicode=""
+d="M0 -34v726q0 20 18 30q20 7 33 -8l335 -362q9 -9 9 -23t-9 -23l-335 -362q-9 -10 -22 -10q-3 0 -11 2q-18 9 -18 30zM395 -34v726q0 20 18 30q20 7 32 -8l336 -362q8 -9 8 -23t-8 -23l-336 -362q-8 -10 -21 -10q-3 0 -11 2q-18 9 -18 30zM789 -27q0 -16 12 -27.5
+t27 -11.5h79q17 0 28.5 11.5t11.5 27.5v711q0 17 -11.5 28.5t-28.5 11.5h-79q-15 0 -27 -11.5t-12 -28.5v-711z" />
+ <glyph glyph-name="uniE763" unicode=""
+d="M0 -27q0 -16 11.5 -27.5t27.5 -11.5h79q17 0 28.5 11.5t11.5 27.5v711q0 17 -11.5 28.5t-28.5 11.5h-79q-16 0 -27.5 -11.5t-11.5 -28.5v-711zM158 329q0 14 8 22l336 363q7 10 21 10q3 0 12 -2q18 -10 18 -31v-725q0 -21 -18 -30q-20 -7 -33 8l-336 362q-8 9 -8 23z
+M553 329q0 14 8 22l336 363q7 10 21 10q3 0 11 -2q18 -10 18 -31v-725q0 -21 -18 -30q-20 -7 -32 8l-336 362q-8 9 -8 23z" />
+ <glyph glyph-name="uniE782" unicode="" horiz-adv-x="1228"
+d="M256 38.5q0 41.5 30.5 72t71.5 30.5h513q40 0 71 -30.5t31 -72t-31 -72t-71 -30.5h-513q-41 0 -71.5 30.5t-30.5 72zM256 294.5q0 40.5 30.5 71.5t71.5 31h513q40 0 71 -31t31 -71.5t-31 -71.5t-71 -31h-513q-41 0 -71.5 31t-30.5 71.5zM256 550q0 41 30.5 72t71.5 31
+h513q40 0 71 -31t31 -72t-31 -71.5t-71 -30.5h-513q-41 0 -71.5 30.5t-30.5 71.5z" />
+ <glyph glyph-name="uniE78E" unicode="" horiz-adv-x="750"
+d="M0 309q0 94 43 175.5t121 134.5q7 4 15 4q7 -1 13 -9l44 -65q10 -17 -5 -27q-54 -37 -83 -93t-29 -120q0 -53 20 -99.5t54.5 -81.5t81.5 -55t100 -20t100 20t82 55t55 81.5t20 99.5q0 64 -29.5 120t-83.5 93q-6 3 -8 12q-2 7 3 15l45 65q5 7 12.5 8.5t14.5 -3.5
+q77 -53 121 -134.5t44 -175.5q0 -78 -29.5 -146t-81 -119t-119.5 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM316 349v355q0 20 20 20h79q8 0 14 -6t6 -14v-355q0 -8 -6 -14t-14 -6h-79q-20 0 -20 20z" />
+ <glyph glyph-name="uniE792" unicode=""
+d="M0 -66v790h79v-790h-79zM117 -66v790h19v-790h-19zM183 -66v790h60v-790h-60zM280 -66v790h40v-790h-40zM367 -66v790h39v-790h-39zM464 -66v790h19v-790h-19zM521 -66v790h79v-790h-79zM627 -66v790h40v-790h-40zM724 -66v790h20v-790h-20zM812 -66v790h19v-790h-19z
+M868 -66v790h79v-790h-79z" />
+ <glyph glyph-name="uniE794" unicode="" horiz-adv-x="558"
+d="M0 214q0 41 11.5 79t32.5 71q11 17 35 49.5t53 76t56.5 95t44.5 107.5q5 18 18 26t28 6q16 2 29 -6t18 -26q17 -56 44.5 -107.5t56.5 -95t53 -76t35 -49.5q21 -33 32.5 -71t11.5 -79q0 -58 -22 -109t-60 -89t-89 -60t-109 -22t-108.5 22t-88.5 60t-60 89t-22 109z
+M122 152q0 -29 20.5 -49t50.5 -20q28 0 48.5 20t20.5 49q0 19 -10 38q-4 4 -10 12t-13 19t-14 24t-11 27q-4 10 -11 7q-10 3 -12 -7q-4 -14 -11.5 -27t-14.5 -24t-13 -19t-8 -12q-12 -18 -12 -38z" />
+ <glyph glyph-name="uniE7A2" unicode="" horiz-adv-x="917"
+d="M842 355h-331v335q138 0 234.5 -97t96.5 -234v-4zM406 250h333v4q0 -138 -97.5 -235t-235 -97t-234.5 97t-97 234.5t97 235t234 97.5v-336z" />
+ <glyph glyph-name="uniE7AC" unicode="" horiz-adv-x="1224"
+d="M144 329l285 122v86l-285 121v-89l188 -76l-188 -75v-89zM470 260h286v69h-286v-69zM1224 800v-900h-1224v900h1224z" />
+ <glyph glyph-name="uniE7B5" unicode="" horiz-adv-x="1021"
+d="M475 -139v115l-150 -57l-15 26l165 101v58h-317q-19 0 -32.5 13t-13.5 32q0 17 12 29.5t30 15.5v414q-18 1 -30 13.5t-12 29.5q0 19 13.5 32t32.5 13h326l18 49h12l18 -49h332q18 0 31.5 -13t13.5 -32t-13.5 -32t-31.5 -13v-412q18 0 31.5 -13t13.5 -32t-13.5 -32
+t-31.5 -13h-328v-58l166 -101l-14 -26l-152 57v-115q0 -13 -9 -22.5t-22 -9.5q-14 0 -22 9.5t-8 22.5zM806 198v404h-595v-404h595z" />
+ <glyph glyph-name="uniE800" unicode="" horiz-adv-x="828"
+d="M0.5 423.5q4.5 13.5 26.5 17.5l251 35l111 228q10 20 24.5 20t24.5 -20l113 -228l249 -35q23 -4 27.5 -17.5t-11.5 -29.5l-181 -177l42 -248q3 -17 -2.5 -26t-16.5 -9q-7 0 -20 5l-224 118l-223 -118q-13 -5 -20 -5q-12 0 -17.5 9t-2.5 26l43 248l-181 177
+q-17 16 -12.5 29.5zM143 377l105 -103l31 -28l-7 -41l-26 -147l131 70l37 19l37 -19l130 -70l-24 147l-8 41l30 28l106 103l-146 21l-41 7l-19 37l-65 132l-66 -132l-17 -37l-42 -7z" />
+ <glyph glyph-name="uniE801" unicode="" horiz-adv-x="828"
+d="M0.5 423.5q4.5 13.5 26.5 17.5l251 36l111 227q11 21 25 21t24 -21l113 -227l249 -36q23 -4 27.5 -17.5t-11.5 -29.5l-181 -177l42 -248q4 -23 -7.5 -31.5t-31.5 3.5l-224 116l-223 -116q-22 -12 -33.5 -3.5t-6.5 31.5l43 248l-181 177q-17 16 -12.5 29.5z" />
+ <glyph glyph-name="uniE802" unicode=""
+d="M0 377q0 72 37.5 135t101.5 110t150.5 74.5t184.5 27.5t184 -27.5t150.5 -74.5t101.5 -110t37 -134.5t-37 -135t-101.5 -110t-150.5 -74t-184 -27.5q-47 0 -89 6q-44 -33 -95 -57.5t-109 -36.5l-25 -5l-27 -4q-16 -2 -21 15v1q-2 7 4 12l9 10l21 23q10 11 17.5 25.5
+t14.5 34t12 48.5q-85 47 -135.5 118t-50.5 156z" />
+ <glyph glyph-name="uniE803" unicode=""
+d="M0 63v79q0 20 20 20h113q26 0 50.5 16t48 43t46.5 61l46 72l60 90q30 45 64.5 79.5t75.5 56.5t93 22h104v94q0 21 12.5 25.5t30.5 -10.5l172 -142q11 -10 11 -24t-11 -23l-172 -144q-18 -14 -30.5 -10t-12.5 25v91h-104q-28 0 -52 -16.5t-47.5 -43.5t-47.5 -62l-46 -71
+q-28 -46 -58 -90.5t-65 -79t-76.5 -56t-91.5 -21.5h-113q-8 0 -14 5t-6 14zM0 504v79q0 8 6 14t14 6h113q54 0 98 -25t81 -65q-19 -26 -36 -52l-33 -50q-26 33 -53 53t-57 20h-113q-8 0 -14 5.5t-6 14.5zM439 134l35 51l32 51q27 -32 53.5 -52t57.5 -20h104v99q0 21 12.5 25
+t30.5 -11l172 -143q11 -9 11 -23q0 -15 -11 -24l-172 -142q-18 -15 -30.5 -11t-12.5 25v87h-104q-56 0 -98.5 24t-79.5 64z" />
+ <glyph glyph-name="uniE804" unicode="" horiz-adv-x="789"
+d="M0 -34v726q0 20 18 30q20 7 33 -8l335 -362q9 -9 9 -23t-9 -23l-335 -362q-9 -10 -22 -10q-3 0 -11 2q-18 9 -18 30zM395 -34v726q0 20 18 30q20 7 32 -8l336 -362q8 -9 8 -23t-8 -23l-336 -362q-8 -10 -21 -10q-3 0 -11 2q-18 9 -18 30z" />
+ <glyph glyph-name="uniE805" unicode="" horiz-adv-x="552"
+d="M0 -27q0 -16 11.5 -27.5t27.5 -11.5h79q17 0 28.5 11.5t11.5 27.5v711q0 17 -11.5 28.5t-28.5 11.5h-79q-16 0 -27.5 -11.5t-11.5 -28.5v-711zM158 329q0 14 8 22l336 363q7 10 21 10q3 0 12 -2q18 -10 18 -31v-725q0 -21 -18 -30q-20 -7 -33 8l-336 362q-8 9 -8 23z" />
+ <glyph glyph-name="uniE806" unicode="" horiz-adv-x="552"
+d="M0 -34v726q0 20 18 30q20 7 33 -8l335 -362q9 -9 9 -23t-9 -23l-335 -362q-9 -10 -22 -10q-3 0 -11 2q-18 9 -18 30zM395 -27q0 -16 11.5 -27.5t27.5 -11.5h79q16 0 28 11.5t12 27.5v711q0 17 -12 28.5t-28 11.5h-79q-16 0 -27.5 -11.5t-11.5 -28.5v-711z" />
+ <glyph glyph-name="uniE807" unicode="" horiz-adv-x="789"
+d="M0 -30v718q0 15 10.5 25.5t25.5 10.5h718q14 0 24.5 -10.5t10.5 -25.5v-718q0 -15 -10.5 -25.5t-24.5 -10.5h-718q-15 0 -25.5 10.5t-10.5 25.5z" />
+ <glyph glyph-name="uniE808" unicode="" horiz-adv-x="789"
+d="M0 -30v718q0 15 10.5 25.5t25.5 10.5h251q15 0 25.5 -10.5t10.5 -25.5v-718q0 -15 -10.5 -25.5t-25.5 -10.5h-251q-15 0 -25.5 10.5t-10.5 25.5zM466 -30v718q0 15 10.5 25.5t25.5 10.5h252q14 0 24.5 -10.5t10.5 -25.5v-718q0 -15 -10.5 -25.5t-24.5 -10.5h-252
+q-15 0 -25.5 10.5t-10.5 25.5z" />
+ <glyph glyph-name="uniE809" unicode="" horiz-adv-x="693"
+d="M0 -30v718q0 20 18 30q19 12 36 0l622 -357q18 -13 18 -32t-18 -32l-622 -358q-9 -5 -18.5 -5t-17.5 5q-18 11 -18 31z" />
+ <glyph glyph-name="uniE80A" unicode="" horiz-adv-x="789"
+d="M0 433v230q0 25 18 43t43 18h230q25 0 55.5 -13t48.5 -30l377 -377q17 -18 17 -43.5t-17 -43.5l-266 -265q-18 -18 -43 -18t-43 18l-377 377q-18 18 -30.5 48.5t-12.5 55.5zM99 566q0 -24 17.5 -41.5t41.5 -17.5t41.5 17.5t17.5 41.5t-17.5 41.5t-41.5 17.5t-41.5 -17.5
+t-17.5 -41.5z" />
+ <glyph glyph-name="uniE80B" unicode=""
+d="M0 -26v139q0 17 11.5 28t28.5 11h153q15 0 27 -11t12 -28v-139q0 -17 -12 -28.5t-27 -11.5h-153q-17 0 -28.5 11.5t-11.5 28.5zM0 271v116q0 17 11.5 28t28.5 11h153q15 0 27 -11t12 -28v-116q0 -17 -12 -28.5t-27 -11.5h-153q-17 0 -28.5 11.5t-11.5 28.5zM0 545v140
+q0 16 11.5 27.5t28.5 11.5h153q15 0 27 -11.5t12 -27.5v-140q0 -17 -12 -28.5t-27 -11.5h-153q-17 0 -28.5 11.5t-11.5 28.5zM311 -26v139q0 17 11.5 28t28.5 11h557q16 0 27.5 -11t11.5 -28v-139q0 -17 -11.5 -28.5t-27.5 -11.5h-557q-17 0 -28.5 11.5t-11.5 28.5zM311 271
+v116q0 17 11.5 28t28.5 11h557q16 0 27.5 -11t11.5 -28v-116q0 -17 -11.5 -28.5t-27.5 -11.5h-557q-17 0 -28.5 11.5t-11.5 28.5zM311 545v140q0 16 11.5 27.5t28.5 11.5h557q16 0 27.5 -11.5t11.5 -27.5v-140q0 -17 -11.5 -28.5t-27.5 -11.5h-557q-17 0 -28.5 11.5
+t-11.5 28.5z" />
+ <glyph glyph-name="uniE80C" unicode=""
+d="M0 -26v139q0 17 11.5 28t28.5 11h184q16 0 27.5 -11t11.5 -28v-139q0 -17 -11.5 -28.5t-27.5 -11.5h-184q-17 0 -28.5 11.5t-11.5 28.5zM0 271v116q0 17 11.5 28t28.5 11h184q16 0 27.5 -11t11.5 -28v-116q0 -17 -11.5 -28.5t-27.5 -11.5h-184q-17 0 -28.5 11.5
+t-11.5 28.5zM0 545v140q0 16 11.5 27.5t28.5 11.5h184q16 0 27.5 -11.5t11.5 -27.5v-140q0 -17 -11.5 -28.5t-27.5 -11.5h-184q-17 0 -28.5 11.5t-11.5 28.5zM342 -26v139q0 17 11.5 28t28.5 11h184q16 0 27.5 -11t11.5 -28v-139q0 -17 -11.5 -28.5t-27.5 -11.5h-184
+q-17 0 -28.5 11.5t-11.5 28.5zM342 271v116q0 17 11.5 28t28.5 11h184q16 0 27.5 -11t11.5 -28v-116q0 -17 -11.5 -28.5t-27.5 -11.5h-184q-17 0 -28.5 11.5t-11.5 28.5zM342 545v140q0 16 11.5 27.5t28.5 11.5h184q16 0 27.5 -11.5t11.5 -27.5v-140q0 -17 -11.5 -28.5
+t-27.5 -11.5h-184q-17 0 -28.5 11.5t-11.5 28.5zM684 -26v139q0 17 11.5 28t28.5 11h184q16 0 27.5 -11t11.5 -28v-139q0 -17 -11.5 -28.5t-27.5 -11.5h-184q-17 0 -28.5 11.5t-11.5 28.5zM684 271v116q0 17 11.5 28t28.5 11h184q16 0 27.5 -11t11.5 -28v-116
+q0 -17 -11.5 -28.5t-27.5 -11.5h-184q-17 0 -28.5 11.5t-11.5 28.5zM684 545v140q0 16 11.5 27.5t28.5 11.5h184q16 0 27.5 -11.5t11.5 -27.5v-140q0 -17 -11.5 -28.5t-27.5 -11.5h-184q-17 0 -28.5 11.5t-11.5 28.5z" />
+ <glyph glyph-name="uniE80D" unicode="" horiz-adv-x="789"
+d="M0 33q0 20 15 35l261 262l-261 257q-15 15 -15 35t15 34l51 52q15 15 35 15t35 -15l259 -259l259 259q14 15 34 15t35 -15l52 -52q14 -14 14 -34t-14 -35l-261 -262l261 -257q14 -15 14 -34.5t-14 -34.5l-52 -52q-15 -15 -35 -15t-34 15l-259 260l-260 -260
+q-15 -15 -34.5 -15t-34.5 15l-51 51q-15 15 -15 35z" />
+ <glyph glyph-name="uniE80E" unicode=""
+d="M1 339q3 12 14 20l433 356q12 9 25.5 9t25.5 -9l133 -109v61q0 20 20 20h117q20 0 20 -20v-190l144 -118q10 -8 13 -20t-1 -24q-10 -25 -38 -25h-79v-316q0 -17 -11 -28.5t-28 -11.5h-216v237h-198v-237h-217q-17 0 -28.5 11.5t-11.5 28.5v316h-79q-26 0 -37 25
+q-4 12 -1 24z" />
+ <glyph glyph-name="uniE80F" unicode=""
+d="M0 305.5q0 22.5 13 42.5q40 64 91.5 115t111 86.5t124.5 54t134 18.5t134.5 -18.5t124.5 -53.5t110.5 -86t92.5 -116q11 -20 11 -42.5t-11 -41.5q-41 -66 -92.5 -117t-110.5 -85.5t-124.5 -53t-134.5 -18.5t-134 18.5t-124.5 53.5t-111 86t-91.5 116q-13 19 -13 41.5z
+M79 306q34 -54 77 -98t93.5 -74.5t107 -47.5t117.5 -17t117 17t106.5 47.5t94 74.5t76.5 98q-41 66 -96 116t-121 81q26 -31 40.5 -69t14.5 -82q0 -49 -18.5 -92t-51 -75.5t-75.5 -51t-92 -18.5t-91.5 18.5t-75.5 51t-51 75.5t-18 92q0 40 13 76.5t35 65.5
+q-60 -30 -111.5 -78t-90.5 -110zM316 352q0 -11 8.5 -20t21 -9t21 9t8.5 20q0 40 27 67.5t67 27.5q13 0 21.5 9t8.5 20q0 13 -8.5 21.5t-21.5 8.5q-31 0 -59.5 -12t-49 -32.5t-32.5 -49t-12 -60.5z" />
+ <glyph glyph-name="uniE810" unicode=""
+d="M0 -7v672q0 24 17.5 41.5t41.5 17.5h356q24 0 41.5 -17.5t17.5 -41.5t17 -41.5t42 -17.5h355q25 0 42 -18t17 -42v-553q0 -24 -17 -41.5t-42 -17.5h-829q-24 0 -41.5 17.5t-17.5 41.5z" />
+ <glyph glyph-name="uniE811" unicode="" horiz-adv-x="530"
+d="M265 700q103 0 176.5 -73t73.5 -177q0 -67 -25.5 -148t-62.5 -149.5t-74 -127t-63 -91.5l-25 -34l-27 35q-17 22 -60 89t-76 130t-60 146t-27 150q0 104 73.5 177t176.5 73zM265 312q56 0 95.5 39.5t39.5 95.5t-39.5 95.5t-95.5 39.5t-95.5 -39.5t-39.5 -95.5t39.5 -95.5
+t95.5 -39.5z" />
+ <glyph glyph-name="uniE812" unicode="" horiz-adv-x="1030"
+d="M871 466h-100l-124 151l-214 -151h-180q-53 0 -90.5 -38t-37.5 -92v-159l-107 297q-6 16 0.5 31t21.5 20l680 248q15 5 29 -2t20 -23zM977 376q16 0 27 -11.5t11 -28.5v-471q0 -17 -11 -28.5t-27 -11.5h-724q-16 0 -27 11.5t-11 28.5v471q0 17 11 28.5t27 11.5h724z
+M922 -75v161l-73 161l-167 -60l-129 -133l-139 172l-92 -215v-86h600z" />
+ <glyph glyph-name="uniE813" unicode=""
+d="M0 665v39q0 20 20 20h119q8 0 19 -2.5t19 -4.5q3 -2 7 -7t8 -12t6.5 -14t3.5 -11l14 -64h692q18 0 29.5 -13.5t8.5 -30.5l-55 -297q-4 -13 -14.5 -22t-24.5 -9h-557l18 -86q2 -8 8.5 -13.5t15.5 -5.5h440q8 0 14 -5.5t6 -14.5v-40q0 -8 -6 -13.5t-14 -5.5h-84h-335h-54
+q-8 0 -18.5 1.5t-18.5 4.5q-3 2 -7 7.5t-8 12.5t-6.5 13.5t-3.5 11.5l-110 522q-3 8 -9.5 13.5t-15.5 5.5h-87q-20 0 -20 20zM299 -7q0 24 17.5 42t41.5 18q25 0 42.5 -18t17.5 -42t-17.5 -41.5t-42.5 -17.5q-24 0 -41.5 17.5t-17.5 41.5zM634 -7q0 24 17 42t41.5 18t42 -18
+t17.5 -42t-17.5 -41.5t-42 -17.5t-41.5 17.5t-17 41.5z" />
+ <glyph glyph-name="uniE814" unicode="" horiz-adv-x="1228"
+d="M31 151q0 46 82 97q66 36 143 46v51q-77 77 -77 190q0 194 154 194q77 0 97 -20q26 -20 36 -92q-97 -66 -98 -246q0 -159 67 -230q-26 0 -71 -31l-36 -20l-11 -10q-15 -11 -25 -21l-26 -26q-25 0 -138 31q-97 31 -97 87zM281 -43.5q0 40.5 93 97.5q87 46 158 51v56
+q-82 77 -81 205q0 210 163.5 210t163.5 -210q0 -128 -81 -205v-56q71 -6 158 -51.5t87 -96.5q0 -41 -71 -62q-77 -21 -149 -31q-46 -5 -107.5 -5t-107.5 5q-71 10 -148.5 31t-77.5 61.5zM763 617q10 72 36 92q20 20 97 20q153 0 153 -194q0 -113 -76 -190v-51
+q76 -10 143 -46q87 -46 87 -97t-102 -87q-113 -31 -139 -31l-25 26q-10 10 -26 21l-10 10q-20 10 -36 20q-46 31 -71 31q66 71 66 230q0 180 -97 246z" />
+ <glyph glyph-name="uniE815" unicode="" horiz-adv-x="1228"
+d="M358 341l384 414l-128 -358l257 -149l-384 -414l127 358z" />
+ <glyph glyph-name="uniE817" unicode="" horiz-adv-x="961"
+d="M481 722q169 0 287 -117t118 -286q0 -170 -117.5 -288.5t-287.5 -118.5q-169 0 -287.5 118.5t-118.5 288.5q0 167 118.5 285t287.5 118zM504 -11q67 0 116 169q-58 -6 -116 -8v-161zM375 70q34 -81 81 -81v161q-58 2 -115 8q11 -48 34 -88zM152 272q34 -40 133 -57
+q-7 46 -7 100q0 33 3 69q-82 16 -117 31q-14 -47 -14 -96q0 -33 2 -47zM322 315q0 -57 8 -109q60 -10 126 -12v176q-76 2 -132 9q0 -11 -1 -32t-1 -32zM454 646q-43 -16 -76 -77t-48 -148q61 -5 126 -7v232h-2zM536 629q-26 17 -32 17v-232q62 1 127 7q-26 145 -95 208z
+M504 194q64 1 126 11q8 40 8 110q0 41 -2 63q-64 -7 -132 -8v-176zM680 384q2 -24 2 -69q0 -49 -6 -101q90 15 112.5 36.5t22.5 68.5q0 50 -15 95q-57 -24 -116 -30zM779 458q-57 123 -179 167q54 -70 74 -199q84 15 105 32zM248 550q-40 -36 -66 -91q6 -5 104 -31
+q22 124 75 196q-80 -38 -113 -74zM248 85q40 -44 106 -71q-40 56 -60 151q-84 19 -125 41q31 -77 79 -121zM714 85q48 45 75 116q-47 -21 -121 -37q-23 -96 -62 -150q68 28 108 71z" />
+ <glyph glyph-name="uniF301" unicode="" horiz-adv-x="978"
+d="M188 800h602q73 0 123.5 -51t50.5 -123v-602q0 -72 -50.5 -123t-123.5 -51h-602q-72 0 -123 51t-51 123v602q0 72 51 123t123 51zM515 -150h141v371h139l6 134h-145v97q0 32 10.5 46t45.5 14l85 -1l4 126q-41 4 -95 4q-95 0 -143 -49t-48 -123v-114h-99v-134h99v-371z
+" />
+ <glyph glyph-name="uniF303" unicode="" horiz-adv-x="1332"
+d="M1318 385q-35 -5 -77.5 -0.5t-69.5 15.5q53 4 90.5 27t51.5 57q-22 -14 -69.5 -21t-84.5 4q-1 4 -3 14.5t-4 16.5q-26 97 -105.5 161.5t-170.5 54.5l29 11q2 1 14.5 4t24 6.5t23.5 9t17.5 12t1.5 14.5q-2 7 -14.5 7.5t-29.5 -4t-32.5 -9.5t-31 -11t-18.5 -7q64 24 69 53
+q-59 -8 -103 -49q17 19 20 39q-68 -43 -115 -122.5t-89 -192.5q-62 59 -99 79q-136 73 -335 148q-4 -42 23.5 -87.5t88.5 -77.5q-27 4 -81 -9q9 -48 43 -81t104 -49q-61 -4 -90 -35q19 -37 59.5 -61.5t101.5 -18.5q-35 -15 -46.5 -36.5t-2 -39t34.5 -28.5t55 -6
+q-68 -71 -158.5 -94.5t-177 -1.5t-148.5 82q79 -108 191.5 -172.5t229 -80t237 6.5t219.5 77.5t172.5 142.5t99.5 193q101 -1 155 59z" />
+ <glyph glyph-name="uniF308" unicode="" horiz-adv-x="1132"
+d="M456 224q0 51 -22 87.5t-52.5 36.5t-52 -36.5t-21.5 -87.5t21.5 -87t52.5 -36t52.5 36t21.5 87zM856 224q0 51 -22 87.5t-52.5 36.5t-53 -36.5t-22.5 -87.5t22 -87t53.5 -36t53 36t21.5 87zM933 238q0 -37 -4.5 -68.5t-14.5 -55t-21 -42.5t-29.5 -32.5t-35 -23.5
+t-42.5 -16t-46.5 -10t-52 -6t-54.5 -2.5t-58 -0.5q-65 0 -114 5.5t-97 21.5t-78 43.5t-49 74.5t-19 112q0 78 61 142q23 24 58.5 33.5t65.5 8.5t84.5 -5.5t87.5 -4.5t87 4.5t85 5.5t66.5 -8.5t57.5 -32.5q62 -67 62 -143zM724 -99q156 15 239.5 64.5t120.5 136.5q6 12 19 59
+q16 52 16 174q0 146 -102 248q31 101 -15 216q-3 1 -9 2t-27 -1t-45.5 -9t-65.5 -27t-85 -50q-91 23 -198 23q-115 0 -218 -28q-47 32 -89 53t-68.5 28t-46.5 10t-28 1l-9 -2q-21 -54 -24 -108.5t2.5 -79.5t12.5 -43q-90 -98 -90 -233q0 -115 27 -193q2 -8 22 -48
+q87 -162 364 -193h297z" />
+ <glyph glyph-name="u1D30D" unicode="𝌍" horiz-adv-x="1228"
+d="M154 294q0 190 133 323q138 138 327 138q195 0 323 -138q138 -128 138 -323q0 -189 -138 -327q-133 -133 -323 -133q-184 0 -327 133q-133 143 -133 327zM251 494h30q26 -30 32 -30q25 -93 55 -108l26 -15q16 0 16 25q0 20 -10 31q0 20 4 25q11 21 21 26q10 20 15 20
+l11 -15q15 -30 30 -36v-10q6 -15 6 -20v-10q0 -6 -6 -6q0 -5 -8 -5h-12q5 0 5 -10q6 -11 10 -15l11 -26l15 -26q5 -10 15 -20q16 -31 36 -36q21 -15 56 -15v-21l11 -5q5 0 5 -5q20 0 30 5l6 -5q-6 -20 -47 -41l-40 -15v-11q0 -5 -3 -15t-3 -25q-10 -57 -15 -62q26 -6 41 -5
+q10 0 41 10l41 10q15 -10 25 -25v-15l16 -6v-20l-5 -6l5 -10h15q31 0 36 36q41 16 61 46q21 26 21 72l-5 5q-21 36 -21 46q-15 31 -15 41q10 -15 30 -15h6l26 5l-16 25v6l20 -21l-10 -26l26 16l15 -5q16 5 26 30h-10v26l-16 -10l-5 5v5q-15 0 -20 5q-6 0 -6 11v4
+q-36 21 -46 21v-21v-10h-5q-25 31 -56 31h-20q-11 10 -21 10h-10v16l-10 5q0 5 -3 15t-3 20q-5 21 -15 32l5 10h-20q-10 36 -21 35l5 26v20l-15 6q-26 0 -26 -26l16 -31q-10 -20 -10 -25q0 -16 5 -21l-5 -10q-10 -10 -11 -20v-6l-46 -35q-5 0 -5 10v10v10q0 16 -15 36l15 -5
+q16 0 26 36v20q0 21 -6 26q11 0 11 25q56 11 56 72q0 16 -15 46l-10 10h5q15 -26 30 -25q6 0 16 10q5 10 5 21q0 15 -11 25l-4 5v6q20 10 20 15q5 5 5 15v31q-51 10 -72 10q-225 0 -363 -215zM650 305v20q0 -5 11 -15zM676 238v16q0 10 5 15v-31h20v5v-5h6q10 0 15 5l10 -5
+q16 -5 16 -15q0 -5 -6 -11h-10q-20 0 -30.5 -10t-15.5 -10l-5 5q20 0 20 21v15h-15l-5 5h-5zM758 207q5 -5 10 -5v-10q-5 -10 -5 -15v10q-5 5 -5 20zM891 141q0 -16 15 -31q10 -10 26 -10l10 -5q10 0 10 -5q-15 51 -25 56q-16 16 -31 25q0 -10 -5 -20v-10z" />
+ <glyph glyph-name="u1F304" unicode="🌄"
+d="M0 -7v672q0 24 17.5 41.5t41.5 17.5h829q25 0 42 -17.5t17 -41.5v-672q0 -24 -17 -41.5t-42 -17.5h-829q-24 0 -41.5 17.5t-17.5 41.5zM79 13h789v632h-789v-632zM158 92v54l142 185l97 -80l182 276l210 -218v-217h-631zM158 486q0 33 23 56.5t57 23.5q33 0 56 -23.5
+t23 -56.5t-23 -56t-56 -23q-34 0 -57 23t-23 56z" />
+ <glyph glyph-name="u1F310" unicode="🌐" horiz-adv-x="1228"
+d="M307 -115q0 51 51 51h205v61q-127 16 -235 113q-11 10 -11 36q0 21 11 31q15 15 30 15q21 0 36 -15q72 -72 169 -87h102q98 15 170 87q92 92 92 220t-92 220l-31 36l138 133q10 15 30.5 15t31.5 -15q15 -10 15 -30.5t-15 -30.5l-72 -77q87 -113 87 -251q0 -159 -118 -287
+q-107 -97 -236 -113v-61h206q51 0 51 -51t-51 -51h-513q-51 0 -51 51zM364 396.5q0 102.5 74 177t176.5 74.5t176.5 -74.5t74 -177t-74 -176.5t-176.5 -74t-176.5 74t-74 176.5z" />
+ <glyph glyph-name="u1F381" unicode="🎁"
+d="M0 230v198q0 8 6 14t14 6h272q-29 0 -54 10.5t-44 29.5t-30 44t-11 53.5t11 54t30 44t44 29.5t54 11q30 0 57.5 -12.5t45.5 -35.5l79 -102l79 102q18 23 45 35.5t58 12.5q28 0 53.5 -11t44.5 -29.5t30 -44t11 -54t-11 -53.5t-30 -44t-44.5 -29.5t-53.5 -10.5h271
+q9 0 14.5 -6t5.5 -14v-198q0 -8 -5.5 -13.5t-14.5 -5.5h-59v-218q0 -24 -17 -41.5t-42 -17.5h-671q-24 0 -41.5 17.5t-17.5 41.5v218h-59q-8 0 -14 5.5t-6 13.5zM232 586q0 -24 17.5 -41.5t42.5 -17.5h119l-77 99q-6 5 -16.5 12t-25.5 7q-25 0 -42.5 -17.5t-17.5 -41.5z
+M375 45q0 -16 11.5 -27.5t28.5 -11.5h118q16 0 28 11.5t12 27.5v403h-198v-403zM536 527h120q24 0 42 17.5t18 41.5t-18 41.5t-42 17.5q-16 0 -26.5 -7t-15.5 -12z" />
+ <glyph glyph-name="u1F3A4" unicode="🎤" horiz-adv-x="670"
+d="M635 438q8 0 14 -6t6 -14v-138q0 -93 -69 -165t-201 -83v-132h130q8 0 14 -6t6 -14v-60q0 -8 -6 -14t-14 -6h-360q-8 0 -14 6t-6 14v60q0 8 6 14t14 6h130v132q-132 11 -201 83t-69 165v138q0 8 6 14t14 6h30q8 0 14 -6t6 -14v-138q0 -28 12 -57t38.5 -58t78 -47
+t121.5 -18t121.5 18t78 47t38.5 58t12 57v138q0 8 6 14t14 6h30zM335 200q-79 0 -114.5 25t-35.5 55v158h300v-158q0 -30 -35.5 -55t-114.5 -25zM485 720v-212h-300v212q0 30 35.5 55t114.5 25t114.5 -25t35.5 -55z" />
+ <glyph glyph-name="u1F3A7" unicode="🎧"
+d="M0 309q0 57 19.5 110t52.5 99t79 83.5t98.5 65t110 42.5t114.5 15t114 -15t110 -42.5t98.5 -65t78.5 -83.5t52.5 -99t19.5 -110q0 -92 -38 -174l-13 -29l-85 -13q-14 -51 -55.5 -85t-97.5 -34v-20q0 -8 -6 -14t-14 -6h-40q-9 0 -14 6t-5 14v355q0 8 5 14t14 6h40
+q8 0 14 -6t6 -14v-19q44 0 79.5 -22t56.5 -57l20 2q15 45 15 96q0 61 -32.5 115t-84 94t-114.5 64t-124 24t-124.5 -24t-114.5 -64t-83.5 -94t-32.5 -115q0 -48 15 -96l20 -2q21 35 56 57t79 22v19q0 8 6 14t14 6h40q9 0 14 -6t5 -14v-355q0 -8 -5 -14t-14 -6h-40
+q-8 0 -14 6t-6 14v20q-55 0 -96.5 34t-55.5 85l-85 13l-14 29q-38 82 -38 174z" />
+ <glyph glyph-name="u1F3C6" unicode="🏆" horiz-adv-x="930"
+d="M524 82v-65q71 -8 117 -32t46 -55q0 -37 -65 -63.5t-157 -26.5t-157 26.5t-65 63.5q0 31 46 55t117 32v65q0 50 -33 85t-112 87q-45 30 -69 47.5t-63.5 54.5t-60 72t-37 88.5t-16.5 115.5q0 14 10 24.5t25 10.5h172q21 39 81.5 66t161.5 27t161.5 -27t81.5 -66h172
+q15 0 25 -10.5t10 -24.5q0 -62 -16.5 -115.5t-37 -88.5t-60 -72t-63.5 -54.5t-69 -47.5q-79 -52 -112 -87t-33 -85zM663 335q80 54 126 112t54 150h-126q-5 -157 -54 -262zM465 699q-39 0 -72 -6t-54 -15t-36 -20t-21.5 -20t-6.5 -16t6.5 -16t21.5 -20t36 -20t54 -15t72 -6
+t72 6t54 15t36 20t21.5 20t6.5 16t-6.5 16t-21.5 20t-36 20t-54 15t-72 6zM87 597q8 -92 54 -150t126 -112q-49 105 -54 262h-126z" />
+ <glyph glyph-name="u1F3C9" unicode="🏉" horiz-adv-x="868"
+d="M0 470v96q0 17 11.5 28t28.5 11h166q-1 6 -1 13v12v2q0 27 2 45t8 28t16.5 14.5t28.5 4.5h348q17 0 28 -4.5t17 -14.5t8 -28t2 -45v-14q0 -6 -1 -13h166q17 0 28.5 -11t11.5 -28v-96q0 -33 -23 -67.5t-62.5 -65.5t-92.5 -55t-114 -33q-27 -5 -47.5 -21.5t-20.5 -36.5
+q0 -18 9 -26.5t20 -15.5t20.5 -16t11.5 -27q3 -12 -1 -24q-2 -8 12.5 -12.5t35 -9.5t42 -11.5t33.5 -17.5q6 -5 9.5 -20.5t4.5 -33.5q1 -16 -3 -29.5t-15 -13.5h-506q-10 0 -14.5 13.5t-3.5 29.5q1 18 5 33.5t10 20.5q11 11 32.5 17.5t42 11.5t35 9.5t12.5 12t-2 12.5v12
+q1 18 11 27t21.5 16t20.5 15.5t9 26.5q0 20 -20.5 36.5t-47.5 21.5q-60 10 -113.5 34t-93 54.5t-62.5 65t-23 67.5zM79 470q0 -11 12 -28t34.5 -36t55 -37t72.5 -31q-13 41 -23 90t-17 98h-134v-56zM616 338q40 13 72 31t54.5 37t34.5 36t12 28v56h-134q-7 -49 -17 -98
+t-22 -90z" />
+ <glyph glyph-name="u1F44D" unicode="👍" horiz-adv-x="824"
+d="M0.5 168q-1.5 59 2 118t13.5 110q47 3 98.5 3t94.5 -10q7 -40 11 -96t5.5 -116t0.5 -116.5t-5 -98.5q-19 -3 -43.5 -3.5t-51.5 1t-53 2t-47 0.5q-10 40 -17 93.5t-8.5 112.5zM96 41q0 -17 11.5 -28.5t28.5 -11.5t28 11.5t11 28.5q0 15 -11 26.5t-28 11.5t-28.5 -11.5
+t-11.5 -26.5zM253 368q23 10 37 20t25.5 22.5t24 27.5t32.5 36q16 17 29.5 28t24.5 21t20 21t18 27q17 31 22.5 68.5t13.5 71.5q0 7 7 12q20 3 37 -4t29.5 -18.5t20.5 -27.5t11 -29q7 -35 -1 -63t-20 -53l-24 -49q-11 -24 -12 -50q23 -10 55 -10.5t66.5 1.5t67 2t55 -9
+t30 -30.5t-5.5 -63.5q0 -2 -2 -5l-6 -8q-3 -5 -5 -10l-2 -3q12 -11 17 -24t5 -21q1 -41 -34 -72q11 -15 12 -32.5t-4 -33.5t-15 -28t-23 -18q6 -36 -6.5 -61.5t-37 -40.5t-59.5 -21.5t-73 -6.5t-76.5 5.5t-70.5 14.5q-21 7 -41 15l-41 15q-20 8 -43 12.5t-48 -0.5
+q2 41 2.5 89.5t-1 98.5t-4.5 97.5t-7 86.5z" />
+ <glyph glyph-name="u1F44E" unicode="👎" horiz-adv-x="824"
+d="M1 410q-1 22 8 39.5t26 32.5q-10 15 -11 32.5t4 33.5t15 28t22 18q-6 36 6.5 61.5t37.5 40.5t59.5 21.5t72.5 6.5t76.5 -5.5t70.5 -14.5q21 -7 41 -15t41 -15.5t43.5 -11.5t47.5 1q-2 -41 -2.5 -90t1 -99t4 -97.5t8.5 -86.5q-24 -11 -38 -21t-25 -22t-23.5 -27t-32.5 -35
+q-16 -18 -29 -29l-24 -21q-12 -10 -21.5 -20.5t-18.5 -27.5q-17 -31 -21.5 -68.5t-14.5 -71.5q0 -9 -7 -12q-21 -3 -37.5 4t-29 18.5t-20.5 26.5t-11 30q-6 35 1.5 63t20 53t23.5 49.5t12 50.5q-22 9 -54.5 9t-67 -1.5t-66.5 -1.5t-54.5 9t-30.5 30.5t5 62.5q1 1 4 6l6 9
+q2 4 3 9l2 3q-11 11 -16.5 24t-5.5 21zM598 597.5q1 56.5 5 98.5q19 2 44.5 2.5t52 0t52.5 -1.5t47 -1q10 -40 16.5 -93.5t8 -112t-2 -118t-13.5 -110.5q-47 -4 -98 -4t-95 11q-7 40 -11 96t-5.5 116t-0.5 116.5zM649 618q0 -16 12 -28t28 -12t27.5 12t11.5 28t-11.5 27.5
+t-27.5 11.5t-28 -11.5t-12 -27.5z" />
+ <glyph glyph-name="u1F464" unicode="👤" horiz-adv-x="970"
+d="M751 78q94 -34 149 -67t55 -56v-105h-940v105q0 23 55 56t149 67q93 34 128 69t35 95q0 20 -10 31.5t-24 31.5t-21 58q-2 12 -9 17.5t-14.5 8t-14 17t-8.5 43.5q0 15 4.5 25.5t8.5 13.5l5 3q-9 50 -13 88q-2 21 6 47.5t27.5 55.5t62.5 48.5t103 19.5t103 -19.5
+t62.5 -48.5t27.5 -55.5t6 -47.5l-13 -88q18 -8 18 -42q-2 -29 -8.5 -43.5t-14 -17t-14.5 -8t-9 -17.5q-7 -38 -21 -58t-24 -31.5t-10 -31.5q0 -60 35 -95t128 -69z" />
+ <glyph glyph-name="u1F465" unicode="👥" horiz-adv-x="1030"
+d="M1015 -125h-225v144q0 52 -30 78.5t-154 85.5q41 29 41 81q0 14 -13.5 31.5t-18.5 49.5q-1 8 -5.5 11.5t-8.5 5t-8.5 11.5t-5.5 29q0 10 2.5 17t5.5 9l3 2q-6 33 -8 59q-1 14 3.5 31.5t16.5 37t38 32.5t62 13t62 -13t37.5 -32.5t16 -37t3.5 -31.5l-7 -59q10 -6 10 -28
+q-1 -19 -5.5 -29t-8.5 -11.5t-8.5 -5t-5.5 -11.5q-5 -32 -18.5 -49.5t-13.5 -31.5q0 -40 21 -63.5t77 -46.5q61 -25 90 -41t41 -36q5 -8 8.5 -58.5t4.5 -96.5zM526 127q89 -36 136.5 -64t47.5 -56v-132h-695v176q0 20 15.5 36t28.5 22.5t35 15.5q3 1 5 2q75 30 103 61t28 85
+q0 19 -18.5 42t-25.5 66q-2 10 -7.5 15t-11.5 7t-11 15t-7 39q0 13 3.5 22.5t7.5 12.5l4 2q-8 45 -11 79q-2 19 4.5 42t22 49t50.5 43.5t83 17.5t82.5 -17.5t50 -43.5t22 -49t4.5 -42l-10 -79q14 -7 14 -37q-2 -26 -7.5 -39t-11 -15t-11 -7t-7.5 -15q-7 -43 -25 -66t-18 -42
+q0 -54 28 -85t102 -61z" />
+ <glyph glyph-name="u1F4A1" unicode="💡" horiz-adv-x="670"
+d="M473 10h-265q0 59 -21.5 114.5t-50.5 97.5l-59 86q-29 43 -47 97t-14 112q3 43 14.5 81.5t36 76t59 64.5t88.5 44t121 17t121 -17t88.5 -44t59 -64.5t36 -76t14.5 -81.5q4 -59 -12.5 -113t-43.5 -98l-56 -86q-29 -44 -49 -98t-20 -112zM203 -159v99h264v-99
+q-60 -42 -132 -41q-72 -1 -132 41z" />
+ <glyph glyph-name="u1F4B0" unicode="💰" horiz-adv-x="803"
+d="M312 349q17 20 66 23v-84q-43 3 -59.5 10t-16.5 28q0 13 10 23zM420 108v91q48 -4 63 -10.5t15 -24.5q0 -45 -78 -56zM490 351q22 -12 29 -19.5t7 -17.5l8 -4l45 90l-7 5q-10 -7 -13 -7q-8 0 -13 3q-90 35 -126 35v18q0 14 20 18v9h-79v-9q17 -4 17 -18v-15
+q-73 -3 -113 -35.5t-40 -87.5t33.5 -78.5t119.5 -31.5v-96q-56 5 -86.5 23.5t-30.5 40.5l-7 4l-42 -94l7 -4q9 5 12 5q7 0 9 -3q72 -36 138 -40v-18q0 -15 -17 -20v-9h79v9q-20 5 -20 20v18q72 4 115.5 38.5t43.5 88.5q0 101 -149 115h-10v87q36 -2 70 -20zM531 532
+q89 -37 143.5 -118.5t54.5 -181.5q0 -136 -95.5 -231.5t-231.5 -95.5t-231.5 95.5t-95.5 231.5q0 100 54.5 181.5t142.5 118.5l-81 179q0 25 28 25h366q27 0 27 -25z" />
+ <glyph glyph-name="u1F4B5" unicode="💵" horiz-adv-x="1293"
+d="M79 291q76 0 149 24t134.5 62t121.5 85l120 92q61 46 122.5 84t134.5 62.5t149 24.5l105 -227l90 -192q-103 0 -199.5 -42t-176.5 -102l-160 -122q-80 -62 -182.5 -110.5t-212.5 -57.5l-98 210zM199 225l63 -137l64 -136q132 26 283 137q-70 27 -107 103q-32 72 -20 168
+q-154 -112 -283 -135zM1085 372l-68 145l-59 128q-136 -25 -284 -137q67 -24 106 -103q34 -75 20 -167q151 111 285 134zM428 68q-4 6 -10 18t-8 18q-5 -3 -10 -3q1 -11 6 -40q15 3 22 7zM455 90q4 6 11 21q-24 7 -38 13q0 -2 -1.5 -3.5t-3 -3.5t-1.5 -3zM371 68q1 3 6 15.5
+t8 18.5q-5 3 -9 6q-4 -6 -13 -15t-13 -14q12 -10 21 -11zM468 148q-3 14 -6 22h-1q-15 -10 -35 -20v-1q3 -3 3 -10q21 3 39 9zM329 106q27 10 37 15q-2 8 -2 9q-14 -1 -43 -1q1 -11 8 -23zM416 161q4 5 12 17l12 17q-10 9 -19 10q-10 -25 -13 -39q1 0 4 -2t4 -3zM365 145
+q3 3 5 10l-16 13l-15 12q-8 -8 -11 -20q3 -1 11.5 -4.5t14.5 -5.5t11 -5zM392 168q0 7 -2 20t-2 20q-8 -2 -23 -7q3 -3 5 -9t4 -10q-2 4 -4 10t-5 9q3 -6 8.5 -18.5t8.5 -18.5q2 1 10 4zM872 404q-8 22 -43 94q-13 -7 -19 -12q8 -16 22 -47l20 -47q12 8 20 12zM960 446
+q-5 13 -20.5 44t-23.5 49q-4 -1 -10.5 -4.5t-9.5 -4.5l44 -91q11 3 20 7zM916 426q-6 15 -14 30l-16 35l-15 29q-3 -2 -9 -5l-10 -5q26 -51 44 -92q4 1 11 4t9 4z" />
+ <glyph glyph-name="u1F4C2" unicode="📂"
+d="M0 129v536q0 24 17.5 41.5t41.5 17.5h356q24 0 41.5 -17.5t17.5 -41.5t17 -41.5t42 -17.5h227q24 0 41.5 -18t17.5 -42v-114h-632q-19 0 -36.5 -6.5t-33.5 -17.5t-27.5 -26t-17.5 -33zM22 -66l126 391q4 11 16.5 19.5t23.5 8.5h759l-133 -389q-3 -12 -16 -21t-24 -9h-752
+z" />
+ <glyph glyph-name="u1F4C4" unicode="📄" horiz-adv-x="631"
+d="M0 -7v672q0 24 17.5 41.5t41.5 17.5h230v-283q0 -25 17.5 -42t41.5 -17h284v-389q0 -24 -17.5 -41.5t-41.5 -17.5h-514q-24 0 -41.5 17.5t-17.5 41.5zM348 441v280h4l276 -277v-3h-280z" />
+ <glyph glyph-name="u1F4C5" unicode="📅" horiz-adv-x="789"
+d="M0 -7v578q0 24 17.5 41.5t41.5 17.5h38v-73q0 -29 20.5 -49.5t49.5 -20.5h16q30 0 51 20.5t21 49.5v73h61v-73q0 -29 20.5 -49.5t49.5 -20.5h17q30 0 50.5 20.5t20.5 49.5v73h61v-73q0 -29 21 -49.5t50 -20.5h16q30 0 50.5 20.5t20.5 49.5v73h38q24 0 41 -17.5t17 -41.5
+v-578q0 -24 -17 -41.5t-41 -17.5h-672q-24 0 -41.5 17.5t-17.5 41.5zM79 13h632v419h-632v-419zM136 557v135q0 13 9.5 22.5t21.5 9.5h16q14 0 23 -9.5t9 -22.5v-135q0 -12 -9 -21t-23 -9h-16q-12 0 -21.5 9t-9.5 21zM186 101q0 37 21 61t46 42l46 33q21 16 21 38
+q0 21 -12 30.5t-30 9.5q-12 0 -22 -4.5t-17 -12.5q-4 -4 -7.5 -8t-6.5 -9l-36 24q8 14 22 28q11 12 28.5 20.5t42.5 8.5q37 0 64.5 -22t27.5 -62q0 -22 -9.5 -38t-24.5 -29.5t-32 -24.5l-31 -20q-15 -11 -25 -22.5t-10 -26.5h97v36h44v-77h-195q-1 7 -1.5 13t-0.5 12z
+M356 557v135q0 13 9 22.5t21 9.5h17q13 0 22.5 -9.5t9.5 -22.5v-135q0 -12 -9.5 -21t-22.5 -9h-17q-12 0 -21 9t-9 21zM418 282v74h197v-35l-123 -245h-54l113 223q3 9 6 12l3 4v1q-3 0 -5 -1h-14h-79v-33h-44zM575 557v135q0 13 9 22.5t22 9.5h16q13 0 22.5 -9.5t9.5 -22.5
+v-135q0 -12 -9.5 -21t-22.5 -9h-16q-13 0 -22 9t-9 21z" />
+ <glyph glyph-name="u1F4C8" unicode="📈" horiz-adv-x="1228"
+d="M205 -64v666h102v-374l251 358l220 -276l113 77l61 -82l-194 -134l-195 246l-256 -363v-16h666v-102h-768z" />
+ <glyph glyph-name="u1F4CA" unicode="📊" horiz-adv-x="1228"
+d="M256 -64v307h205v-307h-205zM512 -59v712h205v-712h-205zM768 -59v507h205v-507h-205z" />
+ <glyph glyph-name="u1F4CC" unicode="📌"
+d="M1 419q4 40 22 85t49.5 87t69 72t75.5 45.5t72 15t59 -19.5q27 -19 37 -52.5t6 -74.5l148 -110q55 30 107 35t89 -23q26 -20 39 -53t12 -74t-15 -88t-42 -93l212 -203q5 -5 6 -12.5t-4 -12.5q-5 -9 -16 -9q-3 0 -9 2l-255 146q-37 -39 -77.5 -66.5t-79.5 -40t-74.5 -10
+t-63.5 23.5q-36 27 -46.5 78t3.5 112l-148 112q-38 -16 -73 -16t-61 19q-25 19 -35.5 52t-6.5 73zM84 374q1 -8 9 -13q8 -8 23 -8q16 0 33 8.5t35 23t35.5 33t33.5 39.5q5 7 4 14.5t-9 13.5q-6 5 -14 4t-13 -8q-39 -52 -69 -71.5t-36 -17.5q-7 5 -14.5 4t-13.5 -8
+q-5 -6 -4 -14zM231 322l178 -134q7 -4 12 -4q11 0 16 8q5 6 4 14t-7 13l-172 128q-16 -15 -31 -25zM414 83q-11 -17 4 -29q14 -10 35 -10q20 0 43 10.5t46.5 28.5t47 41t43.5 49q5 8 4 15.5t-9 13.5q-6 5 -14 3.5t-13 -8.5q-25 -33 -50.5 -57t-47.5 -37.5t-38.5 -17.5
+t-23.5 2q-6 5 -14 3.5t-13 -7.5z" />
+ <glyph glyph-name="u1F4CE" unicode="📎" horiz-adv-x="965"
+d="M259 -192q-58 0 -110 26.5t-84.5 72t-45.5 100t6.5 116t72.5 114.5l222 222l273 274q37 37 83.5 51t92.5 2q45 -12 79 -46t46 -79q12 -46 -2 -92.5t-51 -83.5l-474 -473q-24 -24 -52 -37t-60 -10t-56 27q-19 19 -25.5 46t4.5 60t40 62l333 332q11 10 25 10t24 -10t10 -24
+t-10 -25l-332 -333q-21 -21 -25.5 -40.5t5.5 -27.5q9 -9 23 -7q25 3 47 26l473 474q50 52 35 108q-8 27 -28 47t-47 28q-57 16 -108 -35l-274 -273l-222 -222q-44 -44 -56.5 -94t1 -91t45.5 -73t73 -45.5t91 -1t94 56.5l495 496q10 10 25 10t25 -10t10 -25t-10 -25
+l-496 -495q-83 -83 -185 -83z" />
+ <glyph glyph-name="u1F4D6" unicode="📖" horiz-adv-x="930"
+d="M355 186v-67l-200 80v67zM355 394v-68l-200 80v68zM846 746q26 10 47.5 -6t21.5 -40v-640q0 -33 -31 -46l-400 -160q-2 0 -5.5 -1.5t-7 -2t-6.5 -0.5t-6.5 0.5t-7 2t-5.5 1.5l-400 160q-31 13 -31 46v640q0 24 21.5 40t47.5 6l381 -152zM415 -48v561l-320 128v-561z
+M835 80v561l-320 -128v-561zM775 266v-67l-200 -80v67zM775 474v-68l-200 -80v68z" />
+ <glyph glyph-name="u1F50D" unicode="🔍" horiz-adv-x="820"
+d="M787 27q34 -34 7 -61l-47 -47q-14 -14 -33.5 -14t-33.5 14l-190 190q-72 -42 -156 -42q-128 0 -223.5 95.5t-95.5 223.5t90.5 218.5t218.5 90.5t223.5 -95.5t95.5 -223.5q0 -84 -45 -160zM110 386q0 -88 68 -156t156 -68t151 63t63 151t-68 156t-156 68t-151 -63
+t-63 -151z" />
+ <glyph glyph-name="u1F512" unicode="🔒" horiz-adv-x="730"
+d="M655 425q21 0 40.5 -19.5t19.5 -40.5v-390q0 -21 -14 -40t-34 -25l-59 -20q-49 -15 -98 -15h-290q-49 0 -98 15l-59 20q-20 6 -34 25t-14 40v390q0 22 15 41t35 19h100v70q0 110 51 170t149 60t149 -60t51 -170v-70h90zM265 515v-90h200v90q0 53 -27 81.5t-73 28.5
+t-73 -28.5t-27 -81.5z" />
+ <glyph glyph-name="u1F513" unicode="🔓" horiz-adv-x="730"
+d="M655 400q21 0 40.5 -19.5t19.5 -40.5v-390q0 -21 -14 -40t-34 -25l-59 -20q-49 -15 -98 -15h-290q-49 0 -98 15l-59 20q-20 6 -34 25t-14 40v390q0 22 15 41t35 19h400v140q0 53 -27 81.5t-73 28.5t-73 -28.5t-27 -81.5v-40h-100v20q0 110 51 170t149 60t149 -60t51 -170
+v-120h90z" />
+ <glyph glyph-name="u1F516" unicode="🔖" horiz-adv-x="631"
+d="M0 -9v675q0 18 9.5 32t26.5 21q5 3 10.5 4t11.5 1h516q5 0 11 -1t11 -4q17 -7 26.5 -21t9.5 -32v-675q0 -18 -9.5 -32t-26.5 -21q-16 -7 -33.5 -3.5t-28.5 16.5l-218 218l-218 -218q-12 -13 -29 -16.5t-33 3.5q-17 8 -26.5 21.5t-9.5 31.5z" />
+ <glyph glyph-name="u1F517" unicode="🔗"
+d="M0 92v474q0 32 12.5 61t33.5 50t50 34t62 13h299q-1 -8 -2 -14.5t-1 -15.5v-45q0 -12 3 -24h-299q-24 0 -41.5 -17.5t-17.5 -41.5v-474q0 -24 17.5 -41.5t41.5 -17.5h553q24 0 41 17.5t17 41.5v175q22 -16 47 -25.5t52 -10.5v-139q0 -33 -12.5 -61t-34 -50t-50 -34.5
+t-60.5 -12.5h-553q-33 0 -62 12.5t-50 34.5t-33.5 50t-12.5 61zM356 202.5q0 12.5 8 21.5l396 397h-138q-13 0 -21 8t-8 21v44q-1 12 7.5 21t21.5 9h296q11 0 20 -9t9 -21v-44v-252q0 -12 -9 -21t-20 -8h-44q-13 0 -21.5 8.5t-8.5 20.5v138l-397 -395q-8 -9 -20.5 -9
+t-21.5 9l-41 41q-8 8 -8 20.5z" />
+ <glyph glyph-name="u1F525" unicode="🔥" horiz-adv-x="710"
+d="M0 159q0 62 32 126.5t87 117.5q-12 -79 0.5 -127t32.5 -75q23 -32 55 -47q-25 111 -14 215q4 44 16 92t35.5 95t61.5 90t94 78q-24 -52 -23 -95t11 -75q12 -37 36 -67l32 -39q16 -20 27 -45.5t17 -59.5t6 -82q-9 21 -28 33.5t-43 12.5q-34 0 -56.5 -23t-22.5 -56
+q0 -17 5.5 -31.5t18 -26.5t32 -18t46.5 -6q46 4 81 32q14 13 27 31.5t21.5 45.5t10.5 63t-5 85h-1q54 -53 86.5 -117.5t32.5 -126.5q0 -56 -28 -98.5t-76.5 -70t-113 -42t-138 -14.5t-138 14.5t-113 42t-76.5 70t-28 98.5z" />
+ <glyph glyph-name="u1F554" unicode="🕔" horiz-adv-x="950"
+d="M475 760q125 0 231 -61.5t167.5 -167.5t61.5 -231t-61.5 -231t-167.5 -167.5t-231 -61.5t-231 61.5t-167.5 167.5t-61.5 231t61.5 231t167.5 167.5t231 61.5zM475 -60q149 0 254.5 105.5t105.5 254.5t-105.5 254.5t-254.5 105.5t-254.5 -105.5t-105.5 -254.5
+t105.5 -254.5t254.5 -105.5zM510 560v-246l150 -149l-50 -50l-170 170v275h70z" />
+ <glyph glyph-name="u1F6AB" unicode="🚫" horiz-adv-x="950"
+d="M475 760q125 0 231 -61.5t167.5 -167.5t61.5 -231t-61.5 -231t-167.5 -167.5t-231 -61.5t-231 61.5t-167.5 167.5t-61.5 231t61.5 231t167.5 167.5t231 61.5zM723 547h-1h1zM125 300q0 -125 79 -222l492 493q-97 79 -221 79q-145 0 -247.5 -102.5t-102.5 -247.5zM227 53
+l1 -1zM475 -50q145 0 247.5 102.5t102.5 247.5q0 124 -79 221l-492 -492q97 -79 221 -79z" />
+ </font>
+</defs></svg>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/assets/fonts/icons.ttf
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/assets/fonts/icons.ttf b/semantic/src/themes/basic/assets/fonts/icons.ttf
new file mode 100644
index 0000000..318a264
Binary files /dev/null and b/semantic/src/themes/basic/assets/fonts/icons.ttf differ
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/assets/fonts/icons.woff
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/assets/fonts/icons.woff b/semantic/src/themes/basic/assets/fonts/icons.woff
new file mode 100644
index 0000000..baba1b5
Binary files /dev/null and b/semantic/src/themes/basic/assets/fonts/icons.woff differ
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/collections/table.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/collections/table.overrides b/semantic/src/themes/basic/collections/table.overrides
new file mode 100644
index 0000000..6273007
--- /dev/null
+++ b/semantic/src/themes/basic/collections/table.overrides
@@ -0,0 +1,4 @@
+/*******************************
+ Overrides
+*******************************/
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/collections/table.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/collections/table.variables b/semantic/src/themes/basic/collections/table.variables
new file mode 100644
index 0000000..4c17ef1
--- /dev/null
+++ b/semantic/src/themes/basic/collections/table.variables
@@ -0,0 +1,11 @@
+/*-------------------
+ Table Variables
+--------------------*/
+
+@headerBackground: @white;
+@footerBackground: @white;
+
+@cellVerticalPadding: 1em;
+@cellHorizontalPadding: 1em;
+
+@stateMarkerWidth: 1px;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/elements/button.overrides b/semantic/src/themes/basic/elements/button.overrides
new file mode 100644
index 0000000..6273007
--- /dev/null
+++ b/semantic/src/themes/basic/elements/button.overrides
@@ -0,0 +1,4 @@
+/*******************************
+ Overrides
+*******************************/
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/elements/button.variables b/semantic/src/themes/basic/elements/button.variables
new file mode 100644
index 0000000..a3d1ebd
--- /dev/null
+++ b/semantic/src/themes/basic/elements/button.variables
@@ -0,0 +1,44 @@
+/*-------------------
+ Button Variables
+--------------------*/
+
+/* Button Variables */
+@textTransform: none;
+@fontWeight: normal;
+@textColor: #333333;
+
+@primaryColor: #333333;
+
+@borderRadius: 0.25em;
+
+@backgroundColor: #EEEEEE;
+@backgroundImage: none;
+@boxShadow: none;
+
+@hoverBackgroundColor: #DDDDDD;
+@hoverBackgroundImage: none;
+@hoverBoxShadow: none;
+
+@downBackgroundColor: #D0D0D0;
+@downBackgroundImage: none;
+@downBoxShadow: none;
+
+@activeBackgroundColor: #CCCCCC;
+@activeBackgroundImage: none;
+@activeBoxShadow: none;
+
+@verticalBoxShadow: none;
+
+@loadingBackgroundColor: #F0F0F0;
+
+@labeledIconLeftShadow: none;
+@labeledIconRightShadow: none;
+
+@mini: 0.6rem;
+@tiny: 0.7rem;
+@small: 0.85rem;
+@medium: 0.92rem;
+@large: 1rem;
+@big: 1.125rem;
+@huge: 1.25rem;
+@massive: 1.3rem;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/elements/icon.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/elements/icon.overrides b/semantic/src/themes/basic/elements/icon.overrides
new file mode 100644
index 0000000..c1a9b75
--- /dev/null
+++ b/semantic/src/themes/basic/elements/icon.overrides
@@ -0,0 +1,189 @@
+/* basic.icons available */
+i.icon.circle.attention:before { content: '\2757'; } /* '\u2757' */
+i.icon.circle.help:before { content: '\e704'; } /* '\ue704' */
+i.icon.circle.info:before { content: '\e705'; } /* '\ue705' */
+i.icon.add:before { content: '\2795'; } /* '\u2795' */
+
+i.icon.chart:before { content: '\U0001f4c8'; } /* '\1f4c8' */
+i.icon.chart.bar:before { content: '\U0001f4ca'; } /* '\1f4ca' */
+i.icon.chart.pie:before { content: '\e7a2'; } /* '\ue7a2' */
+
+i.icon.resize.full:before { content: '\e744'; } /* '\ue744' */
+i.icon.resize.horizontal:before { content: '\2b0d'; } /* '\u2b0d' */
+i.icon.resize.small:before { content: '\e746'; } /* '\ue746' */
+i.icon.resize.vertical:before { content: '\2b0c'; } /* '\u2b0c' */
+
+i.icon.down:before { content: '\2193'; } /* '\u2193' */
+i.icon.down.triangle:before { content: '\25be'; } /* '\u25be' */
+i.icon.down.arrow:before { content: '\e75c'; } /* '\ue75c' */
+
+i.icon.left:before { content: '\2190'; } /* '\u2190' */
+i.icon.left.triangle:before { content: '\25c2'; } /* '\u25c2' */
+i.icon.left.arrow:before { content: '\e75d'; } /* '\ue75d' */
+
+i.icon.right:before { content: '\2192'; } /* '\u2192' */
+i.icon.right.triangle:before { content: '\25b8'; } /* '\u25b8' */
+i.icon.right.arrow:before { content: '\e75e'; } /* '\ue75e' */
+
+i.icon.up:before { content: '\2191'; } /* '\u2191' */
+i.icon.up.triangle:before { content: '\25b4'; } /* '\u25b4' */
+i.icon.up.arrow:before { content: '\e75f'; } /* '\ue75f' */
+
+i.icon.folder:before { content: '\e810'; } /* '\ue810' */
+i.icon.open.folder:before { content: '\U0001f4c2'; } /* '\1f4c2' */
+
+i.icon.globe:before { content: '\U0001d30d'; } /* '\1d30d' */
+i.icon.desk.globe:before { content: '\U0001f310'; } /* '\1f310' */
+
+i.icon.star:before { content: '\e801'; } /* '\ue801' */
+i.icon.star.empty:before { content: '\e800'; } /* '\ue800' */
+i.icon.star.half:before { content: '\e701'; } /* '\ue701' */
+
+i.icon.lock:before { content: '\U0001f512'; } /* '\1f512' */
+i.icon.unlock:before { content: '\U0001f513'; } /* '\1f513' */
+
+i.icon.layout.grid:before { content: '\e80c'; } /* '\ue80c' */
+i.icon.layout.block:before { content: '\e708'; } /* '\ue708' */
+i.icon.layout.list:before { content: '\e80b'; } /* '\ue80b' */
+
+i.icon.heart.empty:before { content: '\2661'; } /* '\u2661' */
+i.icon.heart:before { content: '\2665'; } /* '\u2665' */
+
+
+i.icon.asterisk:before { content: '\2731'; } /* '\u2731' */
+i.icon.attachment:before { content: '\U0001f4ce'; } /* '\1f4ce' */
+i.icon.attention:before { content: '\26a0'; } /* '\u26a0' */
+i.icon.trophy:before { content: '\U0001f3c9'; } /* '\1f3c9' */
+i.icon.barcode:before { content: '\e792'; } /* '\ue792' */
+i.icon.cart:before { content: '\e813'; } /* '\ue813' */
+i.icon.block:before { content: '\U0001f6ab'; } /* '\1f6ab' */
+i.icon.book:before { content: '\U0001f4d6'; }
+i.icon.bookmark:before { content: '\U0001f516'; } /* '\1f516' */
+i.icon.calendar:before { content: '\U0001f4c5'; } /* '\1f4c5' */
+i.icon.cancel:before { content: '\2716'; } /* '\u2716' */
+i.icon.close:before { content: '\e80d'; } /* '\ue80d' */
+i.icon.color:before { content: '\e794'; } /* '\ue794' */
+i.icon.chat:before { content: '\e720'; } /* '\ue720' */
+i.icon.check:before { content: '\2611'; } /* '\u2611' */
+i.icon.time:before { content: '\U0001f554'; } /* '\1f554' */
+i.icon.cloud:before { content: '\2601'; } /* '\u2601' */
+i.icon.code:before { content: '\e714'; } /* '\ue714' */
+i.icon.email:before { content: '\40'; } /* '@' */
+i.icon.settings:before { content: '\26ef'; } /* '\u26ef' */
+i.icon.setting:before { content: '\2699'; } /* '\u2699' */
+i.icon.comment:before { content: '\e802'; } /* '\ue802' */
+i.icon.clockwise.counter:before { content: '\27f2'; } /* '\u27f2' */
+i.icon.clockwise:before { content: '\27f3'; } /* '\u27f3' */
+i.icon.cube:before { content: '\e807'; } /* '\ue807' */
+i.icon.direction:before { content: '\27a2'; } /* '\u27a2' */
+i.icon.doc:before { content: '\U0001f4c4'; } /* '\1f4c4' */
+i.icon.docs:before { content: '\e736'; } /* '\ue736' */
+i.icon.dollar:before { content: '\U0001f4b5'; } /* '\1f4b5' */
+i.icon.paint:before { content: '\e7b5'; } /* '\ue7b5' */
+i.icon.edit:before { content: '\270d'; } /* '\u270d' */
+i.icon.eject:before { content: '\2ecf'; } /* '\u2ecf' */
+i.icon.export:before { content: '\e715'; } /* '\ue715' */
+i.icon.hide:before { content: '\e70b'; } /* '\ue70b' */
+i.icon.unhide:before { content: '\e80f'; } /* '\ue80f' */
+i.icon.facebook:before { content: '\f301'; } /* '\uf301' */
+i.icon.fast-forward:before { content: '\e804'; } /* '\ue804' */
+i.icon.fire:before { content: '\U0001f525'; } /* '\1f525' */
+i.icon.flag:before { content: '\2691'; } /* '\u2691' */
+i.icon.lightning:before { content: '\26a1'; } /* '\u26a1' */
+i.icon.lab:before { content: '\68'; } /* 'h' */
+i.icon.flight:before { content: '\2708'; } /* '\u2708' */
+i.icon.forward:before { content: '\27a6'; } /* '\u27a6' */
+i.icon.gift:before { content: '\U0001f381'; } /* '\1f381' */
+i.icon.github:before { content: '\f308'; } /* '\uf308' */
+i.icon.globe:before { content: '\e817'; } /* '\ue817' */
+i.icon.headphones:before { content: '\U0001f3a7'; } /* '\1f3a7' */
+i.icon.question:before { content: '\2753'; } /* '\u2753' */
+i.icon.home:before { content: '\2302'; } /* '\u2302' */
+i.icon.i:before { content: '\2139'; } /* '\u2139' */
+i.icon.idea:before { content: '\U0001f4a1'; } /* '\1f4a1' */
+i.icon.open:before { content: '\U0001f517'; } /* '\1f517' */
+i.icon.content:before { content: '\e782'; } /* '\ue782' */
+i.icon.location:before { content: '\e724'; } /* '\ue724' */
+i.icon.mail:before { content: '\2709'; } /* '\u2709' */
+i.icon.mic:before { content: '\U0001f3a4'; } /* '\1f3a4' */
+i.icon.minus:before { content: '\2d'; } /* '-' */
+i.icon.money:before { content: '\U0001f4b0'; } /* '\1f4b0' */
+i.icon.off:before { content: '\e78e'; } /* '\ue78e' */
+i.icon.pause:before { content: '\e808'; } /* '\ue808' */
+i.icon.photos:before { content: '\e812'; } /* '\ue812' */
+i.icon.photo:before { content: '\U0001f304'; } /* '\1f304' */
+i.icon.pin:before { content: '\U0001f4cc'; } /* '\1f4cc' */
+i.icon.play:before { content: '\e809'; } /* '\ue809' */
+i.icon.plus:before { content: '\2b'; } /* '+' */
+i.icon.print:before { content: '\e716'; } /* '\ue716' */
+i.icon.rss:before { content: '\e73a'; } /* '\ue73a' */
+i.icon.search:before { content: '\U0001f50d'; } /* '\1f50d' */
+i.icon.shuffle:before { content: '\e803'; } /* '\ue803' */
+i.icon.tag:before { content: '\e80a'; } /* '\ue80a' */
+i.icon.tags:before { content: '\e70d'; } /* '\ue70d' */
+i.icon.terminal:before { content: '\e7ac'; } /* '\ue7ac' */
+i.icon.thumbs.down:before { content: '\U0001f44e'; } /* '\1f44e' */
+i.icon.thumbs.up:before { content: '\U0001f44d'; } /* '\1f44d' */
+i.icon.to-end:before { content: '\e806'; } /* '\ue806' */
+i.icon.to-start:before { content: '\e805'; } /* '\ue805' */
+i.icon.top.list:before { content: '\U0001f3c6'; } /* '\1f3c6' */
+i.icon.trash:before { content: '\e729'; } /* '\ue729' */
+i.icon.twitter:before { content: '\f303'; } /* '\uf303' */
+i.icon.upload:before { content: '\e711'; } /* '\ue711' */
+i.icon.user.add:before { content: '\e700'; } /* '\ue700' */
+i.icon.user:before { content: '\U0001f464'; } /* '\1f464' */
+i.icon.community:before { content: '\e814'; } /* '\ue814' */
+i.icon.users:before { content: '\U0001f465'; } /* '\1f465' */
+i.icon.id:before { content: '\e722'; } /* '\ue722' */
+i.icon.url:before { content: '\U0001f517'; } /* '\1f517' */
+i.icon.zoom.in:before { content: '\e750'; } /* '\ue750' */
+i.icon.zoom.out:before { content: '\e751'; } /* '\ue751' */
+
+/*--------------
+ Spacing Fix
+---------------*/
+
+/* dropdown arrows are to the right */
+i.dropdown.icon {
+ margin: 0em 0em 0em 0.5em;
+}
+
+/* stars are usually consecutive */
+i.icon.star {
+ width: auto;
+ margin: 0em;
+}
+
+/* left side basic.icons */
+i.icon.left {
+ width: auto;
+ margin: 0em 0.5em 0em 0em;
+}
+
+/* right side basic.icons */
+i.icon.search,
+i.icon.up,
+i.icon.down,
+i.icon.right {
+ width: auto;
+ margin: 0em 0em 0em 0.5em;
+}
+
+/*--------------
+ Aliases
+---------------*/
+
+/* aliases for convenience */
+i.icon.delete:before { content: '\e80d'; } /* '\ue80d' */
+i.icon.dropdown:before { content: '\25be'; } /* '\u25be' */
+
+i.icon.help:before { content: '\e704'; } /* '\ue704' */
+i.icon.info:before { content: '\e705'; } /* '\ue705' */
+i.icon.error:before { content: '\e80d'; } /* '\ue80d' */
+
+i.icon.dislike:before { content: '\2661'; } /* '\u2661' */
+i.icon.like:before { content: '\2665'; } /* '\u2665' */
+
+i.icon.eye:before { content: '\e80f'; } /* '\ue80f' */
+i.icon.eye.hidden:before { content: '\e70b'; } /* '\ue70b' */
+i.icon.date:before { content: '\U0001f4c5'; } /* '\1f4c5' */
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/elements/icon.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/elements/icon.variables b/semantic/src/themes/basic/elements/icon.variables
new file mode 100644
index 0000000..9fcd5f7
--- /dev/null
+++ b/semantic/src/themes/basic/elements/icon.variables
@@ -0,0 +1,12 @@
+/*-------------------
+ Icon Variables
+--------------------*/
+
+@fontPath : "../../themes/basic/assets/fonts";
+
+@src:
+ url("@{fontPath}/@{fontName}.eot?#iefix") format('embedded-opentype'),
+ url("@{fontPath}/@{fontName}.woff") format('woff'),
+ url("@{fontPath}/@{fontName}.ttf") format('truetype'),
+ url("@{fontPath}/@{fontName}.svg#icons") format('svg')
+;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/elements/step.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/elements/step.overrides b/semantic/src/themes/basic/elements/step.overrides
new file mode 100644
index 0000000..331c74c
--- /dev/null
+++ b/semantic/src/themes/basic/elements/step.overrides
@@ -0,0 +1,10 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.steps .step:after {
+ display: none !important;
+}
+.ui.steps .step {
+ border-radius: 500px !important;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/elements/step.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/elements/step.variables b/semantic/src/themes/basic/elements/step.variables
new file mode 100644
index 0000000..eb086d2
--- /dev/null
+++ b/semantic/src/themes/basic/elements/step.variables
@@ -0,0 +1,18 @@
+/*-------------------
+ Step Variables
+--------------------*/
+
+/* Stepss */
+@stepsBorder: none;
+@stepsBorderRadius: @circularRadius;
+
+/* Step */
+@border: none;
+@divider: none;
+@background: transparent;
+@borderRadius: @circularRadius;
+@iconDistance: 0.8em;
+@arrowDisplay: none;
+
+@activeBackground: @midWhite;
+@activeArrowDisplay: none;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/globals/reset.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/globals/reset.overrides b/semantic/src/themes/basic/globals/reset.overrides
new file mode 100644
index 0000000..508b16c
--- /dev/null
+++ b/semantic/src/themes/basic/globals/reset.overrides
@@ -0,0 +1,5 @@
+/*******************************
+ Overrides
+*******************************/
+
+/* No Additional Resets */
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/globals/reset.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/globals/reset.variables b/semantic/src/themes/basic/globals/reset.variables
new file mode 100644
index 0000000..0eedf27
--- /dev/null
+++ b/semantic/src/themes/basic/globals/reset.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Reset
+*******************************/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/modules/progress.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/modules/progress.overrides b/semantic/src/themes/basic/modules/progress.overrides
new file mode 100644
index 0000000..cdba171
--- /dev/null
+++ b/semantic/src/themes/basic/modules/progress.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Progress
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/modules/progress.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/modules/progress.variables b/semantic/src/themes/basic/modules/progress.variables
new file mode 100644
index 0000000..536e365
--- /dev/null
+++ b/semantic/src/themes/basic/modules/progress.variables
@@ -0,0 +1,15 @@
+/*******************************
+ Progress
+*******************************/
+
+@background: transparent;
+@border: none;
+@padding: 0em;
+
+@progressLeft: 0em;
+@progressWidth: 100%;
+@progressTextAlign: center;
+
+@labelFontWeight: normal;
+@labelTextAlign: left;
+@labelHeight: 1.5em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/views/card.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/views/card.overrides b/semantic/src/themes/basic/views/card.overrides
new file mode 100644
index 0000000..6273007
--- /dev/null
+++ b/semantic/src/themes/basic/views/card.overrides
@@ -0,0 +1,4 @@
+/*******************************
+ Overrides
+*******************************/
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/basic/views/card.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/basic/views/card.variables b/semantic/src/themes/basic/views/card.variables
new file mode 100644
index 0000000..e612fe4
--- /dev/null
+++ b/semantic/src/themes/basic/views/card.variables
@@ -0,0 +1,35 @@
+/*******************************
+ Card
+*******************************/
+
+/*-------------------
+ View
+--------------------*/
+
+@width: 250px;
+@background: transparent;
+@border: none;
+@boxShadow: none;
+
+@contentPadding: 1em 0em;
+
+@rowSpacing: 1.5em;
+@groupCardMargin: 0em @horizontalSpacing @rowSpacing;
+
+@extraBackground: transparent;
+@extraDivider: none;
+@extraBoxShadow: none;
+@extraPadding: 0.5em 0em;
+
+@extraLinkColor: @textColor;
+@extraLinkHoverColor: @linkHoverColor;
+
+@headerFontSize: @relativeLarge;
+@headerLinkColor: @textColor;
+@headerLinkHoverColor: @linkHoverColor;
+
+@imageBorderRadius: @borderRadius;
+@imageBorder: 1px solid @borderColor;
+
+@linkHoverBackground: transparent;
+@linkHoverBoxShadow: none;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/bookish/elements/header.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/bookish/elements/header.overrides b/semantic/src/themes/bookish/elements/header.overrides
new file mode 100644
index 0000000..6da22f7
--- /dev/null
+++ b/semantic/src/themes/bookish/elements/header.overrides
@@ -0,0 +1,15 @@
+/*******************************
+ Overrides
+*******************************/
+
+@import url(http://fonts.googleapis.com/css?family=Karma);
+
+h1.ui.header,
+.ui.huge.header {
+ font-weight: bold;
+}
+
+h2.ui.header,
+.ui.large.header {
+ font-weight: bold;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/bookish/elements/header.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/bookish/elements/header.variables b/semantic/src/themes/bookish/elements/header.variables
new file mode 100644
index 0000000..412daad
--- /dev/null
+++ b/semantic/src/themes/bookish/elements/header.variables
@@ -0,0 +1,37 @@
+/*-------------------
+ Header
+--------------------*/
+
+@headerFont : 'Karma', 'Times New Roman', serif;
+@fontWeight: normal;
+
+@iconSize: 1.5em;
+@iconOffset: 0.2em;
+@iconAlignment: top;
+
+@subHeaderFontSize: 0.85rem;
+
+@dividedBorder: 1px dotted rgba(0, 0, 0, 0.2);
+
+/* Block Header */
+@blockVerticalPadding: 1.3em;
+@blockHorizontalPadding: 1em;
+
+/* Attached */
+@attachedBackground: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.03)) repeat scroll 0 0 #F8F8F8;
+@attachedVerticalPadding: 1.3;
+@attachedHorizontalPadding: 1em;
+
+/* HTML Headings */
+@h1: 1.75rem;
+@h2: 1.33rem;
+@h3: 1.33rem;
+@h4: 1rem;
+@h5: 0.9rem;
+
+/* Sizing */
+@hugeFontSize: 1.75em;
+@largeFontSize: 1.33em;
+@mediumFontSize: 1.33em;
+@smallFontSize: 1em;
+@tinyFontSize: 0.9em;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/bootstrap3/elements/button.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/bootstrap3/elements/button.overrides b/semantic/src/themes/bootstrap3/elements/button.overrides
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/bootstrap3/elements/button.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/bootstrap3/elements/button.variables b/semantic/src/themes/bootstrap3/elements/button.variables
new file mode 100644
index 0000000..376cb49
--- /dev/null
+++ b/semantic/src/themes/bootstrap3/elements/button.variables
@@ -0,0 +1,63 @@
+/*-------------------
+ Button Variables
+--------------------*/
+
+/* Button Variables */
+@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;
+@textTransform: none;
+@fontWeight: normal;
+@textColor: rgba(51, 51, 51, 1);
+
+@borderRadius: @4px;
+
+@lineHeight: 1.42857;
+@verticalPadding: 0.8571em;
+@horizontalPadding: 0.8571em;
+
+@backgroundColor: @white;
+@backgroundImage: none;
+
+
+@borderBoxShadowColor: rgba(0, 0, 0, 0.14);
+
+@green: #5CB85C;
+@red: #D9534F;
+@blue: #337AB7;
+@green: #60B044;
+@orange: #F0AD4E;
+
+@primaryColor: @blue;
+@secondaryColor: @green;
+
+@labeledIconBackgroundColor: transparent;
+
+@basicBorderSize: 0px;
+@basicColoredBorderSize: 0px;
+@invertedBorderSize: 0px;
+
+@basicActiveBackground: transparent;
+@basicHoverBackground: transparent;
+@basicDownBoxShadow:
+ 0px 0px 0px 1px #ADADAD inset,
+ 0 3px 5px rgba(0, 0, 0, 0.125) inset
+;
+
+@groupButtonOffset: 0px 0px 0px -1px;
+@verticalGroupOffset: 0px 0px -1px 0px;
+
+/* States */
+
+@hoverBackgroundColor: #E6E6E6;
+@hoverBoxShadow:
+ 0px 0px 0px 1px #ADADAD inset
+;
+
+@downBackgroundColor: #E6E6E6;
+@downBoxShadow:
+ 0px 0px 0px 1px #ADADAD inset,
+ 0 3px 5px rgba(0, 0, 0, 0.125) inset
+;
+
+@activeBackgroundColor: #E6E6E6;
+
+@disabledOpacity: 0.65;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/collections/form.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/collections/form.overrides b/semantic/src/themes/chubby/collections/form.overrides
new file mode 100644
index 0000000..64a3e62
--- /dev/null
+++ b/semantic/src/themes/chubby/collections/form.overrides
@@ -0,0 +1,16 @@
+/*-------------------
+ Form Variables
+--------------------*/
+
+.ui.form .selection.dropdown {
+ padding: 1.1em 1.2em;
+ border-width: 2px;
+}
+.ui.form .selection.dropdown .menu {
+ min-width: calc(100% + 4px);
+ margin: 0 -2px;
+ border-width: 2px;
+}
+.ui.form .selection.dropdown input {
+ padding: inherit;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/chubby/collections/form.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/chubby/collections/form.variables b/semantic/src/themes/chubby/collections/form.variables
new file mode 100644
index 0000000..1b7e327
--- /dev/null
+++ b/semantic/src/themes/chubby/collections/form.variables
@@ -0,0 +1,9 @@
+/*-------------------
+ Form Variables
+--------------------*/
+
+@labelTextTransform: uppercase;
+@labelFontSize: 0.8em;
+
+@inputPadding: 1em 1.2em;
+@inputBorder: 2px solid @borderColor;
\ No newline at end of file
[17/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/assets/fonts/octicons.svg
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/assets/fonts/octicons.svg b/semantic/src/themes/github/assets/fonts/octicons.svg
new file mode 100644
index 0000000..d3116a6
--- /dev/null
+++ b/semantic/src/themes/github/assets/fonts/octicons.svg
@@ -0,0 +1,200 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+(c) 2012-2015 GitHub
+
+When using the GitHub logos, be sure to follow the GitHub logo guidelines (https://github.com/logos)
+
+Font License: SIL OFL 1.1 (http://scripts.sil.org/OFL)
+Applies to all font files
+
+Code License: MIT (http://choosealicense.com/licenses/mit/)
+Applies to all other files
+</metadata>
+<defs>
+<font id="octicons" horiz-adv-x="1024" >
+<font-face font-family="octicons" font-weight="400" font-stretch="normal" units-per-em="1024" ascent="832" descent="-192" />
+<missing-glyph d="M512 832C229.25 832 0 602.75 0 320c0-226.25 146.688-418.125 350.156-485.812 25.594-4.688 34.938 11.125 34.938 24.625 0 12.188-0.469 52.562-0.719 95.312C242-76.81200000000001 211.906 14.5 211.906 14.5c-23.312 59.125-56.844 74.875-56.844 74.875-46.531 31.75 3.53 31.125 3.53 31.125 51.406-3.562 78.47-52.75 78.47-52.75 45.688-78.25 119.875-55.625 149-42.5 4.654 33 17.904 55.625 32.5 68.375C304.906 106.56200000000001 185.344 150.5 185.344 346.688c0 55.938 19.969 101.562 52.656 137.406-5.219 13-22.844 65.094 5.062 135.562 0 0 42.938 13.75 140.812-52.5 40.812 11.406 84.594 17.031 128.125 17.219 43.5-0.188 87.312-5.875 128.188-17.281 97.688 66.312 140.688 52.5 140.688 52.5 28-70.531 10.375-122.562 5.125-135.5 32.812-35.844 52.625-81.469 52.625-137.406 0-196.688-119.75-240-233.812-252.688 18.438-15.875 34.75-47 34.75-94.75 0-68.438-0.688-123.625-0.688-140.5 0-13.625 9.312-29.562 35.25-24.562C877.438-98 1024 93.875 1024 320 1024 602.75 794.75 832 512 832z" horiz-adv-x="1024"
/>
+<glyph glyph-name="alert" unicode="" d="M1005.854 31.753000000000043l-438.286 767C556.173 818.694 534.967 831 512 831s-44.173-12.306-55.567-32.247l-438.286-767c-11.319-19.809-11.238-44.144 0.213-63.876C29.811-51.85500000000002 50.899-64 73.714-64h876.572c22.814 0 43.903 12.145 55.354 31.877S1017.173 11.94399999999996 1005.854 31.753000000000043zM576 64H448V192h128V64zM576 256H448V512h128V256z" horiz-adv-x="1024" />
+<glyph glyph-name="alignment-align" unicode="" d="M192 768C85.938 768 0 682.062 0 576s85.938-192 192-192c106.062 0 192 85.938 192 192S298.062 768 192 768zM672 224l160 160H384v-448l160 160 288-288 128 128L672 224z" horiz-adv-x="960" />
+<glyph glyph-name="alignment-aligned-to" unicode="" d="M384 256l128 128 288-288 160 160v-448H512l160 160L384 256zM192 384C85.938 384 0 469.938 0 576S85.938 768 192 768c106.062 0 192-85.938 192-192S298.062 384 192 384z" horiz-adv-x="960" />
+<glyph glyph-name="alignment-unalign" unicode="" d="M512 640L384 512 128 768 0 640l256-256L128 256l64-64 384 384L512 640zM640 256l128 128-64 64L320 64l64-64 128 128 256-256 128 128L640 256z" horiz-adv-x="896" />
+<glyph glyph-name="arrow-down" unicode="" d="M448 384V640H192v-256H0l320-384 320 384H448z" horiz-adv-x="640" />
+<glyph glyph-name="arrow-left" unicode="" d="M384 448V640L0 320l384-320V192h256V448H384z" horiz-adv-x="640" />
+<glyph glyph-name="arrow-right" unicode="" d="M640 320L256 640v-192H0v-256h256v-192L640 320z" horiz-adv-x="640" />
+<glyph glyph-name="arrow-small-down" unicode="" d="M256 384V512H128v-128H0l192-256 192 256H256z" horiz-adv-x="384" />
+<glyph glyph-name="arrow-small-left" unicode="" d="M256 384V512L0 320l256-192V256h128V384H256z" horiz-adv-x="384" />
+<glyph glyph-name="arrow-small-right" unicode="" d="M384 320L128 512v-128H0v-128h128v-128L384 320z" horiz-adv-x="384" />
+<glyph glyph-name="arrow-small-up" unicode="" d="M192 512L0 256h128v-128h128V256h128L192 512z" horiz-adv-x="384" />
+<glyph glyph-name="arrow-up" unicode="" d="M320 640L0 256h192v-256h256V256h192L320 640z" horiz-adv-x="640" />
+<glyph glyph-name="beer" unicode="" d="M896 576c-31 0-192 0-192 0v128c0 71-158 128-352 128s-352-57-352-128v-768c0-71 158-128 352-128s352 57 352 128v128s160 0 192 0 64 30 64 64 0 350 0 384-29 64-64 64z m-704-576h-64v512h64v-512z m192-64h-64v512h64v-512z m192 64h-64v512h64v-512z m-224 640c-124 0-224 29-224 64s100 64 224 64 224-29 224-64-100-64-224-64z m480-448h-128v256h128v-256z" horiz-adv-x="1024" />
+<glyph glyph-name="book" unicode="" d="M768 256h-128c-34 0-64-32-64-64h256c0 34-32 64-64 64z m-55 416c-167 0-209-32-233-56-24 24-66 56-233 56s-247-46-247-78v-586c29 16 119 48 214 56 115 9 234-9 234-32 0-16 8-31 31-32 0 0 0 0 1 0 0 0 0 0 1 0 23 1 31 16 31 32 0 23 119 41 234 32 94-7 185-40 214-56v586c0 32-80 78-247 78z m-265-572c-30 16-103 28-192 28s-170-12-192-27c0 0 0 411 0 443s64 59 192 59 192-27 192-59 0-444 0-444z m448 1c-22 15-103 27-192 27s-162-12-192-28c0 0 0 412 0 444s64 59 192 59 192-27 192-59 0-443 0-443z m-128 283h-128c-34 0-64-32-64-64h256c0 34-32 64-64 64z m0 128h-128c-34 0-64-32-64-64h256c0 34-32 64-64 64z m-448-128h-128c-32 0-64-30-64-64h256c0 32-30 64-64 64z m0-128h-128c-32 0-64-30-64-64h256c0 32-30 64-64 64z m0 256h-128c-32 0-64-30-64-64h256c0 32-30 64-64 64z" horiz-adv-x="1024" />
+<glyph glyph-name="bookmark" unicode="" d="M0 704v-768l192 128 192-128V704H0zM316.25 507.25l-71.875-51.938 27.188-83.406c2.75-8.375-0.688-11.062-7.562-6.594l-72 52.094-72-52.031c-6.844-4.469-10.312-1.781-7.562 6.594l27.219 83.406L67.783 507.25c-6.469 5.125-5 9.219 3.906 9.219l88 0.125 27.125 83.094c2.812 8.812 7.562 8.812 10.375 0l27.188-83.094 87.938-0.125C321.25 516.469 322.688 512.375 316.25 507.25z" horiz-adv-x="384" />
+<glyph glyph-name="briefcase" unicode="" d="M896 640H640v66c0 34.2-27.8 62-62 62H446c-34.2 0-62-27.8-62-62v-66H128c-35.3 0-64-28.7-64-64v-512c0-35.3 28.7-64 64-64h768c35.3 0 64 28.7 64 64V576C960 611.3 931.3 640 896 640zM448 688c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-48H448V688zM896 320H576v-64H448v64H128V576h64v-192h640V576h64V320z" horiz-adv-x="1024" />
+<glyph glyph-name="broadcast" unicode="" d="M448 640c142 0 256-115 256-256 0-69-28-132-72-178l-16-93c91 56 152 156 152 271 0 177-143 320-320 320s-320-143-320-320c0-115 61-215 152-271l-16 93c-45 46-72 109-72 178 0 142 114 256 256 256z m-64-320c-36 0-64-29-64-64v-128c0-36 30-64 64-64v-256h128v256c34 0 64 28 64 64v128c0 35-28 64-64 64s-64 0-64 0-28 0-64 0z m192 128c0 71-57 128-128 128s-128-57-128-128 57-128 128-128 128 57 128 128z m-128 384c-247 0-448-201-448-448 0-197 128-363 305-423l-12 72c-135 60-229 194-229 351 0 212 172 384 384 384s384-172 384-384c0-157-94-291-229-351l-12-72c177 60 305 225 305 423 0 247-201 448-448 448z" horiz-adv-x="896" />
+<glyph glyph-name="browser" unicode="" d="M320 640h64v-64h-64V640zM192 640h64v-64h-64V640zM64 640h64v-64H64V640zM832 0H64V512h768V0zM832 576H448v64h384V576zM896 640c0 35.35-28.65 64-64 64H64c-35.35 0-64-28.65-64-64v-640c0-35.35 28.65-64 64-64h768c35.35 0 64 28.65 64 64V640z" horiz-adv-x="896" />
+<glyph glyph-name="bug" unicode="" d="M243.621 675.469C190.747 618.688 205.34 528 205.34 528s53.968-64 160-64c106.031 0 160.031 64 160.031 64s14.375 89.469-37.375 146.312c32.375 18.031 51.438 44.094 43.562 61.812-8.938 19.969-48.375 21.75-88.25 3.969-14.812-6.594-27.438-14.969-37.25-23.875-12.438 2.25-25.625 3.781-40.72 3.781-14.061 0-26.561-1.344-38.344-3.25-9.656 8.75-22.062 16.875-36.531 23.344-39.875 17.719-79.375 15.938-88.25-3.969C194.465 718.781 212.497 693.438 243.621 675.469zM644.746 262.25c-8.25 1.75-16.125 2.75-23.75 3.5 0 2.125 0.375 4.125 0.375 6.312 0 33.594-4.75 65.654-12.438 96.125 16.438-1.406 37.375 2.375 58.562 11.779 39.875 17.781 65 48.375 56.125 68.219-8.875 19.969-48.375 21.75-88.25 3.969-18.625-8.312-33.812-19.469-44-30.906-7.75 18.25-16.5 35.781-26.812 51.719-30.188-25.156-87.312-62.719-167.062-71.062v-321.781c0 0-0.25-32-32.031-32-31.75 0-32 32-32 32V401.781c-79.811 8.344-136.968 45.969-167.093 71.062-9.875-15.312-18.375-32-25.938-49.344-10.281 10.6
25-24.625 20.844-41.969 28.594-39.875 17.719-79.375 15.938-88.25-3.969-8.906-19.906 16.25-50.438 56.125-68.219 19.844-8.846 39.531-12.812 55.469-12.096-7.656-30.404-12.469-62.344-12.469-95.812 0-2.188 0.375-4.25 0.438-6.5-6.719-0.75-13.688-1.75-20.781-3.25-51.969-10.75-91.781-37.625-88.844-59.812 2.938-22.312 47.5-31.5 99.594-20.688 6.781 1.375 13.438 3.125 19.781 5.062C128.684 146 143.34 108.125 163.622 75.5c-12.031-6.062-24.531-15-36.031-26.625C95.715 17 82.779-21.75 98.715-37.68799999999999c15.938-15.937 54.656-3 86.531 28.812 9.344 9.375 16.844 19.25 22.656 29C251.434-22.5 305.965-48 365.465-48c60.343 0 115.781 26.25 159.531 69.938 5.875-10.312 13.75-20.812 23.625-30.688 31.812-31.875 70.625-44.812 86.562-28.875s3 54.625-28.875 86.5c-12.312 12.375-25.688 21.75-38.438 27.938 20.125 32.5 34.625 70.375 43.688 111.062 7.188-2.25 14.688-4.375 22.562-6.062 52.061-10.812 96.625-1.562 99.625 20.688C736.558 224.625 696.746 251.5 644.746 262.25z" horiz-adv-x="733.886" />
+<glyph glyph-name="calendar" unicode="" d="M704 320h-64v-128h64V320zM576 320h-64v-128h64V320zM704 512h-64v-128h64V512zM832 320h-64v-128h64V320zM576 128h-64v-128h64V128zM768 832h-64v-128h64V832zM256 832h-64v-128h64V832zM832 512h-64v-128h64V512zM576 512h-64v-128h64V512zM320 128h-64v-128h64V128zM192 320h-64v-128h64V320zM320 320h-64v-128h64V320zM832 768v-128H640V768H320v-128H128V768H0v-896h960V768H832zM896-64H64V576h832V-64zM192 128h-64v-128h64V128zM448 512h-64v-128h64V512zM448 128h-64v-128h64V128zM320 512h-64v-128h64V512zM448 320h-64v-128h64V320zM704 128h-64v-128h64V128z" horiz-adv-x="1024" />
+<glyph glyph-name="check" unicode="" d="M640 640L256 256 128 384 0 256l256-256 512 512L640 640z" horiz-adv-x="768" />
+<glyph glyph-name="checklist" unicode="" d="M760.688 315.78099999999995l-49.812 49.656c-6.438 6.529-16.938 6.594-23.375 0L582.5 260.5 462.375 140.125l-93.031 93.125c-6.531 6.562-17.031 6.562-23.5 0l-49.719-49.688c-6.531-6.562-6.531-17.062 0-23.562l104.781-104.875 17.969-17.875 31.688-31.812c6.562-6.562 17.188-6.562 23.562 0l49.625 49.688L760.625 292.22C767.25 298.688 767.25 309.188 760.688 315.78099999999995zM228.469 251.188L278.156 301c42.469 42.375 116.344 42.438 158.781-0.062l25.312-25.312L576 384V704H0v-704h320l-91.531 92.125C184.688 136.062 184.688 207.375 228.469 251.188zM192 640h320v-64H192V640zM192 512h320v-64H192V512zM128 320H64v64h64V320zM128 448H64v64h64V448zM128 576H64v64h64V576zM192 384h64v-64h-64V384z" horiz-adv-x="765.602" />
+<glyph glyph-name="chevron-down" unicode="" d="M512 512L320 320 128 512 0 384l320-320 320 320L512 512z" horiz-adv-x="640" />
+<glyph glyph-name="chevron-left" unicode="" d="M448 512L320 640 0 320l320-320 128 128L256 320 448 512z" horiz-adv-x="448" />
+<glyph glyph-name="chevron-right" unicode="" d="M128 640L0 512l192-192L0 128l128-128 320 320L128 640z" horiz-adv-x="448" />
+<glyph glyph-name="chevron-up" unicode="" d="M320 576L0 256l128-128 192 192 192-192 128 128L320 576z" horiz-adv-x="640" />
+<glyph glyph-name="circle-slash" unicode="" d="M320 640C143.219 640 0 496.781 0 320c0-176.75 143.219-320 320-320 176.75 0 320 143.25 320 320C640 496.781 496.75 640 320 640zM320 512c27.656 0 53.688-6.094 77.438-16.562L144.562 242.562C134.094 266.312 128 292.34400000000005 128 320 128 426 213.938 512 320 512zM320 128c-28.031 0-54.531 6.375-78.594 17.125l253.906 252.5C505.875 373.812 512 347.719 512 320 512 213.938 426.062 128 320 128z" horiz-adv-x="640" />
+<glyph glyph-name="circuit-board" unicode="" d="M320 576c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64s-64 28.654-64 64C256 547.346 284.654 576 320 576zM960 64c0-106.039-85.961-192-192-192H320l192 192h81.128c22.132-38.258 63.494-64 110.872-64 70.692 0 128 57.308 128 128s-57.308 128-128 128c-47.377 0-88.74-25.742-110.872-64H448L156.044-99.95600000000002C100.845-66.23199999999997 64-5.419999999999959 64 64V576c0 106.039 85.961 192 192 192v-145.128C217.742 600.74 192 559.377 192 512c0-70.692 57.308-128 128-128 47.276 0 88.56 25.633 110.727 63.756l162.416 0.219C615.279 409.731 656.633 384 704 384c70.692 0 128 57.308 128 128s-57.308 128-128 128c-47.388 0-88.758-25.753-110.887-64.025l-162.097-0.219c-11.246 19.54-27.503 35.828-47.016 47.116V768h384c106.039 0 192-85.961 192-192V64zM640 128c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64S640 92.654 640 128zM640 512c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64S640 476.654 640 512z" horiz-adv-
x="1024" />
+<glyph glyph-name="clippy" unicode="" d="M704-64h-640v576h640v-192h64v320c0 35-29 64-64 64h-192c0 71-57 128-128 128s-128-57-128-128h-192c-35 0-64-29-64-64v-704c0-35 29-64 64-64h640c35 0 64 29 64 64v128h-64v-128z m-512 704c29 0 29 0 64 0s64 29 64 64 29 64 64 64 64-29 64-64 32-64 64-64 33 0 64 0 64-29 64-64h-512c0 39 28 64 64 64z m-64-512h128v64h-128v-64z m448 128v128l-256-192 256-192v128h320v128h-320z m-448-256h192v64h-192v-64z m320 448h-320v-64h320v64z m-192-128h-128v-64h128v64z" horiz-adv-x="896" />
+<glyph glyph-name="clock" unicode="" d="M384 256h256l64 64-64 64H512V576l-64 64-64-64V256zM448 768C200.562 768 0 567.438 0 320c0-247.438 200.562-448 448-448 247.438 0 448 200.562 448 448C896 567.438 695.438 768 448 768zM448 0c-176.25 0-320 143.75-320 320 0 175.938 144.188 319.5 320 320 175.812-0.5 320-144.062 320-320C768 143.75 624.25 0 448 0z" horiz-adv-x="896" />
+<glyph glyph-name="cloud-download" unicode="" d="M832 512c-8.75 0-17.125-1.406-25.625-2.562C757.625 623.75 644.125 704 512 704c-132.156 0-245.562-80.25-294.406-194.562C209.156 510.594 200.781 512 192 512 85.938 512 0 426.062 0 320s85.938-192 192-192c20.531 0 39.875 4.25 58.375 10.375C284.469 100.625 331.312 75.25 384 67.5v65.25c-49.844 10.375-91.594 42.812-112.625 87.875C249.531 203 222.219 192 192 192c-70.656 0-128 57.375-128 128 0 70.656 57.344 128 128 128 25.281 0 48.625-7.562 68.406-20.094C281.344 548.219 385.594 640 512 640c126.5 0 229.75-92.219 250.5-212.75 20 13 43.875 20.75 69.5 20.75 70.625 0 128-57.344 128-128 0-70.625-57.375-128-128-128-10.25 0-20 1.5-29.625 3.75C773.438 154.875 725.938 128 672 128c-11.062 0-21.625 1.625-32 4v-64.938c10.438-1.688 21.062-3.062 32-3.062 61.188 0 116.5 24.625 156.938 64.438C830 128.375 830.875 128 832 128c106.062 0 192 85.938 192 192S938.062 512 832 512zM576 320H448v-320H320l192-192 192 192H576V320z" horiz-adv-x="1024" />
+<glyph glyph-name="cloud-upload" unicode="" d="M512 448L320 256h128v-320h128V256h128L512 448zM832 512c-8.75 0-17.125-1.406-25.625-2.562C757.625 623.812 644.125 704 512 704c-132.156 0-245.562-80.188-294.406-194.562C209.156 510.594 200.781 512 192 512 85.938 512 0 426 0 320c0-106.062 85.938-192 192-192 20.531 0 39.875 4.25 58.375 10.438C284.469 100.625 331.312 75.25 384 67.5v65.25c-49.844 10.375-91.594 42.812-112.625 87.75C249.531 203 222.219 192 192 192c-70.656 0-128 57.375-128 128 0 70.656 57.344 128 128 128 25.281 0 48.625-7.562 68.406-20.156C281.344 548.219 385.594 640 512 640c126.5 0 229.75-92.219 250.5-212.75 20 13 43.875 20.75 69.5 20.75 70.625 0 128-57.344 128-128 0-70.625-57.375-128-128-128-10.25 0-20 1.5-29.625 3.75C773.438 154.875 725.938 128 672 128c-11.062 0-21.625 1.625-32 4v-64.938c10.438-1.688 21.062-3.062 32-3.062 61.188 0 116.5 24.688 157 64.438 1 0 1.875-0.438 3-0.438 106.062 0 192 85.938 192 192C1024 426 938.062 512 832 512z" horiz-adv-x="1024" />
+<glyph glyph-name="code" unicode="" d="M608 640l-96-96 224-224L512 96l96-96 288 320L608 640zM288 640L0 320l288-320 96 96L160 320l224 224L288 640z" horiz-adv-x="896" />
+<glyph glyph-name="color-mode" unicode="" d="M0 704v-768h768V704H0zM64 0V640h640L64 0z" horiz-adv-x="768" />
+<glyph glyph-name="comment" unicode="" d="M768 704H128C66 704 0 640 0 576v-384c0-128 128-128 128-128h64v-256l256 256c0 0 258 0 320 0s128 68 128 128V576C896 638 832 704 768 704z" horiz-adv-x="896" />
+<glyph glyph-name="comment-discussion" unicode="" d="M256 320c0 64 0 192 0 192s-160 0-192 0-64-32-64-64 0-288 0-320 32-64 64-64 64 0 64 0v-192l194 192s162 0 192 0 62 32 62 64 0 64 0 64-128 0-192 0-128 64-128 128z m576 384c-32 0-416 0-448 0s-64-32-64-64 0-288 0-320 32-64 64-64 190 0 190 0l194-192v192s32 0 64 0 64 32 64 64 0 288 0 320-32 64-64 64z" horiz-adv-x="896" />
+<glyph glyph-name="credit-card" unicode="" d="M128 128h128v64h-128v-64z m192 0h128v64h-128v-64z m64 192h-256v-64h256v64z m-128 64h64l128 128h-64l-128-128z m192-128h192v64h-192v-64z m512 384c-32 0-864 0-896 0s-64-32-64-64 0-480 0-512 32-64 64-64 864 0 896 0 64 32 64 64 0 480 0 512-32 64-64 64z m0-256v-288s0-32-32-32h-832c-32 0-32 32-32 32v288h64l128 128h-192v32s0 32 32 32h832c32 0 32-32 32-32v-32h-384l-128-128h512z" horiz-adv-x="1024" />
+<glyph glyph-name="dash" unicode="" d="M0 384v-128h512V384H0z" horiz-adv-x="512" />
+<glyph glyph-name="dashboard" unicode="" d="M416 367.5c-61.562 0-111.5-49.938-111.5-111.5S354.438 144.5 416 144.5 527.5 194.438 527.5 256c0 8.5-1.125 16.75-3 24.688C606.125 375.625 732.5 523.656 800 608c23.125 28.875-2.312 56.188-32 32-85.188-69.375-232.312-194.688-326.906-275.594C433.031 366.281 424.625 367.5 416 367.5zM447.875 576.125c0 17.656-14.344 32-32 32s-32-14.344-32-32 14.344-32 32-32S447.875 558.469 447.875 576.125zM639.875 320.125c0-17.656 14.375-32 32-32s32 14.344 32 32-14.375 32-32 32S639.875 337.781 639.875 320.125zM287.875 576.125c-17.656 0-32-14.344-32-32s14.344-32 32-32 32 14.344 32 32S305.531 576.125 287.875 576.125zM223.875 448.125c0 17.656-14.344 32-32 32s-32-14.344-32-32 14.344-32 32-32S223.875 430.469 223.875 448.125zM127.875 320.125c0-17.656 14.344-32 32-32s32 14.344 32 32-14.344 32-32 32S127.875 337.781 127.875 320.125zM575.875 544.125c0 17.656-14.375 32-32 32s-32-14.344-32-32 14.375-32 32-32S575.875 526.469 575.875 544.125zM792.875 495.312l-68.75-89.
938C731.625 378.188 736 349.625 736 320c0-176.75-143.312-320-320-320S96 143.25 96 320c0 176.688 143.312 320 320 320 65.875 0 127-19.969 177.875-54.094l79.25 60.625C602.375 702.406 513.25 736 416 736 186.25 736 0 549.75 0 320s186.25-416 416-416 416 186.25 416 416C832 382.719 817.75 442 792.875 495.312z" horiz-adv-x="832" />
+<glyph glyph-name="database" unicode="" d="M384-128C171.969-128 0-70.625 0 0c0 38.625 0 80.875 0 128 0 11.125 5.562 21.688 13.562 32C56.375 104.875 205.25 64 384 64s327.625 40.875 370.438 96c8-10.312 13.562-20.875 13.562-32 0-37.062 0-76.375 0-128C768-70.625 596-128 384-128zM384 128C171.969 128 0 185.375 0 256c0 38.656 0 80.844 0 128 0 6.781 2.562 13.375 6 19.906l0 0C7.938 408 10.5 412.031 13.562 416 56.375 360.906 205.25 320 384 320s327.625 40.906 370.438 96c3.062-3.969 5.625-8 7.562-12.094l0 0c3.438-6.531 6-13.125 6-19.906 0-37.062 0-76.344 0-128C768 185.375 596 128 384 128zM384 384C171.969 384 0 441.344 0 512c0 20.219 0 41.594 0 64 0 20.344 0 41.469 0 64C0 710.656 171.969 768 384 768c212 0 384-57.344 384-128 0-19.969 0-41.156 0-64 0-19.594 0-40.25 0-64C768 441.344 596 384 384 384zM384 704c-141.375 0-256-28.594-256-64s114.625-64 256-64 256 28.594 256 64S525.375 704 384 704z" horiz-adv-x="768" />
+<glyph glyph-name="device-camera" unicode="" d="M512 447.999c-70.691 0-127.999-57.308-127.999-127.999S441.309 192.00099999999998 512 192.00099999999998c5.713 0 11.337 0.38 16.852 1.105-46.344 7.058-81.851 47.079-81.851 95.394 0 53.295 43.204 96.499 96.499 96.499 48.314 0 88.336-35.507 95.394-81.851 0.726 5.515 1.105 11.139 1.105 16.852C639.999 390.691 582.691 447.999 512 447.999zM896 576H767.999L640 704H384L255.999 576H128c-35.348 0-64-28.652-64-64v-448c0-35.347 28.652-64 64-64h768c35.347 0 64 28.653 64 64V512C960 547.348 931.347 576 896 576zM416 640h192l64-64H352L416 640zM160.143 64C142.391 64 128 78.39099999999996 128 96.14300000000003V384h64v64h-64v31.857C128 497.609 142.391 512 160.143 512h182.526c-3.98-3.518-7.881-7.174-11.688-10.98-99.974-99.975-99.974-262.064 0-362.039l74.98-74.98H160.143zM512 128.00099999999998c-106.038 0-191.999 85.961-191.999 191.999S405.962 511.999 512 511.999 703.999 426.038 703.999 320 618.038 128.00099999999998 512 128.00099999999998zM832 352L6
81.327 512H832V352z" horiz-adv-x="1024" />
+<glyph glyph-name="device-camera-video" unicode="" d="M576 640c-35.347 0-64-28.653-64-64s28.653-64 64-64 64 28.653 64 64S611.347 640 576 640zM896 448L768 320v64c0 30.625-21.515 56.21-50.25 62.503C748.958 480.646 768 526.097 768 575.998 768 682.038 682.039 768 576 768c-101.123 0-183.986-78.178-191.45-177.393C350.516 621.306 305.442 640 256 640c-106.038 0-192-85.962-192-192.002C64 341.961 149.962 256 256 256h-64v-128h64v-128c0-35.347 28.653-64 64-64h384c35.347 0 64 28.653 64 64v64l128-128h64V448H896zM256 512c-35.347 0-64-28.653-64-64s28.653-64 64-64v-64c-70.692 0-128 57.308-128 127.999C128 518.692 185.308 576 256 576s128-57.307 128-128h-64C320 483.347 291.347 512 256 512zM576 128H448V256h128V128zM704 237.21299999999997c-33.526 33.547-70.276 70.317-73.373 73.414C624.837 316.418 616.837 320 608 320H416c-17.674 0-32-14.326-32-32v-192c0-8.329 3.183-15.915 8.396-21.607 0.53-0.58 39.123-39.164 74.409-74.393H352c-17.674 0-32 14.326-32 32V352c0 17.674 14.326 32 32 32h320c17.674 0 32-1
4.326 32-32V237.21299999999997zM576 448c-70.692 0-128 57.308-128 127.999C448 646.692 505.308 704 576 704s128-57.308 128-128.001C704 505.308 646.692 448 576 448zM896 128l-64 64 0.082 128.084L896 384.002V128z" horiz-adv-x="1024" />
+<glyph glyph-name="device-desktop" unicode="" d="M960 768c-32 0-864 0-896 0s-64-32-64-64 0-544 0-576 32-64 64-64 320 0 320 0-192-64-192-128c0-32 32-64 64-64s480 0 512 0 64 32 64 64c0 64-192 128-192 128s288 0 320 0 64 32 64 64 0 544 0 576-32 64-64 64z m0-640h-896v576h896v-576z m-64 512h-192c-384-64-542-300-576-384v-64h768v448z" horiz-adv-x="1024" />
+<glyph glyph-name="device-mobile" unicode="" d="M576 832H64C28.688 832 0 803.312 0 768v-896c0-35.375 28.688-64 64-64h512c35.375 0 64 28.625 64 64V768C640 803.312 611.375 832 576 832zM288 768h64c17.625 0 32-14.344 32-32s-14.375-32-32-32h-64c-17.656 0-32 14.344-32 32S270.344 768 288 768zM352-128h-64c-17.656 0-32 14.375-32 32s14.344 32 32 32h64c17.625 0 32-14.375 32-32S369.625-128 352-128zM576 0H64V640h512V0z" horiz-adv-x="640" />
+<glyph glyph-name="diff" unicode="" d="M448 576H320v-128H192v-128h128v-128h128V320h128V448H448V576zM192-64h384V64H192V-64zM640 832H128v-64h480l224-224v-608h64V576L640 832zM0 704v-896h768V512L576 704H0zM704-128H64V640h480l160-160V-128z" horiz-adv-x="896" />
+<glyph glyph-name="diff-added" unicode="" d="M512 512h-128v-128h-128v-128h128v-128h128v128h128v128h-128v128z m320 256c-32 0-736 0-768 0s-64-32-64-64 0-736 0-768 32-64 64-64 736 0 768 0 64 32 64 64 0 736 0 768-32 64-64 64z m-64-736c0-16-17-32-32-32s-558 0-576 0-32 12-32 32c0 16 0 560 0 576s16 32 32 32 561 0 576 0 32-16 32-32 0-560 0-576z" horiz-adv-x="896" />
+<glyph glyph-name="diff-ignored" unicode="" d="M832 768h-768c-32 0-64-32-64-64v-768c0-32 32-64 64-64h768c32 0 64 32 64 64v768c0 32-32 64-64 64z m-64-736c0-16-17-32-32-32h-576c-18 0-32 12-32 32v576c0 16 16 32 32 32h576c15 0 32-16 32-32v-576z m-512 194v-98h98l286 286v98h-98l-286-286z" horiz-adv-x="896" />
+<glyph glyph-name="diff-modified" unicode="" d="M832 768h-768c-32 0-64-32-64-64v-768c0-32 32-64 64-64h768c32 0 64 32 64 64v768c0 32-32 64-64 64z m-64-736c0-16-17-32-32-32h-576c-18 0-32 12-32 32v576c0 16 16 32 32 32h576c15 0 32-16 32-32v-576z m-320 416c-71 0-128-57-128-128s57-128 128-128 128 57 128 128-57 128-128 128z" horiz-adv-x="896" />
+<glyph glyph-name="diff-removed" unicode="" d="M832 768h-768c-32 0-64-32-64-64v-768c0-32 32-64 64-64h768c32 0 64 32 64 64v768c0 32-32 64-64 64z m-64-736c0-16-17-32-32-32h-576c-18 0-32 12-32 32v576c0 16 16 32 32 32h576c15 0 32-16 32-32v-576z m-512 224h384v128h-384v-128z" horiz-adv-x="896" />
+<glyph glyph-name="diff-renamed" unicode="" d="M832 768h-768c-32 0-64-32-64-64v-768c0-32 32-64 64-64h768c32 0 64 32 64 64v768c0 32-32 64-64 64z m-64-736c0-16-17-32-32-32h-576c-18 0-32 12-32 32v576c0 16 16 32 32 32h576c15 0 32-16 32-32v-576z m-320 352h-192v-128h192v-128l256 192-256 192v-128z" horiz-adv-x="896" />
+<glyph glyph-name="ellipsis" unicode="" d="M640 512c-64 0-448 0-512 0s-128-64-128-128 0-64 0-128 64-128 128-128 448 0 512 0 128 64 128 128 0 64 0 128-64 128-128 128z m-384-256h-128v128h128v-128z m192 0h-128v128h128v-128z m192 0h-128v128h128v-128z" horiz-adv-x="768" />
+<glyph glyph-name="eye" unicode="" d="M512 704c-192 0-416-128-512-384 96-192 288-320 512-320s416 128 512 320c-96 256-320 384-512 384z m0-640c-192 0-352 128-384 256 32 128 192 256 384 256s352-128 384-256c-32-128-192-256-384-256z m0 448c-20 0-38-4-56-9 33-15 56-48 56-87 0-53-43-96-96-96-39 0-72 23-87 56-5-18-9-36-9-56 0-106 86-192 192-192s192 86 192 192-86 192-192 192z" horiz-adv-x="1024" />
+<glyph glyph-name="file-binary" unicode="" d="M0-128V768h576l192-192v-704z m704 672L544 704H64v-768h640zM320 320H128V576h192z m-64 192h-64v-128h64z m0-448h64v-64H128v64h64V192h-64v64h128z m256 320h64v-64H384v64h64V512h-64v64h128z m64-384H384V256h192z m-64 192h-64v-128h64z" horiz-adv-x="768" />
+<glyph glyph-name="file-code" unicode="" d="M288 448L128 288l160-160 64 64-96 96 96 96z m128-64l96-96-96-96 64-64 160 160-160 160zM576 768H0v-896h768V576z m128-832H64V704h480l160-160z" horiz-adv-x="768" />
+<glyph glyph-name="file-directory" unicode="" d="M832 640c-32 0-336 0-352 0s-32 16-32 32 0 0 0 32-32 64-64 64-288 0-320 0-64-32-64-64 0-704 0-704h896s0 544 0 576-32 64-64 64z m-448 0h-320s0 15 0 32 16 32 32 32 241 0 256 0 32-15 32-32 0-32 0-32z" horiz-adv-x="896" />
+<glyph glyph-name="file-media" unicode="" d="M576 768H0v-896h768V576z m128-832H64V704h480l160-160zM128 576v-512h128c0 71 57 128 128 128-71 0-128 57-128 128s57 128 128 128 128-57 128-128-57-128-128-128c71 0 128-57 128-128h128V448L512 576z" horiz-adv-x="768" />
+<glyph glyph-name="file-pdf" unicode="" d="M576 768H0v-896h768V576zM64 704h256c-13-4-27-15-35-43-13-49-7-131 16-209-24-81-123-277-129-289-16-4-66-23-108-59z m283-307c58-150 95-150 135-168-84-13-148-22-232-60-4-6 76 146 97 228z m357-461H64c1 0 1 0 2 0 34 0 85 21 180 182 39 16 72 27 79 29 59 15 125 27 187 34 55-28 127-46 168-49 10 0 16 2 24 2z m0 311c-24 14-54 25-89 25-24 0-51-2-79-5-27 13-92 33-147 190 17 104 13 174 13 174 6 53-24 73-52 73h194l160-160z" horiz-adv-x="768" />
+<glyph glyph-name="file-submodule" unicode="" d="M832 320c-32 0-192 0-192 0 0 32-32 64-64 64s-96 0-128 0-64-32-64-64 0-320 0-320h512s0 224 0 256-32 64-64 64z m-256-64h-128s0 17 0 32 15 32 32 32 48 0 64 0 32-15 32-32 0-32 0-32z m256 320c-32 0-336 0-352 0s-32 17-32 32 0 0 0 32-32 64-64 64-288 0-320 0-64-32-64-64 0-640 0-640h320s0 352 0 384 32 64 64 64 224 0 256 0 64-32 64-64h192s0 96 0 128-32 64-64 64z m-448 0h-320s0 16 0 32 16 32 32 32 240 0 256 0 32-17 32-32 0-32 0-32z" horiz-adv-x="896" />
+<glyph glyph-name="file-symlink-directory" unicode="" d="M832 640h-352c-16 0-32 16-32 32s0 0 0 32-32 64-64 64h-320c-32 0-64-32-64-64s0-704 0-704h896s0 544 0 576-32 64-64 64z m-768 32c0 17 16 32 32 32h256c15 0 32-15 32-32s0-32 0-32h-320s0 15 0 32z m384-544v128c-125 0-224-56-256-192 0 209 107 320 256 320 0 49 0 128 0 128l256-192-256-192z" horiz-adv-x="896" />
+<glyph glyph-name="file-symlink-file" unicode="" d="M576 768H0v-896h768V576z m128-832H64V704h480l160-160zM384 384c-149 0-256-111-256-320 32 136 131 192 256 192v-128l256 192-256 192z" horiz-adv-x="768" />
+<glyph glyph-name="file-text" unicode="" d="M448 576H128v-64h320zM576 768H0v-896h768V576z m128-832H64V704h480l160-160zM128 64h512v64H128z m0 128h512v64H128z m0 128h512v64H128z" horiz-adv-x="768" />
+<glyph glyph-name="file-zip" unicode="" d="M320 256v64h-64v-64z m0 128v64h-64v-64z m0 128v64h-64v-64z m-128-64h64v64h-64zM576 768H0v-896h768V576z m128-832H64V704h192v-64h64v64h224l160-160zM192 576h64v64h-64z m0-256h64v64h-64z m0-128l-64-64v-128h256V128l-64 64h-64v64h-64z m128-64v-64H192v64z" horiz-adv-x="768" />
+<glyph glyph-name="flame" unicode="" d="M433 787c50-134 24-207-32-265-61-64-156-112-223-206-89-125-104-400 217-472-135 71-164 277-18 406-38-125 32-205 119-176 85 29 141-32 139-102-1-48-20-89-69-112 209 37 293 210 293 342 0 174-155 198-77 344-93-8-125-69-116-169 6-66-63-111-114-81-41 25-40 73-4 109 77 76 107 251-115 382z" horiz-adv-x="1024" />
+<glyph glyph-name="fold" unicode="" d="M896 576H672l-64-64h192L672 384H224L96 512h192l-64 64H0v-63.999L160 352 0 192v-64h224l64 64H96l128 128h448l128-128H608l64-64h224v64L736 352l160 160.001V576zM640 640H512V832H384v-192H256l192-192L640 640zM256 64h128v-192h128V64h128L448 256 256 64z" horiz-adv-x="896" />
+<glyph glyph-name="gear" unicode="" d="M447.938 482C358.531 482 286 409.469 286 320c0-89.375 72.531-162.062 161.938-162.062 89.438 0 161.438 72.688 161.438 162.062C609.375 409.469 537.375 482 447.938 482zM772.625 226.938l-29.188-70.312 52.062-102.25 6.875-13.5-72.188-72.188L611.75 24.625l-70.312-28.875L505.75-113.5l-4.562-14.5H399.156L355-4.687999999999988l-70.312 29-102.404-51.938-13.5-6.75-72.156 72.125 55.875 118.5-28.969 70.25L14.469 262.125 0 266.812V368.781L123.406 413l28.969 70.188-51.906 102.469-6.844 13.438 72.062 72.062 118.594-55.844 70.219 29.031 35.656 109.188L394.75 768h102l44.188-123.469 70.125-29.031L713.5 667.469l13.625 6.844 72.125-72.062-55.875-118.406L772.25 413.5l109.375-35.656L896 373.25v-101.938L772.625 226.938z" horiz-adv-x="896" />
+<glyph glyph-name="gift" unicode="" d="M448-128h320V192H448V-128zM64-128h320V192H64V-128zM447.75 455.812c31.469 3.5 66.875 7.406 87.375 9.719C619 474.875 694.5 550.406 703.812 634.25c9.312 83.75-51 144.125-134.688 134.719C503.688 761.656 443.844 714 416 653.625 388.156 714 328.312 761.656 262.906 769.031 179.188 778.375 118.781 718 128.188 634.25c9.344-83.844 84.875-159.312 168.656-168.719 20.531-2.312 55.938-6.281 87.406-9.719C383.75 451.594 384 448 384 448h64C448 448 448.25 451.594 447.75 455.812zM555.375 691.312c45.25 5.062 78-27.562 72.875-72.875-5-45.312-45.875-86.156-91.125-91.219-45.375-5.031-78 27.594-72.938 72.906C469.249 645.436 510.125 686.281 555.375 691.312zM294.906 527.219c-45.25 5.062-86.062 45.906-91.125 91.219-5.063 45.313 27.594 77.938 72.812 72.875 45.312-5.031 86.156-45.875 91.222-91.188C372.875 554.812 340.219 522.188 294.906 527.219zM448 448v-192h384V448H448zM0 256h384V448H0V256z" horiz-adv-x="896" />
+<glyph glyph-name="gist" unicode="" d="M416 448l96-96-96-96 64-64 160 160-160 160-64-64z m-416 320v-832h768v832h-768z m704-768h-640v704h640v-704z m-352 256l-96 96 96 96-64 64-160-160 160-160 64 64z" horiz-adv-x="768" />
+<glyph glyph-name="gist-secret" unicode="" d="M193 128l128-192h-256l-65 256 257 64-64-128z m448 128l64-128-128-192h256l64 256-256 64z m-84 0h-216l44-102-64-218h256l-64 218 44 102z m84 192h-384l-128-64h640l-128 64z m-64 256l-128-64-128 64-64-192h384l-64 192z" horiz-adv-x="896" />
+<glyph glyph-name="git-branch" unicode="" d="M512 640c-71 0-128-57-128-128 0-47 26-88 64-110v-18c0-64-64-128-128-128-53 0-95-11-128-29v303c38 22 64 63 64 110 0 71-57 128-128 128s-128-57-128-128c0-47 26-88 64-110v-419c-38-22-64-63-64-110 0-71 57-128 128-128s128 57 128 128c0 34-13 64-34 87 19 23 49 41 98 41 128 0 256 128 256 256v18c38 22 64 63 64 110 0 71-57 128-128 128z m-384 64c35 0 64-29 64-64s-29-64-64-64-64 29-64 64 29 64 64 64z m0-768c-35 0-64 29-64 64s29 64 64 64 64-29 64-64-29-64-64-64z m384 512c-35 0-64 29-64 64s29 64 64 64 64-29 64-64-29-64-64-64z" horiz-adv-x="640" />
+<glyph glyph-name="git-commit" unicode="" d="M694.875 384C666.375 494.219 567.125 576 448 576c-119.094 0-218.375-81.781-246.906-192H0v-128h201.094C229.625 145.75 328.906 64 448 64c119.125 0 218.375 81.75 246.875 192H896V384H694.875zM448 192c-70.656 0-128 57.375-128 128 0 70.656 57.344 128 128 128 70.625 0 128-57.344 128-128C576 249.375 518.625 192 448 192z" horiz-adv-x="896" />
+<glyph glyph-name="git-compare" unicode="" d="M832 110s0 306 0 402-96 192-192 192c-64 0-64 0-64 0v128l-192-192 192-192v128s32 0 64 0 64-32 64-64 0-402 0-402c-38-22-64-63-64-110 0-71 57-128 128-128s128 57 128 128c0 47-26 88-64 110z m-64-174c-35 0-64 29-64 64s29 64 64 64 64-29 64-64-29-64-64-64z m-448 128s-32 0-64 0-64 32-64 64 0 402 0 402c38 22 64 63 64 110 0 71-57 128-128 128s-128-57-128-128c0-47 26-88 64-110 0 0 0-306 0-402s96-192 192-192c64 0 64 0 64 0v-128l192 192-192 192v-128z m-192 512c-35 0-64 29-64 64s29 64 64 64 64-29 64-64-29-64-64-64z" horiz-adv-x="896" />
+<glyph glyph-name="git-merge" unicode="" d="M640 384c-47.625 0-88.625-26.312-110.625-64.906C523.625 319.5 518 320 512 320c-131.062 0-255.438 99.844-300.812 223.438C238.469 566.906 256 601.281 256 640c0 70.656-57.344 128-128 128S0 710.656 0 640c0-47.219 25.844-88.062 64-110.281V110.25C25.844 88.06200000000001 0 47.25 0 0c0-70.625 57.344-128 128-128s128 57.375 128 128c0 47.25-25.844 88.062-64 110.25V340.531C276.156 251.5 392.375 192 512 192c6.375 0 11.625 0.438 17.375 0.625C551.5 154.188 592.5 128 640 128c70.625 0 128 57.375 128 128C768 326.656 710.625 384 640 384zM128-64c-35.312 0-64 28.625-64 64 0 35.312 28.688 64 64 64 35.406 0 64-28.688 64-64C192-35.375 163.406-64 128-64zM128 576c-35.312 0-64 28.594-64 64s28.688 64 64 64c35.406 0 64-28.594 64-64S163.406 576 128 576zM640 192c-35.312 0-64 28.625-64 64 0 35.406 28.688 64 64 64 35.375 0 64-28.594 64-64C704 220.625 675.375 192 640 192z" horiz-adv-x="768" />
+<glyph glyph-name="git-pull-request" unicode="" d="M704 110s0 306 0 402-96 192-192 192c-64 0-64 0-64 0v128l-192-192 192-192v128s32 0 64 0 64-32 64-64 0-402 0-402c-38-22-64-63-64-110 0-71 57-128 128-128s128 57 128 128c0 47-26 88-64 110z m-64-174c-35 0-64 29-64 64s29 64 64 64 64-29 64-64-29-64-64-64z m-512 832c-71 0-128-57-128-128 0-47 26-88 64-110v-419c-38-22-64-63-64-110 0-71 57-128 128-128s128 57 128 128c0 47-26 88-64 110v419c38 22 64 63 64 110 0 71-57 128-128 128z m0-832c-35 0-64 29-64 64s29 64 64 64 64-29 64-64-29-64-64-64z m0 640c-35 0-64 29-64 64s29 64 64 64 64-29 64-64-29-64-64-64z" horiz-adv-x="768" />
+<glyph glyph-name="globe" unicode="" d="M512 704c-212.077 0-384-171.923-384-384s171.923-384 384-384c25.953 0 51.303 2.582 75.812 7.49-9.879 4.725-10.957 40.174-1.188 60.385 10.875 22.5 45 79.5 11.25 98.625s-24.375 27.75-45 49.875-12.19 25.451-13.5 31.125c-4.5 19.5 19.875 48.75 21 51.75s1.125 14.25 0.75 17.625S545.75 265.25 542 265.625s-5.625-6-10.875-6.375-28.125 13.875-33 17.625-7.125 12.75-13.875 19.5-7.5 1.5-18 5.625-44.25 16.5-70.125 27-28.125 25.219-28.5 35.625-15.75 25.5-22.961 36.375c-7.209 10.875-8.539 25.875-11.164 22.5s13.5-42.75 10.875-43.875-8.25 10.875-15.75 20.625 7.875 4.5-16.125 51.75 7.5 71.344 9 96 20.25-9 10.5 6.75 0.75 48.75-6.75 60.75S275 602 275 602c1.125 11.625 37.5 31.5 63.75 49.875s42.281 4.125 63.375-2.625 22.5-4.5 15.375 2.25 3 10.125 19.5 7.5 21-22.5 46.125-20.625 2.625-4.875 6-11.25-3.75-5.625-20.25-16.875S469.25 599 498.5 577.625s20.25 14.25 17.25 30S537.125 611 537.125 611c18-12 14.674-0.66 27.799-4.785S613.625 572 613.625 572c-44.625-24.375-16
.5-27-9-32.625s-15.375-16.5-15.375-16.5c-9.375 9.375-10.875-0.375-16.875-3.75s-0.375-12-0.375-12c-31.031-4.875-24-37.5-23.625-45.375s-19.875-19.875-25.125-31.125S536.75 395 527 393.5s-19.5 36.75-72 22.5c-15.828-4.297-51-22.5-32.25-59.625s49.875 10.5 60.375 5.25-3-28.875-0.75-29.25 29.625-1.031 31.125-33 41.625-29.25 50.25-30 37.5 23.625 41.625 24.75S626 309.125 662 288.5s54.375-17.625 66.75-26.25 3.75-25.875 15.375-31.5 58.125 1.875 69.75-17.25-48-115.125-66.75-125.625S719.75 53.375 701 38s-45-34.406-69.75-49.125c-21.908-13.027-25.85-36.365-35.609-43.732C767.496-16.67999999999995 896 136.64999999999998 896 320 896 532.077 724.077 704 512 704zM602 343.625c-5.25-1.5-16.125-11.25-42.75 4.5s-45 12.75-47.25 15.375c0 0-2.25 6.375 9.375 7.5 23.871 2.311 54-22.125 60.75-22.5s10.125 6.75 22.125 2.883C616.25 347.52 607.25 345.125 602 343.625zM476.375 665.75c-2.615 1.902 2.166 4.092 5.016 7.875 1.645 2.186 0.425 5.815 2.484 7.875 5.625 5.625 33.375 13.5 27.949-1.875C506.4 664.25 480.5 662.75 4
76.375 665.75zM543.5 617c-9.375 0.375-31.443 2.707-27.375 6.75 15.844 15.75-6 20.25-19.5 21.375S477.5 653.75 484.25 654.5s33.75-0.375 38.25-4.125 28.875-13.5 30.375-20.625S552.875 616.625 543.5 617zM624.875 619.625c-7.5-6-45.24 21.529-52.5 27.75-31.5 27-48.375 18-54.99 22.5-6.617 4.5-4.26 10.5 5.865 19.5s38.625-3 55.125-4.875 35.625-14.625 36-29.781C614.75 639.564 632.375 625.625 624.875 619.625z" horiz-adv-x="1024" />
+<glyph glyph-name="graph" unicode="" d="M704 576H512v-640h192V576zM960 384H768v-448h192V384zM64-128V0h64v64H64V192h64v64H64V384h64v64H64V576h64v64H64V768h64V832H0v-1024h1024v64H64zM448 256H256v-320h192V256z" horiz-adv-x="1024" />
+<glyph glyph-name="heart" unicode="♥" d="M384-32c399 314 384 425 384 512s-72 192-192 192-192-128-192-128-72 128-192 128-192-105-192-192-15-198 384-512z" horiz-adv-x="768.199" />
+<glyph glyph-name="history" unicode="" d="M448 768c-90.938 0-175.312-27.531-245.938-74.062L128 768v-256h256l-88 88c45.438 24.688 96.688 40 152 40 176.75 0 320-143.219 320-320 0-176.75-143.25-320-320-320-176.781 0-320 143.25-320 320 0 45.562 9.781 88.781 27 128H64v99.406C24.312 480.5 0 403.406 0 320c0-247.438 200.562-448 448-448 247.438 0 448 200.562 448 448C896 567.438 695.438 768 448 768zM447.031 1L512 64V256h128l64 64-64 64H512l-64 64L320 320l64-64v-192L447.031 1z" horiz-adv-x="896" />
+<glyph glyph-name="home" unicode="" d="M192 256l64-384h192V192h128v-320h192l64 384L512 576 192 256zM832 448V704H704l0.312-128.312L512 768 0 256h128l384 384 384-384h128L832 448z" horiz-adv-x="1024" />
+<glyph glyph-name="horizontal-rule" unicode="" d="M63.938 384h128v-128h64V639.938h-64V448h-128V639.938H0V256h63.938V384zM639.875 256V384h-63.938v-128H639.875zM639.875 448V575.938h-63.938V448H639.875zM447.938 448V575.938h128v64h-192V256h64V384h128v64H447.938zM0 0h639.875V128H0V0z" horiz-adv-x="639.875" />
+<glyph glyph-name="hourglass" unicode="" d="M571 320c118 85 197 240 197 384 0 71-172 128-384 128s-384-57-384-128c0-144 80-299 197-384-118-85-197-240-197-384 0-71 172-128 384-128s384 57 384 128c0 144-80 299-197 384z m-187 448c141 0 256-29 256-64s-115-64-256-64-256 29-256 64 115 64 256 64z m-64-706c-154-7-238-40-253-82 16 114 75 189 141 251 73 68 112 60 112 103v-273z m-105 352c-70 55-122 130-142 215 70-32 183-53 311-53s241 21 311 53c-20-85-72-160-142-215-24 17-70 34-169 34s-145-17-169-34z m233-352v273c0-43 39-35 112-103 66-62 125-138 141-251-14 41-99 75-253 82z" horiz-adv-x="768" />
+<glyph glyph-name="hubot" unicode="" d="M512 768c-283 0-512-229-512-512 0 0 0-192 0-256s64-128 128-128 704 0 768 0 128 64 128 128 0 256 0 256c0 283-229 512-512 512z m96-768h-192c-18 0-32 14-32 32s14 32 32 32h192c18 0 32-14 32-32s-14-32-32-32z m288 128c0-32-32-64-64-64s-128 0-128 0c0 32-32 64-64 64s-224 0-256 0-64-32-64-64c0 0-96 0-128 0s-64 32-64 64 0 360 0 360c78 129 220 216 384 216s306-87 384-216c0 0 0-328 0-360z m-128 384c-32 0-480 0-512 0s-64-32-64-64 0-96 0-128 32-64 64-64 480 0 512 0 64 32 64 64 0 96 0 128-32 64-64 64z m0-128l-64-64h-128l-64 64-64-64h-128l-64 64v64h64l64-64 64 64h128l64-64 64 64h64v-64z" horiz-adv-x="1024" />
+<glyph glyph-name="inbox" unicode="" d="M704 640H64L0 256v-256h768V256L704 640zM576 256l-64-128H256l-64 128H79l49 320h512l49-320H576z" horiz-adv-x="768" />
+<glyph glyph-name="info" unicode="" d="M448 448c35 0 64 29 64 64s-29 64-64 64-64-29-64-64 29-64 64-64z m0 320c-247 0-448-201-448-448s201-448 448-448 448 201 448 448-201 448-448 448z m0-768c-177 0-320 143-320 320s143 320 320 320 320-143 320-320-143-320-320-320z m64 320c0 32-32 64-64 64s-32 0-64 0-64-32-64-64h64s0-160 0-192 32-64 64-64 32 0 64 0 64 32 64 64h-64s0 160 0 192z" horiz-adv-x="896" />
+<glyph glyph-name="issue-closed" unicode="" d="M704 515.969l-96-96L768 256l256 256-96 96L769.25 449.219 704 515.969zM512 0c-176.781 0-320 143.25-320 320 0 176.781 143.219 320 320 320 88.375 0 168.375-35.844 226.25-93.75l90.562 90.5C747.75 717.875 635.75 768 512 768 264.562 768 64 567.438 64 320c0-247.438 200.562-448 448-448 247.438 0 448 200.562 448 448L759.75 119.75C768.688 130.75 684.75 0 512 0zM576 576H448v-320h128V576zM448 64h128V192H448V64z" horiz-adv-x="1024" />
+<glyph glyph-name="issue-opened" unicode="" d="M448 768C200.562 768 0 567.438 0 320c0-247.438 200.562-448 448-448 247.438 0 448 200.562 448 448C896 567.438 695.438 768 448 768zM448 0c-176.781 0-320 143.25-320 320 0 176.781 143.219 320 320 320 176.75 0 320-143.219 320-320C768 143.25 624.75 0 448 0zM384 64h128V192H384V64zM384 256h128V576H384V256z" horiz-adv-x="896" />
+<glyph glyph-name="issue-reopened" unicode="" d="M639.125 64.75C585.75 24.625 520 0 448 0c-176.781 0-320 143.25-320 320 0 45.562 9.781 88.781 27 128H64v99.469C24.312 480.562 0 403.406 0 320c0-247.438 200.562-448 448-448 107.375 0 204.5 39.312 281.75 102.25L768-64V128H576L639.125 64.75zM384 64h128V192H384V64zM512 576H384v-320h128V576zM896 320c0 247.438-200.562 448-448 448-107.406 0-204.531-39.312-281.656-102.344L128 704v-192h192l-63.156 63.156C310.281 615.312 376 640 448 640c176.75 0 320-143.219 320-320 0-45.562-9.75-88.75-27-128h91v-99.5C871.688 159.438 896 236.5 896 320z" horiz-adv-x="896" />
+<glyph glyph-name="jersey" unicode="" d="M704 832h-192c0-32-33-64-97-64s-95 32-95 64h-192c0-128-2-384-128-384 0 0-1-544-1-576s32-64 64-64 672 0 704 0 64 32 64 64 0 576 0 576c-126 0-128 256-128 384z m-609-960c-16 0-31 10-31 32 0 32 0 480 0 480 119 64 128 192 128 384h64c0-96 32-191 160-192s160 96 160 192h64c0-186 32-276 64-339v-557s-593 0-609 0z m385 576l-32-32v-320l32-32h128l32 32v320l-32 32h-128z m96-320h-64v256h64v-256z m-352 320l-32-32v-320l32-32h128l32 32v320l-32 32h-128z m96-320h-64v256h64v-256z" horiz-adv-x="896" />
+<glyph glyph-name="jump-down" unicode="" d="M767.75 640H0.25L384 256.25 767.75 640zM0 128v-128h768V128H0z" horiz-adv-x="768" />
+<glyph glyph-name="jump-left" unicode="" d="M256.25 320L640-63.75v767.5L256.25 320zM0-64h128V704H0V-64z" horiz-adv-x="640" />
+<glyph glyph-name="jump-right" unicode="" d="M0-63.75L383.75 320 0 703.812V-63.75zM512 704v-768h128V704H512z" horiz-adv-x="640" />
+<glyph glyph-name="jump-up" unicode="" d="M0.188 0h767.5L384 383.75 0.188 0zM0 640v-128h768V640H0z" horiz-adv-x="768" />
+<glyph glyph-name="key" unicode="" d="M640.9 768.1c-141.4 0-256-114.6-256-256 0-19.6 2.2-38.6 6.4-56.9L0 64v-64l64-64h128l64 64v64h64v64h64v64h128l70.8 70.8c18.7-4.3 38.1-6.6 58.1-6.6 141.4 0 256 114.6 256 256S782.2 768.1 640.9 768.1zM384 320L64 0v64l320 320V320zM704 512c-35.3 0-64 28.7-64 64 0 35.3 28.7 64 64 64s64-28.7 64-64C768 540.7 739.3 512 704 512z" horiz-adv-x="896.9" />
+<glyph glyph-name="keyboard" unicode="" d="M640 256h64V384h-64V256zM768 576h-64v-128h64V576zM640 576h-64v-128h64V576zM512 256h64V384h-64V256zM384 64h320V192H384V64zM768 256h128V576h-64v-192h-64V256zM256 64h64V192h-64V64zM768 64h128V192H768V64zM512 576h-64v-128h64V576zM192 384h-64v-128h64V384zM192 192h-64v-128h64V192zM0 704v-768h1024V704H0zM960 0H64V640h896V0zM384 256h64V384h-64V256zM256 576H128v-128h128V576zM384 576h-64v-128h64V576zM256 256h64V384h-64V256z" horiz-adv-x="1024" />
+<glyph glyph-name="law" unicode="" d="M514 640c34 1 61 28 62 62 1 37-29 67-66 66-34-1-61-28-62-62-1-37 29-67 66-66z m464-384h-18l-127 246c18 2 36 9 52 16 24 11 29 43 11 62l-1 1c-11 11-28 15-43 8-14-6-34-13-53-13-56 0-81 64-287 64s-231-64-287-64c-20 0-39 6-53 13-15 6-32 3-43-8l-1-1c-18-19-13-50 11-62 16-8 34-14 52-16l-127-246h-18c-8 0-14-7-13-15 11-64 92-113 191-113s180 49 191 113c1 8-5 15-13 15h-18l-127 245c83 7 127 49 191 49v-486c-35 0-64-29-64-64h-71c-28 0-57-29-57-64h512c0 35-29 64-71 64h-57c0 35-29 64-64 64v486c64 0 108-42 191-49l-127-245h-18c-8 0-14-7-13-15 11-64 92-113 191-113s180 49 191 113c1 8-5 15-13 15z m-658 0h-192l96 180 96-180z m384 0l96 180 96-180h-192z" horiz-adv-x="1024" />
+<glyph glyph-name="light-bulb" unicode="" d="M512 768c-176.731 0-320-143.269-320-320 0-104.69 50.278-197.633 128-256.015V0c0-35.346 28.653-64 64-64 0-35.346 28.653-64 64-64h128c35.347 0 64 28.654 64 64 35.347 0 64 28.654 64 64V191.985C781.722 250.36699999999996 832 343.31 832 448 832 624.731 688.731 768 512 768zM640 32c0-17.673-14.326-32-32-32H416c-17.674 0-32 14.327-32 32v32h256V32zM704 278.693c-33.234-33.03-64-42.389-64-124.041V128h-64V256l128 128v64l-64 64-64-64-64 64-64-64-64 64-64-64v-64l128-128v-128h-64v26.652c0 81.652-30.766 91.011-64 124.041C280.177 323.82 256 383.082 256 448c0 141.385 114.615 256 256 256s256-114.615 256-256C768 383.082 743.823 323.82 704 278.693zM512 256L384 384v64l64-64 64 64 64-64 64 64v-64L512 256z" horiz-adv-x="1024" />
+<glyph glyph-name="link" unicode="" d="M768 576h-138c48-32 93-89 107-128h30c65 0 128-64 128-128s-65-128-128-128h-192c-63 0-128 64-128 128 0 23 7 45 18 64h-137c-5-21-8-42-8-64 0-128 127-256 255-256s65 0 193 0 256 128 256 256-128 256-256 256z m-481-384h-30c-65 0-128 64-128 128s65 128 128 128h192c63 0 128-64 128-128 0-23-7-45-18-64h137c5 21 8 42 8 64 0 128-127 256-255 256s-65 0-193 0-256-128-256-256 128-256 256-256h138c-48 32-93 89-107 128z" horiz-adv-x="1024" />
+<glyph glyph-name="link-external" unicode="" d="M640 64H128V574.094L256 576V704H0v-768h768V256H640V64zM384 704l128-128L320 384l128-128 192 192 128-128V704H384z" horiz-adv-x="768" />
+<glyph glyph-name="list-ordered" unicode="" d="M320 256h448v128h-448v-128z m0-256h448v128h-448v-128z m0 640v-128h448v128h-448z m-241-256h78v256h-36l-85-23v-50l43 2v-185z m110-206c0 36-12 78-96 78-33 0-64-6-83-16l1-66c21 10 42 15 67 15s32-11 32-28c0-26-30-58-110-112v-50h192v67l-91-2c49 30 87 66 87 113l1 1z" horiz-adv-x="768" />
+<glyph glyph-name="list-unordered" unicode="" d="M0 256h128v128h-128v-128z m0 256h128v128h-128v-128z m0-512h128v128h-128v-128z m256 256h512v128h-512v-128z m0 256h512v128h-512v-128z m0-512h512v128h-512v-128z" horiz-adv-x="768" />
+<glyph glyph-name="location" unicode="" d="M320 832c-177 0-320-143-320-320s160-416 320-704c160 288 320 527 320 704s-143 320-320 320z m0-448c-71 0-128 57-128 128s57 128 128 128 128-57 128-128-57-128-128-128z" horiz-adv-x="640" />
+<glyph glyph-name="lock" unicode="" d="M704 384c-32 0-64 0-64 0s0 64 0 192-128 256-256 256-256-128-256-256 0-192 0-192-32 0-64 0-64-32-64-64 0-416 0-448 32-64 64-64 608 0 640 0 64 32 64 64 0 416 0 448-32 64-64 64z m-192-128h-384v-64h384v-64h-384v-64h384v-64h-384v-64h384v-64h-448v448h448v-64z m0 128h-256s0 128 0 192 64 128 128 128 128-64 128-128 0-192 0-192z" horiz-adv-x="768" />
+<glyph glyph-name="logo-github" unicode="" d="M552.73 499.865H311.557c-6.205 0-11.25-5.045-11.25-11.297v-117.887c0-6.252 5.045-11.272 11.25-11.272h94.109v-146.542c0 0-21.145-7.057-79.496-7.057-68.914 0-165.156 25.244-165.156 236.795 0 211.642 100.197 239.491 194.307 239.491 81.465 0 116.514-14.304 138.869-21.241 7.01-2.203 13.404 4.831 13.404 11.105L534.543 785.87c0 2.912-1.041 6.417-4.262 8.785C521.186 801.048 465.865 832 326.168 832 165.133 832 0 763.513 0 434.243 0 105.02099999999996 189.051 56 348.381 56c131.883 0 212.021 56.314 212.021 56.314 3.268 1.801 3.6 6.395 3.6 8.479V488.568C563.955 494.773 558.887 499.865 552.73 499.865zM1772.381 803.866h-135.695c-6.252 0-11.271-5.044-11.271-11.296v-262.393h-211.619V792.57c0 6.252-5.068 11.296-11.178 11.296h-135.838c-6.111 0-11.084-5.044-11.084-11.296v-710.473c0-6.299 5.021-11.32 11.084-11.32h135.838c6.203 0 11.178 5.068 11.178 11.32V385.933h211.619l-0.475-303.883c0-6.3 5.021-11.272 11.084-11.272h135.885c6.252 0 11.131 5.068 11.
131 11.272l0.473 710.521C1783.607 798.822 1778.539 803.866 1772.381 803.866zM714.949 787.763c-48.357 0-87.574-39.572-87.574-88.403 0-48.855 39.217-88.428 87.574-88.428s87.527 39.572 87.527 88.428C802.477 748.19 763.307 787.763 714.949 787.763zM792.861 559.874c0 6.205-5.02 11.344-11.131 11.344H646.32c-6.348 0-11.746-6.394-11.746-12.67 0 0 0-394.654 0-469.867 0-13.735 8.572-17.903 19.703-17.903 0 0 57.688 0 121.959 0 13.311 0 16.814 6.536 16.814 18.188-0.094 25.197-0.094 123.808-0.094 142.942C792.861 250.09500000000003 792.861 559.874 792.861 559.874zM2297.973 570.152h-134.701c-6.158 0-11.084-5.092-11.084-11.344v-348.31c0 0-34.244-25.197-82.934-25.197-48.547 0-61.525 22.024-61.525 69.719 0 47.553 0 303.835 0 303.835 0 6.252-5.068 11.345-11.131 11.345h-136.643c-6.252 0-11.178-5.093-11.178-11.345 0 0 0-185.521 0-326.807 0-141.284 78.766-175.906 186.99-175.906 88.854 0 160.609 49.115 160.609 49.115s3.363-25.766 5.068-28.844c1.422-3.078 5.447-6.158 9.852-6.158h86.58c6.158 0 11.178 5.069 1
1.178 11.321l0.379 477.278C2309.15 565.0609999999999 2304.129 570.152 2297.973 570.152zM2666.932 586.1610000000001c-76.539 0-128.592-34.148-128.592-34.148V792.57c0 6.252-5.068 11.296-11.131 11.296h-136.264c-6.109 0-11.131-5.044-11.131-11.296l-0.379-710.521c0-6.3 5.068-11.272 11.225-11.272 0 0 94.773 0 94.869 0 4.215 0 7.389 2.179 9.805 5.968 2.369 3.837 5.73 32.775 5.73 32.775s55.557-52.763 161.035-52.763c123.807 0 194.758 62.804 194.758 281.906C2856.859 557.482 2743.471 586.1610000000001 2666.932 586.1610000000001zM2613.791 185.77499999999998c-46.701 1.421-78.34 22.64-78.34 22.64v225.07c0 0 31.307 19.206 69.672 22.593 48.547 4.31 95.438-10.326 95.438-126.13C2700.322 207.94100000000003 2679.199 183.83399999999995 2613.791 185.77499999999998zM1185.125 188.33299999999997c-5.969 0-21.219-2.368-36.85-2.368-49.92 0-66.971 23.256-66.971 53.331 0 30.218 0 199.85 0 199.85h101.926c6.252 0 11.178 5.044 11.178 11.343v109.48c0.094 6.299-4.926 11.344-11.178 11.344h-101.926l-0.143 134.535c0 5.092
-2.699 7.625-8.572 7.625H933.861c-5.352 0-8.336-2.391-8.336-7.578v-139.035c0 0-69.576-16.79-74.266-18.188-4.641-1.326-8.051-5.684-8.051-10.822v-87.408c0-6.252 5.068-11.344 11.178-11.344h71.139c0 0 0-91.34 0-210.222 0-156.109 109.553-171.455 183.439-171.455 33.723 0 74.076 10.988 80.848 13.356 4.074 1.421 6.395 5.637 6.395 10.136l0.047 96.101C1196.254 183.312 1190.998 188.428 1185.125 188.33299999999997z" horiz-adv-x="2856.857" />
+<glyph glyph-name="mail" unicode="" d="M0 640v-640h896V640H0zM768 576L448 312 128 576H768zM64 512l252.031-191.625L64 128V512zM128 64l254 206.25L448 220l65.875 50.125L768 64H128zM832 128L579.625 320.062 832 512V128z" horiz-adv-x="896" />
+<glyph glyph-name="mail-read" unicode="" d="M576 448H256v-64h320V448zM384 576H256v-64h128V576zM768 603.469V704H627.188L448 832 268.812 704H128v-100.531L0 512v-640h896V512L768 603.469zM192 640h512v-244.812L448 184 192 395.188V640zM64 384l252.031-191.625L64 0V384zM128-64l254 206.25L448 92l65.875 50.125L768-64H128zM832 0L579.625 192.062 832 384V0z" horiz-adv-x="896" />
+<glyph glyph-name="mail-reply" unicode="" d="M384 672l-384-288 384-288v192c111 0 329-61 384-280 0 291-196 451-384 472v192z" horiz-adv-x="768" />
+<glyph glyph-name="mark-github" unicode="" d="M512 832C229.252 832 0 602.748 0 320c0-226.251 146.688-418.126 350.155-485.813 25.593-4.686 34.937 11.125 34.937 24.626 0 12.188-0.469 52.562-0.718 95.314-128.708-23.46-161.707 31.541-172.469 60.373-5.525 14.809-30.407 60.249-52.398 72.263-17.988 9.828-43.26 33.237-0.917 33.735 40.434 0.476 69.348-37.308 78.471-52.75 45.938-77.749 119.876-55.627 148.999-42.5 4.654 32.999 17.902 55.627 32.501 68.373-113.657 12.939-233.22 56.875-233.22 253.063 0 55.94 19.968 101.561 52.658 137.404-5.22 12.999-22.844 65.095 5.063 135.563 0 0 42.937 13.749 140.811-52.501 40.811 11.406 84.594 17.031 128.124 17.22 43.499-0.188 87.314-5.874 128.188-17.28 97.689 66.311 140.686 52.501 140.686 52.501 28-70.532 10.375-122.564 5.124-135.499 32.811-35.844 52.626-81.468 52.626-137.404 0-196.686-119.751-240-233.813-252.686 18.439-15.876 34.748-47.001 34.748-94.748 0-68.437-0.686-123.627-0.686-140.501 0-13.625 9.312-29.561 35.25-24.562C877.436-97.99800000000005
1024 93.87400000000002 1024 320 1024 602.748 794.748 832 512 832z" horiz-adv-x="1024" />
+<glyph glyph-name="markdown" unicode="" d="M950.154 640H73.846C33.127 640 0 606.873 0 566.154v-492.308C0 33.125 33.127 0 73.846 0h876.308c40.721 0 73.846 33.125 73.846 73.846V566.154C1024 606.873 990.875 640 950.154 640zM576 128.125L448 128V320l-96-123.077L256 320v-192H128V512h128l96-128 96 128 128 0.125V128.125zM767.091 96.125L608 320h96V512h128v-192h96L767.091 96.125z" horiz-adv-x="1024" />
+<glyph glyph-name="megaphone" unicode="" d="M832 800c-130 0-124-130-704-128C57.344 672 0 557.375 0 416s57.344-256 128-256c22.781 0 43.188-0.5 64.188-0.875L256-128l192-32 64 96-45.125 203.125C709.375 102.875 733.75 32 832 32c106 0 192 172 192 384C1024 628.031 938 800 832 800zM197 349.062c-39.188 1.469-82.188 2.25-127.562 2.625C66 371.406 64 393.094 64 416c0 88.375 28.688 192 64 192 39.031-0.125 75 0.438 109 1.406C209.656 562.438 192 493.688 192 416 192 392.688 194.062 370.562 197 349.062zM261.312 346.062C258.125 368.312 256 391.625 256 416c0 79.5 18.438 149.5 46.906 196.219 155.156 8.312 251.906 28.469 319.031 50.188C593.625 595.531 576 510.344 576 416c0-40 3.875-78 9.5-114.312C513.344 320.375 412.812 337.406 261.312 346.062zM832 128c-12.125 0-23.688 5.062-34.812 12.125-15.25 67.312-83.438 418.344 117.438 494.188C942.125 581.5 960 503.812 960 416 960 257 902.625 128 832 128z" horiz-adv-x="1024" />
+<glyph glyph-name="mention" unicode="" d="M466.697 732.899C238.66 760.898 31.1 598.735 3.102 370.698c-28-228.038 134.163-435.598 362.2-463.597 71.429-8.756 145.115 0.913 213.325 29.946l-0.016 0.032c24.404 10.357 35.788 38.538 25.431 62.939-10.359 24.403-38.538 35.787-62.94 25.43l-0.001 0.004c-52.472-22.339-109.15-29.799-164.1-23.067-175.413 21.538-300.153 181.2-278.616 356.613 21.538 175.413 181.199 300.154 356.613 278.616 175.412-21.538 300.154-181.199 278.617-356.612-4.309-35.083-21.542-55.725-61.6-55.725-42.5 0-64 45.889-64 81.222V432c0 26.51-21.49 48-48 48-9.699 0-18.72-2.887-26.269-7.833-25.684 20.259-57.437 33.87-94.349 38.402-105.246 12.923-201.045-61.924-213.967-167.17C212.508 238.15200000000004 287.354 142.35400000000004 392.6 129.43200000000002c57.379-7.045 116.216 14.707 157.871 53.13 24.959-28.124 59.866-47.624 100.121-52.567 87.707-10.769 167.537 51.602 178.307 139.309C856.898 497.34 694.734 704.899 466.697 732.899zM511.285 308.30100000000004c-6.462-52.623-54.36
1-90.047-106.985-83.585-52.623 6.461-90.046 54.36-83.585 106.984 6.461 52.623 54.361 90.046 106.984 83.585C480.322 408.823 517.746 360.924 511.285 308.30100000000004z" horiz-adv-x="832" />
+<glyph glyph-name="microscope" unicode="" d="M617-64c86.312 18.75 151 100 151 192 0 58.438-26.625 110.125-67.875 145.375C702.5 288.625 704 304.125 704 320c0 104.844-49.875 197.875-128 256l64 64v64l64 64L640 832l-64-64h-64L256 512l-128-64v-128l64-64h128l64 128 96 96c55.5-33.406 96-90.438 96-160-106.062 0-192-85.938-192-192H0v-64h192c19.125-14.25 42.062-22.125 64-32v-96H128L0-192h768L640-64H617zM512 128c0 35.375 28.625 64 64 64s64-28.625 64-64c0-35.312-28.625-64-64-64S512 92.68799999999999 512 128z" horiz-adv-x="768" />
+<glyph glyph-name="milestone" unicode="" d="M704 640H0v-256h704l128 128L704 640zM448 448H320V576h128V448zM448 832H320v-128h128V832zM320-192h128V320H320V-192z" horiz-adv-x="832" />
+<glyph glyph-name="mirror" unicode="" d="M320 512L128 320l192-192V256h384v-128l192 192L704 512v-128H320V512zM512 832L0 512v-704l512 256 512-256V512L512 832zM960-64L576 128v64H448v-64L64-64V448l384 256v-256h128V704l384-256V-64z" horiz-adv-x="1024" />
+<glyph glyph-name="mortar-board" unicode="" d="M501 244l-245 76s0-96 0-160 115-96 256-96 256 32 256 96 0 160 0 160l-245-76c-7-2-15-2-23 0h1z m18 409c-4 1-9 1-13 0l-489-152c-21-7-21-36 0-43l111-35v-113c-19-11-32-32-32-55 0-12 3-23 9-32-5-9-9-20-9-32v-165c0-35 128-35 128 0v165c0 12-3 23-9 32 5 9 9 20 9 32 0 24-13 44-32 55v93l313-98c4-1 9-1 13 0l489 152c21 7 21 36 0 43l-488 153z m-6-205c-35 0-64 14-64 32s29 32 64 32 64-14 64-32-29-32-64-32z" horiz-adv-x="1024" />
+<glyph glyph-name="move-down" unicode="" d="M640 512H448V832H192v-320H0l320-384L640 512zM0-192h640V0H0V-192z" horiz-adv-x="640" />
+<glyph glyph-name="move-left" unicode="" d="M0 0h192V640H0V0zM704 448V640L320 320l384-320V192h320V448H704z" horiz-adv-x="1024" />
+<glyph glyph-name="move-right" unicode="" d="M832 640v-640h192V640H832zM320 448H0v-256h320v-192l384 320L320 640V448z" horiz-adv-x="1024" />
+<glyph glyph-name="move-up" unicode="" d="M0 128h192v-320h256V128h192L320 512 0 128zM0 832v-192h640V832H0z" horiz-adv-x="640" />
+<glyph glyph-name="mute" unicode="" d="M128 448H0v-256h128l256-192h64V640h-64L128 448zM864 416l-64 64-96-96-96 96-63-63.5 95-96.5-96-96 64-64 96 96 96-96 64 64-96 96L864 416z" horiz-adv-x="896" />
+<glyph glyph-name="no-newline" unicode="" d="M896 512v-128H768V512L576 320l192-192V256h192c0 0 64 0.375 64 64s0 192 0 192H896zM224 544C100.281 544 0 443.719 0 320c0-123.75 100.281-224 224-224s224 100.25 224 224C448 443.719 347.719 544 224 544zM96 320c0 70.656 57.344 128 128 128 18.75 0 36.406-4.219 52.469-11.531L107.531 267.5C100.219 283.625 96 301.25 96 320zM224 192c-18.75 0-36.406 4.25-52.469 11.5l168.938 168.969C347.781 356.406 352 338.75 352 320 352 249.375 294.656 192 224 192z" horiz-adv-x="1024" />
+<glyph glyph-name="octoface" unicode="" d="M940.812 554.312c8.25 20.219 35.375 101.75-8.562 211.906 0 0-67.375 21.312-219.875-82.906C648.5 700.875 579.875 703.5 512 703.5c-67.906 0-136.438-2.625-200.5-20.25C159.031 787.531 91.719 766.219 91.719 766.219 47.812 656 74.938 574.531 83.188 554.312 31.5 498.438 0 427.125 0 339.656 0 10.437999999999988 213.25-64 510.844-64 808.562-64 1024 10.437999999999988 1024 339.656 1024 427.125 992.5 498.438 940.812 554.312zM512-1c-211.406 0-382.781 9.875-382.781 214.688 0 48.938 24.062 94.595 65.344 132.312 68.75 62.969 185.281 29.688 317.438 29.688 132.25 0 248.625 33.281 317.438-29.625 41.312-37.78 65.438-83.312 65.438-132.312C894.875 8.875 723.375-1 512-1zM351.156 319.562c-42.469 0-76.906-51.062-76.906-114.188s34.438-114.312 76.906-114.312c42.375 0 76.812 51.188 76.812 114.312S393.531 319.562 351.156 319.562zM672.875 319.562C630.5 319.562 596 268.5 596 205.375s34.5-114.312 76.875-114.312 76.812 51.188 76.812 114.312C749.75 268.5 715.312 31
9.562 672.875 319.562z" horiz-adv-x="1024" />
+<glyph glyph-name="organization" unicode="" d="M768 448h-64H576h-64-64-64-64H192h-64C57.344 448 0 390.656 0 320v-64c0-47.25 25.844-88.062 64-110.25V-64h256v-128h256V-64h256V145.75c38.125 22.188 64 62.938 64 110.25v64C896 390.656 838.625 448 768 448zM256 0H128V256H64v64c0 35.312 28.688 64 64 64h81.719c-11-18.875-17.719-40.562-17.719-64v-128c0-47.25 25.844-88.062 64-110.25V0zM576 128V256h-64v-384H384V256h-64v-128c-35.312 0-64 28.625-64 64V320c0 35.312 28.688 64 64 64h256c35.375 0 64-28.688 64-64v-128C640 156.625 611.375 128 576 128zM832 256h-64v-256H640v81.75c38.125 22.188 64 62.938 64 110.25V320c0 23.438-6.75 45.125-17.75 64H768c35.375 0 64-28.688 64-64V256zM303.688 514.625C338.875 474.125 390.156 448 448 448c57.875 0 109.125 26.125 144.312 66.625C614.125 475.062 655.688 448 704 448c70.625 0 128 57.344 128 128s-57.375 128-128 128c-25.625 0-49.375-7.688-69.375-20.688C614.875 768.438 539.062 832 448 832S281.094 768.438 261.375 683.312C241.344 696.312 217.594 704 192 704c-70.656
0-128-57.344-128-128s57.344-128 128-128C240.312 448 281.844 475.062 303.688 514.625zM704 640c35.375 0 64-28.594 64-64s-28.625-64-64-64c-35.312 0-64 28.594-64 64S668.688 640 704 640zM448 768c70.625 0 128-57.344 128-128s-57.375-128-128-128c-70.656 0-128 57.344-128 128S377.344 768 448 768zM192 512c-35.312 0-64 28.594-64 64s28.688 64 64 64c35.406 0 64-28.594 64-64S227.406 512 192 512z" horiz-adv-x="896" />
+<glyph glyph-name="package" unicode="" d="M480 768L0 640v-576l480-128 480 128V640L480 768zM63.875 111.06600000000003L63.5 544l384.498-102.533 0.001-432.833L63.875 111.06600000000003zM63.5 608l160.254 42.734L640 539.735v-0.135l-160-42.667L63.5 608zM896.125 111.06600000000003L512.001 8.634000000000015l0.001 432.833L640 475.6v-156l128 34.135V509.733L896.5 544 896.125 111.06600000000003zM768 573.733v0.125L351.734 684.862 480 719.066 896.5 608 768 573.733z" horiz-adv-x="1024" />
+<glyph glyph-name="paintcan" unicode="" d="M384 832C171.923 832 0 660.077 0 448v-64c0-35.346 28.654-64 64-64v-320c0-70.692 143.269-128 320-128s320 57.308 320 128V320c35.346 0 64 28.654 64 64v64C768 660.077 596.077 832 384 832zM576 192v-32c0-17.673-14.327-32-32-32s-32 14.327-32 32v32c0 17.673-14.327 32-32 32s-32-14.327-32-32v-160c0-17.673-14.327-32-32-32s-32 14.327-32 32V160c0 17.673-14.327 32-32 32s-32-14.327-32-32v-32c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c-35.346 0-64 28.654-64 64V371.193C186.382 340.108 279.318 320 384 320s197.618 20.108 256 51.193V256C640 220.654 611.346 192 576 192zM384 384c-107.433 0-199.393 26.474-237.372 64 37.979 37.526 129.939 64 237.372 64s199.393-26.474 237.372-64C583.393 410.474 491.433 384 384 384zM384 576c-176.62 0-319.816-57.236-319.996-127.867-0.001 0.001-0.002 0.001-0.003 0.002C64.075 624.804 207.314 768 384 768c176.731 0 320-143.269 320-320C704 518.692 560.731 576 384 576z" horiz-adv-x="768" />
+<glyph glyph-name="pencil" unicode="" d="M704 768L576 640l192-192 128 128L704 768zM0 64l0.688-192.562L192-128l512 512L512 576 0 64zM192-64H64V64h64v-64h64V-64z" horiz-adv-x="896" />
+<glyph glyph-name="person" unicode="" d="M448 640C448 746 362.062 832 256 832S64 746 64 640c0-106.062 85.938-192 192-192S448 533.938 448 640zM256 512c-70.656 0-128 57.344-128 128S185.344 768 256 768c70.625 0 128-57.344 128-128S326.625 512 256 512zM384 448H256 128C57.344 448 0 390.656 0 320v-128c0-70.625 57.344-128 128-128v-256h256V64c70.625 0 128 57.375 128 128V320C512 390.656 454.625 448 384 448zM448 192c0-35.375-28.625-64-64-64V256h-64v-384H192V256h-64v-128c-35.312 0-64 28.625-64 64V320c0 35.312 28.688 64 64 64h256c35.375 0 64-28.688 64-64V192z" horiz-adv-x="512" />
+<glyph glyph-name="pin" unicode="" d="M196 128l64-320 64 320c-20-2-43-3-64-3s-44 1-64 3z m254 299c-33 17-62 59-62 85v64c0 22 12 39 23 52 15 13 24 29 24 45 0 53-61 95-175 95s-175-42-175-95c0-16 9-32 24-45 11-13 23-30 23-52v-64c0-26-29-68-62-85-38-19-70-54-70-88 0-74 101-148 260-148s260 73 260 148c0 33-31 68-70 88z" horiz-adv-x="519.657" />
+<glyph glyph-name="playback-fast-forward" unicode="" d="M0 64l384 256L0 576V64zM768 320L384 576v-256-256L768 320z" horiz-adv-x="768" />
+<glyph glyph-name="playback-pause" unicode="" d="M0 0h192V640H0V0zM320 640v-640h192V640H320z" horiz-adv-x="512" />
+<glyph glyph-name="playback-play" unicode="" d="M0 640l512-320L0 0V640z" horiz-adv-x="512" />
+<glyph glyph-name="playback-rewind" unicode="" d="M384 320l384-256V576L384 320zM0 320l384-256V320 576L0 320z" horiz-adv-x="768" />
+<glyph glyph-name="plug" unicode="" d="M1003.386 627.336l-0.905 0.905c-24.744 24.744-64.861 24.744-89.605 0l-45.707-45.707-90.51 90.51 45.707 45.707c24.744 24.744 24.744 64.861 0 89.605l-0.905 0.905c-24.744 24.744-64.861 24.744-89.605 0l-47.973-47.973C621.76 802.446 537.237 795.66 482.502 740.926l-24.89-24.89c-109.011-109.011-121.948-277.692-38.854-400.892l-4.138-4.138c-62.392-62.392-62.484-163.493-0.275-225.999 12.41-12.469 12.642-33.327 0.121-45.683-12.509-12.343-32.655-12.292-45.101 0.153l-89.427 89.427c-62.637 62.638-164.63 63.747-227.299 1.141-62.542-62.479-62.562-163.829-0.058-226.332l8.763-8.763c24.744-24.744 64.861-24.744 89.605 0l0.905 0.905c24.744 24.744 24.744 64.861 0 89.605l-8.292 8.292c-12.329 12.329-13.085 32.418-1.098 45.081 12.437 13.138 33.174 13.353 45.882 0.645l89.328-89.328c62.92-62.92 165.504-63.814 228.081-0.553 61.793 62.468 61.65 163.161-0.431 225.451-12.55 12.592-12.777 32.866-0.207 45.437l4.151 4.151c123.2-83.095 291.881-70.158 400.892 38.854l24.89
24.89c54.734 54.735 61.52 139.258 20.362 201.382l47.973 47.973C1028.129 562.475 1028.129 602.593 1003.386 627.336zM889.796 333.632c-37.49-37.49-98.274-37.49-135.765 0L527.757 559.906c-37.49 37.49-37.49 98.274 0 135.765 29.556 29.556 73.585 35.804 109.269 18.759l-41.839-41.839c-24.744-24.744-24.744-64.861 0-89.604l0.905-0.905c24.744-24.744 64.861-24.744 89.605 0l45.707 45.707 90.51-90.51-45.707-45.707c-24.744-24.744-24.744-64.861 0-89.605l0.905-0.905c24.744-24.744 64.861-24.744 89.604 0l41.839 41.839C925.6 407.218 919.351 363.188 889.796 333.632z" horiz-adv-x="1024" />
+<glyph glyph-name="plus" unicode="" d="M384 384V640H256v-256H0v-128h256v-256h128V256h256V384H384z" horiz-adv-x="640" />
+<glyph glyph-name="podium" unicode="" d="M320 832c-32 0-64-32-64-64s0-64 0-64h-64l-192-192v-128h192l64-384-128-64v-64h512v64l-128 64 64 384h192v128l-192 192h-256v64s14 0 32 0 32 17 32 32-16 32-32 32 0 0-32 0z m0-832l-53 320h118l-1-320h-64z m-224 512l128 128h32v-64h64v64h224l128-128h-576z" horiz-adv-x="768" />
+<glyph glyph-name="primitive-dot" unicode="" d="M-0.088 320c0 141.5 114.5 256 256 256 141.438 0 256-114.5 256-256s-114.562-256-256-256C114.413 64-0.088 178.5-0.088 320z" horiz-adv-x="511.825" />
+<glyph glyph-name="primitive-square" unicode="" d="M512 64H0V576h512V64z" horiz-adv-x="512" />
+<glyph glyph-name="pulse" unicode="" d="M736 320.062L563.188 486.406 422.406 288 352 729.594 152.438 320.062H0V192h230.406L288 307.188l57.594-345.562L576 288l102.375-96H896V320.062H736z" horiz-adv-x="896" />
+<glyph glyph-name="puzzle" unicode="" d="M755.75 256.85c-13.95 9.96-28.52 16.59-43.47 19.92-8.84 1.69-18.06 2.33-27.57 1.81-8.99-0.5-17.56-1.68-25.69-3.52-6.1-1.69-12.22-3.89-18.35-6.59-18.18-8.02-33.89-18.12-46.79-30.33-12.22-12.9-22.32-28.62-30.34-46.79-2.7-6.12-4.9-12.24-6.59-18.34-1.84-8.14-3.03-16.7-3.52-25.69-0.52-9.51 0.12-18.73 1.81-27.57 3.33-14.95 9.96-29.52 19.92-43.47 3.89-5.44 8.08-10.4 12.56-14.88 20.06-20.03 45.83-30.7 75.42-34.11 8.92-1.02 18.12-1.68 26.53-4.48 5.12-1.7 9.16-4.08 12.08-7.02 6.65-6.6 7.63-16.1 2.5-27.24-3.15-6.84-7.7-13.45-12.96-18.84l-2.79-2.86c-3.93-3.92-6.41-6.4-7.05-7.04-3.13-3.16-6.1-6.15-9.06-9.15l-2.96-2.92c-10.52-10.58-21.09-21.12-31.66-31.65-22.76-22.82-45.57-45.58-68.38-68.36-7.5-7.5-15-15-22.5-22.49-3.46-3.45-7.07-6.38-10.78-8.79-1.8-1.22-3.49-2.24-5.18-3.16-19.6-9.89-41.43-5.92-59.24 11.88-5.4 5.4-10.62 10.62-15.85 15.84-30.25 30.25-60.48 60.52-90.77 90.73-8.59 8.57-17.13 17.08-25.68 25.59-6.12 6.09-12.67 11.85-19.56 17.06-5.72 4.3
3-11.59 7.56-17.46 9.73-21.16 7.32-41.41 2.01-54.67-13.26-3.81-4.8-7-10.47-9.39-16.94-3.43-9.26-4.6-19.47-5.9-29.36-4.9-37.53-25.8-68.43-55.98-82.65-7.48-3.65-15.49-6.29-23.9-7.78-7.95-1.41-15.95-1.71-23.85-1.04-26.61 1.35-49.48 13.09-68.51 32.57-1.68 1.67-2.1 2.09-2.51 2.51-19.48 19.02-31.22 41.9-32.57 68.5-0.68 7.9-0.37 15.9 1.04 23.85 1.49 8.41 4.13 16.43 7.78 23.9 14.22 30.18 45.13 51.07 82.65 55.97 9.89 1.29 20.1 2.47 29.36 5.9 6.94 2.56 12.96 6.05 17.97 10.23 14.54 13.15 19.59 32.63 12.84 52.34-2.78 7.35-6 13.22-10.33 18.94-5.21 6.88-10.97 13.43-17.06 19.55-8.51 8.55-17.03 17.09-25.55 25.63-26.92 26.98-53.84 53.88-80.75 80.78l-10.03 10.03c-5.22 5.22-10.45 10.45-15.26 15.27-18.39 18.4-22.35 40.22-12.46 59.82 0.92 1.69 1.94 3.37 3.08 5.05 2.49 3.84 5.42 7.45 8.87 10.91 7.49 7.5 14.99 15 22.49 22.5 22.77 22.81 45.54 45.62 68.36 68.38 10.53 10.57 21.06 21.14 31.65 31.66l2.92 2.96c2.99 2.97 5.99 5.93 8.98 8.9 0.8 0.81 3.28 3.29 7.2 7.22l2.86 2.79c5.39 5.26 12 9.8 18.84 12.96 11.14
5.13 20.63 4.15 27.24-2.5 2.94-2.92 5.32-6.96 7.02-12.08 2.79-8.41 3.45-17.61 4.48-26.53 3.41-29.59 14.08-55.35 34.11-75.41 4.49-4.48 9.44-8.67 14.88-12.56 13.95-9.96 28.52-16.59 43.47-19.92 8.84-1.69 18.06-2.33 27.57-1.81 8.99 0.5 17.56 1.68 25.69 3.52 6.1 1.69 12.22 3.89 18.35 6.59 18.18 8.02 33.89 18.12 46.79 30.33 12.22 12.9 22.32 28.62 30.34 46.79 2.7 6.12 4.9 12.24 6.59 18.34 1.84 8.14 3.03 16.7 3.52 25.69 0.52 9.51-0.12 18.73-1.81 27.57-3.33 14.95-9.96 29.52-19.92 43.47-3.89 5.44-8.08 10.4-12.56 14.88-20.06 20.03-45.83 30.7-75.42 34.11-8.92 1.02-18.12 1.68-26.53 4.48-5.12 1.7-9.16 4.08-12.08 7.02-6.65 6.6-7.63 16.1-2.5 27.24 3.15 6.84 7.7 13.45 12.96 18.84l2.79 2.86c3.93 3.92 6.41 6.4 7.05 7.04 3.13 3.16 6.1 6.15 9.06 9.15l2.96 2.92c10.52 10.58 21.09 21.12 31.66 31.65 22.76 22.82 45.57 45.58 68.38 68.35 7.5 7.5 15 15 22.5 22.49 3.46 3.45 7.07 6.38 10.78 8.79 1.8 1.22 3.49 2.24 5.18 3.16 19.6 9.89 41.43 5.92 59.24-11.88 5.4-5.4 10.62-10.62 15.85-15.84 30.25-30.25 60.48-60.52 9
0.77-90.73 8.59-8.57 17.13-17.08 25.68-25.59 6.12-6.09 12.67-11.85 19.56-17.06 5.72-4.33 11.59-7.56 17.46-9.73 21.16-7.32 41.41-2.01 54.67 13.26 3.81 4.8 7 10.47 9.39 16.94 3.43 9.26 4.6 19.47 5.9 29.36 4.9 37.53 25.8 68.43 55.98 82.65 7.48 3.65 15.49 6.28 23.9 7.78 7.95 1.41 15.95 1.71 23.85 1.04 26.61-1.35 49.48-13.09 68.51-32.57 1.68-1.67 2.1-2.09 2.51-2.51 19.48-19.02 31.22-41.9 32.57-68.5 0.68-7.9 0.37-15.9-1.04-23.85-1.49-8.41-4.13-16.43-7.78-23.9-14.22-30.18-45.13-51.07-82.65-55.97-9.89-1.29-20.1-2.47-29.36-5.9-6.94-2.56-12.96-6.05-17.97-10.23-14.54-13.15-19.59-32.63-12.84-52.34 2.78-7.35 6-13.22 10.33-18.94 5.21-6.88 10.97-13.43 17.06-19.55 8.51-8.55 17.03-17.09 25.55-25.63 30.26-30.33 60.54-60.56 90.78-90.81 5.22-5.22 10.45-10.45 15.26-15.27 18.39-18.4 22.35-40.22 12.46-59.82-0.92-1.69-1.94-3.37-3.08-5.05-2.49-3.84-5.42-7.45-8.87-10.91-7.49-7.5-14.99-15-22.49-22.5-22.77-22.81-45.54-45.62-68.36-68.38-10.53-10.57-21.06-21.14-31.65-31.66l-2.92-2.96c-2.99-2.97-5.99-5.93-8.98-8.
9-0.8-0.81-3.28-3.29-7.2-7.22l-2.86-2.79c-5.39-5.26-12-9.8-18.84-12.96-11.14-5.13-20.63-4.15-27.24 2.5-2.94 2.92-5.32 6.96-7.02 12.08-2.79 8.41-3.45 17.61-4.48 26.53-3.41 29.59-14.08 55.35-34.11 75.41C766.15 248.76999999999998 761.19 252.97000000000003 755.75 256.85z" horiz-adv-x="1024" />
+<glyph glyph-name="question" unicode="" d="M448 64h128v128h-128v-128z m64 512c-96 0-192-96-192-192h128c0 32 32 64 64 64s64-32 64-64c0-64-128-64-128-128h128c64 22 128 64 128 160s-96 160-192 160z m0 256c-283 0-512-229-512-512s229-512 512-512 512 229 512 512-229 512-512 512z m0-896c-212 0-384 172-384 384s172 384 384 384 384-172 384-384-172-384-384-384z" horiz-adv-x="1024" />
+<glyph glyph-name="quote" unicode="" d="M0 320v-256h256V320H128c0 0 0 128 128 128V576C256 576 0 576 0 320zM640 448V576c0 0-256 0-256-256v-256h256V320H512C512 320 512 448 640 448z" horiz-adv-x="640" />
+<glyph glyph-name="radio-tower" unicode="" d="M306.838 441.261c15.868 16.306 15.868 42.731 0 59.037-20.521 21.116-30.643 48.417-30.705 76.124 0.062 27.77 10.183 55.039 30.705 76.186 15.868 16.337 15.868 42.764 0 59.069-7.934 8.184-18.272 12.275-28.706 12.275-10.371 0-20.804-4.029-28.738-12.213-36.266-37.297-54.633-86.433-54.57-135.317-0.062-48.792 18.305-97.927 54.57-135.161C265.262 424.955 290.97 424.955 306.838 441.261zM149.093 798.858c-8.121 8.309-18.68 12.463-29.3 12.463-10.558 0-21.179-4.154-29.237-12.463C30.8 737.509 0.751 656.856 0.813 576.422 0.751 496.081 30.8 415.272 90.494 353.985c16.181-16.618 42.356-16.618 58.537 0 16.118 16.587 16.118 43.513 0 60.067-43.7 44.98-65.44 103.456-65.44 162.368s21.74 117.449 65.44 162.368C165.149 755.439 165.149 782.365 149.093 798.858zM513.031 472.153c57.351 0 103.956 46.574 103.956 103.956 0 57.382-46.605 103.955-103.956 103.955-57.381 0-103.956-46.573-103.956-103.955C409.076 518.727 455.65 472.153 513.031 472.153zM933.539 798.233c
-16.181 16.618-42.355 16.618-58.475 0-16.181-16.587-16.181-43.513 0-60.068 43.668-44.918 65.409-103.456 65.409-162.368 0-58.85-21.805-117.387-65.473-162.306-16.117-16.618-16.117-43.575 0.062-60.068 8.059-8.309 18.616-12.463 29.237-12.463 10.558 0 21.178 4.154 29.236 12.463 59.726 61.287 89.774 142.096 89.649 222.437C1023.313 656.138 993.264 736.947 933.539 798.233zM513.281 389.127L513.281 389.127c-26.489-0.062-53.04 6.466-77.091 19.429L235.057-127.59000000000003h95.209l54.819 63.973h255.891l53.977-63.973h95.272L589.124 408.431C565.384 395.655 539.395 389.127 513.281 389.127zM512.656 358.483L577.004 128.29999999999995H449.059L512.656 358.483zM385.086 0.3550000000000182l63.974 63.973h127.944l63.974-63.973H385.086zM717.194 710.958c-15.868-16.306-15.868-42.731 0-59.037 20.491-21.116 30.611-48.511 30.674-76.124-0.062-27.77-10.183-55.102-30.674-76.187-15.868-16.336-15.868-42.763 0-59.068 7.871-8.184 18.242-12.213 28.737-12.213 10.309 0 20.741 4.029 28.675 12.213 36.298 37.234 54.665 86.43
3 54.54 135.255 0.125 48.792-18.181 97.927-54.54 135.161C758.801 727.264 733.062 727.264 717.194 710.958z" horiz-adv-x="1024" />
+<glyph glyph-name="repo" unicode="" d="M320 576h-64v-64h64v64z m0 128h-64v-64h64v64z m384 128c-32 0-608 0-640 0s-64-32-64-64 0-736 0-768 32-64 64-64 128 0 128 0v-128l96 96 96-96v128s288 0 320 0 64 32 64 64 0 736 0 768-32 64-64 64z m0-800c0-16-15-32-32-32s-288 0-288 0v64h-192v-64s-79 0-96 0-32 17-32 32 0 96 0 96h640s0-80 0-96z m0 160h-512v576h513l-1-576z m-384 128h-64v-64h64v64z m0 128h-64v-64h64v64z" horiz-adv-x="768" />
+<glyph glyph-name="repo-clone" unicode="" d="M320 448h-64v-64h64v64z m-128 320h256v64s-352 0-384 0-64-32-64-64 0-736 0-768 32-64 64-64 128 0 128 0v-128l96 96 96-96v128s286 0 320 0 64 32 64 64 0 192 0 192h-576v576z m512-640s0-79 0-96-14-32-32-32-288 0-288 0v64h-192v-64s-80 0-96 0-32 16-32 32 0 96 0 96h640z m-384 448h-64v-64h64v64z m-64-320h64v64h-64v-64z m704 576c-32 0-288 0-320 0s-64-32-64-64 0-352 0-384 32-64 64-64 64 0 64 0v-64l32 32 32-32v64s160 0 192 0 64 32 64 64 0 352 0 384-32 64-64 64z m-256-448s-15 0-32 0-32 15-32 32 0 32 0 32h64v-64z m256 32c0-16-15-32-32-32s-160 0-160 0v64h192s0-16 0-32z m0 96h-256v256h224s32 0 32-32 0-224 0-224z m-640 192h-64v-64h64v64z" horiz-adv-x="1024" />
+<glyph glyph-name="repo-force-push" unicode="" d="M768 768c0 32-32 64-64 64s-608 0-640 0-64-32-64-64 0-768 0-768 0 32 0 0 32-64 64-64 128 0 128 0v-128l128 128v128h-128v-64s-79 0-96 0-32 15-32 32 0 96 0 96h256v64h-128v576h512v-576h-128v-64h128s0-80 0-96-15-32-32-32-96 0-96 0v-64s96 0 128 0 64 32 64 64 0 736 0 768z m-272-320h144l-192 256-192-256h144l-144-192h128v-448h128v448h128l-144 192z" horiz-adv-x="767.896" />
+<glyph glyph-name="repo-forked" unicode="" d="M768 704c0 71-57 128-128 128s-128-57-128-128c0-47 26-89 64-111v-106l-192-212-192 212v106c38 22 64 63 64 111 0 71-57 128-128 128s-128-57-128-128c0-47 26-89 64-111v-156l256-282v-109c-38-22-64-63-64-111 0-71 57-128 128-128s128 57 128 128c0 47-26 89-64 111v109l256 282v156c38 22 64 63 64 111z m-640 63c34 0 62-28 62-62s-28-62-62-62-62 28-62 62 28 62 62 62z m256-891c-34 0-62 28-62 62s28 62 62 62 62-28 62-62-28-62-62-62z m256 891c34 0 62-28 62-62s-28-62-62-62-62 28-62 62 28 62 62 62z" horiz-adv-x="768" />
+<glyph glyph-name="repo-pull" unicode="" d="M1024 512l-192 192v-128h-384v-128h384v-128l192 192z m-320-320h-512v576h512v-128h64s0 96 0 128-32 64-64 64-608 0-640 0-64-32-64-64 0-736 0-768 32-64 64-64 128 0 128 0v-128l96 96 96-96v128s288 0 320 0 64 32 64 64 0 384 0 384h-64v-192z m0-160c0-15-15-32-32-32s-288 0-288 0v64h-192v-64s-79 0-96 0-32 16-32 32 0 96 0 96h640s0-81 0-96z m-384 544h-64v-64h64v64z m0 128h-64v-64h64v64z m0-256h-64v-64h64v64z m-64-192h64v64h-64v-64z" horiz-adv-x="1024" />
+<glyph glyph-name="repo-push" unicode="" d="M448 512l-192-256h128v-448h128v448h128l-192 256z m-192 0h64v64h-64v-64z m64 192h-64v-64h64v64z m384 128c-32 0-608 0-640 0s-64-32-64-64 0-736 0-768 32-64 64-64 128 0 128 0v-128l128 128v128h-128v-64s-79 0-96 0-32 14-32 32 0 96 0 96h256v64h-128v576h513l-1-576h-128v-64h128s0-79 0-96-15-32-32-32-96 0-96 0v-64s96 0 128 0 64 32 64 64 0 736 0 768-32 64-64 64z" horiz-adv-x="768" />
+<glyph glyph-name="rocket" unicode="" d="M716.737 707.944c-71.926-41.686-148.041-96.13-218.436-166.555-45-45.031-81.213-88.78-110.39-129.778L209.538 378.65 0.047 169.00300000000004l186.818-5.815 131.562 131.562c-46.439-96.224-50.536-160.019-50.536-160.019l58.854-58.792c0 0 65.827 6.255 162.737 53.163L355.107-5.119000000000028l5.88-186.881 209.585 209.521 33.086 179.252c41.403 29.02 85.185 65.046 129.716 109.545 70.425 70.455 124.837 146.541 166.555 218.466-45.97 9.351-88.125 28.488-121.397 61.668C745.257 619.819 725.994 661.975 716.737 707.944zM786.161 745.157c5.004-45 19.952-81.274 44.78-105.98 24.769-24.985 60.98-39.902 106.138-44.844C1003.063 727.677 1023.953 832 1023.953 832S919.63 811.142 786.161 745.157z" horiz-adv-x="1024" />
+<glyph glyph-name="rss" unicode="" d="M128 192C57.344 192 0 134.625 0 64s57.344-128 128-128 128 57.375 128 128S198.656 192 128 192zM128 448c0 0-64-2-64-64s64-64 64-64c141.375 0 256-114.625 256-256 0 0 0-64 64-64s64 64 64 64C512 276 340.031 448 128 448zM128 704c0 0-64 0-64-64s64-64 64-64c282.75 0 512-229.25 512-512 0 0 0-64 64-64s64 64 64 64C768 417.406 481.5 704 128 704z" horiz-adv-x="768" />
+<glyph glyph-name="ruby" unicode="" d="M768 704H256L0 448l512-512 512 512L768 704zM128 448l192 192h384l192-192L512 64 128 448zM704 576H512v-448l320 320L704 576z" horiz-adv-x="1024" />
+<glyph glyph-name="screen-full" unicode="" d="M128 64h639.875V576H128V64zM255.938 448h384v-256h-384V448zM64 639.938h191.938v64H0V448h64V639.938zM64 192H0v-255.938h255.938V0H64V192zM639.938 703.938v-64h191.938V448h64V703.938H639.938zM831.875 0H639.938v-63.938h255.938V192h-64V0z" horiz-adv-x="895.875" />
+<glyph glyph-name="screen-normal" unicode="" d="M127.938 640.062H0v-64h191.938V768h-64V640.062zM0-0.06200000000001182h127.938V-128h64V63.93799999999999H0V-0.06200000000001182zM768.062 640.062V768h-64v-191.938H896v64H768.062zM704.062-128h64V-0.06200000000001182H896v64H704.062V-128zM192.062 128H704V512H192.062V128zM320 384h256v-128H320V384z" horiz-adv-x="896" />
+<glyph glyph-name="search" unicode="" d="M960 0L710.875 249.125C746.438 307.188 768 374.844 768 448 768 660.031 596 832 384 832 171.969 832 0 660.031 0 448c0-212 171.969-384 384-384 73.156 0 140.812 21.562 198.875 57L832-128c17.5-17.5 46.5-17.375 64 0l64 64C977.5-46.5 977.5-17.5 960 0zM384 192c-141.375 0-256 114.625-256 256s114.625 256 256 256 256-114.625 256-256S525.375 192 384 192z" horiz-adv-x="973.125" />
+<glyph glyph-name="server" unicode="" d="M704 448h-640c-35 0-64-32-64-64v-128c0-32 32-64 64-64h640c32 0 64 32 64 64v128c0 32-32 64-64 64z m-576-192h-64v128h64v-128z m128 0h-64v128h64v-128z m128 0h-64v128h64v-128z m128 0h-64v128h64v-128z m192-128h-640c-35 0-64-32-64-64v-128c0-32 32-64 64-64h640c32 0 64 32 64 64v128c0 32-32 64-64 64z m-576-192h-64v128h64v-128z m128 0h-64v128h64v-128z m128 0h-64v128h64v-128z m128 0h-64v128h64v-128z m192 832h-640c-35 0-64-32-64-64v-128c0-32 32-64 64-64h640c32 0 64 32 64 64v128c0 32-32 64-64 64z m-576-192h-64v128h64v-128z m128 0h-64v128h64v-128z m128 0h-64v128h64v-128z m128 0h-64v128h64v-128z m192 64h-64v64h64v-64z" horiz-adv-x="768" />
+<glyph glyph-name="settings" unicode="" d="M64-64h128V128H64V-64zM192 704H64v-320h128V704zM512 704H384v-128h128V704zM0 192h256V320H0V192zM384-64h128V320H384V-64zM320 384h256V512H320V384zM832 704H704v-384h128V704zM640 256v-128h256V256H640zM704-64h128V64H704V-64z" horiz-adv-x="896" />
+<glyph glyph-name="sign-in" unicode="" d="M640 256L640 384 896 384 896 512 640 512 640 640 448 496 448 640 192 768 704 768 704 576 768 576 768 832 64 832 64 0 448-192 448 0 768 0 768 320 704 320 704 64 448 64 448 400z" horiz-adv-x="896" />
+<glyph glyph-name="sign-out" unicode="" d="M640 64H384V640L128 768h512v-192h64V832H0v-832l384-192V0h320V320h-64V64zM1024 448L768 640v-128H512v-128h256v-128L1024 448z" horiz-adv-x="1024" />
+<glyph glyph-name="split" unicode="" d="M448 576l-256 256-192-192 311-300c15 81 43 136 133 230l5 6z m128 256l133-133-197-197c-99-99-128-162-128-309v-384h256v384c0 52 19 94 53 128l197 197 133-133v448h-448z" horiz-adv-x="1024" />
+<glyph glyph-name="squirrel" unicode="" d="M768 768c-141.385 0-256-83.75-256-186.875C512 457.25 544 387 512 192c0 288-177 405.783-256 405.783 3.266 32.17-30.955 42.217-30.955 42.217s-14-7.124-19.354-21.583c-17.231 20.053-36.154 17.54-36.154 17.54l-8.491-37.081c0 0-117.045-40.876-118.635-206.292C56 371 141.311 353.898 201.887 364.882c57.157-2.956 42.991-50.648 30.193-63.446C178.083 247.438 128 320 64 320s-64-64 0-64 64-64 192-64c-198-77 0-256 0-256h-64c-64 0-64-64-64-64s256 0 384 0c192 0 320 64 320 222.182 0 54.34-27.699 114.629-64 162.228C697.057 349.433 782.453 427.566 832 384s192-64 192 128C1024 653.385 909.385 768 768 768zM160 448c-17.674 0-32 14.327-32 32 0 17.674 14.326 32 32 32 17.673 0 32-14.326 32-32C192 462.327 177.673 448 160 448z" horiz-adv-x="1024" />
+<glyph glyph-name="star" unicode="" d="M896 448l-313.5 40.781L448 768 313.469 488.781 0 448l230.469-208.875L171-63.93799999999999l277 148.812 277.062-148.812L665.5 239.125 896 448z" horiz-adv-x="896" />
+<glyph glyph-name="steps" unicode="" d="M136 768C60.89 768 0 667.71 0 544c0-68.83 17.02-141.84 34-254.54C47.3 201.16999999999996 79.67 128 136 128s94.08 48.79 94.08 137.97c0 30.37-24.97 78.75-26.08 120.03-2.02 74.46 49.93 104.17 49.93 173C253.93 682.71 211.1 768 136 768zM502.97 512c-75.1 0-117.93-85.29-117.93-209 0-68.83 51.95-98.54 49.93-173-1.109-41.28-26.08-89.66-26.08-120.03 0-89.18 37.75-137.97 94.08-137.97s88.7 73.17 102 161.46c16.98 112.7 34 185.71 34 254.54C638.97 411.71 578.08 512 502.97 512z" horiz-adv-x="640" />
+<glyph glyph-name="stop" unicode="" d="M704 832H320L0 512v-384l320-320h384l320 320V512L704 832zM896 192L640-64H384L128 192V448l256 256h256l256-256V192zM448 256h128V576H448V256zM448 64h128V192H448V64z" horiz-adv-x="1024" />
+<glyph glyph-name="sync" unicode="" d="M655.461 358.531c11.875-81.719-13.062-167.781-76.812-230.594-94.188-92.938-239.5-104.375-346.375-34.562l74.875 73L31.96 204.75 70.367-64l84.031 80.5c150.907-111.25 364.938-100.75 502.063 34.562 79.5 78.438 115.75 182.562 111.25 285.312L655.461 358.531zM189.46 511.938c94.156 92.938 239.438 104.438 346.313 34.562l-75-72.969 275.188-38.406L697.586 704l-83.938-80.688C462.711 734.656 248.742 724.031 111.585 588.75 32.085 510.344-4.133 406.219 0.335 303.5l112.25-22.125C100.71 363.125 125.71 449.094 189.46 511.938z" horiz-adv-x="768.051" />
+<glyph glyph-name="tag" unicode="" d="M384 768H128L0 640v-256l512-512 384 384L384 768zM64 416V608l96 96h192l448-448L512-32 64 416zM448 512L256 320l256-256 192 192L448 512zM352 320l96 96 160-160-96-96L352 320zM320 544c0 53-43 96-96 96s-96-43-96-96 43-96 96-96S320 491 320 544zM224 512c-17.656 0-32 14.344-32 32s14.344 32 32 32 32-14.344 32-32S241.656 512 224 512z" horiz-adv-x="896" />
+<glyph glyph-name="telescope" unicode="" d="M76 409c32 8 229 59 229 59-1-6-2-19-2-19 0-71 49-128 128-128s128 59 128 128c0 11-8 22-19 32l49-3s7 2 31 8c-51-14-108 31-126 99s8 135 60 149c-24-6-31-8-31-8l-168-110c-34-9-55-46-46-80 2-9 7-17 12-23-7-12-12-26-15-40-27 1-51 19-59 46-9 34 11 69 45 78l-245-65c-34-9-54-43-45-77s41-54 73-46z m419-153h-128v-64l-320-320h128l192 128v-128h128v128l192-128h128l-320 320v64z m429 448c-18 68-70 110-122 96-69-18-98-28-186-51-51-14-79-80-61-148s74-115 125-102c87 23 117 33 186 51 51 14 76 85 58 154z m-70-90c-17-5-42 17-51 51s-4 66 13 70 42-17 51-51 4-66-13-70z" horiz-adv-x="929.875" />
+<glyph glyph-name="terminal" unicode="" d="M831 705H63c-35.35 0-64-28.65-64-64v-640c0-35.35 28.65-64 64-64h768c35.35 0 64 28.65 64 64V641C895 676.35 866.35 705 831 705zM127 257l128 128L127 513l64 64 192-192L191 193 127 257zM639 193H383v64h256V193z" horiz-adv-x="896" />
+<glyph glyph-name="three-bars" unicode="" d="M0 640v-128h768v128h-768z m0-384h768v128h-768v-128z m0-256h768v128h-768v-128z" horiz-adv-x="768" />
+<glyph glyph-name="thumbsdown" unicode="" d="M833 258c0-38-31-68-68-68h-111c-5 0-109 4-128-8-19-11-21-101-8-139 12-34 22-100-16-150-23-30-57-25-78-17-23 8-14 50-10 86 4 35-14 93-47 123s-29 58-45 86-41 52-62 86-68 41-132 39v353s93 0 114 2c31 3 72 13 112 26 41 13 128 26 140 26 89 3 174-18 208-24 34-7 60-41 54-77-2-11-6-21-12-29 6-2 11-5 16-9 22-12 36-34 36-60 0-21-9-39-24-52 4-1 8-3 12-5 27-9 47-35 47-65 0-27-16-51-40-62 2-1 4-2 6-4 15-9 26-23 31-40 2-6 3-11 3-18 0-1 0-1 0-2z" horiz-adv-x="1024" />
+<glyph glyph-name="thumbsup" unicode="" d="M833 381c0 38-31 68-68 68h-111c-5 0-109-4-128 8-19 11-21 101-8 139 12 34 22 100-16 150-23 30-57 25-78 17-23-8-14-50-10-86 4-35-14-93-47-123s-29-58-45-86-41-52-62-86-68-41-132-39v-353s93 0 114-2c31-3 72-13 112-26 41-13 128-26 140-26 89-3 174 18 208 24s60 41 54 77c-2 11-6 21-12 29 6 2 11 5 16 9 22 12 36 34 36 60 0 21-9 39-24 52 4 1 8 3 12 5 27 9 47 35 47 65 0 27-16 51-40 62 2 1 4 2 6 4 15 9 26 23 31 40 2 6 3 11 3 18 0 1 0 1 0 2z" horiz-adv-x="1024" />
+<glyph glyph-name="tools" unicode="" d="M286.547 366.984c16.843-16.812 81.716-85.279 81.716-85.279l35.968 37.093-56.373 58.248L456.072 491.98c0 0-48.842 47.623-27.468 28.655 20.438 75.903 1.812 160.589-55.842 220.243C315.608 800.064 234.392 819.47 161.425 799.096l123.653-127.715-32.53-125.309-121.06-33.438L7.898 640.3820000000001c-19.718-75.436-0.969-159.339 56.311-218.556C124.302 359.703 210.83 341.453 286.547 366.984zM698.815 242.769L549.694 95.46100000000001l245.932-254.805c20.062-20.812 46.498-31.188 72.872-31.188 26.25 0 52.624 10.375 72.811 31.188 40.249 41.624 40.249 108.997 0 150.62L698.815 242.769zM1023.681 670.162L867.06 832.001 405.387 354.703l56.373-58.248L185.425 10.839000000000055l-63.154-33.749-89.217-145.559 22.719-23.562 140.839 92.247 32.655 65.312 276.336 285.554 56.404-58.248L1023.681 670.162z" horiz-adv-x="1024" />
+<glyph glyph-name="trashcan" unicode="" d="M704 704H448c0 0 0 24.057 0 32 0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 0-32 0-32H128c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64v-576c0-35.346 28.654-64 64-64h448c35.346 0 64 28.654 64 64V512c35.346 0 64 28.654 64 64v64C768 675.346 739.346 704 704 704zM640-32c0-17.673-14.327-32-32-32H224c-17.673 0-32 14.327-32 32V512h64v-480c0-17.673 14.327-32 32-32s32 14.327 32 32l0.387 480H384v-480c0-17.673 14.327-32 32-32s32 14.327 32 32l0.387 480h64L512 32c0-17.673 14.327-32 32-32s32 14.327 32 32V512h64V-32zM704 592c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h544c8.837 0 16-7.163 16-16V592z" horiz-adv-x="768" />
+<glyph glyph-name="triangle-down" unicode="" d="M0 448l383.75-383.75L767.5 448H0z" horiz-adv-x="767.5" />
+<glyph glyph-name="triangle-left" unicode="" d="M0 320.125l383.75-383.75v767.5L0 320.125z" horiz-adv-x="383.75" />
+<glyph glyph-name="triangle-right" unicode="" d="M0.062 703.75L383.812 320 0.062-63.75V703.75z" horiz-adv-x="383.875" />
+<glyph glyph-name="triangle-up" unicode="" d="M383.75 576L0 192.25h767.5L383.75 576z" horiz-adv-x="767.5" />
+<glyph glyph-name="unfold" unicode="" d="M384 448h128V640h128L448 832 256 640h128V448zM576 576v-64h224L672 384H224L96 512h224v64H0v-63.999L160 352 0 192v-64h320v64H96l128 128h448l128-128H576v-64h320v64L736 352l160 160.001V576H576zM512 256H384v-192H256l192-192 192 192H512V256z" horiz-adv-x="896" />
+<glyph glyph-name="unmute" unicode="" d="M128 448H0v-256h128l256-192h64V640h-64L128 448zM538.51 410.51c-12.496 12.497-32.758 12.497-45.255 0-12.496-12.496-12.496-32.758 0-45.255 24.994-24.993 24.994-65.516 0-90.51-12.496-12.496-12.496-32.758 0-45.255 12.497-12.496 32.759-12.496 45.255 0C588.497 279.47900000000004 588.497 360.523 538.51 410.51zM629.02 501.019c-12.495 12.497-32.758 12.497-45.255 0-12.495-12.496-12.495-32.758 0-45.255 74.981-74.98 74.981-196.548 0-271.528-12.495-12.497-12.495-32.76 0-45.256 12.497-12.496 32.76-12.496 45.255 0C728.994 238.95399999999995 728.994 401.045 629.02 501.019zM719.529 591.529c-12.497 12.497-32.76 12.497-45.255 0-12.496-12.496-12.496-32.758 0-45.255 124.968-124.968 124.968-327.58 0-452.548-12.496-12.497-12.496-32.759 0-45.255 12.495-12.497 32.758-12.497 45.255 0C869.49 198.433 869.49 441.568 719.529 591.529z" horiz-adv-x="896" />
+<glyph glyph-name="versions" unicode="" d="M0 128h128v64H64V448h64v64H0V128zM384 640v-640h512V640H384zM768 128H512V512h256V128zM192 64h128v64h-64V512h64v64H192V64z" horiz-adv-x="896" />
+<glyph glyph-name="x" unicode="" d="M640 512L512 640 320 448 128 640 0 512l192-192L0 128l128-128 192 192 192-192 128 128L448 320 640 512z" horiz-adv-x="640" />
+<glyph glyph-name="zap" unicode="⚡" d="M640 384H384L576 832 0 256h256L64-192 640 384z" horiz-adv-x="640" />
+</font>
+</defs>
+</svg>
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/assets/fonts/octicons.ttf
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/assets/fonts/octicons.ttf b/semantic/src/themes/github/assets/fonts/octicons.ttf
new file mode 100644
index 0000000..9e09105
Binary files /dev/null and b/semantic/src/themes/github/assets/fonts/octicons.ttf differ
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/assets/fonts/octicons.woff
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/assets/fonts/octicons.woff b/semantic/src/themes/github/assets/fonts/octicons.woff
new file mode 100644
index 0000000..cc3c19f
Binary files /dev/null and b/semantic/src/themes/github/assets/fonts/octicons.woff differ
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/collections/breadcrumb.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/collections/breadcrumb.variables b/semantic/src/themes/github/collections/breadcrumb.variables
new file mode 100644
index 0000000..e22050c
--- /dev/null
+++ b/semantic/src/themes/github/collections/breadcrumb.variables
@@ -0,0 +1,11 @@
+/*******************************
+ Site Overrides
+*******************************/
+
+@dividerOpacity: 1;
+@dividerSpacing: 0;
+@dividerSize: @big;
+@dividerColor: inherit;
+
+@huge: 1.5384em;
+
[18/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/fixed-width/collections/grid.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/fixed-width/collections/grid.variables b/semantic/src/themes/fixed-width/collections/grid.variables
new file mode 100644
index 0000000..d27f1d2
--- /dev/null
+++ b/semantic/src/themes/fixed-width/collections/grid.variables
@@ -0,0 +1,23 @@
+/* Fixed Page Grid */
+
+@mobileWidth: auto;
+@mobileMargin: 0em;
+@mobileGutter: 0em;
+
+@tabletWidth: auto;
+@tabletMargin: 0em;
+@tabletGutter: 8%;
+
+@computerWidth: 960px;
+@computerMargin: auto;
+@computerGutter: 0;
+
+@largeMonitorWidth: 1180px;
+@largeMonitorMargin: auto;
+@largeMonitorGutter: 0;
+
+@widescreenMonitorWidth: 1300px;
+@widescreenMargin: auto;
+@widescreenMonitorGutter: 0;
+
+@tableWidth: '';
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/fixed-width/modules/modal.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/fixed-width/modules/modal.overrides b/semantic/src/themes/fixed-width/modules/modal.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/fixed-width/modules/modal.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/fixed-width/modules/modal.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/fixed-width/modules/modal.variables b/semantic/src/themes/fixed-width/modules/modal.variables
new file mode 100644
index 0000000..16579af
--- /dev/null
+++ b/semantic/src/themes/fixed-width/modules/modal.variables
@@ -0,0 +1,37 @@
+
+/* Responsive Widths */
+@modalComputerWidth: 700px;
+@modalLargeMonitorWidth: 800px;
+@modalWidescreenMonitorWidth: 850px;
+
+@modalComputerMargin: 0em 0em 0em -(@modalComputerWidth / 2);
+@modalLargeMonitorMargin: 0em 0em 0em -(@modalLargeMonitorWidth / 2);
+@modalWidescreenMonitorMargin: 0em 0em 0em -(@modalWidescreenMonitorWidth / 2);
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Sizes */
+@modalSmallRatio: 0.6;
+@modalLargeRatio: 1.2;
+
+/* Derived Responsive Sizes */
+@modalSmallHeaderSize: 1.3em;
+@modalSmallComputerWidth: (@modalComputerWidth * @modalSmallRatio);
+@modalSmallLargeMonitorWidth: (@modalLargeMonitorWidth * @modalSmallRatio);
+@modalSmallWidescreenMonitorWidth: (@modalWidescreenMonitorWidth * @modalSmallRatio);
+
+@modalSmallComputerMargin: 0em 0em 0em -(@modalSmallComputerWidth / 2);
+@modalSmallLargeMonitorMargin: 0em 0em 0em -(@modalSmallLargeMonitorWidth / 2);
+@modalSmallWidescreenMonitorMargin: 0em 0em 0em -(@modalSmallWidescreenMonitorWidth / 2);
+
+@modalLargeHeaderSize: 1.3em;
+@modalLargeComputerWidth: (@modalComputerWidth * @modalLargeRatio);
+@modalLargeLargeMonitorWidth: (@modalLargeMonitorWidth * @modalLargeRatio);
+@modalLargeWidescreenMonitorWidth: (@modalWidescreenMonitorWidth * @modalLargeRatio);
+
+@modalLargeComputerMargin: 0em 0em 0em -(@modalLargeComputerWidth / 2);
+@modalLargeLargeMonitorMargin: 0em 0em 0em -(@modalLargeLargeMonitorWidth / 2);
+@modalLargeWidescreenMonitorMargin: 0em 0em 0em -(@modalLargeWidescreenMonitorWidth / 2);
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/flat/collections/form.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/flat/collections/form.overrides b/semantic/src/themes/flat/collections/form.overrides
new file mode 100644
index 0000000..68f40fe
--- /dev/null
+++ b/semantic/src/themes/flat/collections/form.overrides
@@ -0,0 +1,28 @@
+/*******************************
+ Overrides
+*******************************/
+
+.ui.form input[type="text"],
+.ui.form input[type="email"],
+.ui.form input[type="date"],
+.ui.form input[type="password"],
+.ui.form input[type="number"],
+.ui.form input[type="url"],
+.ui.form input[type="tel"] {
+ border-bottom: 1px solid #DDDDDD;
+}
+
+.ui.form .selection.dropdown {
+ border: none;
+ box-shadow: none !important;
+ border-bottom: 1px solid #DDDDDD;
+ border-radius: 0em !important;
+}
+.ui.form .selection.dropdown > .menu {
+ border-top-width: 1px !important;
+ border-radius: @defaultBorderRadius !important;
+}
+
+.ui.form .ui.icon.input > .icon {
+ width: 1em;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/flat/collections/form.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/flat/collections/form.variables b/semantic/src/themes/flat/collections/form.variables
new file mode 100644
index 0000000..6731fba
--- /dev/null
+++ b/semantic/src/themes/flat/collections/form.variables
@@ -0,0 +1,73 @@
+/*******************************
+ Form
+*******************************/
+
+/*-------------------
+ Elements
+--------------------*/
+
+
+/* Text */
+@paragraphMargin: 1em 0em;
+
+/* Field */
+@fieldMargin: 0em 0em 1em;
+
+/* Form Label */
+@labelFontSize: @relative11px;
+@labelTextTransform: uppercase;
+
+@groupedLabelTextTransform: none;
+
+/* Input */
+@inputHorizontalPadding: 0.5em;
+@inputBackground: transparent;
+@inputBorder: none;
+@inputBorderRadius: 0em;
+@inputBoxShadow: none;
+
+@textAreaPadding: 1em;
+@textAreaBackground: transparent;
+@textAreaFocusBackground: #EEEEEE;
+@textAreaBorder: 1px solid #DDDDDD;
+
+/* Divider */
+@dividerMargin: 1em 0em;
+
+/* Validation Prompt */
+@validationMargin: 0em 0em 0em 1em;
+@validationArrowOffset: -0.3em;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Disabled */
+
+/* Focus */
+@inputFocusPointerSize: 0px;
+@inputErrorPointerSize: 0px;
+
+/* Dropdown Error */
+@dropdownErrorHoverBackground: #FFF2F2;
+@dropdownErrorActiveBackground: #FDCFCF;
+
+/* Focused Error */
+@inputErrorFocusBackground: @negativeBackgroundColor;
+@inputErrorFocusColor: @negativeColorHover;
+@inputErrorFocusBorder: @negativeBorderColor;
+@inputErrorFocusBoxShadow: @inputErrorPointerSize 0em 0em 0em @negativeColorHover inset;
+
+/* Placeholder */
+@inputPlaceholderColor: lighten(@inputColor, 55);
+@inputPlaceholderFocusColor: lighten(@inputColor, 35);
+@inputErrorPlaceholderColor: lighten(@formErrorColor, 10);
+@inputErrorPlaceholderFocusColor: lighten(@formErrorColor, 5);
+
+/* Loading */
+@formLoaderDimmerColor: rgba(255, 255, 255, 0.6);
+@formLoaderPath: "@{imagePath}/loader-large.gif";
+@formLoaderPosition: 50% 50%;
+
+/* (x) Wide Field */
+@gutterWidth: 1.5em;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/flat/globals/site.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/flat/globals/site.overrides b/semantic/src/themes/flat/globals/site.overrides
new file mode 100644
index 0000000..c5c5336
--- /dev/null
+++ b/semantic/src/themes/flat/globals/site.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/flat/globals/site.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/flat/globals/site.variables b/semantic/src/themes/flat/globals/site.variables
new file mode 100644
index 0000000..90e7c87
--- /dev/null
+++ b/semantic/src/themes/flat/globals/site.variables
@@ -0,0 +1,107 @@
+/*******************************
+ Site Settings
+*******************************/
+
+/*-------------------
+ Paths
+--------------------*/
+
+@imagePath : "../../themes/default/assets/images";
+@fontPath : "../../themes/default/assets/fonts";
+
+/*-------------------
+ Fonts
+--------------------*/
+
+@headerFont : "Open Sans", "Helvetica Neue", Arial, Helvetica, sans-serif;
+@pageFont : "Open Sans", "Helvetica Neue", Arial, Helvetica, sans-serif;
+@fontSmoothing : antialiased;
+
+/*-------------------
+ Site Colors
+--------------------*/
+
+/*--- Colors ---*/
+@blue : #0074D9;
+@green : #2ECC40;
+@orange : #FF851B;
+@pink : #D9499A;
+@purple : #A24096;
+@red : #FF4136;
+@teal : #39CCCC;
+@yellow : #FFCB08;
+
+@black : #191919;
+@grey : #CCCCCC;
+@white : #FFFFFF;
+
+/*--- Light Colors ---*/
+@lightBlue : #54C8FF;
+@lightGreen : #2ECC40;
+@lightOrange : #FF851B;
+@lightPink : #FF8EDF;
+@lightPurple : #CDC6FF;
+@lightRed : #FF695E;
+@lightTeal : #6DFFFF;
+@lightYellow : #FFE21F;
+
+@primaryColor : @blue;
+@secondaryColor : @black;
+
+
+/*-------------------
+ Page
+--------------------*/
+
+@bodyBackground : #FCFCFC;
+@fontSize : 14px;
+@textColor : rgba(0, 0, 0, 0.8);
+
+@headerMargin : 1em 0em 1rem;
+@paragraphMargin : 0em 0em 1em;
+
+@linkColor : #009FDA;
+@linkUnderline : none;
+@linkHoverColor : lighten( @linkColor, 5);
+@linkHoverUnderline : @linkUnderline;
+
+@highlightBackground : #FFFFCC;
+@highlightColor : @textColor;
+
+
+
+/*-------------------
+ Background Colors
+--------------------*/
+
+@subtleTransparentBlack : rgba(0, 0, 0, 0.03);
+@transparentBlack : rgba(0, 0, 0, 0.05);
+@strongTransparentBlack : rgba(0, 0, 0, 0.10);
+
+@subtleTransparentWhite : rgba(255, 255, 255, 0.01);
+@transparentWhite : rgba(255, 255, 255, 0.05);
+@strongTransparentWhite : rgba(255, 255, 255, 0.01);
+
+/* Used for differentiating neutrals */
+@subtleGradient: linear-gradient(transparent, rgba(0, 0, 0, 0.05));
+
+/* Used for differentiating layers */
+@subtleShadow: 0px 1px 2px 0 rgba(0, 0, 0, 0.05);
+
+
+/*-------------------
+ Grid
+--------------------*/
+
+@columnCount: 16;
+
+/*-------------------
+ Breakpoints
+--------------------*/
+
+@mobileBreakpoint : 320px;
+@tabletBreakpoint : 768px;
+@computerBreakpoint : 992px;
+@largeMonitorBreakpoint : 1400px;
+@widescreenMonitorBreakpoint : 1900px;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/github/assets/fonts/octicons-local.ttf
----------------------------------------------------------------------
diff --git a/semantic/src/themes/github/assets/fonts/octicons-local.ttf b/semantic/src/themes/github/assets/fonts/octicons-local.ttf
new file mode 100644
index 0000000..d5f4e2e
Binary files /dev/null and b/semantic/src/themes/github/assets/fonts/octicons-local.ttf differ
[33/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/dropdown.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/dropdown.less b/semantic/src/definitions/modules/dropdown.less
new file mode 100755
index 0000000..c726781
--- /dev/null
+++ b/semantic/src/definitions/modules/dropdown.less
@@ -0,0 +1,1352 @@
+/*!
+ * # Semantic UI - Dropdown
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'dropdown';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Dropdown
+*******************************/
+
+.ui.dropdown {
+ cursor: pointer;
+ position: relative;
+ display: inline-block;
+ outline: none;
+ text-align: left;
+ transition: @transition;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+/*******************************
+ Content
+*******************************/
+
+/*--------------
+ Menu
+---------------*/
+
+.ui.dropdown .menu {
+ cursor: auto;
+ position: absolute;
+ display: none;
+ outline: none;
+ top: 100%;
+ min-width: max-content;
+ transition: @menuTransition;
+
+ margin: @menuMargin;
+ padding: @menuPadding;
+ background: @menuBackground;
+
+ font-size: @relativeMedium;
+ text-shadow: none;
+ text-align: @menuTextAlign;
+
+ box-shadow: @menuBoxShadow;
+ border: @menuBorder;
+ border-radius: @menuBorderRadius;
+ transition: @menuTransition;
+ z-index: @menuZIndex;
+ will-change: transform, opacity;
+}
+
+.ui.dropdown .menu > * {
+ white-space: nowrap;
+}
+
+
+/*--------------
+ Hidden Input
+---------------*/
+
+.ui.dropdown > input:not(.search):first-child,
+.ui.dropdown > select {
+ display: none !important;
+}
+
+/*--------------
+ Dropdown Icon
+---------------*/
+
+.ui.dropdown > .dropdown.icon {
+ position: relative;
+ width: auto;
+ font-size: @dropdownIconSize;
+ margin: @dropdownIconMargin;
+}
+.ui.dropdown .menu > .item .dropdown.icon {
+ width: auto;
+ float: @itemDropdownIconFloat;
+ margin: @itemDropdownIconMargin;
+}
+.ui.dropdown .menu > .item .dropdown.icon + .text {
+ margin-right: @itemDropdownIconDistance;
+}
+
+
+/*--------------
+ Text
+---------------*/
+
+.ui.dropdown > .text {
+ display: inline-block;
+ transition: @textTransition;
+}
+
+/*--------------
+ Menu Item
+---------------*/
+
+.ui.dropdown .menu > .item {
+ position: relative;
+ cursor: pointer;
+ display: block;
+ border: @itemBorder;
+ height: @itemHeight;
+ text-align: @itemTextAlign;
+
+ border-top: @itemDivider;
+ line-height: @itemLineHeight;
+ font-size: @itemFontSize;
+ color: @itemColor;
+
+ padding: @itemPadding !important;
+ font-size: @itemFontSize;
+ text-transform: @itemTextTransform;
+ font-weight: @itemFontWeight;
+ box-shadow: @itemBoxShadow;
+ -webkit-touch-callout: none;
+}
+.ui.dropdown .menu > .item:first-child {
+ border-top-width: 0px;
+}
+
+/*--------------
+ Floated Content
+---------------*/
+
+.ui.dropdown > .text > [class*="right floated"],
+.ui.dropdown .menu .item > [class*="right floated"] {
+ float: right !important;
+ margin-right: 0em !important;
+ margin-left: @floatedDistance !important;
+}
+.ui.dropdown > .text > [class*="left floated"],
+.ui.dropdown .menu .item > [class*="left floated"] {
+ float: left !important;
+ margin-left: 0em !important;
+ margin-right: @floatedDistance !important;
+}
+
+.ui.dropdown .menu .item > .icon.floated,
+.ui.dropdown .menu .item > .flag.floated,
+.ui.dropdown .menu .item > .image.floated,
+.ui.dropdown .menu .item > img.floated {
+ margin-top: @itemLineHeightOffset;
+}
+
+
+/*--------------
+ Menu Divider
+---------------*/
+
+.ui.dropdown .menu > .header {
+ margin: @menuHeaderMargin;
+ padding: @menuHeaderPadding;
+ color: @menuHeaderColor;
+ font-size: @menuHeaderFontSize;
+ font-weight: @menuHeaderFontWeight;
+ text-transform: @menuHeaderTextTransform;
+}
+
+.ui.dropdown .menu > .divider {
+ border-top: @menuDividerBorder;
+ height: 0em;
+ margin: @menuDividerMargin;
+}
+
+.ui.dropdown .menu > .input {
+ width: auto;
+ display: flex;
+ margin: @menuInputMargin;
+ min-width: @menuInputMinWidth;
+}
+.ui.dropdown .menu > .header + .input {
+ margin-top: 0em;
+}
+.ui.dropdown .menu > .input:not(.transparent) input {
+ padding: @menuInputPadding;
+}
+.ui.dropdown .menu > .input:not(.transparent) .button,
+.ui.dropdown .menu > .input:not(.transparent) .icon,
+.ui.dropdown .menu > .input:not(.transparent) .label {
+ padding-top: @menuInputVerticalPadding;
+ padding-bottom: @menuInputVerticalPadding;
+}
+
+/*-----------------
+ Item Description
+-------------------*/
+
+.ui.dropdown > .text > .description,
+.ui.dropdown .menu > .item > .description {
+ float: @itemDescriptionFloat;
+ margin: @itemDescriptionMargin;
+ color: @itemDescriptionColor;
+}
+
+/*-----------------
+ Message
+-------------------*/
+
+.ui.dropdown .menu > .message {
+ padding: @messagePadding;
+ font-weight: @messageFontWeight;
+}
+.ui.dropdown .menu > .message:not(.ui) {
+ color: @messageColor;
+}
+
+/*--------------
+ Sub Menu
+---------------*/
+
+.ui.dropdown .menu .menu {
+ top: @subMenuTop !important;
+ left: @subMenuLeft !important;
+ right: @subMenuRight !important;
+ margin: @subMenuMargin !important;
+ border-radius: @subMenuBorderRadius !important;
+ z-index: @subMenuZIndex !important;
+}
+
+/* Hide Arrow */
+.ui.dropdown .menu .menu:after {
+ display: none;
+}
+
+/*--------------
+ Sub Elements
+---------------*/
+
+/* Icons / Flags / Labels / Image */
+.ui.dropdown > .text > .icon,
+.ui.dropdown > .text > .label,
+.ui.dropdown > .text > .flag,
+.ui.dropdown > .text > img,
+.ui.dropdown > .text > .image {
+ margin-top: @textLineHeightOffset;
+}
+.ui.dropdown .menu > .item > .icon,
+.ui.dropdown .menu > .item > .label,
+.ui.dropdown .menu > .item > .flag,
+.ui.dropdown .menu > .item > .image,
+.ui.dropdown .menu > .item > img {
+ margin-top: @itemLineHeightOffset;
+}
+
+.ui.dropdown > .text > .icon,
+.ui.dropdown > .text > .label,
+.ui.dropdown > .text > .flag,
+.ui.dropdown > .text > img,
+.ui.dropdown > .text > .image,
+.ui.dropdown .menu > .item > .icon,
+.ui.dropdown .menu > .item > .label,
+.ui.dropdown .menu > .item > .flag,
+.ui.dropdown .menu > .item > .image,
+.ui.dropdown .menu > .item > img {
+ margin-left: 0em;
+ float: @itemElementFloat;
+ margin-right: @itemElementDistance;
+}
+
+/*--------------
+ Image
+---------------*/
+
+.ui.dropdown > .text > img,
+.ui.dropdown > .text > .image,
+.ui.dropdown .menu > .item > .image,
+.ui.dropdown .menu > .item > img {
+ display: inline-block;
+ vertical-align: middle;
+ width: auto;
+ max-height: @menuImageMaxHeight;
+}
+
+
+/*******************************
+ Coupling
+*******************************/
+
+
+/*--------------
+ Menu
+---------------*/
+
+/* Remove Menu Item Divider */
+.ui.dropdown .ui.menu > .item:before,
+.ui.menu .ui.dropdown .menu > .item:before {
+ display: none;
+}
+
+/* Prevent Menu Item Border */
+.ui.menu .ui.dropdown .menu .active.item {
+ border-left: none;
+}
+
+/* Automatically float dropdown menu right on last menu item */
+.ui.menu .right.menu .dropdown:last-child .menu,
+.ui.menu .right.dropdown.item .menu,
+.ui.buttons > .ui.dropdown:last-child .menu {
+ left: auto;
+ right: 0em;
+}
+
+/*--------------
+ Label
+---------------*/
+
+/* Dropdown Menu */
+.ui.label.dropdown .menu {
+ min-width: 100%;
+}
+
+/*--------------
+ Button
+---------------*/
+
+/* No Margin On Icon Button */
+.ui.dropdown.icon.button > .dropdown.icon {
+ margin: 0em;
+}
+.ui.button.dropdown .menu {
+ min-width: 100%;
+}
+
+
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Selection
+---------------*/
+
+/* Displays like a select box */
+.ui.selection.dropdown {
+ cursor: pointer;
+ word-wrap: break-word;
+ line-height: 1em;
+ white-space: normal;
+ outline: 0;
+ transform: rotateZ(0deg);
+
+ min-width: @selectionMinWidth;
+ min-height: @selectionMinHeight;
+
+ background: @selectionBackground;
+ display: @selectionDisplay;
+ padding: @selectionPadding;
+ color: @selectionTextColor;
+ box-shadow: @selectionBoxShadow;
+ border: @selectionBorder;
+ border-radius: @selectionBorderRadius;
+ transition: @selectionTransition;
+}
+.ui.selection.dropdown.visible,
+.ui.selection.dropdown.active {
+ z-index: @selectionZIndex;
+}
+
+select.ui.dropdown {
+ height: @selectHeight;
+ padding: @selectPadding;
+ border: @selectBorder;
+ visibility: @selectVisibility;
+}
+.ui.selection.dropdown > .search.icon,
+.ui.selection.dropdown > .delete.icon,
+.ui.selection.dropdown > .dropdown.icon {
+ cursor: pointer;
+ position: absolute;
+ width: auto;
+ height: auto;
+ line-height: @searchSelectionLineHeight;
+ top: @selectionVerticalPadding;
+ right: @selectionHorizontalPadding;
+ z-index: @selectionIconZIndex;
+ margin: @selectionIconMargin;
+ padding: @selectionIconPadding;
+ opacity: @selectionIconOpacity;
+ transition: @selectionIconTransition;
+}
+
+/* Compact */
+.ui.compact.selection.dropdown {
+ min-width: 0px;
+}
+
+/* Selection Menu */
+.ui.selection.dropdown .menu {
+ overflow-x: hidden;
+ overflow-y: auto;
+ backface-visibility: hidden;
+ -webkit-overflow-scrolling: touch;
+ border-top-width: 0px !important;
+ width: auto;
+ outline: none;
+ margin: 0px -@menuBorderWidth;
+ min-width: @menuMinWidth;
+ width: @menuMinWidth;
+
+ border-radius: @selectionMenuBorderRadius;
+ box-shadow: @selectionMenuBoxShadow;
+ transition: @selectionMenuTransition;
+}
+.ui.selection.dropdown .menu:after,
+.ui.selection.dropdown .menu:before {
+ display: none;
+}
+
+/*--------------
+ Message
+---------------*/
+
+.ui.selection.dropdown .menu > .message {
+ padding: @selectionMessagePadding;
+}
+
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.selection.dropdown .menu {
+ max-height: @selectionMobileMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @tabletBreakpoint) {
+ .ui.selection.dropdown .menu {
+ max-height: @selectionTabletMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @computerBreakpoint) {
+ .ui.selection.dropdown .menu {
+ max-height: @selectionComputerMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @widescreenMonitorBreakpoint) {
+ .ui.selection.dropdown .menu {
+ max-height: @selectionWidescreenMaxMenuHeight;
+ }
+}
+
+/* Menu Item */
+.ui.selection.dropdown .menu > .item {
+ border-top: @selectionItemDivider;
+ padding: @selectionItemPadding !important;
+ white-space: normal;
+ word-wrap: normal;
+}
+
+/* User Item */
+.ui.selection.dropdown .menu > .hidden.addition.item {
+ display: none;
+}
+
+/* Hover */
+.ui.selection.dropdown:hover {
+ border-color: @selectionHoverBorderColor;
+ box-shadow: @selectionHoverBoxShadow;
+}
+
+/* Active */
+.ui.selection.active.dropdown {
+ border-color: @selectionVisibleBorderColor;
+ box-shadow: @selectionVisibleBoxShadow;
+}
+.ui.selection.active.dropdown .menu {
+ border-color: @selectionVisibleBorderColor;
+ box-shadow: @selectionVisibleMenuBoxShadow;
+}
+
+/* Focus */
+.ui.selection.dropdown:focus {
+ border-color: @selectionFocusBorderColor;
+ box-shadow: @selectionFocusBoxShadow;
+}
+.ui.selection.dropdown:focus .menu {
+ border-color: @selectionFocusBorderColor;
+ box-shadow: @selectionFocusMenuBoxShadow;
+}
+
+/* Visible */
+.ui.selection.visible.dropdown > .text:not(.default) {
+ font-weight: @selectionVisibleTextFontWeight;
+ color: @selectionVisibleTextColor;
+}
+
+/* Visible Hover */
+.ui.selection.active.dropdown:hover {
+ border-color: @selectionActiveHoverBorderColor;
+ box-shadow: @selectionActiveHoverBoxShadow;
+}
+.ui.selection.active.dropdown:hover .menu {
+ border-color: @selectionActiveHoverBorderColor;
+ box-shadow: @selectionActiveHoverMenuBoxShadow;
+}
+
+/* Dropdown Icon */
+.ui.active.selection.dropdown > .dropdown.icon,
+.ui.visible.selection.dropdown > .dropdown.icon {
+ opacity: @selectionVisibleIconOpacity;
+ z-index: 3;
+}
+
+/* Connecting Border */
+.ui.active.selection.dropdown {
+ border-bottom-left-radius: @selectionVisibleConnectingBorder !important;
+ border-bottom-right-radius: @selectionVisibleConnectingBorder !important;
+}
+
+/* Empty Connecting Border */
+.ui.active.empty.selection.dropdown {
+ border-radius: @selectionBorderRadius !important;
+ box-shadow: @selectionBoxShadow !important;
+}
+.ui.active.empty.selection.dropdown .menu {
+ border: none !important;
+ box-shadow: none !important;
+}
+
+/*--------------
+ Searchable
+---------------*/
+
+/* Search Selection */
+.ui.search.dropdown {
+ min-width: @searchMinWidth;
+}
+
+/* Search Dropdown */
+.ui.search.dropdown > input.search {
+ background: none transparent !important;
+ border: none !important;
+ box-shadow: none !important;
+ cursor: pointer;
+ top: 0em;
+ left: 0em;
+ width: 100%;
+ outline: none;
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+ padding: inherit;
+}
+
+/* Text Layering */
+.ui.search.dropdown > input.search {
+ position: absolute;
+ z-index: 2;
+}
+.ui.search.dropdown > .text {
+ cursor: text;
+ position: relative;
+ left: @textCursorSpacing;
+ z-index: 3;
+}
+
+/* Search Selection */
+.ui.search.selection.dropdown > input.search {
+ line-height: @searchSelectionLineHeight;
+ padding: @searchSelectionInputPadding;
+}
+
+/* Used to size multi select input to character width */
+.ui.search.selection.dropdown > span.sizer {
+ line-height: @searchSelectionLineHeight;
+ padding: @searchSelectionInputPadding;
+ display: none;
+ white-space: pre;
+}
+
+/* Active/Visible Search */
+.ui.search.dropdown.active > input.search,
+.ui.search.dropdown.visible > input.search {
+ cursor: auto;
+}
+.ui.search.dropdown.active > .text,
+.ui.search.dropdown.visible > .text {
+ pointer-events: none;
+}
+
+/* Filtered Text */
+.ui.active.search.dropdown input.search:focus + .text .icon,
+.ui.active.search.dropdown input.search:focus + .text .flag {
+ opacity: @selectionTextUnderlayIconOpacity;
+}
+.ui.active.search.dropdown input.search:focus + .text {
+ color: @selectionTextUnderlayColor !important;
+}
+
+/* Search Menu */
+.ui.search.dropdown .menu {
+ overflow-x: hidden;
+ overflow-y: auto;
+ backface-visibility: hidden;
+ -webkit-overflow-scrolling: touch;
+}
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.search.dropdown .menu {
+ max-height: @searchMobileMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @tabletBreakpoint) {
+ .ui.search.dropdown .menu {
+ max-height: @searchTabletMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @computerBreakpoint) {
+ .ui.search.dropdown .menu {
+ max-height: @searchComputerMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @widescreenMonitorBreakpoint) {
+ .ui.search.dropdown .menu {
+ max-height: @searchWidescreenMaxMenuHeight;
+ }
+}
+
+/*--------------
+ Multiple
+---------------*/
+
+/* Multiple Selection */
+.ui.multiple.dropdown {
+ padding: @multipleSelectionPadding;
+}
+.ui.multiple.dropdown .menu {
+ cursor: auto;
+}
+
+/* Multiple Search Selection */
+.ui.multiple.search.dropdown,
+.ui.multiple.search.dropdown > input.search {
+ cursor: text;
+}
+
+/* Selection Label */
+.ui.multiple.dropdown > .label {
+ user-select: none;
+ display: inline-block;
+ vertical-align: top;
+ white-space: normal;
+ font-size: @labelSize;
+ padding: @labelPadding;
+ margin: @labelMargin;
+ box-shadow: @labelBoxShadow;
+}
+
+/* Dropdown Icon */
+.ui.multiple.dropdown .dropdown.icon {
+ margin: @multipleSelectionDropdownIconMargin;
+ padding: @multipleSelectionDropdownIconPadding;
+}
+
+/* Text */
+.ui.multiple.dropdown > .text {
+ position: static;
+ padding: 0;
+ max-width: 100%;
+ margin: @multipleSelectionChildMargin;
+ line-height: @multipleSelectionChildLineHeight;
+}
+.ui.multiple.dropdown > .label ~ input.search {
+ margin-left: @multipleSelectionSearchAfterLabelDistance !important;
+}
+.ui.multiple.dropdown > .label ~ .text {
+ display: none;
+}
+
+/*-----------------
+ Multiple Search
+-----------------*/
+
+/* Prompt Text */
+.ui.multiple.search.dropdown > .text {
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: inherit;
+ margin: @multipleSelectionChildMargin;
+ line-height: @multipleSelectionChildLineHeight;
+}
+
+.ui.multiple.search.dropdown > .label ~ .text {
+ display: none;
+}
+
+/* Search */
+.ui.multiple.search.dropdown > input.search {
+ position: static;
+ padding: 0;
+ max-width: 100%;
+ margin: @multipleSelectionChildMargin;
+ width: @multipleSelectionSearchStartWidth;
+ line-height: @multipleSelectionChildLineHeight;
+}
+
+
+/*--------------
+ Inline
+---------------*/
+
+.ui.inline.dropdown {
+ cursor: pointer;
+ display: inline-block;
+ color: @inlineTextColor;
+}
+.ui.inline.dropdown .dropdown.icon {
+ margin: @inlineIconMargin;
+ vertical-align: baseline;
+}
+.ui.inline.dropdown > .text {
+ font-weight: @inlineTextFontWeight;
+}
+.ui.inline.dropdown .menu {
+ cursor: auto;
+ margin-top: @inlineMenuDistance;
+ border-radius: @inlineMenuBorderRadius;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+
+/*--------------------
+ Active
+----------------------*/
+
+/* Menu Item Active */
+.ui.dropdown .menu .active.item {
+ background: @activeItemBackground;
+ font-weight: @activeItemFontWeight;
+ color: @activeItemColor;
+ box-shadow: @activeItemBoxShadow;
+ z-index: @activeItemZIndex;
+}
+
+
+/*--------------------
+ Hover
+----------------------*/
+
+/* Menu Item Hover */
+.ui.dropdown .menu > .item:hover {
+ background: @hoveredItemBackground;
+ color: @hoveredItemColor;
+ z-index: @hoveredZIndex;
+}
+
+/*--------------------
+ Loading
+---------------------*/
+
+.ui.loading.dropdown > i.icon {
+ height: @relative14px !important;
+ padding: @relative16px @relative15px !important;
+}
+.ui.loading.dropdown > i.icon:before {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ border-radius: @circularRadius;
+ border: @loaderLineWidth solid @loaderFillColor;
+}
+.ui.loading.dropdown > i.icon:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+ box-shadow: 0px 0px 0px 1px transparent;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ animation: dropdown-spin @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @loaderLineColor transparent transparent;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+}
+
+/* Coupling */
+.ui.loading.dropdown.button > i.icon:before,
+.ui.loading.dropdown.button > i.icon:after {
+ display: none;
+}
+
+@keyframes dropdown-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+
+/*--------------------
+ Default Text
+----------------------*/
+
+.ui.dropdown:not(.button) > .default.text,
+.ui.default.dropdown:not(.button) > .text {
+ color: @defaultTextColor;
+}
+.ui.dropdown:not(.button) > input:focus + .default.text,
+.ui.default.dropdown:not(.button) > input:focus + .text {
+ color: @defaultTextFocusColor;
+}
+/*--------------------
+ Loading
+----------------------*/
+
+.ui.loading.dropdown > .text {
+ transition: none;
+}
+
+/* Used To Check Position */
+.ui.dropdown .loading.menu {
+ display: block;
+ visibility: hidden;
+ z-index: @loadingZIndex;
+}
+
+/*--------------------
+ Keyboard Select
+----------------------*/
+
+/* Selected Item */
+.ui.dropdown.selected,
+.ui.dropdown .menu .selected.item {
+ background: @selectedBackground;
+ color: @selectedColor;
+}
+
+
+/*--------------------
+ Search Filtered
+----------------------*/
+
+/* Filtered Item */
+.ui.dropdown > .filtered.text {
+ visibility: hidden;
+}
+.ui.dropdown .filtered.item {
+ display: none !important;
+}
+
+
+/*--------------------
+ Error
+----------------------*/
+
+.ui.dropdown.error,
+.ui.dropdown.error > .text,
+.ui.dropdown.error > .default.text {
+ color: @errorTextColor;
+}
+
+.ui.selection.dropdown.error {
+ background: @errorBackgroundColor;
+ border-color: @errorBorderColor;
+}
+.ui.selection.dropdown.error:hover {
+ border-color: @errorBorderColor;
+}
+
+.ui.dropdown.error > .menu,
+.ui.dropdown.error > .menu .menu {
+ border-color: @errorBorderColor;
+}
+.ui.dropdown.error > .menu > .item {
+ color: @errorItemTextColor;
+}
+.ui.multiple.selection.error.dropdown > .label {
+ border-color: @errorBorderColor;
+}
+
+/* Item Hover */
+.ui.dropdown.error > .menu > .item:hover {
+ background-color: @errorItemHoverBackground;
+}
+
+/* Item Active */
+.ui.dropdown.error > .menu .active.item {
+ background-color: @errorItemActiveBackground;
+}
+
+
+
+/*--------------------
+ Disabled
+----------------------*/
+
+/* Disabled */
+.ui.disabled.dropdown,
+.ui.dropdown .menu > .disabled.item {
+ cursor: default;
+ pointer-events: none;
+ opacity: @disabledOpacity;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Direction
+---------------*/
+
+/* Flyout Direction */
+.ui.dropdown .menu {
+ left: 0px;
+}
+
+
+/* Default Side (Right) */
+.ui.dropdown .right.menu > .menu,
+.ui.dropdown .menu .right.menu {
+ left: 100% !important;
+ right: auto !important;
+ border-radius: @subMenuBorderRadius !important;
+}
+
+/* Left Flyout Menu */
+.ui.dropdown > .left.menu .menu,
+.ui.dropdown .menu .left.menu {
+ left: auto !important;
+ right: 100% !important;
+ border-radius: @leftSubMenuBorderRadius !important;
+}
+
+.ui.dropdown .item .left.dropdown.icon,
+.ui.dropdown .left.menu .item .dropdown.icon {
+ width: auto;
+ float: @leftMenuDropdownIconFloat;
+ margin: @leftMenuDropdownIconMargin;
+}
+.ui.dropdown .item .left.dropdown.icon,
+.ui.dropdown .left.menu .item .dropdown.icon {
+ width: auto;
+ float: @leftMenuDropdownIconFloat;
+ margin: @leftMenuDropdownIconMargin;
+}
+.ui.dropdown .item .left.dropdown.icon + .text,
+.ui.dropdown .left.menu .item .dropdown.icon + .text {
+ margin-left: @itemDropdownIconDistance;
+}
+
+
+/*--------------
+ Upward
+---------------*/
+
+/* Upward Main Menu */
+.ui.upward.dropdown > .menu {
+ top: auto;
+ bottom: 100%;
+ box-shadow: @upwardMenuBoxShadow;
+ border-radius: @upwardMenuBorderRadius;
+}
+
+/* Upward Sub Menu */
+.ui.dropdown .upward.menu {
+ top: auto !important;
+ bottom: 0 !important;
+}
+
+/* Active Upward */
+.ui.simple.upward.active.dropdown,
+.ui.simple.upward.dropdown:hover {
+ border-radius: @borderRadius @borderRadius 0em 0em !important;
+}
+.ui.upward.dropdown.button:not(.pointing):not(.floating).active {
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+
+/* Selection */
+.ui.upward.selection.dropdown .menu {
+ border-top-width: @menuBorderWidth !important;
+ border-bottom-width: 0px !important;
+ box-shadow: @upwardSelectionMenuBoxShadow;
+}
+.ui.upward.selection.dropdown:hover {
+ box-shadow: @upwardSelectionHoverBoxShadow;
+}
+
+/* Active Upward */
+.ui.active.upward.selection.dropdown {
+ border-radius: @upwardSelectionVisibleBorderRadius !important;
+}
+
+/* Visible Upward */
+.ui.upward.selection.dropdown.visible {
+ box-shadow: @upwardSelectionVisibleBoxShadow;
+ border-radius: @upwardSelectionVisibleBorderRadius !important;
+}
+
+/* Visible Hover Upward */
+.ui.upward.active.selection.dropdown:hover {
+ box-shadow: @upwardSelectionActiveHoverBoxShadow;
+}
+.ui.upward.active.selection.dropdown:hover .menu {
+ box-shadow: @upwardSelectionActiveHoverMenuBoxShadow;
+}
+
+/*--------------
+ Simple
+---------------*/
+
+/* Selection Menu */
+.ui.scrolling.dropdown .menu,
+.ui.dropdown .scrolling.menu {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.ui.scrolling.dropdown .menu {
+ overflow-x: hidden;
+ overflow-y: auto;
+ backface-visibility: hidden;
+ -webkit-overflow-scrolling: touch;
+ min-width: 100% !important;
+ width: auto !important;
+}
+
+.ui.dropdown .scrolling.menu {
+ position: static;
+ overflow-y: auto;
+ border: none;
+ box-shadow: none !important;
+ border-radius: 0 !important;
+ margin: 0 !important;
+ min-width: 100% !important;
+ width: auto !important;
+ border-top: @menuBorder;
+}
+.ui.scrolling.dropdown .menu .item.item.item,
+.ui.dropdown .scrolling.menu > .item.item.item {
+ border-top: @scrollingMenuItemBorder;
+ padding-right: @scrollingMenuRightItemPadding !important;
+}
+.ui.scrolling.dropdown .menu .item:first-child,
+.ui.dropdown .scrolling.menu .item:first-child {
+ border-top: none;
+}
+.ui.dropdown > .animating.menu .scrolling.menu,
+.ui.dropdown > .visible.menu .scrolling.menu {
+ display: block;
+}
+
+/* Scrollbar in IE */
+@media all and (-ms-high-contrast:none) {
+ .ui.scrolling.dropdown .menu,
+ .ui.dropdown .scrolling.menu {
+ min-width: ~"calc(100% - "@scrollbarWidth~")";
+ }
+}
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.scrolling.dropdown .menu,
+ .ui.dropdown .scrolling.menu {
+ max-height: @scrollingMobileMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @tabletBreakpoint) {
+ .ui.scrolling.dropdown .menu,
+ .ui.dropdown .scrolling.menu {
+ max-height: @scrollingTabletMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @computerBreakpoint) {
+ .ui.scrolling.dropdown .menu,
+ .ui.dropdown .scrolling.menu {
+ max-height: @scrollingComputerMaxMenuHeight;
+ }
+}
+@media only screen and (min-width: @widescreenMonitorBreakpoint) {
+ .ui.scrolling.dropdown .menu,
+ .ui.dropdown .scrolling.menu {
+ max-height: @scrollingWidescreenMaxMenuHeight;
+ }
+}
+
+/*--------------
+ Simple
+---------------*/
+
+/* Displays without javascript */
+
+.ui.simple.dropdown .menu:before,
+.ui.simple.dropdown .menu:after {
+ display: none;
+}
+.ui.simple.dropdown .menu {
+ position: absolute;
+ display: block;
+ overflow: hidden;
+ top: -9999px !important;
+ opacity: 0;
+ width: 0;
+ height: 0;
+ transition: @simpleTransition;
+}
+
+.ui.simple.active.dropdown,
+.ui.simple.dropdown:hover {
+ border-bottom-left-radius: 0em !important;
+ border-bottom-right-radius: 0em !important;
+}
+
+.ui.simple.active.dropdown > .menu,
+.ui.simple.dropdown:hover > .menu {
+ overflow: visible;
+ width: auto;
+ height: auto;
+ top: 100% !important;
+ opacity: 1;
+}
+.ui.simple.dropdown > .menu > .item:active > .menu,
+.ui.simple.dropdown:hover > .menu > .item:hover > .menu {
+ overflow: visible;
+ width: auto;
+ height: auto;
+ top: 0% !important;
+ left: 100% !important;
+ opacity: 1;
+}
+.ui.simple.disabled.dropdown:hover .menu {
+ display: none;
+ height: 0px;
+ width: 0px;
+ overflow: hidden;
+}
+
+/* Visible */
+.ui.simple.visible.dropdown > .menu {
+ display: block;
+}
+
+/*--------------
+ Fluid
+---------------*/
+
+.ui.fluid.dropdown {
+ display: block;
+ width: 100%;
+ min-width: 0em;
+}
+.ui.fluid.dropdown > .dropdown.icon {
+ float: right;
+}
+
+
+/*--------------
+ Floating
+---------------*/
+
+.ui.floating.dropdown .menu {
+ left: 0;
+ right: auto;
+ box-shadow: @floatingMenuBoxShadow !important;
+ border-radius: @floatingMenuBorderRadius !important;
+}
+.ui.floating.dropdown > .menu {
+ margin-top: @floatingMenuDistance !important;
+ border-radius: @floatingMenuBorderRadius !important;
+}
+
+/*--------------
+ Pointing
+---------------*/
+
+.ui.pointing.dropdown > .menu {
+ top: 100%;
+ margin-top: @pointingMenuDistance;
+ border-radius: @pointingMenuBorderRadius;
+}
+
+.ui.pointing.dropdown > .menu:after {
+ display: block;
+ position: absolute;
+ pointer-events: none;
+ content: '';
+ visibility: visible;
+ transform: rotate(45deg);
+
+ width: @pointingArrowSize;
+ height: @pointingArrowSize;
+ box-shadow: @pointingArrowBoxShadow;
+ background: @pointingArrowBackground;
+ z-index: @pointingArrowZIndex;
+}
+
+.ui.pointing.dropdown > .menu:after {
+ top: @pointingArrowOffset;
+ left: 50%;
+ margin: 0em 0em 0em @pointingArrowOffset;
+}
+
+/* Top Left Pointing */
+.ui.top.left.pointing.dropdown > .menu {
+ top: 100%;
+ bottom: auto;
+ left: 0%;
+ right: auto;
+ margin: @pointingArrowDistanceFromEdge 0em 0em;
+}
+.ui.top.left.pointing.dropdown > .menu {
+ top: 100%;
+ bottom: auto;
+ left: 0%;
+ right: auto;
+ margin: @pointingArrowDistanceFromEdge 0em 0em;
+}
+.ui.top.left.pointing.dropdown > .menu:after {
+ top: @pointingArrowOffset;
+ left: @pointingArrowDistanceFromEdge;
+ right: auto;
+ margin: 0em;
+ transform: rotate(45deg);
+}
+/* Top Right Pointing */
+.ui.top.right.pointing.dropdown > .menu {
+ top: 100%;
+ bottom: auto;
+ right: 0%;
+ left: auto;
+ margin: @pointingArrowDistanceFromEdge 0em 0em;
+}
+.ui.top.right.pointing.dropdown > .menu:after {
+ top: @pointingArrowOffset;
+ left: auto;
+ right: @pointingArrowDistanceFromEdge;
+ margin: 0em;
+ transform: rotate(45deg);
+}
+
+/* Left Pointing */
+.ui.left.pointing.dropdown > .menu {
+ top: 0%;
+ left: 100%;
+ right: auto;
+ margin: 0em 0em 0em @pointingArrowDistanceFromEdge;
+}
+.ui.left.pointing.dropdown > .menu:after {
+ top: 1em;
+ left: @pointingArrowOffset;
+ margin: 0em 0em 0em 0em;
+ transform: rotate(-45deg);
+}
+
+/* Right Pointing */
+.ui.right.pointing.dropdown > .menu {
+ top: 0%;
+ left: auto;
+ right: 100%;
+ margin: 0em @pointingArrowDistanceFromEdge 0em 0em;
+}
+.ui.right.pointing.dropdown > .menu:after {
+ top: 1em;
+ left: auto;
+ right: @pointingArrowOffset;
+ margin: 0em 0em 0em 0em;
+ transform: rotate(135deg);
+}
+
+/* Bottom Pointing */
+.ui.bottom.pointing.dropdown > .menu {
+ top: auto;
+ bottom: 100%;
+ left: 0%;
+ right: auto;
+ margin: 0em 0em @pointingArrowDistanceFromEdge ;
+}
+.ui.bottom.pointing.dropdown > .menu:after {
+ top: auto;
+ bottom: @pointingArrowOffset;
+ right: auto;
+ margin: 0em;
+ transform: rotate(-135deg);
+}
+/* Reverse Sub-Menu Direction */
+.ui.bottom.pointing.dropdown > .menu .menu {
+ top: auto !important;
+ bottom: 0px !important;
+}
+
+/* Bottom Left */
+.ui.bottom.left.pointing.dropdown > .menu {
+ left: 0%;
+ right: auto;
+}
+.ui.bottom.left.pointing.dropdown > .menu:after {
+ left: @pointingArrowDistanceFromEdge;
+ right: auto;
+}
+
+/* Bottom Right */
+.ui.bottom.right.pointing.dropdown > .menu {
+ right: 0%;
+ left: auto;
+}
+.ui.bottom.right.pointing.dropdown > .menu:after {
+ left: auto;
+ right: @pointingArrowDistanceFromEdge;
+}
+
+/* Upward pointing */
+.ui.upward.pointing.dropdown > .menu,
+.ui.upward.top.pointing.dropdown > .menu {
+ top: auto;
+ bottom: 100%;
+ margin: 0em 0em @pointingMenuDistance;
+ border-radius: @pointingUpwardMenuBorderRadius;
+}
+.ui.upward.pointing.dropdown > .menu:after,
+.ui.upward.top.pointing.dropdown > .menu:after {
+ top: 100%;
+ bottom: auto;
+ box-shadow: @pointingUpwardArrowBoxShadow;
+ margin: @pointingArrowOffset 0em 0em;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/embed.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/embed.js b/semantic/src/definitions/modules/embed.js
new file mode 100644
index 0000000..6ed6f5a
--- /dev/null
+++ b/semantic/src/definitions/modules/embed.js
@@ -0,0 +1,696 @@
+/*!
+ * # Semantic UI - Embed
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.embed = function(parameters) {
+
+ var
+ $allModules = $(this),
+
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.embed.settings, parameters)
+ : $.extend({}, $.fn.embed.settings),
+
+ selector = settings.selector,
+ className = settings.className,
+ sources = settings.sources,
+ error = settings.error,
+ metadata = settings.metadata,
+ namespace = settings.namespace,
+ templates = settings.templates,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $window = $(window),
+ $module = $(this),
+ $placeholder = $module.find(selector.placeholder),
+ $icon = $module.find(selector.icon),
+ $embed = $module.find(selector.embed),
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ module.debug('Initializing embed');
+ module.determine.autoplay();
+ module.create();
+ module.bind.events();
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous instance of embed');
+ module.reset();
+ $module
+ .removeData(moduleNamespace)
+ .off(eventNamespace)
+ ;
+ },
+
+ refresh: function() {
+ module.verbose('Refreshing selector cache');
+ $placeholder = $module.find(selector.placeholder);
+ $icon = $module.find(selector.icon);
+ $embed = $module.find(selector.embed);
+ },
+
+ bind: {
+ events: function() {
+ if( module.has.placeholder() ) {
+ module.debug('Adding placeholder events');
+ $module
+ .on('click' + eventNamespace, selector.placeholder, module.createAndShow)
+ .on('click' + eventNamespace, selector.icon, module.createAndShow)
+ ;
+ }
+ }
+ },
+
+ create: function() {
+ var
+ placeholder = module.get.placeholder()
+ ;
+ if(placeholder) {
+ module.createPlaceholder();
+ }
+ else {
+ module.createAndShow();
+ }
+ },
+
+ createPlaceholder: function(placeholder) {
+ var
+ icon = module.get.icon(),
+ url = module.get.url(),
+ embed = module.generate.embed(url)
+ ;
+ placeholder = placeholder || module.get.placeholder();
+ $module.html( templates.placeholder(placeholder, icon) );
+ module.debug('Creating placeholder for embed', placeholder, icon);
+ },
+
+ createEmbed: function(url) {
+ module.refresh();
+ url = url || module.get.url();
+ $embed = $('<div/>')
+ .addClass(className.embed)
+ .html( module.generate.embed(url) )
+ .appendTo($module)
+ ;
+ settings.onCreate.call(element, url);
+ module.debug('Creating embed object', $embed);
+ },
+
+ changeEmbed: function(url) {
+ $embed
+ .html( module.generate.embed(url) )
+ ;
+ },
+
+ createAndShow: function() {
+ module.createEmbed();
+ module.show();
+ },
+
+ // sets new embed
+ change: function(source, id, url) {
+ module.debug('Changing video to ', source, id, url);
+ $module
+ .data(metadata.source, source)
+ .data(metadata.id, id)
+ ;
+ if(url) {
+ $module.data(metadata.url, url);
+ }
+ else {
+ $module.removeData(metadata.url);
+ }
+ if(module.has.embed()) {
+ module.changeEmbed();
+ }
+ else {
+ module.create();
+ }
+ },
+
+ // clears embed
+ reset: function() {
+ module.debug('Clearing embed and showing placeholder');
+ module.remove.active();
+ module.remove.embed();
+ module.showPlaceholder();
+ settings.onReset.call(element);
+ },
+
+ // shows current embed
+ show: function() {
+ module.debug('Showing embed');
+ module.set.active();
+ settings.onDisplay.call(element);
+ },
+
+ hide: function() {
+ module.debug('Hiding embed');
+ module.showPlaceholder();
+ },
+
+ showPlaceholder: function() {
+ module.debug('Showing placeholder image');
+ module.remove.active();
+ settings.onPlaceholderDisplay.call(element);
+ },
+
+ get: {
+ id: function() {
+ return settings.id || $module.data(metadata.id);
+ },
+ placeholder: function() {
+ return settings.placeholder || $module.data(metadata.placeholder);
+ },
+ icon: function() {
+ return (settings.icon)
+ ? settings.icon
+ : ($module.data(metadata.icon) !== undefined)
+ ? $module.data(metadata.icon)
+ : module.determine.icon()
+ ;
+ },
+ source: function(url) {
+ return (settings.source)
+ ? settings.source
+ : ($module.data(metadata.source) !== undefined)
+ ? $module.data(metadata.source)
+ : module.determine.source()
+ ;
+ },
+ type: function() {
+ var source = module.get.source();
+ return (sources[source] !== undefined)
+ ? sources[source].type
+ : false
+ ;
+ },
+ url: function() {
+ return (settings.url)
+ ? settings.url
+ : ($module.data(metadata.url) !== undefined)
+ ? $module.data(metadata.url)
+ : module.determine.url()
+ ;
+ }
+ },
+
+ determine: {
+ autoplay: function() {
+ if(module.should.autoplay()) {
+ settings.autoplay = true;
+ }
+ },
+ source: function(url) {
+ var
+ matchedSource = false
+ ;
+ url = url || module.get.url();
+ if(url) {
+ $.each(sources, function(name, source) {
+ if(url.search(source.domain) !== -1) {
+ matchedSource = name;
+ return false;
+ }
+ });
+ }
+ return matchedSource;
+ },
+ icon: function() {
+ var
+ source = module.get.source()
+ ;
+ return (sources[source] !== undefined)
+ ? sources[source].icon
+ : false
+ ;
+ },
+ url: function() {
+ var
+ id = settings.id || $module.data(metadata.id),
+ source = settings.source || $module.data(metadata.source),
+ url
+ ;
+ url = (sources[source] !== undefined)
+ ? sources[source].url.replace('{id}', id)
+ : false
+ ;
+ if(url) {
+ $module.data(metadata.url, url);
+ }
+ return url;
+ }
+ },
+
+
+ set: {
+ active: function() {
+ $module.addClass(className.active);
+ }
+ },
+
+ remove: {
+ active: function() {
+ $module.removeClass(className.active);
+ },
+ embed: function() {
+ $embed.empty();
+ }
+ },
+
+ encode: {
+ parameters: function(parameters) {
+ var
+ urlString = [],
+ index
+ ;
+ for (index in parameters) {
+ urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );
+ }
+ return urlString.join('&');
+ }
+ },
+
+ generate: {
+ embed: function(url) {
+ module.debug('Generating embed html');
+ var
+ source = module.get.source(),
+ html,
+ parameters
+ ;
+ url = module.get.url(url);
+ if(url) {
+ parameters = module.generate.parameters(source);
+ html = templates.iframe(url, parameters);
+ }
+ else {
+ module.error(error.noURL, $module);
+ }
+ return html;
+ },
+ parameters: function(source, extraParameters) {
+ var
+ parameters = (sources[source] && sources[source].parameters !== undefined)
+ ? sources[source].parameters(settings)
+ : {}
+ ;
+ extraParameters = extraParameters || settings.parameters;
+ if(extraParameters) {
+ parameters = $.extend({}, parameters, extraParameters);
+ }
+ parameters = settings.onEmbed(parameters);
+ return module.encode.parameters(parameters);
+ }
+ },
+
+ has: {
+ embed: function() {
+ return ($embed.length > 0);
+ },
+ placeholder: function() {
+ return settings.placeholder || $module.data(metadata.placeholder);
+ }
+ },
+
+ should: {
+ autoplay: function() {
+ return (settings.autoplay === 'auto')
+ ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)
+ : settings.autoplay
+ ;
+ }
+ },
+
+ is: {
+ video: function() {
+ return module.get.type() == 'video';
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if($allModules.length > 1) {
+ title += ' ' + '(' + $allModules.length + ')';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.embed.settings = {
+
+ name : 'Embed',
+ namespace : 'embed',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ icon : false,
+ source : false,
+ url : false,
+ id : false,
+
+ // standard video settings
+ autoplay : 'auto',
+ color : '#444444',
+ hd : true,
+ brandedUI : false,
+
+ // additional parameters to include with the embed
+ parameters: false,
+
+ onDisplay : function() {},
+ onPlaceholderDisplay : function() {},
+ onReset : function() {},
+ onCreate : function(url) {},
+ onEmbed : function(parameters) {
+ return parameters;
+ },
+
+ metadata : {
+ id : 'id',
+ icon : 'icon',
+ placeholder : 'placeholder',
+ source : 'source',
+ url : 'url'
+ },
+
+ error : {
+ noURL : 'No URL specified',
+ method : 'The method you called is not defined'
+ },
+
+ className : {
+ active : 'active',
+ embed : 'embed'
+ },
+
+ selector : {
+ embed : '.embed',
+ placeholder : '.placeholder',
+ icon : '.icon'
+ },
+
+ sources: {
+ youtube: {
+ name : 'youtube',
+ type : 'video',
+ icon : 'video play',
+ domain : 'youtube.com',
+ url : '//www.youtube.com/embed/{id}',
+ parameters: function(settings) {
+ return {
+ autohide : !settings.brandedUI,
+ autoplay : settings.autoplay,
+ color : settings.color || undefined,
+ hq : settings.hd,
+ jsapi : settings.api,
+ modestbranding : !settings.brandedUI
+ };
+ }
+ },
+ vimeo: {
+ name : 'vimeo',
+ type : 'video',
+ icon : 'video play',
+ domain : 'vimeo.com',
+ url : '//player.vimeo.com/video/{id}',
+ parameters: function(settings) {
+ return {
+ api : settings.api,
+ autoplay : settings.autoplay,
+ byline : settings.brandedUI,
+ color : settings.color || undefined,
+ portrait : settings.brandedUI,
+ title : settings.brandedUI
+ };
+ }
+ }
+ },
+
+ templates: {
+ iframe : function(url, parameters) {
+ var src = url;
+ if (parameters) {
+ src += '?' + parameters;
+ }
+ return ''
+ + '<iframe src="' + src + '"'
+ + ' width="100%" height="100%"'
+ + ' frameborder="0" scrolling="no" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'
+ ;
+ },
+ placeholder : function(image, icon) {
+ var
+ html = ''
+ ;
+ if(icon) {
+ html += '<i class="' + icon + ' icon"></i>';
+ }
+ if(image) {
+ html += '<img class="placeholder" src="' + image + '">';
+ }
+ return html;
+ }
+ },
+
+ // NOT YET IMPLEMENTED
+ api : false,
+ onPause : function() {},
+ onPlay : function() {},
+ onStop : function() {}
+
+};
+
+
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/embed.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/embed.less b/semantic/src/definitions/modules/embed.less
new file mode 100644
index 0000000..b44d4e6
--- /dev/null
+++ b/semantic/src/definitions/modules/embed.less
@@ -0,0 +1,163 @@
+/*!
+ * # Semantic UI - Video
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'embed';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Types
+*******************************/
+
+.ui.embed {
+ position: relative;
+ position: relative;
+ max-width: 100%;
+ height: 0px;
+ overflow: hidden;
+ background: @background;
+ padding-bottom: @widescreenRatio;
+}
+
+/*-----------------
+ Embedded Content
+------------------*/
+
+.ui.embed iframe,
+.ui.embed embed,
+.ui.embed object {
+ position: absolute;
+ border: none;
+ width: 100%;
+ height: 100%;
+ top: 0px;
+ left: 0px;
+ margin: 0em;
+ padding: 0em;
+}
+
+/*-----------------
+ Embed
+------------------*/
+
+.ui.embed > .embed {
+ display: none;
+}
+
+/*--------------
+ Placeholder
+---------------*/
+
+.ui.embed > .placeholder {
+ position: absolute;
+ cursor: pointer;
+ top: 0px;
+ left: 0px;
+ display: block;
+ width: 100%;
+ height: 100%;
+ background-color: @placeholderBackground;
+}
+
+/*--------------
+ Icon
+---------------*/
+
+.ui.embed > .icon {
+ cursor: pointer;
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+}
+.ui.embed > .icon:after {
+ position: absolute;
+ top: 0%;
+ left: 0%;
+ width: 100%;
+ height: 100%;
+ z-index: 3;
+ content: '';
+ background: @placeholderBackground;
+ opacity: @placeholderBackgroundOpacity;
+ transition: @placeholderBackgroundTransition;
+}
+.ui.embed > .icon:before {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 4;
+ transform: translateX(-50%) translateY(-50%);
+
+ color: @iconColor;
+ font-size: @iconSize;
+ text-shadow: @iconShadow;
+ transition: @iconTransition;
+ z-index: @iconZIndex;
+}
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Hover
+---------------*/
+
+.ui.embed .icon:hover:after {
+ background: @hoverPlaceholderBackground;
+ opacity: @hoverPlaceholderBackgroundOpacity;
+}
+.ui.embed .icon:hover:before {
+ color: @hoverIconColor;
+}
+
+/*--------------
+ Active
+---------------*/
+
+.ui.active.embed > .icon,
+.ui.active.embed > .placeholder {
+ display: none;
+}
+.ui.active.embed > .embed {
+ display: block;
+}
+
+.loadUIOverrides();
+
+
+/*******************************
+ Variations
+*******************************/
+
+.ui.square.embed {
+ padding-bottom: @squareRatio;
+}
+.ui[class*="4:3"].embed {
+ padding-bottom: @standardRatio;
+}
+.ui[class*="16:9"].embed {
+ padding-bottom: @widescreenRatio;
+}
+.ui[class*="21:9"].embed {
+ padding-bottom: @ultraWidescreenRatio;
+}
+
+
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/modal.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/modal.js b/semantic/src/definitions/modules/modal.js
new file mode 100644
index 0000000..07b0409
--- /dev/null
+++ b/semantic/src/definitions/modules/modal.js
@@ -0,0 +1,907 @@
+/*!
+ * # Semantic UI - Modal
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.modal = function(parameters) {
+ var
+ $allModules = $(this),
+ $window = $(window),
+ $document = $(document),
+ $body = $('body'),
+
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); },
+
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.modal.settings, parameters)
+ : $.extend({}, $.fn.modal.settings),
+
+ selector = settings.selector,
+ className = settings.className,
+ namespace = settings.namespace,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $module = $(this),
+ $context = $(settings.context),
+ $close = $module.find(selector.close),
+
+ $allModals,
+ $otherModals,
+ $focusedElement,
+ $dimmable,
+ $dimmer,
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ elementEventNamespace,
+ id,
+ observer,
+ module
+ ;
+ module = {
+
+ initialize: function() {
+ module.verbose('Initializing dimmer', $context);
+
+ module.create.id();
+ module.create.dimmer();
+ module.refreshModals();
+
+ module.bind.events();
+ if(settings.observeChanges) {
+ module.observeChanges();
+ }
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of modal');
+ instance = module;
+ $module
+ .data(moduleNamespace, instance)
+ ;
+ },
+
+ create: {
+ dimmer: function() {
+ var
+ defaultSettings = {
+ debug : settings.debug,
+ dimmerName : 'modals',
+ duration : {
+ show : settings.duration,
+ hide : settings.duration
+ }
+ },
+ dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)
+ ;
+ if(settings.inverted) {
+ dimmerSettings.variation = (dimmerSettings.variation !== undefined)
+ ? dimmerSettings.variation + ' inverted'
+ : 'inverted'
+ ;
+ }
+ if($.fn.dimmer === undefined) {
+ module.error(error.dimmer);
+ return;
+ }
+ module.debug('Creating dimmer with settings', dimmerSettings);
+ $dimmable = $context.dimmer(dimmerSettings);
+ if(settings.detachable) {
+ module.verbose('Modal is detachable, moving content into dimmer');
+ $dimmable.dimmer('add content', $module);
+ }
+ else {
+ module.set.undetached();
+ }
+ if(settings.blurring) {
+ $dimmable.addClass(className.blurring);
+ }
+ $dimmer = $dimmable.dimmer('get dimmer');
+ },
+ id: function() {
+ id = (Math.random().toString(16) + '000000000').substr(2,8);
+ elementEventNamespace = '.' + id;
+ module.verbose('Creating unique id for element', id);
+ }
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous modal');
+ $module
+ .removeData(moduleNamespace)
+ .off(eventNamespace)
+ ;
+ $window.off(elementEventNamespace);
+ $dimmer.off(elementEventNamespace);
+ $close.off(eventNamespace);
+ $context.dimmer('destroy');
+ },
+
+ observeChanges: function() {
+ if('MutationObserver' in window) {
+ observer = new MutationObserver(function(mutations) {
+ module.debug('DOM tree modified, refreshing');
+ module.refresh();
+ });
+ observer.observe(element, {
+ childList : true,
+ subtree : true
+ });
+ module.debug('Setting up mutation observer', observer);
+ }
+ },
+
+ refresh: function() {
+ module.remove.scrolling();
+ module.cacheSizes();
+ module.set.screenHeight();
+ module.set.type();
+ module.set.position();
+ },
+
+ refreshModals: function() {
+ $otherModals = $module.siblings(selector.modal);
+ $allModals = $otherModals.add($module);
+ },
+
+ attachEvents: function(selector, event) {
+ var
+ $toggle = $(selector)
+ ;
+ event = $.isFunction(module[event])
+ ? module[event]
+ : module.toggle
+ ;
+ if($toggle.length > 0) {
+ module.debug('Attaching modal events to element', selector, event);
+ $toggle
+ .off(eventNamespace)
+ .on('click' + eventNamespace, event)
+ ;
+ }
+ else {
+ module.error(error.notFound, selector);
+ }
+ },
+
+ bind: {
+ events: function() {
+ module.verbose('Attaching events');
+ $module
+ .on('click' + eventNamespace, selector.close, module.event.close)
+ .on('click' + eventNamespace, selector.approve, module.event.approve)
+ .on('click' + eventNamespace, selector.deny, module.event.deny)
+ ;
+ $window
+ .on('resize' + elementEventNamespace, module.event.resize)
+ ;
+ }
+ },
+
+ get: {
+ id: function() {
+ return (Math.random().toString(16) + '000000000').substr(2,8);
+ }
+ },
+
+ event: {
+ approve: function() {
+ if(settings.onApprove.call(element, $(this)) === false) {
+ module.verbose('Approve callback returned false cancelling hide');
+ return;
+ }
+ module.hide();
+ },
+ deny: function() {
+ if(settings.onDeny.call(element, $(this)) === false) {
+ module.verbose('Deny callback returned false cancelling hide');
+ return;
+ }
+ module.hide();
+ },
+ close: function() {
+ module.hide();
+ },
+ click: function(event) {
+ var
+ $target = $(event.target),
+ isInModal = ($target.closest(selector.modal).length > 0),
+ isInDOM = $.contains(document.documentElement, event.target)
+ ;
+ if(!isInModal && isInDOM) {
+ module.debug('Dimmer clicked, hiding all modals');
+ if( module.is.active() ) {
+ module.remove.clickaway();
+ if(settings.allowMultiple) {
+ module.hide();
+ }
+ else {
+ module.hideAll();
+ }
+ }
+ }
+ },
+ debounce: function(method, delay) {
+ clearTimeout(module.timer);
+ module.timer = setTimeout(method, delay);
+ },
+ keyboard: function(event) {
+ var
+ keyCode = event.which,
+ escapeKey = 27
+ ;
+ if(keyCode == escapeKey) {
+ if(settings.closable) {
+ module.debug('Escape key pressed hiding modal');
+ module.hide();
+ }
+ else {
+ module.debug('Escape key pressed, but closable is set to false');
+ }
+ event.preventDefault();
+ }
+ },
+ resize: function() {
+ if( $dimmable.dimmer('is active') ) {
+ requestAnimationFrame(module.refresh);
+ }
+ }
+ },
+
+ toggle: function() {
+ if( module.is.active() || module.is.animating() ) {
+ module.hide();
+ }
+ else {
+ module.show();
+ }
+ },
+
+ show: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ module.refreshModals();
+ module.showModal(callback);
+ },
+
+ hide: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ module.refreshModals();
+ module.hideModal(callback);
+ },
+
+ showModal: function(callback) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if( module.is.animating() || !module.is.active() ) {
+
+ module.showDimmer();
+ module.cacheSizes();
+ module.set.position();
+ module.set.screenHeight();
+ module.set.type();
+ module.set.clickaway();
+
+ if( !settings.allowMultiple && module.others.active() ) {
+ module.hideOthers(module.showModal);
+ }
+ else {
+ settings.onShow.call(element);
+ if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
+ module.debug('Showing modal with css animations');
+ $module
+ .transition({
+ debug : settings.debug,
+ animation : settings.transition + ' in',
+ queue : settings.queue,
+ duration : settings.duration,
+ useFailSafe : true,
+ onComplete : function() {
+ settings.onVisible.apply(element);
+ module.add.keyboardShortcuts();
+ module.save.focus();
+ module.set.active();
+ if(settings.autofocus) {
+ module.set.autofocus();
+ }
+ callback();
+ }
+ })
+ ;
+ }
+ else {
+ module.error(error.noTransition);
+ }
+ }
+ }
+ else {
+ module.debug('Modal is already visible');
+ }
+ },
+
+ hideModal: function(callback, keepDimmed) {
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ module.debug('Hiding modal');
+ if(settings.onHide.call(element, $(this)) === false) {
+ module.verbose('Hide callback returned false cancelling hide');
+ return;
+ }
+
+ if( module.is.animating() || module.is.active() ) {
+ if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
+ module.remove.active();
+ $module
+ .transition({
+ debug : settings.debug,
+ animation : settings.transition + ' out',
+ queue : settings.queue,
+ duration : settings.duration,
+ useFailSafe : true,
+ onStart : function() {
+ if(!module.others.active() && !keepDimmed) {
+ module.hideDimmer();
+ }
+ module.remove.keyboardShortcuts();
+ },
+ onComplete : function() {
+ settings.onHidden.call(element);
+ module.restore.focus();
+ callback();
+ }
+ })
+ ;
+ }
+ else {
+ module.error(error.noTransition);
+ }
+ }
+ },
+
+ showDimmer: function() {
+ if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {
+ module.debug('Showing dimmer');
+ $dimmable.dimmer('show');
+ }
+ else {
+ module.debug('Dimmer already visible');
+ }
+ },
+
+ hideDimmer: function() {
+ if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {
+ $dimmable.dimmer('hide', function() {
+ module.remove.clickaway();
+ module.remove.screenHeight();
+ });
+ }
+ else {
+ module.debug('Dimmer is not visible cannot hide');
+ return;
+ }
+ },
+
+ hideAll: function(callback) {
+ var
+ $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)
+ ;
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if( $visibleModals.length > 0 ) {
+ module.debug('Hiding all visible modals');
+ module.hideDimmer();
+ $visibleModals
+ .modal('hide modal', callback)
+ ;
+ }
+ },
+
+ hideOthers: function(callback) {
+ var
+ $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)
+ ;
+ callback = $.isFunction(callback)
+ ? callback
+ : function(){}
+ ;
+ if( $visibleModals.length > 0 ) {
+ module.debug('Hiding other modals', $otherModals);
+ $visibleModals
+ .modal('hide modal', callback, true)
+ ;
+ }
+ },
+
+ others: {
+ active: function() {
+ return ($otherModals.filter('.' + className.active).length > 0);
+ },
+ animating: function() {
+ return ($otherModals.filter('.' + className.animating).length > 0);
+ }
+ },
+
+
+ add: {
+ keyboardShortcuts: function() {
+ module.verbose('Adding keyboard shortcuts');
+ $document
+ .on('keyup' + eventNamespace, module.event.keyboard)
+ ;
+ }
+ },
+
+ save: {
+ focus: function() {
+ $focusedElement = $(document.activeElement).blur();
+ }
+ },
+
+ restore: {
+ focus: function() {
+ if($focusedElement && $focusedElement.length > 0) {
+ $focusedElement.focus();
+ }
+ }
+ },
+
+ remove: {
+ active: function() {
+ $module.removeClass(className.active);
+ },
+ clickaway: function() {
+ if(settings.closable) {
+ $dimmer
+ .off('click' + elementEventNamespace)
+ ;
+ }
+ },
+ bodyStyle: function() {
+ if($body.attr('style') === '') {
+ module.verbose('Removing style attribute');
+ $body.removeAttr('style');
+ }
+ },
+ screenHeight: function() {
+ module.debug('Removing page height');
+ $body
+ .css('height', '')
+ ;
+ },
+ keyboardShortcuts: function() {
+ module.verbose('Removing keyboard shortcuts');
+ $document
+ .off('keyup' + eventNamespace)
+ ;
+ },
+ scrolling: function() {
+ $dimmable.removeClass(className.scrolling);
+ $module.removeClass(className.scrolling);
+ }
+ },
+
+ cacheSizes: function() {
+ var
+ modalHeight = $module.outerHeight()
+ ;
+ if(module.cache === undefined || modalHeight !== 0) {
+ module.cache = {
+ pageHeight : $(document).outerHeight(),
+ height : modalHeight + settings.offset,
+ contextHeight : (settings.context == 'body')
+ ? $(window).height()
+ : $dimmable.height()
+ };
+ }
+ module.debug('Caching modal and container sizes', module.cache);
+ },
+
+ can: {
+ fit: function() {
+ return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);
+ }
+ },
+
+ is: {
+ active: function() {
+ return $module.hasClass(className.active);
+ },
+ animating: function() {
+ return $module.transition('is supported')
+ ? $module.transition('is animating')
+ : $module.is(':visible')
+ ;
+ },
+ scrolling: function() {
+ return $dimmable.hasClass(className.scrolling);
+ },
+ modernBrowser: function() {
+ // appName for IE11 reports 'Netscape' can no longer use
+ return !(window.ActiveXObject || "ActiveXObject" in window);
+ }
+ },
+
+ set: {
+ autofocus: function() {
+ var
+ $inputs = $module.find(':input').filter(':visible'),
+ $autofocus = $inputs.filter('[autofocus]'),
+ $input = ($autofocus.length > 0)
+ ? $autofocus.first()
+ : $inputs.first()
+ ;
+ if($input.length > 0) {
+ $input.focus();
+ }
+ },
+ clickaway: function() {
+ if(settings.closable) {
+ $dimmer
+ .on('click' + elementEventNamespace, module.event.click)
+ ;
+ }
+ },
+ screenHeight: function() {
+ if( module.can.fit() ) {
+ $body.css('height', '');
+ }
+ else {
+ module.debug('Modal is taller than page content, resizing page height');
+ $body
+ .css('height', module.cache.height + (settings.padding * 2) )
+ ;
+ }
+ },
+ active: function() {
+ $module.addClass(className.active);
+ },
+ scrolling: function() {
+ $dimmable.addClass(className.scrolling);
+ $module.addClass(className.scrolling);
+ },
+ type: function() {
+ if(module.can.fit()) {
+ module.verbose('Modal fits on screen');
+ if(!module.others.active() && !module.others.animating()) {
+ module.remove.scrolling();
+ }
+ }
+ else {
+ module.verbose('Modal cannot fit on screen setting to scrolling');
+ module.set.scrolling();
+ }
+ },
+ position: function() {
+ module.verbose('Centering modal on page', module.cache);
+ if(module.can.fit()) {
+ $module
+ .css({
+ top: '',
+ marginTop: -(module.cache.height / 2)
+ })
+ ;
+ }
+ else {
+ $module
+ .css({
+ marginTop : '',
+ top : $document.scrollTop()
+ })
+ ;
+ }
+ },
+ undetached: function() {
+ $dimmable.addClass(className.undetached);
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.modal.settings = {
+
+ name : 'Modal',
+ namespace : 'modal',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ observeChanges : false,
+
+ allowMultiple : false,
+ detachable : true,
+ closable : true,
+ autofocus : true,
+
+ inverted : false,
+ blurring : false,
+
+ dimmerSettings : {
+ closable : false,
+ useCSS : true
+ },
+
+
+ context : 'body',
+
+ queue : false,
+ duration : 500,
+ offset : 0,
+ transition : 'scale',
+
+ // padding with edge of page
+ padding : 50,
+
+ // called before show animation
+ onShow : function(){},
+
+ // called after show animation
+ onVisible : function(){},
+
+ // called before hide animation
+ onHide : function(){ return true; },
+
+ // called after hide animation
+ onHidden : function(){},
+
+ // called after approve selector match
+ onApprove : function(){ return true; },
+
+ // called after deny selector match
+ onDeny : function(){ return true; },
+
+ selector : {
+ close : '> .close',
+ approve : '.actions .positive, .actions .approve, .actions .ok',
+ deny : '.actions .negative, .actions .deny, .actions .cancel',
+ modal : '.ui.modal'
+ },
+ error : {
+ dimmer : 'UI Dimmer, a required component is not included in this page',
+ method : 'The method you called is not defined.',
+ notFound : 'The element you specified could not be found'
+ },
+ className : {
+ active : 'active',
+ animating : 'animating',
+ blurring : 'blurring',
+ scrolling : 'scrolling',
+ undetached : 'undetached'
+ }
+};
+
+
+})( jQuery, window, document );
[44/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/containers/App.jsx
----------------------------------------------------------------------
diff --git a/public/containers/App.jsx b/public/containers/App.jsx
new file mode 100644
index 0000000..5110ee0
--- /dev/null
+++ b/public/containers/App.jsx
@@ -0,0 +1,40 @@
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+
+class App extends Component {
+ render() {
+ const { children, id, name, settings, results, users } = this.props;
+
+ return(
+ <div>
+ {React.cloneElement(children, {
+ id,
+ name,
+ settings,
+ results,
+ users,
+ })}
+ </div>
+ );
+ }
+}
+
+App.propTypes = {
+ id : PropTypes.number,
+ name : PropTypes.string,
+ settings : PropTypes.object,
+ results : PropTypes.object,
+ users : PropTypes.array,
+};
+
+function mapStateToProps(state, ownProps) {
+ return {
+ id : state.app.id,
+ name : state.app.name,
+ settings : state.app.settings,
+ results : state.app.results,
+ users : state.app.users,
+ };
+}
+
+export default connect(mapStateToProps)(App);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/containers/Main.jsx
----------------------------------------------------------------------
diff --git a/public/containers/Main.jsx b/public/containers/Main.jsx
new file mode 100644
index 0000000..e03ecca
--- /dev/null
+++ b/public/containers/Main.jsx
@@ -0,0 +1,89 @@
+import React, { Component, PropTypes } from 'react';
+import { Link } from 'react-router';
+import { connect } from 'react-redux';
+import { logIn, logOut } from '../actions';
+
+class Main extends Component {
+ constructor(props) {
+ super(props);
+ this.handleLogin = this.handleLogin.bind(this);
+ this.handleLogout = this.handleLogout.bind(this);
+ }
+
+ handleLogin () {
+ this.props.logIn();
+ }
+
+ handleLogout () {
+ this.props.logOut();
+ }
+
+ render () {
+ const { children, isLoggedIn, username } = this.props;
+ return (
+ <div id='main-container'>
+ <div className='site-header'>
+ <div className='ui brown inverted padded top fixed borderless menu'>
+ <div className='ui container'>
+
+ <Link to='/'>
+ <h3 className='ui inverted header item'>Tap</h3>
+ </Link>
+
+ <div className='right menu'>
+ {
+ // <div className='item' onClick={isLoggedIn ? this.handleLogout : this.handleLogin }>
+ // {isLoggedIn ? 'Log Out' : 'Log In'}
+ // </div>
+ }
+ <div className='item'>
+ <Link to='/user'>
+ Profile
+ </Link>
+ </div>
+ <div className='item'>
+ <Link to='/user/settings'>
+ Settings
+ </Link>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div id='page-wrapper'>
+ {children}
+ </div>
+
+ <div className='site-footer'>
+ <div className='ui container'>
+ <div className='ui footer page brown inverted segment'>
+ <div className='ui center aligned container'>
+ <div className='footer-text'>Copyright Tap 2016</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
+
+Main.propTypes = {
+ children : PropTypes.node,
+ isLoggedIn : PropTypes.bool.isRequired,
+ username : PropTypes.string,
+};
+
+function mapStateToProps(state, ownProps) {
+ return {
+ isLoggedIn : state.auth.isLoggedIn,
+ email : state.auth.isLoggedIn ? state.user.email : null,
+ };
+}
+
+export default connect(mapStateToProps, {
+ logIn,
+ logOut,
+})(Main);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/containers/Org.jsx
----------------------------------------------------------------------
diff --git a/public/containers/Org.jsx b/public/containers/Org.jsx
new file mode 100644
index 0000000..7c90080
--- /dev/null
+++ b/public/containers/Org.jsx
@@ -0,0 +1,43 @@
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+
+class Org extends Component {
+ render() {
+ const { children, id, name, description, users, apps, settings } = this.props;
+
+ return (
+ <div>
+ {React.cloneElement(children, {
+ id,
+ name,
+ description,
+ users,
+ apps,
+ settings,
+ })}
+ </div>
+ );
+ }
+}
+
+Org.propTypes = {
+ id : PropTypes.number,
+ name : PropTypes.string,
+ description : PropTypes.string,
+ users : PropTypes.array,
+ apps : PropTypes.array,
+ settings : PropTypes.object,
+};
+
+function mapStateToProps(state, ownProps) {
+ return {
+ id : state.org.id,
+ name : state.org.name,
+ description : state.org.description,
+ users : state.org.users,
+ apps : state.org.apps,
+ settings : state.org.settings,
+ };
+}
+
+export default connect(mapStateToProps)(Org);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/containers/User.jsx
----------------------------------------------------------------------
diff --git a/public/containers/User.jsx b/public/containers/User.jsx
new file mode 100644
index 0000000..76bb291
--- /dev/null
+++ b/public/containers/User.jsx
@@ -0,0 +1,37 @@
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+
+class User extends Component {
+ render() {
+ const { children, email, settings, orgs, apps } = this.props;
+
+ return (
+ <div>
+ {React.cloneElement(children, {
+ email,
+ settings,
+ orgs,
+ apps,
+ })}
+ </div>
+ );
+ }
+}
+
+User.propTypes = {
+ email : PropTypes.string.isRequired,
+ settings : PropTypes.object.isRequired,
+ orgs : PropTypes.array,
+ apps : PropTypes.array,
+};
+
+function mapStateToProps(state, ownProps) {
+ return {
+ email : state.user.email,
+ settings : state.user.settings,
+ orgs : state.user.orgs,
+ apps : state.user.apps,
+ };
+}
+
+export default connect(mapStateToProps)(User);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/index.jsx
----------------------------------------------------------------------
diff --git a/public/index.jsx b/public/index.jsx
new file mode 100644
index 0000000..0a94470
--- /dev/null
+++ b/public/index.jsx
@@ -0,0 +1,63 @@
+import React from 'react';
+import { render } from 'react-dom';
+import { Router, Route, IndexRoute, Link, browserHistory } from 'react-router';
+import { Provider } from 'react-redux';
+
+import configureStore from './store/configureStore';
+
+import Main from './containers/Main';
+import Home from './components/Home';
+// import Login from './containers/Login';
+// import Logout from './containers/Logout';
+// import SignUp from './containers/SignUp';
+import User from './containers/User';
+import UserProfile from './components/UserProfile';
+import UserSettings from './components/UserSettings';
+import Org from './containers/Org';
+import OrgProfile from './components/OrgProfile';
+import OrgSettings from './components/OrgSettings';
+// import OrgNew from './containers/OrgNew';
+import App from './containers/App';
+import AppProfile from './components/AppProfile';
+import AppSettings from './components/AppSettings';
+import AppResults from './components/AppResults';
+// import AppNew from './containers/AppNew';
+
+const store = configureStore();
+
+render((
+ <Provider store={store}>
+ <Router history={browserHistory}>
+ <Route path='/' component={Main}>
+ <IndexRoute component={Home} />
+
+ {
+ // <Route path='login' component={Login} />
+ // <Route path='logout' component={Logout} />
+ // <Route path='signup' component={SignUp} />
+ }
+
+ <Route path='user' component={User}>
+ <IndexRoute component={UserProfile} />
+ <Route path='settings' component={UserSettings} />
+ </Route>
+
+ <Route path='org/:id' component={Org}>
+ <IndexRoute component={OrgProfile} />
+ <Route path='settings' component={OrgSettings} />
+ </Route>
+
+ <Route path='app/:id' component={App}>
+ <IndexRoute component={AppProfile} />
+ <Route path='settings' component={AppSettings} />
+ <Route path='results' component={AppResults} />
+ </Route>
+
+ {
+ // <Route path='org/new' component={OrgNew} />
+ // <Route path='app/new' component={AppNew} />
+ }
+ </Route>
+ </Router>
+ </Provider>
+), document.getElementById('react-container'))
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/reducers/app.js
----------------------------------------------------------------------
diff --git a/public/reducers/app.js b/public/reducers/app.js
new file mode 100644
index 0000000..852345a
--- /dev/null
+++ b/public/reducers/app.js
@@ -0,0 +1,99 @@
+import { REQUEST_APP, RECEIVE_APP, REQUEST_APP_UPDATE, CONFIRM_APP_UPDATE, REQUEST_APP_RESULTS, RECEIVE_APP_RESULTS } from '../constants/ActionTypes';
+import merge from 'lodash/merge';
+
+import graphData from '../neon_graph.js';
+import countsData from '../neon_counts.js';
+
+const initialAppState = {
+ id : 7,
+ name : 'Ale',
+ settings : {
+ setting1 : 'a setting',
+ },
+ users : [
+ {
+ id : 1,
+ email : 'test@test.com'
+ },
+ {
+ id : 2,
+ email : 'test2@test.com'
+ },
+ ],
+ results : {
+ counts : countsData,
+ // counts : [
+ // {
+ // group : 'map',
+ // activities : [
+ // {
+ // id : 'zoom',
+ // count : 100,
+ // },
+ // {
+ // id : 'pan',
+ // count : 27,
+ // },
+ // {
+ // id : 'resize',
+ // count : 74,
+ // },
+ // ]
+ // },
+ // {
+ // group : 'linechart',
+ // activities : [
+ // {
+ // id : 'tooltip',
+ // count : 51,
+ // },
+ // {
+ // id : 'select',
+ // count : 88,
+ // },
+ // {
+ // id : 'resize',
+ // count : 12,
+ // },
+ // ]
+ // },
+ // {
+ // group : 'table',
+ // activities : [
+ // {
+ // id : 'reorder',
+ // count : 11,
+ // },
+ // {
+ // id : 'resize',
+ // count : 16,
+ // },
+ // {
+ // id : 'filter',
+ // count : 67,
+ // },
+ // ]
+ // },
+ // ],
+ graph : graphData,
+ },
+};
+
+export default function app (state = initialAppState, action) {
+ switch (action.type) {
+ case REQUEST_APP:
+ return merge({}, state, {});
+ case RECEIVE_APP:
+ return merge({}, state, action.app);
+ case REQUEST_APP_UPDATE:
+ return merge({}, state, action.update);
+ case CONFIRM_APP_UPDATE:
+ return merge({}, state, action.saved);
+ case REQUEST_APP_RESULTS:
+ return merge({}, state, {});
+ case RECEIVE_APP_RESULTS:
+ return merge({}, state, action.results);
+ default:
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/reducers/auth.js
----------------------------------------------------------------------
diff --git a/public/reducers/auth.js b/public/reducers/auth.js
new file mode 100644
index 0000000..935323d
--- /dev/null
+++ b/public/reducers/auth.js
@@ -0,0 +1,17 @@
+import { LOG_IN, LOG_OUT } from '../constants/ActionTypes';
+import merge from 'lodash/merge';
+
+const initialAuthState = {
+ isLoggedIn : false,
+};
+
+export default function auth (state = initialAuthState, action) {
+ switch (action.type) {
+ case LOG_IN:
+ return merge({}, state, { isLoggedIn : true });
+ case LOG_OUT:
+ return merge({}, state, { isLoggedIn : false });
+ default:
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/reducers/index.js
----------------------------------------------------------------------
diff --git a/public/reducers/index.js b/public/reducers/index.js
new file mode 100644
index 0000000..873c783
--- /dev/null
+++ b/public/reducers/index.js
@@ -0,0 +1,15 @@
+import { combineReducers } from 'redux';
+
+import auth from './auth';
+import user from './user';
+import org from './org';
+import app from './app';
+
+const rootReducer = combineReducers({
+ auth,
+ user,
+ org,
+ app
+});
+
+export default rootReducer;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/reducers/org.js
----------------------------------------------------------------------
diff --git a/public/reducers/org.js b/public/reducers/org.js
new file mode 100644
index 0000000..320699d
--- /dev/null
+++ b/public/reducers/org.js
@@ -0,0 +1,46 @@
+import { REQUEST_ORG, RECEIVE_ORG, REQUEST_ORG_UPDATE, CONFIRM_ORG_UPDATE } from '../constants/ActionTypes';
+import merge from 'lodash/merge';
+
+const initialOrgState = {
+ id : 3,
+ name : 'Tap',
+ description : 'The Tap Group',
+ settings : {
+ setting1 : true
+ },
+ users : [
+ {
+ id : 1,
+ email : 'test@test.com'
+ },
+ {
+ id : 2,
+ email : 'test2@test.com'
+ }
+ ],
+ apps : [
+ {
+ id : 7,
+ name : 'Ale'
+ },
+ {
+ id : 1,
+ name : 'Stout (fake)'
+ }
+ ]
+};
+
+export default function org (state = initialOrgState, action) {
+ switch (action.type) {
+ case REQUEST_ORG:
+ return merge({}, state, {});
+ case RECEIVE_ORG:
+ return merge({}, state. action.org);
+ case REQUEST_ORG_UPDATE:
+ return merge({}, state, action.update);
+ case CONFIRM_ORG_UPDATE:
+ return merge({}, state, action.saved);
+ default:
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/reducers/user.js
----------------------------------------------------------------------
diff --git a/public/reducers/user.js b/public/reducers/user.js
new file mode 100644
index 0000000..3900d2f
--- /dev/null
+++ b/public/reducers/user.js
@@ -0,0 +1,46 @@
+import { REQUEST_USER, RECEIVE_USER, REQUEST_USER_UPDATE, CONFIRM_USER_UPDATE } from '../constants/ActionTypes';
+import merge from 'lodash/merge';
+
+const initialUserState = {
+ email : 'test@test.com',
+ settings : {
+ setting1 : true,
+ setting2 : 'hello',
+ setting3 : 4,
+ },
+ orgs : [
+ {
+ id : 3,
+ name : 'Tap',
+ },
+ {
+ id : 2,
+ name : 'Distill (fake)',
+ }
+ ],
+ apps : [
+ {
+ id : 7,
+ name : 'Ale',
+ },
+ {
+ id : 1,
+ name : 'Stout (fake)',
+ },
+ ]
+};
+
+export default function user (state = initialUserState, action) {
+ switch (action.type) {
+ case REQUEST_USER:
+ return merge({}, state, {});
+ case RECEIVE_USER:
+ return merge({}, state, action.user);
+ case REQUEST_USER_UPDATE:
+ return merge({}, state, action.update);
+ case CONFIRM_USER_UPDATE:
+ return merge({}, state, action.saved);
+ default:
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/public/store/configureStore.js
----------------------------------------------------------------------
diff --git a/public/store/configureStore.js b/public/store/configureStore.js
new file mode 100644
index 0000000..4a3baa5
--- /dev/null
+++ b/public/store/configureStore.js
@@ -0,0 +1,15 @@
+import { createStore, applyMiddleware } from 'redux';
+import thunk from 'redux-thunk';
+import logger from 'redux-logger';
+
+import rootReducer from '../reducers';
+
+export default function configureStore (preloadedState) {
+ const store = createStore(
+ rootReducer,
+ preloadedState,
+ applyMiddleware(thunk, logger())
+ );
+
+ return store;
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic.json
----------------------------------------------------------------------
diff --git a/semantic.json b/semantic.json
new file mode 100644
index 0000000..edb31cc
--- /dev/null
+++ b/semantic.json
@@ -0,0 +1,22 @@
+{
+ "base": "semantic/",
+ "paths": {
+ "source": {
+ "config": "src/theme.config",
+ "definitions": "src/definitions/",
+ "site": "src/site/",
+ "themes": "src/themes/"
+ },
+ "output": {
+ "packaged": "dist/",
+ "uncompressed": "dist/components/",
+ "compressed": "dist/components/",
+ "themes": "dist/themes/"
+ },
+ "clean": "dist/"
+ },
+ "permission": false,
+ "autoInstall": false,
+ "rtl": false,
+ "version": "2.2.1"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/gulpfile.js
----------------------------------------------------------------------
diff --git a/semantic/gulpfile.js b/semantic/gulpfile.js
new file mode 100644
index 0000000..bde1960
--- /dev/null
+++ b/semantic/gulpfile.js
@@ -0,0 +1,72 @@
+/*******************************
+ Set-up
+*******************************/
+
+var
+ gulp = require('gulp-help')(require('gulp')),
+
+ // read user config to know what task to load
+ config = require('./tasks/config/user'),
+
+ // watch changes
+ watch = require('./tasks/watch'),
+
+ // build all files
+ build = require('./tasks/build'),
+ buildJS = require('./tasks/build/javascript'),
+ buildCSS = require('./tasks/build/css'),
+ buildAssets = require('./tasks/build/assets'),
+
+ // utility
+ clean = require('./tasks/clean'),
+ version = require('./tasks/version'),
+
+ // docs tasks
+ serveDocs = require('./tasks/docs/serve'),
+ buildDocs = require('./tasks/docs/build'),
+
+ // rtl
+ buildRTL = require('./tasks/rtl/build'),
+ watchRTL = require('./tasks/rtl/watch')
+;
+
+
+/*******************************
+ Tasks
+*******************************/
+
+gulp.task('default', false, [
+ 'watch'
+]);
+
+gulp.task('watch', 'Watch for site/theme changes', watch);
+
+gulp.task('build', 'Builds all files from source', build);
+gulp.task('build-javascript', 'Builds all javascript from source', buildJS);
+gulp.task('build-css', 'Builds all css from source', buildCSS);
+gulp.task('build-assets', 'Copies all assets from source', buildAssets);
+
+gulp.task('clean', 'Clean dist folder', clean);
+gulp.task('version', 'Displays current version of Semantic', version);
+
+/*--------------
+ Docs
+---------------*/
+
+/*
+ Lets you serve files to a local documentation instance
+ https://github.com/Semantic-Org/Semantic-UI-Docs/
+*/
+
+gulp.task('serve-docs', 'Serve file changes to SUI Docs', serveDocs);
+gulp.task('build-docs', 'Build all files and add to SUI Docs', buildDocs);
+
+
+/*--------------
+ RTL
+---------------*/
+
+if(config.rtl) {
+ gulp.task('watch-rtl', 'Watch files as RTL', watchRTL);
+ gulp.task('build-rtl', 'Build all files as RTL', buildRTL);
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/behaviors/api.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/behaviors/api.js b/semantic/src/definitions/behaviors/api.js
new file mode 100644
index 0000000..578e201
--- /dev/null
+++ b/semantic/src/definitions/behaviors/api.js
@@ -0,0 +1,1167 @@
+/*!
+ * # Semantic UI - API
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+var
+ window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.api = $.fn.api = function(parameters) {
+
+ var
+ // use window context if none specified
+ $allModules = $.isFunction(this)
+ ? $(window)
+ : $(this),
+ moduleSelector = $allModules.selector || '',
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ returnedValue
+ ;
+
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.api.settings, parameters)
+ : $.extend({}, $.fn.api.settings),
+
+ // internal aliases
+ namespace = settings.namespace,
+ metadata = settings.metadata,
+ selector = settings.selector,
+ error = settings.error,
+ className = settings.className,
+
+ // define namespaces for modules
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ // element that creates request
+ $module = $(this),
+ $form = $module.closest(selector.form),
+
+ // context used for state
+ $context = (settings.stateContext)
+ ? $(settings.stateContext)
+ : $module,
+
+ // request details
+ ajaxSettings,
+ requestSettings,
+ url,
+ data,
+ requestStartTime,
+
+ // standard module
+ element = this,
+ context = $context[0],
+ instance = $module.data(moduleNamespace),
+ module
+ ;
+
+ module = {
+
+ initialize: function() {
+ if(!methodInvoked) {
+ module.bind.events();
+ }
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of module', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, instance)
+ ;
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous module for', element);
+ $module
+ .removeData(moduleNamespace)
+ .off(eventNamespace)
+ ;
+ },
+
+ bind: {
+ events: function() {
+ var
+ triggerEvent = module.get.event()
+ ;
+ if( triggerEvent ) {
+ module.verbose('Attaching API events to element', triggerEvent);
+ $module
+ .on(triggerEvent + eventNamespace, module.event.trigger)
+ ;
+ }
+ else if(settings.on == 'now') {
+ module.debug('Querying API endpoint immediately');
+ module.query();
+ }
+ }
+ },
+
+ decode: {
+ json: function(response) {
+ if(response !== undefined && typeof response == 'string') {
+ try {
+ response = JSON.parse(response);
+ }
+ catch(e) {
+ // isnt json string
+ }
+ }
+ return response;
+ }
+ },
+
+ read: {
+ cachedResponse: function(url) {
+ var
+ response
+ ;
+ if(window.Storage === undefined) {
+ module.error(error.noStorage);
+ return;
+ }
+ response = sessionStorage.getItem(url);
+ module.debug('Using cached response', url, response);
+ response = module.decode.json(response);
+ return response;
+ }
+ },
+ write: {
+ cachedResponse: function(url, response) {
+ if(response && response === '') {
+ module.debug('Response empty, not caching', response);
+ return;
+ }
+ if(window.Storage === undefined) {
+ module.error(error.noStorage);
+ return;
+ }
+ if( $.isPlainObject(response) ) {
+ response = JSON.stringify(response);
+ }
+ sessionStorage.setItem(url, response);
+ module.verbose('Storing cached response for url', url, response);
+ }
+ },
+
+ query: function() {
+
+ if(module.is.disabled()) {
+ module.debug('Element is disabled API request aborted');
+ return;
+ }
+
+ if(module.is.loading()) {
+ if(settings.interruptRequests) {
+ module.debug('Interrupting previous request');
+ module.abort();
+ }
+ else {
+ module.debug('Cancelling request, previous request is still pending');
+ return;
+ }
+ }
+
+ // pass element metadata to url (value, text)
+ if(settings.defaultData) {
+ $.extend(true, settings.urlData, module.get.defaultData());
+ }
+
+ // Add form content
+ if(settings.serializeForm) {
+ settings.data = module.add.formData(settings.data);
+ }
+
+ // call beforesend and get any settings changes
+ requestSettings = module.get.settings();
+
+ // check if before send cancelled request
+ if(requestSettings === false) {
+ module.cancelled = true;
+ module.error(error.beforeSend);
+ return;
+ }
+ else {
+ module.cancelled = false;
+ }
+
+ // get url
+ url = module.get.templatedURL();
+
+ if(!url && !module.is.mocked()) {
+ module.error(error.missingURL);
+ return;
+ }
+
+ // replace variables
+ url = module.add.urlData( url );
+ // missing url parameters
+ if( !url && !module.is.mocked()) {
+ return;
+ }
+
+ requestSettings.url = settings.base + url;
+
+ // look for jQuery ajax parameters in settings
+ ajaxSettings = $.extend(true, {}, settings, {
+ type : settings.method || settings.type,
+ data : data,
+ url : settings.base + url,
+ beforeSend : settings.beforeXHR,
+ success : function() {},
+ failure : function() {},
+ complete : function() {}
+ });
+
+ module.debug('Querying URL', ajaxSettings.url);
+ module.verbose('Using AJAX settings', ajaxSettings);
+ if(settings.cache === 'local' && module.read.cachedResponse(url)) {
+ module.debug('Response returned from local cache');
+ module.request = module.create.request();
+ module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);
+ return;
+ }
+
+ if( !settings.throttle ) {
+ module.debug('Sending request', data, ajaxSettings.method);
+ module.send.request();
+ }
+ else {
+ if(!settings.throttleFirstRequest && !module.timer) {
+ module.debug('Sending request', data, ajaxSettings.method);
+ module.send.request();
+ module.timer = setTimeout(function(){}, settings.throttle);
+ }
+ else {
+ module.debug('Throttling request', settings.throttle);
+ clearTimeout(module.timer);
+ module.timer = setTimeout(function() {
+ if(module.timer) {
+ delete module.timer;
+ }
+ module.debug('Sending throttled request', data, ajaxSettings.method);
+ module.send.request();
+ }, settings.throttle);
+ }
+ }
+
+ },
+
+ should: {
+ removeError: function() {
+ return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );
+ }
+ },
+
+ is: {
+ disabled: function() {
+ return ($module.filter(selector.disabled).length > 0);
+ },
+ expectingJSON: function() {
+ return settings.dataType === 'json' || settings.dataType === 'jsonp';
+ },
+ form: function() {
+ return $module.is('form') || $context.is('form');
+ },
+ mocked: function() {
+ return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);
+ },
+ input: function() {
+ return $module.is('input');
+ },
+ loading: function() {
+ return (module.request)
+ ? (module.request.state() == 'pending')
+ : false
+ ;
+ },
+ abortedRequest: function(xhr) {
+ if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {
+ module.verbose('XHR request determined to be aborted');
+ return true;
+ }
+ else {
+ module.verbose('XHR request was not aborted');
+ return false;
+ }
+ },
+ validResponse: function(response) {
+ if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {
+ module.verbose('Response is not JSON, skipping validation', settings.successTest, response);
+ return true;
+ }
+ module.debug('Checking JSON returned success', settings.successTest, response);
+ if( settings.successTest(response) ) {
+ module.debug('Response passed success test', response);
+ return true;
+ }
+ else {
+ module.debug('Response failed success test', response);
+ return false;
+ }
+ }
+ },
+
+ was: {
+ cancelled: function() {
+ return (module.cancelled || false);
+ },
+ succesful: function() {
+ return (module.request && module.request.state() == 'resolved');
+ },
+ failure: function() {
+ return (module.request && module.request.state() == 'rejected');
+ },
+ complete: function() {
+ return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );
+ }
+ },
+
+ add: {
+ urlData: function(url, urlData) {
+ var
+ requiredVariables,
+ optionalVariables
+ ;
+ if(url) {
+ requiredVariables = url.match(settings.regExp.required);
+ optionalVariables = url.match(settings.regExp.optional);
+ urlData = urlData || settings.urlData;
+ if(requiredVariables) {
+ module.debug('Looking for required URL variables', requiredVariables);
+ $.each(requiredVariables, function(index, templatedString) {
+ var
+ // allow legacy {$var} style
+ variable = (templatedString.indexOf('$') !== -1)
+ ? templatedString.substr(2, templatedString.length - 3)
+ : templatedString.substr(1, templatedString.length - 2),
+ value = ($.isPlainObject(urlData) && urlData[variable] !== undefined)
+ ? urlData[variable]
+ : ($module.data(variable) !== undefined)
+ ? $module.data(variable)
+ : ($context.data(variable) !== undefined)
+ ? $context.data(variable)
+ : urlData[variable]
+ ;
+ // remove value
+ if(value === undefined) {
+ module.error(error.requiredParameter, variable, url);
+ url = false;
+ return false;
+ }
+ else {
+ module.verbose('Found required variable', variable, value);
+ value = (settings.encodeParameters)
+ ? module.get.urlEncodedValue(value)
+ : value
+ ;
+ url = url.replace(templatedString, value);
+ }
+ });
+ }
+ if(optionalVariables) {
+ module.debug('Looking for optional URL variables', requiredVariables);
+ $.each(optionalVariables, function(index, templatedString) {
+ var
+ // allow legacy {/$var} style
+ variable = (templatedString.indexOf('$') !== -1)
+ ? templatedString.substr(3, templatedString.length - 4)
+ : templatedString.substr(2, templatedString.length - 3),
+ value = ($.isPlainObject(urlData) && urlData[variable] !== undefined)
+ ? urlData[variable]
+ : ($module.data(variable) !== undefined)
+ ? $module.data(variable)
+ : ($context.data(variable) !== undefined)
+ ? $context.data(variable)
+ : urlData[variable]
+ ;
+ // optional replacement
+ if(value !== undefined) {
+ module.verbose('Optional variable Found', variable, value);
+ url = url.replace(templatedString, value);
+ }
+ else {
+ module.verbose('Optional variable not found', variable);
+ // remove preceding slash if set
+ if(url.indexOf('/' + templatedString) !== -1) {
+ url = url.replace('/' + templatedString, '');
+ }
+ else {
+ url = url.replace(templatedString, '');
+ }
+ }
+ });
+ }
+ }
+ return url;
+ },
+ formData: function(data) {
+ var
+ canSerialize = ($.fn.serializeObject !== undefined),
+ formData = (canSerialize)
+ ? $form.serializeObject()
+ : $form.serialize(),
+ hasOtherData
+ ;
+ data = data || settings.data;
+ hasOtherData = $.isPlainObject(data);
+
+ if(hasOtherData) {
+ if(canSerialize) {
+ module.debug('Extending existing data with form data', data, formData);
+ data = $.extend(true, {}, data, formData);
+ }
+ else {
+ module.error(error.missingSerialize);
+ module.debug('Cant extend data. Replacing data with form data', data, formData);
+ data = formData;
+ }
+ }
+ else {
+ module.debug('Adding form data', formData);
+ data = formData;
+ }
+ return data;
+ }
+ },
+
+ send: {
+ request: function() {
+ module.set.loading();
+ module.request = module.create.request();
+ if( module.is.mocked() ) {
+ module.mockedXHR = module.create.mockedXHR();
+ }
+ else {
+ module.xhr = module.create.xhr();
+ }
+ settings.onRequest.call(context, module.request, module.xhr);
+ }
+ },
+
+ event: {
+ trigger: function(event) {
+ module.query();
+ if(event.type == 'submit' || event.type == 'click') {
+ event.preventDefault();
+ }
+ },
+ xhr: {
+ always: function() {
+ // nothing special
+ },
+ done: function(response, textStatus, xhr) {
+ var
+ context = this,
+ elapsedTime = (new Date().getTime() - requestStartTime),
+ timeLeft = (settings.loadingDuration - elapsedTime),
+ translatedResponse = ( $.isFunction(settings.onResponse) )
+ ? module.is.expectingJSON()
+ ? settings.onResponse.call(context, $.extend(true, {}, response))
+ : settings.onResponse.call(context, response)
+ : false
+ ;
+ timeLeft = (timeLeft > 0)
+ ? timeLeft
+ : 0
+ ;
+ if(translatedResponse) {
+ module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);
+ response = translatedResponse;
+ }
+ if(timeLeft > 0) {
+ module.debug('Response completed early delaying state change by', timeLeft);
+ }
+ setTimeout(function() {
+ if( module.is.validResponse(response) ) {
+ module.request.resolveWith(context, [response, xhr]);
+ }
+ else {
+ module.request.rejectWith(context, [xhr, 'invalid']);
+ }
+ }, timeLeft);
+ },
+ fail: function(xhr, status, httpMessage) {
+ var
+ context = this,
+ elapsedTime = (new Date().getTime() - requestStartTime),
+ timeLeft = (settings.loadingDuration - elapsedTime)
+ ;
+ timeLeft = (timeLeft > 0)
+ ? timeLeft
+ : 0
+ ;
+ if(timeLeft > 0) {
+ module.debug('Response completed early delaying state change by', timeLeft);
+ }
+ setTimeout(function() {
+ if( module.is.abortedRequest(xhr) ) {
+ module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);
+ }
+ else {
+ module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);
+ }
+ }, timeLeft);
+ }
+ },
+ request: {
+ done: function(response, xhr) {
+ module.debug('Successful API Response', response);
+ if(settings.cache === 'local' && url) {
+ module.write.cachedResponse(url, response);
+ module.debug('Saving server response locally', module.cache);
+ }
+ settings.onSuccess.call(context, response, $module, xhr);
+ },
+ complete: function(firstParameter, secondParameter) {
+ var
+ xhr,
+ response
+ ;
+ // have to guess callback parameters based on request success
+ if( module.was.succesful() ) {
+ response = firstParameter;
+ xhr = secondParameter;
+ }
+ else {
+ xhr = firstParameter;
+ response = module.get.responseFromXHR(xhr);
+ }
+ module.remove.loading();
+ settings.onComplete.call(context, response, $module, xhr);
+ },
+ fail: function(xhr, status, httpMessage) {
+ var
+ // pull response from xhr if available
+ response = module.get.responseFromXHR(xhr),
+ errorMessage = module.get.errorFromRequest(response, status, httpMessage)
+ ;
+ if(status == 'aborted') {
+ module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);
+ settings.onAbort.call(context, status, $module, xhr);
+ return true;
+ }
+ else if(status == 'invalid') {
+ module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);
+ }
+ else if(status == 'error') {
+ if(xhr !== undefined) {
+ module.debug('XHR produced a server error', status, httpMessage);
+ // make sure we have an error to display to console
+ if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {
+ module.error(error.statusMessage + httpMessage, ajaxSettings.url);
+ }
+ settings.onError.call(context, errorMessage, $module, xhr);
+ }
+ }
+
+ if(settings.errorDuration && status !== 'aborted') {
+ module.debug('Adding error state');
+ module.set.error();
+ if( module.should.removeError() ) {
+ setTimeout(module.remove.error, settings.errorDuration);
+ }
+ }
+ module.debug('API Request failed', errorMessage, xhr);
+ settings.onFailure.call(context, response, $module, xhr);
+ }
+ }
+ },
+
+ create: {
+
+ request: function() {
+ // api request promise
+ return $.Deferred()
+ .always(module.event.request.complete)
+ .done(module.event.request.done)
+ .fail(module.event.request.fail)
+ ;
+ },
+
+ mockedXHR: function () {
+ var
+ // xhr does not simulate these properties of xhr but must return them
+ textStatus = false,
+ status = false,
+ httpMessage = false,
+ responder = settings.mockResponse || settings.response,
+ asyncResponder = settings.mockResponseAsync || settings.responseAsync,
+ asyncCallback,
+ response,
+ mockedXHR
+ ;
+
+ mockedXHR = $.Deferred()
+ .always(module.event.xhr.complete)
+ .done(module.event.xhr.done)
+ .fail(module.event.xhr.fail)
+ ;
+
+ if(responder) {
+ if( $.isFunction(responder) ) {
+ module.debug('Using specified synchronous callback', responder);
+ response = responder.call(context, requestSettings);
+ }
+ else {
+ module.debug('Using settings specified response', responder);
+ response = responder;
+ }
+ // simulating response
+ mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);
+ }
+ else if( $.isFunction(asyncResponder) ) {
+ asyncCallback = function(response) {
+ module.debug('Async callback returned response', response);
+
+ if(response) {
+ mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);
+ }
+ else {
+ mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);
+ }
+ };
+ module.debug('Using specified async response callback', asyncResponder);
+ asyncResponder.call(context, requestSettings, asyncCallback);
+ }
+ return mockedXHR;
+ },
+
+ xhr: function() {
+ var
+ xhr
+ ;
+ // ajax request promise
+ xhr = $.ajax(ajaxSettings)
+ .always(module.event.xhr.always)
+ .done(module.event.xhr.done)
+ .fail(module.event.xhr.fail)
+ ;
+ module.verbose('Created server request', xhr, ajaxSettings);
+ return xhr;
+ }
+ },
+
+ set: {
+ error: function() {
+ module.verbose('Adding error state to element', $context);
+ $context.addClass(className.error);
+ },
+ loading: function() {
+ module.verbose('Adding loading state to element', $context);
+ $context.addClass(className.loading);
+ requestStartTime = new Date().getTime();
+ }
+ },
+
+ remove: {
+ error: function() {
+ module.verbose('Removing error state from element', $context);
+ $context.removeClass(className.error);
+ },
+ loading: function() {
+ module.verbose('Removing loading state from element', $context);
+ $context.removeClass(className.loading);
+ }
+ },
+
+ get: {
+ responseFromXHR: function(xhr) {
+ return $.isPlainObject(xhr)
+ ? (module.is.expectingJSON())
+ ? module.decode.json(xhr.responseText)
+ : xhr.responseText
+ : false
+ ;
+ },
+ errorFromRequest: function(response, status, httpMessage) {
+ return ($.isPlainObject(response) && response.error !== undefined)
+ ? response.error // use json error message
+ : (settings.error[status] !== undefined) // use server error message
+ ? settings.error[status]
+ : httpMessage
+ ;
+ },
+ request: function() {
+ return module.request || false;
+ },
+ xhr: function() {
+ return module.xhr || false;
+ },
+ settings: function() {
+ var
+ runSettings
+ ;
+ runSettings = settings.beforeSend.call(context, settings);
+ if(runSettings) {
+ if(runSettings.success !== undefined) {
+ module.debug('Legacy success callback detected', runSettings);
+ module.error(error.legacyParameters, runSettings.success);
+ runSettings.onSuccess = runSettings.success;
+ }
+ if(runSettings.failure !== undefined) {
+ module.debug('Legacy failure callback detected', runSettings);
+ module.error(error.legacyParameters, runSettings.failure);
+ runSettings.onFailure = runSettings.failure;
+ }
+ if(runSettings.complete !== undefined) {
+ module.debug('Legacy complete callback detected', runSettings);
+ module.error(error.legacyParameters, runSettings.complete);
+ runSettings.onComplete = runSettings.complete;
+ }
+ }
+ if(runSettings === undefined) {
+ module.error(error.noReturnedValue);
+ }
+ if(runSettings === false) {
+ return runSettings;
+ }
+ return (runSettings !== undefined)
+ ? $.extend(true, {}, runSettings)
+ : $.extend(true, {}, settings)
+ ;
+ },
+ urlEncodedValue: function(value) {
+ var
+ decodedValue = window.decodeURIComponent(value),
+ encodedValue = window.encodeURIComponent(value),
+ alreadyEncoded = (decodedValue !== value)
+ ;
+ if(alreadyEncoded) {
+ module.debug('URL value is already encoded, avoiding double encoding', value);
+ return value;
+ }
+ module.verbose('Encoding value using encodeURIComponent', value, encodedValue);
+ return encodedValue;
+ },
+ defaultData: function() {
+ var
+ data = {}
+ ;
+ if( !$.isWindow(element) ) {
+ if( module.is.input() ) {
+ data.value = $module.val();
+ }
+ else if( module.is.form() ) {
+
+ }
+ else {
+ data.text = $module.text();
+ }
+ }
+ return data;
+ },
+ event: function() {
+ if( $.isWindow(element) || settings.on == 'now' ) {
+ module.debug('API called without element, no events attached');
+ return false;
+ }
+ else if(settings.on == 'auto') {
+ if( $module.is('input') ) {
+ return (element.oninput !== undefined)
+ ? 'input'
+ : (element.onpropertychange !== undefined)
+ ? 'propertychange'
+ : 'keyup'
+ ;
+ }
+ else if( $module.is('form') ) {
+ return 'submit';
+ }
+ else {
+ return 'click';
+ }
+ }
+ else {
+ return settings.on;
+ }
+ },
+ templatedURL: function(action) {
+ action = action || $module.data(metadata.action) || settings.action || false;
+ url = $module.data(metadata.url) || settings.url || false;
+ if(url) {
+ module.debug('Using specified url', url);
+ return url;
+ }
+ if(action) {
+ module.debug('Looking up url for action', action, settings.api);
+ if(settings.api[action] === undefined && !module.is.mocked()) {
+ module.error(error.missingAction, settings.action, settings.api);
+ return;
+ }
+ url = settings.api[action];
+ }
+ else if( module.is.form() ) {
+ url = $module.attr('action') || $context.attr('action') || false;
+ module.debug('No url or action specified, defaulting to form action', url);
+ }
+ return url;
+ }
+ },
+
+ abort: function() {
+ var
+ xhr = module.get.xhr()
+ ;
+ if( xhr && xhr.state() !== 'resolved') {
+ module.debug('Cancelling API request');
+ xhr.abort();
+ }
+ },
+
+ // reset state
+ reset: function() {
+ module.remove.error();
+ module.remove.loading();
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ //'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.api.settings = {
+
+ name : 'API',
+ namespace : 'api',
+
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ // object containing all templates endpoints
+ api : {},
+
+ // whether to cache responses
+ cache : true,
+
+ // whether new requests should abort previous requests
+ interruptRequests : true,
+
+ // event binding
+ on : 'auto',
+
+ // context for applying state classes
+ stateContext : false,
+
+ // duration for loading state
+ loadingDuration : 0,
+
+ // whether to hide errors after a period of time
+ hideError : 'auto',
+
+ // duration for error state
+ errorDuration : 2000,
+
+ // whether parameters should be encoded with encodeURIComponent
+ encodeParameters : true,
+
+ // API action to use
+ action : false,
+
+ // templated URL to use
+ url : false,
+
+ // base URL to apply to all endpoints
+ base : '',
+
+ // data that will
+ urlData : {},
+
+ // whether to add default data to url data
+ defaultData : true,
+
+ // whether to serialize closest form
+ serializeForm : false,
+
+ // how long to wait before request should occur
+ throttle : 0,
+
+ // whether to throttle first request or only repeated
+ throttleFirstRequest : true,
+
+ // standard ajax settings
+ method : 'get',
+ data : {},
+ dataType : 'json',
+
+ // mock response
+ mockResponse : false,
+ mockResponseAsync : false,
+
+ // aliases for mock
+ response : false,
+ responseAsync : false,
+
+ // callbacks before request
+ beforeSend : function(settings) { return settings; },
+ beforeXHR : function(xhr) {},
+ onRequest : function(promise, xhr) {},
+
+ // after request
+ onResponse : false, // function(response) { },
+
+ // response was successful, if JSON passed validation
+ onSuccess : function(response, $module) {},
+
+ // request finished without aborting
+ onComplete : function(response, $module) {},
+
+ // failed JSON success test
+ onFailure : function(response, $module) {},
+
+ // server error
+ onError : function(errorMessage, $module) {},
+
+ // request aborted
+ onAbort : function(errorMessage, $module) {},
+
+ successTest : false,
+
+ // errors
+ error : {
+ beforeSend : 'The before send function has aborted the request',
+ error : 'There was an error with your request',
+ exitConditions : 'API Request Aborted. Exit conditions met',
+ JSONParse : 'JSON could not be parsed during error handling',
+ legacyParameters : 'You are using legacy API success callback names',
+ method : 'The method you called is not defined',
+ missingAction : 'API action used but no url was defined',
+ missingSerialize : 'jquery-serialize-object is required to add form data to an existing data object',
+ missingURL : 'No URL specified for api event',
+ noReturnedValue : 'The beforeSend callback must return a settings object, beforeSend ignored.',
+ noStorage : 'Caching responses locally requires session storage',
+ parseError : 'There was an error parsing your request',
+ requiredParameter : 'Missing a required URL parameter: ',
+ statusMessage : 'Server gave an error: ',
+ timeout : 'Your request timed out'
+ },
+
+ regExp : {
+ required : /\{\$*[A-z0-9]+\}/g,
+ optional : /\{\/\$*[A-z0-9]+\}/g,
+ },
+
+ className: {
+ loading : 'loading',
+ error : 'error'
+ },
+
+ selector: {
+ disabled : '.disabled',
+ form : 'form'
+ },
+
+ metadata: {
+ action : 'action',
+ url : 'url'
+ }
+};
+
+
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/behaviors/colorize.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/behaviors/colorize.js b/semantic/src/definitions/behaviors/colorize.js
new file mode 100644
index 0000000..31efb1c
--- /dev/null
+++ b/semantic/src/definitions/behaviors/colorize.js
@@ -0,0 +1,280 @@
+/*!
+ * # Semantic UI - Colorize
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.colorize = function(parameters) {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.colorize.settings, parameters)
+ : $.extend({}, $.fn.colorize.settings),
+ // hoist arguments
+ moduleArguments = arguments || false
+ ;
+ $(this)
+ .each(function(instanceIndex) {
+
+ var
+ $module = $(this),
+
+ mainCanvas = $('<canvas />')[0],
+ imageCanvas = $('<canvas />')[0],
+ overlayCanvas = $('<canvas />')[0],
+
+ backgroundImage = new Image(),
+
+ // defs
+ mainContext,
+ imageContext,
+ overlayContext,
+
+ image,
+ imageName,
+
+ width,
+ height,
+
+ // shortcuts
+ colors = settings.colors,
+ paths = settings.paths,
+ namespace = settings.namespace,
+ error = settings.error,
+
+ // boilerplate
+ instance = $module.data('module-' + namespace),
+ module
+ ;
+
+ module = {
+
+ checkPreconditions: function() {
+ module.debug('Checking pre-conditions');
+
+ if( !$.isPlainObject(colors) || $.isEmptyObject(colors) ) {
+ module.error(error.undefinedColors);
+ return false;
+ }
+ return true;
+ },
+
+ async: function(callback) {
+ if(settings.async) {
+ setTimeout(callback, 0);
+ }
+ else {
+ callback();
+ }
+ },
+
+ getMetadata: function() {
+ module.debug('Grabbing metadata');
+ image = $module.data('image') || settings.image || undefined;
+ imageName = $module.data('name') || settings.name || instanceIndex;
+ width = settings.width || $module.width();
+ height = settings.height || $module.height();
+ if(width === 0 || height === 0) {
+ module.error(error.undefinedSize);
+ }
+ },
+
+ initialize: function() {
+ module.debug('Initializing with colors', colors);
+ if( module.checkPreconditions() ) {
+
+ module.async(function() {
+ module.getMetadata();
+ module.canvas.create();
+
+ module.draw.image(function() {
+ module.draw.colors();
+ module.canvas.merge();
+ });
+ $module
+ .data('module-' + namespace, module)
+ ;
+ });
+ }
+ },
+
+ redraw: function() {
+ module.debug('Redrawing image');
+ module.async(function() {
+ module.canvas.clear();
+ module.draw.colors();
+ module.canvas.merge();
+ });
+ },
+
+ change: {
+ color: function(colorName, color) {
+ module.debug('Changing color', colorName);
+ if(colors[colorName] === undefined) {
+ module.error(error.missingColor);
+ return false;
+ }
+ colors[colorName] = color;
+ module.redraw();
+ }
+ },
+
+ canvas: {
+ create: function() {
+ module.debug('Creating canvases');
+
+ mainCanvas.width = width;
+ mainCanvas.height = height;
+ imageCanvas.width = width;
+ imageCanvas.height = height;
+ overlayCanvas.width = width;
+ overlayCanvas.height = height;
+
+ mainContext = mainCanvas.getContext('2d');
+ imageContext = imageCanvas.getContext('2d');
+ overlayContext = overlayCanvas.getContext('2d');
+
+ $module
+ .append( mainCanvas )
+ ;
+ mainContext = $module.children('canvas')[0].getContext('2d');
+ },
+ clear: function(context) {
+ module.debug('Clearing canvas');
+ overlayContext.fillStyle = '#FFFFFF';
+ overlayContext.fillRect(0, 0, width, height);
+ },
+ merge: function() {
+ if( !$.isFunction(mainContext.blendOnto) ) {
+ module.error(error.missingPlugin);
+ return;
+ }
+ mainContext.putImageData( imageContext.getImageData(0, 0, width, height), 0, 0);
+ overlayContext.blendOnto(mainContext, 'multiply');
+ }
+ },
+
+ draw: {
+
+ image: function(callback) {
+ module.debug('Drawing image');
+ callback = callback || function(){};
+ if(image) {
+ backgroundImage.src = image;
+ backgroundImage.onload = function() {
+ imageContext.drawImage(backgroundImage, 0, 0);
+ callback();
+ };
+ }
+ else {
+ module.error(error.noImage);
+ callback();
+ }
+ },
+
+ colors: function() {
+ module.debug('Drawing color overlays', colors);
+ $.each(colors, function(colorName, color) {
+ settings.onDraw(overlayContext, imageName, colorName, color);
+ });
+ }
+
+ },
+
+ debug: function(message, variableName) {
+ if(settings.debug) {
+ if(variableName !== undefined) {
+ console.info(settings.name + ': ' + message, variableName);
+ }
+ else {
+ console.info(settings.name + ': ' + message);
+ }
+ }
+ },
+ error: function(errorMessage) {
+ console.warn(settings.name + ': ' + errorMessage);
+ },
+ invoke: function(methodName, context, methodArguments) {
+ var
+ method
+ ;
+ methodArguments = methodArguments || Array.prototype.slice.call( arguments, 2 );
+
+ if(typeof methodName == 'string' && instance !== undefined) {
+ methodName = methodName.split('.');
+ $.each(methodName, function(index, name) {
+ if( $.isPlainObject( instance[name] ) ) {
+ instance = instance[name];
+ return true;
+ }
+ else if( $.isFunction( instance[name] ) ) {
+ method = instance[name];
+ return true;
+ }
+ module.error(settings.error.method);
+ return false;
+ });
+ }
+ return ( $.isFunction( method ) )
+ ? method.apply(context, methodArguments)
+ : false
+ ;
+ }
+
+ };
+ if(instance !== undefined && moduleArguments) {
+ // simpler than invoke realizing to invoke itself (and losing scope due prototype.call()
+ if(moduleArguments[0] == 'invoke') {
+ moduleArguments = Array.prototype.slice.call( moduleArguments, 1 );
+ }
+ return module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
+ }
+ // initializing
+ module.initialize();
+ })
+ ;
+ return this;
+};
+
+$.fn.colorize.settings = {
+ name : 'Image Colorizer',
+ debug : true,
+ namespace : 'colorize',
+
+ onDraw : function(overlayContext, imageName, colorName, color) {},
+
+ // whether to block execution while updating canvas
+ async : true,
+ // object containing names and default values of color regions
+ colors : {},
+
+ metadata: {
+ image : 'image',
+ name : 'name'
+ },
+
+ error: {
+ noImage : 'No tracing image specified',
+ undefinedColors : 'No default colors specified.',
+ missingColor : 'Attempted to change color that does not exist',
+ missingPlugin : 'Blend onto plug-in must be included',
+ undefinedHeight : 'The width or height of image canvas could not be automatically determined. Please specify a height.'
+ }
+
+};
+
+})( jQuery, window, document );
[20/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/elements/step.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/elements/step.variables b/semantic/src/themes/default/elements/step.variables
new file mode 100644
index 0000000..268d875
--- /dev/null
+++ b/semantic/src/themes/default/elements/step.variables
@@ -0,0 +1,130 @@
+/*******************************
+ Step
+*******************************/
+
+/*-------------------
+ Group
+--------------------*/
+
+@stepMargin: 1em 0em;
+@stepsBorderRadius: @defaultBorderRadius;
+@stepsBackground: '';
+@stepsBoxShadow: none;
+@stepsBorder: 1px solid @borderColor;
+
+/*-------------------
+ Element
+--------------------*/
+
+@verticalMargin: 0em;
+@horizontalMargin: 0em;
+
+@arrowSize: @relativeLarge;
+@verticalPadding: @relativeLarge;
+@horizontalPadding: 2em;
+
+@transition:
+ background-color @defaultDuration @defaultEasing,
+ opacity @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing,
+ box-shadow @defaultDuration @defaultEasing
+;
+@lineHeight: @relativeLarge;
+@alignItems: center;
+@justifyContent: center;
+@backgroundColor: @white;
+@background: @backgroundColor;
+@borderRadius: 0em;
+@borderWidth: 1px;
+@boxShadow: none;
+@border: none;
+@divider: @borderWidth solid @borderColor;
+
+/* Icon */
+@iconDistance: 1rem;
+@iconSize: 2.5em;
+@iconAlign: middle;
+
+/* Title */
+@titleFontFamily: @headerFont;
+@titleFontWeight: bold;
+@titleFontSize: @relativeLarge;
+@titleColor: @darkTextColor;
+
+/* Description */
+@descriptionDistance: 0.25em;
+@descriptionFontSize: @relativeSmall;
+@descriptionFontWeight: normal;
+@descriptionColor: @textColor;
+
+
+/* Arrow */
+@arrowBackgroundColor: @backgroundColor;
+@arrowTopOffset: 50%;
+@arrowRightOffset: 0%;
+@arrowBorderWidth: 0px @borderWidth @borderWidth 0px;
+
+@arrowDisplay: block;
+@lastArrowDisplay: none;
+
+@activeArrowDisplay: block;
+@activeLastArrowDisplay: none;
+
+/* Mobile */
+@mobileIconDistance: @iconDistance;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Vertical */
+@verticalDivider: @divider;
+@verticalArrowTopOffset: 50%;
+@verticalArrowRightOffset: 0%;
+@verticalArrowBorderWidth: 0px @borderWidth @borderWidth 0px;
+
+@verticalArrowDisplay: none;
+@verticalLastArrowDisplay: @verticalArrowDisplay;
+
+@verticalActiveArrowDisplay: block;
+@verticalActiveLastArrowDisplay: block;
+
+/*-------------------
+ Variations
+--------------------*/
+
+@attachedHorizontalOffset: -@borderWidth;
+@attachedVerticalOffset: 0;
+@attachedWidth: ~"calc(100% + "-@attachedHorizontalOffset * 2~")";
+
+@orderedFontFamily: inherit;
+@orderedFontWeight: bold;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Completed */
+@completedColor: @positiveColor;
+
+/* Hover */
+@hoverBackground: @offWhite;
+@hoverColor: @hoveredTextColor;
+
+/* Down */
+@downBackground: @darkWhite;
+@downColor: @pressedTextColor;
+
+/* Active */
+@activeBackground: @darkWhite;
+@activeColor: @linkColor;
+@activeIconColor: @darkTextColor;
+
+/* Active + Hover */
+@activeHoverBackground: @lightGrey;
+@activeHoverColor: @textColor;
+
+
+/* Disabled */
+@disabledBackground: @background;
+@disabledColor: @disabledTextColor;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/globals/reset.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/globals/reset.overrides b/semantic/src/themes/default/globals/reset.overrides
new file mode 100644
index 0000000..8a241a8
--- /dev/null
+++ b/semantic/src/themes/default/globals/reset.overrides
@@ -0,0 +1,429 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+/**
+ * Correct `block` display not defined in IE 8/9.
+ */
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/globals/reset.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/globals/reset.variables b/semantic/src/themes/default/globals/reset.variables
new file mode 100644
index 0000000..0eedf27
--- /dev/null
+++ b/semantic/src/themes/default/globals/reset.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Reset
+*******************************/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/globals/site.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/globals/site.overrides b/semantic/src/themes/default/globals/site.overrides
new file mode 100644
index 0000000..d756a10
--- /dev/null
+++ b/semantic/src/themes/default/globals/site.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Global Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/globals/site.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/globals/site.variables b/semantic/src/themes/default/globals/site.variables
new file mode 100644
index 0000000..6609dae
--- /dev/null
+++ b/semantic/src/themes/default/globals/site.variables
@@ -0,0 +1,936 @@
+/*******************************
+ Site Settings
+*******************************/
+
+/*-------------------
+ Fonts
+--------------------*/
+
+@fontName : 'Lato';
+@fontSmoothing : antialiased;
+
+@headerFont : @fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif;
+@pageFont : @fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif;
+
+@googleFontName : @fontName;
+@importGoogleFonts : true;
+@googleFontSizes : '400,700,400italic,700italic';
+@googleSubset : 'latin';
+
+@googleProtocol : 'https://';
+@googleFontRequest : '@{googleFontName}:@{googleFontSizes}&subset=@{googleSubset}';
+
+/*-------------------
+ Base Sizes
+--------------------*/
+
+/* This is the single variable that controls them all */
+@emSize : 14px;
+
+/* The size of page text */
+@fontSize : 14px;
+
+
+/*-------------------
+ Border Radius
+--------------------*/
+
+/* See Power-user section below
+ for explanation of @px variables
+*/
+@relativeBorderRadius: @relative4px;
+@absoluteBorderRadius: @4px;
+
+@defaultBorderRadius: @absoluteBorderRadius;
+
+/*-------------------
+ Brand Colors
+--------------------*/
+
+@primaryColor : @blue;
+@secondaryColor : @black;
+
+@lightPrimaryColor : @lightBlue;
+@lightSecondaryColor : @lightBlack;
+
+/*--------------
+ Page Heading
+---------------*/
+
+@headerFontWeight : bold;
+@headerLineHeight : 1.2857em;
+
+@h1 : 2rem;
+@h2 : 1.714rem;
+@h3 : 1.28rem;
+@h4 : 1.071rem;
+@h5 : 1rem;
+
+/*--------------
+ Form Input
+---------------*/
+
+/* This adjusts the default form input across all elements */
+@inputBackground : @white;
+@inputVerticalPadding : @relative11px;
+@inputHorizontalPadding : @relative14px;
+@inputPadding : @inputVerticalPadding @inputHorizontalPadding;
+
+/* Input Text Color */
+@inputColor: @textColor;
+@inputPlaceholderColor: lighten(@inputColor, 75);
+@inputPlaceholderFocusColor: lighten(@inputColor, 45);
+
+/* Line Height Default For Inputs in Browser */
+@inputLineHeight: 1.2142em;
+
+/*-------------------
+ Focused Input
+--------------------*/
+
+/* Used on inputs, textarea etc */
+@focusedFormBorderColor: #85B7D9;
+
+/* Used on dropdowns, other larger blocks */
+@focusedFormMutedBorderColor: #96C8DA;
+
+/*-------------------
+ Sizes
+--------------------*/
+
+/*
+ Sizes are all expressed in terms of 14px/em (default em)
+ This ensures these "ratios" remain constant despite changes in EM
+*/
+
+@miniSize : (11 / 14);
+@tinySize : (12 / 14);
+@smallSize : (13 / 14);
+@mediumSize : (14 / 14);
+@largeSize : (16 / 14);
+@bigSize : (18 / 14);
+@hugeSize : (20 / 14);
+@massiveSize : (24 / 14);
+
+
+/*-------------------
+ Page
+--------------------*/
+
+@pageBackground : #FFFFFF;
+@pageOverflowX : hidden;
+
+@lineHeight : 1.4285em;
+@textColor : rgba(0, 0, 0, 0.87);
+
+/*-------------------
+ Paragraph
+--------------------*/
+
+@paragraphMargin : 0em 0em 1em;
+@paragraphLineHeight : @lineHeight;
+
+/*-------------------
+ Links
+--------------------*/
+
+@linkColor : #4183C4;
+@linkUnderline : none;
+@linkHoverColor : darken(saturate(@linkColor, 20), 15, relative);
+@linkHoverUnderline : @linkUnderline;
+
+/*-------------------
+ Highlighted Text
+--------------------*/
+
+@highlightBackground : #CCE2FF;
+@highlightColor : @textColor;
+
+@inputHighlightBackground : rgba(100, 100, 100, 0.4);
+@inputHighlightColor : @textColor;
+
+
+/*-------------------
+ Loader
+--------------------*/
+
+@loaderSize : @relativeBig;
+@loaderSpeed : 0.6s;
+@loaderLineWidth : 0.2em;
+@loaderFillColor : rgba(0, 0, 0, 0.1);
+@loaderLineColor : @grey;
+
+@invertedLoaderFillColor : rgba(255, 255, 255, 0.15);
+@invertedLoaderLineColor : @white;
+
+/*-------------------
+ Grid
+--------------------*/
+
+@columnCount: 16;
+
+/*-------------------
+ Transitions
+--------------------*/
+
+@defaultDuration : 0.1s;
+@defaultEasing : ease;
+
+/*-------------------
+ Breakpoints
+--------------------*/
+
+@mobileBreakpoint : 320px;
+@tabletBreakpoint : 768px;
+@computerBreakpoint : 992px;
+@largeMonitorBreakpoint : 1200px;
+@widescreenMonitorBreakpoint : 1920px;
+
+/*-------------------
+ Site Colors
+--------------------*/
+
+/*--- Colors ---*/
+@red : #DB2828;
+@orange : #F2711C;
+@yellow : #FBBD08;
+@olive : #B5CC18;
+@green : #21BA45;
+@teal : #00B5AD;
+@blue : #2185D0;
+@violet : #6435C9;
+@purple : #A333C8;
+@pink : #E03997;
+@brown : #A5673F;
+@grey : #767676;
+@black : #1B1C1D;
+
+/*--- Light Colors ---*/
+@lightRed : #FF695E;
+@lightOrange : #FF851B;
+@lightYellow : #FFE21F;
+@lightOlive : #D9E778;
+@lightGreen : #2ECC40;
+@lightTeal : #6DFFFF;
+@lightBlue : #54C8FF;
+@lightViolet : #A291FB;
+@lightPurple : #DC73FF;
+@lightPink : #FF8EDF;
+@lightBrown : #D67C1C;
+@lightGrey : #DCDDDE;
+@lightBlack : #545454;
+
+/*--- Neutrals ---*/
+@fullBlack : #000000;
+@offWhite : #F9FAFB;
+@darkWhite : #F3F4F5;
+@midWhite : #DCDDDE;
+@white : #FFFFFF;
+
+/*--- Colored Backgrounds ---*/
+@redBackground : #FFE8E6;
+@orangeBackground : #FFEDDE;
+@yellowBackground : #FFF8DB;
+@oliveBackground : #FBFDEF;
+@greenBackground : #E5F9E7;
+@tealBackground : #E1F7F7;
+@blueBackground : #DFF0FF;
+@violetBackground : #EAE7FF;
+@purpleBackground : #F6E7FF;
+@pinkBackground : #FFE3FB;
+@brownBackground : #F1E2D3;
+
+/*--- Colored Headers ---*/
+@redHeaderColor : darken(@redTextColor, 5);
+@oliveHeaderColor : darken(@oliveTextColor, 5);
+@greenHeaderColor : darken(@greenTextColor, 5);
+@yellowHeaderColor : darken(@yellowTextColor, 5);
+@blueHeaderColor : darken(@blueTextColor, 5);
+@tealHeaderColor : darken(@tealTextColor, 5);
+@pinkHeaderColor : darken(@pinkTextColor, 5);
+@violetHeaderColor : darken(@violetTextColor, 5);
+@purpleHeaderColor : darken(@purpleTextColor, 5);
+@orangeHeaderColor : darken(@orangeTextColor, 5);
+@brownHeaderColor : darken(@brownTextColor, 5);
+
+/*--- Colored Text ---*/
+@redTextColor : @red;
+@orangeTextColor : @orange;
+@yellowTextColor : #B58105; // Yellow text is difficult to read
+@oliveTextColor : #8ABC1E; // Olive is difficult to read
+@greenTextColor : #1EBC30; // Green is difficult to read
+@tealTextColor : #10A3A3; // Teal text is difficult to read
+@blueTextColor : @blue;
+@violetTextColor : @violet;
+@purpleTextColor : @purple;
+@pinkTextColor : @pink;
+@brownTextColor : @brown;
+
+/*--- Colored Border ---*/
+@redBorderColor : @redTextColor;
+@orangeBorderColor : @orangeTextColor;
+@yellowBorderColor : @yellowTextColor;
+@oliveBorderColor : @oliveTextColor;
+@greenBorderColor : @greenTextColor;
+@tealBorderColor : @tealTextColor;
+@blueBorderColor : @blueTextColor;
+@violetBorderColor : @violetTextColor;
+@purpleBorderColor : @purpleTextColor;
+@pinkBorderColor : @pinkTextColor;
+@brownBorderColor : @brownTextColor;
+
+/*-------------------
+ Alpha Colors
+--------------------*/
+
+@subtleTransparentBlack : rgba(0, 0, 0, 0.03);
+@transparentBlack : rgba(0, 0, 0, 0.05);
+@strongTransparentBlack : rgba(0, 0, 0, 0.10);
+@veryStrongTransparentBlack : rgba(0, 0, 0, 0.15);
+
+@subtleTransparentWhite : rgba(255, 255, 255, 0.02);
+@transparentWhite : rgba(255, 255, 255, 0.08);
+@strongTransparentWhite : rgba(255, 255, 255, 0.15);
+
+/*-------------------
+ Accents
+--------------------*/
+
+/* Differentiating Neutrals */
+@subtleGradient: linear-gradient(transparent, @transparentBlack);
+
+/* Differentiating Layers */
+@subtleShadow:
+ 0px 1px 2px 0 @borderColor
+;
+@floatingShadow:
+ 0px 2px 4px 0px rgba(34, 36, 38, 0.12),
+ 0px 2px 10px 0px rgba(34, 36, 38, 0.15)
+;
+
+/*******************************
+ Power-User
+*******************************/
+
+
+/*-------------------
+ Emotive Colors
+--------------------*/
+
+/* Positive */
+@positiveColor : @green;
+@positiveBackgroundColor : #FCFFF5;
+@positiveBorderColor : #A3C293;
+@positiveHeaderColor : #1A531B;
+@positiveTextColor : #2C662D;
+
+/* Negative */
+@negativeColor : @red;
+@negativeBackgroundColor : #FFF6F6;
+@negativeBorderColor : #E0B4B4;
+@negativeHeaderColor : #912D2B;
+@negativeTextColor : #9F3A38;
+
+/* Info */
+@infoColor : #31CCEC;
+@infoBackgroundColor : #F8FFFF;
+@infoBorderColor : #A9D5DE;
+@infoHeaderColor : #0E566C;
+@infoTextColor : #276F86;
+
+/* Warning */
+@warningColor : #F2C037;
+@warningBorderColor : #C9BA9B;
+@warningBackgroundColor : #FFFAF3;
+@warningHeaderColor : #794B02;
+@warningTextColor : #573A08;
+
+/*-------------------
+ Paths
+--------------------*/
+
+/* For source only. Modified in gulp for dist */
+@imagePath : '../../themes/default/assets/images';
+@fontPath : '../../themes/default/assets/fonts';
+
+/*-------------------
+ Em Sizes
+--------------------*/
+
+/*
+ This rounds @size values to the closest pixel then expresses that value in (r)em.
+ This ensures all size values round to exact pixels
+*/
+@mini : unit( round(@miniSize * @emSize) / @emSize, rem);
+@tiny : unit( round(@tinySize * @emSize) / @emSize, rem);
+@small : unit( round(@smallSize * @emSize) / @emSize, rem);
+@medium : unit( round(@mediumSize * @emSize) / @emSize, rem);
+@large : unit( round(@largeSize * @emSize) / @emSize, rem);
+@big : unit( round(@bigSize * @emSize) / @emSize, rem);
+@huge : unit( round(@hugeSize * @emSize) / @emSize, rem);
+@massive : unit( round(@massiveSize * @emSize) / @emSize, rem);
+
+/* em */
+@relativeMini : unit( round(@miniSize * @emSize) / @emSize, em);
+@relativeTiny : unit( round(@tinySize * @emSize) / @emSize, em);
+@relativeSmall : unit( round(@smallSize * @emSize) / @emSize, em);
+@relativeMedium : unit( round(@mediumSize * @emSize) / @emSize, em);
+@relativeLarge : unit( round(@largeSize * @emSize) / @emSize, em);
+@relativeBig : unit( round(@bigSize * @emSize) / @emSize, em);
+@relativeHuge : unit( round(@hugeSize * @emSize) / @emSize, em);
+@relativeMassive : unit( round(@massiveSize * @emSize) / @emSize, em);
+
+/* rem */
+@absoluteMini : unit( round(@miniSize * @emSize) / @emSize, rem);
+@absoluteTiny : unit( round(@tinySize * @emSize) / @emSize, rem);
+@absoluteSmall : unit( round(@smallSize * @emSize) / @emSize, rem);
+@absoluteMedium : unit( round(@mediumSize * @emSize) / @emSize, rem);
+@absoluteLarge : unit( round(@largeSize * @emSize) / @emSize, rem);
+@absoluteBig : unit( round(@bigSize * @emSize) / @emSize, rem);
+@absoluteHuge : unit( round(@hugeSize * @emSize) / @emSize, rem);
+@absoluteMassive : unit( round(@massiveSize * @emSize) / @emSize, rem);
+
+/*-------------------
+ Icons
+--------------------*/
+
+/* Maximum Glyph Width of Icon */
+@iconWidth : 1.18em;
+
+/*-------------------
+ Neutral Text
+--------------------*/
+
+@darkTextColor : rgba(0, 0, 0, 0.85);
+@mutedTextColor : rgba(0, 0, 0, 0.6);
+@lightTextColor : rgba(0, 0, 0, 0.4);
+
+@unselectedTextColor : rgba(0, 0, 0, 0.4);
+@hoveredTextColor : rgba(0, 0, 0, 0.8);
+@pressedTextColor : rgba(0, 0, 0, 0.9);
+@selectedTextColor : rgba(0, 0, 0, 0.95);
+@disabledTextColor : rgba(0, 0, 0, 0.2);
+
+@invertedTextColor : rgba(255, 255, 255, 0.9);
+@invertedMutedTextColor : rgba(255, 255, 255, 0.8);
+@invertedLightTextColor : rgba(255, 255, 255, 0.7);
+@invertedUnselectedTextColor : rgba(255, 255, 255, 0.5);
+@invertedHoveredTextColor : rgba(255, 255, 255, 1);
+@invertedPressedTextColor : rgba(255, 255, 255, 1);
+@invertedSelectedTextColor : rgba(255, 255, 255, 1);
+@invertedDisabledTextColor : rgba(255, 255, 255, 0.2);
+
+/*-------------------
+ Brand Colors
+--------------------*/
+
+@facebookColor : #3B5998;
+@twitterColor : #0084B4;
+@googlePlusColor : #DC4A38;
+@linkedInColor : #1F88BE;
+@youtubeColor : #CC181E;
+@instagramColor : #49769C;
+@pinterestColor : #00ACED;
+@vkColor : #4D7198;
+
+/*-------------------
+ Borders
+--------------------*/
+
+@circularRadius : 500rem;
+
+@borderColor : rgba(34, 36, 38, 0.15);
+@strongBorderColor : rgba(34, 36, 38, 0.22);
+@internalBorderColor : rgba(34, 36, 38, 0.1);
+@selectedBorderColor : rgba(34, 36, 38, 0.35);
+@strongSelectedBorderColor : rgba(34, 36, 38, 0.5);
+@disabledBorderColor : rgba(34, 36, 38, 0.5);
+
+@solidInternalBorderColor : #FAFAFA;
+@solidBorderColor : #D4D4D5;
+@solidSelectedBorderColor : #BCBDBD;
+
+@whiteBorderColor : rgba(255, 255, 255, 0.1);
+@selectedWhiteBorderColor : rgba(255, 255, 255, 0.8);
+
+@solidWhiteBorderColor : #555555;
+@selectedSolidWhiteBorderColor : #999999;
+
+
+/*-------------------
+ Derived Values
+--------------------*/
+
+/* Loaders Position Offset */
+@loaderOffset : -(@loaderSize / 2);
+@loaderMargin : @loaderOffset 0em 0em @loaderOffset;
+
+/* Rendered Scrollbar Width */
+@scrollbarWidth: 17px;
+
+/* Maximum Single Character Glyph Width, aka Capital "W" */
+@glyphWidth: 1.1em;
+
+/* Used to match floats with text */
+@lineHeightOffset : ((@lineHeight - 1em) / 2);
+@headerLineHeightOffset : (@headerLineHeight - 1em) / 2;
+
+/* Header Spacing */
+@headerTopMargin : ~"calc(2rem - "@headerLineHeightOffset~")";
+@headerBottomMargin : 1rem;
+@headerMargin : @headerTopMargin 0em @headerBottomMargin;
+
+/* Minimum Mobile Width */
+@pageMinWidth : 320px;
+
+/* Positive / Negative Dupes */
+@successBackgroundColor : @positiveBackgroundColor;
+@successColor : @positiveColor;
+@successBorderColor : @positiveBorderColor;
+@successHeaderColor : @positiveHeaderColor;
+@successTextColor : @positiveTextColor;
+
+@errorBackgroundColor : @negativeBackgroundColor;
+@errorColor : @negativeColor;
+@errorBorderColor : @negativeBorderColor;
+@errorHeaderColor : @negativeHeaderColor;
+@errorTextColor : @negativeTextColor;
+
+
+/* Responsive */
+@largestMobileScreen : (@tabletBreakpoint - 1px);
+@largestTabletScreen : (@computerBreakpoint - 1px);
+@largestSmallMonitor : (@largeMonitorBreakpoint - 1px);
+@largestLargeMonitor : (@widescreenMonitorBreakpoint - 1px);
+
+
+/*-------------------
+ Exact Pixel Values
+--------------------*/
+/*
+ These are used to specify exact pixel values in em
+ for things like borders that remain constantly
+ sized as emSize adjusts
+
+ Since there are many more sizes than names for sizes,
+ these are named by their original pixel values.
+
+*/
+
+@1px : unit( (1 / @emSize), rem);
+@2px : unit( (2 / @emSize), rem);
+@3px : unit( (3 / @emSize), rem);
+@4px : unit( (4 / @emSize), rem);
+@5px : unit( (5 / @emSize), rem);
+@6px : unit( (6 / @emSize), rem);
+@7px : unit( (7 / @emSize), rem);
+@8px : unit( (8 / @emSize), rem);
+@9px : unit( (9 / @emSize), rem);
+@10px : unit( (10 / @emSize), rem);
+@11px : unit( (11 / @emSize), rem);
+@12px : unit( (12 / @emSize), rem);
+@13px : unit( (13 / @emSize), rem);
+@14px : unit( (14 / @emSize), rem);
+@15px : unit( (15 / @emSize), rem);
+@16px : unit( (16 / @emSize), rem);
+@17px : unit( (17 / @emSize), rem);
+@18px : unit( (18 / @emSize), rem);
+@19px : unit( (19 / @emSize), rem);
+@20px : unit( (20 / @emSize), rem);
+@21px : unit( (21 / @emSize), rem);
+@22px : unit( (22 / @emSize), rem);
+@23px : unit( (23 / @emSize), rem);
+@24px : unit( (24 / @emSize), rem);
+@25px : unit( (25 / @emSize), rem);
+@26px : unit( (26 / @emSize), rem);
+@27px : unit( (27 / @emSize), rem);
+@28px : unit( (28 / @emSize), rem);
+@29px : unit( (29 / @emSize), rem);
+@30px : unit( (30 / @emSize), rem);
+@31px : unit( (31 / @emSize), rem);
+@32px : unit( (32 / @emSize), rem);
+@33px : unit( (33 / @emSize), rem);
+@34px : unit( (34 / @emSize), rem);
+@35px : unit( (35 / @emSize), rem);
+@36px : unit( (36 / @emSize), rem);
+@37px : unit( (37 / @emSize), rem);
+@38px : unit( (38 / @emSize), rem);
+@39px : unit( (39 / @emSize), rem);
+@40px : unit( (40 / @emSize), rem);
+@41px : unit( (41 / @emSize), rem);
+@42px : unit( (42 / @emSize), rem);
+@43px : unit( (43 / @emSize), rem);
+@44px : unit( (44 / @emSize), rem);
+@45px : unit( (45 / @emSize), rem);
+@46px : unit( (46 / @emSize), rem);
+@47px : unit( (47 / @emSize), rem);
+@48px : unit( (48 / @emSize), rem);
+@49px : unit( (49 / @emSize), rem);
+@50px : unit( (50 / @emSize), rem);
+@51px : unit( (51 / @emSize), rem);
+@52px : unit( (52 / @emSize), rem);
+@53px : unit( (53 / @emSize), rem);
+@54px : unit( (54 / @emSize), rem);
+@55px : unit( (55 / @emSize), rem);
+@56px : unit( (56 / @emSize), rem);
+@57px : unit( (57 / @emSize), rem);
+@58px : unit( (58 / @emSize), rem);
+@59px : unit( (59 / @emSize), rem);
+@60px : unit( (60 / @emSize), rem);
+@61px : unit( (61 / @emSize), rem);
+@62px : unit( (62 / @emSize), rem);
+@63px : unit( (63 / @emSize), rem);
+@64px : unit( (64 / @emSize), rem);
+
+@relative1px : unit( (1 / @emSize), em);
+@relative2px : unit( (2 / @emSize), em);
+@relative3px : unit( (3 / @emSize), em);
+@relative4px : unit( (4 / @emSize), em);
+@relative5px : unit( (5 / @emSize), em);
+@relative6px : unit( (6 / @emSize), em);
+@relative7px : unit( (7 / @emSize), em);
+@relative8px : unit( (8 / @emSize), em);
+@relative9px : unit( (9 / @emSize), em);
+@relative10px : unit( (10 / @emSize), em);
+@relative11px : unit( (11 / @emSize), em);
+@relative12px : unit( (12 / @emSize), em);
+@relative13px : unit( (13 / @emSize), em);
+@relative14px : unit( (14 / @emSize), em);
+@relative15px : unit( (15 / @emSize), em);
+@relative16px : unit( (16 / @emSize), em);
+@relative17px : unit( (17 / @emSize), em);
+@relative18px : unit( (18 / @emSize), em);
+@relative19px : unit( (19 / @emSize), em);
+@relative20px : unit( (20 / @emSize), em);
+@relative21px : unit( (21 / @emSize), em);
+@relative22px : unit( (22 / @emSize), em);
+@relative23px : unit( (23 / @emSize), em);
+@relative24px : unit( (24 / @emSize), em);
+@relative25px : unit( (25 / @emSize), em);
+@relative26px : unit( (26 / @emSize), em);
+@relative27px : unit( (27 / @emSize), em);
+@relative28px : unit( (28 / @emSize), em);
+@relative29px : unit( (29 / @emSize), em);
+@relative30px : unit( (30 / @emSize), em);
+@relative31px : unit( (31 / @emSize), em);
+@relative32px : unit( (32 / @emSize), em);
+@relative33px : unit( (33 / @emSize), em);
+@relative34px : unit( (34 / @emSize), em);
+@relative35px : unit( (35 / @emSize), em);
+@relative36px : unit( (36 / @emSize), em);
+@relative37px : unit( (37 / @emSize), em);
+@relative38px : unit( (38 / @emSize), em);
+@relative39px : unit( (39 / @emSize), em);
+@relative40px : unit( (40 / @emSize), em);
+@relative41px : unit( (41 / @emSize), em);
+@relative42px : unit( (42 / @emSize), em);
+@relative43px : unit( (43 / @emSize), em);
+@relative44px : unit( (44 / @emSize), em);
+@relative45px : unit( (45 / @emSize), em);
+@relative46px : unit( (46 / @emSize), em);
+@relative47px : unit( (47 / @emSize), em);
+@relative48px : unit( (48 / @emSize), em);
+@relative49px : unit( (49 / @emSize), em);
+@relative50px : unit( (50 / @emSize), em);
+@relative51px : unit( (51 / @emSize), em);
+@relative52px : unit( (52 / @emSize), em);
+@relative53px : unit( (53 / @emSize), em);
+@relative54px : unit( (54 / @emSize), em);
+@relative55px : unit( (55 / @emSize), em);
+@relative56px : unit( (56 / @emSize), em);
+@relative57px : unit( (57 / @emSize), em);
+@relative58px : unit( (58 / @emSize), em);
+@relative59px : unit( (59 / @emSize), em);
+@relative60px : unit( (60 / @emSize), em);
+@relative61px : unit( (61 / @emSize), em);
+@relative62px : unit( (62 / @emSize), em);
+@relative63px : unit( (63 / @emSize), em);
+@relative64px : unit( (64 / @emSize), em);
+
+/* Columns */
+@oneWide : (1 / @columnCount * 100%);
+@twoWide : (2 / @columnCount * 100%);
+@threeWide : (3 / @columnCount * 100%);
+@fourWide : (4 / @columnCount * 100%);
+@fiveWide : (5 / @columnCount * 100%);
+@sixWide : (6 / @columnCount * 100%);
+@sevenWide : (7 / @columnCount * 100%);
+@eightWide : (8 / @columnCount * 100%);
+@nineWide : (9 / @columnCount * 100%);
+@tenWide : (10 / @columnCount * 100%);
+@elevenWide : (11 / @columnCount * 100%);
+@twelveWide : (12 / @columnCount * 100%);
+@thirteenWide : (13 / @columnCount * 100%);
+@fourteenWide : (14 / @columnCount * 100%);
+@fifteenWide : (15 / @columnCount * 100%);
+@sixteenWide : (16 / @columnCount * 100%);
+
+@oneColumn : (1 / 1 * 100%);
+@twoColumn : (1 / 2 * 100%);
+@threeColumn : (1 / 3 * 100%);
+@fourColumn : (1 / 4 * 100%);
+@fiveColumn : (1 / 5 * 100%);
+@sixColumn : (1 / 6 * 100%);
+@sevenColumn : (1 / 7 * 100%);
+@eightColumn : (1 / 8 * 100%);
+@nineColumn : (1 / 9 * 100%);
+@tenColumn : (1 / 10 * 100%);
+@elevenColumn : (1 / 11 * 100%);
+@twelveColumn : (1 / 12 * 100%);
+@thirteenColumn : (1 / 13 * 100%);
+@fourteenColumn : (1 / 14 * 100%);
+@fifteenColumn : (1 / 15 * 100%);
+@sixteenColumn : (1 / 16 * 100%);
+
+
+/*******************************
+ States
+*******************************/
+
+/*-------------------
+ Disabled
+--------------------*/
+
+@disabledOpacity: 0.45;
+@disabledTextColor: rgba(40, 40, 40, 0.3);
+@invertedDisabledTextColor: rgba(225, 225, 225, 0.3);
+
+/*-------------------
+ Hover
+--------------------*/
+
+/*--- Shadows ---*/
+@floatingShadowHover:
+ 0px 2px 4px 0px rgba(34, 36, 38, 0.15),
+ 0px 2px 10px 0px rgba(34, 36, 38, 0.25)
+;
+
+/*--- Colors ---*/
+@primaryColorHover : saturate(darken(@primaryColor, 5), 10, relative);
+@secondaryColorHover : saturate(lighten(@secondaryColor, 5), 10, relative);
+
+@redHover : saturate(darken(@red, 5), 10, relative);
+@orangeHover : saturate(darken(@orange, 5), 10, relative);
+@yellowHover : saturate(darken(@yellow, 5), 10, relative);
+@oliveHover : saturate(darken(@olive, 5), 10, relative);
+@greenHover : saturate(darken(@green, 5), 10, relative);
+@tealHover : saturate(darken(@teal, 5), 10, relative);
+@blueHover : saturate(darken(@blue, 5), 10, relative);
+@violetHover : saturate(darken(@violet, 5), 10, relative);
+@purpleHover : saturate(darken(@purple, 5), 10, relative);
+@pinkHover : saturate(darken(@pink, 5), 10, relative);
+@brownHover : saturate(darken(@brown, 5), 10, relative);
+
+@lightRedHover : saturate(darken(@lightRed, 5), 10, relative);
+@lightOrangeHover : saturate(darken(@lightOrange, 5), 10, relative);
+@lightYellowHover : saturate(darken(@lightYellow, 5), 10, relative);
+@lightOliveHover : saturate(darken(@lightOlive, 5), 10, relative);
+@lightGreenHover : saturate(darken(@lightGreen, 5), 10, relative);
+@lightTealHover : saturate(darken(@lightTeal, 5), 10, relative);
+@lightBlueHover : saturate(darken(@lightBlue, 5), 10, relative);
+@lightVioletHover : saturate(darken(@lightViolet, 5), 10, relative);
+@lightPurpleHover : saturate(darken(@lightPurple, 5), 10, relative);
+@lightPinkHover : saturate(darken(@lightPink, 5), 10, relative);
+@lightBrownHover : saturate(darken(@lightBrown, 5), 10, relative);
+@lightGreyHover : saturate(darken(@lightGrey, 5), 10, relative);
+@lightBlackHover : saturate(darken(@fullBlack, 5), 10, relative);
+
+/*--- Emotive ---*/
+@positiveColorHover : saturate(darken(@positiveColor, 5), 10, relative);
+@negativeColorHover : saturate(darken(@negativeColor, 5), 10, relative);
+
+/*--- Brand ---*/
+@facebookHoverColor : saturate(darken(@facebookColor, 5), 10, relative);
+@twitterHoverColor : saturate(darken(@twitterColor, 5), 10, relative);
+@googlePlusHoverColor : saturate(darken(@googlePlusColor, 5), 10, relative);
+@linkedInHoverColor : saturate(darken(@linkedInColor, 5), 10, relative);
+@youtubeHoverColor : saturate(darken(@youtubeColor, 5), 10, relative);
+@instagramHoverColor : saturate(darken(@instagramColor, 5), 10, relative);
+@pinterestHoverColor : saturate(darken(@pinterestColor, 5), 10, relative);
+@vkHoverColor : saturate(darken(@vkColor, 5), 10, relative);
+
+/*--- Dark Tones ---*/
+@fullBlackHover : lighten(@fullBlack, 5);
+@blackHover : lighten(@black, 5);
+@greyHover : lighten(@grey, 5);
+
+/*--- Light Tones ---*/
+@whiteHover : darken(@white, 5);
+@offWhiteHover : darken(@offWhite, 5);
+@darkWhiteHover : darken(@darkWhite, 5);
+
+/*-------------------
+ Focus
+--------------------*/
+
+/*--- Colors ---*/
+@primaryColorFocus : saturate(darken(@primaryColor, 8), 20, relative);
+@secondaryColorFocus : saturate(lighten(@secondaryColor, 8), 20, relative);
+
+@redFocus : saturate(darken(@red, 8), 20, relative);
+@orangeFocus : saturate(darken(@orange, 8), 20, relative);
+@yellowFocus : saturate(darken(@yellow, 8), 20, relative);
+@oliveFocus : saturate(darken(@olive, 8), 20, relative);
+@greenFocus : saturate(darken(@green, 8), 20, relative);
+@tealFocus : saturate(darken(@teal, 8), 20, relative);
+@blueFocus : saturate(darken(@blue, 8), 20, relative);
+@violetFocus : saturate(darken(@violet, 8), 20, relative);
+@purpleFocus : saturate(darken(@purple, 8), 20, relative);
+@pinkFocus : saturate(darken(@pink, 8), 20, relative);
+@brownFocus : saturate(darken(@brown, 8), 20, relative);
+
+@lightRedFocus : saturate(darken(@lightRed, 8), 20, relative);
+@lightOrangeFocus : saturate(darken(@lightOrange, 8), 20, relative);
+@lightYellowFocus : saturate(darken(@lightYellow, 8), 20, relative);
+@lightOliveFocus : saturate(darken(@lightOlive, 8), 20, relative);
+@lightGreenFocus : saturate(darken(@lightGreen, 8), 20, relative);
+@lightTealFocus : saturate(darken(@lightTeal, 8), 20, relative);
+@lightBlueFocus : saturate(darken(@lightBlue, 8), 20, relative);
+@lightVioletFocus : saturate(darken(@lightViolet, 8), 20, relative);
+@lightPurpleFocus : saturate(darken(@lightPurple, 8), 20, relative);
+@lightPinkFocus : saturate(darken(@lightPink, 8), 20, relative);
+@lightBrownFocus : saturate(darken(@lightBrown, 8), 20, relative);
+@lightGreyFocus : saturate(darken(@lightGrey, 8), 20, relative);
+@lightBlackFocus : saturate(darken(@fullBlack, 8), 20, relative);
+
+/*--- Emotive ---*/
+@positiveColorFocus : saturate(darken(@positiveColor, 8), 20, relative);
+@negativeColorFocus : saturate(darken(@negativeColor, 8), 20, relative);
+
+/*--- Brand ---*/
+@facebookFocusColor : saturate(darken(@facebookColor, 8), 20, relative);
+@twitterFocusColor : saturate(darken(@twitterColor, 8), 20, relative);
+@googlePlusFocusColor : saturate(darken(@googlePlusColor, 8), 20, relative);
+@linkedInFocusColor : saturate(darken(@linkedInColor, 8), 20, relative);
+@youtubeFocusColor : saturate(darken(@youtubeColor, 8), 20, relative);
+@instagramFocusColor : saturate(darken(@instagramColor, 8), 20, relative);
+@pinterestFocusColor : saturate(darken(@pinterestColor, 8), 20, relative);
+@vkFocusColor : saturate(darken(@vkColor, 8), 20, relative);
+
+/*--- Dark Tones ---*/
+@fullBlackFocus : lighten(@fullBlack, 8);
+@blackFocus : lighten(@black, 8);
+@greyFocus : lighten(@grey, 8);
+
+/*--- Light Tones ---*/
+@whiteFocus : darken(@white, 8);
+@offWhiteFocus : darken(@offWhite, 8);
+@darkWhiteFocus : darken(@darkWhite, 8);
+
+
+/*-------------------
+ Down (:active)
+--------------------*/
+
+/*--- Colors ---*/
+@primaryColorDown : darken(@primaryColor, 10);
+@secondaryColorDown : lighten(@secondaryColor, 10);
+
+@redDown : darken(@red, 10);
+@orangeDown : darken(@orange, 10);
+@yellowDown : darken(@yellow, 10);
+@oliveDown : darken(@olive, 10);
+@greenDown : darken(@green, 10);
+@tealDown : darken(@teal, 10);
+@blueDown : darken(@blue, 10);
+@violetDown : darken(@violet, 10);
+@purpleDown : darken(@purple, 10);
+@pinkDown : darken(@pink, 10);
+@brownDown : darken(@brown, 10);
+
+@lightRedDown : darken(@lightRed, 10);
+@lightOrangeDown : darken(@lightOrange, 10);
+@lightYellowDown : darken(@lightYellow, 10);
+@lightOliveDown : darken(@lightOlive, 10);
+@lightGreenDown : darken(@lightGreen, 10);
+@lightTealDown : darken(@lightTeal, 10);
+@lightBlueDown : darken(@lightBlue, 10);
+@lightVioletDown : darken(@lightViolet, 10);
+@lightPurpleDown : darken(@lightPurple, 10);
+@lightPinkDown : darken(@lightPink, 10);
+@lightBrownDown : darken(@lightBrown, 10);
+@lightGreyDown : darken(@lightGrey, 10);
+@lightBlackDown : darken(@fullBlack, 10);
+
+/*--- Emotive ---*/
+@positiveColorDown : darken(@positiveColor, 10);
+@negativeColorDown : darken(@negativeColor, 10);
+
+/*--- Brand ---*/
+@facebookDownColor : darken(@facebookColor, 10);
+@twitterDownColor : darken(@twitterColor, 10);
+@googlePlusDownColor : darken(@googlePlusColor, 10);
+@linkedInDownColor : darken(@linkedInColor, 10);
+@youtubeDownColor : darken(@youtubeColor, 10);
+@instagramDownColor : darken(@instagramColor, 10);
+@pinterestDownColor : darken(@pinterestColor, 10);
+@vkDownColor : darken(@vkColor, 10);
+
+/*--- Dark Tones ---*/
+@fullBlackDown : lighten(@fullBlack, 10);
+@blackDown : lighten(@black, 10);
+@greyDown : lighten(@grey, 10);
+
+/*--- Light Tones ---*/
+@whiteDown : darken(@white, 10);
+@offWhiteDown : darken(@offWhite, 10);
+@darkWhiteDown : darken(@darkWhite, 10);
+
+
+/*-------------------
+ Active
+--------------------*/
+
+/*--- Colors ---*/
+@primaryColorActive : saturate(darken(@primaryColor, 5), 15, relative);
+@secondaryColorActive : saturate(lighten(@secondaryColor, 5), 15, relative);
+
+@redActive : saturate(darken(@red, 5), 15, relative);
+@orangeActive : saturate(darken(@orange, 5), 15, relative);
+@yellowActive : saturate(darken(@yellow, 5), 15, relative);
+@oliveActive : saturate(darken(@olive, 5), 15, relative);
+@greenActive : saturate(darken(@green, 5), 15, relative);
+@tealActive : saturate(darken(@teal, 5), 15, relative);
+@blueActive : saturate(darken(@blue, 5), 15, relative);
+@violetActive : saturate(darken(@violet, 5), 15, relative);
+@purpleActive : saturate(darken(@purple, 5), 15, relative);
+@pinkActive : saturate(darken(@pink, 5), 15, relative);
+@brownActive : saturate(darken(@brown, 5), 15, relative);
+
+@lightRedActive : saturate(darken(@lightRed, 5), 15, relative);
+@lightOrangeActive : saturate(darken(@lightOrange, 5), 15, relative);
+@lightYellowActive : saturate(darken(@lightYellow, 5), 15, relative);
+@lightOliveActive : saturate(darken(@lightOlive, 5), 15, relative);
+@lightGreenActive : saturate(darken(@lightGreen, 5), 15, relative);
+@lightTealActive : saturate(darken(@lightTeal, 5), 15, relative);
+@lightBlueActive : saturate(darken(@lightBlue, 5), 15, relative);
+@lightVioletActive : saturate(darken(@lightViolet, 5), 15, relative);
+@lightPurpleActive : saturate(darken(@lightPurple, 5), 15, relative);
+@lightPinkActive : saturate(darken(@lightPink, 5), 15, relative);
+@lightBrownActive : saturate(darken(@lightBrown, 5), 15, relative);
+@lightGreyActive : saturate(darken(@lightGrey, 5), 15, relative);
+@lightBlackActive : saturate(darken(@fullBlack, 5), 15, relative);
+
+/*--- Emotive ---*/
+@positiveColorActive : saturate(darken(@positiveColor, 5), 15, relative);
+@negativeColorActive : saturate(darken(@negativeColor, 5), 15, relative);
+
+/*--- Brand ---*/
+@facebookActiveColor : saturate(darken(@facebookColor, 5), 15, relative);
+@twitterActiveColor : saturate(darken(@twitterColor, 5), 15, relative);
+@googlePlusActiveColor : saturate(darken(@googlePlusColor, 5), 15, relative);
+@linkedInActiveColor : saturate(darken(@linkedInColor, 5), 15, relative);
+@youtubeActiveColor : saturate(darken(@youtubeColor, 5), 15, relative);
+@instagramActiveColor : saturate(darken(@instagramColor, 5), 15, relative);
+@pinterestActiveColor : saturate(darken(@pinterestColor, 5), 15, relative);
+@vkActiveColor : saturate(darken(@vkColor, 5), 15, relative);
+
+/*--- Dark Tones ---*/
+@fullBlackActive : darken(@fullBlack, 5);
+@blackActive : darken(@black, 5);
+@greyActive : darken(@grey, 5);
+
+/*--- Light Tones ---*/
+@whiteActive : darken(@white, 5);
+@offWhiteActive : darken(@offWhite, 5);
+@darkWhiteActive : darken(@darkWhite, 5);
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/accordion.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/accordion.overrides b/semantic/src/themes/default/modules/accordion.overrides
new file mode 100644
index 0000000..52c8dbd
--- /dev/null
+++ b/semantic/src/themes/default/modules/accordion.overrides
@@ -0,0 +1,28 @@
+/*******************************
+ Theme Overrides
+*******************************/
+@font-face {
+ font-family: 'Accordion';
+ src:
+ url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAA
BgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'),
+ url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPK
wADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff')
+ ;
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* Dropdown Icon */
+.ui.accordion .title .dropdown.icon,
+.ui.accordion .accordion .title .dropdown.icon {
+ font-family: Accordion;
+ line-height: 1;
+ backface-visibility: hidden;
+ font-weight: normal;
+ font-style: normal;
+ text-align: center;
+}
+
+.ui.accordion .title .dropdown.icon:before,
+.ui.accordion .accordion .title .dropdown.icon:before {
+ content: '\f0da'/*rtl:'\f0d9'*/;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/accordion.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/accordion.variables b/semantic/src/themes/default/modules/accordion.variables
new file mode 100644
index 0000000..b025e01
--- /dev/null
+++ b/semantic/src/themes/default/modules/accordion.variables
@@ -0,0 +1,100 @@
+/*******************************
+ Accordion
+*******************************/
+
+@boxShadow: none;
+
+/* Title */
+@titleFont: @headerFont;
+@titlePadding: 0.5em 0em;
+@titleFontSize: 1em;
+@titleColor: @textColor;
+
+/* Icon */
+@iconOpacity: 1;
+@iconFontSize: 1em;
+@iconFloat: none;
+@iconWidth: 1.25em;
+@iconHeight: 1em;
+@iconDisplay: inline-block;
+@iconMargin: 0em 0.25rem 0em 0rem;
+@iconPadding: 0em;
+@iconTransition:
+ transform @defaultDuration @defaultEasing,
+ opacity @defaultDuration @defaultEasing
+;
+@iconVerticalAlign: baseline;
+@iconTransform: none;
+
+/* Child Accordion */
+@childAccordionMargin: 1em 0em 0em;
+@childAccordionPadding: 0em;
+
+/* Content */
+@contentMargin: '';
+@contentPadding: 0.5em 0em 1em;
+
+/*-------------------
+ Coupling
+--------------------*/
+
+@menuTitlePadding: 0em;
+@menuIconFloat: right;
+@menuIconMargin: @lineHeightOffset 0em 0em 1em;
+@menuIconTransform: rotate(180deg);
+
+
+/*-------------------
+ States
+--------------------*/
+
+@activeIconTransform: rotate(90deg);
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Styled */
+@styledWidth: 600px;
+@styledBackground: @white;
+@styledBorderRadius: @defaultBorderRadius;
+@styledBoxShadow:
+ @subtleShadow,
+ 0px 0px 0px 1px @borderColor
+;
+
+/* Content */
+@styledContentMargin: 0em;
+@styledContentPadding: 0.5em 1em 1.5em;
+
+/* Child Content */
+@styledChildContentMargin: 0em;
+@styledChildContentPadding: @styledContentPadding;
+
+/* Styled Title */
+@styledTitleMargin: 0em;
+@styledTitlePadding: 0.75em 1em;
+@styledTitleFontWeight: bold;
+@styledTitleColor: @unselectedTextColor;
+@styledTitleTransition: background-color @defaultDuration @defaultEasing;
+@styledTitleBorder: 1px solid @borderColor;
+@styledTitleTransition:
+ background @defaultDuration @defaultEasing,
+ color @defaultDuration @defaultEasing
+;
+
+/* Styled Title States */
+@styledTitleHoverBackground: transparent;
+@styledTitleHoverColor: @textColor;
+@styledActiveTitleBackground: transparent;
+@styledActiveTitleColor: @selectedTextColor;
+
+/* Styled Child Title States */
+@styledHoverChildTitleBackground: @styledTitleHoverBackground;
+@styledHoverChildTitleColor: @styledTitleHoverColor;
+@styledActiveChildTitleBackground: @styledActiveTitleBackground;
+@styledActiveChildTitleColor: @styledActiveTitleColor;
+
+/* Inverted */
+@invertedTitleColor: @invertedTextColor;
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/chatroom.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/chatroom.overrides b/semantic/src/themes/default/modules/chatroom.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/chatroom.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/chatroom.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/chatroom.variables b/semantic/src/themes/default/modules/chatroom.variables
new file mode 100644
index 0000000..0da971c
--- /dev/null
+++ b/semantic/src/themes/default/modules/chatroom.variables
@@ -0,0 +1,3 @@
+/*******************************
+ Chatroom
+*******************************/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/checkbox.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/checkbox.overrides b/semantic/src/themes/default/modules/checkbox.overrides
new file mode 100644
index 0000000..e83ad9f
--- /dev/null
+++ b/semantic/src/themes/default/modules/checkbox.overrides
@@ -0,0 +1,36 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
+@font-face {
+ font-family: 'Checkbox';
+ src:
+ url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQ
EBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype')
+ ;
+}
+
+/* Checkmark */
+.ui.checkbox label:after,
+.ui.checkbox .box:after {
+ font-family: 'Checkbox';
+}
+
+/* Checked */
+.ui.checkbox input:checked ~ .box:after,
+.ui.checkbox input:checked ~ label:after {
+ content: '\e800';
+}
+
+/* Indeterminate */
+.ui.checkbox input:indeterminate ~ .box:after,
+.ui.checkbox input:indeterminate ~ label:after {
+ font-size: 12px;
+ content: '\e801';
+}
+
+
+/* UTF Reference
+.check:before { content: '\e800'; }
+.dash:before { content: '\e801'; }
+.plus:before { content: '\e802'; }
+*/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/checkbox.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/checkbox.variables b/semantic/src/themes/default/modules/checkbox.variables
new file mode 100644
index 0000000..1363bbe
--- /dev/null
+++ b/semantic/src/themes/default/modules/checkbox.variables
@@ -0,0 +1,189 @@
+/*******************************
+ Checkbox
+*******************************/
+
+@checkboxSize: 17px;
+@checkboxColor: @textColor;
+@checkboxLineHeight: @checkboxSize;
+
+
+/* Label */
+@labelDistance: 1.85714em; /* 26px @ 14/em */
+
+/* Checkbox */
+@checkboxBackground: @white;
+@checkboxBorder: 1px solid @solidBorderColor;
+@checkboxBorderRadius: @3px;
+@checkboxTransition:
+ border @defaultDuration @defaultEasing,
+ opacity @defaultDuration @defaultEasing,
+ transform @defaultDuration @defaultEasing,
+ box-shadow @defaultDuration @defaultEasing
+;
+
+/* Checkmark */
+@checkboxCheckFontSize: 14px;
+@checkboxCheckTop: 0px;
+@checkboxCheckLeft: 0px;
+@checkboxCheckSize: @checkboxSize;
+
+/* Label */
+@labelFontSize: @relativeMedium;
+@labelColor: @textColor;
+@labelTransition: color @defaultDuration @defaultEasing;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Hover */
+@checkboxHoverBackground: @checkboxBackground;
+@checkboxHoverBorderColor: @selectedBorderColor;
+@labelHoverColor: @hoveredTextColor;
+
+/* Pressed */
+@checkboxPressedBackground: @offWhite;
+@checkboxPressedBorderColor: @selectedBorderColor;
+@checkboxPressedColor: @selectedTextColor;
+@labelPressedColor: @selectedTextColor;
+
+/* Focus */
+@checkboxFocusBackground: @white;
+@checkboxFocusBorderColor: @focusedFormMutedBorderColor;
+@checkboxFocusCheckColor: @selectedTextColor;
+@labelFocusColor: @selectedTextColor;
+
+/* Active */
+@labelActiveColor: @selectedTextColor;
+@checkboxActiveBackground: @white;
+@checkboxActiveBorderColor: @selectedBorderColor;
+@checkboxActiveCheckColor: @selectedTextColor;
+@checkboxActiveCheckOpacity: 1;
+
+/* Active Focus */
+@checkboxActiveFocusBackground: @white;
+@checkboxActiveFocusBorderColor: @checkboxFocusBorderColor;
+@checkboxActiveFocusCheckColor: @selectedTextColor;
+
+/* Indeterminate */
+@checkboxIndeterminateBackground: @checkboxActiveBackground;
+@checkboxIndeterminateBorderColor: @checkboxActiveBorderColor;
+@checkboxIndeterminateCheckOpacity: 1;
+@checkboxIndeterminateCheckColor: @checkboxActiveCheckColor;
+
+/* Disabled */
+@disabledCheckboxOpacity: 0.5;
+@disabledCheckboxLabelColor: rgba(0, 0, 0, 1);
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Radio */
+/* Uses px to avoid rounding issues with circles */
+
+@radioSize: 15px;
+@radioTop: 1px;
+@radioLeft: 0px;
+@radioLabelDistance: @labelDistance;
+
+@bulletTop: 1px;
+@bulletLeft: 0px;
+@bulletScale: (7 / 15); /* 7px as unitless value from radio size */
+@bulletColor: @textColor;
+@bulletRadius: @circularRadius;
+
+@radioFocusBackground: @checkboxFocusBackground;
+@radioFocusBulletColor: @checkboxFocusCheckColor;
+
+@radioActiveBackground: @checkboxActiveBackground;
+@radioActiveBulletColor: @checkboxActiveCheckColor;
+
+@radioActiveFocusBackground: @checkboxActiveFocusBackground;
+@radioActiveFocusBulletColor: @checkboxActiveFocusCheckColor;
+
+/* Slider & Toggle Handle */
+@handleBackground: @white @subtleGradient;
+@handleBoxShadow:
+ @subtleShadow,
+ 0px 0px 0px 1px @borderColor inset
+;
+
+/* Slider */
+@sliderHandleSize: 1.5rem;
+@sliderLineWidth: 3.5rem;
+@sliderTransitionDuration: 0.3s;
+
+@sliderHandleOffset: (1rem - @sliderHandleSize) / 2;
+@sliderHandleTransition: left @sliderTransitionDuration @defaultEasing;
+
+@sliderWidth: @sliderLineWidth;
+@sliderHeight: (@sliderHandleSize + @sliderHandleOffset);
+
+@sliderLineHeight: @3px;
+@sliderLineVerticalOffset: 0.4rem;
+@sliderLineColor: @transparentBlack;
+@sliderLineRadius: @circularRadius;
+@sliderLineTransition: background @sliderTransitionDuration @defaultEasing;
+
+@sliderTravelDistance: @sliderLineWidth - @sliderHandleSize;
+
+@sliderLabelDistance: @sliderLineWidth + 1rem;
+@sliderOffLabelColor: @unselectedTextColor;
+
+@sliderLabelLineHeight: 1rem;
+
+/* Slider States */
+@sliderHoverLaneBackground: @veryStrongTransparentBlack;
+@sliderHoverLabelColor: @hoveredTextColor;
+
+@sliderOnLineColor: @lightBlack;
+@sliderOnLabelColor: @selectedTextColor;
+
+@sliderOnFocusLineColor: @lightBlackFocus;
+@sliderOnFocusLabelColor: @sliderOnLabelColor;
+
+
+
+/* Toggle */
+@toggleLaneWidth: 3.5rem;
+@toggleHandleSize: 1.5rem;
+@toggleTransitionDuration: 0.2s;
+
+@toggleWidth: @toggleLaneWidth;
+@toggleHeight: @toggleHandleSize;
+
+@toggleHandleRadius: @circularRadius;
+@toggleHandleOffset: 0rem;
+@toggleHandleTransition:
+ background @sliderTransitionDuration @defaultEasing,
+ left @sliderTransitionDuration @defaultEasing
+;
+
+@toggleLaneBackground: @transparentBlack;
+@toggleLaneHeight: @toggleHandleSize;
+@toggleLaneVerticalOffset: 0rem;
+@toggleOffOffset: -0.05rem;
+@toggleOnOffset: (@toggleLaneWidth - @toggleHandleSize) + 0.15rem;
+
+@toggleLabelDistance: @toggleLaneWidth + 1rem;
+@toggleLabelLineHeight: 1.5rem;
+@toggleLabelOffset: 0.15em;
+
+
+@toggleFocusColor: @veryStrongTransparentBlack;
+@toggleHoverColor: @toggleFocusColor;
+
+@toggleOffLabelColor: @checkboxColor;
+
+@toggleOnLabelColor: @selectedTextColor;
+@toggleOnLaneColor: @primaryColor;
+
+@toggleOnFocusLaneColor: @primaryColorFocus;
+@toggleOnFocusLabelColor: @toggleOnLabelColor;
+
+
+
+/*-------------------
+ Variations
+--------------------*/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/dimmer.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/dimmer.overrides b/semantic/src/themes/default/modules/dimmer.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/dimmer.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/dimmer.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/dimmer.variables b/semantic/src/themes/default/modules/dimmer.variables
new file mode 100644
index 0000000..a4772ba
--- /dev/null
+++ b/semantic/src/themes/default/modules/dimmer.variables
@@ -0,0 +1,61 @@
+/*******************************
+ Dimmer
+*******************************/
+
+@dimmablePosition: relative;
+@dimmerPosition: absolute;
+
+@backgroundColor: rgba(0, 0, 0 , 0.85);
+@lineHeight: 1;
+@perspective: 2000px;
+
+@duration: 0.5s;
+@transition:
+ background-color @duration linear
+;
+@zIndex: 1000;
+@textAlign: center;
+@verticalAlign: middle;
+@textColor: @white;
+@overflow: hidden;
+
+@blurredStartFilter: ~"blur(0px) grayscale(0)";
+@blurredEndFilter: ~"blur(5px) grayscale(0.7)";
+@blurredTransition: 800ms filter @defaultEasing;
+
+@blurredBackgroundColor: rgba(0, 0, 0, 0.6);
+@blurredInvertedBackgroundColor: rgba(255, 255, 255, 0.6);
+
+/* Hidden (Default) */
+@hiddenOpacity: 0;
+
+/* Content */
+@contentDisplay: table;
+@contentChildDisplay: table-cell;
+
+/* Visible */
+@visibleOpacity: 1;
+
+/*-------------------
+ Types
+--------------------*/
+
+/* Page Dimmer*/
+@transformStyle: '';
+@pageDimmerPosition: fixed;
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Inverted */
+@invertedBackgroundColor: rgba(255, 255, 255, 0.85);
+@invertedTextColor: @textColor;
+
+/* Simple */
+@simpleZIndex: 1;
+@simpleStartBackgroundColor: rgba(0, 0, 0, 0);
+@simpleEndBackgroundColor: @backgroundColor;
+@simpleInvertedStartBackgroundColor: rgba(255, 255, 255, 0);
+@simpleInvertedEndBackgroundColor: @invertedBackgroundColor;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/dropdown.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/dropdown.overrides b/semantic/src/themes/default/modules/dropdown.overrides
new file mode 100644
index 0000000..729e201
--- /dev/null
+++ b/semantic/src/themes/default/modules/dropdown.overrides
@@ -0,0 +1,62 @@
+/*******************************
+ Theme Overrides
+*******************************/
+
+/* Dropdown Carets */
+@font-face {
+ font-family: 'Dropdown';
+ src:
+ url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYF
BwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'),
+ url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+Lk
AgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff')
+ ;
+ font-weight: normal;
+ font-style: normal;
+}
+
+.ui.dropdown > .dropdown.icon {
+ font-family: 'Dropdown';
+ line-height: 1;
+ height: 1em;
+ width: 1.23em;
+ backface-visibility: hidden;
+ font-weight: normal;
+ font-style: normal;
+ text-align: center;
+}
+
+.ui.dropdown > .dropdown.icon {
+ width: auto;
+}
+.ui.dropdown > .dropdown.icon:before {
+ content: '\f0d7';
+}
+
+/* Sub Menu */
+.ui.dropdown .menu .item .dropdown.icon:before {
+ content: '\f0da'/*rtl:'\f0d9'*/;
+}
+
+.ui.dropdown .item .left.dropdown.icon:before,
+.ui.dropdown .left.menu .item .dropdown.icon:before {
+ content: "\f0d9"/*rtl:"\f0da"*/;
+}
+
+/* Vertical Menu Dropdown */
+.ui.vertical.menu .dropdown.item > .dropdown.icon:before {
+ content: "\f0da"/*rtl:"\f0d9"*/;
+}
+
+/* Icons for Reference
+.dropdown.down.icon {
+ content: "\f0d7";
+}
+.dropdown.up.icon {
+ content: "\f0d8";
+}
+.dropdown.left.icon {
+ content: "\f0d9";
+}
+.dropdown.icon.icon {
+ content: "\f0da";
+}
+*/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/dropdown.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/dropdown.variables b/semantic/src/themes/default/modules/dropdown.variables
new file mode 100644
index 0000000..f7c4f51
--- /dev/null
+++ b/semantic/src/themes/default/modules/dropdown.variables
@@ -0,0 +1,373 @@
+/*******************************
+ Dropdown
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+@transition:
+ box-shadow @defaultDuration @defaultEasing,
+ width @defaultDuration @defaultEasing
+;
+@borderRadius: @defaultBorderRadius;
+
+@raisedShadow: 0px 2px 3px 0px @borderColor;
+
+/*-------------------
+ Content
+--------------------*/
+
+/* Icon */
+@dropdownIconSize: @relative12px;
+@dropdownIconMargin: 0em 0em 0em 1em;
+
+/* Current Text */
+@textTransition: none;
+
+/* Menu */
+@menuBackground: #FFFFFF;
+@menuMargin: 0em;
+@menuPadding: 0em 0em;
+@menuTop: 100%;
+@menuTextAlign: left;
+
+@menuBorderWidth: 1px;
+@menuBorderColor: @borderColor;
+@menuBorder: @menuBorderWidth solid @menuBorderColor;
+@menuBoxShadow: @raisedShadow;
+@menuBorderRadius: @borderRadius;
+@menuTransition: opacity @defaultDuration @defaultEasing;
+@menuMinWidth: ~"calc(100% + "(@menuBorderWidth * 2)~")";
+@menuZIndex: 11;
+
+/* Text */
+@textLineHeight: 1em;
+@textLineHeightOffset: (@textLineHeight - 1em);
+@textCursorSpacing: 1px;
+
+/* Menu Item */
+@itemFontSize: @medium;
+@itemTextAlign: left;
+@itemBorder: none;
+@itemHeight: auto;
+@itemDivider: none;
+@itemColor: @textColor;
+@itemVerticalPadding: @mini;
+@itemHorizontalPadding: @large;
+@itemPadding: @itemVerticalPadding @itemHorizontalPadding;
+@itemFontWeight: normal;
+@itemLineHeight: 1em;
+@itemLineHeightOffset: (@itemLineHeight - 1em);
+@itemTextTransform: none;
+@itemBoxShadow: none;
+
+/* Sub Menu */
+@subMenuTop: 0%;
+@subMenuLeft: 100%;
+@subMenuRight: auto;
+@subMenuDistanceAway: -0.5em;
+@subMenuMargin: 0em 0em 0em @subMenuDistanceAway;
+@subMenuBorderRadius: @borderRadius;
+@subMenuZIndex: 21;
+
+/* Menu Header */
+@menuHeaderColor: @darkTextColor;
+@menuHeaderFontSize: @relative11px;
+@menuHeaderFontWeight: bold;
+@menuHeaderTextTransform: uppercase;
+@menuHeaderMargin: 1rem 0rem 0.75rem;
+@menuHeaderPadding: 0em @itemHorizontalPadding;
+
+/* Menu Divider */
+@menuDividerMargin: 0.5em 0em;
+@menuDividerColor: @internalBorderColor;
+@menuDividerSize: 1px;
+@menuDividerBorder: @menuDividerSize solid @menuDividerColor;
+
+/* Menu Input */
+@menuInputMargin: @large @mini;
+@menuInputMinWidth: 10rem;
+@menuInputVerticalPadding: 0.5em;
+@menuInputHorizontalPadding: @inputHorizontalPadding;
+@menuInputPadding: @menuInputVerticalPadding @menuInputHorizontalPadding;
+
+/* Menu Image */
+@menuImageMaxHeight: 2em;
+
+/* Item Sub-Element */
+@itemElementFloat: none;
+@itemElementDistance: @mini;
+
+/* Sub-Menu Dropdown Icon */
+@itemDropdownIconDistance: 1em;
+@itemDropdownIconFloat: right;
+@itemDropdownIconMargin: @itemLineHeightOffset 0em 0em @itemDropdownIconDistance;
+
+/* Description */
+@itemDescriptionFloat: right;
+@itemDescriptionMargin: 0em 0em 0em 1em;
+@itemDescriptionColor: @lightTextColor;
+
+/* Message */
+@messagePadding: @selectionItemPadding;
+@messageFontWeight: normal;
+@messageColor: @unselectedTextColor;
+
+/* Floated Content */
+@floatedDistance: 1em;
+
+/*-------------------
+ Types
+--------------------*/
+
+/*------------
+ Selection
+--------------*/
+
+@selectionMinWidth: 14em;
+@selectionVerticalPadding: @inputVerticalPadding;
+@selectionHorizontalPadding: @inputHorizontalPadding;
+@selectionBorderEmWidth: @relative1px;
+@selectionMinHeight: @inputLineHeight + (@selectionVerticalPadding * 2) - @selectionBorderEmWidth;
+@selectionBackground: @inputBackground;
+@selectionDisplay: inline-block;
+@selectionIconDistance: @inputHorizontalPadding + @glyphWidth;
+@selectionPadding: @selectionVerticalPadding @selectionIconDistance @selectionVerticalPadding @selectionHorizontalPadding;
+@selectionZIndex: 10;
+
+@selectionItemDivider: 1px solid @solidInternalBorderColor;
+@selectionMessagePadding: @selectionItemPadding;
+
+/* <select> */
+@selectBorder: 1px solid @borderColor;
+@selectPadding: 0.5em;
+@selectVisibility: visible;
+@selectHeight: 38px;
+
+@selectionTextColor: @textColor;
+
+@selectionTextUnderlayIconOpacity: @disabledOpacity;
+@selectionTextUnderlayColor: @inputPlaceholderFocusColor;
+
+@selectionBoxShadow: none;
+@selectionBorderColor: @borderColor;
+@selectionBorder: 1px solid @selectionBorderColor;
+@selectionBorderRadius: @borderRadius;
+
+@selectionIconOpacity: 0.8;
+@selectionIconZIndex: 3;
+@selectionIconHitbox: @selectionVerticalPadding;
+@selectionIconMargin: -@selectionIconHitbox;
+@selectionIconPadding: @selectionIconHitbox;
+@selectionIconTransition: opacity @defaultDuration @defaultEasing;
+
+@selectionMenuBorderRadius: 0em 0em @borderRadius @borderRadius;
+@selectionMenuBoxShadow: @raisedShadow;
+@selectionMenuItemBoxShadow: none;
+
+@selectionItemHorizontalPadding: @itemHorizontalPadding;
+@selectionItemVerticalPadding: @itemVerticalPadding;
+@selectionItemPadding: @selectionItemVerticalPadding @selectionItemHorizontalPadding;
+
+@selectionTransition: @transition;
+@selectionMenuTransition: @menuTransition;
+
+/* Responsive */
+@selectionMobileMaxItems: 3;
+@selectionTabletMaxItems: 4;
+@selectionComputerMaxItems: 6;
+@selectionWidescreenMaxItems: 8;
+
+/* Derived */
+@selectedBorderEMWidth: 0.1em; /* 1px / em size */
+@selectionItemHeight: (@selectionItemVerticalPadding * 2) + @itemLineHeight + @selectedBorderEMWidth;
+@selectionMobileMaxMenuHeight: (@selectionItemHeight * @selectionMobileMaxItems);
+@selectionTabletMaxMenuHeight: (@selectionItemHeight * @selectionTabletMaxItems);
+@selectionComputerMaxMenuHeight: (@selectionItemHeight * @selectionComputerMaxItems);
+@selectionWidescreenMaxMenuHeight: (@selectionItemHeight * @selectionWidescreenMaxItems);
+
+/* Hover */
+@selectionHoverBorderColor: @selectedBorderColor;
+@selectionHoverBoxShadow: none;
+
+/* Focus */
+@selectionFocusBorderColor: @focusedFormMutedBorderColor;
+@selectionFocusBoxShadow: none;
+@selectionFocusMenuBoxShadow: @raisedShadow;
+
+/* Visible */
+@selectionVisibleTextFontWeight: normal;
+@selectionVisibleTextColor: @hoveredTextColor;
+
+@selectionVisibleBorderColor: @focusedFormMutedBorderColor;
+@selectionVisibleBoxShadow: @raisedShadow;
+@selectionVisibleMenuBoxShadow: @raisedShadow;
+
+/* Visible Hover */
+@selectionActiveHoverBorderColor: @focusedFormMutedBorderColor;
+@selectionActiveHoverBoxShadow: @selectionVisibleBoxShadow;
+@selectionActiveHoverMenuBoxShadow: @selectionVisibleMenuBoxShadow;
+
+@selectionVisibleConnectingBorder: 0em;
+@selectionVisibleIconOpacity: 1;
+
+/*--------------
+ Search
+--------------*/
+
+@searchMinWidth: '';
+
+/* Search Selection */
+@searchSelectionLineHeight: @inputLineHeight;
+@searchSelectionLineHeightOffset: ((@searchSelectionLineHeight - 1em) / 2);
+@searchSelectionVerticalPadding: (@selectionVerticalPadding - @searchSelectionLineHeightOffset);
+@searchSelectionHorizontalPadding: @selectionHorizontalPadding;
+@searchSelectionInputPadding: @searchSelectionVerticalPadding @selectionIconDistance @searchSelectionVerticalPadding @searchSelectionHorizontalPadding;
+
+@searchMobileMaxMenuHeight: @selectionMobileMaxMenuHeight;
+@searchTabletMaxMenuHeight: @selectionTabletMaxMenuHeight;
+@searchComputerMaxMenuHeight: @selectionComputerMaxMenuHeight;
+@searchWidescreenMaxMenuHeight: @selectionWidescreenMaxMenuHeight;
+
+/* Inline */
+@inlineIconMargin: 0em @relative7px 0em @relative3px;
+@inlineTextColor: inherit;
+@inlineTextFontWeight: bold;
+@inlineMenuDistance: @relative3px;
+@inlineMenuBorderRadius: @borderRadius;
+
+
+/*--------------
+ Multiple
+--------------*/
+
+/* Split Actual Padding Between Child and Parent (allows for label spacing) */
+@multipleSelectionVerticalPadding: (@searchSelectionVerticalPadding * (1/3));
+@multipleSelectionLeftPadding: @relative5px;
+@multipleSelectionRightPadding: @selectionIconDistance;
+@multipleSelectionPadding: @multipleSelectionVerticalPadding @multipleSelectionRightPadding @multipleSelectionVerticalPadding @multipleSelectionLeftPadding;
+
+/* Child Elements */
+@multipleSelectionChildVerticalMargin: (@searchSelectionVerticalPadding * (2/3));
+@multipleSelectionChildLeftMargin: (@inputHorizontalPadding - @multipleSelectionLeftPadding);
+@multipleSelectionChildMargin: @multipleSelectionChildVerticalMargin 0em @multipleSelectionChildVerticalMargin @multipleSelectionChildLeftMargin;
+@multipleSelectionChildLineHeight: @relative17px;
+@multipleSelectionSearchStartWidth: (@glyphWidth * 2);
+
+/* Dropdown Icon */
+@multipleSelectionDropdownIconMargin: '';
+@multipleSelectionDropdownIconPadding: '';
+
+@multipleSelectionSearchAfterLabelDistance: @relative2px;
+
+/* Selection Label */
+@labelSize: @relativeMedium;
+@labelHorizontalMargin: @4px;
+@labelVerticalMargin: @2px;
+@labelMargin: @labelVerticalMargin @labelHorizontalMargin @labelVerticalMargin 0em;
+@labelBorderWidth: 1px;
+@labelBoxShadow: 0px 0px 0px @labelBorderWidth @borderColor inset;
+
+@labelVerticalPadding: @relative5px;
+@labelHorizontalPadding: @relativeMini;
+@labelPadding: @labelVerticalPadding @labelHorizontalPadding;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Hovered */
+@hoveredItemBackground: @transparentBlack;
+@hoveredItemColor: @selectedTextColor;
+@hoveredZIndex: @menuZIndex + 2;
+
+/* Default Text */
+@defaultTextColor: @inputPlaceholderColor;
+@defaultTextFocusColor: @inputPlaceholderFocusColor;
+
+/* Loading */
+@loadingZIndex: -1;
+
+/* Active Menu Item */
+@activeItemZIndex: @menuZIndex + 1;
+@activeItemBackground: transparent;
+@activeItemBoxShadow: none;
+@activeItemFontWeight: bold;
+@activeItemColor: @selectedTextColor;
+
+/* Selected */
+@selectedBackground: @subtleTransparentBlack;
+@selectedColor: @selectedTextColor;
+
+/* Error */
+@errorLabelBackground: #EACBCB;
+@errorLabelColor: @errorTextColor;
+
+@errorItemTextColor: @errorTextColor;
+@errorItemHoverBackground: #FFF2F2;
+@errorItemActiveBackground: #FDCFCF;
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Scrolling */
+@scrollingMenuWidth: 100%;
+@scrollingMenuItemBorder: none;
+@scrollingMenuRightItemPadding: ~"calc("(@itemHorizontalPadding)~" + "(@scrollbarWidth)~")";
+
+@scrollingMobileMaxItems: 4;
+@scrollingTabletMaxItems: 6;
+@scrollingComputerMaxItems: 8;
+@scrollingWidescreenMaxItems: 12;
+
+@scrollingBorderEMWidth: 0em; /* 0px / em size */
+@scrollingItemHeight: (@itemVerticalPadding * 2) + @itemLineHeight + @scrollingBorderEMWidth;
+@scrollingMobileMaxMenuHeight: (@scrollingItemHeight * @scrollingMobileMaxItems);
+@scrollingTabletMaxMenuHeight: (@scrollingItemHeight * @scrollingTabletMaxItems);
+@scrollingComputerMaxMenuHeight: (@scrollingItemHeight * @scrollingComputerMaxItems);
+@scrollingWidescreenMaxMenuHeight: (@scrollingItemHeight * @selectionWidescreenMaxItems);
+
+/* Upward */
+@upwardSelectionVisibleBorderRadius: @selectionVisibleConnectingBorder @selectionVisibleConnectingBorder @borderRadius @borderRadius;
+@upwardMenuBoxShadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);
+@upwardSelectionMenuBoxShadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);
+@upwardMenuBorderRadius: @borderRadius @borderRadius 0em 0em;
+@upwardSelectionHoverBoxShadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);
+@upwardSelectionVisibleBoxShadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);
+@upwardSelectionActiveHoverBoxShadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);
+@upwardSelectionActiveHoverMenuBoxShadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);
+
+/* Flyout Direction */
+@leftMenuDropdownIconFloat: left;
+@leftMenuDropdownIconMargin: @itemLineHeightOffset @itemElementDistance 0em 0em;
+
+/* Left */
+@leftSubMenuBorderRadius: @borderRadius;
+
+/* Simple */
+@simpleTransitionDuration: @defaultDuration;
+@simpleTransition: opacity @simpleTransitionDuration @defaultEasing;
+
+/* Floating */
+@floatingMenuDistance: 0.5em;
+@floatingMenuBoxShadow: @floatingShadow;
+@floatingMenuBorderRadius: @borderRadius;
+
+/* Pointing */
+@pointingArrowOffset: -(@pointingArrowSize / 2);
+@pointingArrowDistanceFromEdge: 1em;
+
+@pointingArrowBackground: @white;
+@pointingArrowZIndex: 2;
+@pointingArrowBoxShadow: -@menuBorderWidth -@menuBorderWidth 0px @menuBorderWidth @menuBorderColor;
+@pointingArrowSize: @relative7px;
+
+@pointingMenuDistance: @mini;
+@pointingMenuBorderRadius: @borderRadius;
+@pointingArrowBoxShadow: -@menuBorderWidth -@menuBorderWidth 0px @menuBorderWidth @menuBorderColor;
+
+/* Pointing Upward */
+@pointingUpwardMenuBorderRadius: @borderRadius;
+@pointingUpwardArrowBoxShadow: @menuBorderWidth @menuBorderWidth 0px @menuBorderWidth @menuBorderColor;
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/embed.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/embed.overrides b/semantic/src/themes/default/modules/embed.overrides
new file mode 100644
index 0000000..3f14e70
--- /dev/null
+++ b/semantic/src/themes/default/modules/embed.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Video Overrides
+*******************************/
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/embed.variables
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/embed.variables b/semantic/src/themes/default/modules/embed.variables
new file mode 100644
index 0000000..355076d
--- /dev/null
+++ b/semantic/src/themes/default/modules/embed.variables
@@ -0,0 +1,53 @@
+/*******************************
+ Video
+*******************************/
+
+/*-------------------
+ Element
+--------------------*/
+
+/* Simple */
+@background: @lightGrey;
+@transitionDuration: 0.5s;
+@transitionEasing: @defaultEasing;
+
+/* Placeholder */
+@placeholderUnderlay: @background;
+
+/* Placeholder Overlayed Background */
+@placeholderBackground: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));
+@placeholderBackgroundOpacity: 0.5;
+@placeholderBackgroundTransition: opacity @transitionDuration @transitionEasing;
+
+/* Icon */
+@iconBackground: @veryStrongTransparentBlack;
+@iconSize: 6rem;
+@iconTransition:
+ opacity @transitionDuration @transitionEasing,
+ color @transitionDuration @transitionEasing
+;
+@iconColor: @white;
+@iconShadow:
+ 0px 2px 10px rgba(34, 36, 38, 0.2)
+;
+@iconZIndex: 10;
+
+/*-------------------
+ States
+--------------------*/
+
+/* Hover */
+@hoverPlaceholderBackground: @placeholderBackground;
+@hoverPlaceholderBackgroundOpacity: 1;
+@hoverIconColor: @white;
+
+
+/*-------------------
+ Variations
+--------------------*/
+
+/* Aspect Ratios */
+@squareRatio: (1/1) * 100%;
+@widescreenRatio: (9/16) * 100%;
+@ultraWidescreenRatio: (9/21) * 100%;
+@standardRatio: (3/4) * 100%;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/themes/default/modules/modal.overrides
----------------------------------------------------------------------
diff --git a/semantic/src/themes/default/modules/modal.overrides b/semantic/src/themes/default/modules/modal.overrides
new file mode 100644
index 0000000..14fb0da
--- /dev/null
+++ b/semantic/src/themes/default/modules/modal.overrides
@@ -0,0 +1,3 @@
+/*******************************
+ Theme Overrides
+*******************************/
[32/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/modal.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/modal.less b/semantic/src/definitions/modules/modal.less
new file mode 100755
index 0000000..b59a2f4
--- /dev/null
+++ b/semantic/src/definitions/modules/modal.less
@@ -0,0 +1,484 @@
+/*!
+ * # Semantic UI - Modal
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'modal';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Modal
+*******************************/
+
+.ui.modal {
+ display: none;
+ position: fixed;
+ z-index: @zIndex;
+
+ top: 50%;
+ left: 50%;
+ text-align: left;
+
+ background: @background;
+ border: @border;
+ box-shadow: @boxShadow;
+ transform-origin: @transformOrigin;
+
+ border-radius: @borderRadius;
+ user-select: text;
+ will-change: top, left, margin, transform, opacity;
+}
+
+.ui.modal > :first-child:not(.icon),
+.ui.modal > .icon:first-child + * {
+ border-top-left-radius: @borderRadius;
+ border-top-right-radius: @borderRadius;
+}
+
+.ui.modal > :last-child {
+ border-bottom-left-radius: @borderRadius;
+ border-bottom-right-radius: @borderRadius;
+}
+
+/*******************************
+ Content
+*******************************/
+
+/*--------------
+ Close
+---------------*/
+
+.ui.modal > .close {
+ cursor: pointer;
+ position: absolute;
+ top: @closeTop;
+ right: @closeRight;
+ z-index: 1;
+
+ opacity: @closeOpacity;
+ font-size: @closeSize;
+ color: @closeColor;
+
+ width: @closeHitbox;
+ height: @closeHitbox;
+ padding: @closePadding;
+}
+.ui.modal > .close:hover {
+ opacity: 1;
+}
+
+/*--------------
+ Header
+---------------*/
+
+.ui.modal > .header {
+ display: block;
+ font-family: @headerFontFamily;
+ background: @headerBackground;
+ margin: @headerMargin;
+ padding: @headerPadding;
+ box-shadow: @headerBoxShadow;
+
+ color: @headerColor;
+ border-bottom: @headerBorder;
+}
+.ui.modal > .header:not(.ui) {
+ font-size: @headerFontSize;
+ line-height: @headerLineHeight;
+ font-weight: @headerFontWeight;
+}
+
+/*--------------
+ Content
+---------------*/
+
+.ui.modal > .content {
+ display: block;
+ width: 100%;
+ font-size: @contentFontSize;
+ line-height: @contentLineHeight;
+ padding: @contentPadding;
+ background: @contentBackground;
+}
+.ui.modal > .image.content {
+ display: flex;
+ flex-direction: row;
+}
+
+/* Image */
+.ui.modal > .content > .image {
+ display: block;
+ flex: 0 1 auto;
+ width: @imageWidth;
+ align-self: @imageVerticalAlign;
+}
+.ui.modal > [class*="top aligned"] {
+ align-self: top;
+}
+.ui.modal > [class*="middle aligned"] {
+ align-self: middle;
+}
+.ui.modal > [class*="stretched"] {
+ align-self: stretch;
+}
+
+/* Description */
+.ui.modal > .content > .description {
+ display: block;
+ flex: 1 0 auto;
+ min-width: 0px;
+ align-self: @descriptionVerticalAlign;
+}
+
+.ui.modal > .content > .icon + .description,
+.ui.modal > .content > .image + .description {
+ flex: 0 1 auto;
+ min-width: @descriptionMinWidth;
+ width: @descriptionWidth;
+ padding-left: @descriptionDistance;
+}
+
+/*rtl:ignore*/
+.ui.modal > .content > .image > i.icon {
+ margin: 0em;
+ opacity: 1;
+ width: auto;
+ line-height: 1;
+ font-size: @imageIconSize;
+}
+
+/*--------------
+ Actions
+---------------*/
+
+.ui.modal > .actions {
+ background: @actionBackground;
+ padding: @actionPadding;
+ border-top: @actionBorder;
+ text-align: @actionAlign;
+}
+.ui.modal .actions > .button {
+ margin-left: @buttonDistance;
+}
+
+/*-------------------
+ Responsive
+--------------------*/
+
+/* Modal Width */
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.modal {
+ width: @mobileWidth;
+ margin: @mobileMargin;
+ }
+}
+@media only screen and (min-width : @tabletBreakpoint) {
+ .ui.modal {
+ width: @tabletWidth;
+ margin: @tabletMargin;
+ }
+}
+@media only screen and (min-width : @computerBreakpoint) {
+ .ui.modal {
+ width: @computerWidth;
+ margin: @computerMargin;
+ }
+}
+@media only screen and (min-width : @largeMonitorBreakpoint) {
+ .ui.modal {
+ width: @largeMonitorWidth;
+ margin: @largeMonitorMargin;
+ }
+}
+@media only screen and (min-width : @widescreenMonitorBreakpoint) {
+ .ui.modal {
+ width: @widescreenMonitorWidth;
+ margin: @widescreenMonitorMargin;
+ }
+}
+
+/* Tablet and Mobile */
+@media only screen and (max-width : @largestTabletScreen) {
+ .ui.modal > .header {
+ padding-right: @closeHitbox;
+ }
+ .ui.modal > .close {
+ top: @innerCloseTop;
+ right: @innerCloseRight;
+ color: @innerCloseColor;
+ }
+}
+
+/* Mobile */
+@media only screen and (max-width : @largestMobileScreen) {
+
+ .ui.modal > .header {
+ padding: @mobileHeaderPadding !important;
+ padding-right: @closeHitbox !important;
+ }
+ .ui.modal > .content {
+ display: block;
+ padding: @mobileContentPadding !important;
+ }
+ .ui.modal > .close {
+ top: @mobileCloseTop !important;
+ right: @mobileCloseRight !important;
+ }
+
+ /*rtl:ignore*/
+ .ui.modal .image.content {
+ flex-direction: column;
+ }
+ .ui.modal .content > .image {
+ display: block;
+ max-width: 100%;
+ margin: 0em auto !important;
+ text-align: center;
+ padding: @mobileImagePadding !important;
+ }
+ .ui.modal > .content > .image > i.icon {
+ font-size: @mobileImageIconSize;
+ text-align: center;
+ }
+
+ /*rtl:ignore*/
+ .ui.modal .content > .description {
+ display: block;
+ width: 100% !important;
+ margin: 0em !important;
+ padding: @mobileDescriptionPadding !important;
+ box-shadow: none;
+ }
+
+ /* Let Buttons Stack */
+ .ui.modal > .actions {
+ padding: @mobileActionPadding !important;
+ }
+ .ui.modal .actions > .buttons,
+ .ui.modal .actions > .button {
+ margin-bottom: @mobileButtonDistance;
+ }
+}
+
+/*--------------
+ Coupling
+---------------*/
+
+.ui.inverted.dimmer > .ui.modal {
+ box-shadow: @invertedBoxShadow;
+}
+
+/*******************************
+ Types
+*******************************/
+
+.ui.basic.modal {
+ background-color: transparent;
+ border: none;
+ border-radius: 0em;
+ box-shadow: none !important;
+ color: @basicModalColor;
+}
+.ui.basic.modal > .header,
+.ui.basic.modal > .content,
+.ui.basic.modal > .actions {
+ background-color: transparent;
+}
+.ui.basic.modal > .header {
+ color: @basicModalHeaderColor;
+}
+.ui.basic.modal > .close {
+ top: @basicModalCloseTop;
+ right: @basicModalCloseRight;
+}
+
+.ui.inverted.dimmer > .basic.modal {
+ color: @basicInvertedModalColor;
+}
+.ui.inverted.dimmer > .ui.basic.modal > .header {
+ color: @basicInvertedModalHeaderColor;
+}
+
+/* Tablet and Mobile */
+@media only screen and (max-width : @largestTabletScreen) {
+ .ui.basic.modal > .close {
+ color: @basicInnerCloseColor;
+ }
+}
+
+
+/*******************************
+ States
+*******************************/
+
+.ui.active.modal {
+ display: block;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Scrolling
+---------------*/
+
+/* A modal that cannot fit on the page */
+.scrolling.dimmable.dimmed {
+ overflow: hidden;
+}
+.scrolling.dimmable.dimmed > .dimmer {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+.scrolling.dimmable > .dimmer {
+ position: fixed;
+}
+.modals.dimmer .ui.scrolling.modal {
+ position: static !important;
+ margin: @scrollingMargin auto !important;
+}
+
+/* undetached scrolling */
+.scrolling.undetached.dimmable.dimmed {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+.scrolling.undetached.dimmable.dimmed > .dimmer {
+ overflow: hidden;
+}
+.scrolling.undetached.dimmable .ui.scrolling.modal {
+ position: absolute;
+ left: 50%;
+ margin-top: @scrollingMargin !important;
+}
+
+/* Coupling with Sidebar */
+.undetached.dimmable.dimmed > .pusher {
+ z-index: auto;
+}
+
+@media only screen and (max-width : @largestTabletScreen) {
+ .modals.dimmer .ui.scrolling.modal {
+ margin-top: @mobileScrollingMargin !important;
+ margin-bottom: @mobileScrollingMargin !important;
+ }
+}
+
+
+/*--------------
+ Full Screen
+---------------*/
+
+.ui.fullscreen.modal {
+ width: @fullScreenWidth !important;
+ left: @fullScreenOffset !important;
+ margin: @fullScreenMargin;
+}
+.ui.fullscreen.scrolling.modal {
+ left: 0em !important;
+}
+.ui.fullscreen.modal > .header {
+ padding-right: @closeHitbox;
+}
+.ui.fullscreen.modal > .close {
+ top: @innerCloseTop;
+ right: @innerCloseRight;
+ color: @innerCloseColor;
+}
+
+
+/*--------------
+ Size
+---------------*/
+
+.ui.modal {
+ font-size: @medium;
+}
+
+/* Small */
+.ui.small.modal > .header:not(.ui) {
+ font-size: @smallHeaderSize;
+}
+
+/* Small Modal Width */
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.small.modal {
+ width: @smallMobileWidth;
+ margin: @smallMobileMargin;
+ }
+}
+@media only screen and (min-width : @tabletBreakpoint) {
+ .ui.small.modal {
+ width: @smallTabletWidth;
+ margin: @smallTabletMargin;
+ }
+}
+@media only screen and (min-width : @computerBreakpoint) {
+ .ui.small.modal {
+ width: @smallComputerWidth;
+ margin: @smallComputerMargin;
+ }
+}
+@media only screen and (min-width : @largeMonitorBreakpoint) {
+ .ui.small.modal {
+ width: @smallLargeMonitorWidth;
+ margin: @smallLargeMonitorMargin;
+ }
+}
+@media only screen and (min-width : @widescreenMonitorBreakpoint) {
+ .ui.small.modal {
+ width: @smallWidescreenMonitorWidth;
+ margin: @smallWidescreenMonitorMargin;
+ }
+}
+
+/* Large Modal Width */
+.ui.large.modal > .header {
+ font-size: @largeHeaderSize;
+}
+@media only screen and (max-width : @largestMobileScreen) {
+ .ui.large.modal {
+ width: @largeMobileWidth;
+ margin: @largeMobileMargin;
+ }
+}
+@media only screen and (min-width : @tabletBreakpoint) {
+ .ui.large.modal {
+ width: @largeTabletWidth;
+ margin: @largeTabletMargin;
+ }
+}
+@media only screen and (min-width : @computerBreakpoint) {
+ .ui.large.modal {
+ width: @largeComputerWidth;
+ margin: @largeComputerMargin;
+ }
+}
+@media only screen and (min-width : @largeMonitorBreakpoint) {
+ .ui.large.modal {
+ width: @largeLargeMonitorWidth;
+ margin: @largeLargeMonitorMargin;
+ }
+}
+@media only screen and (min-width : @widescreenMonitorBreakpoint) {
+ .ui.large.modal {
+ width: @largeWidescreenMonitorWidth;
+ margin: @largeWidescreenMonitorMargin;
+ }
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/nag.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/nag.js b/semantic/src/definitions/modules/nag.js
new file mode 100644
index 0000000..f8d862c
--- /dev/null
+++ b/semantic/src/definitions/modules/nag.js
@@ -0,0 +1,507 @@
+/*!
+ * # Semantic UI - Nag
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.nag = function(parameters) {
+ var
+ $allModules = $(this),
+ moduleSelector = $allModules.selector || '',
+
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+ returnedValue
+ ;
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.nag.settings, parameters)
+ : $.extend({}, $.fn.nag.settings),
+
+ className = settings.className,
+ selector = settings.selector,
+ error = settings.error,
+ namespace = settings.namespace,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = namespace + '-module',
+
+ $module = $(this),
+
+ $close = $module.find(selector.close),
+ $context = (settings.context)
+ ? $(settings.context)
+ : $('body'),
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ moduleOffset,
+ moduleHeight,
+
+ contextWidth,
+ contextHeight,
+ contextOffset,
+
+ yOffset,
+ yPosition,
+
+ timer,
+ module,
+
+ requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); }
+ ;
+ module = {
+
+ initialize: function() {
+ module.verbose('Initializing element');
+
+ $module
+ .on('click' + eventNamespace, selector.close, module.dismiss)
+ .data(moduleNamespace, module)
+ ;
+
+ if(settings.detachable && $module.parent()[0] !== $context[0]) {
+ $module
+ .detach()
+ .prependTo($context)
+ ;
+ }
+
+ if(settings.displayTime > 0) {
+ setTimeout(module.hide, settings.displayTime);
+ }
+ module.show();
+ },
+
+ destroy: function() {
+ module.verbose('Destroying instance');
+ $module
+ .removeData(moduleNamespace)
+ .off(eventNamespace)
+ ;
+ },
+
+ show: function() {
+ if( module.should.show() && !$module.is(':visible') ) {
+ module.debug('Showing nag', settings.animation.show);
+ if(settings.animation.show == 'fade') {
+ $module
+ .fadeIn(settings.duration, settings.easing)
+ ;
+ }
+ else {
+ $module
+ .slideDown(settings.duration, settings.easing)
+ ;
+ }
+ }
+ },
+
+ hide: function() {
+ module.debug('Showing nag', settings.animation.hide);
+ if(settings.animation.show == 'fade') {
+ $module
+ .fadeIn(settings.duration, settings.easing)
+ ;
+ }
+ else {
+ $module
+ .slideUp(settings.duration, settings.easing)
+ ;
+ }
+ },
+
+ onHide: function() {
+ module.debug('Removing nag', settings.animation.hide);
+ $module.remove();
+ if (settings.onHide) {
+ settings.onHide();
+ }
+ },
+
+ dismiss: function(event) {
+ if(settings.storageMethod) {
+ module.storage.set(settings.key, settings.value);
+ }
+ module.hide();
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ },
+
+ should: {
+ show: function() {
+ if(settings.persist) {
+ module.debug('Persistent nag is set, can show nag');
+ return true;
+ }
+ if( module.storage.get(settings.key) != settings.value.toString() ) {
+ module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));
+ return true;
+ }
+ module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));
+ return false;
+ }
+ },
+
+ get: {
+ storageOptions: function() {
+ var
+ options = {}
+ ;
+ if(settings.expires) {
+ options.expires = settings.expires;
+ }
+ if(settings.domain) {
+ options.domain = settings.domain;
+ }
+ if(settings.path) {
+ options.path = settings.path;
+ }
+ return options;
+ }
+ },
+
+ clear: function() {
+ module.storage.remove(settings.key);
+ },
+
+ storage: {
+ set: function(key, value) {
+ var
+ options = module.get.storageOptions()
+ ;
+ if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
+ window.localStorage.setItem(key, value);
+ module.debug('Value stored using local storage', key, value);
+ }
+ else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {
+ window.sessionStorage.setItem(key, value);
+ module.debug('Value stored using session storage', key, value);
+ }
+ else if($.cookie !== undefined) {
+ $.cookie(key, value, options);
+ module.debug('Value stored using cookie', key, value, options);
+ }
+ else {
+ module.error(error.noCookieStorage);
+ return;
+ }
+ },
+ get: function(key, value) {
+ var
+ storedValue
+ ;
+ if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
+ storedValue = window.localStorage.getItem(key);
+ }
+ else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {
+ storedValue = window.sessionStorage.getItem(key);
+ }
+ // get by cookie
+ else if($.cookie !== undefined) {
+ storedValue = $.cookie(key);
+ }
+ else {
+ module.error(error.noCookieStorage);
+ }
+ if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {
+ storedValue = undefined;
+ }
+ return storedValue;
+ },
+ remove: function(key) {
+ var
+ options = module.get.storageOptions()
+ ;
+ if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
+ window.localStorage.removeItem(key);
+ }
+ else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {
+ window.sessionStorage.removeItem(key);
+ }
+ // store by cookie
+ else if($.cookie !== undefined) {
+ $.removeCookie(key, options);
+ }
+ else {
+ module.error(error.noStorage);
+ }
+ }
+ },
+
+ setting: function(name, value) {
+ module.debug('Changing setting', name, value);
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ if($.isPlainObject(settings[name])) {
+ $.extend(true, settings[name], value);
+ }
+ else {
+ settings[name] = value;
+ }
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.nag.settings = {
+
+ name : 'Nag',
+
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ namespace : 'Nag',
+
+ // allows cookie to be overridden
+ persist : false,
+
+ // set to zero to require manually dismissal, otherwise hides on its own
+ displayTime : 0,
+
+ animation : {
+ show : 'slide',
+ hide : 'slide'
+ },
+
+ context : false,
+ detachable : false,
+
+ expires : 30,
+ domain : false,
+ path : '/',
+
+ // type of storage to use
+ storageMethod : 'cookie',
+
+ // value to store in dismissed localstorage/cookie
+ key : 'nag',
+ value : 'dismiss',
+
+ error: {
+ noCookieStorage : '$.cookie is not included. A storage solution is required.',
+ noStorage : 'Neither $.cookie or store is defined. A storage solution is required for storing state',
+ method : 'The method you called is not defined.'
+ },
+
+ className : {
+ bottom : 'bottom',
+ fixed : 'fixed'
+ },
+
+ selector : {
+ close : '.close.icon'
+ },
+
+ speed : 500,
+ easing : 'easeOutQuad',
+
+ onHide: function() {}
+
+};
+
+// Adds easing
+$.extend( $.easing, {
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ }
+});
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/nag.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/nag.less b/semantic/src/definitions/modules/nag.less
new file mode 100755
index 0000000..b29e306
--- /dev/null
+++ b/semantic/src/definitions/modules/nag.less
@@ -0,0 +1,158 @@
+/*!
+ * # Semantic UI - Nag
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'module';
+@element : 'nag';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Nag
+*******************************/
+
+.ui.nag {
+ display: none;
+ opacity: @opacity;
+ position: @position;
+
+ top: @top;
+ left: 0px;
+ z-index: @zIndex;
+
+ min-height: @minHeight;
+ width: @width;
+
+ margin: @margin;
+ padding: @padding;
+
+ background: @background;
+ box-shadow: @boxShadow;
+
+ font-size: @fontSize;
+ text-align: @textAlign;
+ color: @color;
+
+ border-radius: @topBorderRadius;
+ transition: @transition;
+}
+
+a.ui.nag {
+ cursor: pointer;
+}
+
+.ui.nag > .title {
+ display: inline-block;
+ margin: @titleMargin;
+ color: @titleColor;
+}
+
+
+.ui.nag > .close.icon {
+ cursor: pointer;
+ opacity: @closeOpacity;
+
+ position: absolute;
+ top: @closeTop;
+ right: @closeRight;
+
+ font-size: @closeSize;
+
+ margin: @closeMargin;
+ color: @closeColor;
+ transition: @closeTransition;
+}
+
+
+
+/*******************************
+ States
+*******************************/
+
+/* Hover */
+.ui.nag:hover {
+ background: @nagHoverBackground;
+ opacity: @nagHoverOpacity;
+}
+
+.ui.nag .close:hover {
+ opacity: @closeHoverOpacity;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*--------------
+ Static
+---------------*/
+
+.ui.overlay.nag {
+ position: absolute;
+ display: block;
+}
+
+/*--------------
+ Fixed
+---------------*/
+
+.ui.fixed.nag {
+ position: fixed;
+}
+
+/*--------------
+ Bottom
+---------------*/
+
+.ui.bottom.nags,
+.ui.bottom.nag {
+ border-radius: @bottomBorderRadius;
+ top: auto;
+ bottom: @bottom;
+}
+
+/*--------------
+ White
+---------------*/
+
+.ui.inverted.nags .nag,
+.ui.inverted.nag {
+ background-color: @invertedBackground;
+ color: @darkTextColor;
+}
+.ui.inverted.nags .nag .close,
+.ui.inverted.nags .nag .title,
+.ui.inverted.nag .close,
+.ui.inverted.nag .title {
+ color: @lightTextColor;
+}
+
+
+/*******************************
+ Groups
+*******************************/
+
+.ui.nags .nag {
+ border-radius: @groupedBorderRadius !important;
+}
+.ui.nags .nag:last-child {
+ border-radius: @topBorderRadius;
+}
+.ui.bottom.nags .nag:last-child {
+ border-radius: @bottomBorderRadius;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/modules/popup.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/modules/popup.js b/semantic/src/definitions/modules/popup.js
new file mode 100644
index 0000000..4294641
--- /dev/null
+++ b/semantic/src/definitions/modules/popup.js
@@ -0,0 +1,1473 @@
+/*!
+ * # Semantic UI - Popup
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+"use strict";
+
+window = (typeof window != 'undefined' && window.Math == Math)
+ ? window
+ : (typeof self != 'undefined' && self.Math == Math)
+ ? self
+ : Function('return this')()
+;
+
+$.fn.popup = function(parameters) {
+ var
+ $allModules = $(this),
+ $document = $(document),
+ $window = $(window),
+ $body = $('body'),
+
+ moduleSelector = $allModules.selector || '',
+
+ hasTouch = (true),
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ returnedValue
+ ;
+ $allModules
+ .each(function() {
+ var
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.fn.popup.settings, parameters)
+ : $.extend({}, $.fn.popup.settings),
+
+ selector = settings.selector,
+ className = settings.className,
+ error = settings.error,
+ metadata = settings.metadata,
+ namespace = settings.namespace,
+
+ eventNamespace = '.' + settings.namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $module = $(this),
+ $context = $(settings.context),
+ $scrollContext = $(settings.scrollContext),
+ $boundary = $(settings.boundary),
+ $target = (settings.target)
+ ? $(settings.target)
+ : $module,
+
+ $popup,
+ $offsetParent,
+
+ searchDepth = 0,
+ triedPositions = false,
+ openedWithTouch = false,
+
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ documentObserver,
+ elementNamespace,
+ id,
+ module
+ ;
+
+ module = {
+
+ // binds events
+ initialize: function() {
+ module.debug('Initializing', $module);
+ module.createID();
+ module.bind.events();
+ if(!module.exists() && settings.preserve) {
+ module.create();
+ }
+ module.observeChanges();
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, instance)
+ ;
+ },
+
+ observeChanges: function() {
+ if('MutationObserver' in window) {
+ documentObserver = new MutationObserver(module.event.documentChanged);
+ documentObserver.observe(document, {
+ childList : true,
+ subtree : true
+ });
+ module.debug('Setting up mutation observer', documentObserver);
+ }
+ },
+
+ refresh: function() {
+ if(settings.popup) {
+ $popup = $(settings.popup).eq(0);
+ }
+ else {
+ if(settings.inline) {
+ $popup = $target.nextAll(selector.popup).eq(0);
+ settings.popup = $popup;
+ }
+ }
+ if(settings.popup) {
+ $popup.addClass(className.loading);
+ $offsetParent = module.get.offsetParent();
+ $popup.removeClass(className.loading);
+ if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {
+ module.debug('Moving popup to the same offset parent as activating element');
+ $popup
+ .detach()
+ .appendTo($offsetParent)
+ ;
+ }
+ }
+ else {
+ $offsetParent = (settings.inline)
+ ? module.get.offsetParent($target)
+ : module.has.popup()
+ ? module.get.offsetParent($popup)
+ : $body
+ ;
+ }
+ if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {
+ module.debug('Setting page as offset parent');
+ $offsetParent = $body;
+ }
+ if( module.get.variation() ) {
+ module.set.variation();
+ }
+ },
+
+ reposition: function() {
+ module.refresh();
+ module.set.position();
+ },
+
+ destroy: function() {
+ module.debug('Destroying previous module');
+ if(documentObserver) {
+ documentObserver.disconnect();
+ }
+ // remove element only if was created dynamically
+ if($popup && !settings.preserve) {
+ module.removePopup();
+ }
+ // clear all timeouts
+ clearTimeout(module.hideTimer);
+ clearTimeout(module.showTimer);
+ // remove events
+ module.unbind.close();
+ module.unbind.events();
+ $module
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ event: {
+ start: function(event) {
+ var
+ delay = ($.isPlainObject(settings.delay))
+ ? settings.delay.show
+ : settings.delay
+ ;
+ clearTimeout(module.hideTimer);
+ if(!openedWithTouch) {
+ module.showTimer = setTimeout(module.show, delay);
+ }
+ },
+ end: function() {
+ var
+ delay = ($.isPlainObject(settings.delay))
+ ? settings.delay.hide
+ : settings.delay
+ ;
+ clearTimeout(module.showTimer);
+ module.hideTimer = setTimeout(module.hide, delay);
+ },
+ touchstart: function(event) {
+ openedWithTouch = true;
+ module.show();
+ },
+ resize: function() {
+ if( module.is.visible() ) {
+ module.set.position();
+ }
+ },
+ documentChanged: function(mutations) {
+ [].forEach.call(mutations, function(mutation) {
+ if(mutation.removedNodes) {
+ [].forEach.call(mutation.removedNodes, function(node) {
+ if(node == element || $(node).find(element).length > 0) {
+ module.debug('Element removed from DOM, tearing down events');
+ module.destroy();
+ }
+ });
+ }
+ });
+ },
+ hideGracefully: function(event) {
+ var
+ $target = $(event.target),
+ isInDOM = $.contains(document.documentElement, event.target),
+ inPopup = ($target.closest(selector.popup).length > 0)
+ ;
+ // don't close on clicks inside popup
+ if(event && !inPopup && isInDOM) {
+ module.debug('Click occurred outside popup hiding popup');
+ module.hide();
+ }
+ else {
+ module.debug('Click was inside popup, keeping popup open');
+ }
+ }
+ },
+
+ // generates popup html from metadata
+ create: function() {
+ var
+ html = module.get.html(),
+ title = module.get.title(),
+ content = module.get.content()
+ ;
+
+ if(html || content || title) {
+ module.debug('Creating pop-up html');
+ if(!html) {
+ html = settings.templates.popup({
+ title : title,
+ content : content
+ });
+ }
+ $popup = $('<div/>')
+ .addClass(className.popup)
+ .data(metadata.activator, $module)
+ .html(html)
+ ;
+ if(settings.inline) {
+ module.verbose('Inserting popup element inline', $popup);
+ $popup
+ .insertAfter($module)
+ ;
+ }
+ else {
+ module.verbose('Appending popup element to body', $popup);
+ $popup
+ .appendTo( $context )
+ ;
+ }
+ module.refresh();
+ module.set.variation();
+
+ if(settings.hoverable) {
+ module.bind.popup();
+ }
+ settings.onCreate.call($popup, element);
+ }
+ else if($target.next(selector.popup).length !== 0) {
+ module.verbose('Pre-existing popup found');
+ settings.inline = true;
+ settings.popup = $target.next(selector.popup).data(metadata.activator, $module);
+ module.refresh();
+ if(settings.hoverable) {
+ module.bind.popup();
+ }
+ }
+ else if(settings.popup) {
+ $(settings.popup).data(metadata.activator, $module);
+ module.verbose('Used popup specified in settings');
+ module.refresh();
+ if(settings.hoverable) {
+ module.bind.popup();
+ }
+ }
+ else {
+ module.debug('No content specified skipping display', element);
+ }
+ },
+
+ createID: function() {
+ id = (Math.random().toString(16) + '000000000').substr(2, 8);
+ elementNamespace = '.' + id;
+ module.verbose('Creating unique id for element', id);
+ },
+
+ // determines popup state
+ toggle: function() {
+ module.debug('Toggling pop-up');
+ if( module.is.hidden() ) {
+ module.debug('Popup is hidden, showing pop-up');
+ module.unbind.close();
+ module.show();
+ }
+ else {
+ module.debug('Popup is visible, hiding pop-up');
+ module.hide();
+ }
+ },
+
+ show: function(callback) {
+ callback = callback || function(){};
+ module.debug('Showing pop-up', settings.transition);
+ if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {
+ if( !module.exists() ) {
+ module.create();
+ }
+ if(settings.onShow.call($popup, element) === false) {
+ module.debug('onShow callback returned false, cancelling popup animation');
+ return;
+ }
+ else if(!settings.preserve && !settings.popup) {
+ module.refresh();
+ }
+ if( $popup && module.set.position() ) {
+ module.save.conditions();
+ if(settings.exclusive) {
+ module.hideAll();
+ }
+ module.animate.show(callback);
+ }
+ }
+ },
+
+
+ hide: function(callback) {
+ callback = callback || function(){};
+ if( module.is.visible() || module.is.animating() ) {
+ if(settings.onHide.call($popup, element) === false) {
+ module.debug('onHide callback returned false, cancelling popup animation');
+ return;
+ }
+ module.remove.visible();
+ module.unbind.close();
+ module.restore.conditions();
+ module.animate.hide(callback);
+ }
+ },
+
+ hideAll: function() {
+ $(selector.popup)
+ .filter('.' + className.visible)
+ .each(function() {
+ $(this)
+ .data(metadata.activator)
+ .popup('hide')
+ ;
+ })
+ ;
+ },
+ exists: function() {
+ if(!$popup) {
+ return false;
+ }
+ if(settings.inline || settings.popup) {
+ return ( module.has.popup() );
+ }
+ else {
+ return ( $popup.closest($context).length >= 1 )
+ ? true
+ : false
+ ;
+ }
+ },
+
+ removePopup: function() {
+ if( module.has.popup() && !settings.popup) {
+ module.debug('Removing popup', $popup);
+ $popup.remove();
+ $popup = undefined;
+ settings.onRemove.call($popup, element);
+ }
+ },
+
+ save: {
+ conditions: function() {
+ module.cache = {
+ title: $module.attr('title')
+ };
+ if (module.cache.title) {
+ $module.removeAttr('title');
+ }
+ module.verbose('Saving original attributes', module.cache.title);
+ }
+ },
+ restore: {
+ conditions: function() {
+ if(module.cache && module.cache.title) {
+ $module.attr('title', module.cache.title);
+ module.verbose('Restoring original attributes', module.cache.title);
+ }
+ return true;
+ }
+ },
+ supports: {
+ svg: function() {
+ return (typeof SVGGraphicsElement === undefined);
+ }
+ },
+ animate: {
+ show: function(callback) {
+ callback = $.isFunction(callback) ? callback : function(){};
+ if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
+ module.set.visible();
+ $popup
+ .transition({
+ animation : settings.transition + ' in',
+ queue : false,
+ debug : settings.debug,
+ verbose : settings.verbose,
+ duration : settings.duration,
+ onComplete : function() {
+ module.bind.close();
+ callback.call($popup, element);
+ settings.onVisible.call($popup, element);
+ }
+ })
+ ;
+ }
+ else {
+ module.error(error.noTransition);
+ }
+ },
+ hide: function(callback) {
+ callback = $.isFunction(callback) ? callback : function(){};
+ module.debug('Hiding pop-up');
+ if(settings.onHide.call($popup, element) === false) {
+ module.debug('onHide callback returned false, cancelling popup animation');
+ return;
+ }
+ if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
+ $popup
+ .transition({
+ animation : settings.transition + ' out',
+ queue : false,
+ duration : settings.duration,
+ debug : settings.debug,
+ verbose : settings.verbose,
+ onComplete : function() {
+ module.reset();
+ callback.call($popup, element);
+ settings.onHidden.call($popup, element);
+ }
+ })
+ ;
+ }
+ else {
+ module.error(error.noTransition);
+ }
+ }
+ },
+
+ change: {
+ content: function(html) {
+ $popup.html(html);
+ }
+ },
+
+ get: {
+ html: function() {
+ $module.removeData(metadata.html);
+ return $module.data(metadata.html) || settings.html;
+ },
+ title: function() {
+ $module.removeData(metadata.title);
+ return $module.data(metadata.title) || settings.title;
+ },
+ content: function() {
+ $module.removeData(metadata.content);
+ return $module.data(metadata.content) || $module.attr('title') || settings.content;
+ },
+ variation: function() {
+ $module.removeData(metadata.variation);
+ return $module.data(metadata.variation) || settings.variation;
+ },
+ popup: function() {
+ return $popup;
+ },
+ popupOffset: function() {
+ return $popup.offset();
+ },
+ calculations: function() {
+ var
+ targetElement = $target[0],
+ isWindow = ($boundary[0] == window),
+ targetPosition = (settings.inline || (settings.popup && settings.movePopup))
+ ? $target.position()
+ : $target.offset(),
+ screenPosition = (isWindow)
+ ? { top: 0, left: 0 }
+ : $boundary.offset(),
+ calculations = {},
+ scroll = (isWindow)
+ ? { top: $window.scrollTop(), left: $window.scrollLeft() }
+ : { top: 0, left: 0},
+ screen
+ ;
+ calculations = {
+ // element which is launching popup
+ target : {
+ element : $target[0],
+ width : $target.outerWidth(),
+ height : $target.outerHeight(),
+ top : targetPosition.top,
+ left : targetPosition.left,
+ margin : {}
+ },
+ // popup itself
+ popup : {
+ width : $popup.outerWidth(),
+ height : $popup.outerHeight()
+ },
+ // offset container (or 3d context)
+ parent : {
+ width : $offsetParent.outerWidth(),
+ height : $offsetParent.outerHeight()
+ },
+ // screen boundaries
+ screen : {
+ top : screenPosition.top,
+ left : screenPosition.left,
+ scroll: {
+ top : scroll.top,
+ left : scroll.left
+ },
+ width : $boundary.width(),
+ height : $boundary.height()
+ }
+ };
+
+ // add in container calcs if fluid
+ if( settings.setFluidWidth && module.is.fluid() ) {
+ calculations.container = {
+ width: $popup.parent().outerWidth()
+ };
+ calculations.popup.width = calculations.container.width;
+ }
+
+ // add in margins if inline
+ calculations.target.margin.top = (settings.inline)
+ ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)
+ : 0
+ ;
+ calculations.target.margin.left = (settings.inline)
+ ? module.is.rtl()
+ ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)
+ : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)
+ : 0
+ ;
+ // calculate screen boundaries
+ screen = calculations.screen;
+ calculations.boundary = {
+ top : screen.top + screen.scroll.top,
+ bottom : screen.top + screen.scroll.top + screen.height,
+ left : screen.left + screen.scroll.left,
+ right : screen.left + screen.scroll.left + screen.width
+ };
+ return calculations;
+ },
+ id: function() {
+ return id;
+ },
+ startEvent: function() {
+ if(settings.on == 'hover') {
+ return 'mouseenter';
+ }
+ else if(settings.on == 'focus') {
+ return 'focus';
+ }
+ return false;
+ },
+ scrollEvent: function() {
+ return 'scroll';
+ },
+ endEvent: function() {
+ if(settings.on == 'hover') {
+ return 'mouseleave';
+ }
+ else if(settings.on == 'focus') {
+ return 'blur';
+ }
+ return false;
+ },
+ distanceFromBoundary: function(offset, calculations) {
+ var
+ distanceFromBoundary = {},
+ popup,
+ boundary
+ ;
+ calculations = calculations || module.get.calculations();
+
+ // shorthand
+ popup = calculations.popup;
+ boundary = calculations.boundary;
+
+ if(offset) {
+ distanceFromBoundary = {
+ top : (offset.top - boundary.top),
+ left : (offset.left - boundary.left),
+ right : (boundary.right - (offset.left + popup.width) ),
+ bottom : (boundary.bottom - (offset.top + popup.height) )
+ };
+ module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);
+ }
+ return distanceFromBoundary;
+ },
+ offsetParent: function($target) {
+ var
+ element = ($target !== undefined)
+ ? $target[0]
+ : $module[0],
+ parentNode = element.parentNode,
+ $node = $(parentNode)
+ ;
+ if(parentNode) {
+ var
+ is2D = ($node.css('transform') === 'none'),
+ isStatic = ($node.css('position') === 'static'),
+ isHTML = $node.is('html')
+ ;
+ while(parentNode && !isHTML && isStatic && is2D) {
+ parentNode = parentNode.parentNode;
+ $node = $(parentNode);
+ is2D = ($node.css('transform') === 'none');
+ isStatic = ($node.css('position') === 'static');
+ isHTML = $node.is('html');
+ }
+ }
+ return ($node && $node.length > 0)
+ ? $node
+ : $()
+ ;
+ },
+ positions: function() {
+ return {
+ 'top left' : false,
+ 'top center' : false,
+ 'top right' : false,
+ 'bottom left' : false,
+ 'bottom center' : false,
+ 'bottom right' : false,
+ 'left center' : false,
+ 'right center' : false
+ };
+ },
+ nextPosition: function(position) {
+ var
+ positions = position.split(' '),
+ verticalPosition = positions[0],
+ horizontalPosition = positions[1],
+ opposite = {
+ top : 'bottom',
+ bottom : 'top',
+ left : 'right',
+ right : 'left'
+ },
+ adjacent = {
+ left : 'center',
+ center : 'right',
+ right : 'left'
+ },
+ backup = {
+ 'top left' : 'top center',
+ 'top center' : 'top right',
+ 'top right' : 'right center',
+ 'right center' : 'bottom right',
+ 'bottom right' : 'bottom center',
+ 'bottom center' : 'bottom left',
+ 'bottom left' : 'left center',
+ 'left center' : 'top left'
+ },
+ adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),
+ oppositeTried = false,
+ adjacentTried = false,
+ nextPosition = false
+ ;
+ if(!triedPositions) {
+ module.verbose('All available positions available');
+ triedPositions = module.get.positions();
+ }
+
+ module.debug('Recording last position tried', position);
+ triedPositions[position] = true;
+
+ if(settings.prefer === 'opposite') {
+ nextPosition = [opposite[verticalPosition], horizontalPosition];
+ nextPosition = nextPosition.join(' ');
+ oppositeTried = (triedPositions[nextPosition] === true);
+ module.debug('Trying opposite strategy', nextPosition);
+ }
+ if((settings.prefer === 'adjacent') && adjacentsAvailable ) {
+ nextPosition = [verticalPosition, adjacent[horizontalPosition]];
+ nextPosition = nextPosition.join(' ');
+ adjacentTried = (triedPositions[nextPosition] === true);
+ module.debug('Trying adjacent strategy', nextPosition);
+ }
+ if(adjacentTried || oppositeTried) {
+ module.debug('Using backup position', nextPosition);
+ nextPosition = backup[position];
+ }
+ return nextPosition;
+ }
+ },
+
+ set: {
+ position: function(position, calculations) {
+
+ // exit conditions
+ if($target.length === 0 || $popup.length === 0) {
+ module.error(error.notFound);
+ return;
+ }
+ var
+ offset,
+ distanceAway,
+ target,
+ popup,
+ parent,
+ positioning,
+ popupOffset,
+ distanceFromBoundary
+ ;
+
+ calculations = calculations || module.get.calculations();
+ position = position || $module.data(metadata.position) || settings.position;
+
+ offset = $module.data(metadata.offset) || settings.offset;
+ distanceAway = settings.distanceAway;
+
+ // shorthand
+ target = calculations.target;
+ popup = calculations.popup;
+ parent = calculations.parent;
+
+ if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {
+ module.debug('Popup target is hidden, no action taken');
+ return false;
+ }
+
+ if(settings.inline) {
+ module.debug('Adding margin to calculation', target.margin);
+ if(position == 'left center' || position == 'right center') {
+ offset += target.margin.top;
+ distanceAway += -target.margin.left;
+ }
+ else if (position == 'top left' || position == 'top center' || position == 'top right') {
+ offset += target.margin.left;
+ distanceAway -= target.margin.top;
+ }
+ else {
+ offset += target.margin.left;
+ distanceAway += target.margin.top;
+ }
+ }
+
+ module.debug('Determining popup position from calculations', position, calculations);
+
+ if (module.is.rtl()) {
+ position = position.replace(/left|right/g, function (match) {
+ return (match == 'left')
+ ? 'right'
+ : 'left'
+ ;
+ });
+ module.debug('RTL: Popup position updated', position);
+ }
+
+ // if last attempt use specified last resort position
+ if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {
+ position = settings.lastResort;
+ }
+
+ switch (position) {
+ case 'top left':
+ positioning = {
+ top : 'auto',
+ bottom : parent.height - target.top + distanceAway,
+ left : target.left + offset,
+ right : 'auto'
+ };
+ break;
+ case 'top center':
+ positioning = {
+ bottom : parent.height - target.top + distanceAway,
+ left : target.left + (target.width / 2) - (popup.width / 2) + offset,
+ top : 'auto',
+ right : 'auto'
+ };
+ break;
+ case 'top right':
+ positioning = {
+ bottom : parent.height - target.top + distanceAway,
+ right : parent.width - target.left - target.width - offset,
+ top : 'auto',
+ left : 'auto'
+ };
+ break;
+ case 'left center':
+ positioning = {
+ top : target.top + (target.height / 2) - (popup.height / 2) + offset,
+ right : parent.width - target.left + distanceAway,
+ left : 'auto',
+ bottom : 'auto'
+ };
+ break;
+ case 'right center':
+ positioning = {
+ top : target.top + (target.height / 2) - (popup.height / 2) + offset,
+ left : target.left + target.width + distanceAway,
+ bottom : 'auto',
+ right : 'auto'
+ };
+ break;
+ case 'bottom left':
+ positioning = {
+ top : target.top + target.height + distanceAway,
+ left : target.left + offset,
+ bottom : 'auto',
+ right : 'auto'
+ };
+ break;
+ case 'bottom center':
+ positioning = {
+ top : target.top + target.height + distanceAway,
+ left : target.left + (target.width / 2) - (popup.width / 2) + offset,
+ bottom : 'auto',
+ right : 'auto'
+ };
+ break;
+ case 'bottom right':
+ positioning = {
+ top : target.top + target.height + distanceAway,
+ right : parent.width - target.left - target.width - offset,
+ left : 'auto',
+ bottom : 'auto'
+ };
+ break;
+ }
+ if(positioning === undefined) {
+ module.error(error.invalidPosition, position);
+ }
+
+ module.debug('Calculated popup positioning values', positioning);
+
+ // tentatively place on stage
+ $popup
+ .css(positioning)
+ .removeClass(className.position)
+ .addClass(position)
+ .addClass(className.loading)
+ ;
+
+ popupOffset = module.get.popupOffset();
+
+ // see if any boundaries are surpassed with this tentative position
+ distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);
+
+ if( module.is.offstage(distanceFromBoundary, position) ) {
+ module.debug('Position is outside viewport', position);
+ if(searchDepth < settings.maxSearchDepth) {
+ searchDepth++;
+ position = module.get.nextPosition(position);
+ module.debug('Trying new position', position);
+ return ($popup)
+ ? module.set.position(position, calculations)
+ : false
+ ;
+ }
+ else {
+ if(settings.lastResort) {
+ module.debug('No position found, showing with last position');
+ }
+ else {
+ module.debug('Popup could not find a position to display', $popup);
+ module.error(error.cannotPlace, element);
+ module.remove.attempts();
+ module.remove.loading();
+ module.reset();
+ settings.onUnplaceable.call($popup, element);
+ return false;
+ }
+ }
+ }
+ module.debug('Position is on stage', position);
+ module.remove.attempts();
+ module.remove.loading();
+ if( settings.setFluidWidth && module.is.fluid() ) {
+ module.set.fluidWidth(calculations);
+ }
+ return true;
+ },
+
+ fluidWidth: function(calculations) {
+ calculations = calculations || module.get.calculations();
+ module.debug('Automatically setting element width to parent width', calculations.parent.width);
+ $popup.css('width', calculations.container.width);
+ },
+
+ variation: function(variation) {
+ variation = variation || module.get.variation();
+ if(variation && module.has.popup() ) {
+ module.verbose('Adding variation to popup', variation);
+ $popup.addClass(variation);
+ }
+ },
+
+ visible: function() {
+ $module.addClass(className.visible);
+ }
+ },
+
+ remove: {
+ loading: function() {
+ $popup.removeClass(className.loading);
+ },
+ variation: function(variation) {
+ variation = variation || module.get.variation();
+ if(variation) {
+ module.verbose('Removing variation', variation);
+ $popup.removeClass(variation);
+ }
+ },
+ visible: function() {
+ $module.removeClass(className.visible);
+ },
+ attempts: function() {
+ module.verbose('Resetting all searched positions');
+ searchDepth = 0;
+ triedPositions = false;
+ }
+ },
+
+ bind: {
+ events: function() {
+ module.debug('Binding popup events to module');
+ if(settings.on == 'click') {
+ $module
+ .on('click' + eventNamespace, module.toggle)
+ ;
+ }
+ if(settings.on == 'hover' && hasTouch) {
+ $module
+ .on('touchstart' + eventNamespace, module.event.touchstart)
+ ;
+ }
+ if( module.get.startEvent() ) {
+ $module
+ .on(module.get.startEvent() + eventNamespace, module.event.start)
+ .on(module.get.endEvent() + eventNamespace, module.event.end)
+ ;
+ }
+ if(settings.target) {
+ module.debug('Target set to element', $target);
+ }
+ $window.on('resize' + elementNamespace, module.event.resize);
+ },
+ popup: function() {
+ module.verbose('Allowing hover events on popup to prevent closing');
+ if( $popup && module.has.popup() ) {
+ $popup
+ .on('mouseenter' + eventNamespace, module.event.start)
+ .on('mouseleave' + eventNamespace, module.event.end)
+ ;
+ }
+ },
+ close: function() {
+ if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {
+ $scrollContext
+ .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)
+ ;
+ }
+ if(settings.on == 'hover' && openedWithTouch) {
+ module.verbose('Binding popup close event to document');
+ $document
+ .on('touchstart' + elementNamespace, function(event) {
+ module.verbose('Touched away from popup');
+ module.event.hideGracefully.call(element, event);
+ })
+ ;
+ }
+ if(settings.on == 'click' && settings.closable) {
+ module.verbose('Binding popup close event to document');
+ $document
+ .on('click' + elementNamespace, function(event) {
+ module.verbose('Clicked away from popup');
+ module.event.hideGracefully.call(element, event);
+ })
+ ;
+ }
+ }
+ },
+
+ unbind: {
+ events: function() {
+ $window
+ .off(elementNamespace)
+ ;
+ $module
+ .off(eventNamespace)
+ ;
+ },
+ close: function() {
+ $document
+ .off(elementNamespace)
+ ;
+ $scrollContext
+ .off(elementNamespace)
+ ;
+ },
+ },
+
+ has: {
+ popup: function() {
+ return ($popup && $popup.length > 0);
+ }
+ },
+
+ is: {
+ offstage: function(distanceFromBoundary, position) {
+ var
+ offstage = []
+ ;
+ // return boundaries that have been surpassed
+ $.each(distanceFromBoundary, function(direction, distance) {
+ if(distance < -settings.jitter) {
+ module.debug('Position exceeds allowable distance from edge', direction, distance, position);
+ offstage.push(direction);
+ }
+ });
+ if(offstage.length > 0) {
+ return true;
+ }
+ else {
+ return false;
+ }
+ },
+ svg: function(element) {
+ return module.supports.svg() && (element instanceof SVGGraphicsElement);
+ },
+ active: function() {
+ return $module.hasClass(className.active);
+ },
+ animating: function() {
+ return ($popup !== undefined && $popup.hasClass(className.animating) );
+ },
+ fluid: function() {
+ return ($popup !== undefined && $popup.hasClass(className.fluid));
+ },
+ visible: function() {
+ return ($popup !== undefined && $popup.hasClass(className.visible));
+ },
+ dropdown: function() {
+ return $module.hasClass(className.dropdown);
+ },
+ hidden: function() {
+ return !module.is.visible();
+ },
+ rtl: function () {
+ return $module.css('direction') == 'rtl';
+ }
+ },
+
+ reset: function() {
+ module.remove.visible();
+ if(settings.preserve) {
+ if($.fn.transition !== undefined) {
+ $popup
+ .transition('remove transition')
+ ;
+ }
+ }
+ else {
+ module.removePopup();
+ }
+ },
+
+ setting: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ settings[name] = value;
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(!settings.silent && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(!settings.silent && settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ if(!settings.silent) {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ }
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Element' : element,
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if(moduleSelector) {
+ title += ' \'' + moduleSelector + '\'';
+ }
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ instance.invoke('destroy');
+ }
+ module.initialize();
+ }
+ })
+ ;
+
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.fn.popup.settings = {
+
+ name : 'Popup',
+
+ // module settings
+ silent : false,
+ debug : false,
+ verbose : false,
+ performance : true,
+ namespace : 'popup',
+
+ // whether it should use dom mutation observers
+ observeChanges : true,
+
+ // callback only when element added to dom
+ onCreate : function(){},
+
+ // callback before element removed from dom
+ onRemove : function(){},
+
+ // callback before show animation
+ onShow : function(){},
+
+ // callback after show animation
+ onVisible : function(){},
+
+ // callback before hide animation
+ onHide : function(){},
+
+ // callback when popup cannot be positioned in visible screen
+ onUnplaceable : function(){},
+
+ // callback after hide animation
+ onHidden : function(){},
+
+ // when to show popup
+ on : 'hover',
+
+ // element to use to determine if popup is out of boundary
+ boundary : window,
+
+ // whether to add touchstart events when using hover
+ addTouchEvents : true,
+
+ // default position relative to element
+ position : 'top left',
+
+ // name of variation to use
+ variation : '',
+
+ // whether popup should be moved to context
+ movePopup : true,
+
+ // element which popup should be relative to
+ target : false,
+
+ // jq selector or element that should be used as popup
+ popup : false,
+
+ // popup should remain inline next to activator
+ inline : false,
+
+ // popup should be removed from page on hide
+ preserve : false,
+
+ // popup should not close when being hovered on
+ hoverable : false,
+
+ // explicitly set content
+ content : false,
+
+ // explicitly set html
+ html : false,
+
+ // explicitly set title
+ title : false,
+
+ // whether automatically close on clickaway when on click
+ closable : true,
+
+ // automatically hide on scroll
+ hideOnScroll : 'auto',
+
+ // hide other popups on show
+ exclusive : false,
+
+ // context to attach popups
+ context : 'body',
+
+ // context for binding scroll events
+ scrollContext : window,
+
+ // position to prefer when calculating new position
+ prefer : 'opposite',
+
+ // specify position to appear even if it doesn't fit
+ lastResort : false,
+
+ // delay used to prevent accidental refiring of animations due to user error
+ delay : {
+ show : 50,
+ hide : 70
+ },
+
+ // whether fluid variation should assign width explicitly
+ setFluidWidth : true,
+
+ // transition settings
+ duration : 200,
+ transition : 'scale',
+
+ // distance away from activating element in px
+ distanceAway : 0,
+
+ // number of pixels an element is allowed to be "offstage" for a position to be chosen (allows for rounding)
+ jitter : 2,
+
+ // offset on aligning axis from calculated position
+ offset : 0,
+
+ // maximum times to look for a position before failing (9 positions total)
+ maxSearchDepth : 15,
+
+ error: {
+ invalidPosition : 'The position you specified is not a valid position',
+ cannotPlace : 'Popup does not fit within the boundaries of the viewport',
+ method : 'The method you called is not defined.',
+ noTransition : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',
+ notFound : 'The target or popup you specified does not exist on the page'
+ },
+
+ metadata: {
+ activator : 'activator',
+ content : 'content',
+ html : 'html',
+ offset : 'offset',
+ position : 'position',
+ title : 'title',
+ variation : 'variation'
+ },
+
+ className : {
+ active : 'active',
+ animating : 'animating',
+ dropdown : 'dropdown',
+ fluid : 'fluid',
+ loading : 'loading',
+ popup : 'ui popup',
+ position : 'top left center bottom right',
+ visible : 'visible'
+ },
+
+ selector : {
+ popup : '.ui.popup'
+ },
+
+ templates: {
+ escape: function(string) {
+ var
+ badChars = /[&<>"'`]/g,
+ shouldEscape = /[&<>"'`]/,
+ escape = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'",
+ "`": "`"
+ },
+ escapedChar = function(chr) {
+ return escape[chr];
+ }
+ ;
+ if(shouldEscape.test(string)) {
+ return string.replace(badChars, escapedChar);
+ }
+ return string;
+ },
+ popup: function(text) {
+ var
+ html = '',
+ escape = $.fn.popup.settings.templates.escape
+ ;
+ if(typeof text !== undefined) {
+ if(typeof text.title !== undefined && text.title) {
+ text.title = escape(text.title);
+ html += '<div class="header">' + text.title + '</div>';
+ }
+ if(typeof text.content !== undefined && text.content) {
+ text.content = escape(text.content);
+ html += '<div class="content">' + text.content + '</div>';
+ }
+ }
+ return html;
+ }
+ }
+
+};
+
+
+})( jQuery, window, document );
[11/48] incubator-senssoft-tap git commit: Preliminary Distill
connection
Posted by ar...@apache.org.
Preliminary Distill connection
Still needs authentication, query handling, and database matching for
app id to app name.
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/3631ae57
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/3631ae57
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/3631ae57
Branch: refs/heads/master
Commit: 3631ae576d058156a457afbf40f100438c22f63b
Parents: edda183
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Fri Jul 22 15:39:34 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Fri Jul 22 15:39:34 2016 -0400
----------------------------------------------------------------------
app_mgr/distillviews.py | 48 ++++++++++++++++++++++++++++++++++++++++++++
app_mgr/urls.py | 8 +++++++-
app_mgr/views.py | 33 ++++++++++++++++++++++++++++++
3 files changed, 88 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/3631ae57/app_mgr/distillviews.py
----------------------------------------------------------------------
diff --git a/app_mgr/distillviews.py b/app_mgr/distillviews.py
new file mode 100644
index 0000000..080b0f2
--- /dev/null
+++ b/app_mgr/distillviews.py
@@ -0,0 +1,48 @@
+from django.shortcuts import render, redirect, render_to_response
+from django.http import HttpResponseRedirect, HttpResponse
+from django.contrib.sites.shortcuts import get_current_site
+from django.core.urlresolvers import reverse
+from django.template import RequestContext
+from django.conf import settings
+
+
+from django.db import IntegrityError
+from django.db.models import Q
+
+from django.views.generic.base import RedirectView
+
+from axes.decorators import watch_login
+
+from rest_framework import generics
+from rest_framework.authentication import TokenAuthentication
+from rest_framework.permissions import IsAuthenticated
+from rest_framework.response import Response
+#from rest_framework.authtoken import views as token_views
+
+from guardian.shortcuts import assign_perm, get_objects_for_user
+
+from app_mgr.permissions import ViewControlObjectPermissions
+from app_mgr.permissions import ApplicationObjectPermissions
+from app_mgr.models import UserProfile, Organization, Application, AppVersion
+from app_mgr.serializers import UserProfileSerializer, OrganizationSerializer, ApplicationSerializer
+
+import datetime
+import requests
+
+distillURL = "msbx.draper.com:8091"
+
+def app_results_byname(request, appName, searchType):
+ completeurl = distillURL+'/search/'+appName+'/'+searchType
+ print (completeurl)
+ results = requests.get(completeurl)
+
+ return HttpResponse(results)
+
+def app_results(request, appId, searchType):
+ print ("hello")
+ print (appId)
+ print (searchType)
+ return render(request, 'user_profile.html',
+ {'user': request.user,
+ }
+ )
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/3631ae57/app_mgr/urls.py
----------------------------------------------------------------------
diff --git a/app_mgr/urls.py b/app_mgr/urls.py
index 9c5392a..ec10388 100644
--- a/app_mgr/urls.py
+++ b/app_mgr/urls.py
@@ -16,6 +16,7 @@ from django.conf.urls import include, url
from django.contrib import admin
from app_mgr import views
+from app_mgr import distillviews
urlpatterns = [
# USER AUTHENTICATION
@@ -37,6 +38,11 @@ urlpatterns = [
url(r'^org/(?P<pk>[\d]+)/$', views.OrganizationInstanceView.as_view(), name='org-instance'),
url(r'^app/(?P<pk>[\d]+)/$', views.ApplicationInstanceView.as_view(), name='app-instance'),
- #url(r'^appresults/(?P<pk>[\d]+)/$', views.UserProfileInstanceView.as_view(), name='user-instance'),
+ url(r'^appresults/(?P<appId>[0-9]{1,2})/(?P<searchType>\w+)/$', distillviews.app_results, name='app-results'),
+ url(r'^appresults/(?P<appName>\w+)/(?P<searchType>\w+)/$', distillviews.app_results_byname, name='app-results'),
+
+ # url(r'^appresults/(?P<pk>[\d]+)/fields/$', views.get_app_result_fields, name='data-fields'),
+ # url(r'^appresults/(?P<pk>[\d]+)/data/$', views.get_app_results, name='data'),
+
]
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/3631ae57/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index 7100e8c..52ff36e 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -141,6 +141,7 @@ class ApplicationInstanceView(generics.RetrieveUpdateDestroyAPIView):
queryset = Application.objects.all()
serializer_class = ApplicationSerializer
+
# REDIRECTS
#class UserRedirectView(RedirectView):
#
@@ -307,3 +308,35 @@ def view_profile(request):
{'user': request.user,
}
)
+
+# def get_app_results_fields(request, check):
+# user = request.user
+# return render(request, 'user_profile.html',
+# {'user': request.user,
+# }
+# )
+
+# def get_app_results(request, check):
+# user = request.user
+# return render(request, 'user_profile.html',
+# {'user': request.user,
+# }
+# )
+
+def app_results(request, appId, searchType):
+ print ("hello")
+ print (appId)
+ print (searchType)
+ return render(request, 'user_profile.html',
+ {'user': request.user,
+ }
+ )
+
+def app_results_byname(request, appName, searchType):
+ print ("hello")
+ print (appName)
+ print (searchType)
+ return render(request, 'user_profile.html',
+ {'user': request.user,
+ }
+ )
\ No newline at end of file
[10/48] incubator-senssoft-tap git commit: Login returns token
Posted by ar...@apache.org.
Login returns token
Project: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/commit/edda1836
Tree: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/tree/edda1836
Diff: http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/diff/edda1836
Branch: refs/heads/master
Commit: edda18361c51d7ddb9634018e141b2a6ec64947c
Parents: 8c116e7
Author: Arthi Vezhavendan <ar...@gmail.com>
Authored: Fri Jul 22 11:17:27 2016 -0400
Committer: Arthi Vezhavendan <ar...@gmail.com>
Committed: Fri Jul 22 11:17:27 2016 -0400
----------------------------------------------------------------------
app_mgr/urls.py | 3 +++
app_mgr/views.py | 14 ++++++++++----
2 files changed, 13 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/edda1836/app_mgr/urls.py
----------------------------------------------------------------------
diff --git a/app_mgr/urls.py b/app_mgr/urls.py
index 28dd27e..9c5392a 100644
--- a/app_mgr/urls.py
+++ b/app_mgr/urls.py
@@ -36,4 +36,7 @@ urlpatterns = [
url(r'^user/(?P<pk>current)/$', views.UserProfileInstanceView.as_view(), name='user-current'),
url(r'^org/(?P<pk>[\d]+)/$', views.OrganizationInstanceView.as_view(), name='org-instance'),
url(r'^app/(?P<pk>[\d]+)/$', views.ApplicationInstanceView.as_view(), name='app-instance'),
+
+ #url(r'^appresults/(?P<pk>[\d]+)/$', views.UserProfileInstanceView.as_view(), name='user-instance'),
+
]
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/edda1836/app_mgr/views.py
----------------------------------------------------------------------
diff --git a/app_mgr/views.py b/app_mgr/views.py
index 3dbbec0..7100e8c 100644
--- a/app_mgr/views.py
+++ b/app_mgr/views.py
@@ -8,6 +8,7 @@ from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.conf import settings
+
from django.db import IntegrityError
from django.db.models import Q
@@ -19,6 +20,7 @@ from rest_framework import generics
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
+#from rest_framework.authtoken import views as token_views
from guardian.shortcuts import assign_perm, get_objects_for_user
@@ -28,6 +30,7 @@ from app_mgr.models import UserProfile, Organization, Application, AppVersion
from app_mgr.serializers import UserProfileSerializer, OrganizationSerializer, ApplicationSerializer
import datetime
+import requests
#
# RESTFUL VIEWS
@@ -255,11 +258,9 @@ def login_user(request):
# If the account is valid and active, we can log the user in.
# We'll send the user back to the homepage.
login(request, user)
- userToken = "HttpRequest"
+ userToken = get_token(email, password)
print( "Successful Login: {0}, id: {1}, token: {2}".format(email, user.id, userToken) )
- #return HttpResponseRedirect('/app_mgr/user_profile/')
- return HttpResponse("Successful Login: {0}, id: {1}, token: {2}".format(email, user.id, userToken))
- #return HttpResponseRedirect('../../api-token-auth/')
+ return HttpResponse(userToken)
else:
# An inactive account was used - no logging in!
return HttpResponse("Your TAP account is disabled.")
@@ -279,6 +280,11 @@ def login_user(request):
# return login_view(request, authentication_form=MyAuthForm)
+def get_token(email, password):
+ credentials = {'username':email, 'password':password}
+ tokenResponse = requests.post('http://localhost:8000/api-token-auth/', credentials)
+ return tokenResponse.text
+
def reset_confirm(request, uidb64=None, token=None):
return password_reset_confirm(request, template_name='registration/reset_password_confirm.html',
uidb64=uidb64, token=token,
[37/48] incubator-senssoft-tap git commit: Cherry pick front end
bundle
Posted by ar...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/list.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/list.less b/semantic/src/definitions/elements/list.less
new file mode 100755
index 0000000..b9c9cf4
--- /dev/null
+++ b/semantic/src/definitions/elements/list.less
@@ -0,0 +1,951 @@
+/*!
+ * # Semantic UI - List
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'list';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ List
+*******************************/
+
+ul.ui.list,
+ol.ui.list,
+.ui.list {
+ list-style-type: @listStyleType;
+ margin: @margin;
+ padding: @verticalPadding @horizontalPadding;
+}
+
+ul.ui.list:first-child,
+ol.ui.list:first-child,
+.ui.list:first-child {
+ margin-top: 0em;
+ padding-top: 0em;
+}
+
+ul.ui.list:last-child,
+ol.ui.list:last-child,
+.ui.list:last-child {
+ margin-bottom: 0em;
+ padding-bottom: 0em;
+}
+
+/*******************************
+ Content
+*******************************/
+
+/* List Item */
+ul.ui.list li,
+ol.ui.list li,
+.ui.list > .item,
+.ui.list .list > .item {
+ display: list-item;
+ table-layout: fixed;
+ list-style-type: @listStyleType;
+ list-style-position: @listStylePosition;
+
+ padding: @itemPadding;
+ line-height: @itemLineHeight;
+}
+
+ul.ui.list > li:first-child:after,
+ol.ui.list > li:first-child:after,
+.ui.list > .list > .item,
+.ui.list > .item:after {
+ content: '';
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+ul.ui.list li:first-child,
+ol.ui.list li:first-child,
+.ui.list .list > .item:first-child,
+.ui.list > .item:first-child {
+ padding-top: 0em;
+}
+ul.ui.list li:last-child,
+ol.ui.list li:last-child,
+.ui.list .list > .item:last-child,
+.ui.list > .item:last-child {
+ padding-bottom: 0em;
+}
+
+/* Child List */
+ul.ui.list ul,
+ol.ui.list ol,
+.ui.list .list {
+ clear: both;
+ margin: 0em;
+ padding: @childListPadding;
+}
+
+/* Child Item */
+ul.ui.list ul li,
+ol.ui.list ol li,
+.ui.list .list > .item {
+ padding: @childItemPadding;
+ line-height: @childItemLineHeight;
+}
+
+
+/* Icon */
+.ui.list .list > .item > i.icon,
+.ui.list > .item > i.icon {
+ display: table-cell;
+ margin: 0em;
+ padding-top: @iconOffset;
+ padding-right: @iconDistance;
+ vertical-align: @iconContentVerticalAlign;
+ transition: @iconTransition;
+}
+.ui.list .list > .item > i.icon:only-child,
+.ui.list > .item > i.icon:only-child {
+ display: inline-block;
+ vertical-align: @iconVerticalAlign;
+}
+
+
+/* Image */
+.ui.list .list > .item > .image,
+.ui.list > .item > .image {
+ display: table-cell;
+ background-color: transparent;
+ margin: 0em;
+ vertical-align: @imageAlign;
+}
+.ui.list .list > .item > .image:not(:only-child):not(img),
+.ui.list > .item > .image:not(:only-child):not(img) {
+ padding-right: @imageDistance;
+}
+.ui.list .list > .item > .image img,
+.ui.list > .item > .image img {
+ vertical-align: @imageAlign;
+}
+
+.ui.list .list > .item > img.image,
+.ui.list .list > .item > .image:only-child,
+.ui.list > .item > img.image,
+.ui.list > .item > .image:only-child {
+ display: inline-block;
+}
+
+/* Content */
+.ui.list .list > .item > .content,
+.ui.list > .item > .content {
+ line-height: @contentLineHeight;
+}
+.ui.list .list > .item > .image + .content,
+.ui.list .list > .item > .icon + .content,
+.ui.list > .item > .image + .content,
+.ui.list > .item > .icon + .content {
+ display: table-cell;
+ padding: 0em 0em 0em @contentDistance;
+ vertical-align: @contentVerticalAlign;
+}
+.ui.list .list > .item > img.image + .content,
+.ui.list > .item > img.image + .content {
+ display: inline-block;
+}
+.ui.list .list > .item > .content > .list,
+.ui.list > .item > .content > .list {
+ margin-left: 0em;
+ padding-left: 0em;
+}
+
+/* Header */
+.ui.list .list > .item .header,
+.ui.list > .item .header {
+ display: block;
+ margin: 0em;
+ font-family: @itemHeaderFontFamily;
+ font-weight: @itemHeaderFontWeight;
+ color: @itemHeaderColor;
+}
+
+/* Description */
+.ui.list .list > .item .description,
+.ui.list > .item .description {
+ display: block;
+ color: @itemDescriptionColor;
+}
+
+/* Child Link */
+.ui.list > .item a,
+.ui.list .list > .item a {
+ cursor: pointer;
+}
+
+/* Linking Item */
+.ui.list .list > a.item,
+.ui.list > a.item {
+ cursor: pointer;
+ color: @itemLinkColor;
+}
+.ui.list .list > a.item:hover,
+.ui.list > a.item:hover {
+ color: @itemLinkHoverColor;
+}
+
+/* Linked Item Icons */
+.ui.list .list > a.item i.icon,
+.ui.list > a.item i.icon {
+ color: @itemLinkIconColor;
+}
+
+/* Header Link */
+.ui.list .list > .item a.header,
+.ui.list > .item a.header {
+ cursor: pointer;
+ color: @itemHeaderLinkColor !important;
+}
+.ui.list .list > .item a.header:hover,
+.ui.list > .item a.header:hover {
+ color: @itemHeaderLinkHoverColor !important;
+}
+
+/* Floated Content */
+.ui[class*="left floated"].list {
+ float: left;
+}
+.ui[class*="right floated"].list {
+ float: right;
+}
+
+.ui.list .list > .item [class*="left floated"],
+.ui.list > .item [class*="left floated"] {
+ float: left;
+ margin: @leftFloatMargin;
+}
+.ui.list .list > .item [class*="right floated"],
+.ui.list > .item [class*="right floated"] {
+ float: right;
+ margin: @rightFloatMargin;
+}
+
+/*******************************
+ Coupling
+*******************************/
+
+.ui.menu .ui.list > .item,
+.ui.menu .ui.list .list > .item {
+ display: list-item;
+ table-layout: fixed;
+ background-color: transparent;
+
+ list-style-type: @listStyleType;
+ list-style-position: @listStylePosition;
+
+ padding: @itemVerticalPadding @itemHorizontalPadding;
+ line-height: @itemLineHeight;
+}
+.ui.menu .ui.list .list > .item:before,
+.ui.menu .ui.list > .item:before {
+ border: none;
+ background: none;
+}
+.ui.menu .ui.list .list > .item:first-child,
+.ui.menu .ui.list > .item:first-child {
+ padding-top: 0em;
+}
+.ui.menu .ui.list .list > .item:last-child,
+.ui.menu .ui.list > .item:last-child {
+ padding-bottom: 0em;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+/*-------------------
+ Horizontal
+--------------------*/
+
+.ui.horizontal.list {
+ display: inline-block;
+ font-size: 0em;
+}
+.ui.horizontal.list > .item {
+ display: inline-block;
+ margin-left: @horizontalSpacing;
+ font-size: 1rem;
+}
+.ui.horizontal.list:not(.celled) > .item:first-child {
+ margin-left: 0em !important;
+ padding-left: 0em !important;
+}
+.ui.horizontal.list .list {
+ padding-left: 0em;
+ padding-bottom: 0em;
+}
+
+.ui.horizontal.list > .item > .image,
+.ui.horizontal.list .list > .item > .image,
+.ui.horizontal.list > .item > .icon,
+.ui.horizontal.list .list > .item > .icon,
+.ui.horizontal.list > .item > .content,
+.ui.horizontal.list .list > .item > .content {
+ vertical-align: @horizontalVerticalAlign;
+}
+
+/* Padding on all elements */
+.ui.horizontal.list > .item:first-child,
+.ui.horizontal.list > .item:last-child {
+ padding-top: @itemVerticalPadding;
+ padding-bottom: @itemVerticalPadding;
+}
+
+/* Horizontal List */
+.ui.horizontal.list > .item > i.icon {
+ margin: 0em;
+ padding: 0em @horizontalIconDistance 0em 0em;
+}
+.ui.horizontal.list > .item > .icon,
+.ui.horizontal.list > .item > .icon + .content {
+ float: none;
+ display: inline-block;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*-------------------
+ Disabled
+--------------------*/
+
+.ui.list .list > .disabled.item,
+.ui.list > .disabled.item {
+ pointer-events: none;
+ color: @disabledColor !important;
+}
+.ui.inverted.list .list > .disabled.item,
+.ui.inverted.list > .disabled.item {
+ color: @invertedDisabledColor !important;
+}
+
+/*-------------------
+ Hover
+--------------------*/
+
+.ui.list .list > a.item:hover .icon,
+.ui.list > a.item:hover .icon {
+ color: @itemLinkIconHoverColor;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*-------------------
+ Inverted
+--------------------*/
+
+.ui.inverted.list .list > a.item > .icon,
+.ui.inverted.list > a.item > .icon {
+ color: @invertedIconLinkColor;
+}
+.ui.inverted.list .list > .item .header,
+.ui.inverted.list > .item .header {
+ color: @invertedHeaderColor;
+}
+.ui.inverted.list .list > .item .description,
+.ui.inverted.list > .item .description {
+ color: @invertedDescriptionColor;
+}
+
+/* Item Link */
+.ui.inverted.list .list > a.item,
+.ui.inverted.list > a.item {
+ cursor: pointer;
+ color: @invertedItemLinkColor;
+}
+.ui.inverted.list .list > a.item:hover,
+.ui.inverted.list > a.item:hover {
+ color: @invertedItemLinkHoverColor;
+}
+
+
+/* Linking Content */
+.ui.inverted.list .item a:not(.ui) {
+ color: @invertedItemLinkColor !important;
+}
+.ui.inverted.list .item a:not(.ui):hover {
+ color: @invertedItemLinkHoverColor !important;
+}
+
+/*-------------------
+ Aligned
+--------------------*/
+
+.ui.list[class*="top aligned"] .image,
+.ui.list[class*="top aligned"] .content,
+.ui.list [class*="top aligned"] {
+ vertical-align: top !important;
+}
+.ui.list[class*="middle aligned"] .image,
+.ui.list[class*="middle aligned"] .content,
+.ui.list [class*="middle aligned"] {
+ vertical-align: middle !important;
+}
+.ui.list[class*="bottom aligned"] .image,
+.ui.list[class*="bottom aligned"] .content,
+.ui.list [class*="bottom aligned"] {
+ vertical-align: bottom !important;
+}
+
+/*-------------------
+ Link
+--------------------*/
+
+.ui.link.list .item,
+.ui.link.list a.item,
+.ui.link.list .item a:not(.ui) {
+ color: @linkListItemColor;
+ transition: @linkListTransition;
+}
+.ui.link.list a.item:hover,
+.ui.link.list .item a:not(.ui):hover {
+ color: @linkListItemHoverColor;
+}
+.ui.link.list a.item:active,
+.ui.link.list .item a:not(.ui):active {
+ color: @linkListItemDownColor;
+}
+.ui.link.list .active.item,
+.ui.link.list .active.item a:not(.ui) {
+ color: @linkListItemActiveColor;
+}
+
+/* Inverted */
+.ui.inverted.link.list .item,
+.ui.inverted.link.list a.item,
+.ui.inverted.link.list .item a:not(.ui) {
+ color: @invertedLinkListItemColor;
+}
+.ui.inverted.link.list a.item:hover,
+.ui.inverted.link.list .item a:not(.ui):hover {
+ color: @invertedLinkListItemHoverColor;
+}
+.ui.inverted.link.list a.item:active,
+.ui.inverted.link.list .item a:not(.ui):active {
+ color: @invertedLinkListItemDownColor;
+}
+.ui.inverted.link.list a.active.item,
+.ui.inverted.link.list .active.item a:not(.ui) {
+ color: @invertedLinkListItemActiveColor;
+}
+
+/*-------------------
+ Selection
+--------------------*/
+
+.ui.selection.list .list > .item,
+.ui.selection.list > .item {
+ cursor: pointer;
+ background: @selectionListBackground;
+ padding: @selectionListItemVerticalPadding @selectionListItemHorizontalPadding;
+ margin: @selectionListItemMargin;
+ color: @selectionListColor;
+ border-radius: @selectionListItemBorderRadius;
+ transition: @selectionListTransition;
+}
+.ui.selection.list .list > .item:last-child,
+.ui.selection.list > .item:last-child {
+ margin-bottom: 0em;
+}
+.ui.selection.list.list > .item:hover,
+.ui.selection.list > .item:hover {
+ background: @selectionListHoverBackground;
+ color: @selectionListHoverColor;
+}
+.ui.selection.list .list > .item:active,
+.ui.selection.list > .item:active {
+ background: @selectionListDownBackground;
+ color: @selectionListDownColor;
+}
+.ui.selection.list .list > .item.active,
+.ui.selection.list > .item.active {
+ background: @selectionListActiveBackground;
+ color: @selectionListActiveColor;
+}
+
+/* Inverted */
+.ui.inverted.selection.list > .item,
+.ui.inverted.selection.list > .item {
+ background: @invertedSelectionListBackground;
+ color: @invertedSelectionListColor;
+}
+.ui.inverted.selection.list > .item:hover,
+.ui.inverted.selection.list > .item:hover {
+ background: @invertedSelectionListHoverBackground;
+ color: @invertedSelectionListHoverColor;
+}
+.ui.inverted.selection.list > .item:active,
+.ui.inverted.selection.list > .item:active {
+ background: @invertedSelectionListDownBackground;
+ color: @invertedSelectionListDownColor;
+}
+.ui.inverted.selection.list > .item.active,
+.ui.inverted.selection.list > .item.active {
+ background: @invertedSelectionListActiveBackground;
+ color: @invertedSelectionListActiveColor;
+}
+
+/* Celled / Divided Selection List */
+.ui.celled.selection.list .list > .item,
+.ui.divided.selection.list .list > .item,
+.ui.celled.selection.list > .item,
+.ui.divided.selection.list > .item {
+ border-radius: 0em;
+}
+
+/*-------------------
+ Animated
+--------------------*/
+
+.ui.animated.list > .item {
+ transition: @animatedListTransition;
+}
+.ui.animated.list:not(.horizontal) > .item:hover {
+ padding-left: @animatedListIndent;
+}
+
+/*-------------------
+ Fitted
+--------------------*/
+.ui.fitted.list:not(.selection) .list > .item,
+.ui.fitted.list:not(.selection) > .item {
+ padding-left: 0em;
+ padding-right: 0em;
+}
+.ui.fitted.selection.list .list > .item,
+.ui.fitted.selection.list > .item {
+ margin-left: -@selectionListItemHorizontalPadding;
+ margin-right: -@selectionListItemHorizontalPadding;
+}
+
+/*-------------------
+ Bulleted
+--------------------*/
+
+ul.ui.list,
+.ui.bulleted.list {
+ margin-left: @bulletDistance;
+}
+ul.ui.list li,
+.ui.bulleted.list .list > .item,
+.ui.bulleted.list > .item {
+ position: relative;
+}
+ul.ui.list li:before,
+.ui.bulleted.list .list > .item:before,
+.ui.bulleted.list > .item:before {
+ user-select: none;
+ pointer-events: none;
+ position: absolute;
+ top: auto;
+ left: auto;
+ font-weight: normal;
+ margin-left: @bulletOffset;
+ content: @bulletCharacter;
+ opacity: @bulletOpacity;
+ color: @bulletColor;
+ vertical-align: @bulletVerticalAlign;
+}
+
+ul.ui.list li:before,
+.ui.bulleted.list .list > a.item:before,
+.ui.bulleted.list > a.item:before {
+ color: @bulletLinkColor;
+}
+
+ul.ui.list ul,
+.ui.bulleted.list .list {
+ padding-left: @bulletChildDistance;
+}
+
+/* Horizontal Bulleted */
+ul.ui.horizontal.bulleted.list,
+.ui.horizontal.bulleted.list {
+ margin-left: 0em;
+}
+ul.ui.horizontal.bulleted.list li,
+.ui.horizontal.bulleted.list > .item {
+ margin-left: @horizontalBulletSpacing;
+}
+ul.ui.horizontal.bulleted.list li:first-child,
+.ui.horizontal.bulleted.list > .item:first-child {
+ margin-left: 0em;
+}
+ul.ui.horizontal.bulleted.list li::before,
+.ui.horizontal.bulleted.list > .item::before {
+ color: @horizontalBulletColor;
+}
+ul.ui.horizontal.bulleted.list li:first-child::before,
+.ui.horizontal.bulleted.list > .item:first-child::before {
+ display: none;
+}
+
+/*-------------------
+ Ordered
+--------------------*/
+
+ol.ui.list,
+.ui.ordered.list,
+.ui.ordered.list .list,
+ol.ui.list ol {
+ counter-reset: ordered;
+ margin-left: @orderedCountDistance;
+ list-style-type: none;
+}
+ol.ui.list li,
+.ui.ordered.list .list > .item,
+.ui.ordered.list > .item {
+ list-style-type: none;
+ position: relative;
+}
+ol.ui.list li:before,
+.ui.ordered.list .list > .item:before,
+.ui.ordered.list > .item:before {
+ position: absolute;
+ top: auto;
+ left: auto;
+ user-select: none;
+ pointer-events: none;
+ margin-left: -(@orderedCountDistance);
+ counter-increment: @orderedCountName;
+ content: @orderedCountContent;
+ text-align: @orderedCountTextAlign;
+ color: @orderedCountColor;
+ vertical-align: @orderedCountVerticalAlign;
+ opacity: @orderedCountOpacity;
+}
+
+ol.ui.inverted.list li:before,
+.ui.ordered.inverted.list .list > .item:before,
+.ui.ordered.inverted.list > .item:before {
+ color: @orderedInvertedCountColor;
+}
+
+/* Value */
+.ui.ordered.list > .list > .item[data-value],
+.ui.ordered.list > .item[data-value] {
+ content: attr(data-value);
+}
+ol.ui.list li[value]:before {
+ content: attr(value);
+}
+
+/* Child Lists */
+ol.ui.list ol,
+.ui.ordered.list .list {
+ margin-left: @orderedChildCountDistance;
+}
+ol.ui.list ol li:before,
+.ui.ordered.list .list > .item:before {
+ margin-left: @orderedChildCountOffset;
+}
+
+/* Horizontal Ordered */
+ol.ui.horizontal.list,
+.ui.ordered.horizontal.list {
+ margin-left: 0em;
+}
+ol.ui.horizontal.list li:before,
+.ui.ordered.horizontal.list .list > .item:before,
+.ui.ordered.horizontal.list > .item:before {
+ position: static;
+ margin: 0em @horizontalOrderedCountDistance 0em 0em;
+}
+
+/*-------------------
+ Divided
+--------------------*/
+
+.ui.divided.list > .item {
+ border-top: @dividedBorder;
+}
+.ui.divided.list .list > .item {
+ border-top: @dividedChildListBorder;
+}
+.ui.divided.list .item .list > .item {
+ border-top: @dividedChildItemBorder;
+}
+.ui.divided.list .list > .item:first-child,
+.ui.divided.list > .item:first-child {
+ border-top: none;
+}
+
+/* Sub Menu */
+.ui.divided.list:not(.horizontal) .list > .item:first-child {
+ border-top-width: @dividedBorderWidth;
+}
+
+/* Divided bulleted */
+.ui.divided.bulleted.list:not(.horizontal),
+.ui.divided.bulleted.list .list {
+ margin-left: 0em;
+ padding-left: 0em;
+}
+.ui.divided.bulleted.list > .item:not(.horizontal) {
+ padding-left: @bulletDistance;
+}
+
+/* Divided Ordered */
+.ui.divided.ordered.list {
+ margin-left: 0em;
+}
+.ui.divided.ordered.list .list > .item,
+.ui.divided.ordered.list > .item {
+ padding-left: @orderedCountDistance;
+}
+.ui.divided.ordered.list .item .list {
+ margin-left: 0em;
+ margin-right: 0em;
+ padding-bottom: @itemVerticalPadding;
+}
+.ui.divided.ordered.list .item .list > .item {
+ padding-left: @orderedChildCountDistance;
+}
+
+/* Divided Selection */
+.ui.divided.selection.list .list > .item,
+.ui.divided.selection.list > .item {
+ margin: 0em;
+ border-radius: 0em;
+}
+
+/* Divided horizontal */
+.ui.divided.horizontal.list {
+ margin-left: 0em;
+}
+.ui.divided.horizontal.list > .item:not(:first-child) {
+ padding-left: @horizontalDividedSpacing;
+}
+.ui.divided.horizontal.list > .item:not(:last-child) {
+ padding-right: @horizontalDividedSpacing;
+}
+.ui.divided.horizontal.list > .item {
+ border-top: none;
+ border-left: @dividedBorder;
+ margin: 0em;
+ line-height: @horizontalDividedLineHeight;
+}
+.ui.horizontal.divided.list > .item:first-child {
+ border-left: none;
+}
+/* Inverted */
+.ui.divided.inverted.list > .item,
+.ui.divided.inverted.list > .list,
+.ui.divided.inverted.horizontal.list > .item {
+ border-color: @dividedInvertedBorderColor;
+}
+
+
+/*-------------------
+ Celled
+--------------------*/
+
+.ui.celled.list > .item,
+.ui.celled.list > .list {
+ border-top: @celledBorder;
+ padding-left: @celledHorizontalPadding;
+ padding-right: @celledHorizontalPadding;
+}
+.ui.celled.list > .item:last-child {
+ border-bottom: @celledBorder;
+}
+
+/* Padding on all elements */
+.ui.celled.list > .item:first-child,
+.ui.celled.list > .item:last-child {
+ padding-top: @itemVerticalPadding;
+ padding-bottom: @itemVerticalPadding;
+}
+
+/* Sub Menu */
+.ui.celled.list .item .list > .item {
+ border-width: 0px;
+}
+.ui.celled.list .list > .item:first-child {
+ border-top-width: 0px;
+}
+
+/* Celled Bulleted */
+.ui.celled.bulleted.list {
+ margin-left: 0em;
+}
+.ui.celled.bulleted.list .list > .item,
+.ui.celled.bulleted.list > .item {
+ padding-left: (@bulletDistance);
+}
+.ui.celled.bulleted.list .item .list {
+ margin-left: -(@bulletDistance);
+ margin-right: -(@bulletDistance);
+ padding-bottom: @itemVerticalPadding;
+}
+
+/* Celled Ordered */
+.ui.celled.ordered.list {
+ margin-left: 0em;
+}
+.ui.celled.ordered.list .list > .item,
+.ui.celled.ordered.list > .item {
+ padding-left: @orderedCountDistance;
+}
+.ui.celled.ordered.list .item .list {
+ margin-left: 0em;
+ margin-right: 0em;
+ padding-bottom: @itemVerticalPadding;
+}
+.ui.celled.ordered.list .list > .item {
+ padding-left: @orderedChildCountDistance;
+}
+
+/* Celled Horizontal */
+.ui.horizontal.celled.list {
+ margin-left: 0em;
+}
+.ui.horizontal.celled.list .list > .item,
+.ui.horizontal.celled.list > .item {
+ border-top: none;
+ border-left: @celledBorder;
+ margin: 0em;
+ padding-left: @horizontalCelledSpacing;
+ padding-right: @horizontalCelledSpacing;
+
+ line-height: @horizontalCelledLineHeight;
+}
+.ui.horizontal.celled.list .list > .item:last-child,
+.ui.horizontal.celled.list > .item:last-child {
+ border-bottom: none;
+ border-right: @celledBorder;
+}
+
+/* Inverted */
+.ui.celled.inverted.list > .item,
+.ui.celled.inverted.list > .list {
+ border-color: @celledInvertedBorder;
+}
+.ui.celled.inverted.horizontal.list .list > .item,
+.ui.celled.inverted.horizontal.list > .item {
+ border-color: @celledInvertedBorder;
+}
+
+/*-------------------
+ Relaxed
+--------------------*/
+
+.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {
+ padding-top: @relaxedItemVerticalPadding;
+}
+.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {
+ padding-bottom: @relaxedItemVerticalPadding;
+}
+.ui.horizontal.relaxed.list .list > .item:not(:first-child),
+.ui.horizontal.relaxed.list > .item:not(:first-child) {
+ padding-left: @relaxedHorizontalPadding;
+}
+.ui.horizontal.relaxed.list .list > .item:not(:last-child),
+.ui.horizontal.relaxed.list > .item:not(:last-child) {
+ padding-right: @relaxedHorizontalPadding;
+}
+
+/* Very Relaxed */
+.ui[class*="very relaxed"].list:not(.horizontal) > .item:not(:first-child) {
+ padding-top: @veryRelaxedItemVerticalPadding;
+}
+.ui[class*="very relaxed"].list:not(.horizontal) > .item:not(:last-child) {
+ padding-bottom: @veryRelaxedItemVerticalPadding;
+}
+.ui.horizontal[class*="very relaxed"].list .list > .item:not(:first-child),
+.ui.horizontal[class*="very relaxed"].list > .item:not(:first-child) {
+ padding-left: @veryRelaxedHorizontalPadding;
+}
+.ui.horizontal[class*="very relaxed"].list .list > .item:not(:last-child),
+.ui.horizontal[class*="very relaxed"].list > .item:not(:last-child) {
+ padding-right: @veryRelaxedHorizontalPadding;
+}
+
+/*-------------------
+ Sizes
+--------------------*/
+
+.ui.mini.list {
+ font-size: @relativeMini;
+}
+.ui.tiny.list {
+ font-size: @relativeTiny;
+}
+.ui.small.list {
+ font-size: @relativeSmall;
+}
+.ui.list {
+ font-size: @relativeMedium;
+}
+.ui.large.list {
+ font-size: @relativeLarge;
+}
+.ui.big.list {
+ font-size: @relativeBig;
+}
+.ui.huge.list {
+ font-size: @relativeHuge;
+}
+.ui.massive.list {
+ font-size: @relativeMassive;
+}
+
+.ui.mini.horizontal.list .list > .item,
+.ui.mini.horizontal.list > .item {
+ font-size: @mini;
+}
+.ui.tiny.horizontal.list .list > .item,
+.ui.tiny.horizontal.list > .item {
+ font-size: @tiny;
+}
+.ui.small.horizontal.list .list > .item,
+.ui.small.horizontal.list > .item {
+ font-size: @small;
+}
+.ui.horizontal.list .list > .item,
+.ui.horizontal.list > .item {
+ font-size: @medium;
+}
+.ui.large.horizontal.list .list > .item,
+.ui.large.horizontal.list > .item {
+ font-size: @large;
+}
+.ui.big.horizontal.list .list > .item,
+.ui.big.horizontal.list > .item {
+ font-size: @big;
+}
+.ui.huge.horizontal.list .list > .item,
+.ui.huge.horizontal.list > .item {
+ font-size: @huge;
+}
+.ui.massive.horizontal.list .list > .item,
+.ui.massive.horizontal.list > .item {
+ font-size: @massive;
+}
+
+.loadUIOverrides();
+
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/loader.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/loader.less b/semantic/src/definitions/elements/loader.less
new file mode 100755
index 0000000..40d5de6
--- /dev/null
+++ b/semantic/src/definitions/elements/loader.less
@@ -0,0 +1,332 @@
+/*!
+ * # Semantic UI - Loader
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'loader';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Loader
+*******************************/
+
+
+/* Standard Size */
+.ui.loader {
+ display: none;
+ position: absolute;
+ top: @loaderTopOffset;
+ left: @loaderLeftOffset;
+ margin: 0px;
+ text-align: center;
+ z-index: 1000;
+ transform: translateX(-50%) translateY(-50%);
+}
+
+/* Static Shape */
+.ui.loader:before {
+ position: absolute;
+ content: '';
+ top: 0%;
+ left: 50%;
+ width: 100%;
+ height: 100%;
+
+ border-radius: @circularRadius;
+ border: @loaderLineWidth solid @loaderFillColor;
+}
+
+/* Active Shape */
+.ui.loader:after {
+ position: absolute;
+ content: '';
+ top: 0%;
+ left: 50%;
+ width: 100%;
+ height: 100%;
+
+ animation: loader @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @shapeBorderColor;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+
+ box-shadow: 0px 0px 0px 1px transparent;
+}
+
+/* Active Animation */
+@keyframes loader {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+/* Sizes */
+.ui.mini.loader:before,
+.ui.mini.loader:after {
+ width: @mini;
+ height: @mini;
+ margin: @miniOffset;
+}
+.ui.tiny.loader:before,
+.ui.tiny.loader:after {
+ width: @tiny;
+ height: @tiny;
+ margin: @tinyOffset;
+}
+.ui.small.loader:before,
+.ui.small.loader:after {
+ width: @small;
+ height: @small;
+ margin: @smallOffset;
+}
+.ui.loader:before,
+.ui.loader:after {
+ width: @medium;
+ height: @medium;
+ margin: @mediumOffset;
+}
+.ui.large.loader:before,
+.ui.large.loader:after {
+ width: @large;
+ height: @large;
+ margin: @largeOffset;
+}
+.ui.big.loader:before,
+.ui.big.loader:after {
+ width: @big;
+ height: @big;
+ margin: @bigOffset;
+}
+.ui.huge.loader:before,
+.ui.huge.loader:after {
+ width: @huge;
+ height: @huge;
+ margin: @hugeOffset;
+}
+.ui.massive.loader:before,
+.ui.massive.loader:after {
+ width: @massive;
+ height: @massive;
+ margin: @massiveOffset;
+}
+
+/*-------------------
+ Coupling
+--------------------*/
+
+/* Show inside active dimmer */
+.ui.dimmer .loader {
+ display: block;
+}
+
+/* Black Dimmer */
+.ui.dimmer .ui.loader {
+ color: @invertedLoaderTextColor;
+}
+.ui.dimmer .ui.loader:before {
+ border-color: @invertedLoaderFillColor;
+}
+.ui.dimmer .ui.loader:after {
+ border-color: @invertedShapeBorderColor;
+}
+
+/* White Dimmer (Inverted) */
+.ui.inverted.dimmer .ui.loader {
+ color: @loaderTextColor;
+}
+.ui.inverted.dimmer .ui.loader:before {
+ border-color: @loaderFillColor;
+}
+.ui.inverted.dimmer .ui.loader:after {
+ border-color: @shapeBorderColor;
+}
+
+/*******************************
+ Types
+*******************************/
+
+
+/*-------------------
+ Text
+--------------------*/
+
+.ui.text.loader {
+ width: auto !important;
+ height: auto !important;
+ text-align: center;
+ font-style: normal;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+.ui.indeterminate.loader:after {
+ animation-direction: @indeterminateDirection;
+ animation-duration: @indeterminateSpeed;
+}
+
+.ui.loader.active,
+.ui.loader.visible {
+ display: block;
+}
+.ui.loader.disabled,
+.ui.loader.hidden {
+ display: none;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*-------------------
+ Sizes
+--------------------*/
+
+
+/* Loader */
+.ui.inverted.dimmer .ui.mini.loader,
+.ui.mini.loader {
+ width: @mini;
+ height: @mini;
+ font-size: @miniFontSize;
+}
+.ui.inverted.dimmer .ui.tiny.loader,
+.ui.tiny.loader {
+ width: @tiny;
+ height: @tiny;
+ font-size: @tinyFontSize;
+}
+.ui.inverted.dimmer .ui.small.loader,
+.ui.small.loader {
+ width: @small;
+ height: @small;
+ font-size: @smallFontSize;
+}
+.ui.inverted.dimmer .ui.loader,
+.ui.loader {
+ width: @medium;
+ height: @medium;
+ font-size: @mediumFontSize;
+}
+.ui.inverted.dimmer .ui.large.loader,
+.ui.large.loader {
+ width: @large;
+ height: @large;
+ font-size: @largeFontSize;
+}
+.ui.inverted.dimmer .ui.big.loader,
+.ui.big.loader {
+ width: @big;
+ height: @big;
+ font-size: @bigFontSize;
+}
+.ui.inverted.dimmer .ui.huge.loader,
+.ui.huge.loader {
+ width: @huge;
+ height: @huge;
+ font-size: @hugeFontSize;
+}
+.ui.inverted.dimmer .ui.massive.loader,
+.ui.massive.loader {
+ width: @massive;
+ height: @massive;
+ font-size: @massiveFontSize;
+}
+
+/* Text Loader */
+.ui.mini.text.loader {
+ min-width: @mini;
+ padding-top: (@mini + @textDistance);
+}
+.ui.tiny.text.loader {
+ min-width: @tiny;
+ padding-top: (@tiny + @textDistance);
+}
+.ui.small.text.loader {
+ min-width: @small;
+ padding-top: (@small + @textDistance);
+}
+.ui.text.loader {
+ min-width: @medium;
+ padding-top: (@medium + @textDistance);
+}
+.ui.large.text.loader {
+ min-width: @large;
+ padding-top: (@large + @textDistance);
+}
+.ui.big.text.loader {
+ min-width: @big;
+ padding-top: (@big + @textDistance);
+}
+.ui.huge.text.loader {
+ min-width: @huge;
+ padding-top: (@huge + @textDistance);
+}
+.ui.massive.text.loader {
+ min-width: @massive;
+ padding-top: (@massive + @textDistance);
+}
+
+
+/*-------------------
+ Inverted
+--------------------*/
+
+.ui.inverted.loader {
+ color: @invertedLoaderTextColor
+}
+.ui.inverted.loader:before {
+ border-color: @invertedLoaderFillColor;
+}
+.ui.inverted.loader:after {
+ border-top-color: @invertedLoaderLineColor;
+}
+
+/*-------------------
+ Inline
+--------------------*/
+
+.ui.inline.loader {
+ position: relative;
+ vertical-align: @inlineVerticalAlign;
+ margin: @inlineMargin;
+ left: 0em;
+ top: 0em;
+ transform: none;
+}
+
+.ui.inline.loader.active,
+.ui.inline.loader.visible {
+ display: inline-block;
+}
+
+/* Centered Inline */
+.ui.centered.inline.loader.active,
+.ui.centered.inline.loader.visible {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/rail.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/rail.less b/semantic/src/definitions/elements/rail.less
new file mode 100755
index 0000000..7eacee7
--- /dev/null
+++ b/semantic/src/definitions/elements/rail.less
@@ -0,0 +1,154 @@
+/*!
+ * # Semantic UI - Rail
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'rail';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Rails
+*******************************/
+
+.ui.rail {
+ position: absolute;
+ top: 0%;
+ width: @width;
+ height: @height;
+}
+
+.ui.left.rail {
+ left: auto;
+ right: 100%;
+ padding: 0em @splitDistance 0em 0em;
+ margin: 0em @splitDistance 0em 0em;
+}
+
+.ui.right.rail {
+ left: 100%;
+ right: auto;
+ padding: 0em 0em 0em @splitDistance;
+ margin: 0em 0em 0em @splitDistance;
+}
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Internal
+---------------*/
+
+.ui.left.internal.rail {
+ left: 0%;
+ right: auto;
+ padding: 0em 0em 0em @splitDistance;
+ margin: 0em 0em 0em @splitDistance;
+}
+
+.ui.right.internal.rail {
+ left: auto;
+ right: 0%;
+ padding: 0em @splitDistance 0em 0em;
+ margin: 0em @splitDistance 0em 0em;
+}
+
+
+/*--------------
+ Dividing
+---------------*/
+
+.ui.dividing.rail {
+ width: @dividingWidth;
+}
+.ui.left.dividing.rail {
+ padding: 0em @splitDividingDistance 0em 0em;
+ margin: 0em @splitDividingDistance 0em 0em;
+ border-right: @dividingBorder;
+}
+.ui.right.dividing.rail {
+ border-left: @dividingBorder;
+ padding: 0em 0em 0em @splitDividingDistance;
+ margin: 0em 0em 0em @splitDividingDistance;
+}
+
+/*--------------
+ Distance
+---------------*/
+
+.ui.close.rail {
+ width: @closeWidth;
+}
+.ui.close.left.rail {
+ padding: 0em @splitCloseDistance 0em 0em;
+ margin: 0em @splitCloseDistance 0em 0em;
+}
+.ui.close.right.rail {
+ padding: 0em 0em 0em @splitCloseDistance;
+ margin: 0em 0em 0em @splitCloseDistance;
+}
+
+.ui.very.close.rail {
+ width: @veryCloseWidth;
+}
+.ui.very.close.left.rail {
+ padding: 0em @splitVeryCloseDistance 0em 0em;
+ margin: 0em @splitVeryCloseDistance 0em 0em;
+}
+.ui.very.close.right.rail {
+ padding: 0em 0em 0em @splitVeryCloseDistance;
+ margin: 0em 0em 0em @splitVeryCloseDistance;
+}
+
+/*--------------
+ Attached
+---------------*/
+
+.ui.attached.left.rail,
+.ui.attached.right.rail {
+ padding: 0em;
+ margin: 0em;
+}
+
+/*--------------
+ Sizing
+---------------*/
+
+.ui.mini.rail {
+ font-size: @mini;
+}
+.ui.tiny.rail {
+ font-size: @tiny;
+}
+.ui.small.rail {
+ font-size: @small;
+}
+.ui.rail {
+ font-size: @medium;
+}
+.ui.large.rail {
+ font-size: @large;
+}
+.ui.big.rail {
+ font-size: @big;
+}
+.ui.huge.rail {
+ font-size: @huge;
+}
+.ui.massive.rail {
+ font-size: @massive;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/reveal.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/reveal.less b/semantic/src/definitions/elements/reveal.less
new file mode 100755
index 0000000..353ba63
--- /dev/null
+++ b/semantic/src/definitions/elements/reveal.less
@@ -0,0 +1,265 @@
+/*!
+ * # Semantic UI - Reveal
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'reveal';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Reveal
+*******************************/
+
+.ui.reveal {
+ display: inherit;
+ position: relative !important;
+ font-size: 0em !important;
+}
+
+.ui.reveal > .visible.content {
+ position: absolute !important;
+ top: 0em !important;
+ left: 0em !important;
+ z-index: @topZIndex !important;
+ transition: @transition;
+}
+.ui.reveal > .hidden.content {
+ position: relative !important;
+ z-index: @bottomZIndex !important;
+}
+
+/* Make sure hovered element is on top of other reveal */
+.ui.active.reveal .visible.content,
+.ui.reveal:hover .visible.content {
+ z-index: @activeZIndex !important;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+
+/*--------------
+ Slide
+---------------*/
+
+.ui.slide.reveal {
+ position: relative !important;
+ overflow: hidden !important;
+ white-space: nowrap;
+}
+
+.ui.slide.reveal > .content {
+ display: block;
+ width: 100%;
+ float: left;
+
+ margin: 0em;
+ transition: @slideTransition;
+}
+
+.ui.slide.reveal > .visible.content {
+ position: relative !important;
+}
+.ui.slide.reveal > .hidden.content {
+ position: absolute !important;
+ left: 0% !important;
+ width: 100% !important;
+ transform: translateX(100%) !important;
+}
+.ui.slide.active.reveal > .visible.content,
+.ui.slide.reveal:hover > .visible.content {
+ transform: translateX(-100%) !important;
+}
+.ui.slide.active.reveal > .hidden.content,
+.ui.slide.reveal:hover > .hidden.content {
+ transform: translateX(0%) !important;
+}
+
+.ui.slide.right.reveal > .visible.content {
+ transform: translateX(0%) !important;
+}
+.ui.slide.right.reveal > .hidden.content {
+ transform: translateX(-100%) !important;
+}
+.ui.slide.right.active.reveal > .visible.content,
+.ui.slide.right.reveal:hover > .visible.content {
+ transform: translateX(100%) !important;
+}
+.ui.slide.right.active.reveal > .hidden.content,
+.ui.slide.right.reveal:hover > .hidden.content {
+ transform: translateX(0%) !important;
+}
+
+.ui.slide.up.reveal > .hidden.content {
+ transform: translateY(100%) !important;
+}
+.ui.slide.up.active.reveal > .visible.content,
+.ui.slide.up.reveal:hover > .visible.content {
+ transform: translateY(-100%) !important;
+}
+.ui.slide.up.active.reveal > .hidden.content,
+.ui.slide.up.reveal:hover > .hidden.content {
+ transform: translateY(0%) !important;
+}
+
+.ui.slide.down.reveal > .hidden.content {
+ transform: translateY(-100%) !important;
+}
+.ui.slide.down.active.reveal > .visible.content,
+.ui.slide.down.reveal:hover > .visible.content {
+ transform: translateY(100%) !important;
+}
+.ui.slide.down.active.reveal > .hidden.content,
+.ui.slide.down.reveal:hover > .hidden.content {
+ transform: translateY(0%) !important;
+}
+
+
+/*--------------
+ Fade
+---------------*/
+
+.ui.fade.reveal > .visible.content {
+ opacity: 1;
+}
+.ui.fade.active.reveal > .visible.content,
+.ui.fade.reveal:hover > .visible.content {
+ opacity: 0;
+}
+
+
+/*--------------
+ Move
+---------------*/
+
+.ui.move.reveal {
+ position: relative !important;
+ overflow: hidden !important;
+ white-space: nowrap;
+}
+
+.ui.move.reveal > .content {
+ display: block;
+ float: left;
+
+ margin: 0em;
+ transition: @moveTransition;
+}
+
+.ui.move.reveal > .visible.content {
+ position: relative !important;
+}
+.ui.move.reveal > .hidden.content {
+ position: absolute !important;
+ left: 0% !important;
+ width: 100% !important;
+}
+.ui.move.active.reveal > .visible.content,
+.ui.move.reveal:hover > .visible.content {
+ transform: translateX(-100%) !important;
+}
+.ui.move.right.active.reveal > .visible.content,
+.ui.move.right.reveal:hover > .visible.content {
+ transform: translateX(100%) !important;
+}
+.ui.move.up.active.reveal > .visible.content,
+.ui.move.up.reveal:hover > .visible.content {
+ transform: translateY(-100%) !important;
+}
+.ui.move.down.active.reveal > .visible.content,
+.ui.move.down.reveal:hover > .visible.content {
+ transform: translateY(100%) !important;
+}
+
+
+
+/*--------------
+ Rotate
+---------------*/
+
+.ui.rotate.reveal > .visible.content {
+ transition-duration: @transitionDuration;
+ transform: rotate(0deg);
+}
+
+.ui.rotate.reveal > .visible.content,
+.ui.rotate.right.reveal > .visible.content {
+ transform-origin: bottom right;
+}
+.ui.rotate.active.reveal > .visible.content,
+.ui.rotate.reveal:hover > .visible.content,
+.ui.rotate.right.active.reveal > .visible.content,
+.ui.rotate.right.reveal:hover > .visible.content {
+ transform: rotate(@rotateDegrees);
+}
+
+.ui.rotate.left.reveal > .visible.content {
+ transform-origin: bottom left;
+}
+.ui.rotate.left.active.reveal > .visible.content,
+.ui.rotate.left.reveal:hover > .visible.content {
+ transform: rotate(-@rotateDegrees);
+}
+
+/*******************************
+ States
+*******************************/
+
+.ui.disabled.reveal:hover > .visible.visible.content {
+ position: static !important;
+ display: block !important;
+ opacity: 1 !important;
+ top: 0 !important;
+ left: 0 !important;
+ right: auto !important;
+ bottom: auto !important;
+ transform: none !important;
+}
+.ui.disabled.reveal:hover > .hidden.hidden.content {
+ display: none !important;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+/*--------------
+ Visible
+---------------*/
+
+.ui.visible.reveal {
+ overflow: visible;
+}
+
+/*--------------
+ Instant
+---------------*/
+
+.ui.instant.reveal > .content {
+ transition-delay: 0s !important;
+}
+
+
+/*--------------
+ Sizing
+---------------*/
+
+.ui.reveal > .content {
+ font-size: @medium !important;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/segment.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/segment.less b/semantic/src/definitions/elements/segment.less
new file mode 100755
index 0000000..66743fe
--- /dev/null
+++ b/semantic/src/definitions/elements/segment.less
@@ -0,0 +1,768 @@
+/*!
+ * # Semantic UI - Segment
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'element';
+@element : 'segment';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Segment
+*******************************/
+
+.ui.segment {
+ position: relative;
+ background: @background;
+ box-shadow: @boxShadow;
+ margin: @margin;
+ padding: @padding;
+ border-radius: @borderRadius;
+ border: @border;
+}
+
+.ui.segment:first-child {
+ margin-top: 0em;
+}
+.ui.segment:last-child {
+ margin-bottom: 0em;
+}
+
+
+/* Vertical */
+.ui.vertical.segment {
+ margin: 0em;
+ padding-left: 0em;
+ padding-right: 0em;
+
+ background: none transparent;
+ border-radius: 0px;
+ box-shadow: none;
+ border: none;
+ border-bottom: @borderWidth solid @borderColor;
+}
+.ui.vertical.segment:last-child {
+ border-bottom: none;
+}
+
+
+/*-------------------
+ Loose Coupling
+--------------------*/
+
+/* Header */
+.ui.inverted.segment > .ui.header {
+ color: @white;
+}
+
+/* Label */
+.ui[class*="bottom attached"].segment > [class*="top attached"].label {
+ border-top-left-radius: 0em;
+ border-top-right-radius: 0em;
+}
+.ui[class*="top attached"].segment > [class*="bottom attached"].label {
+ border-bottom-left-radius: 0em;
+ border-bottom-right-radius: 0em;
+}
+.ui.attached.segment:not(.top):not(.bottom) > [class*="top attached"].label {
+ border-top-left-radius: 0em;
+ border-top-right-radius: 0em;
+}
+.ui.attached.segment:not(.top):not(.bottom) > [class*="bottom attached"].label {
+ border-bottom-left-radius: 0em;
+ border-bottom-right-radius: 0em;
+}
+
+/* Grid */
+.ui.page.grid.segment,
+.ui.grid > .row > .ui.segment.column,
+.ui.grid > .ui.segment.column {
+ padding-top: @pageGridMargin;
+ padding-bottom: @pageGridMargin;
+}
+.ui.grid.segment {
+ margin: @margin;
+ border-radius: @borderRadius;
+}
+
+/* Table */
+.ui.basic.table.segment {
+ background: @background;
+ border: @border;
+ box-shadow: @boxShadow;
+}
+.ui[class*="very basic"].table.segment {
+ padding: @padding;
+}
+
+
+/*******************************
+ Types
+*******************************/
+
+/*-------------------
+ Piled
+--------------------*/
+
+.ui.piled.segments,
+.ui.piled.segment {
+ margin: @piledMargin 0em;
+ box-shadow: @piledBoxShadow;
+ z-index: @piledZIndex;
+}
+.ui.piled.segment:first-child {
+ margin-top: 0em;
+}
+.ui.piled.segment:last-child {
+ margin-bottom: 0em;
+}
+.ui.piled.segments:after,
+.ui.piled.segments:before,
+.ui.piled.segment:after,
+.ui.piled.segment:before {
+ background-color: @white;
+ visibility: visible;
+ content: '';
+ display: block;
+ height: 100%;
+ left: 0px;
+ position: absolute;
+ width: 100%;
+ border: @piledBorder;
+ box-shadow: @piledBoxShadow;
+}
+.ui.piled.segments:before,
+.ui.piled.segment:before {
+ transform: rotate(-@piledDegrees);
+ top: 0;
+ z-index: -2;
+}
+.ui.piled.segments:after,
+.ui.piled.segment:after {
+ transform: rotate(@piledDegrees);
+ top: 0;
+ z-index: -1;
+}
+
+/* Piled Attached */
+.ui[class*="top attached"].piled.segment {
+ margin-top: @piledMargin;
+ margin-bottom: 0em;
+}
+.ui.piled.segment[class*="top attached"]:first-child {
+ margin-top: 0em;
+}
+.ui.piled.segment[class*="bottom attached"] {
+ margin-top: 0em;
+ margin-bottom: @piledMargin;
+}
+.ui.piled.segment[class*="bottom attached"]:last-child {
+ margin-bottom: 0em;
+}
+
+/*-------------------
+ Stacked
+--------------------*/
+
+.ui.stacked.segment {
+ padding-bottom: @stackedPadding;
+}
+.ui.stacked.segments:before,
+.ui.stacked.segments:after,
+.ui.stacked.segment:before,
+.ui.stacked.segment:after {
+ content: '';
+ position: absolute;
+ bottom: -(@stackedHeight / 2);
+ left: 0%;
+
+ border-top: 1px solid @borderColor;
+ background: @stackedPageBackground;
+
+ width: 100%;
+ height: @stackedHeight;
+ visibility: visible;
+}
+.ui.stacked.segments:before,
+.ui.stacked.segment:before {
+ display: none;
+}
+
+/* Add additional page */
+.ui.tall.stacked.segments:before,
+.ui.tall.stacked.segment:before {
+ display: block;
+ bottom: 0px;
+}
+
+/* Inverted */
+.ui.stacked.inverted.segments:before,
+.ui.stacked.inverted.segments:after,
+.ui.stacked.inverted.segment:before,
+.ui.stacked.inverted.segment:after {
+ background-color: @subtleTransparentBlack;
+ border-top: 1px solid @selectedBorderColor;
+}
+
+/*-------------------
+ Padded
+--------------------*/
+
+.ui.padded.segment {
+ padding: @paddedSegmentPadding;
+}
+
+.ui[class*="very padded"].segment {
+ padding: @veryPaddedSegmentPadding;
+}
+
+/*-------------------
+ Compact
+--------------------*/
+
+.ui.compact.segment {
+ display: table;
+}
+
+/* Compact Group */
+.ui.compact.segments {
+ display: inline-flex;
+}
+.ui.compact.segments .segment,
+.ui.segments .compact.segment {
+ display: block;
+ flex: 0 1 auto;
+}
+
+/*-------------------
+ Circular
+--------------------*/
+
+.ui.circular.segment {
+ display: table-cell;
+ padding: @circularPadding;
+ text-align: center;
+ vertical-align: middle;
+ border-radius: 500em;
+}
+
+/*-------------------
+ Raised
+--------------------*/
+
+.ui.raised.segments,
+.ui.raised.segment {
+ box-shadow: @raisedBoxShadow;
+}
+
+
+/*******************************
+ Groups
+*******************************/
+
+/* Group */
+.ui.segments {
+ flex-direction: column;
+ position: relative;
+ margin: @groupedMargin;
+ border: @groupedBorder;
+ box-shadow: @groupedBoxShadow;
+ border-radius: @groupedBorderRadius;
+}
+.ui.segments:first-child {
+ margin-top: 0em;
+}
+.ui.segments:last-child {
+ margin-bottom: 0em;
+}
+
+
+/* Nested Segment */
+.ui.segments > .segment {
+ top: 0px;
+ bottom: 0px;
+ border-radius: 0px;
+ margin: @groupedSegmentMargin;
+ width: @groupedSegmentWidth;
+ box-shadow: @groupedSegmentBoxShadow;
+ border: @groupedSegmentBorder;
+ border-top: @groupedSegmentDivider;
+}
+
+.ui.segments:not(.horizontal) > .segment:first-child {
+ top: @attachedTopOffset;
+ bottom: 0px;
+ border-top: none;
+ margin-top: 0em;
+ bottom: 0px;
+ margin-bottom: 0em;
+ top: @attachedTopOffset;
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+
+/* Bottom */
+.ui.segments:not(.horizontal) > .segment:last-child {
+ top: @attachedBottomOffset;
+ bottom: 0px;
+ margin-top: 0em;
+ margin-bottom: 0em;
+ box-shadow: @attachedBottomBoxShadow;
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+
+/* Only */
+.ui.segments:not(.horizontal) > .segment:only-child {
+ border-radius: @borderRadius;
+}
+
+
+/* Nested Group */
+.ui.segments > .ui.segments {
+ border-top: @groupedSegmentDivider;
+ margin: @nestedGroupMargin;
+}
+.ui.segments > .segments:first-child {
+ border-top: none;
+}
+.ui.segments > .segment + .segments:not(.horizontal) {
+ margin-top: 0em;
+}
+
+/* Horizontal Group */
+.ui.horizontal.segments {
+ display: flex;
+ flex-direction: row;
+ background-color: transparent;
+ border-radius: 0px;
+ padding: 0em;
+ background-color: @background;
+ box-shadow: @boxShadow;
+ margin: @margin;
+ border-radius: @borderRadius;
+ border: @border;
+}
+
+/* Nested Horizontal Group */
+.ui.segments > .horizontal.segments {
+ margin: 0em;
+ background-color: transparent;
+ border-radius: 0px;
+ border: none;
+ box-shadow: none;
+ border-top: @groupedSegmentDivider;
+}
+
+/* Horizontal Segment */
+.ui.horizontal.segments > .segment {
+ flex: 1 1 auto;
+ -ms-flex: 1 1 0px; /* Solves #2550 MS Flex */
+ margin: 0em;
+ min-width: 0px;
+ background-color: transparent;
+ border-radius: 0px;
+ border: none;
+ box-shadow: none;
+ border-left: @borderWidth solid @borderColor;
+}
+
+/* Border Fixes */
+.ui.segments > .horizontal.segments:first-child {
+ border-top: none;
+}
+.ui.horizontal.segments > .segment:first-child {
+ border-left: none;
+}
+
+
+/*******************************
+ States
+*******************************/
+
+/*--------------
+ Disabled
+---------------*/
+
+.ui.disabled.segment {
+ opacity: @disabledOpacity;
+ color: @disabledTextColor;
+}
+
+/*--------------
+ Loading
+---------------*/
+
+.ui.loading.segment {
+ position: relative;
+ cursor: default;
+ point-events: none;
+ text-shadow: none !important;
+ color: transparent !important;
+ transition: all 0s linear;
+}
+.ui.loading.segment:before {
+ position: absolute;
+ content: '';
+ top: 0%;
+ left: 0%;
+ background: @loaderDimmerColor;
+ width: 100%;
+ height: 100%;
+ border-radius: @borderRadius;
+ z-index: @loaderDimmerZIndex;
+}
+.ui.loading.segment:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+
+ margin: @loaderMargin;
+ width: @loaderSize;
+ height: @loaderSize;
+
+ animation: segment-spin @loaderSpeed linear;
+ animation-iteration-count: infinite;
+
+ border-radius: @circularRadius;
+
+ border-color: @loaderLineColor @loaderFillColor @loaderFillColor @loaderFillColor;
+ border-style: solid;
+ border-width: @loaderLineWidth;
+
+ box-shadow: 0px 0px 0px 1px transparent;
+ visibility: visible;
+ z-index: @loaderLineZIndex;
+}
+
+@keyframes segment-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*-------------------
+ Basic
+--------------------*/
+
+.ui.basic.segment {
+ background: @basicBackground;
+ box-shadow: @basicBoxShadow;
+ border: @basicBorder;
+ border-radius: @basicBorderRadius;
+}
+
+/*-------------------
+ Clearing
+--------------------*/
+
+.ui.clearing.segment:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+/*-------------------
+ Colors
+--------------------*/
+
+/* Red */
+.ui.red.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @red;
+}
+.ui.inverted.red.segment {
+ background-color: @red !important;
+ color: @white !important;
+}
+
+/* Orange */
+.ui.orange.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @orange;
+}
+.ui.inverted.orange.segment {
+ background-color: @orange !important;
+ color: @white !important;
+}
+
+/* Yellow */
+.ui.yellow.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @yellow;
+}
+.ui.inverted.yellow.segment {
+ background-color: @yellow !important;
+ color: @white !important;
+}
+
+/* Olive */
+.ui.olive.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @olive;
+}
+.ui.inverted.olive.segment {
+ background-color: @olive !important;
+ color: @white !important;
+}
+
+/* Green */
+.ui.green.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @green;
+}
+.ui.inverted.green.segment {
+ background-color: @green !important;
+ color: @white !important;
+}
+
+/* Teal */
+.ui.teal.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @teal;
+}
+.ui.inverted.teal.segment {
+ background-color: @teal !important;
+ color: @white !important;
+}
+
+/* Blue */
+.ui.blue.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @blue;
+}
+.ui.inverted.blue.segment {
+ background-color: @blue !important;
+ color: @white !important;
+}
+
+/* Violet */
+.ui.violet.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @violet;
+}
+.ui.inverted.violet.segment {
+ background-color: @violet !important;
+ color: @white !important;
+}
+
+/* Purple */
+.ui.purple.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @purple;
+}
+.ui.inverted.purple.segment {
+ background-color: @purple !important;
+ color: @white !important;
+}
+
+/* Pink */
+.ui.pink.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @pink;
+}
+.ui.inverted.pink.segment {
+ background-color: @pink !important;
+ color: @white !important;
+}
+
+/* Brown */
+.ui.brown.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @brown;
+}
+.ui.inverted.brown.segment {
+ background-color: @brown !important;
+ color: @white !important;
+}
+
+/* Grey */
+.ui.grey.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @grey;
+}
+.ui.inverted.grey.segment {
+ background-color: @grey !important;
+ color: @white !important;
+}
+
+/* Black */
+.ui.black.segment:not(.inverted) {
+ border-top: @coloredBorderSize solid @black;
+}
+.ui.inverted.black.segment {
+ background-color: @black !important;
+ color: @white !important;
+}
+
+/*-------------------
+ Aligned
+--------------------*/
+
+.ui[class*="left aligned"].segment {
+ text-align: left;
+}
+.ui[class*="right aligned"].segment {
+ text-align: right;
+}
+.ui[class*="center aligned"].segment {
+ text-align: center;
+}
+
+/*-------------------
+ Floated
+--------------------*/
+
+.ui.floated.segment,
+.ui[class*="left floated"].segment {
+ float: left;
+ margin-right: @floatedDistance;
+}
+.ui[class*="right floated"].segment {
+ float: right;
+ margin-left: @floatedDistance;
+}
+
+
+/*-------------------
+ Inverted
+--------------------*/
+
+.ui.inverted.segment {
+ border: none;
+ box-shadow: none;
+}
+.ui.inverted.segment,
+.ui.primary.inverted.segment {
+ background: @invertedBackground;
+ color: @invertedTextColor;
+}
+
+/* Nested */
+.ui.inverted.segment .segment {
+ color: @textColor;
+}
+.ui.inverted.segment .inverted.segment {
+ color: @invertedTextColor;
+}
+
+/* Attached */
+.ui.inverted.attached.segment {
+ border-color: @solidWhiteBorderColor;
+}
+
+/*-------------------
+ Emphasis
+--------------------*/
+
+/* Secondary */
+.ui.secondary.segment {
+ background: @secondaryBackground;
+ color: @secondaryColor;
+}
+.ui.secondary.inverted.segment {
+ background: @secondaryInvertedBackground;
+ color: @secondaryInvertedColor;
+}
+
+/* Tertiary */
+.ui.tertiary.segment {
+ background: @tertiaryBackground;
+ color: @tertiaryColor;
+}
+.ui.tertiary.inverted.segment {
+ background: @tertiaryInvertedBackground;
+ color: @tertiaryInvertedColor;
+}
+
+
+/*-------------------
+ Attached
+--------------------*/
+
+/* Middle */
+.ui.attached.segment {
+ top: 0px;
+ bottom: 0px;
+ border-radius: 0px;
+ margin: 0em @attachedHorizontalOffset;
+ width: @attachedWidth;
+ max-width: @attachedWidth;
+ box-shadow: @attachedBoxShadow;
+ border: @attachedBorder;
+}
+.ui.attached:not(.message) + .ui.attached.segment:not(.top) {
+ border-top: none;
+}
+
+/* Top */
+.ui[class*="top attached"].segment {
+ bottom: 0px;
+ margin-bottom: 0em;
+ top: @attachedTopOffset;
+ margin-top: @verticalMargin;
+ border-radius: @borderRadius @borderRadius 0em 0em;
+}
+.ui.segment[class*="top attached"]:first-child {
+ margin-top: 0em;
+}
+
+/* Bottom */
+.ui.segment[class*="bottom attached"] {
+ bottom: 0px;
+ margin-top: 0em;
+ top: @attachedBottomOffset;
+ margin-bottom: @verticalMargin;
+ box-shadow: @attachedBottomBoxShadow;
+ border-radius: 0em 0em @borderRadius @borderRadius;
+}
+.ui.segment[class*="bottom attached"]:last-child {
+ margin-bottom: 0em;
+}
+
+/*-------------------
+ Size
+--------------------*/
+
+.ui.mini.segments .segment,
+.ui.mini.segment {
+ font-size: @mini;
+}
+.ui.tiny.segments .segment,
+.ui.tiny.segment {
+ font-size: @tiny;
+}
+.ui.small.segments .segment,
+.ui.small.segment {
+ font-size: @small;
+}
+.ui.segments .segment,
+.ui.segment {
+ font-size: @medium;
+}
+.ui.large.segments .segment,
+.ui.large.segment {
+ font-size: @large;
+}
+.ui.big.segments .segment,
+.ui.big.segment {
+ font-size: @big;
+}
+.ui.huge.segments .segment,
+.ui.huge.segment {
+ font-size: @huge;
+}
+.ui.massive.segments .segment,
+.ui.massive.segment {
+ font-size: @massive;
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/elements/step.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/elements/step.less b/semantic/src/definitions/elements/step.less
new file mode 100755
index 0000000..d4c1937
--- /dev/null
+++ b/semantic/src/definitions/elements/step.less
@@ -0,0 +1,562 @@
+/*!
+ * # Semantic UI - Step
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Step
+*******************************/
+
+/*--------------
+ Load Theme
+---------------*/
+
+@type : 'element';
+@element : 'step';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Plural
+*******************************/
+
+.ui.steps {
+ display: inline-flex;
+ flex-direction: row;
+ align-items: stretch;
+ margin: @stepMargin;
+ background: @stepsBackground;
+ box-shadow: @stepsBoxShadow;
+ line-height: @lineHeight;
+ border-radius: @stepsBorderRadius;
+ border: @stepsBorder;
+}
+
+/* First Steps */
+.ui.steps:first-child {
+ margin-top: 0em;
+}
+
+/* Last Steps */
+.ui.steps:last-child {
+ margin-bottom: 0em;
+}
+
+
+/*******************************
+ Singular
+*******************************/
+
+.ui.steps .step {
+ position: relative;
+ display: flex;
+ flex: 1 0 auto;
+ flex-wrap: wrap;
+ flex-direction: row;
+ vertical-align: middle;
+ align-items: center;
+ justify-content: @justifyContent;
+
+ margin: @verticalMargin @horizontalMargin;
+ padding: @verticalPadding @horizontalPadding;
+ background: @background;
+ color: @textColor;
+ box-shadow: @boxShadow;
+ border-radius: @borderRadius;
+ border: @border;
+ border-right: @divider;
+ transition: @transition;
+}
+
+/* Arrow */
+.ui.steps .step:after {
+ display: none;
+ position: absolute;
+ z-index: 2;
+ content: '';
+ top: @arrowTopOffset;
+ right: @arrowRightOffset;
+ border: medium none;
+ background-color: @arrowBackgroundColor;
+ width: @arrowSize;
+ height: @arrowSize;
+
+ border-style: solid;
+ border-color: @borderColor;
+ border-width: @arrowBorderWidth;
+
+ transition: @transition;
+ transform: translateY(-50%) translateX(50%) rotate(-45deg);
+}
+
+/* First Step */
+.ui.steps .step:first-child {
+ padding-left: @horizontalPadding;
+ border-radius: @stepsBorderRadius 0em 0em @stepsBorderRadius;
+}
+
+/* Last Step */
+.ui.steps .step:last-child {
+ border-radius: 0em @stepsBorderRadius @stepsBorderRadius 0em;
+}
+.ui.steps .step:last-child {
+ border-right: none;
+ margin-right: 0em;
+}
+
+/* Only Step */
+.ui.steps .step:only-child {
+ border-radius: @stepsBorderRadius;
+}
+
+
+/*******************************
+ Content
+*******************************/
+
+/* Title */
+.ui.steps .step .title {
+ font-family: @titleFontFamily;
+ font-size: @titleFontSize;
+ font-weight: @titleFontWeight;
+}
+.ui.steps .step > .title {
+ width: 100%;
+}
+
+/* Description */
+.ui.steps .step .description {
+ font-weight: @descriptionFontWeight;
+ font-size: @descriptionFontSize;
+ color: @descriptionColor;
+}
+.ui.steps .step > .description {
+ width: 100%;
+}
+.ui.steps .step .title ~ .description {
+ margin-top: @descriptionDistance;
+}
+
+/* Icon */
+.ui.steps .step > .icon {
+ line-height: 1;
+ font-size: @iconSize;
+ margin: 0em @iconDistance 0em 0em;
+}
+.ui.steps .step > .icon,
+.ui.steps .step > .icon ~ .content {
+ display: block;
+ flex: 0 1 auto;
+ align-self: @iconAlign;
+}
+.ui.steps .step > .icon ~ .content {
+ flex-grow: 1 0 auto;
+}
+
+/* Horizontal Icon */
+.ui.steps:not(.vertical) .step > .icon {
+ width: auto;
+}
+
+/* Link */
+.ui.steps .link.step,
+.ui.steps a.step {
+ cursor: pointer;
+}
+
+/*******************************
+ Types
+*******************************/
+
+/*--------------
+ Ordered
+---------------*/
+
+.ui.ordered.steps {
+ counter-reset: ordered;
+}
+.ui.ordered.steps .step:before {
+ display: block;
+ position: static;
+ text-align: center;
+ content: counters(ordered, ".");
+ align-self: @iconAlign;
+ margin-right: @iconDistance;
+ font-size: @iconSize;
+ counter-increment: ordered;
+ font-family: @orderedFontFamily;
+ font-weight: @orderedFontWeight;
+}
+
+.ui.ordered.steps .step > * {
+ display: block;
+ align-self: @iconAlign;
+}
+
+
+/*--------------
+ Vertical
+---------------*/
+
+.ui.vertical.steps {
+ display: inline-flex;
+ flex-direction: column;
+ overflow: visible;
+}
+.ui.vertical.steps .step {
+ justify-content: flex-start;
+ border-radius: @borderRadius;
+ padding: @verticalPadding @horizontalPadding;
+ border-right: none;
+ border-bottom: @verticalDivider;
+}
+.ui.vertical.steps .step:first-child {
+ padding: @verticalPadding @horizontalPadding;
+ border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;
+}
+.ui.vertical.steps .step:last-child {
+ border-bottom: none;
+ border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;
+}
+.ui.vertical.steps .step:only-child {
+ border-radius: @stepsBorderRadius;
+}
+
+
+/* Arrow */
+.ui.vertical.steps .step:after {
+ display: none;
+}
+.ui.vertical.steps .step:after {
+ top: @verticalArrowTopOffset;
+ right: @verticalArrowRightOffset;
+ border-width: @verticalArrowBorderWidth;
+}
+
+.ui.vertical.steps .step:after {
+ display: @verticalArrowDisplay;
+}
+.ui.vertical.steps .active.step:after {
+ display: @verticalActiveArrowDisplay;
+}
+.ui.vertical.steps .step:last-child:after {
+ display: @verticalLastArrowDisplay;
+}
+.ui.vertical.steps .active.step:last-child:after {
+ display: @verticalActiveLastArrowDisplay;
+}
+
+
+/*---------------
+ Responsive
+----------------*/
+
+/* Mobile (Default) */
+@media only screen and (max-width: (@largestMobileScreen)) {
+
+.ui.steps {
+ display: inline-flex;
+ overflow: visible;
+ flex-direction: column;
+}
+.ui.steps .step {
+ width: 100% !important;
+ flex-direction: column;
+ border-radius: @borderRadius;
+ padding: @verticalPadding @horizontalPadding;
+}
+.ui.steps .step:first-child {
+ padding: @verticalPadding @horizontalPadding;
+ border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;
+}
+.ui.steps .step:last-child {
+ border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;
+}
+
+/* Arrow */
+.ui.steps .step:after {
+ display: none !important;
+}
+
+/* Content */
+.ui.steps .step .content {
+ text-align: center;
+}
+
+/* Icon */
+.ui.steps .step > .icon,
+.ui.ordered.steps .step:before {
+ margin: 0em 0em @mobileIconDistance 0em;
+}
+
+}
+
+/*******************************
+ States
+*******************************/
+
+/* Link Hover */
+.ui.steps .link.step:hover::after,
+.ui.steps .link.step:hover,
+.ui.steps a.step:hover::after,
+.ui.steps a.step:hover {
+ background: @hoverBackground;
+ color: @hoverColor;
+}
+
+/* Link Down */
+.ui.steps .link.step:active::after,
+.ui.steps .link.step:active,
+.ui.steps a.step:active::after,
+.ui.steps a.step:active {
+ background: @downBackground;
+ color: @downColor;
+}
+
+/* Active */
+.ui.steps .step.active {
+ cursor: auto;
+ background: @activeBackground;
+}
+.ui.steps .step.active:after {
+ background: @activeBackground;
+}
+.ui.steps .step.active .title {
+ color: @activeColor;
+}
+.ui.ordered.steps .step.active:before,
+.ui.steps .active.step .icon {
+ color: @activeIconColor;
+}
+
+/* Active Arrow */
+.ui.steps .step:after {
+ display: @arrowDisplay;
+}
+.ui.steps .active.step:after {
+ display: @activeArrowDisplay;
+}
+.ui.steps .step:last-child:after {
+ display: @lastArrowDisplay;
+}
+.ui.steps .active.step:last-child:after {
+ display: @activeLastArrowDisplay;
+}
+
+/* Active Hover */
+.ui.steps .link.active.step:hover::after,
+.ui.steps .link.active.step:hover,
+.ui.steps a.active.step:hover::after,
+.ui.steps a.active.step:hover {
+ cursor: pointer;
+ background: @activeHoverBackground;
+ color: @activeHoverColor;
+}
+
+/* Completed */
+.ui.steps .step.completed > .icon:before,
+.ui.ordered.steps .step.completed:before {
+ color: @completedColor;
+}
+
+/* Disabled */
+.ui.steps .disabled.step {
+ cursor: auto;
+ background: @disabledBackground;
+ pointer-events: none;
+}
+.ui.steps .disabled.step,
+.ui.steps .disabled.step .title,
+.ui.steps .disabled.step .description {
+ color: @disabledColor;
+}
+.ui.steps .disabled.step:after {
+ background: @disabledBackground;
+}
+
+
+/*******************************
+ Variations
+*******************************/
+
+
+/*--------------
+ Stackable
+---------------*/
+
+/* Tablet Or Below */
+@media only screen and (max-width: @largestTabletScreen) {
+
+.ui[class*="tablet stackable"].steps {
+ display: inline-flex;
+ overflow: visible;
+ flex-direction: column;
+}
+
+/* Steps */
+.ui[class*="tablet stackable"].steps .step {
+ flex-direction: column;
+ border-radius: @borderRadius;
+ padding: @verticalPadding @horizontalPadding;
+}
+.ui[class*="tablet stackable"].steps .step:first-child {
+ padding: @verticalPadding @horizontalPadding;
+ border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;
+}
+.ui[class*="tablet stackable"].steps .step:last-child {
+ border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;
+}
+
+/* Arrow */
+.ui[class*="tablet stackable"].steps .step:after {
+ display: none !important;
+}
+
+/* Content */
+.ui[class*="tablet stackable"].steps .step .content {
+ text-align: center;
+}
+
+/* Icon */
+.ui[class*="tablet stackable"].steps .step > .icon,
+.ui[class*="tablet stackable"].ordered.steps .step:before {
+ margin: 0em 0em @mobileIconDistance 0em;
+}
+
+}
+
+/*--------------
+ Fluid
+---------------*/
+
+/* Fluid */
+.ui.fluid.steps {
+ display: flex;
+ width: 100%;
+}
+
+/*--------------
+ Attached
+---------------*/
+
+/* Top */
+.ui.attached.steps {
+ width: @attachedWidth !important;
+ margin: 0em @attachedHorizontalOffset @attachedVerticalOffset;
+ max-width: @attachedWidth;
+ border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;
+}
+.ui.attached.steps .step:first-child {
+ border-radius: @stepsBorderRadius 0em 0em 0em;
+}
+.ui.attached.steps .step:last-child {
+ border-radius: 0em @stepsBorderRadius 0em 0em;
+}
+
+/* Bottom */
+.ui.bottom.attached.steps {
+ margin: @attachedVerticalOffset @attachedHorizontalOffset 0em;
+ border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;
+}
+.ui.bottom.attached.steps .step:first-child {
+ border-radius: 0em 0em 0em @stepsBorderRadius;
+}
+.ui.bottom.attached.steps .step:last-child {
+ border-radius: 0em 0em @stepsBorderRadius 0em;
+}
+
+/*-------------------
+ Evenly Divided
+--------------------*/
+
+.ui.one.steps,
+.ui.two.steps,
+.ui.three.steps,
+.ui.four.steps,
+.ui.five.steps,
+.ui.six.steps,
+.ui.seven.steps,
+.ui.eight.steps {
+ width: 100%;
+}
+.ui.one.steps > .step,
+.ui.two.steps > .step,
+.ui.three.steps > .step,
+.ui.four.steps > .step,
+.ui.five.steps > .step,
+.ui.six.steps > .step,
+.ui.seven.steps > .step,
+.ui.eight.steps > .step {
+ flex-wrap: nowrap;
+}
+.ui.one.steps > .step {
+ width: 100%;
+}
+.ui.two.steps > .step {
+ width: 50%;
+}
+.ui.three.steps > .step {
+ width: 33.333%;
+}
+.ui.four.steps > .step {
+ width: 25%;
+}
+.ui.five.steps > .step {
+ width: 20%;
+}
+.ui.six.steps > .step {
+ width: 16.666%;
+}
+.ui.seven.steps > .step {
+ width: 14.285%;
+}
+.ui.eight.steps > .step {
+ width: 12.500%;
+}
+
+/*-------------------
+ Sizes
+--------------------*/
+
+
+.ui.mini.steps .step,
+.ui.mini.step {
+ font-size: @mini;
+}
+.ui.tiny.steps .step,
+.ui.tiny.step {
+ font-size: @tiny;
+}
+.ui.small.steps .step,
+.ui.small.step {
+ font-size: @small;
+}
+.ui.steps .step,
+.ui.step {
+ font-size: @medium;
+}
+.ui.large.steps .step,
+.ui.large.step {
+ font-size: @large;
+}
+.ui.big.steps .step,
+.ui.big.step {
+ font-size: @big;
+}
+.ui.huge.steps .step,
+.ui.huge.step {
+ font-size: @huge;
+}
+.ui.massive.steps .step,
+.ui.massive.step {
+ font-size: @massive;
+}
+
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/globals/reset.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/globals/reset.less b/semantic/src/definitions/globals/reset.less
new file mode 100755
index 0000000..7514d94
--- /dev/null
+++ b/semantic/src/definitions/globals/reset.less
@@ -0,0 +1,40 @@
+/*!
+ * # Semantic UI - Reset
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'global';
+@element : 'reset';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Reset
+*******************************/
+
+/* Border-Box */
+*,
+*:before,
+*:after {
+ box-sizing: inherit;
+}
+html {
+ box-sizing: border-box;
+}
+
+/* iPad Input Shadows */
+input[type="text"], input[type="email"], input[type="search"], input[type="password"] {
+ -webkit-appearance: none;
+ -moz-appearance: none; /* mobile firefox too! */
+}
+
+.loadUIOverrides();
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/globals/site.js
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/globals/site.js b/semantic/src/definitions/globals/site.js
new file mode 100644
index 0000000..63cbd9d
--- /dev/null
+++ b/semantic/src/definitions/globals/site.js
@@ -0,0 +1,487 @@
+/*!
+ * # Semantic UI - Site
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+;(function ($, window, document, undefined) {
+
+$.site = $.fn.site = function(parameters) {
+ var
+ time = new Date().getTime(),
+ performance = [],
+
+ query = arguments[0],
+ methodInvoked = (typeof query == 'string'),
+ queryArguments = [].slice.call(arguments, 1),
+
+ settings = ( $.isPlainObject(parameters) )
+ ? $.extend(true, {}, $.site.settings, parameters)
+ : $.extend({}, $.site.settings),
+
+ namespace = settings.namespace,
+ error = settings.error,
+
+ eventNamespace = '.' + namespace,
+ moduleNamespace = 'module-' + namespace,
+
+ $document = $(document),
+ $module = $document,
+ element = this,
+ instance = $module.data(moduleNamespace),
+
+ module,
+ returnedValue
+ ;
+ module = {
+
+ initialize: function() {
+ module.instantiate();
+ },
+
+ instantiate: function() {
+ module.verbose('Storing instance of site', module);
+ instance = module;
+ $module
+ .data(moduleNamespace, module)
+ ;
+ },
+
+ normalize: function() {
+ module.fix.console();
+ module.fix.requestAnimationFrame();
+ },
+
+ fix: {
+ console: function() {
+ module.debug('Normalizing window.console');
+ if (console === undefined || console.log === undefined) {
+ module.verbose('Console not available, normalizing events');
+ module.disable.console();
+ }
+ if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {
+ module.verbose('Console group not available, normalizing events');
+ window.console.group = function() {};
+ window.console.groupEnd = function() {};
+ window.console.groupCollapsed = function() {};
+ }
+ if (typeof console.markTimeline == 'undefined') {
+ module.verbose('Mark timeline not available, normalizing events');
+ window.console.markTimeline = function() {};
+ }
+ },
+ consoleClear: function() {
+ module.debug('Disabling programmatic console clearing');
+ window.console.clear = function() {};
+ },
+ requestAnimationFrame: function() {
+ module.debug('Normalizing requestAnimationFrame');
+ if(window.requestAnimationFrame === undefined) {
+ module.debug('RequestAnimationFrame not available, normalizing event');
+ window.requestAnimationFrame = window.requestAnimationFrame
+ || window.mozRequestAnimationFrame
+ || window.webkitRequestAnimationFrame
+ || window.msRequestAnimationFrame
+ || function(callback) { setTimeout(callback, 0); }
+ ;
+ }
+ }
+ },
+
+ moduleExists: function(name) {
+ return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);
+ },
+
+ enabled: {
+ modules: function(modules) {
+ var
+ enabledModules = []
+ ;
+ modules = modules || settings.modules;
+ $.each(modules, function(index, name) {
+ if(module.moduleExists(name)) {
+ enabledModules.push(name);
+ }
+ });
+ return enabledModules;
+ }
+ },
+
+ disabled: {
+ modules: function(modules) {
+ var
+ disabledModules = []
+ ;
+ modules = modules || settings.modules;
+ $.each(modules, function(index, name) {
+ if(!module.moduleExists(name)) {
+ disabledModules.push(name);
+ }
+ });
+ return disabledModules;
+ }
+ },
+
+ change: {
+ setting: function(setting, value, modules, modifyExisting) {
+ modules = (typeof modules === 'string')
+ ? (modules === 'all')
+ ? settings.modules
+ : [modules]
+ : modules || settings.modules
+ ;
+ modifyExisting = (modifyExisting !== undefined)
+ ? modifyExisting
+ : true
+ ;
+ $.each(modules, function(index, name) {
+ var
+ namespace = (module.moduleExists(name))
+ ? $.fn[name].settings.namespace || false
+ : true,
+ $existingModules
+ ;
+ if(module.moduleExists(name)) {
+ module.verbose('Changing default setting', setting, value, name);
+ $.fn[name].settings[setting] = value;
+ if(modifyExisting && namespace) {
+ $existingModules = $(':data(module-' + namespace + ')');
+ if($existingModules.length > 0) {
+ module.verbose('Modifying existing settings', $existingModules);
+ $existingModules[name]('setting', setting, value);
+ }
+ }
+ }
+ });
+ },
+ settings: function(newSettings, modules, modifyExisting) {
+ modules = (typeof modules === 'string')
+ ? [modules]
+ : modules || settings.modules
+ ;
+ modifyExisting = (modifyExisting !== undefined)
+ ? modifyExisting
+ : true
+ ;
+ $.each(modules, function(index, name) {
+ var
+ $existingModules
+ ;
+ if(module.moduleExists(name)) {
+ module.verbose('Changing default setting', newSettings, name);
+ $.extend(true, $.fn[name].settings, newSettings);
+ if(modifyExisting && namespace) {
+ $existingModules = $(':data(module-' + namespace + ')');
+ if($existingModules.length > 0) {
+ module.verbose('Modifying existing settings', $existingModules);
+ $existingModules[name]('setting', newSettings);
+ }
+ }
+ }
+ });
+ }
+ },
+
+ enable: {
+ console: function() {
+ module.console(true);
+ },
+ debug: function(modules, modifyExisting) {
+ modules = modules || settings.modules;
+ module.debug('Enabling debug for modules', modules);
+ module.change.setting('debug', true, modules, modifyExisting);
+ },
+ verbose: function(modules, modifyExisting) {
+ modules = modules || settings.modules;
+ module.debug('Enabling verbose debug for modules', modules);
+ module.change.setting('verbose', true, modules, modifyExisting);
+ }
+ },
+ disable: {
+ console: function() {
+ module.console(false);
+ },
+ debug: function(modules, modifyExisting) {
+ modules = modules || settings.modules;
+ module.debug('Disabling debug for modules', modules);
+ module.change.setting('debug', false, modules, modifyExisting);
+ },
+ verbose: function(modules, modifyExisting) {
+ modules = modules || settings.modules;
+ module.debug('Disabling verbose debug for modules', modules);
+ module.change.setting('verbose', false, modules, modifyExisting);
+ }
+ },
+
+ console: function(enable) {
+ if(enable) {
+ if(instance.cache.console === undefined) {
+ module.error(error.console);
+ return;
+ }
+ module.debug('Restoring console function');
+ window.console = instance.cache.console;
+ }
+ else {
+ module.debug('Disabling console function');
+ instance.cache.console = window.console;
+ window.console = {
+ clear : function(){},
+ error : function(){},
+ group : function(){},
+ groupCollapsed : function(){},
+ groupEnd : function(){},
+ info : function(){},
+ log : function(){},
+ markTimeline : function(){},
+ warn : function(){}
+ };
+ }
+ },
+
+ destroy: function() {
+ module.verbose('Destroying previous site for', $module);
+ $module
+ .removeData(moduleNamespace)
+ ;
+ },
+
+ cache: {},
+
+ setting: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, settings, name);
+ }
+ else if(value !== undefined) {
+ settings[name] = value;
+ }
+ else {
+ return settings[name];
+ }
+ },
+ internal: function(name, value) {
+ if( $.isPlainObject(name) ) {
+ $.extend(true, module, name);
+ }
+ else if(value !== undefined) {
+ module[name] = value;
+ }
+ else {
+ return module[name];
+ }
+ },
+ debug: function() {
+ if(settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.debug.apply(console, arguments);
+ }
+ }
+ },
+ verbose: function() {
+ if(settings.verbose && settings.debug) {
+ if(settings.performance) {
+ module.performance.log(arguments);
+ }
+ else {
+ module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
+ module.verbose.apply(console, arguments);
+ }
+ }
+ },
+ error: function() {
+ module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
+ module.error.apply(console, arguments);
+ },
+ performance: {
+ log: function(message) {
+ var
+ currentTime,
+ executionTime,
+ previousTime
+ ;
+ if(settings.performance) {
+ currentTime = new Date().getTime();
+ previousTime = time || currentTime;
+ executionTime = currentTime - previousTime;
+ time = currentTime;
+ performance.push({
+ 'Element' : element,
+ 'Name' : message[0],
+ 'Arguments' : [].slice.call(message, 1) || '',
+ 'Execution Time' : executionTime
+ });
+ }
+ clearTimeout(module.performance.timer);
+ module.performance.timer = setTimeout(module.performance.display, 500);
+ },
+ display: function() {
+ var
+ title = settings.name + ':',
+ totalTime = 0
+ ;
+ time = false;
+ clearTimeout(module.performance.timer);
+ $.each(performance, function(index, data) {
+ totalTime += data['Execution Time'];
+ });
+ title += ' ' + totalTime + 'ms';
+ if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
+ console.groupCollapsed(title);
+ if(console.table) {
+ console.table(performance);
+ }
+ else {
+ $.each(performance, function(index, data) {
+ console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
+ });
+ }
+ console.groupEnd();
+ }
+ performance = [];
+ }
+ },
+ invoke: function(query, passedArguments, context) {
+ var
+ object = instance,
+ maxDepth,
+ found,
+ response
+ ;
+ passedArguments = passedArguments || queryArguments;
+ context = element || context;
+ if(typeof query == 'string' && object !== undefined) {
+ query = query.split(/[\. ]/);
+ maxDepth = query.length - 1;
+ $.each(query, function(depth, value) {
+ var camelCaseValue = (depth != maxDepth)
+ ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
+ : query
+ ;
+ if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
+ object = object[camelCaseValue];
+ }
+ else if( object[camelCaseValue] !== undefined ) {
+ found = object[camelCaseValue];
+ return false;
+ }
+ else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
+ object = object[value];
+ }
+ else if( object[value] !== undefined ) {
+ found = object[value];
+ return false;
+ }
+ else {
+ module.error(error.method, query);
+ return false;
+ }
+ });
+ }
+ if ( $.isFunction( found ) ) {
+ response = found.apply(context, passedArguments);
+ }
+ else if(found !== undefined) {
+ response = found;
+ }
+ if($.isArray(returnedValue)) {
+ returnedValue.push(response);
+ }
+ else if(returnedValue !== undefined) {
+ returnedValue = [returnedValue, response];
+ }
+ else if(response !== undefined) {
+ returnedValue = response;
+ }
+ return found;
+ }
+ };
+
+ if(methodInvoked) {
+ if(instance === undefined) {
+ module.initialize();
+ }
+ module.invoke(query);
+ }
+ else {
+ if(instance !== undefined) {
+ module.destroy();
+ }
+ module.initialize();
+ }
+ return (returnedValue !== undefined)
+ ? returnedValue
+ : this
+ ;
+};
+
+$.site.settings = {
+
+ name : 'Site',
+ namespace : 'site',
+
+ error : {
+ console : 'Console cannot be restored, most likely it was overwritten outside of module',
+ method : 'The method you called is not defined.'
+ },
+
+ debug : false,
+ verbose : false,
+ performance : true,
+
+ modules: [
+ 'accordion',
+ 'api',
+ 'checkbox',
+ 'dimmer',
+ 'dropdown',
+ 'embed',
+ 'form',
+ 'modal',
+ 'nag',
+ 'popup',
+ 'rating',
+ 'shape',
+ 'sidebar',
+ 'state',
+ 'sticky',
+ 'tab',
+ 'transition',
+ 'visit',
+ 'visibility'
+ ],
+
+ siteNamespace : 'site',
+ namespaceStub : {
+ cache : {},
+ config : {},
+ sections : {},
+ section : {},
+ utilities : {}
+ }
+
+};
+
+// allows for selection of elements with data attributes
+$.extend($.expr[ ":" ], {
+ data: ($.expr.createPseudo)
+ ? $.expr.createPseudo(function(dataName) {
+ return function(elem) {
+ return !!$.data(elem, dataName);
+ };
+ })
+ : function(elem, i, match) {
+ // support: jQuery < 1.8
+ return !!$.data(elem, match[ 3 ]);
+ }
+});
+
+
+})( jQuery, window, document );
http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/db97ec6f/semantic/src/definitions/globals/site.less
----------------------------------------------------------------------
diff --git a/semantic/src/definitions/globals/site.less b/semantic/src/definitions/globals/site.less
new file mode 100755
index 0000000..49c1534
--- /dev/null
+++ b/semantic/src/definitions/globals/site.less
@@ -0,0 +1,166 @@
+/*!
+ * # Semantic UI - Site
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+
+
+/*******************************
+ Theme
+*******************************/
+
+@type : 'global';
+@element : 'site';
+
+@import (multiple) '../../theme.config';
+
+/*******************************
+ Page
+*******************************/
+
+.loadFonts();
+
+html,
+body {
+ height: 100%;
+}
+
+html {
+ font-size: @emSize;
+}
+
+body {
+ margin: 0px;
+ padding: 0px;
+ overflow-x: @pageOverflowX;
+ min-width: @pageMinWidth;
+ background: @pageBackground;
+ font-family: @pageFont;
+ font-size: @fontSize;
+ line-height: @lineHeight;
+ color: @textColor;
+ font-smoothing: @fontSmoothing;
+}
+
+
+
+/*******************************
+ Headers
+*******************************/
+
+h1,
+h2,
+h3,
+h4,
+h5 {
+ font-family: @headerFont;
+ line-height: @headerLineHeight;
+ margin: @headerMargin;
+ font-weight: @headerFontWeight;
+ padding: 0em;
+}
+
+h1 {
+ min-height: 1rem;
+ font-size: @h1;
+}
+h2 {
+ font-size: @h2;
+}
+h3 {
+ font-size: @h3;
+}
+h4 {
+ font-size: @h4;
+}
+h5 {
+ font-size: @h5;
+}
+
+h1:first-child,
+h2:first-child,
+h3:first-child,
+h4:first-child,
+h5:first-child {
+ margin-top: 0em;
+}
+
+h1:last-child,
+h2:last-child,
+h3:last-child,
+h4:last-child,
+h5:last-child {
+ margin-bottom: 0em;
+}
+
+
+/*******************************
+ Text
+*******************************/
+
+p {
+ margin: @paragraphMargin;
+ line-height: @paragraphLineHeight;
+}
+p:first-child {
+ margin-top: 0em;
+}
+p:last-child {
+ margin-bottom: 0em;
+}
+
+/*-------------------
+ Links
+--------------------*/
+
+a {
+ color: @linkColor;
+ text-decoration: @linkUnderline;
+}
+a:hover {
+ color: @linkHoverColor;
+ text-decoration: @linkHoverUnderline;
+}
+
+
+/*******************************
+ Highlighting
+*******************************/
+
+/* Site */
+::-webkit-selection {
+ background-color: @highlightBackground;
+ color: @highlightColor;
+}
+::-moz-selection {
+ background-color: @highlightBackground;
+ color: @highlightColor;
+}
+::selection {
+ background-color: @highlightBackground;
+ color: @highlightColor;
+}
+
+/* Form */
+textarea::-webkit-selection,
+input::-webkit-selection {
+ background-color: @inputHighlightBackground;
+ color: @inputHighlightColor;
+}
+textarea::-moz-selection,
+input::-moz-selection {
+ background-color: @inputHighlightBackground;
+ color: @inputHighlightColor;
+}
+textarea::selection,
+input::selection {
+ background-color: @inputHighlightBackground;
+ color: @inputHighlightColor;
+}
+
+
+.loadUIOverrides();