diff --git a/node/Gruntfile.js b/node/Gruntfile.js
index 597ae71e8..3335c979a 100755
--- a/node/Gruntfile.js
+++ b/node/Gruntfile.js
@@ -1,6 +1,10 @@
module.exports = function(grunt) {
var
tasks = [
+
+ 'clean:build',
+
+
// compiles less
'less:buildCSS',
@@ -19,6 +23,9 @@ module.exports = function(grunt) {
// creates release js of all together
'uglify:buildReleaseJS',
+ // cleans docs folder
+ 'clean:docs',
+
// copies files over to docs
'copy:toDocs'
],
@@ -39,10 +46,25 @@ module.exports = function(grunt) {
}
},
+ clean: {
+ build : {
+ cwd: '../build',
+ src: '*'
+ },
+ docs : {
+ cwd: 'src/files/components/semantic/',
+ src: '*'
+ }
+ },
+
less: {
+ options: {
+ compress : false,
+ optimization : 2
+ },
buildCSS: {
- options: {
- paths: ['../build']
+ options : {
+ paths : ['../build']
},
expand : true,
cwd : '../src',
@@ -93,7 +115,7 @@ module.exports = function(grunt) {
files: [
{
expand : true,
- cwd : '../build',
+ cwd : '../build/uncompressed',
src : [
'**'
],
@@ -179,7 +201,7 @@ module.exports = function(grunt) {
};
-
+ grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-bower-task');
grunt.loadNpmTasks('grunt-css');
diff --git a/node/node_modules/grunt-contrib-clean/.jshintrc b/node/node_modules/grunt-contrib-clean/.jshintrc
new file mode 100644
index 000000000..6b4c1a9b1
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/.jshintrc
@@ -0,0 +1,14 @@
+{
+ "curly": true,
+ "eqeqeq": true,
+ "immed": true,
+ "latedef": true,
+ "newcap": true,
+ "noarg": true,
+ "sub": true,
+ "undef": true,
+ "boss": true,
+ "eqnull": true,
+ "node": true,
+ "es5": true
+}
diff --git a/node/node_modules/grunt-contrib-clean/.npmignore b/node/node_modules/grunt-contrib-clean/.npmignore
new file mode 100644
index 000000000..5cb6bfd4d
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/.npmignore
@@ -0,0 +1,3 @@
+node_modules
+npm-debug.log
+tmp
\ No newline at end of file
diff --git a/node/node_modules/grunt-contrib-clean/.travis.yml b/node/node_modules/grunt-contrib-clean/.travis.yml
new file mode 100644
index 000000000..57661910e
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
+before_script:
+ - npm install -g grunt-cli
\ No newline at end of file
diff --git a/node/node_modules/grunt-contrib-clean/AUTHORS b/node/node_modules/grunt-contrib-clean/AUTHORS
new file mode 100644
index 000000000..393d81454
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/AUTHORS
@@ -0,0 +1,6 @@
+Tim Branyen (http://tbranyen.com/)
+Tyler Kellen (http://goingslowly.com/)
+Chris Talkington (http://christalkington.com/)
+Sebastian Golasch (http://www.asciidisco.com/)
+Vlad Filippov (http://vf.io)
+"Cowboy" Ben Alman (http://benalman.com/)
diff --git a/node/node_modules/grunt-contrib-clean/CHANGELOG b/node/node_modules/grunt-contrib-clean/CHANGELOG
new file mode 100644
index 000000000..c05fff0dd
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/CHANGELOG
@@ -0,0 +1,32 @@
+v0.4.1:
+ date: 2013-04-16
+ changes:
+ - Check if file exists to avoid trying to delete a non-existent file.
+v0.4.0:
+ date: 2013-02-15
+ changes:
+ - First official release for Grunt 0.4.0.
+v0.4.0rc6:
+ date: 2013-01-18
+ changes:
+ - Updating grunt/gruntplugin dependencies to rc6.
+ - Changing in-development grunt/gruntplugin dependency versions from tilde version ranges to specific versions.
+v0.4.0rc5:
+ date: 2013-01-09
+ changes:
+ - Updating to work with grunt v0.4.0rc5.
+ - Switching to this.filesSrc api.
+v0.4.0a:
+ date: 2012-12-07
+ changes:
+ - Conversion to grunt v0.4 conventions.
+ - Remove node v0.6 and grunt v0.3 support.
+ - Add force option to bypass CWD check.
+v0.3.0:
+ date: 2012-09-23
+ changes:
+ - Options no longer accepted from global config key.
+v0.2.0:
+ date: 2012-09-10
+ changes:
+ - Refactored from grunt-contrib into individual repo.
diff --git a/node/node_modules/grunt-contrib-clean/CONTRIBUTING.md b/node/node_modules/grunt-contrib-clean/CONTRIBUTING.md
new file mode 100644
index 000000000..5d08cc387
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/CONTRIBUTING.md
@@ -0,0 +1 @@
+Please see the [Contributing to grunt](http://gruntjs.com/contributing) guide for information on contributing to this project.
diff --git a/node/node_modules/grunt-contrib-clean/Gruntfile.js b/node/node_modules/grunt-contrib-clean/Gruntfile.js
new file mode 100644
index 000000000..9fed3f487
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/Gruntfile.js
@@ -0,0 +1,60 @@
+/*
+ * grunt-contrib-clean
+ * http://gruntjs.com/
+ *
+ * Copyright (c) 2012 Tim Branyen, contributors
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+module.exports = function(grunt) {
+
+ // Project configuration.
+ grunt.initConfig({
+ jshint: {
+ all: [
+ 'Gruntfile.js',
+ 'tasks/*.js',
+ '<%= nodeunit.tests %>'
+ ],
+ options: {
+ jshintrc: '.jshintrc'
+ },
+ },
+
+ // Configuration to be run (and then tested).
+ clean: {
+ short: ['tmp/sample_short'],
+ long: {
+ src: ['tmp/sample_long'],
+ },
+ },
+
+ // Unit tests.
+ nodeunit: {
+ tests: ['test/*_test.js'],
+ },
+ });
+
+ // Actually load this plugin's task(s).
+ grunt.loadTasks('tasks');
+
+ // These plugins provide necessary tasks.
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.loadNpmTasks('grunt-contrib-nodeunit');
+ grunt.loadNpmTasks('grunt-contrib-internal');
+
+ // Setup a test helper to create some folders to clean.
+ grunt.registerTask('copy', 'Copy fixtures to a temp location.', function() {
+ grunt.file.copy('test/fixtures/sample_long/long.txt', 'tmp/sample_long/long.txt');
+ grunt.file.copy('test/fixtures/sample_short/short.txt', 'tmp/sample_short/short.txt');
+ });
+
+ // Whenever the 'test' task is run, first create some files to be cleaned,
+ // then run this plugin's task(s), then test the result.
+ grunt.registerTask('test', ['copy', 'clean', 'nodeunit']);
+
+ // By default, lint and run all tests.
+ grunt.registerTask('default', ['jshint', 'test', 'build-contrib']);
+};
diff --git a/node/node_modules/grunt-contrib-clean/LICENSE-MIT b/node/node_modules/grunt-contrib-clean/LICENSE-MIT
new file mode 100644
index 000000000..9bf64d19c
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/LICENSE-MIT
@@ -0,0 +1,22 @@
+Copyright (c) 2012 Tim Branyen, contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node/node_modules/grunt-contrib-clean/README.md b/node/node_modules/grunt-contrib-clean/README.md
new file mode 100644
index 000000000..fc7d04a5c
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/README.md
@@ -0,0 +1,83 @@
+# grunt-contrib-clean [![Build Status](https://secure.travis-ci.org/gruntjs/grunt-contrib-clean.png?branch=master)](http://travis-ci.org/gruntjs/grunt-contrib-clean)
+
+> Clean files and folders.
+
+
+
+## Getting Started
+This plugin requires Grunt `~0.4.0`
+
+If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
+
+```shell
+npm install grunt-contrib-clean --save-dev
+```
+
+Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
+
+```js
+grunt.loadNpmTasks('grunt-contrib-clean');
+```
+
+*This plugin was designed to work with Grunt 0.4.x. If you're still using grunt v0.3.x it's strongly recommended that [you upgrade](http://gruntjs.com/upgrading-from-0.3-to-0.4), but in case you can't please use [v0.3.2](https://github.com/gruntjs/grunt-contrib-clean/tree/grunt-0.3-stable).*
+
+
+
+## Clean task
+_Run this task with the `grunt clean` command._
+
+Task targets, files and options may be specified according to the grunt [Configuring tasks](http://gruntjs.com/configuring-tasks) guide.
+
+*Due to the destructive nature of this task, always be cautious of the paths you clean.*
+### Options
+
+#### force
+Type: `Boolean`
+Default: false
+
+This overrides `grunt.file.delete` from blocking deletion of folders outside current working dir (CWD). Use with caution.
+
+### Usage Examples
+
+There are three formats you can use to run this task.
+
+#### Short
+
+```js
+clean: ["path/to/dir/one", "path/to/dir/two"]
+```
+
+#### Medium (specific targets with global options)
+
+```js
+clean: {
+ build: ["path/to/dir/one", "path/to/dir/two"],
+ release: ["path/to/another/dir/one", "path/to/another/dir/two"]
+},
+```
+
+#### Long (specific targets with per target options)
+
+```js
+clean: {
+ build: {
+ src: ["path/to/dir/one", "path/to/dir/two"]
+ }
+}
+```
+
+## Release History
+
+ * 2013-04-16 v0.4.1 Check if file exists to avoid trying to delete a non-existent file.
+ * 2013-02-15 v0.4.0 First official release for Grunt 0.4.0.
+ * 2013-01-18 v0.4.0rc6 Updating grunt/gruntplugin dependencies to rc6. Changing in-development grunt/gruntplugin dependency versions from tilde version ranges to specific versions.
+ * 2013-01-09 v0.4.0rc5 Updating to work with grunt v0.4.0rc5. Switching to this.filesSrc api.
+ * 2012-12-07 v0.4.0a Conversion to grunt v0.4 conventions. Remove node v0.6 and grunt v0.3 support. Add force option to bypass CWD check.
+ * 2012-09-23 v0.3.0 Options no longer accepted from global config key.
+ * 2012-09-10 v0.2.0 Refactored from grunt-contrib into individual repo.
+
+---
+
+Task submitted by [Tim Branyen](http://tbranyen.com/)
+
+*This file was generated on Tue Apr 16 2013 13:28:15.*
diff --git a/node/node_modules/grunt-contrib-clean/package.json b/node/node_modules/grunt-contrib-clean/package.json
new file mode 100644
index 000000000..1ef5263eb
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "grunt-contrib-clean",
+ "description": "Clean files and folders.",
+ "version": "0.4.1",
+ "homepage": "https://github.com/gruntjs/grunt-contrib-clean",
+ "author": {
+ "name": "Grunt Team",
+ "url": "http://gruntjs.com/"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/gruntjs/grunt-contrib-clean.git"
+ },
+ "bugs": {
+ "url": "https://github.com/gruntjs/grunt-contrib-clean/issues"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/gruntjs/grunt-contrib-clean/blob/master/LICENSE-MIT"
+ }
+ ],
+ "main": "Gruntfile.js",
+ "engines": {
+ "node": ">= 0.8.0"
+ },
+ "scripts": {
+ "test": "grunt test"
+ },
+ "devDependencies": {
+ "grunt-contrib-jshint": "~0.2.0",
+ "grunt-contrib-nodeunit": "~0.1.2",
+ "grunt-contrib-internal": "~0.4.4",
+ "grunt": "~0.4.0"
+ },
+ "peerDependencies": {
+ "grunt": "~0.4.0"
+ },
+ "keywords": [
+ "gruntplugin"
+ ],
+ "contributors": [
+ {
+ "name": "Tim Branyen",
+ "url": "http://tbranyen.com/"
+ },
+ {
+ "name": "Tyler Kellen",
+ "url": "http://goingslowly.com/"
+ },
+ {
+ "name": "Chris Talkington",
+ "url": "http://christalkington.com/"
+ },
+ {
+ "name": "Sebastian Golasch",
+ "url": "http://www.asciidisco.com/"
+ },
+ {
+ "name": "Vlad Filippov",
+ "url": "http://vf.io"
+ },
+ {
+ "name": "\"Cowboy\" Ben Alman",
+ "url": "http://benalman.com/"
+ }
+ ],
+ "readme": "# grunt-contrib-clean [![Build Status](https://secure.travis-ci.org/gruntjs/grunt-contrib-clean.png?branch=master)](http://travis-ci.org/gruntjs/grunt-contrib-clean)\n\n> Clean files and folders.\n\n\n\n## Getting Started\nThis plugin requires Grunt `~0.4.0`\n\nIf you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:\n\n```shell\nnpm install grunt-contrib-clean --save-dev\n```\n\nOnce the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:\n\n```js\ngrunt.loadNpmTasks('grunt-contrib-clean');\n```\n\n*This plugin was designed to work with Grunt 0.4.x. If you're still using grunt v0.3.x it's strongly recommended that [you upgrade](http://gruntjs.com/upgrading-from-0.3-to-0.4), but in case you can't please use [v0.3.2](https://github.com/gruntjs/grunt-contrib-clean/tree/grunt-0.3-stable).*\n\n\n\n## Clean task\n_Run this task with the `grunt clean` command._\n\nTask targets, files and options may be specified according to the grunt [Configuring tasks](http://gruntjs.com/configuring-tasks) guide.\n\n*Due to the destructive nature of this task, always be cautious of the paths you clean.*\n### Options\n\n#### force\nType: `Boolean` \nDefault: false\n\nThis overrides `grunt.file.delete` from blocking deletion of folders outside current working dir (CWD). Use with caution.\n\n### Usage Examples\n\nThere are three formats you can use to run this task.\n\n#### Short\n\n```js\nclean: [\"path/to/dir/one\", \"path/to/dir/two\"]\n```\n\n#### Medium (specific targets with global options)\n\n```js\nclean: {\n build: [\"path/to/dir/one\", \"path/to/dir/two\"],\n release: [\"path/to/another/dir/one\", \"path/to/another/dir/two\"]\n},\n```\n\n#### Long (specific targets with per target options)\n\n```js\nclean: {\n build: {\n src: [\"path/to/dir/one\", \"path/to/dir/two\"]\n }\n}\n```\n\n## Release History\n\n * 2013-04-16 v0.4.1 Check if file exists to avoid trying to delete a non-existent file.\n * 2013-02-15 v0.4.0 First official release for Grunt 0.4.0.\n * 2013-01-18 v0.4.0rc6 Updating grunt/gruntplugin dependencies to rc6. Changing in-development grunt/gruntplugin dependency versions from tilde version ranges to specific versions.\n * 2013-01-09 v0.4.0rc5 Updating to work with grunt v0.4.0rc5. Switching to this.filesSrc api.\n * 2012-12-07 v0.4.0a Conversion to grunt v0.4 conventions. Remove node v0.6 and grunt v0.3 support. Add force option to bypass CWD check.\n * 2012-09-23 v0.3.0 Options no longer accepted from global config key.\n * 2012-09-10 v0.2.0 Refactored from grunt-contrib into individual repo.\n\n---\n\nTask submitted by [Tim Branyen](http://tbranyen.com/)\n\n*This file was generated on Tue Apr 16 2013 13:28:15.*\n",
+ "readmeFilename": "README.md",
+ "_id": "grunt-contrib-clean@0.4.1",
+ "dist": {
+ "shasum": "83f743ad1e8ec861723f22dad7bc023f0535c1a3"
+ },
+ "_from": "grunt-contrib-clean@",
+ "_resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.4.1.tgz"
+}
diff --git a/node/node_modules/grunt-contrib-clean/tasks/clean.js b/node/node_modules/grunt-contrib-clean/tasks/clean.js
new file mode 100644
index 000000000..e4fc0d53a
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/tasks/clean.js
@@ -0,0 +1,37 @@
+/*
+ * grunt-contrib-clean
+ * http://gruntjs.com/
+ *
+ * Copyright (c) 2012 Tim Branyen, contributors
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+module.exports = function(grunt) {
+
+ grunt.registerMultiTask('clean', 'Clean files and folders.', function() {
+ // Merge task-specific and/or target-specific options with these defaults.
+ var options = this.options({
+ force: false
+ });
+
+ grunt.verbose.writeflags(options, 'Options');
+
+ // Clean specified files / dirs.
+ this.filesSrc.forEach(function(filepath) {
+ if (!grunt.file.exists(filepath)) { return; }
+ grunt.log.write('Cleaning "' + filepath + '"...');
+
+ try {
+ grunt.file.delete(filepath, options);
+ grunt.log.ok();
+ } catch (e) {
+ grunt.log.error();
+ grunt.verbose.error(e);
+ grunt.fail.warn('Clean operation failed.');
+ }
+ });
+ });
+
+};
diff --git a/node/node_modules/grunt-contrib-clean/test/clean_test.js b/node/node_modules/grunt-contrib-clean/test/clean_test.js
new file mode 100644
index 000000000..4db2ef822
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/test/clean_test.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var grunt = require('grunt');
+
+exports.clean = {
+ short: function(test) {
+ test.expect(1);
+
+ var expected = grunt.file.exists('tmp/sample_short');
+ test.equal(expected, false, 'should remove the short directory using clean');
+
+ test.done();
+ },
+ long: function(test) {
+ test.expect(1);
+
+ var expected = grunt.file.exists('tmp/sample_long');
+ test.equal(expected, false, 'should remove the long directory using clean');
+
+ test.done();
+ }
+};
diff --git a/node/node_modules/grunt-contrib-clean/test/fixtures/sample_long/long.txt b/node/node_modules/grunt-contrib-clean/test/fixtures/sample_long/long.txt
new file mode 100644
index 000000000..83f9fcffd
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/test/fixtures/sample_long/long.txt
@@ -0,0 +1 @@
+txt
diff --git a/node/node_modules/grunt-contrib-clean/test/fixtures/sample_short/short.txt b/node/node_modules/grunt-contrib-clean/test/fixtures/sample_short/short.txt
new file mode 100644
index 000000000..83f9fcffd
--- /dev/null
+++ b/node/node_modules/grunt-contrib-clean/test/fixtures/sample_short/short.txt
@@ -0,0 +1 @@
+txt
diff --git a/node/package.json b/node/package.json
index 42285ce83..a8b774ee1 100755
--- a/node/package.json
+++ b/node/package.json
@@ -61,7 +61,8 @@
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-uglify": "~0.2.0",
"grunt-contrib-cssmin": "~0.6.0",
- "grunt-contrib-less": "~0.5.1"
+ "grunt-contrib-less": "~0.5.1",
+ "grunt-contrib-clean": "~0.4.1"
},
"main": "node_modules/docpad/bin/docpad-server"
}
diff --git a/node/src/files/components/semantic/uncompressed/collections/form.css b/node/src/files/components/semantic/collections/form.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/collections/form.css
rename to node/src/files/components/semantic/collections/form.css
diff --git a/node/src/files/components/semantic/uncompressed/collections/grid.css b/node/src/files/components/semantic/collections/grid.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/collections/grid.css
rename to node/src/files/components/semantic/collections/grid.css
diff --git a/node/src/files/components/semantic/uncompressed/collections/items.css b/node/src/files/components/semantic/collections/items.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/collections/items.css
rename to node/src/files/components/semantic/collections/items.css
diff --git a/node/src/files/components/semantic/uncompressed/collections/menu.css b/node/src/files/components/semantic/collections/menu.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/collections/menu.css
rename to node/src/files/components/semantic/collections/menu.css
diff --git a/node/src/files/components/semantic/uncompressed/collections/message.css b/node/src/files/components/semantic/collections/message.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/collections/message.css
rename to node/src/files/components/semantic/collections/message.css
diff --git a/node/src/files/components/semantic/uncompressed/collections/table.css b/node/src/files/components/semantic/collections/table.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/collections/table.css
rename to node/src/files/components/semantic/collections/table.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/banner.css b/node/src/files/components/semantic/elements/banner.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/banner.css
rename to node/src/files/components/semantic/elements/banner.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/button.css b/node/src/files/components/semantic/elements/button.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/button.css
rename to node/src/files/components/semantic/elements/button.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/divider.css b/node/src/files/components/semantic/elements/divider.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/divider.css
rename to node/src/files/components/semantic/elements/divider.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/flags.css b/node/src/files/components/semantic/elements/flags.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/flags.css
rename to node/src/files/components/semantic/elements/flags.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/footnote.css b/node/src/files/components/semantic/elements/footnote.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/footnote.css
rename to node/src/files/components/semantic/elements/footnote.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/header.css b/node/src/files/components/semantic/elements/header.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/header.css
rename to node/src/files/components/semantic/elements/header.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/icons.css b/node/src/files/components/semantic/elements/icons.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/icons.css
rename to node/src/files/components/semantic/elements/icons.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/image.css b/node/src/files/components/semantic/elements/image.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/image.css
rename to node/src/files/components/semantic/elements/image.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/label.css b/node/src/files/components/semantic/elements/label.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/label.css
rename to node/src/files/components/semantic/elements/label.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/paperclip.css b/node/src/files/components/semantic/elements/paperclip.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/paperclip.css
rename to node/src/files/components/semantic/elements/paperclip.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/progress.css b/node/src/files/components/semantic/elements/progress.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/progress.css
rename to node/src/files/components/semantic/elements/progress.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/segment.css b/node/src/files/components/semantic/elements/segment.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/segment.css
rename to node/src/files/components/semantic/elements/segment.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/step.css b/node/src/files/components/semantic/elements/step.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/step.css
rename to node/src/files/components/semantic/elements/step.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/throbber.css b/node/src/files/components/semantic/elements/throbber.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/throbber.css
rename to node/src/files/components/semantic/elements/throbber.css
diff --git a/node/src/files/components/semantic/uncompressed/elements/well.css b/node/src/files/components/semantic/elements/well.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/elements/well.css
rename to node/src/files/components/semantic/elements/well.css
diff --git a/node/src/files/components/semantic/minified/fonts/icons.eot.REMOVED.git-id b/node/src/files/components/semantic/fonts/icons.eot.REMOVED.git-id
similarity index 100%
rename from node/src/files/components/semantic/minified/fonts/icons.eot.REMOVED.git-id
rename to node/src/files/components/semantic/fonts/icons.eot.REMOVED.git-id
diff --git a/node/src/files/components/semantic/minified/fonts/icons.svg.REMOVED.git-id b/node/src/files/components/semantic/fonts/icons.svg.REMOVED.git-id
similarity index 100%
rename from node/src/files/components/semantic/minified/fonts/icons.svg.REMOVED.git-id
rename to node/src/files/components/semantic/fonts/icons.svg.REMOVED.git-id
diff --git a/node/src/files/components/semantic/minified/fonts/icons.ttf.REMOVED.git-id b/node/src/files/components/semantic/fonts/icons.ttf.REMOVED.git-id
similarity index 100%
rename from node/src/files/components/semantic/minified/fonts/icons.ttf.REMOVED.git-id
rename to node/src/files/components/semantic/fonts/icons.ttf.REMOVED.git-id
diff --git a/node/src/files/components/semantic/minified/fonts/icons.woff b/node/src/files/components/semantic/fonts/icons.woff
similarity index 100%
rename from node/src/files/components/semantic/minified/fonts/icons.woff
rename to node/src/files/components/semantic/fonts/icons.woff
diff --git a/node/src/files/components/semantic/minified/images/button-error.gif b/node/src/files/components/semantic/images/button-error.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/button-error.gif
rename to node/src/files/components/semantic/images/button-error.gif
diff --git a/node/src/files/components/semantic/minified/images/footnote.png b/node/src/files/components/semantic/images/footnote.png
similarity index 100%
rename from node/src/files/components/semantic/minified/images/footnote.png
rename to node/src/files/components/semantic/images/footnote.png
diff --git a/node/src/files/components/semantic/minified/images/loader-generic-transparent.gif b/node/src/files/components/semantic/images/loader-generic-transparent.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/loader-generic-transparent.gif
rename to node/src/files/components/semantic/images/loader-generic-transparent.gif
diff --git a/node/src/files/components/semantic/minified/images/notecard-stripes.png b/node/src/files/components/semantic/images/notecard-stripes.png
similarity index 100%
rename from node/src/files/components/semantic/minified/images/notecard-stripes.png
rename to node/src/files/components/semantic/images/notecard-stripes.png
diff --git a/node/src/files/components/semantic/minified/images/paperclip.png b/node/src/files/components/semantic/images/paperclip.png
similarity index 100%
rename from node/src/files/components/semantic/minified/images/paperclip.png
rename to node/src/files/components/semantic/images/paperclip.png
diff --git a/node/src/files/components/semantic/minified/images/placeholder-subtle.png b/node/src/files/components/semantic/images/placeholder-subtle.png
similarity index 100%
rename from node/src/files/components/semantic/minified/images/placeholder-subtle.png
rename to node/src/files/components/semantic/images/placeholder-subtle.png
diff --git a/node/src/files/components/semantic/minified/images/placeholder-tiny.png b/node/src/files/components/semantic/images/placeholder-tiny.png
similarity index 100%
rename from node/src/files/components/semantic/minified/images/placeholder-tiny.png
rename to node/src/files/components/semantic/images/placeholder-tiny.png
diff --git a/node/src/files/components/semantic/minified/images/placeholder.png b/node/src/files/components/semantic/images/placeholder.png
similarity index 100%
rename from node/src/files/components/semantic/minified/images/placeholder.png
rename to node/src/files/components/semantic/images/placeholder.png
diff --git a/node/src/files/components/semantic/minified/images/throbber-blue-large.gif b/node/src/files/components/semantic/images/throbber-blue-large.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-blue-large.gif
rename to node/src/files/components/semantic/images/throbber-blue-large.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-blue-medium.gif b/node/src/files/components/semantic/images/throbber-blue-medium.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-blue-medium.gif
rename to node/src/files/components/semantic/images/throbber-blue-medium.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-blue-small.gif b/node/src/files/components/semantic/images/throbber-blue-small.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-blue-small.gif
rename to node/src/files/components/semantic/images/throbber-blue-small.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-blue-tiny.gif b/node/src/files/components/semantic/images/throbber-blue-tiny.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-blue-tiny.gif
rename to node/src/files/components/semantic/images/throbber-blue-tiny.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-large.gif b/node/src/files/components/semantic/images/throbber-large.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-large.gif
rename to node/src/files/components/semantic/images/throbber-large.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-medium-white.gif b/node/src/files/components/semantic/images/throbber-medium-white.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-medium-white.gif
rename to node/src/files/components/semantic/images/throbber-medium-white.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-medium.gif b/node/src/files/components/semantic/images/throbber-medium.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-medium.gif
rename to node/src/files/components/semantic/images/throbber-medium.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-small.gif b/node/src/files/components/semantic/images/throbber-small.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-small.gif
rename to node/src/files/components/semantic/images/throbber-small.gif
diff --git a/node/src/files/components/semantic/minified/images/throbber-tiny.gif b/node/src/files/components/semantic/images/throbber-tiny.gif
similarity index 100%
rename from node/src/files/components/semantic/minified/images/throbber-tiny.gif
rename to node/src/files/components/semantic/images/throbber-tiny.gif
diff --git a/node/src/files/components/semantic/minified/collections/form.min.css b/node/src/files/components/semantic/minified/collections/form.min.css
deleted file mode 100644
index 45b4d8f7d..000000000
--- a/node/src/files/components/semantic/minified/collections/form.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.form{position:relative;width:35em;max-width:100%}.ui.form :first-child{margin-top:0}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .field>label{margin:0 0 .3em;display:block;color:#555;font-size:.875em;line-height:1.2}.ui.form textarea,.ui.form input[type=text],.ui.form input[type=date],.ui.form input[type=password],.ui.textarea,.ui.input{width:100%;padding:.53em .7em;font-size:.825em;background-color:#FFF;border:1px solid rgba(0,0,0,.15);outline:0;color:#555;-webkit-border-radius:.3125em;-moz-border-radius:.3125em;border-radius:.3125em;-webkit-transition:background-color .3s ease-out;-moz-transition:background-color .3s ease-out;-o-transition:background-color .3s ease-out;-ms-transition:background-color .3s ease-out;transition:background-color .3s ease-out;-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.textarea,.ui.form textarea{line-height:1.33;min-height:8em;height:12em;max-height:24em;resize:vertical}.ui.form select{-webkit-tap-highlight-color:rgba(255,255,255,0)}.ui.form textarea,.ui.form input[type=checkbox]{vertical-align:top}.ui.form .divider{clear:both;margin:1em 0}.ui.form .info.message,.ui.form .warning.message,.ui.form .error.message{display:none}.ui.form .message:first-child{margin-top:0}.ui.form input:focus,.ui.form textarea:focus{color:rgba(20,20,20,.9);border-color:rgba(0,0,0,.3)}.ui.form.warning .warning.message{display:block}.ui.form.error .error.message{display:block}.ui.form .fields.error .field label,.ui.form .field.error label{font-weight:700;color:#EF3F49}.ui.form .fields.error .field textarea,.ui.form .fields.error .field input[type=text],.ui.form .fields.error .field input[type=date],.ui.form .fields.error .field input[type=password],.ui.form .field.error textarea,.ui.form .field.error input[type=text],.ui.form .field.error input[type=date],.ui.form .field.error input[type=password]{background-color:#FFFAFA;border-color:rgba(255,80,80,.7);color:rgba(255,80,80,.7)}.ui.form .field.error textarea:focus,.ui.form .field.error input:focus{border-color:#ff5050;color:#ff5050}.ui.form ::-webkit-input-placeholder{color:#E0E0E0}.ui.form ::-moz-placeholder{color:#E0E0E0}.ui.form :focus::-webkit-input-placeholder{color:#AAA}.ui.form :focus::-moz-placeholder{color:#AAA}.ui.form textarea.empty,.ui.form input.empty{color:#E0E0E0}.ui.form .error ::-webkit-input-placeholder{color:rgba(255,80,80,.4)}.ui.form .error ::-moz-placeholder{color:rgba(255,80,80,.4)}.ui.form .error :focus::-webkit-input-placeholder{color:rgba(255,80,80,.7)}.ui.form .error :focus::-moz-placeholder{color:rgba(255,80,80,.7)}.ui.form .field :disabled,.ui.form .field.disabled{opacity:.5}.ui.form .field.disabled :disabled{opacity:1}.ui.form.loading{position:relative}.ui.form.loading:after{position:absolute;top:0;left:0;content:'';width:100%;height:100%;background:rgba(255,255,255,.8) url(../images/throbber-large.gif) no-repeat 50% 50%}.ui.form.fluid{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.form input.attached{width:auto}.ui.form .date.field>label{position:relative}.ui.form .date.field>label:after{position:absolute;top:1.2em;right:.4em;font-family:Icons;content:'📅';font-size:1.5em;font-weight:400;color:#CCC}.ui.inverted.form label{color:#FFF}.ui.inverted.form .field.error textarea,.ui.inverted.form .field.error input[type=text]{background-color:#FCC}.ui.form .fields{clear:both}.ui.form .fields:after{content:' ';display:block;clear:both;visibility:hidden;line-height:0;height:0}.ui.form .fields .field{clear:none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.form .fields .field:first-child{border-left:0;box-shadow:none}.ui.form .fields .field,.ui.form .two.fields .field{width:50%;padding-left:1%;padding-right:1%}.ui.form .three.fields .field{width:33.333%;padding-left:1%;padding-right:1%}.ui.form .four.fields .field{width:25%;padding-left:1%;padding-right:1%}.ui.form .five.fields .field{width:20%;padding-left:1%;padding-right:1%}.ui.form .fields .field:first-child{padding-left:0}.ui.form .fields .field:last-child{padding-right:0}.ui.form .inline.fields .field{width:auto}.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p,.ui.form .inline.fields .field>input,.ui.form .inline.fields .field>select,.ui.form .inline.field>label,.ui.form .inline.field>p,.ui.form .inline.field>input,.ui.form .inline.field>select{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:middle;font-size:1em}.ui.form .inline.fields .field>:first-child,.ui.form .inline.field>:first-child{margin:0 .5em 0 0}.ui.small.form{font-size:.875em}.ui.small.form textarea,.ui.small.form input[type=text],.ui.small.form input[type=password],.ui.small.form label{font-size:1em}.ui.large.form{font-size:1.125em}.ui.large.form label{font-weight:700}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/collections/grid.min.css b/node/src/files/components/semantic/minified/collections/grid.min.css
deleted file mode 100644
index 1689fd56d..000000000
--- a/node/src/files/components/semantic/minified/collections/grid.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.grid{width:100%;display:block;text-align:center;font-size:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.grid:after,.ui.row:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.grid>.column,.ui.grid>.row>.column{display:inline-block;text-align:left;font-size:1rem;padding-left:1.33%;padding-right:1.33%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;vertical-align:top}.ui.grid>.row{display:block;width:100%}.ui.grid>.row{margin-top:2%;padding-top:2%}.ui.grid>.row:first-child{padding-top:0rem;margin-top:0rem}.ui.grid>.row>img,.ui.grid>.row>.column>img{max-width:100%}.ui.page.grid{padding:0 5%}@media only screen and (max-width:1000px){.ui.responsive.grid{padding:0 5.55%}}@media only screen and (min-width:1000px){.ui.responsive.grid{padding:0 8%}}@media only screen and (min-width:1500px){.ui.responsive.grid{padding:0 13%}}@media only screen and (min-width:1750px){.ui.responsive.grid{padding:0 18%}}@media only screen and (min-width:2000px){.ui.responsive.grid{padding:0 20%}}.ui.grid .one.wide.column{width:8.3333%}.ui.grid .two.wide.column{width:16.66667%}.ui.grid .three.wide.column{width:25%}.ui.grid .four.wide.column{width:33.3333%}.ui.grid .five.wide.column{width:41.6666%}.ui.grid .six.wide.column{width:50%}.ui.grid .seven.wide.column{width:58.3333%}.ui.grid .eight.wide.column{width:66.6666%}.ui.grid .nine.wide.column{width:75%}.ui.grid .ten.wide.column{width:83.3333%}.ui.grid .eleven.wide.column{width:91.666%}.ui.grid .twelve.wide.column{width:100%}.ui.grid>.column,.ui.grid>.row>.column{width:8.3333%}.ui.grid>.column:only-child,.ui.grid>.row>.column:only-child{width:100%}.ui.two.column.grid .column{width:50%}.ui.three.column.grid .column{width:33.3333%}.ui.four.column.grid .column{width:25%}.ui.five.column.grid .column{width:20%}.ui.six.column.grid .column{width:16.66667%}.ui.seven.column.grid .column{width:14.2857%}.ui.eight.column.grid .column{width:12.5%}.ui.nine.column.grid .column{width:11.1111%}.ui.ten.column.grid .column{width:10%}.ui.eleven.column.grid .column{width:9.0909%}.ui.fitted.grid{padding:0}.ui.fitted.row{padding-top:0}.ui.fitted.grid .column,.ui.grid .fitted.column{padding-left:0;padding-right:0}.ui.grid .left.aligned.column{float:left}.ui.grid .right.aligned.column{float:right}.ui.top.aligned.grid .column,.ui.grid .top.aligned.column,.ui.grid>.top.aligned.row .column{vertical-align:top}.ui.middle.aligned.grid .column,.ui.grid .middle.aligned.column,.ui.grid>.middle.aligned.row .column{vertical-align:middle}.ui.bottom.aligned.grid .column,.ui.grid .bottom.aligned.column,.ui.grid>.bottom.aligned.row .column{vertical-align:bottom}.ui.grid .equal.row .column{display:table-cell}@media only screen and (max-width:1000px){.ui.folding.grid{display:block!important}.ui.folding.grid .column{display:block!important;width:100%!important;padding:0!important}}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/collections/items.min.css b/node/src/files/components/semantic/minified/collections/items.min.css
deleted file mode 100644
index 77923e060..000000000
--- a/node/src/files/components/semantic/minified/collections/items.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.items>.item{float:left;display:block;width:100%;margin:0;font-size:1em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.items:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.two.items{margin-left:-1%;margin-right:-1%}.ui.two.items>.item{width:48%;margin-left:1%;margin-right:1%}.ui.two.items>.item:nth-child(2n+1){clear:left}.ui.three.items{margin-left:-1%;margin-right:-1%}.ui.three.items>.item{width:31.333%;margin-left:1%;margin-right:1%}.ui.three.items>.item:nth-child(3n+1){clear:left}.ui.four.items{margin-left:-.5%;margin-right:-.5%}.ui.four.items>.item{width:24%;margin-left:.5%;margin-right:.5%}.ui.four.items>.item:nth-child(4n+1){clear:left}.ui.five.items{margin-left:-.5%;margin-right:-.5%}.ui.five.items>.item{width:19%;margin-left:.5%;margin-right:.5%}.ui.five.items>.item:nth-child(5n+1){clear:left}.ui.six.items{margin-left:-.5%;margin-right:-.5%}.ui.six.items>.item{width:15.66%;margin-left:.5%;margin-right:.5%}.ui.six.items>.item:nth-child(6n+1){clear:left}.ui.seven.items{margin-left:-.5%;margin-right:-.5%}.ui.seven.items>.item{width:13.28%;margin-left:.5%;margin-right:.5%;font-size:11px}.ui.seven.items>.item:nth-child(7n+1){clear:left}.ui.eight.items{margin-left:-.25%;margin-right:-.25%}.ui.eight.items>.item{width:12%;margin-left:.25%;margin-right:.25%;font-size:11px}.ui.eight.items>.item:nth-child(8n+1){clear:left}.ui.nine.items{margin-left:-.25%;margin-right:-.25%}.ui.nine.items>.item{width:10.61%;margin-left:.25%;margin-right:.25%;font-size:10px}.ui.nine.items>.item:nth-child(9n+1){clear:left}.ui.ten.items{margin-left:-.2%;margin-right:-.2%}.ui.ten.items>.item{width:9.6%;margin-left:.2%;margin-right:.2%;font-size:10px}.ui.ten.items>.item:nth-child(10n+1){clear:left}.ui.eleven.items{margin-left:-.2%;margin-right:-.2%}.ui.eleven.items>.item{width:8.69%;margin-left:.2%;margin-right:.2%;font-size:9px}.ui.eleven.items>.item:nth-child(11n+1){clear:left}.ui.twelve.items{margin-left:-.1%;margin-right:-.1%}.ui.twelve.items>.item{width:8.1333%;margin-left:.1%;margin-right:.1%;font-size:9px}.ui.twelve.items>.item:nth-child(12n+1){clear:left}.ui.items{margin-top:15px;margin-bottom:15px;padding:0}.ui.items>.item,.ui.items>.item>.image,.ui.items>.item>.image .overlay,.ui.items>.item>.content,.ui.items>.item>.extra{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.items>.item{display:block;position:relative;margin:.5em 0;min-height:3em;background-color:#FFF;-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1);-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);-moz-border-radius:.33em;-webkit-border-radius:.33em;border-radius:.33em;padding:.5em}.ui.items>.item>.image{background-color:rgba(0,0,0,.05);display:table-cell;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.items>.item>.image>a,.ui.items>.item>.image>img{position:relative;display:block;width:100%;overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.ui.items>.item>.image>a:after{position:absolute;display:block;content:'';z-index:2;top:0;left:0;width:100%;height:100%;-webkit-box-shadow:0 0 5px rgba(0,0,0,.2) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.2) inset;box-shadow:0 0 5px rgba(0,0,0,.2) inset}.ui.items>.item>.image>.overlay{position:absolute;bottom:0;left:0;background:transparent -webkit-linear-gradient(rgba(0,0,0,0) 0,rgba(0,0,0,.5) 100%);background:transparent -moz-linear-gradient(rgba(0,0,0,0) 0,rgba(0,0,0,.5) 100%);background:transparent -o-linear-gradient(rgba(0,0,0,0) 0,rgba(0,0,0,.5) 100%);background:transparent -ms-linear-gradient(rgba(0,0,0,0) 0,rgba(0,0,0,.5) 100%);background:transparent linear-gradient(rgba(0,0,0,0) 0,rgba(0,0,0,.5) 100%);padding:3% 2.5%;width:100%;font-size:1em;font-weight:700;color:#FFF;text-shadow:0 -1px 0 rgba(0,0,0,.6)}.ui.items>.item>.image>.overlay i{font-size:1.3em;font-weight:700}.ui.items>.item>.content{padding:4% 1% 6%;color:#888}.ui.items>.item>.content>.name,.ui.items>.item>.content>.title{display:block;margin-bottom:.3em;font-size:1.25em;font-weight:700}.ui.items>.item>.content p{line-height:1.33;margin:0 0 5%}.ui.items>.item>.content :last-child{margin-bottom:0}.ui.items>.item>.extra{color:#C6C7C9;padding:0 1% 1%}.ui.items>.item>.extra img{display:inline-block;vertical-align:middle}.ui.items>.item .avatar{display:inline-block;width:5.5%;min-width:15px;margin-right:.2em;vertical-align:middle}.ui.horizontal.items>.item,.ui.items>.horizontal.item{display:table}@media screen and (-webkit-min-device-pixel-ratio:0){.ui.items>.item{display:block}}.ui.horizontal.items>.item>.image .ui.items>.horizontal.item>.image{display:table-cell;width:50%}.ui.horizontal.items>.item>.image+.content,.ui.items>.horizontal.item>.image+.content{width:50%;display:table-cell}.ui.horizontal.items>.item>.content,.ui.items>.horizontal.item>.content{padding:1% 1.7% 11% 3%;vertical-align:top}.ui.horizontal.items>.item>.extra,.ui.items>.horizontal.item>.extra{position:absolute;padding:0;bottom:7%;left:3%;width:94%}.ui.horizontal.items>.item>.image+.content+.extra,.ui.items>.horizontal.item>.image+.content+.extra{bottom:7%;left:53%;width:44%}.ui.horizontal.items>.item .avatar,.ui.items>.horizontal.item .avatar{width:11.5%}.ui.items>.item .avatar{max-width:25px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/collections/menu.min.css b/node/src/files/components/semantic/minified/collections/menu.min.css
deleted file mode 100644
index a42f69cf5..000000000
--- a/node/src/files/components/semantic/minified/collections/menu.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.menu{background-color:#FFF;font-size:0;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.ui.menu:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.menu>.item:first-child{border-radius:5px 0 0 5px}.ui.menu>.item:last-child{border-radius:0 5px 5px 0}.ui.menu .item,.ui.menu .item>a{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);vertical-align:middle;line-height:1.2em;min-height:1.25em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;-moz-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;-o-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;-ms-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;transition:opacity .1s linear,background .1s linear,box-shadow .1s linear}.ui.menu .item .header{color:rgba(50,50,50,.95)}.ui.menu .item,.ui.menu .item>a{color:rgba(80,80,80,.95)}.ui.menu .item>a:hover{background-color:rgba(0,0,0,.03);color:rgba(30,30,30,.95)}.ui.menu .item .item,.ui.menu .item .item>a{color:rgba(30,30,30,.8)}.ui.menu .item .item .item,.ui.menu .item .item .item>a{color:rgba(30,30,30,.6)}.ui.menu .dropdown.item .menu .item,.ui.menu .dropdown.item .menu .item a{color:rgba(0,0,0,.75)}.ui.menu .item .menu a.item:hover,.ui.menu .item .menu a.item.hover,.ui.menu .item .menu .link.item:hover,.ui.menu .item .menu .link.item.hover{color:rgba(35,35,35,.95)}.ui.menu .dropdown.item .menu .item a:hover{color:rgba(0,0,0,.9)}.ui.menu .item.active,.ui.menu .item.active a{color:rgba(0,0,0,.95);-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.ui.menu .item{position:relative;display:inline-block;padding:.75em .95em;-webkit-tap-highlight-color:rgba(0,0,0,0);-moz-user-select:-moz-none;-khtml-user-select:none;user-select:none}.ui.menu .item>a{display:block;margin:-.75em -.95em;padding:.75em .95em}.ui.menu .menu.left,.ui.menu .item.left{float:left}.ui.menu .menu.right,.ui.menu .item.right{float:right}.ui.menu .item:before{position:absolute;content:'';top:0;right:0;width:1px;height:100%;background-image:-webkit-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%);background-image:-moz-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%);background-image:-o-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%);background-image:-ms-linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%);background-image:linear-gradient(top,rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%)}.ui.menu .menu.right .item:before,.ui.menu .item.right:before{right:auto;left:0}.ui.menu .text.item>*,.ui.menu .item>p:only-child{line-height:1.3}.ui.menu .item>p:first-child{margin-top:0}.ui.menu .item>p:only-child{margin:0}.ui.menu .header.item{background-color:rgba(0,0,0,.15);font-weight:700;-webkit-box-shadow:0 -.1em 0 0 rgba(0,0,0,.1) inset;-moz-box-shadow:0 -.1em 0 0 rgba(0,0,0,.1) inset;box-shadow:0 -.1em 0 0 rgba(0,0,0,.1) inset}.ui.menu .dropdown.item{box-shadow:none!important;z-index:10}.ui.menu .dropdown.item .menu{overflow:hidden;height:0;width:0;position:absolute;top:100%;left:0;background-color:#FFF;opacity:0;-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;-ms-transition:opacity .2s ease-out;transition:opacity .2s ease-out;z-index:11}.ui.menu .dropdown.item .menu .item{border:0;border-top:1px solid rgba(0,0,0,.1);font-size:.9em;display:block;color:rgba(0,0,0,.75);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.menu .dropdown.item .menu .item.active{font-weight:700}.ui.menu .dropdown.item .menu .item:first-child{border-top:0}.ui.menu .dropdown.item:last-child .menu{left:auto;right:0}.ui.menu .item>.label,.ui.menu .item>a>.label{font-size:.9em;line-height:1.33;margin:-.2em .6em;padding:.2em .6em;vertical-align:top;text-transform:none}.ui.vertical.menu .item>.label,.ui.vertical.menu .item>a>.label{display:block;float:right}.ui.menu .item>img:only-child{display:block;max-width:100%;margin:0 auto}.ui.link.menu .item:hover,.ui.menu .item.hover,.ui.menu .link.item:hover,.ui.menu a.item:hover,.ui.menu .dropdown.item.hover,.ui.menu .dropdown.item:hover,.ui.menu .dropdown.item .menu .item.hover,.ui.menu .dropdown.item .menu .item:hover{cursor:pointer;background-color:rgba(0,0,0,.02)}.ui.menu .dropdown.item:hover .menu{display:block;overflow:visible;min-width:150px;width:100%;height:auto;opacity:1;border:1px solid rgba(0,0,0,.1);border-top:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}.ui.link.menu .item:active,.ui.menu .item.down,.ui.menu .link.item:active,.ui.menu a.item:active,.ui.menu .item>a:active,.ui.menu .dropdown.item .menu .item.down,.ui.menu .dropdown.item .menu .item:active{background-color:rgba(0,0,0,.05)}.ui.menu .item.active{border-top:.2em solid #999;padding-top:.55em;color:rgba(0,0,0,.95);background-color:rgba(0,0,0,.05)}.ui.vertical.menu .item.active{border-top:0;border-left:.2em solid #999;padding-top:.75em;padding-left:.75em}.ui.vertical.menu .item.active .menu .item.active{border-left:0}.ui.vertical.menu .item .menu .item.active{padding-top:.5em;padding-left:1.3em}.ui.menu .item.disabled,.ui.menu .item.disabled:hover,.ui.menu .item.disabled.hover{cursor:default;opacity:.3;background-color:transparent}.ui.inverted.menu{background-color:#333;box-shadow:none}.ui.inverted.menu .header.item{background-color:rgba(255,255,255,.15);-webkit-box-shadow:0 -.1em 0 0 rgba(255,255,255,.1) inset;-moz-box-shadow:0 -.1em 0 0 rgba(255,255,255,.1) inset;box-shadow:0 -.1em 0 0 rgba(255,255,255,.1) inset}.ui.inverted.menu .item,.ui.inverted.menu .item>a{color:#FFF}.ui.inverted.menu .item .item,.ui.inverted.menu .item .item>a{color:rgba(255,255,255,.8)}.ui.inverted.menu .item .item>a:hover{background-color:rgba(255,255,255,.03);color:rgba(255,255,255,.9)}.ui.inverted.menu .dropdown.item .menu .item,.ui.inverted.menu .dropdown.item .menu .item a{color:rgba(0,0,0,.75)}.ui.inverted.menu .item:before{background-image:-webkit-linear-gradient(top,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-moz-linear-gradient(top,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:linear-gradient(top,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%)}.ui.vertical.inverted.menu .item:before{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-moz-linear-gradient(left,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:linear-gradient(left,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%)}.ui.inverted.menu .item.down,.ui.inverted.menu .dropdown.item:active,.ui.inverted.menu .link.item:active,.ui.inverted.menu a.item:active{background-color:rgba(255,255,255,.1);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.1) inset;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.1) inset;box-shadow:1px 1px 1px rgba(0,0,0,.1) inset}.ui.link.inverted.menu .item:hover,.ui.inverted.menu .item.hover,.ui.inverted.menu .link.item:hover,.ui.inverted.menu a.item:hover,.ui.inverted.menu .dropdown.item.hover,.ui.inverted.menu .dropdown.item:hover{background-color:rgba(255,255,255,.05)}.ui.inverted.menu .item .menu a.item:hover,.ui.inverted.menu .item .menu a.item.hover,.ui.inverted.menu .item .menu .link.item:hover,.ui.inverted.menu .item .menu .link.item.hover{color:#fff}.ui.inverted.menu .item.active{border-color:transparent;background-color:rgba(255,255,255,.15)}.ui.inverted.menu .item.active,.ui.inverted.menu .item.active a{color:#fff}.ui.inverted.pointing.menu .item.active:after{background-color:#505050;box-shadow:none}.ui.inverted.pointing.menu .item.active:hover:after{background-color:#3B3B3B}.ui.grey.menu{background-color:#F0F0F0}.ui.inverted.green.menu{background-color:#A1CF64}.ui.inverted.green.pointing.menu .item.active:after{background-color:#A1CF64}.ui.inverted.red.menu{background-color:#EF4D6D}.ui.inverted.red.pointing.menu .item.active:after{background-color:#F16883}.ui.inverted.blue.menu{background-color:#6ECFF5}.ui.inverted.blue.pointing.menu .item.active:after{background-color:#6ECFF5}.ui.inverted.purple.menu{background-color:#564F8A}.ui.inverted.purple.pointing.menu .item.active:after{background-color:#564F8A}.ui.inverted.orange.menu{background-color:#F05940}.ui.inverted.orange.pointing.menu .item.active:after{background-color:#F05940}.ui.inverted.teal.menu{background-color:#00B5AD}.ui.inverted.teal.pointing.menu .item.active:after{background-color:#00B5AD}.ui.text.menu{background-color:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui.text.menu .item{opacity:.6;margin:.35em .5em;padding:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-transition:opacity .1s linear;-moz-transition:opacity .1s linear;-o-transition:opacity .1s linear;-ms-transition:opacity .1s linear;transition:opacity .1s linear}.ui.text.menu .item:before{display:none}.ui.text.menu .header.item{background-color:transparent;margin:0 .5em 0 0;padding:.35em .5em;opacity:1;color:rgba(50,50,50,.8);font-size:.9rem;text-transform:uppercase;font-weight:700}.ui.fluid.text.menu{margin:0}.ui.vertical.text.menu .item{float:left;clear:left}.ui.vertical.text.menu .header.item{margin:0 0 .5em;padding:.35em .5em}.ui.text.menu .item.hover,.ui.text.menu .item:hover{opacity:1;background-color:transparent}.ui.text.menu .active.item{background-color:transparent;padding:0;border:0;opacity:1;font-weight:700}.ui.text.pointing.menu item.active:after{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui.text.attached.menu{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui.basic.menu{background-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui.basic.menu .item{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui.basic.menu .item:before{display:none}.ui.basic.pointing.menu item.active:after{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui.basic.attached.menu{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui.icon.menu,.ui.vertical.icon.menu{width:auto;display:inline-block;min-height:0}.ui.icon.menu .item{text-align:center;color:rgba(60,60,60,.7)}.ui.icon.menu .icon{display:block;margin:0 auto;color:#3c3c3c}.ui.icon.menu .icon:before{opacity:1}.ui.inverted.icon.menu .item{color:rgba(255,255,255,.8)}.ui.inverted.icon.menu .icon{color:#fff}.ui.labeled.icon.menu{text-align:center}.ui.labeled.icon.menu .icon{display:block;font-size:1.5em;margin:0 auto .3em}.ui.vertical.menu .item{display:block;border-left:0;border-right:0}.ui.vertical.menu>.item:first-child{border-radius:.325em .325em 0 0}.ui.vertical.menu>.item:last-child{border-radius:0 0 .325em .325em}.ui.vertical.menu .item:before{position:absolute;content:'';top:0;left:0;width:100%;height:1px;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%);background-image:-moz-linear-gradient(left,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%);background-image:-ms-linear-gradient(left,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%);background-image:linear-gradient(left,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%)}.ui.vertical.menu .item:first-child:before{background-image:none}.ui.vertical.menu .dropdown.item>i{float:right}.ui.vertical.menu .dropdown.item .menu{width:auto;top:0;left:100%;margin:0 0 0 1px;-moz-border-radius:0 5px 5px 0;-webkit-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0;border-left:0;border:1px solid rgba(0,0,0,.1);font-size:1em}.ui.vertical.menu .dropdown.item .menu .item{font-size:1em}.ui.vertical.menu .item>.menu{margin:.5em -1em 0}.ui.vertical.menu .item>.menu>.item>.icon{margin-right:.7em}.ui.vertical.menu .item>.menu>.item{padding:.5em 1.5em;font-size:.85em}.ui.vertical.menu .item>.menu>.item:before{display:none}.ui.vertical.menu .item>.menu>.item>a{margin:-.5em -1.5em;padding:.5em 1.5em}.ui.fitted.menu .item,.ui.fitted.menu .item>a,.ui.fitted.menu .item .menu .item,.ui.fitted.menu .item .menu .item>a,.ui.menu .fitted.item,.ui.menu .fitted.item>a{padding-top:0;padding-bottom:0}.ui.tight.menu .item,.ui.tight.menu .item>a,.ui.tight.menu .item .menu .item,.ui.tight.menu .item .menu .item>a,.ui.menu .tight.item,.ui.menu .tight.item>a{padding:0}.ui.borderless.menu .item:before,.ui.borderless.menu .item>a:before,.ui.borderless.menu .item .menu .item:before,.ui.borderless.menu .item .menu .item>a:before,.ui.menu .borderless.item:before,.ui.menu .borderless.item>a:before{background-image:none}.ui.compact.menu{display:inline-block}.ui.vertical.compact.menu{width:auto!important}.ui.menu.fluid,.ui.vertical.menu.fluid{width:100%}.ui.item.menu,.ui.item.menu .item{width:100%;padding-left:0!important;padding-right:0!important;text-align:center}.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.5%}.ui.menu.nine.item .item{width:11.11%}.ui.menu.ten.item .item{width:10%}.ui.menu.eleven.item .item{width:9.09%}.ui.menu.twelve.item .item{width:8.333%}.ui.menu.fixed{position:fixed;z-index:10;width:100%;border:0}.ui.menu.fixed,.ui.menu.fixed .item:first-child,.ui.menu.fixed .item:last-child{-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}.ui.menu.fixed.top{top:0;left:0;right:auto;bottom:auto}.ui.menu.fixed.right{top:0;right:0;left:auto;bottom:auto;width:auto;height:100%}.ui.menu.fixed.bottom{bottom:0;left:0;top:auto;right:auto}.ui.menu.fixed.left{top:0;left:0;right:auto;bottom:auto;width:auto;height:100%}.ui.pointing.menu .item.active:after{position:absolute;bottom:-.35em;left:50%;content:"";margin-left:-.3em;width:.6em;height:.6em;border:0;border-bottom:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;-o-transition:background .1s linear;-ms-transition:background .1s linear;transition:background .1s linear}.ui.vertical.pointing.menu .item.active:after{position:absolute;top:50%;right:-.4em;bottom:auto;left:auto;border:0;border-top:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);margin-top:-.3em}.ui.pointing.menu .item.active:after{background-color:#F3F3F3}.ui.pointing.menu .item.active.hover:after,.ui.pointing.menu .item.active:hover:after{background-color:#FAFAFA}.ui.pointing.menu .item.active.down:after,.ui.pointing.menu .item.active:active:after{background-color:#F0F0F0}.ui.menu.attached{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-moz-box-shadow:0 0 0 1px #DDD;-webkit-box-shadow:0 0 0 1px #DDD;box-shadow:0 0 0 1px #DDD}.ui.top.attached.menu{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.ui.menu.bottom.attached{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.ui.menu .dynamic.dropdown.item:hover .menu{display:none}.ui.menu .dynamic.dropdown.item.hover .menu{display:block}.ui.small.menu .item{font-size:.875rem;min-height:1.2em}.ui.small.vertical.menu{width:13rem}.ui.menu .item{font-size:1rem}.ui.vertical.menu{width:15rem}.ui.large.menu .item{font-size:1.125rem;min-height:1.35em}.ui.large.vertical.menu{width:18rem}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/collections/message.min.css b/node/src/files/components/semantic/minified/collections/message.min.css
deleted file mode 100644
index 45370398e..000000000
--- a/node/src/files/components/semantic/minified/collections/message.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.message{position:relative;min-height:18px;margin:1em 0;height:auto;background-color:rgba(0,0,0,.04);padding:1em;line-height:1.33;color:rgba(0,0,0,.6);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.ui.message .header{font-size:1.33em;font-weight:700}.ui.message p{opacity:.85;margin:1em 0}.ui.message p:first-child{margin-top:0}.ui.message ul.list{opacity:.85;list-style-position:inside;margin:.2em 0;padding:0}.ui.message ul.list li{position:relative;list-style-type:none;font-style:italic;margin:0 0 0 1em;padding:0}.ui.message ul.list li:before{position:absolute;content:'\2022';top:-.05em;left:-.8em;height:100%;vertical-align:baseline;opacity:.5}.ui.message ul.list li:first-child{margin-top:0}.ui.message>.icon.close{cursor:pointer;position:absolute;top:1em;right:.5em;opacity:.7;-webkit-transition:opacity .1s linear;-moz-transition:opacity .1s linear;-o-transition:opacity .1s linear;-ms-transition:opacity .1s linear;transition:opacity .1s linear}.ui.message>.icon.close:hover{opacity:1}.ui.message.visible,.ui.header.visible{display:block!important}.ui.message.hidden,.ui.header.hidden{display:none}.ui.compact.message{display:inline-block}.ui.attached.message{margin-bottom:0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;-webkit-box-shadow:0 0 0 1px #DDD;-moz-box-shadow:0 0 0 1px #DDD;box-shadow:0 0 0 1px #DDD}.ui.bottom.attached.message{margin-top:0;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;-webkit-box-shadow:0 0 0 1px #DDD;-moz-box-shadow:0 0 0 1px #DDD;box-shadow:0 0 0 1px #DDD}.ui.icon.message>.icon{display:table-cell;vertical-align:middle;font-size:3.8em;padding-right:.4em;opacity:.2}.ui.icon.message>.content{display:table-cell;vertical-align:middle}.ui.inverted.message{background-color:rgba(255,255,255,.05);color:rgba(255,255,255,.95)}.ui.black.message{background-color:#333;color:rgba(255,255,255,.95)}.ui.blue.message,.ui.info.message{border-color:#75C9E9;background-color:#E9F9FF;color:#1D6582}.ui.green.message,.ui.success.message,.ui.positive.message{background-color:#EEFFE9;color:#119000;border-color:#2FCB05}.ui.yellow.message,.ui.warning.message{background-color:#F6F3D5;border-color:#CBB105;color:#AF9801}.ui.red.message,.ui.error.message,.ui.negative.message{background-color:#F1D7D7;color:#AD0000;border-color:#B06C6C}.ui.small.message{font-size:.875em}.ui.message{font-size:1em}.ui.large.message{font-size:1.125em}.ui.huge.message{font-size:1.5em}.ui.massive.message{font-size:2px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/collections/table.min.css b/node/src/files/components/semantic/minified/collections/table.min.css
deleted file mode 100644
index eee4bd83b..000000000
--- a/node/src/files/components/semantic/minified/collections/table.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.table{width:100%;background-color:#FFF;border-collapse:collapse;color:#444;color:rgba(0,0,0,.75);border:1px solid #DDD}.ui.table tr,.ui.table td{border-collapse:collapse;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all .1s ease-out;-moz-transition:all .1s ease-out;-o-transition:all .1s ease-out;-ms-transition:all .1s ease-out;transition:all .1s ease-out}.ui.table thead{border-bottom:1px solid rgba(0,0,0,.1);background-color:rgba(50,50,50,.1)}.ui.table th{cursor:auto;text-align:left;font-weight:700;color:rgba(80,80,80,.85);padding:.5em .7em;vertical-align:middle}.ui.table tfoot th{font-weight:400;font-style:italic;color:rgba(0,0,0,.8)}.ui.table td{padding:.4em .7em;vertical-align:middle}.ui.table tfoot th{background-color:#FFF}.ui.table tfoot{border-top:1px dotted rgba(0,0,0,.1)}.ui.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.03)}.ui.table>.icon{vertical-align:baseline}.ui.table>.icon:only-child{margin:0}.ui.celled.table tr:hover td{background-color:rgba(0,0,0,.02);color:#000}.ui.sortable.table thead th:hover{background-image:none;background-color:rgba(0,0,0,.04);color:#333}.ui.sortable.table th.disabled:hover{cursor:auto;background-color:rgba(0,0,0,.1);text-align:left;font-weight:700;color:#333;color:rgba(0,0,0,.8)}.ui.table tr.positive td,.ui.table td.positive{background-color:#F2F8F0!important;color:#119000;-moz-box-shadow:0 0 1px 0 #3FF63B inset;-webkit-box-shadow:0 0 1px 0 #3FF63B inset;box-shadow:0 0 1px 0 #3FF63B inset}.ui.celled.table tr.positive:hover td,.ui.celled.table tr:hover td.positive,.ui.table tr.positive:hover td,.ui.table td:hover.positive,.ui.table th:hover.positive{background-color:#ECF5E9!important;color:#119000}.ui.table tr.negative td,.ui.table td.negative{background-color:#F9F4F4;color:#CD2929}.ui.celled.table tr.negative:hover td,.ui.celled.table tr:hover td.negative,.ui.table tr.negative:hover td,.ui.table td:hover.negative,.ui.table th:hover.negative{background-color:#F2E8E8!important;color:#CD2929}.ui.table tr.error td,.ui.table td.error,.ui.table th.error{background-color:#F9F4F4!important;color:#CD2929;-moz-box-shadow:0 0 1px 0 #F3A2A2 inset;-webkit-box-shadow:0 0 1px 0 #F3A2A2 inset;box-shadow:0 0 1px 0 #F3A2A2 inset}.ui.celled.table tr.error:hover td,.ui.celled.table tr:hover td.error,.ui.table tr.error:hover td,.ui.table td:hover.error,.ui.table th:hover.error{background-color:#F2E8E8!important;color:#CD2929}.ui.table tr.warning td,.ui.table td.warning,.ui.table th.warning{background-color:#FBF6E9;color:#7D6C00;-moz-box-shadow:0 0 1px 0 #FFE569 inset;-webkit-box-shadow:0 0 1px 0 #FFE569 inset;box-shadow:0 0 1px 0 #FFE569 inset}.ui.celled.table tr.warning:hover td,.ui.celled.table tr:hover td.warning,.ui.table tr.warning:hover td,.ui.table td:hover.warning,.ui.table th:hover.warning{background-color:#F3EDDC!important;color:#7D6C00}.ui.table tr.active td,.ui.table tr td.active{background-color:#F0F0F0!important;color:rgba(50,50,50,.9)}.ui.table tr.disabled td,.ui.table tr td.disabled,.ui.table tr.disabled:hover td,.ui.table tr:hover td.disabled{background-color:#FAFAFA!important;color:rgba(150,150,150,.5)}.ui.celled.table{color:rgba(25,25,25,.9)}.ui.celled.table tbody tr,.ui.celled.table tfoot tr{border:0}.ui.celled.table th{border:1px solid #E0E0E0}.ui.celled.table tbody td{border:1px solid #E0E0E0}.ui.sortable.table thead th{cursor:pointer;color:#555;vertical-align:top}.ui.sortable.table thead th.sorted,.ui.sortable.table thead th.sorted:hover{background-color:rgba(0,0,0,.8);color:#EEE}.ui.sortable.table thead th:after{display:inline-block;content:'';width:1em;opacity:.5;margin:0 0 0 8px;font-size:18px;line-height:12px;font-family:Icons;font-style:normal;font-weight:400;text-decoration:inherit;vertical-align:middle;vertical-align:calc()}.ui.sortable.table thead th.ascending:after{content:'\25b4'}.ui.sortable.table thead th.descending:after{content:'\25be'}.ui.collapsing.table{width:auto}.ui.padded.table th,.ui.padded.table td{padding:.8em 1em}.ui.compact.table th{padding:.3em .5em}.ui.compact.table td{padding:.2em .5em}.ui.small.table{font-size:14px}.ui.table{font-size:16px}.ui.large.table{font-size:18px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/banner.min.css b/node/src/files/components/semantic/minified/elements/banner.min.css
deleted file mode 100644
index f23e7278b..000000000
--- a/node/src/files/components/semantic/minified/elements/banner.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.banner{position:relative;display:inline-block;vertical-align:middle;line-height:1;margin-left:6px;padding:8px 10px;border:1px solid #D4DBDE;background-color:#ECF6FB;text-align:center;font-size:10px;color:#999;color:rgba(0,0,0,.5)}.ui.banner b{color:#666}.ui.banner:after{position:absolute;top:50%;margin-top:-6px;font-size:12px}.ui.banner:after,.ui.banner.left:after{color:#ECF6FB;left:-7px;right:auto;content:'\25C0';text-shadow:-2px 0 0 #d4dbde}.ui.banner.right{margin-right:6px}.ui.banner.right:after{left:auto;right:-7px;content:'\25B6';text-shadow:2px 0 0 #D4DBDE}.ui.banner i{margin-right:.5em;vertical-align:baseline}.ui.banner.grey{border-color:#D6D6D6;background-color:#F3F3F3}.ui.banner.grey:after,.ui.banner.grey.left:after{color:#F3F3F3;text-shadow:-2px 0 0 #d6d6d6}.ui.banner.grey.right:after{color:#F3F3F3;text-shadow:2px 0 0 #D6D6D6}.ui.banner.big{font-size:12px;padding:11px 15px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/button.min.css b/node/src/files/components/semantic/minified/elements/button.min.css
deleted file mode 100644
index 580b7ab7d..000000000
--- a/node/src/files/components/semantic/minified/elements/button.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.button{cursor:pointer;display:inline-block;vertical-align:middle;min-height:1em;background-color:#F0F0F0;padding:.8em 1.5em;font-size:1rem;text-transform:uppercase;line-height:1;font-weight:700;font-style:normal;text-align:center;color:#7A7A7A;-webkit-border-radius:.3125em;-moz-border-radius:.3125em;border-radius:.3125em;-webkit-box-shadow:0 -.125em 0 rgba(0,0,0,.1) inset;-moz-box-shadow:0 -.125em 0 rgba(0,0,0,.1) inset;box-shadow:0 -.125em 0 rgba(0,0,0,.1) inset;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;-moz-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;-o-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;-ms-transition:opacity .1s linear,background .1s linear,box-shadow .1s linear;transition:opacity .1s linear,background .1s linear,box-shadow .1s linear}.ui.button:hover,.ui.button.hover{background-color:#E0E0E0}.ui.button:active,.ui.button.down{background-color:#DDD;-webkit-box-shadow:.125em .125em .125em 0 rgba(0,0,0,.1) inset;-moz-box-shadow:.125em .125em .125em 0 rgba(0,0,0,.1) inset;box-shadow:.125em .125em .125em 0 rgba(0,0,0,.1) inset}.ui.buttons .button.active,.ui.button.active{background-color:#E6E6E6;-webkit-box-shadow:0 .125em .125em 0 rgba(0,0,0,.15) inset;-moz-box-shadow:0 .125em .125em 0 rgba(0,0,0,.15) inset;box-shadow:0 .125em .125em 0 rgba(0,0,0,.15) inset}.ui.buttons .button.active,.ui.buttons .button.active a,.ui.button.active,.ui.button.active a{color:#7A7A7A}.ui.buttons .button.active.hover,.ui.button.active.hover{background:#E0E0E0;-webkit-box-shadow:0 .0625 .1875em 0 rgba(0,0,0,.2) inset;-moz-box-shadow:0 .0625 .1875em 0 rgba(0,0,0,.2) inset;box-shadow:0 .0625 .1875em 0 rgba(0,0,0,.2) inset}.ui.buttons .button.active.hover,.ui.buttons .button.active.hover a,.ui.button.active.hover,.ui.button.active.hover a{background:#DADADA;color:#555}.ui.button.loading,.ui.button.loading.hover{position:relative;cursor:default;opacity:.75;color:#888!important;background-image:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important;-webkit-transition:all 0s linear;-moz-transition:all 0s linear;-o-transition:all 0s linear;-ms-transition:all 0s linear;transition:all 0s linear}.ui.button.loading:after{position:absolute;top:0;left:0;width:100%;height:100%;content:'';background:#eee url(../images/throbber-tiny.gif) no-repeat 50% 50%;background-position:50% 50%;background-repeat:no-repeat;-moz-border-radius:.2em;-webkit-border-radius:.2em;border-radius:.2em}.ui.grey.button.loading,.ui.button.active.loading{border-color:#bbb}.ui.grey.button.loading:after,.ui.button.active.loading:after{background-color:#FAFAFA;background:url(../images/throbber-tiny.gif) no-repeat 50% 50%}.ui.huge.button.loading:after{background-image:url(../images/throbber-small.gif)}.ui.massive.buttons .button.loading:after,.ui.gigantic.buttons .button.loading:after,.ui.massive.button.loading:after,.ui.gigantic.button.loading:after{background-image:url(../images/throbber-medium.gif)}.ui.huge.grey.button.loading:after,.ui.huge.button.loading.active:after{background-image:url(../images/throbber-small.gif)}.ui.massive.grey.buttons .button.loading:after,.ui.gigantic.grey.buttons .button.loading:after,.ui.massive.grey.button.loading:after,.ui.gigantic.grey.button.loading:after,.ui.massive.grey.buttons .button.loading.active:after,.ui.gigantic.grey.buttons .button.loading.active:after,.ui.massive.button.loading.active:after,.ui.gigantic.button.loading.active:after{background-image:url(../images/throbber-medium.gif)}.ui.buttons .button.error,.ui.buttons .button.error.hover,.ui.buttons .button.error.down,.ui.button.error,.ui.button.error.hover,.ui.button.error.down{cursor:default;position:relative;background-color:#EE141D;color:#FFF;text-shadow:none;-webkit-transition:all 0s linear;-moz-transition:all 0s linear;-o-transition:all 0s linear;-ms-transition:all 0s linear;transition:all 0s linear}.ui.button.success,.ui.button.success.hover,.ui.button.success.down{background-color:#59B94B;color:#FFF;border-color:#588D0F}.ui.button.disabled,.ui.button.disabled.hover,.ui.button.disabled.down{cursor:default;color:#DDD;background-color:rgba(50,50,50,.05)!important;background-image:none!important;text-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important}.ui.buttons.black .button,.ui.button.black{background-color:#5C6166;color:#FFF}.ui.buttons.black .button.hover,.ui.buttons.black .button:hover,.ui.button.black.hover,.ui.button.black:hover{background-color:#888;color:#FFF}.ui.buttons.black .button.down,.ui.buttons.black .button:active,.ui.button.black.down,.ui.button.black:active{background-color:#888;color:#FFF}.ui.buttons.green .button,.ui.button.green{background-color:#A1CF64;color:#FFF}.ui.buttons.green .button.hover,.ui.buttons.green .button:hover,.ui.button.green.hover,.ui.button.green:hover{background-color:#89B84C;color:#FFF}.ui.buttons.green .button.down,.ui.buttons.green .button:active,.ui.button.green.down,.ui.button.green:active{background-color:#89B84C;color:#FFF}.ui.buttons.red .button,.ui.button.red{background-color:#EF4D6D;color:#FFF}.ui.buttons.red .button.hover,.ui.buttons.red .button:hover,.ui.button.red.hover,.ui.button.red:hover{background-color:#DE3859;color:#FFF}.ui.buttons.red .button.down,.ui.buttons.red .button:active,.ui.button.red.down,.ui.button.red:active{background-color:#DE3859;color:#FFF}.ui.buttons.blue .button,.ui.button.blue{background-color:#6ECFF5;color:#FFF}.ui.buttons.blue .button.hover,.ui.buttons.blue .button:hover,.ui.button.blue.hover,.ui.button.blue:hover{background-color:#1AB8F3;color:#FFF}.ui.buttons.blue .button.down,.ui.buttons.blue .button:active,.ui.button.blue.down,.ui.button.blue:active{background-color:#1AB8F3;color:#FFF}.ui.buttons.purple .button,.ui.button.purple{background-color:#564F8A;color:#FFF}.ui.buttons.purple .button.hover,.ui.buttons.purple .button:hover,.ui.button.purple.hover,.ui.button.purple:hover{background-color:#3E3773;color:#FFF}.ui.buttons.purple .button.down,.ui.buttons.purple .button:active,.ui.button.purple.down,.ui.button.purple:active{background-color:#3E3773;color:#FFF}.ui.buttons.teal .button,.ui.button.teal{background-color:#00B5AD;color:#FFF}.ui.buttons.teal .button.hover,.ui.buttons.teal .button:hover,.ui.button.teal.hover,.ui.button.teal:hover{background-color:#009A93;color:#FFF}.ui.buttons.teal .button.down,.ui.buttons.teal .button:active,.ui.button.teal.down,.ui.button.teal:active{background-color:#009A93;color:#FFF}.ui.buttons.positive .button,.ui.button.positive{background-color:#A1CF64;color:#FFF}.ui.buttons.positive .button.hover,.ui.buttons.positive .button:hover,.ui.button.positive.hover,.ui.button.positive:hover{background-color:#7DDC5C;color:#FFF}.ui.buttons.positive .button.down,.ui.buttons.positive .button:active,.ui.button.positive.down,.ui.button.positive:active{background-color:#7DDC5C;color:#FFF}.ui.buttons.negative .button,.ui.button.negative{background-color:#EF4D6D;color:#FFF}.ui.buttons.negative .button.hover,.ui.buttons.negative .button:hover,.ui.button.negative.hover,.ui.button.negative:hover{background-color:#DE3859;color:#FFF}.ui.buttons.negative .button.down,.ui.buttons.negative .button:active,.ui.button.negative.down,.ui.button.negative:active{background-color:#DE3859;color:#FFF}.ui.buttons.mini .button,.ui.mini.button{font-size:.5625rem}.ui.tiny.buttons .button,.ui.tiny.button{font-size:.625rem}.ui.small.buttons .button,.ui.small.button{font-size:.75rem}.ui.buttons .button,.ui.button{font-size:1rem}.ui.large.buttons .button,.ui.large.button{font-size:1.125rem}.ui.big.buttons .button,.ui.big.button{font-size:1.25rem}.ui.huge.buttons .button,.ui.huge.button{font-size:1.375rem}.ui.massive.buttons .button,.ui.massive.button{font-size:1.5rem;font-weight:700}.ui.gigantic.buttons .button,.ui.gigantic.button{font-size:2rem;font-weight:700}.ui.button i{line-height:1;margin-right:.2em}.ui.button i.icon.left,.ui.button i.icon.left-open,.ui.button i.icon.left-dir{margin:0 .2em}.ui.button i.icon.up,.ui.button i.icon.up-open,.ui.button i.icon.up-dir,.ui.button i.icon.down,.ui.button i.icon.down-open,.ui.button i.icon.down-dir,.ui.button i.icon.right,.ui.button i.icon.right-open,.ui.button i.icon.right-dir{margin:0}.ui.icon.buttons .button,.ui.icon.button{padding:.75em}.ui.icon.buttons .button i,.ui.icon.button i{margin:0;vertical-align:top}.ui.labeled.icon.buttons .button .icon,.ui.labeled.icon.button .icon{display:block;font-size:1.5em;margin:0 auto .3em}.ui.toggle.buttons .button.active,.ui.buttons .button.toggle.active,.ui.button.toggle.active{background-color:#BBF0A9;color:#1C8C21}.ui.buttons.toggle .ui.button.active.hover,.ui.buttons .ui.button.toggle.active.hover,.ui.button.toggle.active.hover{color:#21A627;background-color:#BBF0A9;-webkit-box-shadow:0 0 4px -2px rgba(0,0,0,.2) inset;-moz-box-shadow:0 0 4px -2px rgba(0,0,0,.2) inset;box-shadow:0 0 4px -2px rgba(0,0,0,.2) inset}.ui.button.toggle.active.hover.down{background-color:#BBF0A9;color:#21A627;-webkit-box-shadow:0 1px 3px 0 rgba(67,97,53,.5) inset;-moz-box-shadow:0 1px 3px 0 rgba(67,97,53,.5) inset;box-shadow:0 1px 3px 0 rgba(67,97,53,.5) inset}.ui.button.bubbly{-webkit-border-radius:1em;-moz-border-radius:1em;border-radius:1em}.ui.button.attached{display:block}.ui.button.attached.top{border:1px solid rgba(0,0,0,.1);border-bottom:0;-webkit-border-radius:.3125em .3125em 0 0;-moz-border-radius:.3125em .3125em 0 0;border-radius:.3125em .3125em 0 0}.ui.button.attached.bottom{border:1px solid rgba(0,0,0,.1);border-top:0;-webkit-border-radius:0 0 .3125em .3125em;-moz-border-radius:0 0 .3125em .3125em;border-radius:0 0 .3125em .3125em}.ui.button.attached.left{display:inline-block;border-left:0;padding-right:.75em;text-align:right;border-right:1px solid rgba(0,0,0,.1);-webkit-border-radius:.3125em 0 0 .3125em;-moz-border-radius:.3125em 0 0 .3125em;border-radius:.3125em 0 0 .3125em}.ui.button.attached.right{display:inline-block;padding-left:.75em;text-align:left;border-left:1px solid rgba(0,0,0,.1);-webkit-border-radius:0 .3125em .3125em 0;-moz-border-radius:0 .3125em .3125em 0;border-radius:0 .3125em .3125em 0}input+.ui.attached.button{display:inline-block;margin:0 0 0 -1em;padding:.68em 1em;vertical-align:top;font-size:.825em;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset;-moz-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset;-webkit-border-radius:0 .3125em .3125em 0;-moz-border-radius:0 .3125em .3125em 0;border-radius:0 .3125em .3125em 0}input:focus+.ui.attached.button{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.3) inset;-moz-box-shadow:0 0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 0 1px rgba(0,0,0,.3) inset}.ui.attached.button.loading,.ui.attached.button.loading.hover{opacity:1}.ui.buttons{overflow:hidden}.ui.buttons .button{float:left;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-left:1px solid rgba(0,0,0,.05)}.ui.buttons .button:first-child{margin-left:0;border-top-left-radius:.3125em;border-bottom-left-radius:.3125em}.ui.buttons .button:last-child{border-top-right-radius:.3125em;border-bottom-right-radius:.3125em}.ui.buttons.vertical{display:inline-block}.ui.buttons.vertical .button{display:block;float:none;border-bottom:1px solid rgba(0,0,0,.05);border-left:0;box-shadow:none}.ui.buttons.vertical .button:first-child,.ui.buttons.vertical .mini.button:first-child,.ui.buttons.vertical .tiny.button:first-child,.ui.buttons.vertical .small.button:first-child,.ui.buttons.vertical .massive.button:first-child,.ui.buttons.vertical .huge.button:first-child,.ui.buttons.vertical .gigantic.button:first-child{margin-top:0;-moz-border-radius:.3125em .3125em 0 0;-webkit-border-radius:.3125em .3125em 0 0;border-radius:.3125em .3125em 0 0}.ui.buttons.vertical .button:last-child,.ui.buttons.vertical .mini.button:last-child,.ui.buttons.vertical .tiny.button:last-child,.ui.buttons.vertical .small.button:last-child,.ui.buttons.vertical .massive.button:last-child,.ui.buttons.vertical .huge.button:last-child,.ui.buttons.vertical .gigantic.button:last-child{-moz-border-radius:0 0 .3125em .3125em;-webkit-border-radius:0 0 .3125em .3125em;border-radius:0 0 .3125em .3125em}.ui.buttons .or{position:relative;float:left;width:.3em;height:1em}.ui.buttons .or:before{position:absolute;top:50%;left:50%;content:'or';background-color:#FFF;margin-top:-.15em;margin-left:-.9em;width:1.8em;height:1.8em;line-height:1.66;color:#AAA;font-style:normal;font-weight:400;text-align:center;-moz-box-shadow:0 2px 1px 0 rgba(0,0,0,.2) inset;-webkit-box-shadow:0 2px 1px 0 rgba(0,0,0,.2) inset;box-shadow:0 2px 1px 0 rgba(0,0,0,.2) inset;-moz-border-radius:500px;-webkit-border-radius:500px;border-radius:500px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.buttons .or:after{position:absolute;top:0;left:0;content:' ';width:.3em;height:1.8em;background-color:transparent;border-top:.6em solid #FFF;border-bottom:.6em solid #FFF}.ui.fluid.buttons .or{width:0!important}.ui.fluid.buttons .or:after{display:none}.attached.ui.buttons{margin:0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.attached.ui.buttons .button:first-child{-webkit-border-radius:4px 0 0;-moz-border-radius:4px 0 0;border-radius:4px 0 0}.attached.ui.buttons .button:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0}.bottom.attached.ui.buttons{margin-top:-1px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.bottom.attached.ui.buttons .button:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px}.bottom.attached.ui.buttons .button:last-child{-webkit-border-radius:0 0 4px;-moz-border-radius:0 0 4px;border-radius:0 0 4px}.left.attached.ui.buttons{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.left.attached.ui.buttons .button:first-child{margin-left:-1px;-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0}.left.attached.ui.buttons .button:last-child{margin-left:-1px;-webkit-border-radius:0 0 4px;-moz-border-radius:0 0 4px;border-radius:0 0 4px}.right.attached.ui.buttons,.right.attached.ui.buttons .button{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.right.attached.ui.buttons .button:first-child{margin-left:-1px;-webkit-border-radius:4px 0 0;-moz-border-radius:4px 0 0;border-radius:4px 0 0}.right.attached.ui.buttons .button:last-child{margin-left:-1px;-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px}.ui.fluid.buttons,.ui.button.fluid,.ui.fluid.buttons>.button{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.two.fluid.buttons>.button{width:50%}.ui.three.fluid.buttons>.button{width:33.333%}.ui.four.fluid.buttons>.button{width:25%}.ui.five.fluid.buttons>.button{width:20%}.ui.six.fluid.buttons>.button{width:16.666%}.ui.seven.fluid.buttons>.button{width:14.285%}.ui.eight.fluid.buttons>.button{width:12.5%}.ui.nine.fluid.buttons>.button{width:11.11%}.ui.ten.fluid.buttons>.button{width:10%}.ui.eleven.fluid.buttons>.button{width:9.09%}.ui.twelve.fluid.buttons>.button{width:8.3333%}.ui.fluid.vertical.buttons,.ui.fluid.vertical.buttons>.button{width:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.two.fluid.buttons>.button{height:50%}.ui.three.fluid.buttons>.button{height:33.333%}.ui.four.fluid.buttons>.button{height:25%}.ui.five.fluid.buttons>.button{height:20%}.ui.six.fluid.buttons>.button{height:16.666%}.ui.seven.fluid.buttons>.button{height:14.285%}.ui.eight.fluid.buttons>.button{height:12.5%}.ui.nine.fluid.buttons>.button{height:11.11%}.ui.ten.fluid.buttons>.button{height:10%}.ui.eleven.fluid.buttons>.button{height:9.09%}.ui.twelve.fluid.buttons>.button{height:8.3333%}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/divider.min.css b/node/src/files/components/semantic/minified/elements/divider.min.css
deleted file mode 100644
index 7c9c0cd90..000000000
--- a/node/src/files/components/semantic/minified/elements/divider.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.divider{margin:1em 0;height:1px;background-color:rgba(0,0,0,.1);border-top:0;border-bottom:1px solid rgba(255,255,255,.8)}.ui.vertical.divider,.ui.horizontal.divider{position:relative;margin:25px 0 10px;font-size:14px;line-height:14px;text-align:center;text-transform:uppercase;text-shadow:0 1px 0 rgba(255,255,255,.8);color:#555;font-weight:700}.ui.divider .rule{position:absolute;top:6px;width:45%;height:1px;background-color:#ADADAD;background-color:rgba(0,0,0,.1);border-bottom:1px solid #F8F8F8;border-bottom:1px solid rgba(255,255,255,.9)}.ui.divider .left.rule{left:0}.ui.divider .right.rule{right:0}.ui.divider .label{display:block;margin:14px 0 0;text-transform:none;color:#333}.vertical.ui.divider{position:absolute;top:0;left:50%;height:100%;margin:0 0 0 -50px;min-width:100px;color:#555;font-weight:700}.vertical.ui.divider .rule{position:absolute;left:50%;width:1px;height:45%;background-color:#ADADAD;background-color:rgba(0,0,0,.2);border-right:1px solid #F8F8F8;border-right:1px solid rgba(255,255,255,.9)}.vertical.ui.divider .top.rule{top:0}.vertical.ui.divider .bottom.rule{top:auto;bottom:0}.vertical.ui.divider .label{position:relative;top:50%;margin-top:-7px;display:block;width:100%;font-size:14px;line-height:14px;text-align:center;text-shadow:0 1px 0 rgba(255,255,255,.8);text-transform:none;color:#333}.ui.divider.inverted{text-shadow:0 1px 0 rgba(0,0,0,.8);color:#FFF}.ui.divider.inverted .rule{border-color:#4A4A4A;border-color:rgba(255,255,255,.2)}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/flags.min.css b/node/src/files/components/semantic/minified/elements/flags.min.css
deleted file mode 100644
index db351de31..000000000
--- a/node/src/files/components/semantic/minified/elements/flags.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.notification.hidden{display:none}.ui.notification{position:absolute;top:0;right:0;background-color:#EEE;padding:3px 5px;background:-webkit-linear-gradient(top,#fff 0,#ddd 100%);background:-moz-linear-gradient(top,#fff 0,#ddd 100%);background:-o-linear-gradient(top,#fff 0,#ddd 100%);background:-ms-linear-gradient(top,#fff 0,#ddd 100%);background:linear-gradient(top,#fff 0,#ddd 100%);border:1px solid #DDD;border-radius:5px;box-shadow:1px 1px 1px rgba(0,0,0,.3),0 1px 0 rgba(255,255,255,.6) inset;font-size:11px;line-height:1;text-transform:uppercase;color:#555;z-index:100}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/footnote.min.css b/node/src/files/components/semantic/minified/elements/footnote.min.css
deleted file mode 100644
index d04a44993..000000000
--- a/node/src/files/components/semantic/minified/elements/footnote.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.footnote{position:absolute;right:0;margin-right:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAECAIAAABEEOcGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEYyQzdFNjZGQjhBMTFFMTgzQzJFN0E3NEFBRTJEOTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEYyQzdFNjdGQjhBMTFFMTgzQzJFN0E3NEFBRTJEOTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4RjJDN0U2NEZCOEExMUUxODNDMkU3QTc0QUFFMkQ5NCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4RjJDN0U2NUZCOEExMUUxODNDMkU3QTc0QUFFMkQ5NCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhEaqvMAAABcSURBVHjaYvnw9PXdY1fu7DkvsfG9/AsOhlEwCqgBWHhEBRRMNXk3vhB4/Y9pNDxGAbUS1s/777/EbWE7+fLbaGCMAiomrG+/vn8TYhRiZmP+yzgaHKOAWgAgwAC5ghtNGOU2wgAAAABJRU5ErkJggg==);background-repeat:repeat-y;background-position:0 0;font-weight:700;text-transform:uppercase;color:#FFF}.ui.footnote.right{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAAECAIAAABEEOcGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUIwQzNFNTc3NTYwMTFFMjk1QzNCN0YzRjhERkM1RkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUIwQzNFNTg3NTYwMTFFMjk1QzNCN0YzRjhERkM1RkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QjBDM0U1NTc1NjAxMUUyOTVDM0I3RjNGOERGQzVGRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QjBDM0U1Njc1NjAxMUUyOTVDM0I3RjNGOERGQzVGRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpXH9FAAAABeSURBVHjaYnzA0MowCkYBNcBDiR8v/AVVXAyVrXRYeBjYR0NkFFAFaL5ml/wqKWyqySMqwPKF4edoiIwC6oC/DGxL7n25/ZVjkd9oiTUKqJq0mP+/E2L89us7QIABAIrfFu2AX0jvAAAAAElFTkSuQmCC);background-position:right top;padding:10px 15px 10px 5px;left:0;right:auto;margin-left:100%}.ui.footnote{padding:10px 5px 10px 15px;font-size:14px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/header.min.css b/node/src/files/components/semantic/minified/elements/header.min.css
deleted file mode 100644
index d4e10e243..000000000
--- a/node/src/files/components/semantic/minified/elements/header.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.header{line-height:1.33;font-size:1.33em;font-weight:700;padding:0;border:0}.ui.header:first-child{margin-top:0}.ui.header+p{margin-top:0}h1.ui.header{min-height:1rem;margin:2rem 0rem 1.5rem;line-height:1.33rem;font-size:2rem}h2.ui.header{margin:1.5rem 0rem 1rem;line-height:1.33rem;font-size:1.5rem}h3.ui.header{margin:1.3rem 0rem 1rem;line-height:1.33rem;font-size:1.33rem}h4.ui.header{margin:.75rem 0rem .3rem;line-height:1.33rem;font-size:1.1rem}h5.ui.header{margin:0rem 0rem .2rem;line-height:1.2rem;font-size:1rem}.huge.ui.header{min-height:1em;line-height:1.33em;font-size:2em}.large.ui.header{line-height:1.33em;font-size:1.5em}.medium.ui.header{margin-bottom:.25em;line-height:1.33em;font-size:1.25em}.small.ui.header{margin-bottom:.25em;line-height:1.33em;font-size:1.1em}.tiny.ui.header{margin-bottom:0;line-height:1.2em;font-size:1em}.ui.header.disabled{opacity:.5}.ui.inverted.header{background-color:#222;padding:.7em 1em;color:#FFF}.ui.blue.header{color:#6ECFF5!important}.ui.black.header{color:#5C6166!important}.ui.green.header{color:#A1CF64!important}.ui.red.header{color:#EF4D6D!important}.ui.purple.header{color:#564F8A!important}.ui.teal.header{color:#00B5AD!important}.ui.inverted.black.header{background-color:#5C6166!important;color:#FFF!important}.ui.inverted.blue.header{background-color:#6ECFF5!important;color:#FFF!important}.ui.inverted.green.header{background-color:#A1CF64!important;color:#FFF!important}.ui.inverted.red.header{background-color:#EF4D6D!important;color:#FFF!important}.ui.inverted.purple.header{background-color:#564F8A!important;color:#FFF!important}.ui.inverted.teal.header{background-color:#00B5AD!important;color:#FFF!important}.ui.left.aligned.header{text-align:left}.ui.right.aligned.header{text-align:right}.ui.center.aligned.header{text-align:center}.ui.floated.header,.ui.left.floated.header{float:left}.ui.right.floated.header{float:right}.ui.attached.header{padding:.7em 1rem;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1)}.ui.top.attached.header{margin-bottom:0;-webkit-border-radius:.3125em .3125em 0 0;-moz-border-radius:.3125em .3125em 0 0;border-radius:.3125em .3125em 0 0}.ui.bottom.attached.header{margin-top:0;-webkit-border-radius:0 0 .3125em .3125em;-moz-border-radius:0 0 .3125em .3125em;border-radius:0 0 .3125em .3125em}.ui.header.icon{display:inline-block;text-align:center}.ui.header.icon .icon{display:block;font-size:4em;width:auto;margin:0rem auto 2rem;padding:0}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/icons.min.css b/node/src/files/components/semantic/minified/elements/icons.min.css
deleted file mode 100644
index 384803db2..000000000
--- a/node/src/files/components/semantic/minified/elements/icons.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:Icons;src:url(../fonts/icons.eot);src:url(../fonts/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons.woff) format('woff'),url(../fonts/icons.ttf) format('truetype'),url(../fonts/icons.svg#icons) format('svg');font-weight:400;font-style:normal}i.icon{display:inline-block;width:1em;height:1em;margin:0 .25em 0 0;font-style:normal;line-height:1;font-weight:400;text-decoration:inherit;text-align:center;vertical-align:baseline;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;font-smoothing:antialiased}i.icon:before{font-family:Icons;speak:none;opacity:.75}i.icon.cloud,i.icon.code,i.icon.terminal,i.icon.twitter-bird,i.icon.dollar{margin-left:0;padding-right:.2em}i.icon.left,i.icon.left-open,i.icon.left-dir{width:1em;margin:0 .5em 0 0}i.icon.up,i.icon.up-open,i.icon.up-dir,i.icon.down,i.icon.down-open,i.icon.down-dir,i.icon.right,i.icon.right-open,i.icon.right-dir{width:1em;margin:0 0 0 .1em}i.icon.clock{margin-top:-.05em}i.icon.close:before{content:'\e80d'}i.icon.help:before{content:'\e704'}i.icon.info:before{content:'\e705'}i.icon.error:before{content:'\e80d'}i.icon.asterisk:before{content:'\2731'}i.icon.at:before{content:'\40'}i.icon.attach:before{content:'📎'}i.icon.attention-circle:before{content:'\2757'}i.icon.attention:before{content:'\26a0'}i.icon.award:before{content:'🏉'}i.icon.barcode:before{content:'\e792'}i.icon.basket:before{content:'\e73d'}i.icon.basket:before{content:'\e813'}i.icon.block:before{content:'🚫'}i.icon.book-open:before{content:'📖'}i.icon.bookmark:before{content:'🔖'}i.icon.calendar:before{content:'📅'}i.icon.cancel-alt:before{content:'\e80d'}i.icon.cancel-circle:before{content:'\2716'}i.icon.cancel:before{content:'\2715'}i.icon.ccw:before{content:'\27f2'}i.icon.chart-bar:before{content:'📊'}i.icon.chart-pie:before{content:'\e7a2'}i.icon.chart:before{content:'📈'}i.icon.chat:before{content:'\e720'}i.icon.check:before{content:'\2611'}i.icon.clock:before{content:'🕔'}i.icon.cloud:before{content:'\2601'}i.icon.code:before{content:'\e714'}i.icon.cog-alt:before{content:'\26ef'}i.icon.cog:before{content:'\2699'}i.icon.comment-alt:before{content:'\e802'}i.icon.comment:before{content:'\e718'}i.icon.cw:before{content:'\27f3'}i.icon.direction:before{content:'\27a2'}i.icon.doc:before{content:'📄'}i.icon.docs:before{content:'\e736'}i.icon.dollar:before{content:'💵'}i.icon.down-dir:before{content:'\25be'}i.icon.down-open:before{content:'\e75c'}i.icon.down:before{content:'\2193'}i.icon.easel:before{content:'\e7b5'}i.icon.edit:before{content:'\270d'}i.icon.eject:before{content:'\2ecf'}i.icon.export:before{content:'\e715'}i.icon.eye:before{content:'\e80f'}i.icon.eye-off:before{content:'\e70b'}i.icon.facebook-rect:before{content:'\f301'}i.icon.fast-fw:before{content:'\e804'}i.icon.fire:before{content:'🔥'}i.icon.flag:before{content:'\2691'}i.icon.flash:before{content:'\26a1'}i.icon.flash-alt:before{content:'\e815'}i.icon.flask:before{content:'\68'}i.icon.flight:before{content:'\2708'}i.icon.folder-open:before{content:'📂'}i.icon.folder:before{content:'\e810'}i.icon.forward:before{content:'\27a6'}i.icon.gift:before{content:'🎁'}i.icon.github:before{content:'\f308'}i.icon.globe:before{content:'\e817'}i.icon.globe-alt:before{content:'🌐'}i.icon.globe:before{content:'𝌍'}i.icon.headphones:before{content:'🎧'}i.icon.heart-empty:before{content:'\2661'}i.icon.heart:before{content:'\2665'}i.icon.help-circle:before{content:'\e704'}i.icon.question:before{content:'\2753'}i.icon.home-alt:before{content:'\e80e'}i.icon.home:before{content:'\2302'}i.icon.info-circle:before{content:'\e705'}i.icon.i-letter:before{content:'\2139'}i.icon.lamp:before{content:'💡'}i.icon.left-dir:before{content:'\25c2'}i.icon.left-open:before{content:'\e75d'}i.icon.left:before{content:'\2190'}i.icon.link:before{content:'🔗'}i.icon.list:before{content:'\e782'}i.icon.location-alt:before{content:'\e811'}i.icon.location:before{content:'\e724'}i.icon.lock-open:before{content:'🔓'}i.icon.lock:before{content:'🔒'}i.icon.mail:before{content:'\2709'}i.icon.mic:before{content:'🎤'}i.icon.minus:before{content:'\2d'}i.icon.money:before{content:'💰'}i.icon.off:before{content:'\e78e'}i.icon.pause:before{content:'\e808'}i.icon.picture-alt:before{content:'\e812'}i.icon.picture:before{content:'🌄'}i.icon.pin:before{content:'📌'}i.icon.play:before{content:'\e809'}i.icon.plus-circle:before{content:'\2795'}i.icon.plus:before{content:'\2b'}i.icon.print:before{content:'\e716'}i.icon.resize-full:before{content:'\e744'}i.icon.resize-horizontal:before{content:'\2b0d'}i.icon.resize-small:before{content:'\e746'}i.icon.resize-vertical:before{content:'\2b0c'}i.icon.right-dir:before{content:'\25b8'}i.icon.right-open:before{content:'\e75e'}i.icon.right:before{content:'\2192'}i.icon.rss:before{content:'\e73a'}i.icon.search:before{content:'🔍'}i.icon.shuffle:before{content:'\e803'}i.icon.star:before{content:'\e801'}i.icon.star-empty:before{content:'\e800'}i.icon.star-half:before{content:'\e701'}i.icon.stop:before{content:'\e807'}i.icon.tag:before{content:'\e80a'}i.icon.tags:before{content:'\e70d'}i.icon.terminal:before{content:'\e7ac'}i.icon.th-alt:before{content:'\e80c'}i.icon.th-large:before{content:'\e708'}i.icon.th-list:before{content:'\e80b'}i.icon.thumbs-down:before{content:'👎'}i.icon.thumbs-up:before{content:'👍'}i.icon.tint:before{content:'\e794'}i.icon.to-end:before{content:'\e762'}i.icon.to-end-alt:before{content:'\e806'}i.icon.to-start:before{content:'\e763'}i.icon.to-start-alt:before{content:'\e805'}i.icon.top-list:before{content:'🏆'}i.icon.trash:before{content:'\e729'}i.icon.twitter-bird:before{content:'\f303'}i.icon.up-dir:before{content:'\25b4'}i.icon.up-open:before{content:'\e75f'}i.icon.up:before{content:'\2191'}i.icon.upload-cloud:before{content:'\e711'}i.icon.user-add:before{content:'\e700'}i.icon.user:before{content:'👤'}i.icon.users-alt:before{content:'\e814'}i.icon.users:before{content:'👥'}i.icon.vcard:before{content:'\e722'}i.icon.zoom-in:before{content:'\e750'}i.icon.zoom-out:before{content:'\e751'}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/image.min.css b/node/src/files/components/semantic/minified/elements/image.min.css
deleted file mode 100644
index d22507db7..000000000
--- a/node/src/files/components/semantic/minified/elements/image.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.feature.image{position:relative;display:inline-block;border:1px solid #CCC;background:#f5f5f5 url(../images/placeholder-subtle.png) no-repeat center center}.ui.feature.image img{display:block}.ui.feature.image:after{position:absolute;top:0;left:0;width:100%;height:100%;content:'';-webkit-box-shadow:0 0 0 3px rgba(255,255,255,.6) inset,0 1px 1px rgba(0,0,0,.3);-moz-box-shadow:0 0 0 3px rgba(255,255,255,.6) inset,0 1px 1px rgba(0,0,0,.3);box-shadow:0 0 0 3px rgba(255,255,255,.6) inset,0 1px 1px rgba(0,0,0,.3);z-index:10}.ui.feature.image,.ui.feature.image img,.ui.feature.image:after{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/label.min.css b/node/src/files/components/semantic/minified/elements/label.min.css
deleted file mode 100644
index 9e7a0728d..000000000
--- a/node/src/files/components/semantic/minified/elements/label.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.label{display:inline-block;vertical-align:middle;padding:.33em .8em;font-weight:700;text-transform:uppercase;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;-o-transition:background .1s linear;-ms-transition:background .1s linear;transition:background .1s linear}a.ui.label{cursor:pointer}.ui.label.disabled{opacity:.5}.ui.label .detail{display:inline-block;font-size:.9em;margin-left:.5em;opacity:.6}.ui.label .icon.close{cursor:pointer;margin-left:.5em;opacity:.7;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;-o-transition:background .1s linear;-ms-transition:background .1s linear;transition:background .1s linear}.ui.label .icon.close:hover{opacity:1}.ui.tag.labels .label,.ui.tag.label{margin-left:1em;position:relative;padding:.33em 1.3em .33em 1.4em;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.ui.tag.labels .label:before,.ui.tag.label:before{position:absolute;top:.3em;left:.3em;content:'';margin-left:-1em;background-image:none;width:1.5em;height:1.5em;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);-webkit-transition:background .1s linear;-moz-transition:background .1s linear;-o-transition:background .1s linear;-ms-transition:background .1s linear;transition:background .1s linear}.ui.tag.labels .label:after,.ui.tag.label:after{position:absolute;content:'';top:50%;left:-.25em;margin-top:-.3em;background-color:#FFF;width:.55em;height:.55em;-webkit-box-shadow:0 -1px 1px 0 rgba(0,0,0,.3);-moz-box-shadow:0 -1px 1px 0 rgba(0,0,0,.3);box-shadow:0 -1px 1px 0 rgba(0,0,0,.3);-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px}.ui.attached.label{position:absolute;top:0;left:0;margin-top:0!important;padding:.5em 1em;color:#AAA;-webkit-border-radius:4px 0 0;-moz-border-radius:4px 0 0;border-radius:4px 0 0}.ui.right.attached.label{left:auto;right:0;-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0}.ui.bottom.attached.label{top:auto;bottom:0;-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px}.ui.bottom.right.attached.label{-webkit-border-radius:0 0 4px;-moz-border-radius:0 0 4px;border-radius:0 0 4px}.ui.label.fluid,.ui.fluid.labels>.label{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.labels .label,.ui.label{background-color:rgba(0,0,0,.1);color:rgba(0,0,0,.3)}.ui.labels .label:before,.ui.label:before{background-color:rgba(0,0,0,.1);color:#555}a.ui.labels .label:hover,a.ui.label:hover{background-color:#F0F0F0}.ui.labels a.label:hover:before,a.ui.label:hover:before{background-color:#F0F0F0}.ui.black.labels .label,.ui.black.label{background-color:#5C6166;color:#FFF}.ui.labels .black.label:before,.ui.black.labels .label:before,.ui.black.label:before{background-color:#5C6166}a.ui.black.labels .label:hover,a.ui.black.label:hover{background-color:#888}.ui.labels a.black.label:hover:before,.ui.black.labels a.label:hover:before,a.ui.black.label:hover:before{background-color:#888}.ui.green.labels .label,.ui.green.label{background-color:#A1CF64;color:#FFF}.ui.labels .green.label:before,.ui.green.labels .label:before,.ui.green.label:before{background-color:#A1CF64}a.ui.green.labels .label:hover,a.ui.green.label:hover{background-color:#89B84C}.ui.labels a.green.label:hover:before,.ui.green.labels a.label:hover:before,a.ui.green.label:hover:before{background-color:#89B84C}.ui.red.labels .label,.ui.red.label{background-color:#EF4D6D;color:#FFF}.ui.labels .red.label:before,.ui.red.labels .label:before,.ui.red.label:before{background-color:#EF4D6D}a.ui.red.labels .label:hover,a.ui.red.label:hover{background-color:#DE3859;color:#FFF}.ui.labels a.red.label:hover:before,.ui.red.labels a.label:hover:before,a.ui.red.label:hover:before{background-color:#DE3859}.ui.blue.labels .label,.ui.blue.label{background-color:#6ECFF5;color:#FFF}.ui.labels .blue.label:before,.ui.blue.labels .label:before,.ui.blue.label:before{background-color:#6ECFF5}a.ui.blue.labels .label:hover,a.ui.blue.label:hover{background-color:#1AB8F3;color:#FFF}.ui.labels a.blue.label:hover:before,.ui.blue.labels a.label:hover:before,a.ui.blue.label:hover:before{background-color:#1AB8F3}.ui.purple.labels .label,.ui.purple.label{background-color:#564F8A;color:#FFF}.ui.labels .purple.label:before,.ui.purple.labels .label:before,.ui.purple.label:before{background-color:#564F8A}a.ui.purple.labels .label:hover,a.ui.purple.label:hover{background-color:#3E3773;color:#FFF}.ui.labels a.purple.label:hover:before,.ui.purple.labels a.label:hover:before,a.ui.purple.label:hover:before{background-color:#3E3773}.ui.teal.labels .label,.ui.teal.label{background-color:#00B5AD;color:#FFF}.ui.labels .teal.label:before,.ui.teal.labels .label:before,.ui.teal.label:before{background-color:#00B5AD}a.ui.teal.labels .label:hover,a.ui.teal.label:hover{background-color:#009A93;color:#FFF}.ui.labels a.teal.label:hover:before,.ui.teal.labels a.label:hover:before,a.ui.teal.tag.label:hover:before{background-color:#009A93}.ui.pointing.label{position:relative}.ui.attached.pointing.label{position:absolute}.ui.pointing.label:before{position:absolute;content:"";width:.6em;height:.6em;background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;-o-transition:background .1s linear;-ms-transition:background .1s linear;transition:background .1s linear}.ui.pointing.label,.ui.pointing.above.label{margin-top:1em}.ui.pointing.label:before,.ui.pointing.above.label:before{margin-left:-.3em;top:-.3em;left:50%}.ui.pointing.below.label{margin-top:0;margin-bottom:1em}.ui.pointing.below.label:before{margin-left:-.3em;top:auto;right:auto;bottom:-.3em;left:50%}.ui.pointing.left.label{margin-top:0;margin-left:1em}.ui.pointing.left.label:before{margin-top:-.3em;bottom:auto;right:auto;top:50%;left:0}.ui.pointing.right.label{margin-top:0;margin-right:1em}.ui.pointing.right.label:before{margin-top:-.3em;right:-.3em;top:50%;bottom:auto;left:auto}.ui.floating.label{position:absolute;z-index:100;top:-1em;left:100%;margin:0 0 0 -1.5em!important;-webkit-box-shadow:0 -2px 0 0 rgba(0,0,0,.1) inset;-moz-box-shadow:0 -2px 0 0 rgba(0,0,0,.1) inset;box-shadow:0 -2px 0 0 rgba(0,0,0,.1) inset}.ui.label{font-size:13px}.ui.small.labels .label,.ui.small.label{font-size:11px}.ui.large.labels .label,.ui.large.label{font-size:15px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/paperclip.min.css b/node/src/files/components/semantic/minified/elements/paperclip.min.css
deleted file mode 100644
index 7e8670422..000000000
--- a/node/src/files/components/semantic/minified/elements/paperclip.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.paperclip{z-index:2}.ui.paperclip .paperclip{display:block;position:absolute;z-index:4;background:url(../images/paperclip.png) no-repeat;width:37px;height:21px}.ui.paperclip .label{position:absolute;top:42px;left:8px;z-index:3;border:1px solid #D3CB4F;background-color:#FFF557;font-size:9px;color:#444005;font-weight:700;padding:2px 7px}.ui.paperclip .content,.ui.paperclip img{border:5px solid #FFF;-webkit-transform:rotate(-11deg);-moz-transform:rotate(-11deg);-o-transform:rotate(-11deg);-ms-transform:rotate(-11deg);transform:rotate(-11deg)}.ui.paperclip img{height:60px;-webkit-box-shadow:0 3px 2px rgba(0,0,0,.3);-moz-box-shadow:0 3px 2px rgba(0,0,0,.3);box-shadow:0 3px 2px rgba(0,0,0,.3)}.ui.paperclip{position:absolute;top:10%;left:-3px}.ui.paperclip .paperclip{position:absolute;bottom:10px;left:-10px}.ui.paperclip.hidden{display:none}.ui.paperclip.simple .content,.ui.paperclip.simple img{border:0}.ui.paperclip.large img{height:140px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/progress.min.css b/node/src/files/components/semantic/minified/elements/progress.min.css
deleted file mode 100644
index b45fb6055..000000000
--- a/node/src/files/components/semantic/minified/elements/progress.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.progress{border:1px solid rgba(0,0,0,.1);width:100%;max-width:400px;height:35px;background-color:#FAFAFA;padding:5px;-webkit-border-radius:.3125em;-moz-border-radius:.3125em;border-radius:.3125em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.progress .bar{display:inline-block;height:100%;background-color:#CCC;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:width 1s ease-in-out,background-color 1s ease-out;-moz-transition:width 1s ease-in-out,background-color 1s ease-out;-ms-transition:width 1s ease-in-out,background-color 1s ease-out;-o-transition:width 1s ease-in-out,background-color 1s ease-out;transition:width 1s ease-in-out,background-color 1s ease-out}.ui.successful.progress .bar{background-color:#73E064!important}.ui.successful.progress .bar,.ui.successful.progress .bar::after{-webkit-animation:none!important;-moz-animation:none!important}.ui.failed.progress .bar{background-color:#DF9BA4!important}.ui.failed.progress .bar,.ui.failed.progress .bar::after{-webkit-animation:none!important;-moz-animation:none!important}.ui.active.progress .bar{position:relative}.ui.active.progress .bar::after{content:'';opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;background:#FFF;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-animation:animate-emphasis 2s ease-out infinite;-moz-animation:animate-emphasis 2s ease-out infinite;animation:animate-emphasis 2s ease-out infinite}@-webkit-keyframes animate-emphasis{0%{opacity:0;width:0}50%{opacity:.3}100%{opacity:0;width:95%}}@-moz-keyframes animate-emphasis{0%{opacity:0;width:0}50%{opacity:.3}100%{opacity:0;width:100%}}@keyframes animate-emphasis{0%{opacity:0;width:0}50%{opacity:.3}100%{opacity:0;width:100%}}.ui.disabled.progress{opacity:.35}.ui.disabled.progress .bar,.ui.disabled.progress .bar::after{-webkit-animation:none!important;-moz-animation:none!important}.ui.blue.progress .bar{background-color:#6ECFF5}.ui.black.progress .bar{background-color:#5C6166}.ui.green.progress .bar{background-color:#A1CF64}.ui.red.progress .bar{background-color:#EF4D6D}.ui.purple.progress .bar{background-color:#564F8A}.ui.teal.progress .bar{background-color:#00B5AD}.ui.progress.striped .bar{-webkit-background-size:30px 30px;-moz-background-size:30px 30px;background-size:30px 30px;background-image:-webkit-gradient(linear,left top,right bottom,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.ui.progress.active.striped .bar{-webkit-animation:animate-striped 3s linear infinite;-moz-animation:animate-striped 3s linear infinite}@-webkit-keyframes animate-striped{0%{background-position:0 0}100%{background-position:60px 0}}@-moz-keyframes animate-striped{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-striped{0%{background-position:0 0}100%{background-position:60px 0}}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/segment.min.css b/node/src/files/components/semantic/minified/elements/segment.min.css
deleted file mode 100644
index 0a90d36d2..000000000
--- a/node/src/files/components/semantic/minified/elements/segment.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.segment{position:relative;background-color:#FFF;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);padding:1em;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.ui.segment div:first-child{margin-top:0}.ui.segment .attached.label:first-child+*{margin-top:2em}.ui.segment .bottom.attached.label:first-child+*{margin-top:0}.ui.segment.attached{top:-1px;bottom:-1px;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-moz-box-shadow:0 0 0 1px #DDD;-webkit-box-shadow:0 0 0 1px #DDD;box-shadow:0 0 0 1px #DDD}.ui.top.attached.segment{top:0;bottom:-1px;-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.ui.segment.bottom.attached{top:-1px;bottom:0;-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.ui.segment .list li{padding:10px 25px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/step.min.css b/node/src/files/components/semantic/minified/elements/step.min.css
deleted file mode 100644
index a61b236a5..000000000
--- a/node/src/files/components/semantic/minified/elements/step.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.steps{display:inline-block;font-size:0;-moz-box-shadow:0 0 0 1px rgba(0,0,0,.15);-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15);box-shadow:0 0 0 1px rgba(0,0,0,.15);-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.ui.steps .step{display:inline-block;position:relative;padding:13px 23px 13px 40px;background-color:#F3F3F3;background:-webkit-linear-gradient(top,#fff 0,#efefef 100%);background:-moz-linear-gradient(top,#fff 0,#efefef 100%);background:-o-linear-gradient(top,#fff 0,#efefef 100%);background:-ms-linear-gradient(top,#fff 0,#efefef 100%);background:linear-gradient(top,#fff 0,#efefef 100%);color:#555;text-shadow:0 -1px 0 rgba(255,255,255,.8)}.ui.steps .step:after{position:absolute;content:'';z-index:2;top:7px;right:-16px;width:32px;height:31px;background-color:#F3F3F3;background:-webkit-linear-gradient(left top,#fff 0,#efefef 100%);background:-moz-linear-gradient(left top,#fff 0,#efefef 100%);background:-o-linear-gradient(left top,#fff 0,#efefef 100%);background:-ms-linear-gradient(left top,#fff 0,#efefef 100%);background:linear-gradient(left top,#fff 0,#efefef 100%);-moz-box-shadow:1px -1px 1px rgba(0,0,0,.1),1px -1px 1px rgba(255,255,255,.6);-webkit-box-shadow:1px -1px 1px rgba(0,0,0,.1),1px -1px 1px rgba(255,255,255,.6);box-shadow:1px -1px 1px rgba(0,0,0,.1),1px -1px 1px rgba(255,255,255,.6);-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.steps .step:first-child{padding-left:20px;-webkit-border-radius:5px 0 0 5px;-moz-border-radius:5px 0 0 5px;border-radius:5px 0 0 5px}.ui.steps .step:last-child{-webkit-border-radius:0 5px 5px 0;-moz-border-radius:0 5px 5px 0;border-radius:0 5px 5px 0}.ui.steps .step:last-child{margin-right:0}.ui.steps .step:last-child:after{width:0!important;height:0!important}.attached.ui.steps{margin:0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.attached.ui.steps .step:first-child{-webkit-border-radius:4px 0 0;-moz-border-radius:4px 0 0;border-radius:4px 0 0}.attached.ui.steps .step:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0}.bottom.attached.ui.steps{margin-top:-1px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.bottom.attached.ui.steps .step:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px}.bottom.attached.ui.steps .step:last-child{-webkit-border-radius:0 0 4px;-moz-border-radius:0 0 4px;border-radius:0 0 4px}.ui.steps.fluid,.ui.steps.fluid>.step{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.steps.two.fluid>.step{width:50%}.ui.steps.three.fluid>.step{width:33.333%}.ui.steps.four.fluid>.step{width:25%}.ui.steps.five.fluid>.step{width:20%}.ui.steps.six.fluid>.step{width:16.666%}.ui.steps.seven.fluid>.step{width:14.285%}.ui.steps.eight.fluid>.step{width:12.5%}.ui.steps .step{font-size:13px;font-weight:700}.ui.steps .hover.step{cursor:pointer;background:-webkit-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-moz-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-o-linear-gradient(top,#fff 0,#f0f0f0 100%);background:-ms-linear-gradient(top,#fff 0,#f0f0f0 100%);background:linear-gradient(top,#fff 0,#f0f0f0 100%);-moz-box-shadow:0 0 2px rgba(0,0,0,.2);-webkit-box-shadow:0 0 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.2)}.ui.steps .hover.step:after{cursor:pointer;background:-webkit-linear-gradient(top left,#fff 0,#f0f0f0 100%);background:-moz-linear-gradient(top left,#fff 0,#f0f0f0 100%);background:-o-linear-gradient(top left,#fff 0,#f0f0f0 100%);background:-ms-linear-gradient(top left,#fff 0,#f0f0f0 100%);background:linear-gradient(top left,#fff 0,#f0f0f0 100%);-moz-box-shadow:2px -2px 1px rgba(0,0,0,.2);-webkit-box-shadow:2px -2px 1px rgba(0,0,0,.2);box-shadow:2px -2px 1px rgba(0,0,0,.2)}.ui.steps .hover.step:before{position:absolute;top:7px;left:-15px;width:32px;height:31px;content:'';background-color:transparent;background-image:none;-moz-box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1) inset;-webkit-box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1) inset;box-shadow:-1px 1px 1px 0 rgba(0,0,0,.1) inset;-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:2}.ui.steps .hover:first-child:before{width:0;height:0}.ui.steps .down.step{background:-webkit-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-moz-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-o-linear-gradient(top,#f0f0f0 0,#fff 100%);background:-ms-linear-gradient(top,#f0f0f0 0,#fff 100%);background:linear-gradient(top,#f0f0f0 0,#fff 100%)}.ui.steps .down.step:after{background:-webkit-linear-gradient(top left,#f0f0f0 0,#fff 100%);background:-moz-linear-gradient(top left,#f0f0f0 0,#fff 100%);background:-o-linear-gradient(top left,#f0f0f0 0,#fff 100%);background:-ms-linear-gradient(top left,#f0f0f0 0,#fff 100%);background:linear-gradient(top left,#f0f0f0 0,#fff 100%)}.ui.steps .active.step{cursor:auto;background-color:#009FDA;background:-webkit-linear-gradient(top,#009fda 0,#00b3f5 100%);background:-moz-linear-gradient(top,#009fda 0,#00b3f5 100%);background:-o-linear-gradient(top,#009fda 0,#00b3f5 100%);background:-ms-linear-gradient(top,#009fda 0,#00b3f5 100%);background:linear-gradient(top,#009fda 0,#00b3f5 100%);color:#FFF;text-shadow:0 1px 0 rgba(0,0,0,.3);-moz-box-shadow:0 0 2px rgba(0,0,0,.35) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.35) inset;box-shadow:0 0 2px rgba(0,0,0,.35) inset}.ui.steps .active.step:before{position:absolute;top:7px;left:-16px;content:'';width:32px;height:31px;background-color:transparent;background-image:none;-moz-box-shadow:2px -2px 1px rgba(0,0,0,.25);-webkit-box-shadow:2px -2px 1px rgba(0,0,0,.25);box-shadow:2px -2px 1px rgba(0,0,0,.25);-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.steps .active.step:first-child:before{width:0;height:0}.ui.steps .active.step:after{background-color:#009FDA;background:-webkit-linear-gradient(left top,#009fda 0,#00b3f5 100%);background:-moz-linear-gradient(left top,#009fda 0,#00b3f5 100%);background:-o-linear-gradient(left top,#009fda 0,#00b3f5 100%);background:-ms-linear-gradient(left top,#009fda 0,#00b3f5 100%);background:linear-gradient(left top,#009fda 0,#00b3f5 100%);-moz-box-shadow:-2px 2px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:-2px 2px 2px rgba(0,0,0,.15) inset;box-shadow:-2px 2px 2px rgba(0,0,0,.15) inset}.ui.steps .disabled.step{color:#BBB}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/throbber.min.css b/node/src/files/components/semantic/minified/elements/throbber.min.css
deleted file mode 100644
index 9a44b2576..000000000
--- a/node/src/files/components/semantic/minified/elements/throbber.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.throbber{display:inline-block;width:32px;height:32px;background:url(../images/throbber-medium.gif) no-repeat;background-position:48% 0}.ui.throbber.center{position:absolute;top:50%;left:50%;margin:-16px 0 0 -16px;z-index:1000}.ui.throbber.large{width:64px;height:64px;background-image:url(../images/throbber-large.gif)}.ui.throbber.large.center{margin:-32px 0 0 -32px}.ui.throbber.small{width:24px;height:24px;background-image:url(../images/throbber-small.gif)}.ui.throbber.small.center{margin:-12px 0 0 -12px}.ui.throbber.tiny{width:16px;height:16px;background-image:url(../images/throbber-tiny.gif)}.ui.throbber.tiny.center{margin:-8px 0 0 -8px}.ui.throbber.text{width:auto!important;height:auto!important;text-align:center;font-style:normal;color:#422256;margin-top:-28px;min-width:32px;padding-top:40px;font-size:12px;font-weight:700}.ui.throbber.text.tiny{margin-top:-16px;min-width:16px;padding-top:20px;font-size:9px}.ui.throbber.text.small{margin-top:-23px;min-width:24px;padding-top:32px;font-size:11px}.ui.throbber.text.large{margin-top:-46px;min-width:64px;padding-top:80px;font-size:14px}.ui.throbber.text.blue{color:#fff}.ui.throbber.tiny.blue{background-image:url(../images/throbber-blue-tiny.gif)}.ui.throbber.small.blue{background-image:url(../images/throbber-blue-small.gif)}.ui.throbber.blue{background-image:url(../images/throbber-blue-medium.gif)}.ui.throbber.large.blue{background-image:url(../images/throbber-blue-large.gif)}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/elements/well.min.css b/node/src/files/components/semantic/minified/elements/well.min.css
deleted file mode 100644
index 9a466e2d3..000000000
--- a/node/src/files/components/semantic/minified/elements/well.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.well{display:inline-block;padding:6px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.05) inset,0 0 0 1px rgba(0,0,0,.1) inset;-moz-box-shadow:0 -1px 0 rgba(0,0,0,.05) inset,0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 -1px 0 rgba(0,0,0,.05) inset,0 0 0 1px rgba(0,0,0,.1) inset;background-image:-webkit-linear-gradient(top,rgba(80,80,80,.24) 0,rgba(119,119,119,.24) 100%);background-image:-moz-linear-gradient(top,rgba(80,80,80,.24) 0,rgba(119,119,119,.24) 100%);background-image:-o-linear-gradient(top,rgba(80,80,80,.24) 0,rgba(119,119,119,.24) 100%);background-image:-ms-linear-gradient(top,rgba(80,80,80,.24) 0,rgba(119,119,119,.24) 100%);background-image:linear-gradient(top,rgba(80,80,80,.24) 0,rgba(119,119,119,.24) 100%)}.ui.well .button{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.ui.light.well{background-image:-webkit-linear-gradient(top,rgba(80,80,80,.14) 0,rgba(119,119,119,.14) 100%);background-image:-moz-linear-gradient(top,rgba(80,80,80,.14) 0,rgba(119,119,119,.14) 100%);background-image:-o-linear-gradient(top,rgba(80,80,80,.14) 0,rgba(119,119,119,.14) 100%);background-image:-ms-linear-gradient(top,rgba(80,80,80,.14) 0,rgba(119,119,119,.14) 100%);background-image:linear-gradient(top,rgba(80,80,80,.14) 0,rgba(119,119,119,.14) 100%)}.ui.shallow.well{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:4px}.ui.shallow.well .button{border-radius:4px}.ui.deep.well{-webkit-border-radius:50px;-moz-border-radius:50px;border-radius:50px;padding:10px}.ui.deep.well .button{border-radius:50px}.ui.well.fluid,.ui.well.fluid .button{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/accordion.min.css b/node/src/files/components/semantic/minified/modules/accordion.min.css
deleted file mode 100644
index 297f0c130..000000000
--- a/node/src/files/components/semantic/minified/modules/accordion.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.accordion .title{cursor:pointer;font-size:16px;font-weight:700;color:#3E2151;margin-top:8px;padding:8px;border:1px solid transparent;border-top:1px solid #E0E0E0;-webkit-box-shadow:0 1px 0 #FFF inset;-moz-box-shadow:0 1px 0 #FFF inset;box-shadow:0 1px 0 #FFF inset;transition:color .2s ease-out}.ui.accordion .title:first-child{margin-top:0;border-top-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui.accordion .title:hover,.ui.accordion .title.active{color:#335687}.ui.accordion .title.active{background-color:#E0E0E0;border:1px solid #BBB;-webkit-box-shadow:0 1px 0 #FFF inset;-moz-box-shadow:0 1px 0 #FFF inset;box-shadow:0 1px 0 #FFF inset;color:#335687}.ui.accordion .icon{margin:0 4px 4px 2px;display:inline-block;text-indent:-9999px;vertical-align:middle;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid #3E2151;border-right:4px solid transparent}.ui.accordion .title:hover .icon{border-left-color:#335687}.ui.accordion .title.active .icon{border-left:4px solid transparent;border-top:6px solid #335687;margin-left:0;margin-bottom:0}.ui.accordion .content{display:none;padding:10px 20px;margin:0;font-size:12px;line-height:2}.ui.accordion .content p{margin:12px 0;font-size:12px}.ui.accordion .content.active{display:block;background-color:#EEE;-webkit-box-shadow:0 0 2px rgba(0,0,0,.25) inset;-moz-box-shadow:0 0 2px rgba(0,0,0,.25) inset;box-shadow:0 0 2px rgba(0,0,0,.25) inset}.ui.accordion.connected{background-color:#FAFAFA;border:1px solid #DDD}.ui.accordion.connected .title{margin-top:0}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/accordion.min.js b/node/src/files/components/semantic/minified/modules/accordion.min.js
deleted file mode 100644
index 960f42cc5..000000000
--- a/node/src/files/components/semantic/minified/modules/accordion.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,i,n){e.fn.accordion=function(t){var i=e.extend(!0,{},e.fn.accordion.settings,t),o=arguments||!1;return e(this).each(function(){var t,s=e(this),c=s.find(i.selector.title),a=(s.find(i.selector.icon),s.find(i.selector.content)),r=s.data("module"),l=i.className;return t={initialize:function(){c.on("click",t.change),s.data("module",t)},change:function(){var n=e(this),o=(n.next(a),n.hasClass(l.active));o?i.collapsible&&e.proxy(t.close,n)():e.proxy(t.open,n)()},open:function(){var t=e(this),n=t.next(a),o=c.filter("."+l.active),s=o.next(c);i.exclusive&&o.size()>0&&(o.removeClass("active"),s.stop().slideUp(i.speed,i.easing,function(){e(this).removeClass("active").removeAttr("style")})),t.addClass(l.active),n.hide().addClass(l.active).stop().slideDown(i.speed,i.easing,function(){e(this).removeAttr("style")})},close:function(){var t=e(this),n=t.next(a);t.removeClass(l.active),n.removeClass(l.active).show().stop().slideUp(i.speed,i.easing,function(){e(this).removeAttr("style")})},debug:function(e){i.debug&&console.info(i.moduleName+": "+e)},error:function(e){console.warn(i.moduleName+": "+e)},invoke:function(o,s,c){var a;return c=c||Array.prototype.slice.call(arguments,2),"string"==typeof o&&r!==n&&(o=o.split("."),e.each(o,function(n,o){return e.isPlainObject(r[o])?(r=r[o],!0):e.isFunction(r[o])?(a=r[o],!0):(t.error(i.errors.method),!1)})),e.isFunction(a)?a.apply(s,c):a}},r!==n&&o?("invoke"==o[0]&&(o=Array.prototype.slice.call(o,1)),t.invoke(o[0],this,Array.prototype.slice.call(o,1))):(t.initialize(),n)}),this},e.fn.accordion.settings={moduleName:"Accordion",debug:!1,exclusive:!0,collapsible:!0,errors:{method:"The method you called is not defined"},className:{active:"active",hover:"hover"},selector:{title:".title",icon:".icon",content:".content"},speed:500,easing:"easeInOutQuint"}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/behavior/animation.min.js b/node/src/files/components/semantic/minified/modules/behavior/animation.min.js
deleted file mode 100644
index 961e187ca..000000000
--- a/node/src/files/components/semantic/minified/modules/behavior/animation.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,i){e.animationSettings=function(t,n,a,o){return t=n===i?t:"object"==typeof n?e.extend({},t,n):"function"==typeof a?e.extend({},t,{duration:n,complete:a}):"object"==typeof a?e.extend(!0,{},t,{duration:n},a):e.extend({},t,{duration:n,easing:a,complete:o})},e.fn.popIn=function(t,n,i){var a=e.animationSettings(e.fn.popIn.settings,t,n,i),o=e(this),s=o.size(),c=0,r=function(){0==o.filter(":animated").size(),c++,e(this).css("transform","").removeClass(a.className.init),e.proxy(a.eachComplete,this)(),c==s&&e.proxy(a.complete,o)()},l=function(t){e(this).delay(a.delay*t).animate({opacity:a.endOpacity,transform:"scale("+a.endScale+")"},a.duration,a.easing,r)};return a.isLegacyBrowser?o.show():o.addClass(a.className.init).show().css({opacity:a.startOpacity,transform:"scale("+a.startScale+")"}).each(l),e(this)},e.fn.popOut=function(t,n,i){var a=e.animationSettings(e.fn.popIn.settings,t,n,i),o={complete:function(){e(this).hide(),e.proxy(a.complete,this)()},startOpacity:a.endOpacity,endOpacity:0,startScale:a.endScale,endScale:a.startScale},s=e.extend(!0,{},a,o);e(this).popIn(s)},e.fn.popIn.settings={isLegacyBrowser:!1,className:{init:"init"},duration:450,easing:"easeOutExpo",delay:100,startOpacity:0,endOpacity:1,startScale:.7,endScale:1,eachComplete:function(){},complete:function(){}},e.fn.kenBurns=function(t,n,a){var o=e.animationSettings(e.fn.kenBurns.settings,t,n,a),s={randomPosition:function(e,t,n){var n=n!==i?n:t,a=Math.random()*(e+n-(e-t))+(e-t);return parseInt(a,10)},animate:function(){var t={},n={};t=o.useStartPosition?{x:parseInt(e(this).css("background-position-x"),10),y:parseInt(e(this).css("background-position-y"),10)}:{x:s.randomPosition(50,o.xRange),y:s.randomPosition(50,o.yRange)},n.x=t.x>50?s.randomPosition(t.x,o.xMaxTravelDistance,-o.xMinTravelDistance):s.randomPosition(t.x,-o.xMinTravelDistance,o.xMaxTravelDistance),n.y=t.y>50?s.randomPosition(t.y,o.yMaxTravelDistance,-o.yMinTravelDistance):s.randomPosition(t.y,-o.yMinTravelDistance,o.yMaxTravelDistance),e(this).css({backgroundPosition:t.x+"%",backgroundPositionY:t.y+"%"}).stop().animate({backgroundPosition:n.x+"%",backgroundPositionY:n.y+"%"},o.duration,o.easing,o.complete)}};return o.isLegacyBrowser||e(this).each(s.animate),e(this)},e.fn.kenBurns.settings={isLegacyBrowser:!1,duration:1e4,easing:"linear",useStartPosition:!1,xRange:40,yRange:20,xMinTravelDistance:30,xMaxTravelDistance:60,yMinTravelDistance:20,yMaxTravelDistance:40,scale:.1,complete:function(){}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/behavior/api.min.js b/node/src/files/components/semantic/minified/modules/behavior/api.min.js
deleted file mode 100644
index 679c3a456..000000000
--- a/node/src/files/components/semantic/minified/modules/behavior/api.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.api=e.fn.api=function(n){var a,i=e.extend(!0,{},e.api.settings,n),r="function"!=typeof this?this:e("
"),s=i.stateContext?e(i.stateContext):e(r),c="object"==typeof this?e(r):s,l=c.data(i.metadata.action)||i.action||!1,u=i.className,d=i.metadata,p=i.errors;return a={initialize:function(){var r,p,f,g,m,h,y,v=!1,x=(new Date).getTime(),b={},C={},S=i.errors;return i.serializeForm&&e(this).toJSON()!==o&&(b=c.closest("form").toJSON(),e.extend(!0,i.data,b),a.debug("Adding form data to API Request",b)),r=e.proxy(i.beforeSend,c)(i),r===o||r?(l&&(a.debug("Initializing API Request for: ",l),i.api[l]!==o?g=i.api[l]:a.error(S.missingAction)),i.url&&(g=i.url,a.debug("Using specified url: ",g)),g||(a.error(S.missingURL),a.reset()),m=g.match(i.regExpTemplate),m&&(a.debug("Looking for URL variables",m),e.each(m,function(t,r){var s=r.substr(2,r.length-3),l=e.isPlainObject(n.urlData)&&n.urlData[s]!==o?n.urlData[s]:c.data(s)!==o?c.data(s):i.urlData[s];a.verbose("Looking for variable",s,c,c.data(s),i.urlData[s]),l===!1?(a.debug("Removing variable from URL",m),g=g.replace("/"+r,"")):l!==o&&l?g=g.replace(r,l):(a.error(S.missingParameter+s),v=!0)})),v?(a.reset(),o):(f=e.Deferred().always(function(){i.stateContext&&s.removeClass(u.loading),e.proxy(i.complete,c)()}).done(function(t){a.debug("API request successful"),"json"==i.dataType?t.success===!0?e.proxy(i.success,s)(t,i,c):(a.debug("JSON success flag is not set."),t.error!==o?e.proxy(i.failure,s)(t.error,i,c):e.isArray(t.errors)?e.proxy(i.failure,s)(t.errors[0],i,c):t.message!==o?e.proxy(i.failure,s)(t.message,i,c):e.proxy(i.failure,s)(S.error,i,c)):e.proxy(i.success,s)(t,i,c)}).fail(function(t,n,r){var c,l=i.errors[n]!==o?i.errors[n]:r;if(t!==o)if(t.readyState!==o&&4==t.readyState){if(200!=t.status&&r!==o&&""!==r)a.error(S.statusMessage+r);else if("error"==n&&"json"==i.dataType)try{c=e.parseJSON(t.responseText),c&&c.error!==o&&(l=c.error)}catch(d){a.error(S.JSONParse)}s.removeClass(u.loading).addClass(u.error),i.errorLength>0&&setTimeout(function(){s.removeClass(u.error)},i.errorLength),a.debug("API Request error:",l),e.proxy(i.failure,s)(l,i,this)}else a.debug("Request Aborted (Most likely caused by page change)")}),e.extend(!0,C,i,{type:i.method||i.type,data:h,url:g,beforeSend:i.beforeXHR}),i.stateContext&&s.addClass(u.loading),i.progress&&(a.verbose("Adding progress events"),e.extend(!0,C,{xhr:function(){var n=new t.XMLHttpRequest;return n.upload.addEventListener("progress",function(t){var n;t.lengthComputable&&(n=Math.round(1e4*(t.loaded/t.total))/100+"%",e.proxy(i.progress,s)(n,t))},!1),n.addEventListener("progress",function(t){var n;t.lengthComputable&&(n=Math.round(1e4*(t.loaded/t.total))/100+"%",e.proxy(i.progress,s)(n,t))},!1),n}})),a.verbose("Creating AJAX request with settings: ",C),y=e.ajax(C).always(function(){p=i.loadingLength-((new Date).getTime()-x),i.loadingDelay=0>p?0:p}).done(function(e){var t=this;setTimeout(function(){f.resolveWith(t,[e])},i.loadingDelay)}).fail(function(e,t,n){var o=this;"abort"!=t?setTimeout(function(){f.rejectWith(o,[e,t,n])},i.loadingDelay):s.removeClass(u.error).removeClass(u.loading)}),i.stateContext&&c.data(d.promise,f).data(d.xhr,y),o)):(a.error(S.beforeSend),a.reset(),o)},reset:function(){c.data(d.promise,!1).data(d.xhr,!1),s.removeClass(u.error).removeClass(u.loading),a.error(p.exitConditions)},setting:function(e,t){return t===o?i[e]:(i[e]=t,o)},verbose:function(){i.verbose&&a.debug.apply(this,arguments)},debug:function(){var e=[],t=i.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};o=Function.prototype.bind.call(o,console),i.debug&&(e.push(t),o.apply(console,e.concat(n)))},error:function(){var e=[],t=i.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.warn||console.log||function(){};o=Function.prototype.bind.call(o,console),i.debug&&(e.push(t),e.concat(n),o.apply(console,e.concat(n)))}},a.initialize(),this},e.fn.apiButton=function(t){return e(this).each(function(){var n,o=e(this),a=e(this).selector||"",i=e.isFunction(t)?e.extend(!0,{},e.api.settings,e.fn.apiButton.settings,{stateContext:this,success:t}):e.extend(!0,{},e.api.settings,e.fn.apiButton.settings,{stateContext:this},t);n={initialize:function(){i.context&&""!==a?e(i.context).on(a,"click."+i.namespace,n.click):o.on("click."+i.namespace,n.click)},click:function(){i.filter&&0!==e(this).filter(i.filter).size()||e.proxy(e.api,this)(i)}},n.initialize()}),this},e.api.settings={moduleName:"API Module",namespace:"api",verbose:!0,debug:!0,api:{},beforeSend:function(e){return e},beforeXHR:function(){},success:function(){},complete:function(){},failure:function(){},progress:!1,errors:{missingAction:"API action used but no url was defined",missingURL:"URL not specified for the API action",missingParameter:"Missing an essential URL parameter: ",timeout:"Your request timed out",error:"There was an error with your request",parseError:"There was an error parsing your request",JSONParse:"JSON could not be parsed during error handling",statusMessage:"Server gave an error: ",beforeSend:"The before send function has aborted the request",exitConditions:"API Request Aborted. Exit conditions met"},className:{loading:"loading",error:"error"},metadata:{action:"action",promise:"promise",xhr:"xhr"},regExpTemplate:/\{\$([A-z]+)\}/g,action:!1,url:!1,urlData:!1,serializeForm:!1,stateContext:!1,method:"get",data:{},dataType:"json",cache:!0,loadingLength:200,errorLength:2e3},e.fn.apiButton.settings={filter:".disabled, .loading",context:!1,stateContext:!1}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/behavior/colorize.min.js b/node/src/files/components/semantic/minified/modules/behavior/colorize.min.js
deleted file mode 100644
index 2d6ecd166..000000000
--- a/node/src/files/components/semantic/minified/modules/behavior/colorize.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.colorize=function(t){var n=e.extend(!0,{},e.fn.colorize.settings,t),a=arguments||!1;return e(this).each(function(t){var i,r,s,c,l,u,d,g,m=e(this),p=e("")[0],f=e("")[0],h=e("")[0],y=new Image,v=n.colors,x=(n.paths,n.namespace),b=n.errors,w=m.data("module-"+x);return g={checkPreconditions:function(){return g.debug("Checking pre-conditions"),!e.isPlainObject(v)||e.isEmptyObject(v)?(g.error(b.undefinedColors),!1):!0},async:function(e){n.async?setTimeout(e,0):e()},getMetadata:function(){g.debug("Grabbing metadata"),c=m.data("image")||n.image||o,l=m.data("name")||n.name||t,u=n.width||m.width(),d=n.height||m.height(),(0===u||0===d)&&g.error(b.undefinedSize)},initialize:function(){g.debug("Initializing with colors",v),g.checkPreconditions()&&g.async(function(){g.getMetadata(),g.canvas.create(),g.draw.image(function(){g.draw.colors(),g.canvas.merge()}),m.data("module-"+x,g)})},redraw:function(){g.debug("Redrawing image"),g.async(function(){g.canvas.clear(),g.draw.colors(),g.canvas.merge()})},change:{color:function(e,t){return g.debug("Changing color",e),v[e]===o?(g.error(b.missingColor),!1):(v[e]=t,g.redraw(),o)}},canvas:{create:function(){g.debug("Creating canvases"),p.width=u,p.height=d,f.width=u,f.height=d,h.width=u,h.height=d,i=p.getContext("2d"),r=f.getContext("2d"),s=h.getContext("2d"),m.append(p),i=m.children("canvas")[0].getContext("2d")},clear:function(){g.debug("Clearing canvas"),s.fillStyle="#FFFFFF",s.fillRect(0,0,u,d)},merge:function(){return e.isFunction(i.blendOnto)?(i.putImageData(r.getImageData(0,0,u,d),0,0),s.blendOnto(i,"multiply"),o):(g.error(b.missingPlugin),o)}},draw:{image:function(e){g.debug("Drawing image"),e=e||function(){},c?(y.src=c,y.onload=function(){r.drawImage(y,0,0),e()}):(g.error(b.noImage),e())},colors:function(){g.debug("Drawing color overlays",v),e.each(v,function(e,t){n.onDraw(s,l,e,t)})}},debug:function(e,t){n.debug&&(t!==o?console.info(n.moduleName+": "+e,t):console.info(n.moduleName+": "+e))},error:function(e){console.warn(n.moduleName+": "+e)},invoke:function(t,a,i){var r;return i=i||Array.prototype.slice.call(arguments,2),"string"==typeof t&&w!==o&&(t=t.split("."),e.each(t,function(t,o){return e.isPlainObject(w[o])?(w=w[o],!0):e.isFunction(w[o])?(r=w[o],!0):(g.error(n.errors.method),!1)})),e.isFunction(r)?r.apply(a,i):!1}},w!==o&&a?("invoke"==a[0]&&(a=Array.prototype.slice.call(a,1)),g.invoke(a[0],this,Array.prototype.slice.call(a,1))):(g.initialize(),o)}),this},e.fn.colorize.settings={moduleName:"Image Colorizer",debug:!0,namespace:"colorize",onDraw:function(){},async:!0,colors:{},metadata:{image:"image",name:"name"},errors:{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);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/behavior/default-text.min.js b/node/src/files/components/semantic/minified/modules/behavior/default-text.min.js
deleted file mode 100644
index bcd62a797..000000000
--- a/node/src/files/components/semantic/minified/modules/behavior/default-text.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e){e.fn.defaultText=function(t){var n="string"==typeof t?e.extend({},e.fn.defaultText.settings,{defaultValue:t}):e.extend(!0,{},e.fn.defaultText.settings,t);return"string"==typeof t&&(t={defaultValue:t}),e.extend(n,t),e(this).each(function(){var t=e(this),a={checkDefault:function(){t.val().toLowerCase()!=n.defaultValue.toLowerCase()&&t.addClass(n.filledClass)},placeholder:{add:function(){0===t.filter(n.disabledClassList).size()&&(t.val()==n.replaceValue?n.alwaysReplace?t.removeClass(n.filledClass).val(t.attr("last")).removeAttr("last"):t.removeClass(n.filledClass).val(n.defaultValue):t.addClass(n.filledClass))},remove:function(){0===t.filter(n.disabledClassList).size()&&(n.alwaysReplace?t.attr("last",t.val()).val(n.replaceValue):t.val().toLowerCase()==n.defaultValue.toLowerCase()&&t.val(n.replaceValue))}}};"auto"==n.defaultValue&&(n.defaultValue=e(this).val()),t.on("focus",a.placeholder.remove).on("blur",a.placeholder.add),a.checkDefault()}),this},e.fn.defaultText.settings={defaultValue:"auto",replaceValue:"",alwaysReplace:!1,disabledClassList:".readonly, .disabled",filledClass:"filled"}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/behavior/form.min.js b/node/src/files/components/semantic/minified/modules/behavior/form.min.js
deleted file mode 100644
index ee64e3f1e..000000000
--- a/node/src/files/components/semantic/minified/modules/behavior/form.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,a){e.fn.validateForm=function(t,n){var i,o=e(this),r=e.extend(!0,{},e.fn.validateForm.settings,n),s=arguments[0],l=[].slice.call(arguments,1);return o.each(function(){var n,o=e(this),c=e(this).find(r.selector.group),d=(e(this).find(r.selector.field),e(this).find(r.selector.prompt),[]),u=(o.selector||"",o.data("module-"+r.namespace)),f="string"==typeof s,p=r.namespace,g=r.metadata,m=r.className,h=r.errors;n={initialize:function(){n.verbose("Initializing form validation"),t===a&&e.isEmptyObject(t)?n.error(h.noFields,o):(e.fn.defaultText!==a&&e.each(t,function(e,t){n.field.add.defaultText(t)}),o.on("submit."+p,n.validate.form))},destroy:function(){o.off(p)},field:{find:function(t){var n=o.find(r.selector.field);return n.filter("#"+t).size()>0?n.filter("#"+t):n.filter('[name="'+t+'"]').size()>0?n.filter('[name="'+t+'"]'):n.filter("[data-"+g.validate+'="'+t+'"]').size()>0?n.filter("[data-"+g.validate+'="'+t+'"]'):e("")},add:{defaultText:function(e){var t=n.field.find(e.identifier);e.defaultText!==a&&t.defaultText(e.defaultText)},error:function(t,a){var i=n.field.find(t.identifier),o=i.closest(c),s=c.find(s),l=0!==s.size();o.addClass(m.error),r.inlineError&&(l||(s=e("").addClass(m.prompt).insertBefore(i)),s.html(a[0]).fadeIn(r.animateSpeed))}},remove:{error:function(e){var t=n.field.find(e.identifier),a=t.closest(c),i=c.find(i);a.removeClass(m.error),r.inlineError&&i.hide()}}},validate:{form:function(a){var i=!0;return d=[],e.each(t,function(e,t){n.validate.field(t)||(i=!1)}),i?e.proxy(r.onSuccess,this)(a):e.proxy(r.onFailure,this)(d)},field:function(t){var i=n.field.find(t.identifier),o=!0,s=[];return t.rules!==a&&e.each(t.rules,function(e,a){n.validate.rule(t,a)||(n.debug("Field is invalid",t.identifier,a.type),s.push(a.prompt),o=!1)}),o?(n.field.remove.error(t,s),r.onValid(i),!0):(d=d.concat(s),n.field.add.error(t,s),e.proxy(r.onInvalid,i)(s),!1)},rule:function(t,i){var s,l,c=n.field.find(t.identifier),d=i.type,u=t.defaultText!==a?t.defaultText:!1,f=c.val()==u?"":c.val(),p=/\[(.*?)\]/i,g=p.exec(d),m=!0;return g!==a&&null!=g?(s=g[1],l=d.replace(g[0],""),m=e.proxy(r.rules[l],o)(f,s)):m="checked"==d?c.filter(":checked").size()>0:r.rules[d](f),m}},setting:function(e,t){return t===a?r[e]:(r[e]=t,a)},verbose:function(){r.verbose&&n.debug.apply(this,arguments)},debug:function(){var e=[],t=r.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),a=console.info||console.log||function(){};a=Function.prototype.bind.call(a,console),r.debug&&(e.push(t),a.apply(console,e.concat(n)))},error:function(){var e=[],t=r.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),a=console.warn||console.log||function(){};a=Function.prototype.bind.call(a,console),r.debug&&(e.push(t),e.concat(n),a.apply(console,e.concat(n)))},invoke:function(t,i,o){var r,s;return o=o||[].slice.call(arguments,2),"string"==typeof t&&u!==a&&(t=t.split("."),r=t.length-1,e.each(t,function(t,i){return e.isPlainObject(u[i])&&t!=r?(u=u[i],!0):u[i]!==a?(s=u[i],!0):(n.error(h.method),!1)})),e.isFunction(s)?s.apply(i,o):s}},f?i=n.invoke(s,this,l):n.initialize()}),i!==a?i:this},e.fn.validateForm.settings={moduleName:"Validate Form Module",debug:!0,verbose:!1,namespace:"validate",animateSpeed:150,inlineError:!1,onValid:function(){},onInvalid:function(){},onSuccess:function(){return!0},onFailure:function(){return!1},metadata:{validate:"validate"},errors:{method:"The method you called is not defined.",noFields:"No validation object specified."},selector:{group:".field",prompt:".prompt",field:"input, textarea, select"},className:{error:"error",prompt:"prompt"},rules:{empty:function(e){return!(e===a||""===e)},email:function(e){var t=RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");return t.test(e)},length:function(e,t){return e!==a?e.length>=t:!1},not:function(e,t){return e!=t},maxLength:function(e,t){return e!==a?t>=e.length:!1},match:function(t,n){var i,o=e(this);return o.find("#"+n).size()>0?i=o.find("#"+n).val():o.find("[name="+n+"]").size()>0?i=o.find("[name="+n+"]").val():o.find('[data-validate="'+n+'"]').size()>0&&(i=o.find('[data-validate="'+n+'"]').val()),i!==a?""+t==""+i:!1},url:function(e){var t=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)}}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/behavior/state.min.js b/node/src/files/components/semantic/minified/modules/behavior/state.min.js
deleted file mode 100644
index 5afb8e421..000000000
--- a/node/src/files/components/semantic/minified/modules/behavior/state.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,a){e.fn.state=function(t){var n,o=e(this),i=o.selector||"",r=arguments[0],s=[].slice.call(arguments,1),l=(new Date).getTime(),c=[];return o.each(function(){var u,d=e(this),f=e.extend(!0,{},e.fn.state.settings,t),g=this,m=d.data("module-"+f.namespace),p="string"==typeof r,v=f.namespace,h=f.metadata,b=f.className,x=f.states,y=f.text;u={initialize:function(){u.verbose("Initializing module",g),f.automatic&&u.add.defaults(),f.context&&""!==i?(u.allows("hover")&&e(g,f.context).on(i,"mouseenter."+v,u.hover.enable).on(i,"mouseleave."+v,u.hover.disable),u.allows("pressed")&&e(g,f.context).on(i,"mousedown."+v,u.pressed.enable).on(i,"mouseup."+v,u.pressed.disable),u.allows("focus")&&e(g,f.context).on(i,"focus."+v,u.focus.enable).on(i,"blur."+v,u.focus.disable),e(f.context).on(i,"mouseenter."+v,u.text.change).on(i,"mouseleave."+v,u.text.reset).on(i,"click."+v,u.toggle)):(u.allows("hover")&&d.on("mouseenter."+v,u.hover.enable).on("mouseleave."+v,u.hover.disable),u.allows("pressed")&&d.on("mousedown."+v,u.pressed.enable).on("mouseup."+v,u.pressed.disable),u.allows("focus")&&d.on("focus."+v,u.focus.enable).on("blur."+v,u.focus.disable),d.on("mouseenter."+v,u.text.change).on("mouseleave."+v,u.text.reset).on("click."+v,u.toggle)),d.data("module-"+v,u)},destroy:function(){u.verbose("Destroying previous module",g),d.off("."+v)},refresh:function(){u.verbose("Refreshing selector cache",g),d=e(g)},add:{defaults:function(){var n=t&&e.isPlainObject(t.states)?t.states:{};e.each(f.defaults,function(t,o){u.is[t]!==a&&u.is[t]()&&(u.verbose("Adding default states",t,g),e.extend(f.states,o,n))})}},is:{active:function(){return d.hasClass(b.active)},loading:function(){return d.hasClass(b.loading)},inactive:function(){return!d.hasClass(b.active)},enabled:function(){return!d.is(f.filter.active)},disabled:function(){return d.is(f.filter.active)},textEnabled:function(){return!d.is(f.filter.text)},button:function(){return d.is(".button:not(a, .submit)")},input:function(){return d.is("input")}},allows:function(e){return x[e]||!1},enable:function(e){u.allows(e)&&d.addClass(b[e])},disable:function(e){u.allows(e)&&d.removeClass(b[e])},textFor:function(e){return y[e]||!1},focus:{enable:function(){d.addClass(b.focus)},disable:function(){d.removeClass(b.focus)}},hover:{enable:function(){d.addClass(b.hover)},disable:function(){d.removeClass(b.hover)}},pressed:{enable:function(){d.addClass(b.pressed).one("mouseleave",u.pressed.disable)},disable:function(){d.removeClass(b.pressed)}},toggle:function(){var e=d.data(h.promise);u.allows("active")&&u.is.enabled()&&(u.refresh(),e!==a?u.listenTo(e):u.change())},listenTo:function(t){u.debug("API request detected, waiting for state signal",t),t?(y.loading&&u.text.update(y.loading),e.when(t).then(function(){"resolved"==t.state()?(u.debug("API request succeeded"),f.activateTest=function(){return!0},f.deactivateTest=function(){return!0}):(u.debug("API request failed"),f.activateTest=function(){return!1},f.deactivateTest=function(){return!1}),u.change()})):(f.activateTest=function(){return!1},f.deactivateTest=function(){return!1})},change:function(){u.debug("Determining state change direction"),u.is.inactive()?u.activate():u.deactivate(),f.sync&&u.sync(),f.onChange()},activate:function(){e.proxy(f.activateTest,g)()&&(u.debug("Setting state to active"),d.addClass(b.active),u.text.update(y.active))},deactivate:function(){e.proxy(f.deactivateTest,g)()&&(u.debug("Setting state to inactive"),d.removeClass(b.active),u.text.update(y.inactive))},sync:function(){u.verbose("Syncing other buttons to current state"),u.is.active()?o.not(d).state("activate"):o.not(d).state("deactivate")},text:{get:function(){return f.selector.text?d.find(f.selector.text).text():d.html()},flash:function(e,t){var n=u.text.get();e=e||f.text.flash,t=t||f.flashDuration,u.text.update(e),setTimeout(function(){u.text.update(n)},t)},change:function(){u.verbose("Checking if text should be changed"),u.is.textEnabled()&&(u.is.active()?y.hover?(u.verbose("Changing text to hover text",y.hover),u.text.update(y.hover)):y.disable&&(u.verbose("Changing text to disable text",y.disable),u.text.update(y.disable)):y.hover?(u.verbose("Changing text to hover text",y.disable),u.text.update(y.hover)):y.enable&&(u.verbose("Changing text to enable text",y.disable),u.text.update(y.enable)))},reset:function(){var e=y.active||d.data(h.storedText),t=y.inactive||d.data(h.storedText);u.is.textEnabled()&&(u.is.active()&&e?(u.verbose("Resetting active text",e),u.text.update(e)):t&&(u.verbose("Resetting inactive text",e),u.text.update(t)))},update:function(e){var t=u.text.get();e&&e!==t&&(u.debug("Updating text",e),f.selector.text?d.data(h.storedText,e).find(f.selector.text).text(e):d.data(h.storedText,e).html(e))}},setting:function(e,t){return t===a?f[e]:(f[e]=t,a)},performance:{log:function(e){var t,n;f.performance&&(t=(new Date).getTime(),n=t-l,l=t,c.push({Name:e,"Execution Time":n}),clearTimeout(u.performance.timer),u.performance.timer=setTimeout(u.performance.display,100))},display:function(){var t=f.moduleName+" Performance ("+i+")";f.moduleName+": "+i+"("+o.size()+" elements)",console.group!==a&&c.length>0&&(console.groupCollapsed(t),console.table?console.table(c):e.each(c,function(e,t){console.log(t.Name+":"+t["Execution Time"])}),console.groupEnd(),c=[])}},verbose:function(){f.verbose&&f.debug&&(u.performance.log(arguments[0]),u.verbose=Function.prototype.bind.call(console.info,console,f.moduleName+":"))},debug:function(){f.debug&&(u.performance.log(arguments[0]),u.verbose=Function.prototype.bind.call(console.info,console,f.moduleName+":"))},error:function(){console.log!==a&&(u.error=Function.prototype.bind.call(console.log,console,f.moduleName+":"))},invoke:function(t,n,o){var i,r;return o=o||[].slice.call(arguments,2),"string"==typeof t&&m!==a&&(t=t.split("."),i=t.length-1,e.each(t,function(t,n){return e.isPlainObject(m[n])&&t!=i?(m=m[n],!0):m[n]!==a?(r=m[n],!0):(u.error(f.errors.method),!1)})),e.isFunction(r)?r.apply(n,o):r}},p?n=u.invoke(r,this,s):(m!==a&&u.destroy(),u.initialize())}),n!==a?n:this},e.fn.state.settings={moduleName:"State Module",debug:!0,verbose:!1,namespace:"state",performance:!0,onChange:function(){},activateTest:function(){return!0},deactivateTest:function(){return!0},automatic:!0,sync:!1,flashDuration:3e3,filter:{text:".loading, .disabled",active:".disabled"},context:!1,errors:{method:"The method you called is not defined."},metadata:{promise:"promise",storedText:"stored-text"},className:{focus:"focus",hover:"hover",pressed:"down",active:"active",loading:"loading"},selector:{text:!1},defaults:{input:{hover:!0,focus:!0,pressed:!0,loading:!1,active:!1},button:{hover:!0,focus:!1,pressed:!0,active:!1,loading:!0}},states:{hover:!0,focus:!0,pressed:!0,loading:!1,active:!1},text:{flash:!1,hover:!1,active:!1,inactive:!1,enable:!1,disable:!1}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/chat.min.css b/node/src/files/components/semantic/minified/modules/chat.min.css
deleted file mode 100644
index 14bf199bd..000000000
--- a/node/src/files/components/semantic/minified/modules/chat.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.chat{background-color:#F8F8F8;width:330px;height:370px;padding:0}.ui.chat .room{position:relative;overflow:hidden;height:286px;border:1px solid #999;border-top:0;border-bottom:0}.ui.chat .room .throbber{display:none;margin:-25px 0 0 -25px}.ui.chat .actions{overflow:hidden;background-color:#EEE;padding:4px;border:1px solid #BBB;-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.ui.chat .actions .button{float:right;margin-left:3px}.ui.chat .actions .message{float:left;margin-left:6px;font-size:11px;color:#AAA;text-shadow:0 -1px 0 rgba(255,255,255,.8);line-height:28px}.ui.chat .actions .message .throbber{display:inline-block;margin-right:8px;vertical-align:middle;vertical-align:text-bottom}.ui.chat .log{float:left;overflow:auto;overflow-x:hidden;overflow-y:auto}.ui.chat .log .message{padding:3px 0;border-top:1px dotted #DADADA}.ui.chat .log .message:first-child{border-top:0}.ui.chat .status{padding:5px 0;color:#AAA;font-size:12px;font-style:italic;line-height:1.33;border-top:1px dotted #DADADA}.ui.chat .log .status:first-child{border-top:0}.ui.chat .log .flag{float:left}.ui.chat .log p{margin-left:0}.ui.chat .log .author{font-weight:700;-webkit-transition:color .3s ease-out;-moz-transition:color .3s ease-out;-o-transition:color .3s ease-out;-ms-transition:color .3s ease-out;transition:color .3s ease-out}.ui.chat .log a.author:hover{opacity:.8}.ui.chat .log .message.admin p{font-weight:700;margin:1px 0 0 23px}.ui.chat .log .divider{margin:-1px 0;font-size:11px;padding:10px 0;border-top:1px solid #F8F8F8;border-bottom:1px solid #F8F8F8}.ui.chat .log .divider .rule{top:50%;width:15%}.ui.chat .log .divider .label{color:#777;margin:0}.ui.chat .room .user-list{position:relative;overflow:auto;overflow-x:hidden;overflow-y:auto;float:left;background-color:#EEE;border-left:1px solid #DDD}.ui.chat .room .user-list .user{display:table;padding:3px 7px;border-bottom:1px solid #DDD}.ui.chat .room .user-list .user:hover{background-color:#F8F8F8}.ui.chat .room .user-list .image{display:table-cell;vertical-align:middle;width:20px}.ui.chat .room .user-list .image img{width:20px;height:20px;vertical-align:middle}.ui.chat .room .user-list p{display:table-cell;vertical-align:middle;padding-left:7px;padding-right:14px;font-size:11px;line-height:1.2;font-weight:700}.ui.chat .room .user-list a:hover{opacity:.8}.ui.chat.loading .throbber{display:block}.ui.chat .talk{border:1px solid #999;border-top:1px solid #BBB;padding:5px 0 0;background-color:#CCC;background:#fff -webkit-linear-gradient(top,#eee 0,#aaa 100%) repeat;background:#fff -moz-linear-gradient(top,#eee 0,#aaa 100%) repeat;background:#fff -o-linear-gradient(top,#eee 0,#aaa 100%) repeat;background:#fff -ms-linear-gradient(top,#eee 0,#aaa 100%) repeat;background:#fff linear-gradient(top,#eee 0,#aaa 100%) repeat;-webkit-box-shadow:0 1px 0 #FFF inset;-moz-box-shadow:0 1px 0 #FFF inset;box-shadow:0 1px 0 #FFF inset;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.ui.chat .talk .avatar,.ui.chat .talk input,.ui.chat .talk .button{float:left}.ui.chat .talk .avatar{border-top:1px solid #BBB;border-left:1px solid #BBB;width:30px;height:30px;margin:0 0 0 5px;background-color:#DADADA}.ui.chat .talk .avatar img{display:block;width:30px;height:30px;margin-right:4px}.ui.chat .talk input{border:1px solid #CCC;margin:0;width:196px;height:14px;padding:8px 5px;font-size:12px;color:#555}.ui.chat .talk input.focus{border:1px solid #AAA}.ui.chat .send{margin-left:-2px;width:54px;height:22px;line-height:23px;font-size:12px;padding:4px 12px;-moz-box-shadow:-2px 0 2px -2px rgba(0,0,0,.3);-webkit-box-shadow:-2px 0 2px -2px rgba(0,0,0,.3);box-shadow:-2px 0 2px -2px rgba(0,0,0,.3);border-radius:0 5px 5px 0}.ui.chat .talk .log-in.button{display:block;float:none;margin-top:-6px;height:22px;border-radius:0 0 4px 4px}.ui.chat .talk .log-in.button i{vertical-align:text-top}.ui.chat .log .team.flag{width:18px}.ui.chat.loading .throbber{display:block}.ui.chat{width:330px;height:370px}.ui.chat .room .container{width:3000px}.ui.chat .log{width:314px;height:278px;padding:4px 7px}.ui.chat .room .user-list{width:124px;height:278px;padding:4px 0}.ui.chat .room .user-list .user{width:110px}.ui.chat .talk{height:40px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/chat.min.js b/node/src/files/components/semantic/minified/modules/chat.min.js
deleted file mode 100644
index 3982454e1..000000000
--- a/node/src/files/components/semantic/minified/modules/chat.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,a){e.fn.chat=function(t,n,o){var i=e.extend(!0,{},e.fn.chat.settings,o),s=arguments||!1;return e(this).each(function(){var o,r,l,c,u,d,f=e(this),m=f.find(i.selector.expandButton),p=f.find(i.selector.userListButton),g=f.find(i.selector.userList),h=(f.find(i.selector.room),f.find(i.selector.userCount)),v=f.find(i.selector.log),b=(f.find(i.selector.message),f.find(i.selector.messageInput)),y=f.find(i.selector.messageButton),x=f.data("module"),C=i.className,w=i.namespace,T="",k={};return d={channel:!1,width:{log:v.width(),userList:g.outerWidth()},initialize:function(){return Pusher===a&&d.error(i.errors.pusher),t===a||n===a?(d.error(i.errors.key),!1):i.endpoint.message||i.endpoint.authentication?(u=new Pusher(t),Pusher.channel_auth_endpoint=i.endpoint.authentication,d.channel=u.subscribe(n),d.channel.bind("pusher:subscription_succeeded",d.user.list.create),d.channel.bind("pusher:subscription_error",d.error),d.channel.bind("pusher:member_added",d.user.joined),d.channel.bind("pusher:member_removed",d.user.left),d.channel.bind("update_messages",d.message.receive),e.each(i.customEvents,function(e,t){d.channel.bind(e,t)}),e.fn.hoverClass!==a&&e.fn.downClass!==a&&(m.hoverClass().downClass(),p.hoverClass().downClass(),y.hoverClass().downClass()),p.on("click."+w,d.event.toggleUserList),m.on("click."+w,d.event.toggleExpand),b.on("keydown."+w,d.event.input.keydown).on("keyup."+w,d.event.input.keyup),y.on("mouseenter."+w,d.event.hover).on("mouseleave."+w,d.event.hover).on("click."+w,d.event.submit),v.animate({scrollTop:v.prop("scrollHeight")},400),f.data("module",d).addClass(C.loading),a):(d.error(i.errors.endpoint),!1)},refresh:function(){p.removeClass(C.active),d.width={log:v.width(),userList:g.outerWidth()},p.hasClass(C.active)&&d.user.list.hide(),f.data("module",d)},user:{updateCount:function(){i.userCount&&(k=f.data("users"),l=0,e.each(k,function(){l++}),h.html(i.templates.userCount(l)))},joined:function(t){k=f.data("users"),"anonymous"!=t.id&&k[t.id]===a&&(k[t.id]=t.info,i.randomColor&&t.info.color===a&&(t.info.color=i.templates.color(t.id)),T=i.templates.userList(t.info),t.info.isAdmin?e(T).prependTo(g).preview({type:"user",placement:"left"}):e(T).appendTo(g).preview({type:"user",placement:"left"}),e.fn.preview!==a&&g.children().last().preview({type:"user",placement:"left"}),i.partingMessages&&(v.append(i.templates.joined(t.info)),d.message.scroll.test()),d.user.updateCount())},left:function(e){k=f.data("users"),e!==a&&"anonymous"!==e.id&&(delete k[e.id],f.data("users",k),g.find("[data-id="+e.id+"]").remove(),i.partingMessages&&(v.append(i.templates.left(e.info)),d.message.scroll.test()),d.user.updateCount())},list:{create:function(t){k={},t.each(function(e){"anonymous"!==e.id&&"undefined"!==e.id&&(i.randomColor&&e.info.color===a&&(e.info.color=i.templates.color(e.id)),T=e.info.isAdmin?i.templates.userList(e.info)+T:T+i.templates.userList(e.info),k[e.id]=e.info)}),f.data("users",k).data("user",k[t.me.id]).removeClass(C.loading),g.html(T),e.fn.preview!==a&&g.children().preview({type:"user",placement:"left"}),d.user.updateCount(),e.proxy(i.onJoin,g.children())()},show:function(){v.animate({width:d.width.log-d.width.userList},{duration:i.speed,easing:i.easing,complete:d.message.scroll.move})},hide:function(){v.stop().animate({width:d.width.log},{duration:i.speed,easing:i.easing,complete:d.message.scroll.move})}}},message:{scroll:{test:function(){c=v.prop("scrollHeight")-v.height(),Math.abs(v.scrollTop()-c)',t+=''):t+='',t+="
",t+=e.user.color!==a?''+e.user.name+": ":''+e.user.name+": ",t+=""+e.text+"
"+"
"},joined:function(e){return typeof e.name!==a?''+e.name+" has joined the chat.
":!1},left:function(e){return typeof e.name!==a?''+e.name+" has left the chat.
":!1},userList:function(e){var t="";return e.isAdmin&&(e.color="#55356A"),t+='"}}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/checkbox.min.css b/node/src/files/components/semantic/minified/modules/checkbox.min.css
deleted file mode 100644
index 408c1f072..000000000
--- a/node/src/files/components/semantic/minified/modules/checkbox.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.checkbox{position:relative;display:inline-block;outline:0;width:1em;height:1em;vertical-align:middle}.ui.checkbox input{visibility:hidden;outline:0}.ui.checkbox .box,.ui.checkbox label{outline:0;cursor:pointer;position:absolute;width:1em;height:1em;bottom:0;left:0;border-radius:4px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2);background:#FFF;-webkit-transition:background-color .1s ease-out,box-shadow .1s ease-out;-moz-transition:background-color .1s ease-out,box-shadow .1s ease-out;-o-transition:background-color .1s ease-out,box-shadow .1s ease-out;-ms-transition:background-color .1s ease-out,box-shadow .1s ease-out;transition:background-color .1s ease-out,box-shadow .1s ease-out}.ui.checkbox .box:after,.ui.checkbox label:after{-ms-filter:"alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;content:'';position:absolute;background:transparent;border:.2em solid #333;border-top:0;border-right:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.ui.checkbox .box:after,.ui.checkbox label:after{width:.5em;height:.2em;top:.25em;left:.2em}.ui.checkbox .box:hover,.ui.checkbox label:hover{background-color:rgba(0,0,0,.02);-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.3);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.3);box-shadow:0 0 0 1px rgba(0,0,0,.3)}.ui.checkbox .box:active,.ui.checkbox label:active{background-color:rgba(0,0,0,.05)}.ui.checkbox input:checked+.box:after,.ui.checkbox input:checked+label:after{-ms-filter:"alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1}.ui.disabled.checkbox+.box:after,.ui.checkbox input[disabled]+.box:after,.ui.disabled.checkbox label,.ui.checkbox input[disabled]+label{opacity:.4}.ui.radio.checkbox{width:14px;height:16px}.ui.radio.checkbox .box,.ui.radio.checkbox label{width:14px;height:14px;-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.ui.radio.checkbox .box:after,.ui.radio.checkbox label:after{top:3px;left:3px;border:0;width:8px;height:8px;background-color:#555;-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.ui.checkbox,.ui.checkbox .box,.ui.checkbox label{font-size:1em}.ui.large.checkbox,.ui.large.checkbox .box,.ui.large.checkbox label{font-size:1.25em}.ui.huge.checkbox,.ui.huge.checkbox .box,.ui.huge.checkbox label{font-size:1.5em}.ui.round.blue.checkbox label:after{background:-webkit-linear-gradient(top,#016286 0,#00506e 100%);background:-moz-linear-gradient(top,#016286 0,#00506e 100%);background:-o-linear-gradient(top,#016286 0,#00506e 100%);background:-ms-linear-gradient(top,#016286 0,#00506e 100%);background:linear-gradient(top,#016286 0,#00506e 100%)}.ui.round.checkbox{width:20px;height:20px;margin:0 auto;background:#FCFFF4;background:-webkit-linear-gradient(top,#fcfff4 0,#dfe5d7 40%,#b3bead 100%);background:-moz-linear-gradient(top,#fcfff4 0,#dfe5d7 40%,#b3bead 100%);background:-o-linear-gradient(top,#fcfff4 0,#dfe5d7 40%,#b3bead 100%);background:-ms-linear-gradient(top,#fcfff4 0,#dfe5d7 40%,#b3bead 100%);background:linear-gradient(top,#fcfff4 0,#dfe5d7 40%,#b3bead 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FCFFF4', endColorstr='#b3bead', GradientType=0);-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;-webkit-box-shadow:inset 0 1px 1px #fff,0 1px 3px rgba(0,0,0,.5);-moz-box-shadow:inset 0 1px 1px #fff,0 1px 3px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px #fff,0 1px 3px rgba(0,0,0,.5);position:relative}.ui.round.checkbox .box,.ui.round.checkbox label{cursor:pointer;position:absolute;width:14px;height:14px;-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;left:3px;top:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.5) inset,0 1px 0 #fff;-moz-box-shadow:0 1px 1px rgba(0,0,0,.5) inset,0 1px 0 #fff;box-shadow:0 1px 1px rgba(0,0,0,.5) inset,0 1px 0 #fff;background:-webkit-linear-gradient(top,#222 0,#4d4d4d 100%);background:-moz-linear-gradient(top,#222 0,#4d4d4d 100%);background:-o-linear-gradient(top,#222 0,#4d4d4d 100%);background:-ms-linear-gradient(top,#222 0,#4d4d4d 100%);background:linear-gradient(top,#222 0,#4d4d4d 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#222222', endColorstr='#4D4D4D', GradientType=0)}.ui.round.checkbox .box:after,.ui.round.checkbox label:after{-ms-filter:"alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;content:'';position:absolute;width:10px;height:10px;background:#B6B6B6;background:-webkit-linear-gradient(top,#b6b6b6 0,#929292 100%);background:-moz-linear-gradient(top,#b6b6b6 0,#929292 100%);background:-o-linear-gradient(top,#b6b6b6 0,#929292 100%);background:-ms-linear-gradient(top,#b6b6b6 0,#929292 100%);background:linear-gradient(top,#b6b6b6 0,#929292 100%);border:0;-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;top:2px;left:2px;-webkit-box-shadow:inset 0 1px 1px #fff,0 1px 3px rgba(0,0,0,.5);-moz-box-shadow:inset 0 1px 1px #fff,0 1px 3px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px #fff,0 1px 3px rgba(0,0,0,.5)}.ui.round.checkbox .box:hover:after,.ui.round.checkbox label:hover:after{-ms-filter:"alpha(Opacity=30)";filter:alpha(opacity=30);opacity:.3}.ui.round.checkbox input:checked+.box:after,.ui.round.checkbox input:checked+label:after{-ms-filter:"alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/checkbox.min.js b/node/src/files/components/semantic/minified/modules/checkbox.min.js
deleted file mode 100644
index 24f79c571..000000000
--- a/node/src/files/components/semantic/minified/modules/checkbox.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.checkbox=function(t){var n,a=e(this),i=e.extend(!0,{},e.fn.checkbox.settings,t),s="."+i.namespace,r="module-"+i.namespace,l=(a.selector||"",(new Date).getTime()),c=[],u=arguments[0],d="string"==typeof u,f=[].slice.call(arguments,1);return a.each(function(){var t,m=e(this),p=e(this).find(i.selector.input),g=m.selector||"",h=this,v=m.data("module-"+i.namespace),b=i.className,x=i.namespace,y=i.errors;t={initialize:function(){i.context&&""!==g?(t.verbose("Initializing checkbox with delegated events",m),e(h,i.context).on(g,"click"+s,t.toggle).data(r,t)):(t.verbose("Initializing checkbox with bound events",m),m.on("click"+s,t.toggle).data(r,t))},destroy:function(){t.verbose("Destroying previous module for",m),m.off(x)},enable:function(){t.debug("Enabling checkbox"),m.addClass(b.active),p.prop("checked",!0),e.proxy(i.onChange,p.get())(),e.proxy(i.onEnable,p.get())()},disable:function(){t.debug("Disabling checkbox"),m.removeClass(b.active),p.prop("checked",!1),e.proxy(i.onChange,p.get())(),e.proxy(i.onDisable,p.get())()},toggle:function(){p.prop("checked")!==o&&p.prop("checked")?t.disable():t.enable()},setting:function(t,n){return n===o?i[t]:(e.isPlainObject(t)?e.extend(!0,i,t):i[t]=n,o)},internal:function(n,a){return a===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=a,o)},debug:function(){i.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,i.moduleName+":"))},verbose:function(){i.verbose&&i.debug&&(t.performance.log(arguments[0]),t.verbose=Function.prototype.bind.call(console.info,console,i.moduleName+":"))},error:function(){console.log!==o&&(t.error=Function.prototype.bind.call(console.log,console,i.moduleName+":"))},performance:{log:function(e){var n,o,a;i.performance&&(n=(new Date).getTime(),a=l||n,o=n-a,l=n,c.push({Element:h,Name:e,"Execution Time":o}),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100))},display:function(){var t=i.moduleName,n=(i.moduleName+": "+g+"("+a.size()+" elements)",0);g&&(t+="Performance ("+g+")"),(console.group!==o||console.table!==o)&&c.length>0&&(console.groupCollapsed(t),console.table?(e.each(c,function(e,t){n+=t["Execution Time"]}),console.table(c)):e.each(c,function(e,t){n+=t["Execution Time"]}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),c=[],l=!1)}},invoke:function(n,a,i){var s,r;return a=a||f,i=h||i,"string"==typeof n&&v!==o&&(n=n.split("."),s=n.length-1,e.each(n,function(n,a){return e.isPlainObject(v[a])&&n!=s?(v=v[a],!0):v[a]!==o?(r=v[a],!0):(t.error(y.method),!1)})),e.isFunction(r)?(t.verbose("Executing invoked function",r),r.apply(i,a)):r||!1}},d?(v===o&&t.initialize(),n=t.invoke(u)):(v!==o&&t.destroy(),t.initialize())}),n?n:this},e.fn.checkbox.settings={moduleName:"Checkbox Module",namespace:"checkbox",verbose:!0,debug:!0,performance:!0,context:!1,onChange:function(){},onEnable:function(){},onDisable:function(){},errors:{method:"The method you called is not defined."},selector:{input:"input"},className:{active:"active"}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/modal.min.css b/node/src/files/components/semantic/minified/modules/modal.min.css
deleted file mode 100644
index 7e32d7546..000000000
--- a/node/src/files/components/semantic/minified/modules/modal.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#dimmer{position:absolute;visibility:hidden;top:0;left:0;z-index:999;margin:0;width:100%;height:100%;padding:0}#dimmer .content{position:fixed;top:0;left:0;margin:0;width:100%;height:100%;padding:0;visibility:hidden;background-color:#000;opacity:0}.dimmer{display:none;position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;background-color:#000;z-index:999}.white.dimmer{background-color:#FFF}.loading .dimmer{display:block;opacity:.8;-webkit-transition:opacity .5s linear;-moz-transition:opacity .5s linear;-o-transition:opacity .5s linear;-ms-transition:opacity .5s linear;transition:opacity .5s linear}.modal{display:none;position:fixed;z-index:1000;top:50%;left:50%;margin-left:-400px;width:800px;-webkit-box-shadow:5px 5px 15px rgba(0,0,0,.8);-moz-box-shadow:5px 5px 15px rgba(0,0,0,.8);box-shadow:5px 5px 15px rgba(0,0,0,.8);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.modal.absolute{position:absolute}.modal.fixed{position:fixed}.modal>.close{cursor:pointer;position:absolute;font-size:14px;color:#FFF;top:-18px;right:-18px;opacity:.8}.modal>.close:hover{opacity:1}.modal>hgroup{background-color:#442359;padding:15px 20px;-webkit-border-radius:10px 10px 0 0;-moz-border-radius:10px 10px 0 0;border-radius:10px 10px 0 0}.modal>hgroup h2{margin:0;font-size:22px;font-weight:700;color:#FFF;text-shadow:0 1px 0 rgba(0,0,0,.75)}.modal>hgroup h3{font-size:18px;color:#FFF}.modal>.content{position:relative;overflow:hidden;padding:20px 20px 40px;background-color:#FAFAFA;-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px}.modal>.content .left{float:left;width:50%}.modal>.content .right{float:right;width:50%}.modal.static{display:block;position:relative;overflow:hidden;top:0;left:0;border:1px solid #CCC;width:auto;height:auto;margin:0 auto;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;color:#555;z-index:2;-moz-box-shadow:0 0 2px rgba(0,0,0,.2);-webkit-box-shadow:0 0 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.2)}.modal.static>hgroup,.modal.static>.content{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/modal.min.js b/node/src/files/components/semantic/minified/modules/modal.min.js
deleted file mode 100644
index a84433ffc..000000000
--- a/node/src/files/components/semantic/minified/modules/modal.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.dimScreen=function(t){var n="function"==typeof t?e.extend({},e.fn.modal.settings,{dim:t}):e.extend({},e.fn.modal.settings,t),o=e(n.context),i=o.children(n.selector.dimmer),a=i.size()>0,s=i.css("opacity");return a||(i=e("").attr("id","dimmer").html(''),o.append(i)),s!=n.opacity&&(i.one("click",function(){n.unDim(),e.unDimScreen()}),0===n.duration?i.css({visibility:"visible"}).find(".content").css({opacity:n.opacity,visibility:"visible"}):i.css({visibility:"visible"}).find(".content").css({opacity:0,visibility:"visible"}).fadeTo(n.duration,n.opacity,n.dim)),this},e.unDimScreen=function(t){var n="function"==typeof t?e.extend({},e.fn.modal.settings,{unDim:t}):e.extend({},e.fn.modal.settings,t),o=e(n.context),i=o.children(n.selector.dimmer),a=i.size()>0;return a&&(n.unDim(),0===n.duration?i.css({visibility:"hidden"}).remove():i.find(".content").fadeTo(n.duration,0,function(){i.remove()})),this},e.fn.modal=function(i){var a,s=e.extend(!0,{},e.fn.modal.settings,i),r=arguments[0],c=[].slice.call(arguments,1);return e(this).each(function(){var i,l=e(this),u=l.find(s.selector.closeButton),d=(e(s.context).find(s.selector.dimmer),e(s.context).children(s.selector.modal)),f=d.not(l),m=l.data("module-"+s.namespace),p="string"==typeof r,g=(s.className,s.namespace);i={initialize:function(){l.on("modalShow."+g,i.show).on("modalHide."+g,i.hide).data("module-"+g,i)},show:function(){var i=l.outerHeight(),a=e(t).height(),r=i>a,c=r?"absolute":"fixed",d=r?"0":"50%",m=r?a/8:-((i-s.closeSpacing)/2),p="absolute"==l.css("position")?m+e(t).prop("pageYOffset"):m,h=p+s.animationOffset;e.fn.popIn!==o?l.addClass(c).css({display:"block",opacity:0,top:d,marginTop:p+"px"}).popIn():l.addClass(c).css({display:"block",opacity:0,top:d,marginTop:h+"px"}).animate({opacity:1,marginTop:p+"px"},s.duration+300,s.easing),f.is(":visible")&&f.filter(":visible").hide(),e.dimScreen({context:s.context,duration:0,dim:function(){e(n).on("keyup."+g,function(e){var t=e.which,n=27;switch(t){case n:l.trigger("modalHide"),e.preventDefault()}}),u.one("click",function(){l.trigger("modalHide")}),s.dim()},unDim:function(){l.trigger("modalHide"),u.unbind("click")}})},hide:function(){e(n).off("keyup."+g),e.unDimScreen({duration:0,unDim:function(){l.popOut(200),s.unDim()}})},setting:function(e,t){return t===o?s[e]:(s[e]=t,o)},debug:function(){var e=[],t=s.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};s.debug&&(e.push(t),o.apply(console,e.concat(n)))},error:function(){var e=[],t=s.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.warn||console.log||function(){};s.debug&&(e.push(t),e.concat(n),o.apply(console,e.concat(n)))},invoke:function(t,n,a){var r,c;return a=a||[].slice.call(arguments,2),"string"==typeof t&&m!==o&&(t=t.split("."),r=t.length-1,e.each(t,function(t,n){return e.isPlainObject(m[n])&&t!=r?(m=m[n],!0):m[n]!==o?(c=m[n],!0):(i.error(s.errors.method),!1)})),e.isFunction(c)?c.apply(n,a):c}},p?a=i.invoke(r,this,c):i.initialize()}),a!==o?a:this},e.fn.modal.settings={moduleName:"Modal",debug:!1,namespace:"modal",errors:{method:"The method you called is not defined"},dim:function(){},unDim:function(){},hide:function(){},show:function(){},context:"body",opacity:.8,closeSpacing:25,animationOffset:15,duration:400,easing:"easeOutExpo",selector:{dimmer:"#dimmer",modal:".modal",closeButton:".close"}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/nag.min.css b/node/src/files/components/semantic/minified/modules/nag.min.css
deleted file mode 100644
index 6ced1d3d3..000000000
--- a/node/src/files/components/semantic/minified/modules/nag.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.nag{display:none;position:absolute;top:0;left:10%;z-index:100;width:80%;min-height:20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;padding:8px 20px;background-color:#272626;background:-webkit-linear-gradient(top,rgba(22,22,22,.85) 0,#111 100%);background:-moz-linear-gradient(top,rgba(22,22,22,.85) 0,#111 100%);background:-o-linear-gradient(top,rgba(22,22,22,.85) 0,#111 100%);background:-ms-linear-gradient(top,rgba(22,22,22,.85) 0,#111 100%);background:linear-gradient(top,rgba(22,22,22,.85) 0,#111 100%);-webkit-box-shadow:0 2px 3px rgba(0,0,0,.4),0 1px 0 rgba(255,255,255,.1) inset;-moz-box-shadow:0 2px 3px rgba(0,0,0,.4),0 1px 0 rgba(255,255,255,.1) inset;box-shadow:0 2px 3px rgba(0,0,0,.4),0 1px 0 rgba(255,255,255,.1) inset;text-align:center;font-size:14px;font-weight:700;color:#009FDA;text-shadow:0 1px 0 rgba(0,0,0,.8);-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-transition:.2s background;-moz-transition:.2s background;-o-transition:.2s background;-ms-transition:.2s background;transition:.2s background}.ui.nag .close{cursor:pointer;opacity:.4;position:absolute;top:50%;right:15px;margin-top:-6px;font-size:12px;color:#FFF;-webkit-transition:.1s opacity;-moz-transition:.1s opacity;-o-transition:.1s opacity;-ms-transition:.1s opacity;transition:.1s opacity}.ui.nag .close.hover{opacity:1}.ui.nag b{font-weight:700;color:#EEE}.ui.nag.bottom{-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.ui.nag.fixed{position:fixed}.ui.nag.bottom.fixed{top:auto;bottom:0}.ui.nag.hover{cursor:pointer;background-color:#272626;background:-webkit-linear-gradient(top,#161616 0,#111 100%);background:-moz-linear-gradient(top,#161616 0,#111 100%);background:-o-linear-gradient(top,#161616 0,#111 100%);background:-ms-linear-gradient(top,#161616 0,#111 100%);background:linear-gradient(top,#161616 0,#111 100%)}.ui.nag.hover b{font-weight:700;color:#FFF}.ui.nag.white{background-color:#EEE;background:-webkit-linear-gradient(top,#fff 0,#ddd 100%);background:-moz-linear-gradient(top,#fff 0,#ddd 100%);background:-o-linear-gradient(top,#fff 0,#ddd 100%);background:-ms-linear-gradient(top,#fff 0,#ddd 100%);background:linear-gradient(top,#fff 0,#ddd 100%);-webkit-box-shadow:0 2px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1) inset;-moz-box-shadow:0 2px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1) inset;box-shadow:0 2px 3px rgba(0,0,0,.2),0 1px 0 rgba(255,255,255,.1) inset;text-shadow:0 1px 0 rgba(255,255,255,.8);color:#888}.ui.nag.white .close,.ui.nag.white b{color:#000}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/nag.min.js b/node/src/files/components/semantic/minified/modules/nag.min.js
deleted file mode 100644
index e5976ecfc..000000000
--- a/node/src/files/components/semantic/minified/modules/nag.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.nag=function(n){var i=e.extend(!0,{},e.fn.nag.settings,n),a=arguments||!1;return e(this).each(function(){var n,s,r,c,l,u,d,f,m,p=e(this),g=p.find(i.selector.close),h=e(i.context),v=p.data("module"),b=i.className,y=t.requestAnimationFrame||t.mozRequestAnimationFrame||t.webkitRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,0)};return m={initialize:function(){n=p.offset(),s=p.outerHeight(),r=h.outerWidth(),c=h.outerHeight(),l=h.offset(),p.data("module",m),g.on("mouseenter mouseleave",m.event.hover).on("click",m.dismiss),i.context==t&&"fixed"==i.position&&p.addClass(b.fixed),i.sticky&&("absolute"==i.position?h.on("scroll resize",m.event.scroll):e(t).on("scroll resize",m.event.scroll),e.proxy(m.event.scroll,this)()),i.followLink&&p.on("mouseenter mouseleave",m.event.hover).on("click",m.followLink),i.displayTime>0&&setTimeout(m.hide,i.displayTime),m.should.show()?p.is(":visible")||m.show():m.hide()},refresh:function(){n=p.offset(),s=p.outerHeight(),r=h.outerWidth(),c=h.outerHeight(),l=h.offset()},show:function(){e.fn.popIn!==o?p.popIn(i.duration):p.fadeIn(i.duration,i.easing)},hide:function(){p.fadeOut(i.duration,i.easing)},stick:function(){if(m.refresh(),"fixed"==i.position){var n=e(t).prop("pageYOffset")||e(t).scrollTop(),o=p.hasClass(b.bottom)?l.top+(c-s)-n:l.top-n;p.css({position:"fixed",top:o,left:l.left,width:r-i.scrollBarWidth})}else p.css({top:d})},unStick:function(){p.css({top:""})},dismiss:function(){i.storageMethod&&m.storage.set(i.storedKey,i.storedValue),m.hide()},should:{show:function(){return m.storage.get(i.storedKey)==i.storedValue?!1:!0},stick:function(){return u=h.prop("pageYOffset")||h.scrollTop(),d=p.hasClass(b.bottom)?c-p.outerHeight()+u:u,d>n.top?!0:"fixed"==i.position?!0:!1}},followLink:function(){e.fn.followLink!==o&&p.followLink()},storage:{set:function(t,n){"local"==i.storageMethod&&store!==o?store.set(t,n):e.cookie!==o?e.cookie(t,n):m.error(i.errors.noStorage)},get:function(t){return"local"==i.storageMethod&&store!==o?store.get(t):e.cookie!==o?e.cookie(t):(m.error(i.errors.noStorage),o)}},event:{hover:function(){e(this).toggleClass(b.hover)},scroll:function(){f!==o&&clearTimeout(f),f=setTimeout(function(){m.should.stick()?y(m.stick):m.unStick()},i.lag)}},error:function(e){console.log("Nag Module:"+e)},invoke:function(t,n,a){var s;return a=a||Array.prototype.slice.call(arguments,2),"string"==typeof t&&v!==o&&(t=t.split("."),e.each(t,function(t,n){return e.isPlainObject(v[n])?(v=v[n],!0):e.isFunction(v[n])?(s=v[n],!0):(m.error(i.errors.method),!1)})),e.isFunction(s)?s.apply(n,a):s}},v!==o&&a?("invoke"==a[0]&&(a=Array.prototype.slice.call(a,1)),m.invoke(a[0],this,Array.prototype.slice.call(a,1))):(m.initialize(),o)}),this},e.fn.nag.settings={displayTime:0,followLink:!0,position:"fixed",scrollBarWidth:18,storageMethod:"cookie",storedKey:"nag",storedValue:"dismiss",sticky:!0,lag:0,context:t,errors:{noStorage:"Neither $.cookie or store is defined. A storage solution is required for storing state",followLink:"Follow link is set but the plugin is not included"},className:{bottom:"bottom",hover:"hover",fixed:"fixed"},selector:{close:".icon.close"},speed:500,easing:"easeOutQuad"}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/popup.min.css b/node/src/files/components/semantic/minified/modules/popup.min.css
deleted file mode 100644
index 44d736913..000000000
--- a/node/src/files/components/semantic/minified/modules/popup.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.popup{display:none;position:absolute;top:57px;right:0;z-index:900;max-width:250px;background-color:#FAFAFA;padding:6px 8px;border:1px solid #DFDFDF;border:1px solid rgba(0,0,0,.12);font-size:11px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:0 2px 2px rgba(0,0,0,.3);-moz-box-shadow:0 2px 2px rgba(0,0,0,.3);box-shadow:0 2px 2px rgba(0,0,0,.3)}.ui.popup .ui.button,.ui.popup form.ui input .ui.popup form.ui textarea{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.popup:after{font-family:Arial,"Helevetica Neue",sans-serif;display:block;position:absolute;font-size:14px;color:#FAFAFA;text-shadow:0 2px 2px rgba(0,0,0,.3)}.ui.popup:after,.ui.popup.top.left:after,.ui.popup.top.center:after,.ui.popup.top.right:after{content:'\25BC'}.ui.popup.bottom:after,.ui.popup.bottom.left:after,.ui.popup.bottom.right:after,.ui.popup.bottom.center:after{content:'\25B2'}.ui.popup.left:after{content:'\25B6'}.ui.popup.right:after{content:'\25C0'}.ui.popup{margin:0}.ui.popup.bottom{margin:9px 0 0}.ui.popup.top{margin:0 0 9px}.ui.popup.top.left,.ui.popup.bottom.left{margin-left:-12px}.ui.popup.top.right,.ui.popup.bottom.right{margin-right:-12px}.ui.popup.left.center{margin:0 9px 0 0}.ui.popup.right.center{margin:0 0 0 10px}.ui.popup:after{line-height:1;bottom:-10px;left:50%}.ui.popup.bottom:after{top:-11px;right:18px;text-shadow:0 -1px 1px rgba(0,0,0,.3)}.ui.popup.top.right:after,.ui.popup.bottom.right:after{left:auto;right:8px}.ui.popup.top.left:after,.ui.popup.bottom.left:after{right:auto;left:8px}.ui.popup.left.center:after{left:auto;right:-10px;top:50%;margin-top:-7px;text-shadow:2px 0 2px rgba(0,0,0,.3)}.ui.popup.right.center:after{left:-10px;right:auto;top:50%;margin-top:-7px;text-shadow:-2px 0 2px rgba(0,0,0,.3)}.ui.popup.top.center:after,.ui.popup.bottom.center:after{margin-left:-7px;left:50%;right:auto}.ui.popup.loading{display:block;visibility:hidden}.ui.popup.active{display:block}.ui.large.popup{padding:10px}.ui.large.popup .content{font-size:13px}.ui.large.popup.bottom{margin:11px 0 0}.ui.large.popup.top{margin:0 0 11px}.ui.large.popup.top.left,.ui.large.popup.bottom.left{margin-left:-12px}.ui.large.popup.top.right,.ui.large.popup.bottom.right{margin-right:-12px}.ui.large.popup.left.center{margin:0 12px 0 0}.ui.large.popup.right.center{margin:0 0 0 12px}.ui.large.popup:after{bottom:-13px;font-size:18px}.ui.popup.large.bottom:after{top:-15px}.ui.popup.large.left.center:after{right:-13px;margin-top:-9px}.ui.popup.large.right.center:after{left:-13px;margin-top:-9px}.ui.popup h2{font-size:14px;font-weight:700;color:#603E72;margin-bottom:5px}.ui.popup .content{font-size:12px;font-weight:400;line-height:1.33;color:#666;padding:0}.ui.popup .content p{margin-top:5px}.ui.popup .content p b{color:#603E72}.ui.popup .content p:first-child{margin-top:0}.ui.popup.transparent,.ui.popup.transparent:after{background-color:rgba(250,250,250,.9)}.ui.black.popup{background-color:#000;border:0}.ui.black.popup:after{color:#000}.ui.black.popup .content{color:#FFF}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/popup.min.js b/node/src/files/components/semantic/minified/modules/popup.min.js
deleted file mode 100644
index 62d23f504..000000000
--- a/node/src/files/components/semantic/minified/modules/popup.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.popup=function(i){var a,s=e.extend(!0,{},e.fn.popup.settings,i),r=arguments||!1;return e(this).each(function(){var c,l,u=e(this),d=e(t),f=u.offsetParent(),p=s.inline?u.next(s.selector.popup):d.children(s.selector.popup).last(),m=0,g=u.data("module-"+s.namespace),h=g!==o&&"string"==typeof i,v=s.selector,b=s.className,y=s.errors,x=s.metadata,C=s.namespace;l={initialize:function(){"hover"==s.event?u.on("mouseenter."+C,l.event.mouseenter).on("mouseleave."+C,l.event.mouseleave):u.on(s.event+"."+C,l.event[s.event]),d.on("resize."+C,l.event.resize),u.data("module-"+C,l)},refresh:function(){p=s.inline?u.next(v.popup):d.children(v.popup).last(),f=u.offsetParent()},destroy:function(){l.debug("Destroying existing popups"),u.off("."+C),p.remove()},event:{mouseenter:function(t){var n=this;c=setTimeout(function(){e.proxy(l.toggle,n)(),e(n).hasClass(b.visible)&&t.stopPropagation()},s.delay)},mouseleave:function(){clearTimeout(c),u.is(":visible")&&l.hide()},click:function(t){e.proxy(l.toggle,this)(),e(this).hasClass(b.visible)&&t.stopPropagation()},resize:function(){p.is(":visible")&&l.position()}},create:function(){l.debug("Creating pop-up content");var t=u.data(x.html)||s.html,n=u.data(x.title)||s.title,o=u.data(x.content)||u.attr("title")||s.content;t||o||n?(t||(t=s.template({title:n,content:o})),p=e("").addClass(b.popup).html(t),s.inline?p.insertAfter(u):p.appendTo(e("body"))):l.error(y.content)},remove:function(){p.remove()},get:{offstagePosition:function(){var n={top:e(t).scrollTop(),bottom:e(t).scrollTop()+e(t).height(),left:0,right:e(t).width()},o={width:p.outerWidth(),height:p.outerHeight(),position:p.offset()},i={},a=[];return o.position&&(i={top:o.position.topn.bottom,right:o.position.left+o.width>n.right,left:o.position.left0?a.join(" "):!1},nextPosition:function(e){switch(e){case"top left":e="bottom left";break;case"bottom left":e="top right";break;case"top right":e="bottom right";break;case"bottom right":e="top center";break;case"top center":e="bottom center";break;case"bottom center":e="right center";break;case"right center":e="left center";break;case"left center":e="top center"}return e}},toggle:function(){u=e(this),l.debug("Toggling pop-up"),l.refresh(),0===p.size()&&l.create(),u.hasClass(b.visible)?l.hide():l.position()&&l.show()},position:function(n,o){var i,a,r=(e(t).width(),e(t).height(),u.outerWidth()),c=u.outerHeight(),g=p.outerWidth(),h=p.outerHeight(),v=s.inline?u.position():u.offset(),C=s.inline?f.outerWidth():d.outerWidth(),w=s.inline?f.outerHeight():d.outerHeight();switch(n=n||u.data(x.position)||s.position,o=o||u.data(x.arrowOffset)||s.arrowOffset,l.debug("Calculating offset for position",n),n){case"top left":i={top:"auto",bottom:w-v.top+s.distanceAway,left:v.left+o};break;case"top center":i={bottom:w-v.top+s.distanceAway,left:v.left+r/2-g/2+o,top:"auto",right:"auto"};break;case"top right":i={bottom:w-v.top+s.distanceAway,right:C-v.left-r-o,top:"auto",left:"auto"};break;case"left center":i={top:v.top+c/2-h/2,right:C-v.left+s.distanceAway-o,left:"auto",bottom:"auto"};break;case"right center":i={top:v.top+c/2-h/2,left:v.left+r+s.distanceAway+o,bottom:"auto",right:"auto"};break;case"bottom left":i={top:v.top+c+s.distanceAway,left:v.left+o,bottom:"auto",right:"auto"};break;case"bottom center":i={top:v.top+c+s.distanceAway,left:v.left+r/2-g/2+o,bottom:"auto",right:"auto"};break;case"bottom right":i={top:v.top+c+s.distanceAway,right:C-v.left-r-o,left:"auto",bottom:"auto"}}return e.extend(i,{width:p.width()+1}),p.removeAttr("style").removeClass("top right bottom left center").css(i).addClass(n).addClass(b.loading),a=l.get.offstagePosition(),a?(l.debug("Element is outside boundaries ",a),s.maxRecursion>m?(n=l.get.nextPosition(n),m++,l.debug("Trying new position: ",n),l.position(n)):(l.error(y.recursion),m=0,!1)):(l.debug("Position is on stage",n),m=0,!0)},show:function(){l.debug("Showing pop-up"),e(v.popup).filter(":visible").stop().fadeOut(200).prev(u).removeClass(b.visible),u.addClass(b.visible),p.removeClass(b.loading),"pop"==s.animation&&e.fn.popIn!==o?p.stop().popIn(s.duration,s.easing):p.stop().fadeIn(s.duration,s.easing),"click"==s.event&&s.clicktoClose&&(l.debug("Binding popup close event"),e(n).on("click."+C,l.gracefully.hide)),e.proxy(s.onShow,p)()},hide:function(){u.removeClass(b.visible),p.is(":visible")&&(l.debug("Hiding pop-up"),"pop"==s.animation&&e.fn.popOut!==o?p.stop().popOut(s.duration,s.easing,function(){p.hide()}):p.stop().fadeOut(s.duration,s.easing)),"click"==s.event&&s.clicktoClose&&e(n).off("click."+C),e.proxy(s.onHide,p)(),s.inline||l.remove()},gracefully:{hide:function(t){0===e(t.target).closest(v.popup).size()&&l.hide()}},setting:function(e,t){return t===o?s[e]:(s[e]=t,o)},debug:function(){var e=[],t=s.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};s.debug&&(e.push(t),o.apply(console,e.concat(n)))},error:function(){var e=[],t=s.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.warn||console.log||function(){};s.debug&&(e.push(t),e.concat(n),o.apply(console,e.concat(n)))},invoke:function(t,n,i){var a,r;return i=i||[].slice.call(arguments,2),"string"==typeof t&&g!==o&&(t=t.split("."),a=t.length-1,e.each(t,function(t,n){return e.isPlainObject(g[n])&&t!=a?(g=g[n],!0):g[n]!==o?(r=g[n],!0):(l.error(s.errors.method),!1)})),e.isFunction(r)?r.apply(n,i):r}},h?a=l.invoke(r[0],this,Array.prototype.slice.call(r,1)):(g&&l.destroy(),l.initialize())}),a!==o?a:this},e.fn.popup.settings={moduleName:"Pop-up Module",debug:!0,namespace:"popup",onShow:function(){},onHide:function(){},content:!1,html:!1,title:!1,position:"top center",delay:0,inline:!0,duration:250,easing:"easeOutQuint",animation:"pop",errors:{content:"Warning: Your popup has no content specified",method:"The method you called is not defined.",recursion:"Popup attempted to reposition element to fit, but could not find an adequate position."},distanceAway:2,arrowOffset:0,maxRecursion:10,event:"hover",clicktoClose:!0,metadata:{content:"content",html:"html",title:"title",position:"position",arrowOffset:"arrowOffset"},className:{popup:"ui popup",visible:"visible",loading:"loading"},selector:{popup:".ui.popup"},template:function(e){var t="";return typeof e!==o&&(typeof e.title!==o&&e.title&&(t+=""+e.title+"
"),typeof e.content!==o&&e.content&&(t+=''+e.content+"
")),t}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/search.min.css b/node/src/files/components/semantic/minified/modules/search.min.css
deleted file mode 100644
index 7abb76640..000000000
--- a/node/src/files/components/semantic/minified/modules/search.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.search.module{position:relative}.search.module .prompt{opacity:.8;background:#fafafa url(/images/modules/search-icon.png) no-repeat 10px 7px;padding:5px 30px;font-size:14px;border:1px solid #CCC;color:#777;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;-webkit-transition:opacity .3s;-moz-transition:opacity .3s;-o-transition:opacity .3s;-ms-transition:opacity .3s;transition:opacity .3s}.search.module .search.button{position:relative;z-index:2;float:right;margin:0 0 0 -15px;padding:6px 15px 7px;-webkit-border-radius:0 15px 15px 0;-moz-border-radius:0 15px 15px 0;border-radius:0 15px 15px 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.search.module.hover .prompt,.search.module.focus .prompt,.search.module.active .prompt{opacity:1;background-color:#FFF;-webkit-box-shadow:0 0 3px rgba(0,0,0,.2) inset;-moz-box-shadow:0 0 3px rgba(0,0,0,.2) inset;box-shadow:0 0 3px rgba(0,0,0,.2) inset;background-position:10px -43px;color:#482A5C}.search.module .prompt.filled{opacity:1;color:#222}.search.module .results{display:none;position:absolute;z-index:999;top:25px;left:0;overflow:hidden;width:300px;border:1px solid #EEE;background-color:#FFF;background-image:-webkit-linear-gradient(top,transparent 0,rgba(0,0,0,.2) 100%);background-image:-moz-linear-gradient(top,transparent 0,rgba(0,0,0,.2) 100%);background-image:-o-linear-gradient(top,transparent 0,rgba(0,0,0,.2) 100%);background-image:-ms-linear-gradient(top,transparent 0,rgba(0,0,0,.2) 100%);background-image:linear-gradient(top,transparent 0,rgba(0,0,0,.2) 100%);color:#555;font-size:12px;text-shadow:none;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,.3);-moz-box-shadow:0 2px 2px 0 rgba(0,0,0,.3);box-shadow:0 2px 2px 0 rgba(0,0,0,.3)}.search.module .results ul{overflow:hidden;background-color:#FFF}.search.module .results li{cursor:pointer;overflow:hidden;line-height:1.2;padding:9px 11px;border-top:1px solid #EEE}.search.module .results li:first-child{border-top:0}.search.module .results li .image{background:#f0f0f0 url(../images/placeholder-subtle.png) no-repeat center center;margin-right:10px;float:left;overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:38px;height:38px}.search.module .results li .image img{display:block;width:38px;height:38px}.search.module .results li .info{float:left}.search.module .results li .indented.info{float:none;margin-left:50px}.search.module .results li .title{font-weight:700;color:#442359}.search.module .results li .description{color:#777}.search.module .results li .price{float:right;color:#999;font-weight:700}.search.module .results li:hover{background-color:#F8F8F8}.search.module .results li.active{background-color:#F0F0F0}.search.module .results li.active .image{background:#efefef url(../images/placeholder-tiny.png) no-repeat center center}.search.module .results li.active .title{color:#000}.search.module .results li.active .description{color:#555}.search.module .results>ul{margin:0;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.search.module .results .category{overflow:hidden;background-color:#E4E4E4;border-top:1px solid rgba(0,0,0,.08);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:0 1px 0 rgba(255,255,255,.1);box-shadow:0 1px 0 rgba(255,255,255,.1);-webkit-transition:background .2s ease-in;-moz-transition:background .2s ease-in;-o-transition:background .2s ease-in;-ms-transition:background .2s ease-in;transition:background .2s ease-in}.search.module .results .category>.name{float:left;padding:12px 0 0 8px;font-weight:700;color:#777;text-shadow:0 1px 0 rgba(255,255,255,.8)}.search.module .results .category ul{overflow:hidden;margin-left:75px;border-left:1px solid rgba(0,0,0,.3);-webkit-box-shadow:-2px 0 5px rgba(0,0,0,.15);-moz-box-shadow:-2px 0 5px rgba(0,0,0,.15);box-shadow:-2px 0 5px rgba(0,0,0,.15);-webkit-transition:box-shadow .2s ease-in;-moz-transition:box-shadow .2s ease-in;-o-transition:box-shadow .2s ease-in;-ms-transition:box-shadow .2s ease-in;transition:box-shadow .2s ease-in}.search.module .results .category.active{background-color:#DCDCDC}.search.module .results .category.active .name{color:#555}.search.module .results .category.active ul{-webkit-box-shadow:-2px 0 5px rgba(0,0,0,.4);-moz-box-shadow:-2px 0 5px rgba(0,0,0,.4);box-shadow:-2px 0 5px rgba(0,0,0,.4)}.search.module .result-page{display:block;height:35px;background-color:#FAFAFA;line-height:35px;font-weight:700;text-align:center;color:#555;border-top:1px solid #DDD;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.8) inset;-moz-box-shadow:0 1px 0 rgba(255,255,255,.8) inset;box-shadow:0 1px 0 rgba(255,255,255,.8) inset}.search.module .result-page:hover{background-color:#F0F0F0}.search.module .big.results li .image{background-image:url(../images/placeholder-subtle.png)}.search.module .big.results li .image,.search.module .big.results li .image img{width:50px;height:50px}.search.module .big.results .indented.info{margin-left:65px}.search.module .big.results .info .title{font-size:16px}.search.module .big.results .info .description{font-size:11px}.search.module .message{background-color:#FFF;overflow:hidden;padding:10px 25px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.search.module .message .text h2{font-size:14px;font-weight:700;color:#555}.search.module .message .text p{font-size:12px;color:#777}.search.module.loading .prompt{background-image:url(/images/modules/search-throbber.gif);background-repeat:no-repeat;background-position:8px 5px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/search.min.js b/node/src/files/components/semantic/minified/modules/search.min.js
deleted file mode 100644
index 992f1385b..000000000
--- a/node/src/files/components/semantic/minified/modules/search.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.searchPrompt=function(n,i){var s,a=e.extend(!0,{},e.fn.searchPrompt.settings,i),r=arguments[0],l=[].slice.call(arguments,1);return e(this).each(function(){var i,c=e(this),u=c.find(a.selector.searchPrompt),d=c.find(a.selector.searchButton),f=c.find(a.selector.searchResults),p=(c.find(a.selector.result),c.find(a.selector.category),c.find(a.selector.emptyResult),c.find(a.selector.resultPage),this),m=(c.selector||"",c.data("module-"+a.namespace)),g=m!==o&&"string"==typeof r,h=a.className,v=a.namespace,b=a.errors;i={initialize:function(){var e=u[0],t=e.oninput!==o?"input":e.onpropertychange!==o?"propertychange":"keyup";u.on("focus."+v,i.event.focus).on("blur."+v,i.event.blur).on("keydown."+v,i.handleKeyboard),a.automatic&&u.on(t+"."+v,i.search.throttle),d.on("click."+v,i.search.query),f.on("click."+v,a.selector.result,i.results.select),c.data("module-"+v,i)},event:{focus:function(){c.addClass(h.focus),i.results.show()},blur:function(){i.search.cancel(),c.removeClass(h.focus),i.results.hide()}},handleKeyboard:function(t){var n,o=c.find(a.selector.result),s=c.find(a.selector.category),r=t.which,l={backspace:8,enter:13,escape:27,upArrow:38,downArrow:40},p=h.active,m=o.index(o.filter("."+p)),g=o.size();if(r==l.escape&&u.trigger("blur"),f.filter(":visible").size()>0)if(r==l.enter){if(o.filter("."+p).exists())return e.proxy(i.results.select,o.filter("."+p))(),t.preventDefault(),!1}else r==l.upArrow?(n=0>m-1?m:m-1,s.removeClass(p),o.removeClass(p).eq(n).addClass(p).closest(s).addClass(p),t.preventDefault()):r==l.downArrow&&(n=m+1>=g?m:m+1,s.removeClass(p),o.removeClass(p).eq(n).addClass(p).closest(s).addClass(p),t.preventDefault());else r==l.enter&&(i.search.query(),d.addClass(h.down),u.one("keyup",function(){d.removeClass(h.down)}))},search:{cancel:function(){var e=c.data("xhr")||!1;e&&"resolved"!=e.state()&&e.abort()},throttle:function(){var e,t=u.val(),n=t.length;clearTimeout(c.data("timer")),n>=a.minCharacters?(e=setTimeout(i.search.query,a.searchThrottle),c.data("timer",e)):i.results.hide()},query:function(){var t=u.val(),o=i.search.cache.read(t);o?(i.debug("Reading result for '"+t+"' from cache"),i.results.add(o)):(i.debug("Querying for '"+t+"'"),"object"==typeof n?i.search.local(t):i.search.remote(t),e.proxy(a.onSearchQuery,c)(t))},local:function(t){var o,s=[],r=[],l=e.isArray(a.searchFields)?a.searchFields:[a.searchFields],u=RegExp("(?:s|^)"+t,"i"),d=RegExp(t,"i");c.addClass(h.loading),e.each(l,function(t,o){e.each(n,function(t,n){"string"==typeof n[o]&&-1==e.inArray(n,s)&&-1==e.inArray(n,r)&&(u.test(n[o])?s.push(n):d.test(n[o])&&r.push(n))})}),o=i.results.generate({results:e.merge(s,r)}),c.removeClass(h.loading),i.search.cache.write(t,o),i.results.add(o)},remote:function(t){var s,r=c.data("xhr")!==o?c.data("xhr"):!1,l={stateContext:c,url:n,urlData:{query:t},success:function(e){s=i.results.generate(e),i.search.cache.write(t,s),i.results.add(s)},failure:i.error};r&&"resolved"!=r.state()&&r.abort(),e.extend(!0,l,a.apiSettings),e.api(l)},cache:{read:function(e){var t=c.data("cache");return a.cache&&"object"==typeof t&&t[e]!==o?t[e]:!1},write:function(e,t){var n=c.data("cache")!==o?c.data("cache"):{};n[e]=t,c.data("cache",n)}}},results:{generate:function(t){i.debug("Generating html from response",t);var n=a.templates[a.type],o="";return e.isPlainObject(t.results)&&!e.isEmptyObject(t.results)||e.isArray(t.results)&&t.results.length>0?(a.maxResults>0&&(t.results=e.makeArray(t.results).slice(0,a.maxResults)),t.results.length>0&&(e.isFunction(n)?o=n(t):i.error(b.noTemplate,!1))):o=i.message(b.noResults,"empty"),e.proxy(a.onSearchResults,c)(t),o},add:function(t){("default"==a.onResultsAdd||"default"==e.proxy(a.onResultsAdd,f)(t))&&f.html(t),i.results.show()},show:function(){0===f.filter(":visible").size()&&u.filter(":focus").size()>0&&""!==f.html()&&(f.stop().fadeIn(200),e.proxy(a.onResultsOpen,f)())},hide:function(){f.filter(":visible").size()>0&&(f.stop().fadeOut(200),e.proxy(a.onResultsClose,f)())},followLink:function(){},select:function(n){i.debug("Search result selected");var o=e(this),s=o.find(".title"),r=s.html();if("default"==a.onSelect||"default"==e.proxy(a.onSelect,this)(n)){var l=o.find("a[href]").eq(0),c=l.attr("href"),d=l.attr("target");try{i.results.hide(),u.val(r),"_blank"==d||n.ctrlKey?t.open(c):t.location.href=c}catch(f){}}}},setting:function(e,t){return t===o?a[e]:(a[e]=t,o)},debug:function(){var e=[],t=a.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};o=Function.prototype.bind.call(o,console),a.debug&&(e.push(t),o.apply(console,e.concat(n)))},message:function(e,t){return t=t||"standard",i.results.add(a.templates.message(e,t)),a.templates.message(e,t)},error:function(e,t){t=t!==o?t:!0,console.warn(a.moduleName+": "+e),t&&e!==o&&i.message(e,"error")},invoke:function(t,n,s){var a,r;return s=s||[].slice.call(arguments,2),"string"==typeof t&&m!==o&&(t=t.split("."),a=t.length-1,e.each(t,function(t,n){return e.isPlainObject(m[n])&&t!=a?(m=m[n],!0):m[n]!==o?(r=m[n],!0):(i.error(b.method),!1)})),e.isFunction(r)?r.apply(n,s):r}},g?s=i.invoke(r,p,l):i.initialize()}),s!==o?s:this},e.fn.searchPrompt.settings={moduleName:"Search Module",debug:!0,namespace:"search",onSelect:"default",onResultsAdd:"default",onSearchQuery:function(){},onSearchResults:function(){},onResultsOpen:function(){},onResultsClose:function(){},automatic:"true",type:"simple",minCharacters:3,searchThrottle:300,maxResults:7,cache:!0,searchFields:["title","description"],apiSettings:{},className:{active:"active",down:"down",focus:"focus",empty:"empty",loading:"loading"},errors:{noResults:"Your search returned no results",logging:"Error in debug logging, exiting.",noTemplate:"A valid template name was not specified.",serverError:"There was an issue with querying the server.",method:"The method you called is not defined."},selector:{searchPrompt:".prompt",searchButton:".search.button",searchResults:".results",category:".category",result:".result",emptyResult:".results .message",resultPage:".results .page"},templates:{message:function(e,t){var n="";return e!==o&&t!==o&&(n+=''+'
',n+="empty"==t?"
No Results
"+e+"
":'
'+e+"
",n+="
"),n},categories:function(t){var n="";return t.results!==o?(e.each(t.results,function(t,i){i.results!==o&&i.results.length>0&&(n+='
'+i.name+"
"+"
",e.each(i.results,function(e,t){n+='- ',n+='',t.image!==o&&(n+='
'+"
"),n+=t.image!==o?'':'
',t.price!==o&&(n+='
'+t.price+"
"),t.title!==o&&(n+='
'+t.title+"
"),t.description!==o&&(n+='
'+t.description+"
"),n+="
"}),n+="
")}),t.resultPage&&(n+=''+t.resultPage.text+""),n):!1},simple:function(t){var n="";return t.results!==o?(n+="",e.each(t.results,function(e,t){n+='- ',t.url!==o&&(n+=''),t.image!==o&&(n+='
'+"
"),n+=t.image!==o?'':'
',t.price!==o&&(n+='
'+t.price+"
"),t.title!==o&&(n+='
'+t.title+"
"),t.description!==o&&(n+='
'+t.description+"
"),n+="
"}),n+="",t.resultPage&&(n+='
'+t.resultPage.text+""),n):!1}}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/shape.min.css b/node/src/files/components/semantic/minified/modules/shape.min.css
deleted file mode 100644
index ff38537b8..000000000
--- a/node/src/files/components/semantic/minified/modules/shape.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.shape.module{position:relative;-webkit-perspective:2000px;-moz-perspective:2000px;-ms-perspective:2000px;perspective:2000px}.shape.module .shape{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.shape.module .side{opacity:1;width:100%;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.shape.module .side{display:none}.shape.module.animating .shape{position:absolute}.shape.module .animating.side{position:absolute;width:100%;top:0;left:0;z-index:100}.shape.module .hidden.side{opacity:.7}.shape.css.module{-webkit-transition:all .6s ease-in-out;-moz-transition:all .6s ease-in-out;-o-transition:all .6s ease-in-out;-ms-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.shape.css.module .shape{-webkit-transition:all .6s ease-in-out;-moz-transition:all .6s ease-in-out;-o-transition:all .6s ease-in-out;-ms-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.shape.css.module .side{-webkit-transition:opacity .6s ease-out;-moz-transition:opacity .6s ease-out;-o-transition:opacity .6s ease-out;-ms-transition:opacity .6s ease-out;transition:opacity .6s ease-out}.shape.module .active.side{display:block}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/shape.min.js b/node/src/files/components/semantic/minified/modules/shape.min.js
deleted file mode 100644
index c01486a67..000000000
--- a/node/src/files/components/semantic/minified/modules/shape.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.shape=function(t){var i,a=e(this),s=e.extend(!0,{},e.fn.shape.settings,t),r="."+s.namespace,l="module-"+s.namespace,c=arguments[0],u=[].slice.call(arguments,1),d="string"==typeof c;return a.each(function(){var t,a,f,p=e(this),m=p.find(s.selector.shape),g=p.find(s.selector.side),h="transitionend msTransitionEnd oTransitionEnd",v=(p.selector||"",this),b=p.data(l),y=(s.namespace,s.error),x=s.className;f={initialize:function(){f.verbose("Initializing module for",v),f.set.defaultSide(),b=f,p.data(l,b)},destroy:function(){f.verbose("Destroying previous module for",v),p.removeData(l).off(r)},refresh:function(){f.verbose("Refreshing selector cache for",v),p=e(v),m=e(this).find(s.selector.shape),g=e(this).find(s.selector.side)},repaint:function(){f.verbose("Forcing repaint event");var e=m.get(0)||n.createElement("div");e.offsetWidth},animate:function(n,o){f.verbose("Animating box with properties",n),o=o||function(t){f.reset(),f.set.active(),e.proxy(s.onChange,a)(),t.stopImmediatePropagation()},s.useCSS?(f.verbose("Starting CSS animation"),p.addClass(x.animating),f.set.stageSize(),f.repaint(),p.addClass(x.css),t.addClass(x.hidden),m.css(n).one(h,o)):(f.verbose("Starting javascript animation"),p.addClass(x.animating).removeClass(x.css),f.set.stageSize(),f.repaint(),t.animate({opacity:0},s.duration,s.easing),m.animate(n,s.duration,s.easing,o))},queue:function(e){f.debug("Queueing animation of",e),m.one(h,function(){f.debug("Executing queued animation"),p.shape(e)})},reset:function(){f.verbose("Animating states reset"),p.removeClass(x.css).removeClass(x.animating).removeAttr("style"),m.removeAttr("style"),g.removeAttr("style").removeClass(x.hidden),a.removeClass(x.animating).removeAttr("style")},is:{animating:function(){return p.hasClass(x.animating)}},get:{nextSide:function(){return t.next(s.selector.side).size()>0?t.next(s.selector.side):p.find(s.selector.side).first()}},set:{defaultSide:function(){t=p.find("."+s.className.active),a=t.next(s.selector.side).size()>0?t.next(s.selector.side):p.find(s.selector.side).first(),f.verbose("Active side set to",t),f.verbose("Next side set to",a)},stageSize:function(){var e={width:a.outerWidth(),height:a.outerHeight()};f.verbose("Resizing stage to fit new content",e),p.css({width:e.width,height:e.height})},nextSide:function(e){a=p.find(e),0===a.size()&&f.error(y.side),f.verbose("Next side manually set to",a)},active:function(){f.verbose("Setting new side to active",a),g.removeClass(x.active),a.addClass(x.active),f.set.defaultSide()}},flip:{up:function(){f.debug("Flipping up",a),f.is.animating()?f.queue("flip.up"):(f.stage.above(),f.animate(f.getTransform.up()))},down:function(){f.debug("Flipping down",a),f.is.animating()?f.queue("flip.down"):(f.stage.below(),f.animate(f.getTransform.down()))},left:function(){f.debug("Flipping left",a),f.is.animating()?f.queue("flip.left"):(f.stage.left(),f.animate(f.getTransform.left()))},right:function(){f.debug("Flipping right",a),f.is.animating()?f.queue("flip.right"):(f.stage.right(),f.animate(f.getTransform.right()))},over:function(){f.debug("Flipping over",a),f.is.animating()?f.queue("flip.over"):(f.stage.behind(),f.animate(f.getTransform.behind()))}},getTransform:{up:function(){var e={y:-((t.outerHeight()-a.outerHeight())/2),z:-(t.outerHeight()/2)};return{transform:"translateY("+e.y+"px) translateZ("+e.z+"px) rotateX(-90deg)"}},down:function(){var e={y:-((t.outerHeight()-a.outerHeight())/2),z:-(t.outerHeight()/2)};return{transform:"translateY("+e.y+"px) translateZ("+e.z+"px) rotateX(90deg)"}},left:function(){var e={x:-((t.outerWidth()-a.outerWidth())/2),z:-(t.outerWidth()/2)};return{transform:"translateX("+e.x+"px) translateZ("+e.z+"px) rotateY(90deg)"}},right:function(){var e={x:-((t.outerWidth()-a.outerWidth())/2),z:-(t.outerWidth()/2)};return{transform:"translateX("+e.x+"px) translateZ("+e.z+"px) rotateY(-90deg)"}},behind:function(){var e={x:-((t.outerWidth()-a.outerWidth())/2)};return{transform:"translateX("+e.x+"px) rotateY(180deg)"}}},stage:{above:function(){var e={origin:(t.outerHeight()-a.outerHeight())/2,depth:{active:a.outerHeight()/2,next:t.outerHeight()/2}};f.verbose("Setting the initial animation position as above",a,e),t.css({transform:"rotateY(0deg) translateZ("+e.depth.active+"px)"}),a.addClass(x.animating).css({display:"block",top:e.origin+"px",transform:"rotateX(90deg) translateZ("+e.depth.next+"px)"})},below:function(){var e={origin:(t.outerHeight()-a.outerHeight())/2,depth:{active:a.outerHeight()/2,next:t.outerHeight()/2}};f.verbose("Setting the initial animation position as below",a,e),t.css({transform:"rotateY(0deg) translateZ("+e.depth.active+"px)"}),a.addClass(x.animating).css({display:"block",top:e.origin+"px",transform:"rotateX(-90deg) translateZ("+e.depth.next+"px)"})},left:function(){var e={origin:(t.outerWidth()-a.outerWidth())/2,depth:{active:a.outerWidth()/2,next:t.outerWidth()/2}};f.verbose("Setting the initial animation position as left",a,e),t.css({transform:"rotateY(0deg) translateZ("+e.depth.active+"px)"}),a.addClass(x.animating).css({display:"block",left:e.origin+"px",transform:"rotateY(-90deg) translateZ("+e.depth.next+"px)"})},right:function(){var e={origin:(t.outerWidth()-a.outerWidth())/2,depth:{active:a.outerWidth()/2,next:t.outerWidth()/2}};f.verbose("Setting the initial animation position as left",a,e),t.css({transform:"rotateY(0deg) translateZ("+e.depth.active+"px)"}),a.addClass(x.animating).css({display:"block",left:e.origin+"px",transform:"rotateY(90deg) translateZ("+e.depth.next+"px)"})},behind:function(){var e={origin:(t.outerWidth()-a.outerWidth())/2,depth:{active:a.outerWidth()/2,next:t.outerWidth()/2}};f.verbose("Setting the initial animation position as behind",a,e),t.css({transform:"rotateY(0deg)"}),a.addClass(x.animating).css({display:"block",left:e.origin+"px",transform:"rotateY(-180deg)"})}},setting:function(t,n){if(e.isPlainObject(t))e.extend(!0,s,t);else{if(n===o)return s[t];s[t]=n}},verbose:function(){s.verbose&&f.debug.apply(this,arguments)},debug:function(){var e=[],t=s.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};o=Function.prototype.bind.call(o,console),s.debug&&(e.push(t),o.apply(console,e.concat(n)))},error:function(){var e=[],t=s.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.warn||console.log||function(){};o=Function.prototype.bind.call(o,console),s.debug&&(e.push(t),e.concat(n),o.apply(console,e.concat(n)))},invoke:function(t,n,i){var a,s;return n=n||u||[].slice.call(arguments,2),i=v||i,"string"==typeof t&&b!==o&&(t=t.split("."),a=t.length-1,e.each(t,function(t,n){return e.isPlainObject(b[n])&&t!=a?(b=b[n],!0):b[n]!==o?(s=b[n],!0):(f.error(y.method),!1)})),e.isFunction(s)?(f.verbose("Executing invoked function",s),s.apply(i,n)):s||!1}},d?(b===o&&f.initialize(),i=f.invoke(c)):(b!==o&&f.destroy(),f.initialize())}),i?i:this},e.fn.shape.settings={moduleName:"Shape Module",debug:!0,verbose:!0,namespace:"shape",beforeChange:function(){},onChange:function(){},useCSS:!0,duration:1e3,easing:"easeInOutQuad",error:{side:"You tried to switch to a side that does not exist.",method:"The method you called is not defined"},className:{css:"css",animating:"animating",hidden:"hidden",active:"active"},selector:{shape:".shape",side:".side"}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/star.min.css b/node/src/files/components/semantic/minified/modules/star.min.css
deleted file mode 100644
index 0e267ca1f..000000000
--- a/node/src/files/components/semantic/minified/modules/star.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.star.module{min-width:88px;height:42px;unicode-bidi:bidi-override;direction:rtl;font-size:26px}.star.module i,.ui.star{cursor:default;float:left;padding:2px 1px;font-style:normal;font-weight:400;content:"\2605";color:transparent}.star.module i:after,.ui.star:after{content:"\2605";color:#8C8C8C;-webkit-transition:all .25s;-moz-transition:all .25s;-o-transition:all .25s;-ms-transition:all .25s;transition:all .25s}.star.module.initialize,.star.module.initialize i{cursor:pointer}.star.module i.active:after{color:#FFCB08}.star.module.hover i.active:after{opacity:.5}.star.module i.hover:after,.star.module i.hover.active:after{opacity:1;color:#FFB70A;text-shadow:0 0 7px #FFCB08}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/star.min.js b/node/src/files/components/semantic/minified/modules/star.min.js
deleted file mode 100644
index 4dc007860..000000000
--- a/node/src/files/components/semantic/minified/modules/star.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.starReview=function(t){var n=e.extend(!0,{},e.fn.starReview.settings,t),i=arguments||!1;return e(this).each(function(){var t,a=e(this),s=a.find(n.selector.star),r=n.className,l=n.namespace,c=a.data("module");return t={settings:n,initialize:function(){n.rateable&&(e.fn.state!==o&&(a.state(),s.state()),s.bind("mouseenter."+l,t.event.mouseenter).bind("mouseleave."+l,t.event.mouseleave).bind("click."+l,t.event.click)),a.addClass(r.initialize).data("module",t)},setRating:function(t){var o=s.eq(t-1);a.removeClass(r.hover),s.removeClass(r.hover),o.nextAll().removeClass(r.active),o.addClass(r.active).prevAll().addClass(r.active),e.proxy(n.onRate,a)()},event:{mouseenter:function(){var t=e(this);t.nextAll().removeClass(r.hover),a.addClass(r.hover),t.addClass(r.hover).prevAll().addClass(r.hover)},mouseleave:function(){s.removeClass(r.hover)},click:function(){var n=e(this);t.setRating(s.index(n)+1)}},error:function(e){console.warn(n.moduleName+": "+e)},invoke:function(i,a,s){var r;return s=s||Array.prototype.slice.call(arguments,2),"string"==typeof i&&c!==o&&(i=i.split("."),e.each(i,function(o,i){return e.isPlainObject(c[i])?(c=c[i],!0):e.isFunction(c[i])?(r=c[i],!0):(t.error(n.errors.method),!1)})),e.isFunction(r)?r.apply(a,s):!1}},c!==o&&i?("invoke"==i[0]&&(i=Array.prototype.slice.call(i,1)),t.invoke(i[0],this,Array.prototype.slice.call(i,1))):(t.initialize(),o)}),this},e.fn.starReview.settings={moduleName:"Star Module",namespace:"star",rateable:!0,onRate:function(){},className:{initialize:"initialize",loading:"loading",active:"active",hover:"hover",down:"down"},selector:{star:"i"}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/tab.min.css b/node/src/files/components/semantic/minified/modules/tab.min.css
deleted file mode 100644
index c0844f7e9..000000000
--- a/node/src/files/components/semantic/minified/modules/tab.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.tab{display:none;background-color:#FFF;border:1px solid #DADADA;border-top-color:transparent;border-top-width:0}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading>.throbber{display:block}.ui.tab.simple{background-color:transparent;border:0}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/tab.min.js b/node/src/files/components/semantic/minified/modules/tab.min.js
deleted file mode 100644
index 824ac9e61..000000000
--- a/node/src/files/components/semantic/minified/modules/tab.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.tabNavigation=function(n){var i,a,s,r,l,c=e.extend(!0,{},e.fn.tabNavigation.settings,n),u=e(this),d=e(c.context).find(c.selector.tabs),f=!0,p={},g=0,m=c.className,h=c.metadata,v=c.namespace,b=c.errors,y=u.data("module"),x=arguments[0],C=y!==o&&"string"==typeof x,w=[].slice.call(arguments,1);return r={initialize:function(){r.debug("Initializing Tabs",u),c.history&&c.path!==!1&&(e.address!==o?(r.verbose("Address library found adding state change event"),e.address.state(c.path).change(r.event.history.change)):r.error(b.state)),e.isWindow(u.get(0))||u.on("click."+v,r.event.click),u.data("module",r)},destroy:function(){r.debug("Destroying tabs",u),u.off("."+v)},event:{click:function(){r.debug("Navigation clicked");var t=e(this).data(h.tab);t!==o?t!==i&&(c.history?e.address.value(t):r.change(t)):r.debug("No tab specified")},history:{change:function(t){var n=t.pathNames.join("/")||r.get.initialPath(),i=c.templates.determineTitle(n)||!1;r.debug("History change event",n,t),s=t,n!==o&&r.change(n),i&&e.address.title(i)}}},refresh:function(){i&&(r.debug("Refreshing tab",i),r.change(i))},cache:{read:function(e){return e!==o?p[e]:p},add:function(e,t){e=e||i,r.debug("Adding cached content for",e),p[e]=t},remove:function(e){e=e||i,r.debug("Removing cached content for",e),delete p[e]}},change:function(n){var l=r.get.defaultPathArray(n);r.deactivate.all(),e.each(l,function(u,d){var g=l.slice(0,u+1),m=r.utils.arrayToPath(g),h=r.utils.last(l)==m,v=r.is.tab(m),b=!v,y=t.history&&t.history.pushState,x=y&&c.ignoreFirstLoad&&f,C=e.isPlainObject(c.apiSettings),w=r.get.tabElement(m);return r.verbose("Looking for tab",d),b?(r.verbose("Tab is not found, assuming it is a parameter",d),!0):(v&&(r.verbose("Tab was found",d),i=m,a=r.utils.filterArray(l,g),h&&C?x?(r.debug("Ignoring remote content on first tab load",m),f=!1,p[n]=w.html(),r.activate.all(m),e.proxy(c.onTabInit,w)(m,a,s)):(r.activate.navigation(m),r.content.fetch(m,c.onTabLoad)):(r.debug("Opened tab",m),r.activate.all(m),e.proxy(c.onTabLoad,w)(m,a,s))),o)})},content:{fetch:function(t){var n=r.get.tabElement(t),l=p[t]||!1,u={dataType:"html",stateContext:n,success:function(o){p[t]=o,r.content.update(t,o),t==i?(r.debug("Content loaded",t),r.activate.tab(t)):r.debug("Content loaded in background",t),e.proxy(c.onTabInit,n)(t,a,s)},urlData:{tab:t}},d=n.data(h.promise)||!1,f=d&&"pending"===d.state();c.cache&&l?(r.debug("Showing existing content",t),r.activate.tab(t),e.proxy(c.onTabLoad,n)(t,a,s)):f?(r.debug("Content is already loading",t),n.addClass(m.loading)):e.api!==o?(r.debug("Retrieving content",t),e.api(e.extend(!0,{},c.apiSettings,u))):r.error(b.api)},update:function(e,t){r.debug("Updating html for",e);var n=r.get.tabElement(e);n.html(t)}},activate:{all:function(e){r.activate.tab(e),r.activate.navigation(e)},tab:function(e){var t=r.get.tabElement(e);r.verbose("Showing tab content for",t),t.addClass(m.active)},navigation:function(e){var t=r.get.navElement(e);r.verbose("Activating tab navigation for",t),t.addClass(m.active)}},deactivate:{all:function(){r.deactivate.navigation(),r.deactivate.tabs()},navigation:function(){u.removeClass(m.active)},tabs:function(){d.removeClass(m.active+" "+m.loading)}},is:{tab:function(e){return r.get.tabElement(e).size()>0}},get:{initialPath:function(){return u.eq(0).data(h.tab)||d.eq(0).data(h.tab)},defaultPathArray:function(e){return r.utils.pathToArray(r.get.defaultPath(e))},defaultPath:function(e){var t=u.filter("[data-"+h.tab+'^="'+e+'/"]').eq(0),n=t.data(h.tab)||!1;if(n){if(r.debug("Found default tab",n),c.maxDepth>g)return g++,r.get.defaultPath(n);r.error(b.recursion)}return g=0,e},navElement:function(e){return e=e||i,u.filter("[data-"+h.tab+'="'+e+'"]')},tabElement:function(e){var t,n,o,a;return e=e||i,o=r.utils.pathToArray(e),a=r.utils.last(o),t=d.filter("[data-"+h.tab+'="'+a+'"]'),n=d.filter("[data-"+h.tab+'="'+e+'"]'),t.size()>0?t:n},tab:function(){return i}},utils:{filterArray:function(t,n){return e.grep(t,function(t){return-1==e.inArray(t,n)})},last:function(t){return e.isArray(t)?t[t.length-1]:!1},pathToArray:function(e){return e===o&&(e=i),"string"==typeof e?e.split("/"):[e]},arrayToPath:function(t){return e.isArray(t)?t.join("/"):!1}},setting:function(e,t){return t===o?c[e]:(c[e]=t,o)},verbose:function(){c.verbose&&r.debug.apply(this,arguments)},debug:function(){var e=[],t=c.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};o=Function.prototype.bind.call(o,console),c.debug&&(e.push(t),o.apply(console,e.concat(n)))},error:function(){var e=[],t=c.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.warn||console.log||function(){};o=Function.prototype.bind.call(o,console),c.debug&&(e.push(t),e.concat(n),o.apply(console,e.concat(n)))},invoke:function(t,n,i){var a,s;return i=i||[].slice.call(arguments,2),"string"==typeof t&&y!==o&&(t=t.split("."),a=t.length-1,e.each(t,function(t,n){return e.isPlainObject(y[n])&&t!=a?(y=y[n],!0):y[n]!==o?(s=y[n],!0):(r.error(c.errors.method),!1)})),e.isFunction(s)?s.apply(n,i):s}},C?l=r.invoke(x,this,w):r.initialize(),l!==o?l:this},e.tabNavigation=function(n){e(t).tabNavigation(n)},e.fn.tabNavigation.settings={moduleName:"Tab Module",verbose:!1,debug:!0,namespace:"tab",onTabInit:function(){},onTabLoad:function(){},templates:{determineTitle:function(){}},history:!1,path:!1,context:"body",maxDepth:25,ignoreFirstLoad:!0,alwaysRefresh:!1,cache:!0,apiSettings:!1,errors:{api:"You attempted to load content without API module",noContent:"The tab you specified is missing a content url.",method:"The method you called is not defined",state:"The state library has not been initialized",missingTab:"Missing tab: ",recursion:"Max recursive depth reached"},metadata:{tab:"tab",loaded:"loaded",promise:"promise"},className:{loading:"loading",active:"active"},selector:{tabs:".tab"}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/video.min.css b/node/src/files/components/semantic/minified/modules/video.min.css
deleted file mode 100644
index 14fc4b9e3..000000000
--- a/node/src/files/components/semantic/minified/modules/video.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.video.module{position:relative;background:#333 url(../images/placeholder.png) no-repeat center center}.video.module .play{cursor:pointer;position:absolute;top:0;left:0;z-index:100;-ms-filter:"alpha(Opacity=60)";filter:alpha(opacity=60);opacity:.6;width:100%;height:100%;background:url(/images/modules/video-play.png) no-repeat center center;-webkit-transition:opacity .3s;-moz-transition:opacity .3s;-o-transition:opacity .3s;-ms-transition:opacity .3s;transition:opacity .3s}.video.module .play:hover{opacity:1}.video.module .placeholder{width:100%;height:100%}.video.module .embed{display:none}.video.module.active .play,.video.module.active .placeholder{display:none}.video.module.active .embed{display:block}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/modules/video.min.js b/node/src/files/components/semantic/minified/modules/video.min.js
deleted file mode 100644
index abc69abc1..000000000
--- a/node/src/files/components/semantic/minified/modules/video.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(e,t,n,o){e.fn.video=function(t){var n,i=e.extend(!0,{},e.fn.video.settings,t),a=arguments||!1;return e(this).each(function(){var s,r=e(this),l=r.find(i.selector.placeholder),c=r.find(i.selector.playButton),u=r.find(i.selector.embed),d=r.data("module-"+i.namespace),f="string"==typeof t,p=i.namespace,m=i.metadata,g=i.className;s={initialize:function(){s.debug("Initializing video"),l.off(".video").on("click."+p,s.play),c.off(".video").on("click."+p,s.play),r.data("module-"+p,s)},change:function(e,t){s.debug("Changing video to ",t),r.data(m.source,e).data(m.flv,t),i.onChange()},reset:function(){s.debug("Clearing video embed and showing placeholder"),r.removeClass(g.active),u.html(" "),l.show(),i.onReset()},play:function(){s.debug("Playing video");var e=r.data(m.source),t=r.data(m.flv);u.html(s.generate.html(e,t)),r.addClass(g.active),i.onPlay()},generate:{html:function(e,t){s.debug("Generating embed html");var n,o="auto"==i.width?r.width():i.width,a="auto"==i.height?r.height():i.height;return"vimeo"==e?n='
':"youtube"==e&&(n='
'),n},url:function(e){var t=i.api?1:0,n=i.autoplay?1:0,o=i.hd?1:0,a=i.showUI?1:0,s=i.showUI?0:1,r="";return"vimeo"==e?(r="api="+t+"&title="+a+"&byline="+a+"&portrait="+a+"&autoplay="+n,i.color&&(r+="&color="+i.color)):"youtube"==e&&(r="enablejsapi="+t+"&autoplay="+n+"&autohide="+s+"&hq="+o+"&modestbranding=1",i.color&&(r+="&color="+i.color)),r}},debug:function(e,t){i.debug&&(t!==o?console.info(i.moduleName+": "+e,t):console.info(i.moduleName+": "+e))},error:function(e){console.warn(i.moduleName+": "+e)},invoke:function(t,n,a){var r;return a=a||Array.prototype.slice.call(arguments,2),"string"==typeof t&&d!==o&&(t=t.split("."),e.each(t,function(t,n){return e.isPlainObject(d[n])?(d=d[n],!0):e.isFunction(d[n])?(r=d[n],!0):(s.error(i.errors.method),!1)})),e.isFunction(r)?r.apply(n,a):r}},f?n=s.invoke(a[0],this,Array.prototype.slice.call(a,1)):(d&&s.destroy(),s.initialize())}),n!==o?n:this},e.fn.videoPlaylist=function(t,n){var o=e(this),i=e(t),a=i.find(".embed iframe"),s=e.extend({},e.fn.videoPlaylist.settings,n,!0);o.each(function(){var t=e(this),n=s.metadata,a=s.namespace,r=s.className,l={initialize:function(){t.on("click."+a,l.changeVideo)},changeVideo:function(){var a=t.data(n.flv)||!1,l=t.data(n.source)||!1,c=t.data(n.placeholder)||!1;if(a&&l){if(i.data(n.source,l).data(n.flv,a),s.showPlaceholder)i.removeClass(r.active).find(e.fn.video.selector.placeholder).attr("src",c);else try{i.video("play")}catch(u){console.warn("Video Playlist Module: "+s.error.init)}o.removeClass(r.active),t.addClass(r.active)}}};l.initialize()}),s.playFirst&&(o.eq(0).trigger("click"),a.size()>0&&a.attr("src",a.attr("src").replace("autoplay=1","autoplay=0")))},e.fn.video.settings={moduleName:"Video",namespace:"video",debug:!1,metadata:{source:"source",flv:"flv"},onPlay:function(){},onReset:function(){},onChange:function(){},play:function(){},pause:function(){},stop:function(){},width:"auto",height:"auto",autoplay:!1,color:"#442359",hd:!0,showUI:!1,api:!0,errors:{method:"The method you called is not defined"},className:{active:"active"},selector:{embed:".embed",placeholder:".placeholder",playButton:".play"}},e.fn.videoPlaylist.settings={moduleName:"Video Playlist",namespace:"videoPlaylist",source:"vimeo",showPlaceholder:!1,playFirst:!0,metadata:{flv:"flv",source:"source",placeholder:"placeholder"},errors:{init:"The video player you specified was not yet initialized"},className:{active:"active"}}})(jQuery,window,document);
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/views/activity-feed.min.css b/node/src/files/components/semantic/minified/views/activity-feed.min.css
deleted file mode 100644
index b2e0d3a5b..000000000
--- a/node/src/files/components/semantic/minified/views/activity-feed.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.feed .event{overflow:hidden;border-top:1px solid #D9D9D9;padding:11px 9px}.ui.feed .event:first-child{border-top:0}.ui.feed .event .who{float:left;width:35px;height:35px;background:#efefef url(../images/placeholder-tiny.png) no-repeat center center;-webkit-box-shadow:-1px -1px 0 #f0f0f0 inset;-moz-box-shadow:-1px -1px 0 #f0f0f0 inset;box-shadow:-1px -1px 0 #f0f0f0 inset}.ui.feed .event .who img{display:block;width:35px}.ui.feed .event .what{margin-left:50px;font-size:12px;line-height:1.33;color:#555}.ui.feed .event .what p{margin:0;padding:0}.ui.feed .event .what a{font-weight:700}.ui.feed .event .what img{max-width:100%}.ui.feed .event .what blockquote{display:block;overflow:hidden;margin:8px 0;background-color:#F6FAFC;border:1px solid #E8F2F7;line-height:1.6;padding:6px 9px;color:#666;text-shadow:0 1px 0 rgba(255,255,255,.8)}.ui.feed .event .what blockquote.grey{background-color:#FAFAFA;border:1px solid #EAEAEA;font-weight:700}.ui.feed .event blockquote img{float:left;width:75px;margin-right:20px}.ui.feed .event .what blockquote p{margin:0 0 10px}.ui.feed .event .what .attached{overflow:hidden;margin:8px 0 0}.ui.feed .event .what .attached img{float:left;margin:0 5px 0 0}.ui.feed .event .what .attached a img{border:1px solid #B2B2B2}.ui.feed .event .what .attached a:hover img{border:1px solid #999}.ui.feed .event .when{float:right;font-size:11px;text-align:right;color:#A1A1A1}.ui.large.feed .who{width:auto;height:auto}.ui.large.feed .who img{width:auto}.ui.large.feed .what{margin-left:70px;font-size:14px;line-height:1.33}.ui.large.feed .what blockquote{color:#555}.ui.large.feed .what img{display:block;width:auto}.ui.large.feed .when{font-size:12px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/views/cover.min.css b/node/src/files/components/semantic/minified/views/cover.min.css
deleted file mode 100644
index a86d0cddd..000000000
--- a/node/src/files/components/semantic/minified/views/cover.min.css
+++ /dev/null
@@ -1 +0,0 @@
-ul.ui.cover-view li,div.ui.cover-view{position:relative;width:220px;height:290px;background-color:#111;background:transparent -webkit-linear-gradient(top,rgba(110,110,110,.7) 0,rgba(0,0,0,.7) 100%) repeat;background:transparent -moz-linear-gradient(top,rgba(110,110,110,.7) 0,rgba(0,0,0,.7) 100%) repeat;background:transparent -o-linear-gradient(top,rgba(110,110,110,.7) 0,rgba(0,0,0,.7) 100%) repeat;background:transparent -ms-linear-gradient(top,rgba(110,110,110,.7) 0,rgba(0,0,0,.7) 100%) repeat;background:transparent linear-gradient(top,rgba(110,110,110,.7) 0,rgba(0,0,0,.7) 100%) repeat;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;-webkit-box-shadow:0 1px 5px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.3) inset;-moz-box-shadow:0 1px 5px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.3) inset;box-shadow:0 1px 5px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.3) inset}ul.ui.cover-view li .content,.ui.cover-view .content{position:relative;overflow:hidden;width:100%;height:100%}ul.ui.cover-view li .cover,.ui.cover-view .cover{width:100%;height:100%;background-position:center center;-webkit-background-size:cover;-moz-background-size:cover;background-size:cover;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;opacity:1}ul.ui.cover-view li .text,.ui.cover-view .text{position:absolute;bottom:0;left:0;width:100%;padding:15px;line-height:1.44;background-color:#111;background:transparent -webkit-linear-gradient(top,rgba(40,40,40,.8) 0,rgba(0,0,0,.8) 100%) repeat;background:transparent -moz-linear-gradient(top,rgba(40,40,40,.8) 0,rgba(0,0,0,.8) 100%) repeat;background:transparent -o-linear-gradient(top,rgba(40,40,40,.8) 0,rgba(0,0,0,.8) 100%) repeat;background:transparent -ms-linear-gradient(top,rgba(40,40,40,.8) 0,rgba(0,0,0,.8) 100%) repeat;background:transparent linear-gradient(top,rgba(40,40,40,.8) 0,rgba(0,0,0,.8) 100%) repeat;-webkit-border-radius:0 0 9px 9px;-moz-border-radius:0 0 9px 9px;border-radius:0 0 9px 9px;-moz-box-shadow:0 1px 0 0 rgba(255,255,255,.3) inset,0 -1px 4px rgba(0,0,0,.4);-webkit-box-shadow:0 1px 0 0 rgba(255,255,255,.3) inset,0 -1px 4px rgba(0,0,0,.4);box-shadow:0 1px 0 0 rgba(255,255,255,.3) inset,0 -1px 4px rgba(0,0,0,.4);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;opacity:1}ul.ui.cover-view li .text h2,.ui.cover-view .text h2{font-size:18px;font-weight:700;color:#009FDA;margin:0 0 5px;text-shadow:0 2px 2px rgba(0,0,0,.9)}ul.ui.cover-view li .text h3,.ui.cover-view .text h3{color:#FFF;text-shadow:0 2px 2px rgba(0,0,0,.9)}ul.ui.cover-view li>.throbber,div.ui.cover-view>.throbber{display:none}ul.ui.cover-view li.loading>.throbber,div.ui.cover-view.loading>.throbber{display:block;opacity:.3}ul.ui.cover-view li.loading .text,div.ui.cover-view.loading .text,ul.ui.cover-view li.loading .cover,div.ui.cover-view.loading .cover{opacity:0}ul.ui.cover-view li{float:left;margin:0 5px 10px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/views/data-grid.min.css b/node/src/files/components/semantic/minified/views/data-grid.min.css
deleted file mode 100644
index 9cca613d5..000000000
--- a/node/src/files/components/semantic/minified/views/data-grid.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.data-grid{width:100%;font-size:12px;color:#555}.ui.data-grid.hide{display:none}.ui.data-grid tbody tr{border-top:1px solid #D9D9D9}.ui.data-grid tbody tr:first-child{border-top:0}.ui.data-grid tbody td{padding:10px 14px;vertical-align:middle}.ui.data-grid tbody td.who{width:240px}.ui.data-grid tbody td.who i{float:left;width:35px;height:35px;background:#efefef url(../images/placeholder-tiny.png) no-repeat center center}.ui.data-grid tbody td.who img{width:35px}.ui.data-grid tbody td.who hgroup{display:block;margin-left:50px}.ui.data-grid tbody td.who hgroup h2{font-size:14px;font-weight:700}.ui.data-grid tbody td.who hgroup h3{font-size:12px}.ui.data-grid tbody td.action{width:120px;text-align:right}.ui.data-grid tbody tr.hover{background-color:#F4F4F4}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/views/notecard.min.css b/node/src/files/components/semantic/minified/views/notecard.min.css
deleted file mode 100644
index 87f0a4d76..000000000
--- a/node/src/files/components/semantic/minified/views/notecard.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.notecard{position:relative;width:520px;padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;background-color:#FDFBE9;border:1px solid #DDD;-webkit-box-shadow:0 2px 2px rgba(0,0,0,.1);-moz-box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 2px 2px rgba(0,0,0,.1)}.ui.notecard .stripes{height:100%;margin-top:10px;padding:0 5px 10px;background:url(../images/notecard-stripes.png) repeat;line-height:21px}.ui.notecard .stripes h2{margin:0;font-size:20px;font-weight:700}.ui.notecard .stripes p{margin:0;padding:0;font-size:12px}.ui.notecard .stripes .image{display:block;overflow:hidden;border:1px solid #DAD8C9;background:#fff url(../images/placeholder-tiny.png) no-repeat center center;padding:4px}.ui.notecard .stripes .image img{display:block}.ui.notecard br,.ui.notecard hr{height:21px;border:0;background-color:transparent}.ui.notecard.simple .stripes{margin-top:10px;background-image:-moz-repeating-linear-gradient(transparent 19px,rgba(255,255,255,.2) 20px,transparent 0,transparent 40px);background-image:-webkit-repeating-linear-gradient(transparent 19px,rgba(255,255,255,.2) 20px,transparent 0,transparent 40px);background-image:-ms-repeating-linear-gradient(transparent 19px,rgba(255,255,255,.2) 20px,transparent 0,transparent 40px);background-image:-o-repeating-linear-gradient(transparent 19px,rgba(255,255,255,.2) 20px,transparent 0,transparent 40px);background-image:repeating-linear-gradient(transparent 19px,rgba(255,255,255,.2) 20px,transparent 0,transparent 40px)}.ui.notecard.contrast{border:0;-webkit-box-shadow:0 2px 2px rgba(0,0,0,.7);-moz-box-shadow:0 2px 2px rgba(0,0,0,.7);box-shadow:0 2px 2px rgba(0,0,0,.7)}.ui.clipped.notecard.paperclip img{height:auto;width:135px}.ui.clipped.notecard.stripes{min-height:150px;padding:0 5px 10px 160px}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/minified/views/video.min.css b/node/src/files/components/semantic/minified/views/video.min.css
deleted file mode 100644
index fe5eb2c50..000000000
--- a/node/src/files/components/semantic/minified/views/video.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.video.module{position:relative;background:#333 url(/images/icon-placeholder-logo.png) no-repeat center center}.video.module .play{cursor:pointer;position:absolute;top:0;left:0;z-index:100;-ms-filter:"alpha(Opacity=60)";filter:alpha(opacity=60);opacity:.6;width:100%;height:100%;background:url(/images/icon-play.png) no-repeat center center;-webkit-transition:opacity .3s;-moz-transition:opacity .3s;-o-transition:opacity .3s;-ms-transition:opacity .3s;transition:opacity .3s}.video.module .play:hover{opacity:1}.video.module .placeholder{width:100%;height:100%}.video.module .embed{display:none}.video.module.active .play,.video.module.active .placeholder{display:none}.video.module.active .embed{display:block}
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/modules/accordion.css b/node/src/files/components/semantic/modules/accordion.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/accordion.css
rename to node/src/files/components/semantic/modules/accordion.css
diff --git a/node/src/files/components/semantic/minified/modules/accordion.js b/node/src/files/components/semantic/modules/accordion.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/accordion.js
rename to node/src/files/components/semantic/modules/accordion.js
diff --git a/node/src/files/components/semantic/minified/modules/behavior/animation.js b/node/src/files/components/semantic/modules/behavior/animation.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/behavior/animation.js
rename to node/src/files/components/semantic/modules/behavior/animation.js
diff --git a/node/src/files/components/semantic/minified/modules/behavior/api.js b/node/src/files/components/semantic/modules/behavior/api.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/behavior/api.js
rename to node/src/files/components/semantic/modules/behavior/api.js
diff --git a/node/src/files/components/semantic/minified/modules/behavior/colorize.js b/node/src/files/components/semantic/modules/behavior/colorize.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/behavior/colorize.js
rename to node/src/files/components/semantic/modules/behavior/colorize.js
diff --git a/node/src/files/components/semantic/minified/modules/behavior/default-text.js b/node/src/files/components/semantic/modules/behavior/default-text.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/behavior/default-text.js
rename to node/src/files/components/semantic/modules/behavior/default-text.js
diff --git a/node/src/files/components/semantic/minified/modules/behavior/form.js b/node/src/files/components/semantic/modules/behavior/form.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/behavior/form.js
rename to node/src/files/components/semantic/modules/behavior/form.js
diff --git a/node/src/files/components/semantic/minified/modules/behavior/state.js b/node/src/files/components/semantic/modules/behavior/state.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/behavior/state.js
rename to node/src/files/components/semantic/modules/behavior/state.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/chat.css b/node/src/files/components/semantic/modules/chat.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/chat.css
rename to node/src/files/components/semantic/modules/chat.css
diff --git a/node/src/files/components/semantic/minified/modules/chat.js b/node/src/files/components/semantic/modules/chat.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/chat.js
rename to node/src/files/components/semantic/modules/chat.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/checkbox.css b/node/src/files/components/semantic/modules/checkbox.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/checkbox.css
rename to node/src/files/components/semantic/modules/checkbox.css
diff --git a/node/src/files/components/semantic/minified/modules/checkbox.js b/node/src/files/components/semantic/modules/checkbox.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/checkbox.js
rename to node/src/files/components/semantic/modules/checkbox.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/modal.css b/node/src/files/components/semantic/modules/modal.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/modal.css
rename to node/src/files/components/semantic/modules/modal.css
diff --git a/node/src/files/components/semantic/minified/modules/modal.js b/node/src/files/components/semantic/modules/modal.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/modal.js
rename to node/src/files/components/semantic/modules/modal.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/nag.css b/node/src/files/components/semantic/modules/nag.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/nag.css
rename to node/src/files/components/semantic/modules/nag.css
diff --git a/node/src/files/components/semantic/minified/modules/nag.js b/node/src/files/components/semantic/modules/nag.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/nag.js
rename to node/src/files/components/semantic/modules/nag.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/popup.css b/node/src/files/components/semantic/modules/popup.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/popup.css
rename to node/src/files/components/semantic/modules/popup.css
diff --git a/node/src/files/components/semantic/minified/modules/popup.js b/node/src/files/components/semantic/modules/popup.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/popup.js
rename to node/src/files/components/semantic/modules/popup.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/search.css b/node/src/files/components/semantic/modules/search.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/search.css
rename to node/src/files/components/semantic/modules/search.css
diff --git a/node/src/files/components/semantic/minified/modules/search.js b/node/src/files/components/semantic/modules/search.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/search.js
rename to node/src/files/components/semantic/modules/search.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/shape.css b/node/src/files/components/semantic/modules/shape.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/shape.css
rename to node/src/files/components/semantic/modules/shape.css
diff --git a/node/src/files/components/semantic/minified/modules/shape.js b/node/src/files/components/semantic/modules/shape.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/shape.js
rename to node/src/files/components/semantic/modules/shape.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/star.css b/node/src/files/components/semantic/modules/star.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/star.css
rename to node/src/files/components/semantic/modules/star.css
diff --git a/node/src/files/components/semantic/minified/modules/star.js b/node/src/files/components/semantic/modules/star.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/star.js
rename to node/src/files/components/semantic/modules/star.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/tab.css b/node/src/files/components/semantic/modules/tab.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/tab.css
rename to node/src/files/components/semantic/modules/tab.css
diff --git a/node/src/files/components/semantic/minified/modules/tab.js b/node/src/files/components/semantic/modules/tab.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/tab.js
rename to node/src/files/components/semantic/modules/tab.js
diff --git a/node/src/files/components/semantic/uncompressed/modules/video.css b/node/src/files/components/semantic/modules/video.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/modules/video.css
rename to node/src/files/components/semantic/modules/video.css
diff --git a/node/src/files/components/semantic/minified/modules/video.js b/node/src/files/components/semantic/modules/video.js
similarity index 100%
rename from node/src/files/components/semantic/minified/modules/video.js
rename to node/src/files/components/semantic/modules/video.js
diff --git a/node/src/files/components/semantic/packaged/fonts/icons.eot.REMOVED.git-id b/node/src/files/components/semantic/packaged/fonts/icons.eot.REMOVED.git-id
deleted file mode 100644
index 2776fbe5d..000000000
--- a/node/src/files/components/semantic/packaged/fonts/icons.eot.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-25066de069a62374b39f220581d1314fa60a5f45
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/fonts/icons.svg.REMOVED.git-id b/node/src/files/components/semantic/packaged/fonts/icons.svg.REMOVED.git-id
deleted file mode 100644
index fbf9c2439..000000000
--- a/node/src/files/components/semantic/packaged/fonts/icons.svg.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-b9c54d022b2628b920f09afd4cb10d4dc0ce0d17
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/fonts/icons.ttf.REMOVED.git-id b/node/src/files/components/semantic/packaged/fonts/icons.ttf.REMOVED.git-id
deleted file mode 100644
index f8d220df0..000000000
--- a/node/src/files/components/semantic/packaged/fonts/icons.ttf.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-318a2643d3af55fe51b472e7769b99caf74ff7b0
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/fonts/icons.woff b/node/src/files/components/semantic/packaged/fonts/icons.woff
deleted file mode 100644
index baba1b5eb..000000000
Binary files a/node/src/files/components/semantic/packaged/fonts/icons.woff and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/button-error.gif b/node/src/files/components/semantic/packaged/images/button-error.gif
deleted file mode 100644
index 0615c1626..000000000
Binary files a/node/src/files/components/semantic/packaged/images/button-error.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/footnote.png b/node/src/files/components/semantic/packaged/images/footnote.png
deleted file mode 100644
index c13a1f233..000000000
Binary files a/node/src/files/components/semantic/packaged/images/footnote.png and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/loader-generic-transparent.gif b/node/src/files/components/semantic/packaged/images/loader-generic-transparent.gif
deleted file mode 100644
index 74c9d63f3..000000000
Binary files a/node/src/files/components/semantic/packaged/images/loader-generic-transparent.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/notecard-stripes.png b/node/src/files/components/semantic/packaged/images/notecard-stripes.png
deleted file mode 100644
index 57b1c37a7..000000000
Binary files a/node/src/files/components/semantic/packaged/images/notecard-stripes.png and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/paperclip.png b/node/src/files/components/semantic/packaged/images/paperclip.png
deleted file mode 100644
index 82edf737d..000000000
Binary files a/node/src/files/components/semantic/packaged/images/paperclip.png and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/placeholder-subtle.png b/node/src/files/components/semantic/packaged/images/placeholder-subtle.png
deleted file mode 100644
index a69787855..000000000
Binary files a/node/src/files/components/semantic/packaged/images/placeholder-subtle.png and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/placeholder-tiny.png b/node/src/files/components/semantic/packaged/images/placeholder-tiny.png
deleted file mode 100644
index e936460e6..000000000
Binary files a/node/src/files/components/semantic/packaged/images/placeholder-tiny.png and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/placeholder.png b/node/src/files/components/semantic/packaged/images/placeholder.png
deleted file mode 100644
index b635fa2ce..000000000
Binary files a/node/src/files/components/semantic/packaged/images/placeholder.png and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-blue-large.gif b/node/src/files/components/semantic/packaged/images/throbber-blue-large.gif
deleted file mode 100644
index d0ac895ea..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-blue-large.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-blue-medium.gif b/node/src/files/components/semantic/packaged/images/throbber-blue-medium.gif
deleted file mode 100644
index 89dfc9137..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-blue-medium.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-blue-small.gif b/node/src/files/components/semantic/packaged/images/throbber-blue-small.gif
deleted file mode 100644
index 5ebe9a217..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-blue-small.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-blue-tiny.gif b/node/src/files/components/semantic/packaged/images/throbber-blue-tiny.gif
deleted file mode 100644
index 43475d481..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-blue-tiny.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-large.gif b/node/src/files/components/semantic/packaged/images/throbber-large.gif
deleted file mode 100644
index 519621ccd..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-large.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-medium-white.gif b/node/src/files/components/semantic/packaged/images/throbber-medium-white.gif
deleted file mode 100644
index 010e29eae..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-medium-white.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-medium.gif b/node/src/files/components/semantic/packaged/images/throbber-medium.gif
deleted file mode 100644
index ae34460f9..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-medium.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-small.gif b/node/src/files/components/semantic/packaged/images/throbber-small.gif
deleted file mode 100644
index d9a6760a4..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-small.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/images/throbber-tiny.gif b/node/src/files/components/semantic/packaged/images/throbber-tiny.gif
deleted file mode 100644
index c65ee55fd..000000000
Binary files a/node/src/files/components/semantic/packaged/images/throbber-tiny.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/packaged/modules/accordion.js b/node/src/files/components/semantic/packaged/modules/accordion.js
deleted file mode 100644
index 0003c3012..000000000
--- a/node/src/files/components/semantic/packaged/modules/accordion.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/* ******************************
- Accordion
- Author: Jack Lukic
- Notes: First Commit July 19, 2012
-
- Simple accordion design
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.accordion = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.accordion.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
-
- var
- $module = $(this),
- $title = $module.find(settings.selector.title),
- $icon = $module.find(settings.selector.icon),
- $content = $module.find(settings.selector.content),
-
- instance = $module.data('module'),
- className = settings.className,
- module
- ;
-
- module = {
-
- initialize: function() {
- // initializing
- $title
- .on('click', module.change)
- ;
- $module
- .data('module', module)
- ;
- },
-
- change: function() {
- var
- $activeTitle = $(this),
- $activeContent = $activeTitle.next($content),
- contentIsOpen = $activeTitle.hasClass(className.active)
- ;
- if(contentIsOpen) {
- if(settings.collapsible) {
- $.proxy(module.close, $activeTitle)();
- }
- }
- else {
- $.proxy(module.open, $activeTitle)();
- }
- },
-
- open: function() {
- var
- $activeTitle = $(this),
- $activeContent = $activeTitle.next($content),
- $currentTitle = $title.filter('.' + className.active),
- $currentContent = $currentTitle.next($title)
- ;
- if(settings.exclusive && $currentTitle.size() > 0) {
-
- $currentTitle
- .removeClass('active')
- ;
- $currentContent
- .stop()
- .slideUp(settings.speed , settings.easing, function() {
- $(this)
- .removeClass('active')
- .removeAttr('style')
- ;
- })
- ;
- }
- $activeTitle
- .addClass(className.active)
- ;
- $activeContent
- .hide()
- .addClass(className.active)
- .stop()
- .slideDown(settings.speed, settings.easing, function() {
- $(this)
- .removeAttr('style')
- ;
- })
- ;
- },
-
- close: function() {
- var
- $activeTitle = $(this),
- $activeContent = $activeTitle.next($content)
- ;
- $activeTitle
- .removeClass(className.active)
- ;
- $activeContent
- .removeClass(className.active)
- .show()
- .stop()
- .slideUp(settings.speed, settings.easing, function(){
- $(this)
- .removeAttr('style')
- ;
- })
- ;
- },
-
- debug: function(message) {
- if(settings.debug) {
- console.info(settings.moduleName + ': ' + message);
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.method);
- return false;
- });
- }
- if ( $.isFunction( method ) ) {
- return method.apply(context, methodArguments);
- }
- // return retrieved variable or chain
- return method;
- }
-
- };
-
- // calling a method
- 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.accordion.settings = {
- moduleName : 'Accordion',
- debug : false,
-
- exclusive : true,
- collapsible : true,
-
- errors: {
- method : 'The method you called is not defined'
- },
-
- className : {
- active : 'active',
- hover : 'hover'
- },
-
- selector : {
- title : '.title',
- icon : '.icon',
- content : '.content'
- },
-
- speed : 500,
- easing : 'easeInOutQuint'
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/behavior/animation.js b/node/src/files/components/semantic/packaged/modules/behavior/animation.js
deleted file mode 100644
index 54c22e32f..000000000
--- a/node/src/files/components/semantic/packaged/modules/behavior/animation.js
+++ /dev/null
@@ -1,247 +0,0 @@
-/* ******************************
- Animation
- Author: Jack Lukic
- Notes: First Commit May 24, 2012
-
- A collection of FX/Animations
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-
- // handles simplification of animation settings
- $.animationSettings = function(settings, duration, easing, complete) {
- // no parameters
- if(duration === undefined) {
- settings = settings;
- }
- // duration is actually settings object
- else if(typeof duration == 'object') {
- settings = $.extend({} , settings, duration);
- }
- // easing is actually complete callback
- else if(typeof easing == 'function') {
- settings = $.extend({} , settings, {
- duration: duration,
- complete: easing
- });
- }
- // easing is actually settings
- else if(typeof easing == 'object') {
- settings = $.extend(true, {} , settings, {duration: duration}, easing);
- }
- //
- else {
- settings = $.extend({} , settings, {
- duration : duration,
- easing : easing,
- complete : complete
- });
- }
- return settings;
- };
-
- /* ******************************
- Pop In -
- Animates one at a time
- scaling in
- ****************************** */
-
- $.fn.popIn = function(duration, easing, complete) {
- var
- settings = $.animationSettings($.fn.popIn.settings, duration, easing, complete),
-
- $this = $(this),
- totalElements = $this.size(),
- currentElement = 0,
- callback = function() {
- var
- elementsDoneAnimating = ($this.filter(':animated').size() == 0)
- ;
- currentElement++;
- $(this)
- .css('transform', '')
- .removeClass(settings.className.init)
- ;
- $.proxy(settings.eachComplete, this)();
- if(currentElement == totalElements) {
- $.proxy(settings.complete, $this)();
- }
- },
- animate = function(index) {
- $(this)
- .delay(settings.delay * index)
- .animate({
- opacity : settings.endOpacity,
- transform : 'scale('+ settings.endScale +')'
- }, settings.duration, settings.easing, callback)
- ;
- }
- ;
- if(settings.isLegacyBrowser) {
- $this
- .show()
- ;
- }
- else {
- $this
- .addClass(settings.className.init)
- .show()
- .css({
- opacity : settings.startOpacity,
- transform : 'scale('+ settings.startScale +')'
- })
- .each(animate)
- ;
- }
- return $(this);
- };
-
- $.fn.popOut = function(duration, easing, complete) {
- var
- parameters = $.animationSettings($.fn.popIn.settings, duration, easing, complete),
- // flip some defaults
- defaults = {
- complete: function() {
- $(this).hide();
- $.proxy(parameters.complete, this)();
- },
- startOpacity : parameters.endOpacity,
- endOpacity : 0,
- startScale : parameters.endScale,
- endScale : parameters.startScale
- },
- settings = $.extend(true, {}, parameters, defaults)
- ;
- $(this)
- .popIn(settings)
- ;
- };
-
- $.fn.popIn.settings = {
-
- // legacy browser
- isLegacyBrowser: false,
-
- // class given until animation ends
- className: {
- init : 'init'
- },
- // duration of each animation
- duration : 450,
- // easing for animation
- easing : 'easeOutExpo',
- // delay before each
- delay : 100,
-
- startOpacity : 0,
- endOpacity : 1,
-
- startScale : 0.7,
- endScale : 1,
- // called after each element completes
- eachComplete : function(){},
- // called after entire chain of animation completes
- complete : function(){}
- };
-
-
- $.fn.kenBurns = function(duration, easing, complete) {
- var
- settings = $.animationSettings($.fn.kenBurns.settings, duration, easing, complete),
- module = {
-
- randomPosition: function(starting, rangeMin, rangeMax) {
- var
- rangeMax = (rangeMax !== undefined)
- ? rangeMax
- : rangeMin,
- number = Math.random() * ((starting + rangeMax) - (starting - rangeMin) ) + (starting - rangeMin)
- ;
- return parseInt(number, 10);
- },
-
- animate: function() {
- var
- startingPosition = {},
- endingPosition = {},
- startingScale,
- endingScale
- ;
-
- startingPosition = (settings.useStartPosition)
- ? {
- x: parseInt( $(this).css('background-position-x'), 10),
- y: parseInt( $(this).css('background-position-y'), 10)
- }
- : {
- x: module.randomPosition(50, settings.xRange),
- y: module.randomPosition(50, settings.yRange)
- }
- ;
- // determine direction of animation based on origin position
- endingPosition.x = (startingPosition.x > 50)
- ? module.randomPosition(startingPosition.x, settings.xMaxTravelDistance, -settings.xMinTravelDistance)
- : module.randomPosition(startingPosition.x, -settings.xMinTravelDistance, settings.xMaxTravelDistance)
- ;
- endingPosition.y = (startingPosition.y > 50)
- ? module.randomPosition(startingPosition.y, settings.yMaxTravelDistance, -settings.yMinTravelDistance)
- : module.randomPosition(startingPosition.y, -settings.yMinTravelDistance, settings.yMaxTravelDistance)
- ;
-
- /*console.log(startingPosition.x + '% ' + startingPosition.y + '%');
- console.log(endingPosition.x + '% ' + endingPosition.y + '%');*/
-
- $(this)
- .css({
- backgroundPosition: startingPosition.x + '%',
- backgroundPositionY: startingPosition.y + '%'
- })
- .stop()
- .animate({
- backgroundPosition: endingPosition.x + '%',
- backgroundPositionY: endingPosition.y + '%'
- }, settings.duration, settings.easing, settings.complete)
- ;
- }
-
- }
- ;
- if(!settings.isLegacyBrowser) {
- $(this)
- .each(module.animate)
- ;
- }
- return $(this);
- };
-
- $.fn.kenBurns.settings = {
-
- // legacy browser
- isLegacyBrowser : false,
-
- // duration of animation
- duration : 10000,
- // easing for animation
- easing : 'linear',
- useStartPosition : false,
-
- xRange : 40,
- yRange : 20,
-
- xMinTravelDistance : 30,
- xMaxTravelDistance : 60,
-
- yMinTravelDistance : 20,
- yMaxTravelDistance : 40,
-
- // not yet implemented, need css hook for background-size
- scale : 0.1,
-
- // called after entire chain of animation completes
- complete : function(){}
- };
-
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/modules/behavior/api.js b/node/src/files/components/semantic/packaged/modules/behavior/api.js
deleted file mode 100644
index 3f5b0ab14..000000000
--- a/node/src/files/components/semantic/packaged/modules/behavior/api.js
+++ /dev/null
@@ -1,515 +0,0 @@
- /* ******************************
- API
- Author: Jack Lukic
- Notes: First Commit May 08, 2012
-
- These are modules which bind API functionality to the DOM
-
- Requires: nada
-
- Initialization:
- $('.button')
- .apiButton({
- success: function() {}
- })
- ;
-
- in our example api is automapped to an object literal
- @ quirky.config.endpoint.api
-
- HTML:
-
-
- URL : quirky.config.endpoint.api.follow
- Given Value: /follow/{$id}/
- Sent Value : /follow/5/
-
- (4 ways to map api endpoint, each will be looked for in succession)
- url mapping order:
- first : defined in plugin init as url (arbitrary url)
- second : defined in plugin init as action (action in obj literal grouping 'api')
- third : defined in data-url
- fourth : defined in data-action
-
- beforeSend:
- this callback can be used to modify request settings before XHR
- it also can be used to look for for pre-conditions to prevent API
- call by returning "false"
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
- $.api = $.fn.api = function(parameters) {
-
- var
- settings = $.extend(true, {}, $.api.settings, parameters),
-
- // if this keyword isn't a jQuery object, create one
- context = (typeof this != 'function')
- ? this
- : $('
'),
- // context defines the element used for loading/error state
- $context = (settings.stateContext)
- ? $(settings.stateContext)
- : $(context),
- // module is the thing that initiates the api action, can be independent of context
- $module = typeof this == 'object'
- ? $(context)
- : $context,
-
- action = $module.data(settings.metadata.action) || settings.action || false,
-
- className = settings.className,
- metadata = settings.metadata,
- errors = settings.errors,
- module
- ;
-
- module = {
- initialize: function() {
- var
- exitConditions = false,
-
- runSettings,
-
- loadingTimer = new Date().getTime(),
- loadingDelay,
-
- promise,
- url,
- urlVariables,
-
- formData = {},
- data,
-
- ajaxSettings = {},
- xhr,
-
- errors = settings.errors
- ;
-
- // serialize parent form if requested!
- if(settings.serializeForm && $(this).toJSON() !== undefined) {
- formData = $module
- .closest('form')
- .toJSON()
- ;
- $.extend(true, settings.data, formData);
- module.debug('Adding form data to API Request', formData);
- }
-
- // let beforesend change settings object
- runSettings = $.proxy(settings.beforeSend, $module)(settings);
-
- // check for exit conditions
- if(runSettings !== undefined && !runSettings) {
- module.error(errors.beforeSend);
- module.reset();
- return;
- }
-
- if(action) {
- module.debug('Initializing API Request for: ', action);
- if(settings.api[action] !== undefined) {
- url = settings.api[action];
- }
- else {
- module.error(errors.missingAction);
- }
- }
- // override with url if specified
- if(settings.url) {
- url = settings.url;
- module.debug('Using specified url: ', url);
- }
-
- if(!url) {
- module.error(errors.missingURL);
- module.reset();
- }
-
- // replace url data in url
- urlVariables = url.match(settings.regExpTemplate);
-
- if(urlVariables) {
- module.debug('Looking for URL variables', urlVariables);
- $.each(urlVariables, function(index, templateValue){
- var
- term = templateValue.substr( 2, templateValue.length - 3),
- termValue = ($.isPlainObject(parameters.urlData) && parameters.urlData[term] !== undefined)
- ? parameters.urlData[term]
- : ($module.data(term) !== undefined)
- ? $module.data(term)
- : settings.urlData[term]
- ;
- module.verbose('Looking for variable', term, $module, $module.data(term), settings.urlData[term]);
- // remove optional value
- if(termValue === false) {
- module.debug('Removing variable from URL', urlVariables);
- url = url.replace('/' + templateValue, '');
- }
- // undefined condition
- else if(termValue === undefined || !termValue) {
- module.error(errors.missingParameter + term);
- exitConditions = true;
- }
- else {
- url = url.replace(templateValue, termValue);
- }
- });
- }
-
- // exit conditions reached from missing url parameters
- if( exitConditions ) {
- module.reset();
- return;
- }
-
- // promise handles notification on api request, so loading min. delay can occur for all notifications
- promise =
- $.Deferred()
- .always(function() {
- if(settings.stateContext) {
- $context
- .removeClass(className.loading)
- ;
- }
- $.proxy(settings.complete, $module)();
- })
- .done(function(response) {
- module.debug('API request successful');
- // take a stab at finding success state if json
- if(settings.dataType == 'json') {
- if(response.success === true) {
- $.proxy(settings.success, $context)(response, settings, $module);
- }
- else {
- module.debug('JSON success flag is not set.');
- if (response.error !== undefined) {
- $.proxy(settings.failure, $context)(response.error, settings, $module);
- }
- else if ($.isArray(response.errors)) {
- $.proxy(settings.failure, $context)(response.errors[0], settings, $module);
- }
- else if(response.message !== undefined) {
- $.proxy(settings.failure, $context)(response.message, settings, $module);
- }
- else {
- $.proxy(settings.failure, $context)(errors.error, settings, $module);
- }
- }
- }
- // otherwise
- else {
- $.proxy(settings.success, $context)(response, settings, $module);
- }
- })
- .fail(function(xhr, status, httpMessage) {
- var
- errorMessage = (settings.errors[status] !== undefined)
- ? settings.errors[status]
- : httpMessage,
- response
- ;
- // let em know unless request aborted
- if(xhr !== undefined) {
- // readyState 4 = done, anything less is not really sent
- if(xhr.readyState !== undefined && xhr.readyState == 4) {
-
- // if http status code returned and json returned error, look for it
- if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {
- module.error(errors.statusMessage + httpMessage);
- }
- else {
- if(status == 'error' && settings.dataType == 'json') {
- try {
- response = $.parseJSON(xhr.responseText);
- if(response && response.error !== undefined) {
- errorMessage = response.error;
- }
- }
- catch(error) {
- module.error(errors.JSONParse);
- }
- }
- }
- $context
- .removeClass(className.loading)
- .addClass(className.error)
- ;
- // show error state only for duration specified in settings
- if(settings.errorLength > 0) {
- setTimeout(function(){
- $context
- .removeClass(className.error)
- ;
- }, settings.errorLength);
- }
- module.debug('API Request error:', errorMessage);
- $.proxy(settings.failure, $context)(errorMessage, settings, this);
- }
- else {
- module.debug('Request Aborted (Most likely caused by page change)');
- }
- }
- })
- ;
-
- // look for params in data
- $.extend(true, ajaxSettings, settings, {
- type : settings.method || settings.type,
- data : data,
- url : url,
- beforeSend : settings.beforeXHR
- });
-
- if(settings.stateContext) {
- $context
- .addClass(className.loading)
- ;
- }
-
- if(settings.progress) {
- module.verbose('Adding progress events');
- $.extend(true, ajaxSettings, {
- xhr: function() {
- var
- xhr = new window.XMLHttpRequest()
- ;
- xhr.upload.addEventListener('progress', function(event) {
- var
- percentComplete
- ;
- if (event.lengthComputable) {
- percentComplete = Math.round(event.loaded / event.total * 10000) / 100 + '%';
- $.proxy(settings.progress, $context)(percentComplete, event);
- }
- }, false);
- xhr.addEventListener('progress', function(event) {
- var
- percentComplete
- ;
- if (event.lengthComputable) {
- percentComplete = Math.round(event.loaded / event.total * 10000) / 100 + '%';
- $.proxy(settings.progress, $context)(percentComplete, event);
- }
- }, false);
- return xhr;
- }
- });
- }
-
- module.verbose('Creating AJAX request with settings: ', ajaxSettings);
- xhr =
- $.ajax(ajaxSettings)
- .always(function() {
- // calculate if loading time was below minimum threshold
- loadingDelay = ( settings.loadingLength - (new Date().getTime() - loadingTimer) );
- settings.loadingDelay = loadingDelay < 0
- ? 0
- : loadingDelay
- ;
- })
- .done(function(response) {
- var
- context = this
- ;
- setTimeout(function(){
- promise.resolveWith(context, [response]);
- }, settings.loadingDelay);
- })
- .fail(function(xhr, status, httpMessage) {
- var
- context = this
- ;
- // page triggers abort on navigation, dont show error
- if(status != 'abort') {
- setTimeout(function(){
- promise.rejectWith(context, [xhr, status, httpMessage]);
- }, settings.loadingDelay);
- }
- else {
- $context
- .removeClass(className.error)
- .removeClass(className.loading)
- ;
- }
- })
- ;
- if(settings.stateContext) {
- $module
- .data(metadata.promise, promise)
- .data(metadata.xhr, xhr)
- ;
- }
- },
-
- // reset api request
- reset: function() {
- $module
- .data(metadata.promise, false)
- .data(metadata.xhr, false)
- ;
- $context
- .removeClass(className.error)
- .removeClass(className.loading)
- ;
- module.error(errors.exitConditions);
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- }
- };
-
- module.initialize();
- return this;
- };
-
- // handle DOM attachment to API functionality
- $.fn.apiButton = function(parameters) {
- $(this)
- .each(function(){
- var
- // if only function passed it is success callback
- $module = $(this),
- element = this,
- selector = $(this).selector || '',
-
- settings = ( $.isFunction(parameters) )
- ? $.extend(true, {}, $.api.settings, $.fn.apiButton.settings, { stateContext: this, success: parameters })
- : $.extend(true, {}, $.api.settings, $.fn.apiButton.settings, { stateContext: this}, parameters),
- module
- ;
- module = {
- initialize: function() {
- if(settings.context && selector !== '') {
- $(settings.context)
- .on(selector, 'click.' + settings.namespace, module.click)
- ;
- }
- else {
- $module
- .on('click.' + settings.namespace, module.click)
- ;
- }
- },
- click: function() {
- if(!settings.filter || $(this).filter(settings.filter).size() === 0) {
- $.proxy( $.api, this )(settings);
- }
- }
- };
- module.initialize();
- })
- ;
- return this;
- };
-
- $.api.settings = {
- moduleName : 'API Module',
- namespace : 'api',
-
- verbose : true,
- debug : true,
-
- api : {},
-
- beforeSend : function(settings) {
- return settings;
- },
- beforeXHR : function(xhr) {},
-
- success : function(response) {},
- complete : function(response) {},
- failure : function(errorCode) {},
- progress : false,
-
- errors : {
- missingAction : 'API action used but no url was defined',
- missingURL : 'URL not specified for the API action',
- missingParameter : 'Missing an essential URL parameter: ',
-
- timeout : 'Your request timed out',
- error : 'There was an error with your request',
- parseError : 'There was an error parsing your request',
- JSONParse : 'JSON could not be parsed during error handling',
- statusMessage : 'Server gave an error: ',
- beforeSend : 'The before send function has aborted the request',
- exitConditions : 'API Request Aborted. Exit conditions met'
- },
-
- className: {
- loading : 'loading',
- error : 'error'
- },
-
- metadata: {
- action : 'action',
- promise : 'promise',
- xhr : 'xhr'
- },
-
- regExpTemplate: /\{\$([A-z]+)\}/g,
-
- action : false,
- url : false,
- urlData : false,
- serializeForm : false,
-
- stateContext : false,
-
- method : 'get',
- data : {},
- dataType : 'json',
- cache : true,
-
- loadingLength : 200,
- errorLength : 2000
-
- };
-
- $.fn.apiButton.settings = {
- filter : '.disabled, .loading',
- context : false,
- stateContext : false
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/modules/behavior/colorize.js b/node/src/files/components/semantic/packaged/modules/behavior/colorize.js
deleted file mode 100644
index 245d66815..000000000
--- a/node/src/files/components/semantic/packaged/modules/behavior/colorize.js
+++ /dev/null
@@ -1,271 +0,0 @@
-/* ******************************
- Colorizer
- Author: Jack Lukic
- Notes: First Commit June 06, 2012
-
- Tooltip Wrapper for loading
- colorizes of ideations, concepts and users
-
- Will eventually rewrite to use own tooltip lib
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
- $.fn.colorize = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.colorize.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function(instanceIndex) {
-
- var
- $module = $(this),
-
- mainCanvas = $('
')[0],
- imageCanvas = $('
')[0],
- overlayCanvas = $('
')[0],
-
- backgroundImage = new Image(),
-
- // defs
- mainContext,
- imageContext,
- overlayContext,
-
- image,
- imageName,
-
- width,
- height,
-
- // shortucts
- colors = settings.colors,
- paths = settings.paths,
- namespace = settings.namespace,
- errors = settings.errors,
-
- // boilerplate
- instance = $module.data('module-' + namespace),
- module
- ;
-
- module = {
-
- checkPreconditions: function() {
- module.debug('Checking pre-conditions');
-
- if( !$.isPlainObject(colors) || $.isEmptyObject(colors) ) {
- module.error(errors.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(errors.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(errors.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(errors.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(errors.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.moduleName + ': ' + message, variableName);
- }
- else {
- console.info(settings.moduleName + ': ' + message);
- }
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.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 = {
- moduleName : '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'
- },
-
- errors: {
- 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 );
diff --git a/node/src/files/components/semantic/packaged/modules/behavior/default-text.js b/node/src/files/components/semantic/packaged/modules/behavior/default-text.js
deleted file mode 100644
index 24d849842..000000000
--- a/node/src/files/components/semantic/packaged/modules/behavior/default-text.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/* ******************************
- Default Text (Form)
- Author: Jack Lukic
- Notes: First Commit April 08, 2012
-
- Refactored Aug 13, 2012
-
- allows you to set a default text value which will be added and removed on form field focus
-
-****************************** */
-;(function ( $, window, document, undefined ) {
-
- $.fn.defaultText = function(parameters) {
- var
- // overload for shorthand to default value
- settings = (typeof parameters == 'string')
- ? $.extend({}, $.fn.defaultText.settings, { defaultValue: parameters })
- : $.extend(true, {}, $.fn.defaultText.settings, parameters)
- ;
- // overload function
- if(typeof parameters == 'string') {
- parameters = { defaultValue: parameters };
- }
- $.extend(settings, parameters);
- $(this)
- .each(function() {
- var
- $element = $(this),
- module = {
-
- checkDefault: function() {
- if($element.val().toLowerCase() != settings.defaultValue.toLowerCase()) {
- $element.addClass(settings.filledClass);
- }
- },
-
- placeholder: {
- add: function(){
- if( $element.filter(settings.disabledClassList).size() === 0 ) {
- if( $element.val() == settings.replaceValue ) {
- if(settings.alwaysReplace) {
- $element
- .removeClass(settings.filledClass)
- .val($element.attr('last'))
- .removeAttr('last')
- ;
- }
- else {
- $element
- .removeClass(settings.filledClass)
- .val(settings.defaultValue)
- ;
- }
- }
- else {
- $element
- .addClass(settings.filledClass)
- ;
- }
- }
- },
- remove: function() {
- if( $element.filter(settings.disabledClassList).size() === 0 ) {
- if(settings.alwaysReplace) {
- $element
- .attr('last', $element.val())
- .val(settings.replaceValue)
- ;
- }
- else {
- if( $element.val().toLowerCase() == settings.defaultValue.toLowerCase() ) {
- $element
- .val(settings.replaceValue)
- ;
- }
- }
- }
- }
- }
- }
- ;
- if(settings.defaultValue == 'auto') {
- settings.defaultValue = $(this).val();
- }
- $element
- .on('focus', module.placeholder.remove)
- .on('blur', module.placeholder.add)
- ;
- // check for user value on load
- module.checkDefault();
- })
- ;
- return this;
- };
-
- $.fn.defaultText.settings = {
- defaultValue : 'auto',
- replaceValue : '',
- alwaysReplace : false,
- disabledClassList : '.readonly, .disabled',
- filledClass : 'filled'
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/behavior/form.js b/node/src/files/components/semantic/packaged/modules/behavior/form.js
deleted file mode 100644
index 89fd569ef..000000000
--- a/node/src/files/components/semantic/packaged/modules/behavior/form.js
+++ /dev/null
@@ -1,408 +0,0 @@
-/* ******************************
- Form Validation Components
- Author: Jack Lukic
- Notes: First Commit April 08, 2012
-
- Refactored Feb 22, 2012
-
- Allows you to validate forms based on a form validation object
- Form validation objects are bound by either data-validate="" metadata, or form id or name tags
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.validateForm = function(fields, parameters) {
- var
- $allModules = $(this),
-
- settings = $.extend(true, {}, $.fn.validateForm.settings, parameters),
- // make arguments available
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
- $allModules
- .each(function() {
- var
- $module = $(this),
- $group = $(this).find(settings.selector.group),
- $field = $(this).find(settings.selector.field),
- $errorPrompt = $(this).find(settings.selector.prompt),
-
- formErrors = [],
-
- selector = $module.selector || '',
- element = this,
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (typeof query == 'string'),
-
- namespace = settings.namespace,
- metadata = settings.metadata,
- className = settings.className,
- errors = settings.errors,
- module
- ;
-
- module = {
-
- initialize: function() {
- module.verbose('Initializing form validation');
- if(fields !== undefined || !$.isEmptyObject(fields) ) {
- // add default text if set
- if($.fn.defaultText !== undefined) {
- $.each(fields, function(fieldName, field) {
- module.field.add.defaultText(field);
- });
- }
- // attach event handler
- $module
- .on('submit.' + namespace, module.validate.form)
- ;
- }
- else {
- module.error(errors.noFields, $module);
- }
- },
-
- destroy: function() {
- $module
- .off(namespace)
- ;
- },
-
- field: {
- find: function(identifier) {
- var
- $field = $module.find(settings.selector.field)
- ;
- if( $field.filter('#' + identifier).size() > 0 ) {
- return $field.filter('#' + identifier);
- }
- else if( $field.filter('[name="' + identifier +'"]').size() > 0 ) {
- return $field.filter('[name="' + identifier +'"]');
- }
- else if( $field.filter('[data-' + metadata.validate + '="'+ identifier +'"]').size() > 0 ) {
- return $field.filter('[data-' + metadata.validate + '="'+ identifier +'"]');
- }
- return $('
');
- },
- add: {
- defaultText: function(field) {
- var
- $field = module.field.find(field.identifier)
- ;
- if(field.defaultText !== undefined) {
- $field.defaultText(field.defaultText);
- }
- },
- error: function(field, errors) {
- var
- $field = module.field.find(field.identifier),
- $errorGroup = $field.closest($group),
- $errorPrompt = $group.find($errorPrompt),
- promptExists = ($errorPrompt.size() !== 0)
- ;
- $errorGroup
- .addClass(className.error)
- ;
- if(settings.inlineError) {
- // create message container on first invalid validation attempt
- if(!promptExists) {
- $errorPrompt = $('
')
- .addClass(className.prompt)
- .insertBefore($field)
- ;
- }
- // add prompt message
- $errorPrompt
- .html(errors[0])
- .fadeIn(settings.animateSpeed)
- ;
- }
- }
- },
- remove: {
- error: function(field) {
- var
- $field = module.field.find(field.identifier),
- $errorGroup = $field.closest($group),
- $errorPrompt = $group.find($errorPrompt)
- ;
- $errorGroup
- .removeClass(className.error)
- ;
- if(settings.inlineError) {
- $errorPrompt.hide();
- }
- }
- }
- },
-
- validate: {
-
- form: function(event) {
- var
- allValid = true
- ;
- // reset errors
- formErrors = [];
- $.each(fields, function(fieldName, field){
- // form is invalid after first bad field, but keep checking
- if( !( module.validate.field(field) ) ) {
- allValid = false;
- }
- });
- // Evaluate form callbacks
- return (allValid)
- ? $.proxy(settings.onSuccess, this)(event)
- : $.proxy(settings.onFailure, this)(formErrors)
- ;
- },
-
- // takes a validation object and returns whether field passes validation
- field: function(field) {
- var
- $field = module.field.find(field.identifier),
- fieldValid = true,
- fieldErrors = []
- ;
- if(field.rules !== undefined) {
- // iterate over all validation types for a certain field
- $.each(field.rules, function(index, rule) {
- if( !( module.validate.rule(field, rule) ) ) {
- module.debug('Field is invalid', field.identifier, rule.type);
- fieldErrors.push(rule.prompt);
- fieldValid = false;
- }
- });
- }
- if(fieldValid) {
- module.field.remove.error(field, fieldErrors);
- settings.onValid($field);
- }
- else {
- formErrors = formErrors.concat(fieldErrors);
- module.field.add.error(field, fieldErrors);
- $.proxy(settings.onInvalid, $field)(fieldErrors);
- return false;
- }
- return true;
- },
-
- // takes validation rule and returns whether field passes rule
- rule: function(field, validation) {
- var
- $field = module.field.find(field.identifier),
- type = validation.type,
- defaultText = (field.defaultText !== undefined)
- ? field.defaultText
- : false,
- value = ($field.val() == defaultText)
- ? ''
- : $field.val(),
-
- bracketRegExp = /\[(.*?)\]/i,
- bracket = bracketRegExp.exec(type),
- isValid = true,
- ancillary,
- functionType
- ;
- // if bracket notation is used, pass in extra parameters
- if(bracket !== undefined && bracket != null) {
- ancillary = bracket[1];
- functionType = type.replace(bracket[0], '');
- isValid = $.proxy(settings.rules[functionType], $module)(value, ancillary);
- }
- // normal notation
- else {
- isValid = (type == 'checked')
- ? $field.filter(':checked').size() > 0
- : settings.rules[type](value)
- ;
- }
- return isValid;
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
-
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.validateForm.settings = {
-
- // module info
- moduleName : 'Validate Form Module',
- debug : true,
- verbose : false,
- namespace : 'validate',
-
- animateSpeed : 150,
- inlineError : false,
-
- onValid : function() {},
- onInvalid : function() {},
- onSuccess : function() { return true; },
- onFailure : function() { return false; },
-
- metadata : {
- validate: 'validate'
- },
-
- // errors
- errors: {
- method : 'The method you called is not defined.',
- noFields : 'No validation object specified.'
- },
-
-
- selector : {
- group : '.field',
- prompt : '.prompt',
- field : 'input, textarea, select'
- },
-
- className : {
- error : 'error',
- prompt : 'prompt'
- },
-
- rules: {
- empty: function(value) {
- return !(value === undefined || '' === value);
- },
- email: function(value){
- var
- emailRegExp = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
- ;
- return emailRegExp.test(value);
- },
- length: function(value, requiredLength) {
- return (value !== undefined)
- ? (value.length >= requiredLength)
- : false
- ;
- },
- not: function(value, notValue) {
- return (value != notValue);
- },
- maxLength: function(value, maxLength) {
- return (value !== undefined)
- ? (value.length <= maxLength)
- : false
- ;
- },
- match: function(value, matchingField) {
- // use either id or name of field
- var
- $form = $(this),
- matchingValue
- ;
- if($form.find('#' + matchingField).size() > 0) {
- matchingValue = $form.find('#' + matchingField).val();
- }
- else if($form.find('[name=' + matchingField +']').size() > 0) {
- matchingValue = $form.find('[name=' + matchingField + ']').val();
- }
- else if( $form.find('[data-validate="'+ matchingField +'"]').size() > 0 ) {
- matchingValue = $form.find('[data-validate="'+ matchingField +'"]').val();
- }
- return (matchingValue !== undefined)
- ? ( value.toString() == matchingValue.toString() )
- : false
- ;
- },
- url: function(value) {
- var
- urlRegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
- ;
- return urlRegExp.test(value);
- }
- }
-
-};
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/behavior/state.js b/node/src/files/components/semantic/packaged/modules/behavior/state.js
deleted file mode 100644
index f05887f5a..000000000
--- a/node/src/files/components/semantic/packaged/modules/behavior/state.js
+++ /dev/null
@@ -1,649 +0,0 @@
-/* ******************************
- Module
- State
- Change text based on state context
- Hover/Pressed/Active/Inactive
- Author: Jack Lukic
- Last revision: May 2012
-
- State text module is used to apply text to a given node
- depending on the elements "state"
-
- State is either defined as "active" or "inactive" depending
- on the returned value of a test function
-
- Usage:
-
- $button
- .state({
- states: {
- active: true
- },
- text: {
- inactive: 'Follow',
- active : 'Following',
- enable : 'Add',
- disable : 'Remove'
- }
- })
- ;
-
- "Follow", turns to "Add" on hover, then "Following" on active
- and finally "Remove" on active hover
-
- This plugin works in correlation to API module and will, by default,
- use deffered object accept/reject to determine state.
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.state = function(parameters) {
- var
-
- $allModules = $(this),
-
- // make available in scope
- selector = $allModules.selector || '',
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
-
- // set up performance tracking
- time = new Date().getTime(),
- performance = [],
-
- invokedResponse
- ;
- $allModules
- .each(function() {
- var
- $module = $(this),
-
- settings = $.extend(true, {}, $.fn.state.settings, parameters),
-
- element = this,
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (typeof query == 'string'),
-
- // shortcuts
- namespace = settings.namespace,
- metadata = settings.metadata,
- className = settings.className,
- states = settings.states,
- text = settings.text,
-
- module
- ;
- module = {
-
- initialize: function() {
- module.verbose('Initializing module', element);
-
- // allow module to guess desired state based on element
- if(settings.automatic) {
- module.add.defaults();
- }
-
- // bind events with delegated events
- if(settings.context && selector !== '') {
- if( module.allows('hover') ) {
- $(element, settings.context)
- .on(selector, 'mouseenter.' + namespace, module.hover.enable)
- .on(selector, 'mouseleave.' + namespace, module.hover.disable)
- ;
- }
- if( module.allows('pressed') ) {
- $(element, settings.context)
- .on(selector, 'mousedown.' + namespace, module.pressed.enable)
- .on(selector, 'mouseup.' + namespace, module.pressed.disable)
- ;
- }
- if( module.allows('focus') ) {
- $(element, settings.context)
- .on(selector, 'focus.' + namespace, module.focus.enable)
- .on(selector, 'blur.' + namespace, module.focus.disable)
- ;
- }
- $(settings.context)
- .on(selector, 'mouseenter.' + namespace, module.text.change)
- .on(selector, 'mouseleave.' + namespace, module.text.reset)
- .on(selector, 'click.' + namespace, module.toggle)
- ;
-
- }
- else {
- if( module.allows('hover') ) {
- $module
- .on('mouseenter.' + namespace, module.hover.enable)
- .on('mouseleave.' + namespace, module.hover.disable)
- ;
- }
- if( module.allows('pressed') ) {
- $module
- .on('mousedown.' + namespace, module.pressed.enable)
- .on('mouseup.' + namespace, module.pressed.disable)
- ;
- }
- if( module.allows('focus') ) {
- $module
- .on('focus.' + namespace, module.focus.enable)
- .on('blur.' + namespace, module.focus.disable)
- ;
- }
- $module
- .on('mouseenter.' + namespace, module.text.change)
- .on('mouseleave.' + namespace, module.text.reset)
- .on('click.' + namespace, module.toggle)
- ;
- }
- $module
- .data('module-' + namespace, module)
- ;
- },
-
- destroy: function() {
- module.verbose('Destroying previous module', element);
- $module
- .off('.' + namespace)
- ;
- },
-
- refresh: function() {
- module.verbose('Refreshing selector cache', element);
- $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) );
- },
-
- 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');
- }
- },
-
- allows: function(state) {
- return states[state] || false;
- },
- enable: function(state) {
- if(module.allows(state)) {
- $module.addClass( className[state] );
- }
- },
- disable: function(state) {
- if(module.allows(state)) {
- $module.removeClass( className[state] );
- }
- },
- textFor: function(state) {
- return text[state] || false;
- },
-
- focus : {
- enable: function() {
- $module.addClass(className.focus);
- },
- disable: function() {
- $module.removeClass(className.focus);
- }
- },
-
- hover : {
- enable: function() {
- $module.addClass(className.hover);
- },
- disable: function() {
- $module.removeClass(className.hover);
- }
- },
-
- pressed : {
- enable: function() {
- $module
- .addClass(className.pressed)
- .one('mouseleave', module.pressed.disable)
- ;
- },
- disable: function() {
- $module.removeClass(className.pressed);
- }
- },
-
- // determines method for state activation
- toggle: function() {
- var
- apiRequest = $module.data(metadata.promise)
- ;
- if( module.allows('active') && module.is.enabled() ) {
- module.refresh();
- if(apiRequest !== undefined) {
- module.listenTo(apiRequest);
- }
- else {
- module.change();
- }
- }
- },
-
- listenTo: function(apiRequest) {
- module.debug('API request detected, waiting for state signal', apiRequest);
- if(apiRequest) {
- if(text.loading) {
- module.text.update(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();
- })
- ;
- }
- // xhr exists but set to false, beforeSend killed the xhr
- else {
- settings.activateTest = function(){ return false; };
- settings.deactivateTest = function(){ return false; };
- }
- },
-
- // checks whether active/inactive state can be given
- change: 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();
- },
-
- activate: function() {
- if( $.proxy(settings.activateTest, element)() ) {
- module.debug('Setting state to active');
- $module
- .addClass(className.active)
- ;
- module.text.update(text.active);
- }
- },
-
- deactivate: function() {
- if($.proxy(settings.deactivateTest, element)() ) {
- module.debug('Setting state to inactive');
- $module
- .removeClass(className.active)
- ;
- module.text.update(text.inactive);
- }
- },
-
- 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')
- ;
- }
- },
-
- text: {
-
- // finds text node to update
- get: function() {
- return (settings.selector.text)
- ? $module.find(settings.selector.text).text()
- : $module.html()
- ;
- },
-
- flash: function(text, duration) {
- var
- previousText = module.text.get()
- ;
- text = text || settings.text.flash;
- duration = duration || settings.flashDuration;
- module.text.update(text);
- setTimeout(function(){
- module.text.update(previousText);
- }, duration);
- },
-
- change: function() {
- module.verbose('Checking if text should be changed');
- if( module.is.textEnabled() ) {
- if( module.is.active() ) {
- if(text.hover) {
- module.verbose('Changing text to hover text', text.hover);
- module.text.update(text.hover);
- }
- else if(text.disable) {
- module.verbose('Changing text to disable text', text.disable);
- module.text.update(text.disable);
- }
- }
- else {
- if(text.hover) {
- module.verbose('Changing text to hover text', text.disable);
- module.text.update(text.hover);
- }
- else if(text.enable){
- module.verbose('Changing text to enable text', text.disable);
- module.text.update(text.enable);
- }
- }
- }
- },
-
- // on mouseout sets text to previous value
- reset : 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.text.update(activeText);
- }
- else if(inactiveText) {
- module.verbose('Resetting inactive text', activeText);
- module.text.update(inactiveText);
- }
- }
- },
-
- update: function(text) {
- var
- currentText = module.text.get()
- ;
- 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)
- ;
- }
- }
- }
- },
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- performance: {
- log: function(message) {
- var
- currentTime,
- executionTime
- ;
- if(settings.performance) {
- currentTime = new Date().getTime();
- executionTime = currentTime - time;
- time = currentTime;
- performance.push({
- 'Name' : message,
- 'Execution Time' : executionTime
- });
- clearTimeout(module.performance.timer);
- module.performance.timer = setTimeout(module.performance.display, 100);
- }
- },
- display: function() {
- var
- title = settings.moduleName + ' Performance (' + selector + ')',
- caption = settings.moduleName + ': ' + selector + '(' + $allModules.size() + ' elements)'
- ;
- if(console.group !== 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']);
- });
- }
- console.groupEnd();
- performance = [];
- }
- }
- },
- verbose: function() {
- if(settings.verbose && settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- debug: function() {
- if(settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- error: function() {
- if(console.log !== undefined) {
- module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':');
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- if(instance !== undefined) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.state.settings = {
-
- // module info
- moduleName : 'State Module',
-
- // debug output
- debug : true,
-
- // verbose debug output
- verbose : false,
-
- // namespace for events
- namespace : 'state',
-
- // debug data includes performance
- performance: true,
-
- // callback occurs on state change
- 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 : 3000,
-
- // selector filter
- filter : {
- text : '.loading, .disabled',
- active : '.disabled'
- },
-
- context : false,
- // errors
- errors: {
- method : 'The method you called is not defined.'
- },
-
- // metadata
- metadata: {
- promise : 'promise',
- storedText : 'stored-text'
- },
-
- // change class on state
- className: {
- focus : 'focus',
- hover : 'hover',
- pressed : 'down',
- active : 'active',
- loading : 'loading'
- },
-
- selector: {
- // selector for text node
- text: false
- },
-
- defaults : {
- input: {
- hover : true,
- focus : true,
- pressed : true,
- loading : false,
- active : false
- },
- button: {
- hover : true,
- focus : false,
- pressed : true,
- active : false,
- loading : true
- }
- },
-
- states : {
- hover : true,
- focus : true,
- pressed : true,
- loading : false,
- active : false
- },
-
- text : {
- flash : false,
- hover : false,
- active : false,
- inactive : false,
- enable : false,
- disable : false
- }
-
-};
-
-
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/chat.js b/node/src/files/components/semantic/packaged/modules/chat.js
deleted file mode 100644
index 017a1af4f..000000000
--- a/node/src/files/components/semantic/packaged/modules/chat.js
+++ /dev/null
@@ -1,697 +0,0 @@
-/* ******************************
- Module - Chat Room
- Author: Jack Lukic
- Notes: First Commit Aug 8, 2012
-
- Designed as a simple modular chat component
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.chat = function(key, channelName, parameters) {
- var
- settings = $.extend(true, {}, $.fn.chat.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $expandButton = $module.find(settings.selector.expandButton),
- $userListButton = $module.find(settings.selector.userListButton),
- $userList = $module.find(settings.selector.userList),
- $room = $module.find(settings.selector.room),
- $userCount = $module.find(settings.selector.userCount),
-
- $log = $module.find(settings.selector.log),
- $message = $module.find(settings.selector.message),
-
- $messageInput = $module.find(settings.selector.messageInput),
- $messageButton = $module.find(settings.selector.messageButton),
-
- instance = $module.data('module'),
-
- className = settings.className,
- namespace = settings.namespace,
-
- html = '',
- users = {},
- loggedInUser,
-
- message,
- count,
-
- height,
-
- pusher,
- module
- ;
-
- module = {
-
- channel: false,
- width: {
- log : $log.width(),
- userList : $userList.outerWidth()
- },
-
- initialize: function() {
-
- // check error conditions
- if(Pusher === undefined) {
- module.error(settings.errors.pusher);
- }
- if(key === undefined || channelName === undefined) {
- module.error(settings.errors.key);
- return false;
- }
- else if( !(settings.endpoint.message || settings.endpoint.authentication) ) {
- module.error(settings.errors.endpoint);
- return false;
- }
-
- // define pusher
- pusher = new Pusher(key);
- Pusher.channel_auth_endpoint = settings.endpoint.authentication;
-
- module.channel = pusher.subscribe(channelName);
-
- module.channel.bind('pusher:subscription_succeeded', module.user.list.create);
- module.channel.bind('pusher:subscription_error', module.error);
- module.channel.bind('pusher:member_added', module.user.joined);
- module.channel.bind('pusher:member_removed', module.user.left);
- module.channel.bind('update_messages', module.message.receive);
-
- $.each(settings.customEvents, function(label, value) {
- module.channel.bind(label, value);
- });
-
- // expandable with states
- if( $.fn.hoverClass !== undefined && $.fn.downClass !== undefined ) {
- $expandButton
- .hoverClass()
- .downClass()
- ;
- $userListButton
- .hoverClass()
- .downClass()
- ;
- $messageButton
- .hoverClass()
- .downClass()
- ;
- }
- // bind module events
- $userListButton
- .on('click.' + namespace, module.event.toggleUserList)
- ;
- $expandButton
- .on('click.' + namespace, module.event.toggleExpand)
- ;
- $messageInput
- .on('keydown.' + namespace, module.event.input.keydown)
- .on('keyup.' + namespace, module.event.input.keyup)
- ;
- $messageButton
- .on('mouseenter.' + namespace, module.event.hover)
- .on('mouseleave.' + namespace, module.event.hover)
- .on('click.' + namespace, module.event.submit)
- ;
- // scroll to bottom of chat log
- $log
- .animate({
- scrollTop: $log.prop('scrollHeight')
- }, 400)
- ;
- $module
- .data('module', module)
- .addClass(className.loading)
- ;
-
- },
-
- // refresh module
- refresh: function() {
- // reset width calculations
- $userListButton
- .removeClass(className.active)
- ;
- module.width = {
- log : $log.width(),
- userList : $userList.outerWidth()
- };
- if( $userListButton.hasClass(className.active) ) {
- module.user.list.hide();
- }
- $module.data('module', module);
- },
-
- user: {
-
- updateCount: function() {
- if(settings.userCount) {
- users = $module.data('users');
- count = 0;
- $.each(users, function(index){
- count++;
- });
- $userCount
- .html( settings.templates.userCount(count) )
- ;
- }
- },
-
- // add user to user list
- joined: function(member) {
- users = $module.data('users');
- if(member.id != 'anonymous' && users[ member.id ] === undefined ) {
- users[ member.id ] = member.info;
- if(settings.randomColor && member.info.color === undefined) {
- member.info.color = settings.templates.color(member.id);
- }
- html = settings.templates.userList(member.info);
- if(member.info.isAdmin) {
- $(html)
- .prependTo($userList)
- .preview({
- type : 'user',
- placement : 'left'
- })
- ;
- }
- else {
- $(html)
- .appendTo($userList)
- .preview({
- type : 'user',
- placement : 'left'
- })
- ;
- }
- if( $.fn.preview !== undefined ) {
- $userList
- .children()
- .last()
- .preview({
- type: 'user',
- placement: 'left'
- })
- ;
- }
- if(settings.partingMessages) {
- $log
- .append( settings.templates.joined(member.info) )
- ;
- module.message.scroll.test();
- }
- module.user.updateCount();
- }
- },
-
- // remove user from user list
- left: function(member) {
- users = $module.data('users');
- if(member !== undefined && member.id !== 'anonymous') {
- delete users[ member.id ];
- $module
- .data('users', users)
- ;
- $userList
- .find('[data-id='+ member.id + ']')
- .remove()
- ;
- if(settings.partingMessages) {
- $log
- .append( settings.templates.left(member.info) )
- ;
- module.message.scroll.test();
- }
- module.user.updateCount();
- }
- },
-
- list: {
-
- // receives list of members and generates user list
- create: function(members) {
- users = {};
- members.each(function(member) {
- if(member.id !== 'anonymous' && member.id !== 'undefined') {
- if(settings.randomColor && member.info.color === undefined) {
- member.info.color = settings.templates.color(member.id);
- }
- // sort list with admin first
- html = (member.info.isAdmin)
- ? settings.templates.userList(member.info) + html
- : html + settings.templates.userList(member.info)
- ;
- users[ member.id ] = member.info;
- }
- });
- $module
- .data('users', users)
- .data('user', users[members.me.id] )
- .removeClass(className.loading)
- ;
- $userList
- .html(html)
- ;
- if( $.fn.preview !== undefined ) {
- $userList
- .children()
- .preview({
- type: 'user',
- placement: 'left'
- })
- ;
- }
- module.user.updateCount();
- $.proxy(settings.onJoin, $userList.children())();
- },
-
- // shows user list
- show: function() {
- $log
- .animate({
- width: (module.width.log - module.width.userList)
- }, {
- duration : settings.speed,
- easing : settings.easing,
- complete : module.message.scroll.move
- })
- ;
- },
-
- // hides user list
- hide: function() {
- $log
- .stop()
- .animate({
- width: (module.width.log)
- }, {
- duration : settings.speed,
- easing : settings.easing,
- complete : module.message.scroll.move
- })
- ;
- }
-
- }
-
- },
-
- message: {
-
- // handles scrolling of chat log
- scroll: {
- test: function() {
- height = $log.prop('scrollHeight') - $log.height();
- if( Math.abs($log.scrollTop() - height) < settings.scrollArea) {
- module.message.scroll.move();
- }
- },
-
- move: function() {
- height = $log.prop('scrollHeight') - $log.height();
- $log
- .scrollTop(height)
- ;
- }
- },
-
- // sends chat message
- send: function(message) {
- if( !module.utils.emptyString(message) ) {
- $.api({
- url : settings.endpoint.message,
- method : 'POST',
- data : {
- 'chat_message': {
- content : message,
- timestamp : new Date().getTime()
- }
- }
- });
- }
- },
-
- // receives chat response and processes
- receive: function(response) {
- message = response.data;
- users = $module.data('users');
- loggedInUser = $module.data('user');
- if(users[ message.userID] !== undefined) {
- // logged in user's messages already pushed instantly
- if(loggedInUser === undefined || loggedInUser.id != message.userID) {
- message.user = users[ message.userID ];
- module.message.display(message);
- }
- }
- },
-
- // displays message in chat log
- display: function(message) {
- $log
- .append( settings.templates.message(message) )
- ;
- module.message.scroll.test();
- $.proxy(settings.onMessage, $log.children().last() )();
- }
-
- },
-
- expand: function() {
- $module
- .addClass(className.expand)
- ;
- $.proxy(settings.onExpand, $module )();
- module.refresh();
- },
-
- contract: function() {
- $module
- .removeClass(className.expand)
- ;
- $.proxy(settings.onContract, $module )();
- module.refresh();
- },
-
- event: {
-
- input: {
-
- keydown: function(event) {
- if(event.which == 13) {
- $messageButton
- .addClass(className.down)
- ;
- }
- },
-
- keyup: function(event) {
- if(event.which == 13) {
- $messageButton
- .removeClass(className.down)
- ;
- module.event.submit();
- }
- }
-
- },
-
- // handles message form submit
- submit: function() {
- var
- message = $messageInput.val(),
- loggedInUser = $module.data('user')
- ;
- if(loggedInUser !== undefined && !module.utils.emptyString(message)) {
- module.message.send(message);
- // display immediately
- module.message.display({
- user: loggedInUser,
- text: message
- });
- module.message.scroll.move();
- $messageInput
- .val('')
- ;
-
- }
- },
-
- // handles button click on expand button
- toggleExpand: function() {
- if( !$module.hasClass(className.expand) ) {
- $expandButton
- .addClass(className.active)
- ;
- module.expand();
- }
- else {
- $expandButton
- .removeClass(className.active)
- ;
- module.contract();
- }
- },
-
- // handles button click on user list button
- toggleUserList: function() {
- if( !$log.is(':animated') ) {
- if( !$userListButton.hasClass(className.active) ) {
- $userListButton
- .addClass(className.active)
- ;
- module.user.list.show();
- }
- else {
- $userListButton
- .removeClass('active')
- ;
- module.user.list.hide();
- }
- }
-
- }
- },
-
- utils: {
-
- emptyString: function(string) {
- if(typeof string == 'string') {
- return (string.search(/\S/) == -1);
- }
- return false;
- }
-
- },
-
- // standard methods
- debug: function(message) {
- if(settings.debug) {
- console.info(settings.moduleName + ': ' + message);
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.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.chat.settings = {
-
- moduleName : 'Chat Module',
- debug : false,
- namespace : 'chat',
-
- onJoin : function(){},
- onMessage : function(){},
- onExpand : function(){},
- onContract : function(){},
-
- customEvents : {},
-
- partingMessages : false,
- userCount : true,
-
- randomColor : true,
-
- speed : 300,
- easing : 'easeOutQuint',
-
- // pixels from bottom of chat log that should trigger auto scroll to bottom
- scrollArea : 9999,
-
- endpoint : {
- message : false,
- authentication : false
- },
-
- errors: {
- method : 'The method you called is not defined',
- endpoint : 'Please define a message and authentication endpoint.',
- key : 'You must specify a pusher key and channel.',
- pusher : 'You must include the Pusher library.'
- },
-
- className : {
- expand : 'expand',
- active : 'active',
- hover : 'hover',
- down : 'down',
- loading : 'loading'
- },
-
- selector : {
- userCount : '.actions .message',
- userListButton : '.actions .button.user-list',
- expandButton : '.actions .button.expand',
- room : '.room',
- userList : '.room .user-list',
- log : '.room .log',
- message : '.room .log .message',
- author : '.room log .message .author',
- messageInput : '.talk input',
- messageButton : '.talk .send.button'
- },
-
- templates: {
-
- userCount: function(number) {
- return number + ' users in chat';
- },
-
- color: function(userID) {
- var
- colors = [
- '#000000',
- '#333333',
- '#666666',
- '#999999',
- '#CC9999',
- '#CC6666',
- '#CC3333',
- '#993333',
- '#663333',
- '#CC6633',
- '#CC9966',
- '#CC9933',
- '#999966',
- '#CCCC66',
- '#99CC66',
- '#669933',
- '#669966',
- '#33A3CC',
- '#336633',
- '#33CCCC',
- '#339999',
- '#336666',
- '#336699',
- '#6666CC',
- '#9966CC',
- '#333399',
- '#663366',
- '#996699',
- '#993366',
- '#CC6699'
- ]
- ;
- return colors[ Math.floor( Math.random() * colors.length) ];
- },
-
- message: function(message) {
- var
- html = ''
- ;
- if(message.user.isAdmin) {
- message.user.color = '#55356A';
- html += '
';
- html += '
';
- }
- /*
- else if(message.user.isPro) {
- html += '
';
- html += '
';
- }
- */
- else {
- html += '
';
- }
- html += '
';
- if(message.user.color !== undefined) {
- html += '' + message.user.name + ': ';
- }
- else {
- html += '' + message.user.name + ': ';
- }
- html += ''
- + message.text
- + '
'
- + '
'
- ;
- return html;
- },
-
- joined: function(member) {
- return (typeof member.name !== undefined)
- ? '
' + member.name + ' has joined the chat.
'
- : false
- ;
- },
- left: function(member) {
- return (typeof member.name !== undefined)
- ? '
' + member.name + ' has left the chat.
'
- : false
- ;
- },
-
- userList: function(member) {
- var
- html = ''
- ;
- if(member.isAdmin) {
- member.color = '#55356A';
- }
- html += ''
- + '
';
- return html;
- }
-
- }
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/checkbox.js b/node/src/files/components/semantic/packaged/modules/checkbox.js
deleted file mode 100644
index 23fedc290..000000000
--- a/node/src/files/components/semantic/packaged/modules/checkbox.js
+++ /dev/null
@@ -1,283 +0,0 @@
-/* ******************************
- Semantic Module: Checkbox
- Author: Jack Lukic
- Notes: First Commit March 25, 2013
-
- Simple plug-in which maintains the state for ui checkbox
- This can be done without javascript, only in instances
- where each checkbox is assigned a unique ID. This provides a separate
- programmatic option when that is not possible.
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.checkbox = function(parameters) {
- var
- $allModules = $(this),
-
- settings = $.extend(true, {}, $.fn.checkbox.settings, parameters),
-
- eventNamespace = '.' + settings.namespace,
- moduleNamespace = 'module-' + settings.namespace,
-
- selector = $allModules.selector || '',
- time = new Date().getTime(),
- performance = [],
-
- query = arguments[0],
- methodInvoked = (typeof query == 'string'),
- queryArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
-
- $allModules
- .each(function() {
- var
- $module = $(this),
- $input = $(this).find(settings.selector.input),
-
- selector = $module.selector || '',
- element = this,
- instance = $module.data('module-' + settings.namespace),
-
- className = settings.className,
- namespace = settings.namespace,
- errors = settings.errors,
- module
- ;
-
- module = {
-
- initialize: function() {
- if(settings.context && selector !== '') {
- module.verbose('Initializing checkbox with delegated events', $module);
- $(element, settings.context)
- .on(selector, 'click' + eventNamespace, module.toggle)
- .data(moduleNamespace, module)
- ;
- }
- else {
- module.verbose('Initializing checkbox with bound events', $module);
- $module
- .on('click' + eventNamespace, module.toggle)
- .data(moduleNamespace, module)
- ;
- }
- },
-
- destroy: function() {
- module.verbose('Destroying previous module for', $module);
- $module
- .off(namespace)
- ;
- },
-
- enable: function() {
- module.debug('Enabling checkbox');
- $module
- .addClass(className.active)
- ;
- $input
- .prop('checked', true)
- ;
- $.proxy(settings.onChange, $input.get())();
- $.proxy(settings.onEnable, $input.get())();
- },
-
- disable: function() {
- module.debug('Disabling checkbox');
- $module
- .removeClass(className.active)
- ;
- $input
- .prop('checked', false)
- ;
- $.proxy(settings.onChange, $input.get())();
- $.proxy(settings.onDisable, $input.get())();
- },
-
- toggle: function() {
- if( $input.prop('checked') === undefined || !$input.prop('checked') ) {
- module.enable();
- }
- else {
- module.disable();
- }
- },
-
- setting: function(name, value) {
- if(value !== undefined) {
- if( $.isPlainObject(name) ) {
- $.extend(true, settings, name);
- }
- else {
- settings[name] = value;
- }
- }
- else {
- return settings[name];
- }
- },
- internal: function(name, value) {
- if(value !== undefined) {
- if( $.isPlainObject(name) ) {
- $.extend(true, module, name);
- }
- else {
- module[name] = value;
- }
- }
- else {
- return module[name];
- }
- },
- debug: function() {
- if(settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- verbose: function() {
- if(settings.verbose && settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- error: function() {
- if(console.log !== undefined) {
- module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':');
- }
- },
- 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,
- 'Execution Time' : executionTime
- });
- clearTimeout(module.performance.timer);
- module.performance.timer = setTimeout(module.performance.display, 100);
- }
- },
- display: function() {
- var
- title = settings.moduleName,
- caption = settings.moduleName + ': ' + selector + '(' + $allModules.size() + ' elements)',
- totalExecutionTime = 0
- ;
- if(selector) {
- title += 'Performance (' + selector + ')';
- }
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
- console.groupCollapsed(title);
- if(console.table) {
- $.each(performance, function(index, data) {
- totalExecutionTime += data['Execution Time'];
- });
- console.table(performance);
- }
- else {
- $.each(performance, function(index, data) {
- totalExecutionTime += data['Execution Time'];
- });
- }
- console.log('Total Execution Time:', totalExecutionTime +'ms');
- console.groupEnd();
- performance = [];
- time = false;
- }
- }
- },
- invoke: function(query, passedArguments, context) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || queryArguments;
- context = element || context;
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- module.verbose('Executing invoked function', found);
- return found.apply(context, passedArguments);
- }
- return found || false;
- }
- };
-
- if(methodInvoked) {
- if(instance === undefined) {
- module.initialize();
- }
- invokedResponse = module.invoke(query);
- }
- else {
- if(instance !== undefined) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- return (invokedResponse)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.checkbox.settings = {
-
- moduleName : 'Checkbox Module',
- namespace : 'checkbox',
-
- verbose : true,
- debug : true,
- performance : true,
-
- // delegated event context
- context : false,
-
- onChange : function(){},
- onEnable : function(){},
- onDisable : function(){},
-
- errors : {
- method : 'The method you called is not defined.'
- },
-
- selector : {
- input : 'input'
- },
-
- className : {
- active : 'active'
- }
-
-};
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/modal.js b/node/src/files/components/semantic/packaged/modules/modal.js
deleted file mode 100644
index d3f674ad4..000000000
--- a/node/src/files/components/semantic/packaged/modules/modal.js
+++ /dev/null
@@ -1,354 +0,0 @@
-/* ******************************
- Modal
- Author: Jack Lukic
- Notes: First Commit May 14, 2012
-
- Manages modal state and
- stage dimming
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
- $.dimScreen = function(parameters) {
- var
- // if parameter is string it is callback function
- settings = (typeof parameters == 'function')
- ? $.extend({}, $.fn.modal.settings, { dim: parameters })
- : $.extend({}, $.fn.modal.settings, parameters),
-
- $context = $(settings.context),
- $dimmer = $context.children(settings.selector.dimmer),
- dimmerExists = ($dimmer.size() > 0),
- currentOpacity = $dimmer.css('opacity')
- ;
- if(!dimmerExists) {
- $dimmer = $('
')
- .attr('id','dimmer')
- .html('
')
- ;
- $context
- .append($dimmer)
- ;
- }
- if(currentOpacity != settings.opacity) {
- $dimmer
- .one('click', function() {
- settings.unDim();
- $.unDimScreen();
- })
- ;
- if(settings.duration === 0) {
- $dimmer
- .css({
- visibility : 'visible'
- })
- .find('.content')
- .css({
- opacity : settings.opacity,
- visibility : 'visible'
- })
- ;
- }
- else {
- $dimmer
- .css({
- visibility : 'visible'
- })
- .find('.content')
- .css({
- opacity : 0,
- visibility : 'visible'
- })
- .fadeTo(settings.duration, settings.opacity, settings.dim)
- ;
- }
- }
- return this;
- };
- $.unDimScreen = function(parameters) {
- var
- settings = (typeof parameters == 'function')
- ? $.extend({}, $.fn.modal.settings, { unDim: parameters })
- : $.extend({}, $.fn.modal.settings, parameters),
-
- $context = $(settings.context),
- $dimmer = $context.children(settings.selector.dimmer),
- dimmerExists = ($dimmer.size() > 0)
- ;
- if(dimmerExists) {
- // callback before unDim
- settings.unDim();
- if(settings.duration === 0) {
- $dimmer
- .css({
- visibility: 'hidden'
- })
- .remove()
- ;
- }
- else {
- $dimmer
- .find('.content')
- .fadeTo(settings.duration, 0, function(){
- $dimmer.remove();
- })
- ;
- }
- }
- return this;
- };
-
- $.fn.modal = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.modal.settings, parameters),
- // make arguments available
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
-
- $(this)
- .each(function() {
- var
- $modal = $(this),
-
- $closeButton = $modal.find(settings.selector.closeButton),
- $dimmer = $(settings.context).find(settings.selector.dimmer),
- $modals = $(settings.context).children(settings.selector.modal),
- $otherModals = $modals.not($modal),
-
- instance = $modal.data('module-' + settings.namespace),
- methodInvoked = (typeof query == 'string'),
-
- className = settings.className,
- namespace = settings.namespace,
-
- module
- ;
-
- module = {
-
- initialize: function() {
- // attach events
- $modal
- .on('modalShow.' + namespace, module.show)
- .on('modalHide.' + namespace, module.hide)
- .data('module-' + namespace, module)
- ;
- },
-
- show: function() {
- var
- modalHeight = $modal.outerHeight(),
- windowHeight = $(window).height(),
-
- cantFit = (modalHeight > windowHeight),
- modalType = (cantFit)
- ? 'absolute'
- : 'fixed',
- topCentering = (cantFit)
- ? '0'
- : '50%',
- offsetTop = (cantFit)
- ? (windowHeight / 8)
- : -( (modalHeight - settings.closeSpacing) / 2),
-
- finalPosition = ($modal.css('position') == 'absolute')
- ? offsetTop + $(window).prop('pageYOffset')
- : offsetTop,
- startPosition = finalPosition + settings.animationOffset
- ;
- // set top margin as offset
- if($.fn.popIn !== undefined) {
- $modal
- .addClass(modalType)
- .css({
- display : 'block',
- opacity : 0,
- top: topCentering,
- marginTop : finalPosition + 'px'
- })
- .popIn()
- ;
- }
- else {
- $modal
- .addClass(modalType)
- .css({
- display : 'block',
- opacity : 0,
- top: topCentering,
- marginTop : startPosition + 'px'
- })
- .animate({
- opacity : 1,
- marginTop : finalPosition + 'px'
- }, (settings.duration + 300), settings.easing)
- ;
- }
- if( $otherModals.is(':visible') ) {
- $otherModals
- .filter(':visible')
- .hide()
- ;
- }
- $.dimScreen({
- context : settings.context,
- duration : 0,
- dim : function() {
- $(document)
- .on('keyup.' + namespace, function(event) {
- var
- keyCode = event.which,
- escapeKey = 27
- ;
- switch(keyCode) {
- case escapeKey:
- $modal.trigger('modalHide');
- event.preventDefault();
- break;
- }
- })
- ;
- $closeButton
- .one('click', function() {
- $modal.trigger('modalHide');
- })
- ;
- settings.dim();
- },
- unDim: function() {
- $modal.trigger('modalHide');
- $closeButton.unbind('click');
- }
- });
- },
-
- hide: function() {
- // remove keyboard detection
- $(document)
- .off('keyup.' + namespace)
- ;
- $.unDimScreen({
- duration: 0,
- unDim: function() {
- $modal
- .popOut(200)
- ;
- settings.unDim();
- }
- });
- },
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
- };
-
- $.fn.modal.settings = {
-
- moduleName : 'Modal',
- debug : false,
- namespace : 'modal',
-
- errors: {
- method : 'The method you called is not defined'
- },
-
- dim : function(){},
- unDim : function(){},
- hide : function(){},
- show : function(){},
-
- context : 'body',
- opacity : 0.8,
-
- closeSpacing : 25,
- animationOffset : 15,
-
- duration : 400,
- easing : 'easeOutExpo',
-
- selector : {
- dimmer : '#dimmer',
- modal : '.modal',
- closeButton : '.close'
- }
- };
-
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/modules/nag.js b/node/src/files/components/semantic/packaged/modules/nag.js
deleted file mode 100644
index f3c0bc3a3..000000000
--- a/node/src/files/components/semantic/packaged/modules/nag.js
+++ /dev/null
@@ -1,350 +0,0 @@
-/* ******************************
- Nag
- Author: Jack Lukic
- Notes: First Commit July 19, 2012
-
- Simple fixed position nag
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.nag = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.nag.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $close = $module.find(settings.selector.close),
-
- $context = $(settings.context),
-
- instance = $module.data('module'),
- className = settings.className,
-
- 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() {
- // calculate module offset once
- moduleOffset = $module.offset();
- moduleHeight = $module.outerHeight();
- contextWidth = $context.outerWidth();
- contextHeight = $context.outerHeight();
- contextOffset = $context.offset();
-
- $module
- .data('module', module)
- ;
- $close
- .on('mouseenter mouseleave', module.event.hover)
- .on('click', module.dismiss)
- ;
- // lets avoid javascript if we dont need to reposition
- if(settings.context == window && settings.position == 'fixed') {
- $module
- .addClass(className.fixed)
- ;
- }
- if(settings.sticky) {
- // retrigger on scroll for absolute
- if(settings.position == 'absolute') {
- $context
- .on('scroll resize', module.event.scroll)
- ;
- }
- // fixed is always relative to window
- else {
- $(window)
- .on('scroll resize', module.event.scroll)
- ;
- }
- // fire once to position on init
- $.proxy(module.event.scroll, this)();
- }
- if(settings.followLink) {
- $module
- .on('mouseenter mouseleave', module.event.hover)
- .on('click', module.followLink)
- ;
- }
-
- if(settings.displayTime > 0) {
- setTimeout(module.hide, settings.displayTime);
- }
- if(module.should.show()) {
- if( !$module.is(':visible') ) {
- module.show();
- }
- }
- else {
- module.hide();
- }
- },
-
- refresh: function() {
- moduleOffset = $module.offset();
- moduleHeight = $module.outerHeight();
- contextWidth = $context.outerWidth();
- contextHeight = $context.outerHeight();
- contextOffset = $context.offset();
- },
-
- show: function() {
- if($.fn.popIn !== undefined) {
- $module
- .popIn(settings.duration)
- ;
- }
- else {
- $module
- .fadeIn(settings.duration, settings.easing)
- ;
- }
- },
- hide: function() {
- $module
- .fadeOut(settings.duration, settings.easing)
- ;
- },
-
- stick: function() {
- module.refresh();
-
- if(settings.position == 'fixed') {
- var
- windowScroll = $(window).prop('pageYOffset') || $(window).scrollTop(),
- fixedOffset = ( $module.hasClass(className.bottom) )
- ? contextOffset.top + (contextHeight - moduleHeight) - windowScroll
- : contextOffset.top - windowScroll
- ;
- $module
- .css({
- position : 'fixed',
- top : fixedOffset,
- left : contextOffset.left,
- width : contextWidth - settings.scrollBarWidth
- })
- ;
- }
- else {
- $module
- .css({
- top : yPosition
- })
- ;
- }
- },
- unStick: function() {
- $module
- .css({
- top : ''
- })
- ;
- },
- dismiss: function() {
- if(settings.storageMethod) {
- module.storage.set(settings.storedKey, settings.storedValue);
- }
- module.hide();
- },
-
- should: {
- show: function() {
- if( module.storage.get(settings.storedKey) == settings.storedValue) {
- return false;
- }
- return true;
- },
- stick: function() {
- yOffset = $context.prop('pageYOffset') || $context.scrollTop();
- yPosition = ( $module.hasClass(className.bottom) )
- ? (contextHeight - $module.outerHeight() ) + yOffset
- : yOffset
- ;
- // absolute position calculated when y offset met
- if(yPosition > moduleOffset.top) {
- return true;
- }
- else if(settings.position == 'fixed') {
- return true;
- }
- return false;
- }
- },
-
- followLink: function() {
- if($.fn.followLink !== undefined) {
- $module
- .followLink()
- ;
- }
- },
-
- storage: {
-
- set: function(key, value) {
- if(settings.storageMethod == 'local' && store !== undefined) {
- store.set(key, value);
- }
- // store by cookie
- else if($.cookie !== undefined) {
- $.cookie(key, value);
- }
- else {
- module.error(settings.errors.noStorage);
- }
- },
- get: function(key) {
- if(settings.storageMethod == 'local' && store !== undefined) {
- return store.get(key);
- }
- // get by cookie
- else if($.cookie !== undefined) {
- return $.cookie(key);
- }
- else {
- module.error(settings.errors.noStorage);
- }
- }
-
- },
-
- event: {
- hover: function() {
- $(this)
- .toggleClass(className.hover)
- ;
- },
- scroll: function() {
- if(timer !== undefined) {
- clearTimeout(timer);
- }
- timer = setTimeout(function() {
- if(module.should.stick() ) {
- requestAnimationFrame(module.stick);
- }
- else {
- module.unStick();
- }
- }, settings.lag);
- }
- },
-
- error: function(error) {
- console.log('Nag Module:' + error);
- },
-
- // allows for dot notation method calls
- 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.errors.method);
- return false;
- });
- }
- if ( $.isFunction( method ) ) {
- return method.apply(context, methodArguments);
- }
- // return retrieved variable or chain
- return method;
- }
-
- };
-
- if(instance !== undefined && moduleArguments) {
- if(moduleArguments[0] == 'invoke') {
- moduleArguments = Array.prototype.slice.call( moduleArguments, 1 );
- }
- return module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
- }
- module.initialize();
-
- })
- ;
- return this;
- };
-
- $.fn.nag.settings = {
-
- // set to zero to manually dismiss, otherwise hides on its own
- displayTime : 0,
-
- // if there is a link to follow
- followLink : true,
-
- // method of stickyness
- position : 'fixed',
- scrollBarWidth : 18,
-
- // type of storage to use
- storageMethod : 'cookie',
-
- // value to store in dismissed localstorage/cookie
- storedKey : 'nag',
- storedValue : 'dismiss',
-
- // need to calculate stickyness on scroll
- sticky : true,
-
- // how often to check scroll event
- lag : 0,
-
- // context for scroll event
- context : window,
-
- errors: {
- noStorage : 'Neither $.cookie or store is defined. A storage solution is required for storing state',
- followLink : 'Follow link is set but the plugin is not included'
- },
-
- className : {
- bottom : 'bottom',
- hover : 'hover',
- fixed : 'fixed'
- },
-
- selector : {
- close: '.icon.close'
- },
-
- speed : 500,
- easing : 'easeOutQuad'
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/popup.js b/node/src/files/components/semantic/packaged/modules/popup.js
deleted file mode 100644
index 9fa717cfd..000000000
--- a/node/src/files/components/semantic/packaged/modules/popup.js
+++ /dev/null
@@ -1,590 +0,0 @@
-/* ******************************
- Tooltip / Popup
- Author: Jack Lukic
- Notes: First Commit Sep 07, 2012
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.popup = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.popup.settings, parameters),
- // make arguments available
- moduleArguments = arguments || false,
- invokedResponse
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $window = $(window),
- $offsetParent = $module.offsetParent(),
- $popup = (settings.inline)
- ? $module.next(settings.selector.popup)
- : $window.children(settings.selector.popup).last(),
-
- timer,
- recursionDepth = 0,
-
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (instance !== undefined && typeof parameters == 'string'),
-
- selector = settings.selector,
- className = settings.className,
- errors = settings.errors,
- metadata = settings.metadata,
- namespace = settings.namespace,
- module
- ;
-
- module = {
-
- // binds events
- initialize: function() {
- if(settings.event == 'hover') {
- $module
- .on('mouseenter.' + namespace, module.event.mouseenter)
- .on('mouseleave.' + namespace, module.event.mouseleave)
- ;
- }
- else {
- $module
- .on(settings.event + '.' + namespace, module.event[settings.event])
- ;
- }
- $window
- .on('resize.' + namespace, module.event.resize)
- ;
- $module
- .data('module-' + namespace, module)
- ;
- },
-
- refresh: function() {
- $popup = (settings.inline)
- ? $module.next(selector.popup)
- : $window.children(selector.popup).last()
- ;
- $offsetParent = $module.offsetParent();
- },
-
- destroy: function() {
- module.debug('Destroying existing popups');
- $module
- .off('.' + namespace)
- ;
- $popup
- .remove()
- ;
- },
-
- event: {
- mouseenter: function(event) {
- var element = this;
- timer = setTimeout(function() {
- $.proxy(module.toggle, element)();
- if( $(element).hasClass(className.visible) ) {
- event.stopPropagation();
- }
- }, settings.delay);
- },
- mouseleave: function(event) {
- clearTimeout(timer);
- if( $module.is(':visible') ) {
- module.hide();
- }
- },
- click: function(event) {
- $.proxy(module.toggle, this)();
- if( $(this).hasClass(className.visible) ) {
- event.stopPropagation();
- }
- },
- resize: function() {
- if( $popup.is(':visible') ) {
- module.position();
- }
- }
- },
-
- // generates popup html from metadata
- create: function() {
- module.debug('Creating pop-up content');
- var
- html = $module.data(metadata.html) || settings.html,
- title = $module.data(metadata.title) || settings.title,
- content = $module.data(metadata.content) || $module.attr('title') || settings.content
- ;
- if(html || content || title) {
- if(!html) {
- html = settings.template({
- title : title,
- content : content
- });
- }
- $popup = $('
')
- .addClass(className.popup)
- .html(html)
- ;
- if(settings.inline) {
- $popup
- .insertAfter($module)
- ;
- }
- else {
- $popup
- .appendTo( $('body') )
- ;
- }
- }
- else {
- module.error(errors.content);
- }
- },
-
- remove: function() {
- $popup
- .remove()
- ;
- },
-
- get: {
- offstagePosition: function() {
- var
- boundary = {
- top : $(window).scrollTop(),
- bottom : $(window).scrollTop() + $(window).height(),
- left : 0,
- right : $(window).width()
- },
- popup = {
- width : $popup.outerWidth(),
- height : $popup.outerHeight(),
- position : $popup.offset()
- },
- offstage = {},
- offstagePositions = []
- ;
- if(popup.position) {
- offstage = {
- top : (popup.position.top < boundary.top),
- bottom : (popup.position.top + popup.height > boundary.bottom),
- right : (popup.position.left + popup.width > boundary.right),
- left : (popup.position.left < boundary.left)
- };
- }
- // return only boundaries that have been surpassed
- $.each(offstage, function(direction, isOffstage) {
- if(isOffstage) {
- offstagePositions.push(direction);
- }
- });
- return (offstagePositions.length > 0)
- ? offstagePositions.join(' ')
- : false
- ;
- },
- nextPosition: function(position) {
- switch(position) {
- case 'top left':
- position = 'bottom left';
- break;
- case 'bottom left':
- position = 'top right';
- break;
- case 'top right':
- position = 'bottom right';
- break;
- case 'bottom right':
- position = 'top center';
- break;
- case 'top center':
- position = 'bottom center';
- break;
- case 'bottom center':
- position = 'right center';
- break;
- case 'right center':
- position = 'left center';
- break;
- case 'left center':
- position = 'top center';
- break;
- }
- return position;
- }
- },
-
- // determines popup state
- toggle: function() {
- $module = $(this);
- module.debug('Toggling pop-up');
- // refresh state of module
- module.refresh();
- if($popup.size() === 0) {
- module.create();
- }
- if( !$module.hasClass(className.visible) ) {
- if( module.position() ) {
- module.show();
- }
- }
- else {
- module.hide();
- }
- },
-
- position: function(position, arrowOffset) {
- var
- windowWidth = $(window).width(),
- windowHeight = $(window).height(),
- width = $module.outerWidth(),
- height = $module.outerHeight(),
- popupWidth = $popup.outerWidth(),
- popupHeight = $popup.outerHeight(),
-
- offset = (settings.inline)
- ? $module.position()
- : $module.offset(),
- parentWidth = (settings.inline)
- ? $offsetParent.outerWidth()
- : $window.outerWidth(),
- parentHeight = (settings.inline)
- ? $offsetParent.outerHeight()
- : $window.outerHeight(),
-
- positioning,
- offstagePosition
- ;
- position = position || $module.data(metadata.position) || settings.position;
- arrowOffset = arrowOffset || $module.data(metadata.arrowOffset) || settings.arrowOffset;
- module.debug('Calculating offset for position', position);
- switch(position) {
- case 'top left':
- positioning = {
- top : 'auto',
- bottom : parentHeight - offset.top + settings.distanceAway,
- left : offset.left + arrowOffset
- };
- break;
- case 'top center':
- positioning = {
- bottom : parentHeight - offset.top + settings.distanceAway,
- left : offset.left + (width / 2) - (popupWidth / 2) + arrowOffset,
- top : 'auto',
- right : 'auto'
- };
- break;
- case 'top right':
- positioning = {
- bottom : parentHeight - offset.top + settings.distanceAway,
- right : parentWidth - offset.left - width - arrowOffset,
- top : 'auto',
- left : 'auto'
- };
- break;
- case 'left center':
- positioning = {
- top : offset.top + (height / 2) - (popupHeight / 2),
- right : parentWidth - offset.left + settings.distanceAway - arrowOffset,
- left : 'auto',
- bottom : 'auto'
- };
- break;
- case 'right center':
- positioning = {
- top : offset.top + (height / 2) - (popupHeight / 2),
- left : offset.left + width + settings.distanceAway + arrowOffset,
- bottom : 'auto',
- right : 'auto'
- };
- break;
- case 'bottom left':
- positioning = {
- top : offset.top + height + settings.distanceAway,
- left : offset.left + arrowOffset,
- bottom : 'auto',
- right : 'auto'
- };
- break;
- case 'bottom center':
- positioning = {
- top : offset.top + height + settings.distanceAway,
- left : offset.left + (width / 2) - (popupWidth / 2) + arrowOffset,
- bottom : 'auto',
- right : 'auto'
- };
- break;
- case 'bottom right':
- positioning = {
- top : offset.top + height + settings.distanceAway,
- right : parentWidth - offset.left - width - arrowOffset,
- left : 'auto',
- bottom : 'auto'
- };
- break;
- }
- // true width on popup, avoid rounding error
- $.extend(positioning, {
- width: $popup.width() + 1
- });
- // tentatively place on stage
- $popup
- .removeAttr('style')
- .removeClass('top right bottom left center')
- .css(positioning)
- .addClass(position)
- .addClass(className.loading)
- ;
- // check if is offstage
- offstagePosition = module.get.offstagePosition();
- // recursively find new positioning
- if(offstagePosition) {
- module.debug('Element is outside boundaries ', offstagePosition);
- if(recursionDepth < settings.maxRecursion) {
- position = module.get.nextPosition(position);
- recursionDepth++;
- module.debug('Trying new position: ', position);
- return module.position(position);
- }
- else {
- module.error(errors.recursion);
- recursionDepth = 0;
- return false;
- }
- }
- else {
- module.debug('Position is on stage', position);
- recursionDepth = 0;
- return true;
- }
- },
-
- show: function() {
- module.debug('Showing pop-up');
- $(selector.popup)
- .filter(':visible')
- .stop()
- .fadeOut(200)
- .prev($module)
- .removeClass(className.visible)
- ;
- $module
- .addClass(className.visible)
- ;
- $popup
- .removeClass(className.loading)
- ;
- if(settings.animation == 'pop' && $.fn.popIn !== undefined) {
- $popup
- .stop()
- .popIn(settings.duration, settings.easing)
- ;
- }
- else {
- $popup
- .stop()
- .fadeIn(settings.duration, settings.easing)
- ;
- }
- if(settings.event == 'click' && settings.clicktoClose) {
- module.debug('Binding popup close event');
- $(document)
- .on('click.' + namespace, module.gracefully.hide)
- ;
- }
- $.proxy(settings.onShow, $popup)();
- },
-
- hide: function() {
- $module
- .removeClass(className.visible)
- ;
- if($popup.is(':visible') ) {
- module.debug('Hiding pop-up');
- if(settings.animation == 'pop' && $.fn.popOut !== undefined) {
- $popup
- .stop()
- .popOut(settings.duration, settings.easing, function() {
- $popup.hide();
- })
- ;
- }
- else {
- $popup
- .stop()
- .fadeOut(settings.duration, settings.easing)
- ;
- }
- }
- if(settings.event == 'click' && settings.clicktoClose) {
- $(document)
- .off('click.' + namespace)
- ;
- }
- $.proxy(settings.onHide, $popup)();
- if(!settings.inline) {
- module.remove();
- }
- },
-
- gracefully: {
- hide: function(event) {
- // don't close on clicks inside popup
- if( $(event.target).closest(selector.popup).size() === 0) {
- module.hide();
- }
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
-
- };
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
- }
- // otherwise initialize
- else {
- if(instance) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
- };
-
- $.fn.popup.settings = {
-
- moduleName : 'Pop-up Module',
- debug : true,
- namespace : 'popup',
-
- onShow : function(){},
- onHide : function(){},
-
- content : false,
- html : false,
- title : false,
-
- position : 'top center',
- delay : 0,
- inline : true,
-
- duration : 250,
- easing : 'easeOutQuint',
- animation : 'pop',
-
- errors: {
- content : 'Warning: Your popup has no content specified',
- method : 'The method you called is not defined.',
- recursion : 'Popup attempted to reposition element to fit, but could not find an adequate position.'
- },
-
- distanceAway : 2,
- arrowOffset : 0,
-
- maxRecursion : 10,
-
- event : 'hover',
- clicktoClose : true,
-
- metadata: {
- content : 'content',
- html : 'html',
- title : 'title',
- position : 'position',
- arrowOffset : 'arrowOffset'
- },
-
- className : {
- popup : 'ui popup',
- visible : 'visible',
- loading : 'loading'
- },
-
- selector : {
- popup : '.ui.popup'
- },
-
- template: function(text) {
- var html = '';
- if(typeof text !== undefined) {
- if(typeof text.title !== undefined && text.title) {
- html += '
' + text.title + '
';
- }
- if(typeof text.content !== undefined && text.content) {
- html += '
' + text.content + '
';
- }
- }
- return html;
- }
-
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/modules/search.js b/node/src/files/components/semantic/packaged/modules/search.js
deleted file mode 100644
index 63e1da670..000000000
--- a/node/src/files/components/semantic/packaged/modules/search.js
+++ /dev/null
@@ -1,670 +0,0 @@
-/* ******************************
- Search Prompt
- Author: Jack Lukic
- Notes: First Commit July 19, 2012
-
- Designed to be used as an autocomplete
- or to deliver quick inline search results
-****************************** */
-
-;(function ($, window, document, undefined) {
-
-$.fn.searchPrompt = function(source, parameters) {
- var
- settings = $.extend(true, {}, $.fn.searchPrompt.settings, parameters),
- // make arguments available
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $searchPrompt = $module.find(settings.selector.searchPrompt),
- $searchButton = $module.find(settings.selector.searchButton),
- $searchResults = $module.find(settings.selector.searchResults),
- $result = $module.find(settings.selector.result),
- $category = $module.find(settings.selector.category),
- $emptyResult = $module.find(settings.selector.emptyResult),
- $resultPage = $module.find(settings.selector.resultPage),
-
- element = this,
- selector = $module.selector || '',
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (instance !== undefined && typeof query == 'string'),
-
- className = settings.className,
- namespace = settings.namespace,
- errors = settings.errors,
- module
- ;
- module = {
-
- initialize: function() {
- var
- searchPrompt = $searchPrompt[0],
- inputEvent = (searchPrompt.oninput !== undefined)
- ? 'input'
- : (searchPrompt.onpropertychange !== undefined)
- ? 'propertychange'
- : 'keyup'
- ;
- // attach events
- $searchPrompt
- .on('focus.' + namespace, module.event.focus)
- .on('blur.' + namespace, module.event.blur)
- .on('keydown.' + namespace, module.handleKeyboard)
- ;
- if(settings.automatic) {
- $searchPrompt
- .on(inputEvent + '.' + namespace, module.search.throttle)
- ;
- }
- $searchButton
- .on('click.' + namespace, module.search.query)
- ;
- $searchResults
- .on('click.' + namespace, settings.selector.result, module.results.select)
- ;
- $module
- .data('module-' + namespace, module)
- ;
- },
- event: {
- focus: function() {
- $module
- .addClass(className.focus)
- ;
- module.results.show();
- },
- blur: function() {
- module.search.cancel();
- $module
- .removeClass(className.focus)
- ;
- module.results.hide();
- }
- },
- handleKeyboard: function(event) {
- var
- // force latest jq dom
- $result = $module.find(settings.selector.result),
- $category = $module.find(settings.selector.category),
- keyCode = event.which,
- keys = {
- backspace : 8,
- enter : 13,
- escape : 27,
- upArrow : 38,
- downArrow : 40
- },
- activeClass = className.active,
- currentIndex = $result.index( $result.filter('.' + activeClass) ),
- resultSize = $result.size(),
- newIndex
- ;
- // search shortcuts
- if(keyCode == keys.escape) {
- $searchPrompt
- .trigger('blur')
- ;
- }
- // result shortcuts
- if($searchResults.filter(':visible').size() > 0) {
- if(keyCode == keys.enter) {
- if( $result.filter('.' + activeClass).exists() ) {
- $.proxy(module.results.select, $result.filter('.' + activeClass) )();
- event.preventDefault();
- return false;
- }
- }
- else if(keyCode == keys.upArrow) {
- newIndex = (currentIndex - 1 < 0)
- ? currentIndex
- : currentIndex - 1
- ;
- $category
- .removeClass(activeClass)
- ;
- $result
- .removeClass(activeClass)
- .eq(newIndex)
- .addClass(activeClass)
- .closest($category)
- .addClass(activeClass)
- ;
- event.preventDefault();
- }
- else if(keyCode == keys.downArrow) {
- newIndex = (currentIndex + 1 >= resultSize)
- ? currentIndex
- : currentIndex + 1
- ;
- $category
- .removeClass(activeClass)
- ;
- $result
- .removeClass(activeClass)
- .eq(newIndex)
- .addClass(activeClass)
- .closest($category)
- .addClass(activeClass)
- ;
- event.preventDefault();
- }
- }
- else {
- // query shortcuts
- if(keyCode == keys.enter) {
- module.search.query();
- $searchButton
- .addClass(className.down)
- ;
- $searchPrompt
- .one('keyup', function(){
- $searchButton
- .removeClass(className.down)
- ;
- })
- ;
- }
- }
- },
- search: {
- cancel: function() {
- var
- xhr = $module.data('xhr') || false
- ;
- if( xhr && xhr.state() != 'resolved') {
- xhr.abort();
- }
- },
- throttle: function(event) {
- var
- searchTerm = $searchPrompt.val(),
- numCharacters = searchTerm.length,
- timer
- ;
- clearTimeout($module.data('timer'));
- if(numCharacters >= settings.minCharacters) {
- timer = setTimeout(module.search.query, settings.searchThrottle);
- $module
- .data('timer', timer)
- ;
- }
- else {
- module.results.hide();
- }
- },
- query: function() {
- var
- searchTerm = $searchPrompt.val(),
- cachedHTML = module.search.cache.read(searchTerm)
- ;
- if(cachedHTML) {
- module.debug("Reading result for '" + searchTerm + "' from cache");
- module.results.add(cachedHTML);
- }
- else {
- module.debug("Querying for '" + searchTerm + "'");
- if(typeof source == 'object') {
- module.search.local(searchTerm);
- }
- else {
- module.search.remote(searchTerm);
- }
- $.proxy(settings.onSearchQuery, $module)(searchTerm);
- }
- },
- local: function(searchTerm) {
- var
- searchResults = [],
- fullTextResults = [],
- searchFields = $.isArray(settings.searchFields)
- ? settings.searchFields
- : [settings.searchFields],
-
- searchRegExp = new RegExp('(?:\s|^)' + searchTerm, 'i'),
- fullTextRegExp = new RegExp(searchTerm, 'i'),
- searchHTML
- ;
- $module
- .addClass(className.loading)
- ;
- // iterate through search fields in array order
- $.each(searchFields, function(index, field) {
- $.each(source, function(label, thing) {
- if(typeof thing[field] == 'string' && ($.inArray(thing, searchResults) == -1) && ($.inArray(thing, fullTextResults) == -1) ) {
- if( searchRegExp.test( thing[field] ) ) {
- searchResults.push(thing);
- }
- else if( fullTextRegExp.test( thing[field] ) ) {
- fullTextResults.push(thing);
- }
- }
- });
- });
- searchHTML = module.results.generate({
- results: $.merge(searchResults, fullTextResults)
- });
- $module
- .removeClass(className.loading)
- ;
- module.search.cache.write(searchTerm, searchHTML);
- module.results.add(searchHTML);
- },
- remote: function(searchTerm) {
- var
- xhr = ($module.data('xhr') !== undefined)
- ? $module.data('xhr')
- : false,
- apiSettings = {
- stateContext : $module,
- url : source,
- urlData: { query: searchTerm },
- success : function(response) {
- searchHTML = module.results.generate(response);
- module.search.cache.write(searchTerm, searchHTML);
- module.results.add(searchHTML);
- },
- failure : module.error
- },
- searchHTML
- ;
- // api attaches xhr event to context, use this to prevent overlapping queries
- if( xhr && xhr.state() != 'resolved') {
- xhr.abort();
- }
- $.extend(true, apiSettings, settings.apiSettings);
- $.api(apiSettings);
- },
-
- cache: {
- read: function(name) {
- var
- cache = $module.data('cache')
- ;
- return (settings.cache && (typeof cache == 'object') && (cache[name] !== undefined) )
- ? cache[name]
- : false
- ;
- },
- write: function(name, value) {
- var
- cache = ($module.data('cache') !== undefined)
- ? $module.data('cache')
- : {}
- ;
- cache[name] = value;
- $module
- .data('cache', cache)
- ;
- }
- }
- },
-
- results: {
- generate: function(response) {
- module.debug('Generating html from response', response);
- var
- template = settings.templates[settings.type],
- html = ''
- ;
- if(($.isPlainObject(response.results) && !$.isEmptyObject(response.results)) || ($.isArray(response.results) && response.results.length > 0) ) {
- if(settings.maxResults > 0) {
- response.results = $.makeArray(response.results).slice(0, settings.maxResults);
- }
- if(response.results.length > 0) {
- if($.isFunction(template)) {
- html = template(response);
- }
- else {
- module.error(errors.noTemplate, false);
- }
- }
- }
- else {
- html = module.message(errors.noResults, 'empty');
- }
- $.proxy(settings.onSearchResults, $module)(response);
- return html;
- },
- add: function(html) {
- if(settings.onResultsAdd == 'default' || $.proxy(settings.onResultsAdd, $searchResults)(html) == 'default') {
- $searchResults
- .html(html)
- ;
- }
- module.results.show();
- },
- show: function() {
- if( ($searchResults.filter(':visible').size() === 0) && ($searchPrompt.filter(':focus').size() > 0) && $searchResults.html() !== '') {
- $searchResults
- .stop()
- .fadeIn(200)
- ;
- $.proxy(settings.onResultsOpen, $searchResults)();
- }
- },
- hide: function() {
- if($searchResults.filter(':visible').size() > 0) {
- $searchResults
- .stop()
- .fadeOut(200)
- ;
- $.proxy(settings.onResultsClose, $searchResults)();
- }
- },
- followLink: function() {
-
- },
- select: function(event) {
- module.debug('Search result selected');
- var
- $result = $(this),
- $title = $result.find('.title'),
- title = $title.html()
- ;
- if(settings.onSelect == 'default' || $.proxy(settings.onSelect, this)(event) == 'default') {
- var
- $link = $result.find('a[href]').eq(0),
- href = $link.attr('href'),
- target = $link.attr('target')
- ;
- try {
- module.results.hide();
- $searchPrompt
- .val(title)
- ;
- if(target == '_blank' || event.ctrlKey) {
- window.open(href);
- }
- else {
- window.location.href = (href);
- }
- }
- catch(error) {}
- }
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- // displays mesage visibly in search results
- message: function(text, type) {
- type = type || 'standard';
- module.results.add( settings.templates.message(text, type) );
- return settings.templates.message(text, type);
- },
- // update view with error message
- error: function(errorMessage, escalate) {
- // show user error message
- escalate = (escalate !== undefined)
- ? escalate
- : true
- ;
- console.warn(settings.moduleName + ': ' + errorMessage);
- if(escalate && errorMessage !== undefined) {
- module.message(errorMessage, 'error');
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, element, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-};
-
- $.fn.searchPrompt.settings = {
-
- moduleName : 'Search Module',
- debug : true,
- namespace : 'search',
-
- // onSelect default action is defined in module
- onSelect : 'default',
- onResultsAdd : 'default',
-
- onSearchQuery : function(){},
- onSearchResults : function(response){},
-
- onResultsOpen : function(){},
- onResultsClose : function(){},
-
- automatic : 'true',
- type : 'simple',
- minCharacters : 3,
- searchThrottle : 300,
- maxResults : 7,
- cache : true,
-
- searchFields : ['title', 'description'],
-
- // api config
- apiSettings: {
-
- },
-
- className: {
- active : 'active',
- down : 'down',
- focus : 'focus',
- empty : 'empty',
- loading : 'loading'
- },
-
- errors : {
- noResults : 'Your search returned no results',
- logging : 'Error in debug logging, exiting.',
- noTemplate : 'A valid template name was not specified.',
- serverError : 'There was an issue with querying the server.',
- method : 'The method you called is not defined.'
- },
-
- selector : {
- searchPrompt : '.prompt',
- searchButton : '.search.button',
- searchResults : '.results',
-
- category : '.category',
- result : '.result',
-
- emptyResult : '.results .message',
- resultPage : '.results .page'
- },
-
- templates: {
- message: function(message, type) {
- var
- html = ''
- ;
- if(message !== undefined && type !== undefined) {
- html += ''
- + '
'
- + '
'
- ;
- // message type
- if(type == 'empty') {
- html += ''
- + '
No Results
'
- + '
' + message + '
'
- ;
- }
- else {
- html += '
' + message + '
';
- }
- html += '
';
- }
- return html;
- },
- categories: function(response) {
- var
- html = ''
- ;
- if(response.results !== undefined) {
- // each category
- $.each(response.results, function(index, category) {
- if(category.results !== undefined && category.results.length > 0) {
- html += ''
- + '
'
- + '
' + category.name + '
'
- + '
'
- ;
- // each item inside category
- $.each(category.results, function(index, result) {
- html += '- ';
- html += '';
- if(result.image !== undefined) {
- html+= ''
- + '
'
- + '
'
- + '
'
- ;
- }
- html += (result.image !== undefined)
- ? ''
- : '
'
- ;
- if(result.price !== undefined) {
- html+= '
' + result.price + '
';
- }
- if(result.title !== undefined) {
- html+= '
' + result.title + '
';
- }
- if(result.description !== undefined) {
- html+= '
' + result.description + '
';
- }
- html += ''
- + '
'
- + ''
- ;
- });
- html += ''
- + ''
- + '
'
- ;
- }
- });
- if(response.resultPage) {
- html += ''
- + ''
- + response.resultPage.text
- + '';
- }
- return html;
- }
- return false;
- },
- simple: function(response) {
- var
- html = ''
- ;
- if(response.results !== undefined) {
- html += '';
- // each result
- $.each(response.results, function(index, result) {
- html += '- ';
-
- if(result.url !== undefined) {
- html += '';
- }
- if(result.image !== undefined) {
- html+= ''
- + '
'
- + '
'
- + '
'
- ;
- }
- html += (result.image !== undefined)
- ? ''
- : '
'
- ;
- if(result.price !== undefined) {
- html+= '
' + result.price + '
';
- }
- if(result.title !== undefined) {
- html+= '
' + result.title + '
';
- }
- if(result.description !== undefined) {
- html+= '
' + result.description + '
';
- }
- html += ''
- + '
'
- + ''
- ;
- });
- html += '';
-
- if(response.resultPage) {
- html += ''
- + '
'
- + response.resultPage.text
- + '';
- }
- return html;
- }
- return false;
- }
- }
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/modules/shape.js b/node/src/files/components/semantic/packaged/modules/shape.js
deleted file mode 100644
index 0dc0b6913..000000000
--- a/node/src/files/components/semantic/packaged/modules/shape.js
+++ /dev/null
@@ -1,640 +0,0 @@
-/* *******************************************************************************************
-
- Shape - A 3D Animation Plugin
- Version 0.1
- (built using Semantic module spec)
-
- Author : Jack Lukic
- Last revision : April 2013
-
-********************************************************************************************* */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.shape = function(parameters) {
- var
- $allModules = $(this),
-
- settings = $.extend(true, {}, $.fn.shape.settings, parameters),
-
- // define namespaces for modules
- eventNamespace = '.' + settings.namespace,
- moduleNamespace = 'module-' + settings.namespace,
-
- // allow methods to be queried directly
- query = arguments[0],
- queryArguments = [].slice.call(arguments, 1),
- methodInvoked = (typeof query == 'string'),
- invokedResponse
- ;
-
- $allModules
- .each(function() {
- var
- // selector cache
- $module = $(this),
- $shape = $module.find(settings.selector.shape),
- $side = $module.find(settings.selector.side),
-
- // private variables
- $activeSide,
- $nextSide,
- endTransition = 'transitionend msTransitionEnd oTransitionEnd',
-
- // standard module
- selector = $module.selector || '',
- element = this,
- instance = $module.data(moduleNamespace),
-
- // internal aliases
- namespace = settings.namespace,
- error = settings.error,
- className = settings.className,
-
- module
- ;
-
- module = {
-
- initialize: function() {
- module.verbose('Initializing module for', element);
- module.set.defaultSide();
- 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);
- $shape = $(this).find(settings.selector.shape);
- $side = $(this).find(settings.selector.side);
- },
-
- repaint: function() {
- module.verbose('Forcing repaint event');
- var
- shape = $shape.get(0) || document.createElement('div'),
- fakeAssignment = shape.offsetWidth
- ;
- },
-
- animate: function(propertyObject, callback) {
- module.verbose('Animating box with properties', propertyObject);
- callback = callback || function(event) {
- module.reset();
- module.set.active();
- $.proxy(settings.onChange, $nextSide)();
- event.stopImmediatePropagation();
- };
- if(settings.useCSS) {
- module.verbose('Starting CSS animation');
- $module
- .addClass(className.animating)
- ;
- module.set.stageSize();
- module.repaint();
- $module
- .addClass(className.css)
- ;
- $activeSide
- .addClass(className.hidden)
- ;
- $shape
- .css(propertyObject)
- .one(endTransition, callback)
- ;
- }
- else {
- // not yet supported until .animate() is extended to allow RotateX/Y
- module.verbose('Starting javascript animation');
- $module
- .addClass(className.animating)
- .removeClass(className.css)
- ;
- module.set.stageSize();
- module.repaint();
- $activeSide
- .animate({
- opacity: 0
- }, settings.duration, settings.easing)
- ;
- $shape
- .animate(propertyObject, settings.duration, settings.easing, callback)
- ;
- }
- },
-
- queue: function(method) {
- module.debug('Queueing animation of', method);
- $shape
- .one(endTransition, function() {
- module.debug('Executing queued animation');
- $module.shape(method);
- })
- ;
- },
-
- reset: function() {
- module.verbose('Animating states reset');
- $module
- .removeClass(className.css)
- .removeClass(className.animating)
- .removeAttr('style')
- ;
- $shape
- .removeAttr('style')
- ;
- $side
- .removeAttr('style')
- .removeClass(className.hidden)
- ;
- $nextSide
- .removeClass(className.animating)
- .removeAttr('style')
- ;
- },
-
- is: {
-
- animating: function() {
- return $module.hasClass(className.animating);
- }
-
- },
-
- get: {
-
- nextSide: function() {
- return ( $activeSide.next(settings.selector.side).size() > 0 )
- ? $activeSide.next(settings.selector.side)
- : $module.find(settings.selector.side).first()
- ;
- }
-
- },
-
- set: {
-
- defaultSide: function() {
- $activeSide = $module.find('.' + settings.className.active);
- $nextSide = ( $activeSide.next(settings.selector.side).size() > 0 )
- ? $activeSide.next(settings.selector.side)
- : $module.find(settings.selector.side).first()
- ;
- module.verbose('Active side set to', $activeSide);
- module.verbose('Next side set to', $nextSide);
- },
-
- stageSize: function() {
- var
- stage = {
- width : $nextSide.outerWidth(),
- height : $nextSide.outerHeight()
- }
- ;
- module.verbose('Resizing stage to fit new content', stage);
- $module
- .css({
- width : stage.width,
- height : stage.height
- })
- ;
- },
-
- nextSide: function(selector) {
- $nextSide = $module.find(selector);
- if($nextSide.size() === 0) {
- 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)
- ;
- module.set.defaultSide();
- }
- },
-
- flip: {
-
- up: function() {
- module.debug('Flipping up', $nextSide);
- if( !module.is.animating() ) {
- module.stage.above();
- module.animate( module.getTransform.up() );
- }
- else {
- module.queue('flip.up');
- }
- },
-
- down: function() {
- module.debug('Flipping down', $nextSide);
- if( !module.is.animating() ) {
- module.stage.below();
- module.animate( module.getTransform.down() );
- }
- else {
- module.queue('flip.down');
- }
- },
-
- left: function() {
- module.debug('Flipping left', $nextSide);
- if( !module.is.animating() ) {
- module.stage.left();
- module.animate(module.getTransform.left() );
- }
- else {
- module.queue('flip.left');
- }
- },
-
- right: function() {
- module.debug('Flipping right', $nextSide);
- if( !module.is.animating() ) {
- module.stage.right();
- module.animate(module.getTransform.right() );
- }
- else {
- module.queue('flip.right');
- }
- },
-
- over: function() {
- module.debug('Flipping over', $nextSide);
- if( !module.is.animating() ) {
- module.stage.behind();
- module.animate(module.getTransform.behind() );
- }
- else {
- module.queue('flip.over');
- }
- }
-
- },
-
- getTransform: {
-
- up: function() {
- var
- translate = {
- y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- z: -($activeSide.outerHeight() / 2)
- }
- ;
- return {
- transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'
- };
- },
-
- down: function() {
- var
- translate = {
- y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- z: -($activeSide.outerHeight() / 2)
- }
- ;
- return {
- transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'
- };
- },
-
- left: function() {
- var
- translate = {
- x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2),
- z : -($activeSide.outerWidth() / 2)
- }
- ;
- return {
- transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'
- };
- },
-
- right: function() {
- var
- translate = {
- x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2),
- z : -($activeSide.outerWidth() / 2)
- }
- ;
- return {
- transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'
- };
- },
-
- behind: function() {
- var
- translate = {
- x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2)
- }
- ;
- return {
- transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'
- };
- }
-
- },
-
- stage: {
-
- above: function() {
- var
- box = {
- origin : (($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- depth : {
- active : ($nextSide.outerHeight() / 2),
- next : ($activeSide.outerHeight() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as above', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'top' : box.origin + 'px',
- 'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- below: function() {
- var
- box = {
- origin : (($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- depth : {
- active : ($nextSide.outerHeight() / 2),
- next : ($activeSide.outerHeight() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as below', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'top' : box.origin + 'px',
- 'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- left: function() {
- var
- box = {
- origin : ( ( $activeSide.outerWidth() - $nextSide.outerWidth() ) / 2),
- depth : {
- active : ($nextSide.outerWidth() / 2),
- next : ($activeSide.outerWidth() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as left', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'left' : box.origin + 'px',
- 'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- right: function() {
- var
- box = {
- origin : ( ( $activeSide.outerWidth() - $nextSide.outerWidth() ) / 2),
- depth : {
- active : ($nextSide.outerWidth() / 2),
- next : ($activeSide.outerWidth() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as left', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'left' : box.origin + 'px',
- 'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- behind: function() {
- var
- box = {
- origin : ( ( $activeSide.outerWidth() - $nextSide.outerWidth() ) / 2),
- depth : {
- active : ($nextSide.outerWidth() / 2),
- next : ($activeSide.outerWidth() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as behind', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'left' : box.origin + 'px',
- 'transform' : 'rotateY(-180deg)'
- })
- ;
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if( $.isPlainObject(name) ) {
- $.extend(true, settings, name);
- }
- else if(value === undefined) {
- return settings[name];
- }
- else {
- settings[name] = value;
- }
- },
-
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
-
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
-
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
-
- invoke: function(query, passedArguments, context) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || queryArguments || [].slice.call( arguments, 2 );
- context = element || context;
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(error.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- module.verbose('Executing invoked function', found);
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found || false;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- if(instance === undefined) {
- module.initialize();
- }
- invokedResponse = module.invoke(query);
- }
- // otherwise initialize
- else {
- if(instance !== undefined) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.shape.settings = {
-
- // module info
- moduleName : 'Shape Module',
-
- // debug content outputted to console
- debug : true,
-
- // verbose debug output
- verbose : true,
-
- // event namespace
- namespace : 'shape',
-
- // callback occurs on side change
- beforeChange : function() {},
- onChange : function() {},
-
- // use css animation (currently only true is supported)
- useCSS : true,
-
- // animation duration (useful only with future js animations)
- duration : 1000,
- easing : 'easeInOutQuad',
-
- // 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 : {
- css : 'css',
- animating : 'animating',
- hidden : 'hidden',
- active : 'active'
- },
-
- // selectors used
- selector : {
- shape : '.shape',
- side : '.side'
- }
-
-};
-
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/star.js b/node/src/files/components/semantic/packaged/modules/star.js
deleted file mode 100644
index e394ce5fc..000000000
--- a/node/src/files/components/semantic/packaged/modules/star.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/* ******************************
- Star Review
- Author: Jack Lukic
- Notes: First Commit Sep 04, 2012
-
- Simple rating module
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.starReview = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.starReview.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $star = $module.find(settings.selector.star),
-
- className = settings.className,
- namespace = settings.namespace,
- instance = $module.data('module'),
- module
- ;
-
- module = {
-
- settings: settings,
-
- initialize: function() {
- if(settings.rateable) {
- // expandable with states
- if($.fn.state !== undefined) {
- $module
- .state()
- ;
- $star
- .state()
- ;
- }
- $star
- .bind('mouseenter.' + namespace, module.event.mouseenter)
- .bind('mouseleave.' + namespace, module.event.mouseleave)
- .bind('click.' + namespace, module.event.click)
- ;
- }
- $module
- .addClass(className.initialize)
- .data('module', module)
- ;
- },
-
- setRating: function(rating) {
- var
- $activeStar = $star.eq(rating - 1)
- ;
- $module
- .removeClass(className.hover)
- ;
- $star
- .removeClass(className.hover)
- ;
- $activeStar
- .nextAll()
- .removeClass(className.active)
- ;
- $activeStar
- .addClass(className.active)
- .prevAll()
- .addClass(className.active)
- ;
- $.proxy(settings.onRate, $module)();
- },
-
- event: {
- mouseenter: function() {
- var
- $activeStar = $(this)
- ;
- $activeStar
- .nextAll()
- .removeClass(className.hover)
- ;
- $module
- .addClass(className.hover)
- ;
- $activeStar
- .addClass(className.hover)
- .prevAll()
- .addClass(className.hover)
- ;
- },
- mouseleave: function() {
- $star
- .removeClass(className.hover)
- ;
- },
- click: function() {
- var
- $activeStar = $(this)
- ;
- module.setRating( $star.index($activeStar) + 1);
- }
- },
-
- // handle error logging
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + errorMessage);
- },
-
- // allows for dot notation method calls
- 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.errors.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.starReview.settings = {
-
- moduleName : 'Star Module',
- namespace : 'star',
-
- rateable : true,
- onRate : function(){},
-
- className : {
- initialize : 'initialize',
- loading : 'loading',
- active : 'active',
- hover : 'hover',
- down : 'down'
- },
-
- selector : {
- star : 'i'
- }
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/modules/tab.js b/node/src/files/components/semantic/packaged/modules/tab.js
deleted file mode 100644
index 6506548b3..000000000
--- a/node/src/files/components/semantic/packaged/modules/tab.js
+++ /dev/null
@@ -1,523 +0,0 @@
-/* ******************************
- Module - Simple Tab Navigation
- Author: Jack Lukic
- Notes: First Commit Aug 15, 2012
-
- History based tab navigation
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.tabNavigation = function(parameters) {
-
- var
- settings = $.extend(true, {}, $.fn.tabNavigation.settings, parameters),
-
- $tabNavigation = $(this),
- $tabs = $(settings.context).find(settings.selector.tabs),
-
- firstLoad = true,
- cache = {},
- recursionDepth = 0,
-
- activeTabPath,
- parameterArray,
- historyEvent,
-
- className = settings.className,
- metadata = settings.metadata,
- namespace = settings.namespace,
- errors = settings.errors,
-
- instance = $tabNavigation.data('module'),
-
- query = arguments[0],
- methodInvoked = (instance !== undefined && typeof query == 'string'),
- passedArguments = [].slice.call(arguments, 1),
-
- module,
- invokedResponse
- ;
-
- module = {
-
- initialize: function() {
- module.debug('Initializing Tabs', $tabNavigation);
- // attach history events
- if(settings.history && settings.path !== false) {
- if( $.address !== undefined ) {
- module.verbose('Address library found adding state change event');
- $.address
- .state(settings.path)
- .change(module.event.history.change)
- ;
- }
- else {
- module.error(errors.state);
- }
- }
- // attach events if navigation wasn't set to window
- if( !$.isWindow( $tabNavigation.get(0) ) ) {
- $tabNavigation
- .on('click.' + namespace, module.event.click)
- ;
- }
- $tabNavigation
- .data('module', module)
- ;
- },
-
- destroy: function() {
- module.debug('Destroying tabs', $tabNavigation);
- $tabNavigation
- .off('.' + namespace)
- ;
- },
-
- event: {
- click: function() {
- module.debug('Navigation clicked');
- var
- tabPath = $(this).data(metadata.tab)
- ;
- if(tabPath !== undefined) {
- if(tabPath !== activeTabPath) {
- if(settings.history) {
- $.address.value(tabPath);
- }
- else {
- module.change(tabPath);
- }
- }
- }
- 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.debug('History change event', tabPath, event);
- historyEvent = event;
- if(tabPath !== undefined) {
- module.change(tabPath);
- }
- if(pageTitle) {
- $.address.title(pageTitle);
- }
- }
- }
- },
-
- refresh: function() {
- if(activeTabPath) {
- module.debug('Refreshing tab', activeTabPath);
- module.change(activeTabPath);
- }
- },
-
- cache: {
- read: function(tabPath) {
- return (tabPath !== undefined)
- ? cache[tabPath]
- : cache
- ;
- },
- add: function(tabPath, content) {
- tabPath = tabPath || activeTabPath;
- module.debug('Adding cached content for', tabPath);
- cache[tabPath] = content;
- },
- remove: function(tabPath) {
- tabPath = tabPath || activeTabPath;
- module.debug('Removing cached content for', tabPath);
- delete cache[tabPath];
- }
- },
-
- change: function(tabPath) {
- var
- pathArray = module.get.defaultPathArray(tabPath)
- ;
- module.deactivate.all();
- $.each(pathArray, function(index, tab) {
- var
- currentPathArray = pathArray.slice(0, index + 1),
- currentPath = module.utils.arrayToPath(currentPathArray),
-
- isLastTab = (module.utils.last(pathArray) == currentPath),
- isTab = module.is.tab(currentPath),
- isParam = !(isTab),
-
- pushStateAvailable = (window.history && window.history.pushState),
- shouldIgnoreLoad = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),
- remoteContent = $.isPlainObject(settings.apiSettings),
-
- $tab = module.get.tabElement(currentPath)
- ;
- module.verbose('Looking for tab', tab);
- if(isParam) {
- module.verbose('Tab is not found, assuming it is a parameter', tab);
- return true;
- }
- else if(isTab) {
- // scope up
- module.verbose('Tab was found', tab);
- activeTabPath = currentPath;
- parameterArray = module.utils.filterArray(pathArray, currentPathArray);
- if(isLastTab && remoteContent) {
- if(!shouldIgnoreLoad) {
- module.activate.navigation(currentPath);
- module.content.fetch(currentPath, settings.onTabLoad);
- }
- else {
- module.debug('Ignoring remote content on first tab load', currentPath);
- firstLoad = false;
- cache[tabPath] = $tab.html();
- module.activate.all(currentPath);
- $.proxy(settings.onTabInit, $tab)(currentPath, parameterArray, historyEvent);
- }
- }
- else {
- module.debug('Opened tab', currentPath);
- module.activate.all(currentPath);
- $.proxy(settings.onTabLoad, $tab)(currentPath, parameterArray, historyEvent);
- }
-
- }
- });
- },
-
- content: {
-
- fetch: function(tabPath) {
- var
- $tab = module.get.tabElement(tabPath),
- cachedContent = cache[tabPath] || false,
- apiSettings = {
- dataType : 'html',
- stateContext : $tab,
- success : function(response) {
- cache[tabPath] = response;
- module.content.update(tabPath, response);
- if(tabPath == activeTabPath) {
- module.debug('Content loaded', tabPath);
- module.activate.tab(tabPath);
- }
- else {
- module.debug('Content loaded in background', tabPath);
- }
- $.proxy(settings.onTabInit, $tab)(tabPath, parameterArray, historyEvent);
- },
- urlData: { tab: tabPath }
- },
- request = $tab.data(metadata.promise) || false,
- existingRequest = ( request && request.state() === 'pending' )
- ;
- if(settings.cache && cachedContent) {
- module.debug('Showing existing content', tabPath);
- // module.content.update(tabPath, cachedContent);
- module.activate.tab(tabPath);
- $.proxy(settings.onTabLoad, $tab)(tabPath, parameterArray, historyEvent);
- }
- else if(existingRequest) {
- module.debug('Content is already loading', tabPath);
- $tab
- .addClass(className.loading)
- ;
- }
- else if($.api !== undefined) {
- module.debug('Retrieving content', tabPath);
- $.api( $.extend(true, {}, settings.apiSettings, apiSettings) );
- }
- else {
- module.error(errors.api);
- }
- },
-
- update: function(tabPath, html) {
- module.debug('Updating html for', tabPath);
- var
- $tab = module.get.tabElement(tabPath)
- ;
- $tab
- .html(html)
- ;
- }
- },
-
- activate: {
- all: function(tabPath) {
- module.activate.tab(tabPath);
- module.activate.navigation(tabPath);
- },
- tab: function(tabPath) {
- var
- $tab = module.get.tabElement(tabPath)
- ;
- module.verbose('Showing tab content for', $tab);
- $tab.addClass(className.active);
- },
- navigation: function(tabPath) {
- var
- $nav = module.get.navElement(tabPath)
- ;
- module.verbose('Activating tab navigation for', $nav);
- $nav.addClass(className.active);
- }
- },
-
- deactivate: {
- all: function() {
- module.deactivate.navigation();
- module.deactivate.tabs();
- },
- navigation: function() {
- $tabNavigation
- .removeClass(className.active)
- ;
- },
- tabs: function() {
- $tabs
- .removeClass(className.active + ' ' + className.loading)
- ;
- }
- },
-
- is: {
- tab: function(tabName) {
- return ( module.get.tabElement(tabName).size() > 0 );
- }
- },
-
- get: {
- initialPath: function() {
- return $tabNavigation.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);
- },
- // adds default tabs to tab path
- defaultPathArray: function(tabPath) {
- return module.utils.pathToArray( module.get.defaultPath(tabPath) );
- },
- defaultPath: function(tabPath) {
- var
- $defaultNav = $tabNavigation.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(errors.recursion);
- }
- recursionDepth = 0;
- return tabPath;
- },
- navElement: function(tabPath) {
- tabPath = tabPath || activeTabPath;
- return $tabNavigation.filter('[data-' + metadata.tab + '="' + tabPath + '"]');
- },
- tabElement: function(tabPath) {
- var
- $fullPathTab,
- $simplePathTab,
- tabPathArray,
- lastTab
- ;
- tabPath = tabPath || activeTabPath;
- tabPathArray = module.utils.pathToArray(tabPath);
- lastTab = module.utils.last(tabPathArray);
- $fullPathTab = $tabs.filter('[data-' + metadata.tab + '="' + lastTab + '"]');
- $simplePathTab = $tabs.filter('[data-' + metadata.tab + '="' + tabPath + '"]');
- return ($fullPathTab.size() > 0)
- ? $fullPathTab
- : $simplePathTab
- ;
- },
- tab: function() {
- return activeTabPath;
- }
- },
-
- utils: {
- 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
- ;
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables));
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
-
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-
- };
-
- // shortcut for tabbed content with no defined navigation
- $.tabNavigation = function(settings) {
- $(window).tabNavigation(settings);
- };
-
- $.fn.tabNavigation.settings = {
-
- moduleName : 'Tab Module',
- verbose : false,
- debug : true,
- namespace : 'tab',
-
- // only called first time a tab's content is loaded (when remote source)
- onTabInit : function(tabPath, parameterArray, historyEvent) {},
- // called on every load
- onTabLoad : function(tabPath, parameterArray, historyEvent) {},
-
- templates: {
- determineTitle: function(tabArray) {}
- },
-
- history : false,
- path : false,
-
- context : 'body',
-
- // max depth a tab can be nested
- maxDepth : 25,
- // dont load content on first load
- ignoreFirstLoad : true,
- // load tab content new every tab click
- alwaysRefresh : false,
- // cache the content requests to pull locally
- cache : true,
- // settings for api call
- apiSettings : false,
-
- errors: {
- api : 'You attempted to load content without API module',
- noContent : 'The tab you specified is missing a content url.',
- method : 'The method you called is not defined',
- state : 'The state library has not been initialized',
- missingTab : 'Missing tab: ',
- recursion : 'Max recursive depth reached'
- },
-
- metadata : {
- tab : 'tab',
- loaded : 'loaded',
- promise: 'promise'
- },
-
- className : {
- loading : 'loading',
- active : 'active'
- },
-
- selector : {
- tabs : '.tab'
- }
-
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/modules/video.js b/node/src/files/components/semantic/packaged/modules/video.js
deleted file mode 100644
index 8dd11a6d0..000000000
--- a/node/src/files/components/semantic/packaged/modules/video.js
+++ /dev/null
@@ -1,391 +0,0 @@
-/* ******************************
- Module - Video Component
- Author: Jack Lukic
- Notes: First Commit June 30, 2012
-
- This is a video playlist and video embed plugin which helps
- provide helpers for adding embed code for vimeo and youtube and
- abstracting event handlers for each library
-
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.video = function(parameters) {
-
- var
- settings = $.extend(true, {}, $.fn.video.settings, parameters),
- // make arguments available
- moduleArguments = arguments || false,
- invokedResponse
- ;
-
- $(this)
- .each(function() {
- var
- $module = $(this),
- $placeholder = $module.find(settings.selector.placeholder),
- $playButton = $module.find(settings.selector.playButton),
- $embed = $module.find(settings.selector.embed),
-
- element = this,
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (typeof parameters == 'string'),
-
- namespace = settings.namespace,
- metadata = settings.metadata,
- className = settings.className,
-
- module
- ;
-
- module = {
-
- initialize: function() {
- module.debug('Initializing video');
- $placeholder
- .off('.video')
- .on('click.' + namespace, module.play)
- ;
- $playButton
- .off('.video')
- .on('click.' + namespace, module.play)
- ;
- $module
- .data('module-' + namespace, module)
- ;
- },
-
- // sets new video
- change: function(source, flv) {
- module.debug('Changing video to ', flv);
- $module
- .data(metadata.source, source)
- .data(metadata.flv, flv)
- ;
- settings.onChange();
- },
-
- // clears video embed
- reset: function() {
- module.debug('Clearing video embed and showing placeholder');
- $module
- .removeClass(className.active)
- ;
- $embed
- .html(' ')
- ;
- $placeholder
- .show()
- ;
- settings.onReset();
- },
-
- // plays current video
- play: function() {
- module.debug('Playing video');
- var
- source = $module.data(metadata.source),
- flv = $module.data(metadata.flv)
- ;
- $embed
- .html( module.generate.html(source, flv) )
- ;
- $module
- .addClass(className.active)
- ;
- settings.onPlay();
- },
-
- generate: {
- // generates iframe html
- html: function(source, flv) {
- module.debug('Generating embed html');
- var
- width = (settings.width == 'auto')
- ? $module.width()
- : settings.width,
- height = (settings.height == 'auto')
- ? $module.height()
- : settings.height,
- html
- ;
- if(source == 'vimeo') {
- html = ''
- + '
'
- ;
- }
- else if(source == 'youtube') {
- html = ''
- + '
'
- ;
- }
- return html;
- },
-
- // generate url parameters
- url: function(source) {
- var
- api = (settings.api)
- ? 1
- : 0,
- autoplay = (settings.autoplay)
- ? 1
- : 0,
- hd = (settings.hd)
- ? 1
- : 0,
- showUI = (settings.showUI)
- ? 1
- : 0,
- // opposite used for some params
- hideUI = !(settings.showUI)
- ? 1
- : 0,
- url = ''
- ;
- if(source == 'vimeo') {
- url = ''
- + 'api=' + api
- + '&title=' + showUI
- + '&byline=' + showUI
- + '&portrait=' + showUI
- + '&autoplay=' + autoplay
- ;
- if(settings.color) {
- url += '&color=' + settings.color;
- }
- }
- else if(source == 'youtube') {
- url = ''
- + 'enablejsapi=' + api
- + '&autoplay=' + autoplay
- + '&autohide=' + hideUI
- + '&hq=' + hd
- + '&modestbranding=1'
- ;
- if(settings.color) {
- url += '&color=' + settings.color;
- }
- }
- return url;
- }
- },
-
- /* standard module */
- debug: function(message, variableName) {
- if(settings.debug) {
- if(variableName !== undefined) {
- console.info(settings.moduleName + ': ' + message, variableName);
- }
- else {
- console.info(settings.moduleName + ': ' + message);
- }
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.method);
- return false;
- });
- }
- if ( $.isFunction( method ) ) {
- return method.apply(context, methodArguments);
- }
- // return retrieved variable or chain
- return method;
- }
- };
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
- }
- // otherwise initialize
- else {
- if(instance) {
- module.destroy();
- }
- module.initialize();
- }
-
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
- };
-
-
- $.fn.videoPlaylist = function(video, parameters) {
- var
- $allModules = $(this),
- $video = $(video),
- $iframe = $video.find('.embed iframe'),
-
- settings = $.extend({}, $.fn.videoPlaylist.settings, parameters, true)
- ;
- $allModules
- .each(function() {
- var
- $element = $(this),
-
- metadata = settings.metadata,
- namespace = settings.namespace,
- className = settings.className,
-
- module = {
- initialize: function() {
- $element
- .on('click.' + namespace , module.changeVideo)
- ;
- },
- changeVideo: function() {
- var
- flv = $element.data(metadata.flv) || false,
- source = $element.data(metadata.source) || false,
- placeholder = $element.data(metadata.placeholder) || false
- ;
- if(flv && source) {
- $video
- .data(metadata.source, source)
- .data(metadata.flv, flv)
- ;
- if(settings.showPlaceholder) {
- $video
- .removeClass(className.active)
- .find($.fn.video.selector.placeholder)
- .attr('src', placeholder)
- ;
- }
- else {
- try {
- $video
- .video('play')
- ;
- }
- catch(error) {
- console.warn('Video Playlist Module: ' + settings.error.init);
- }
- }
- $allModules
- .removeClass(className.active)
- ;
- $element
- .addClass(className.active)
- ;
- }
- }
- }
- ;
- module.initialize();
- })
- ;
-
- if(settings.playFirst) {
- $allModules
- .eq(0)
- .trigger('click')
- ;
- // we all like a good hack
- if($iframe.size() > 0) {
- $iframe
- .attr('src', $iframe.attr('src').replace('autoplay=1', 'autoplay=0') )
- ;
- }
-
- }
-
- };
-
- $.fn.video.settings = {
-
- moduleName : 'Video',
- namespace : 'video',
- debug : false,
-
- metadata : {
- source : 'source',
- flv : 'flv'
- },
-
- onPlay : function(){},
- onReset : function(){},
- onChange : function(){},
-
- // callbacks not coded yet (needs to use jsapi)
- play : function() {},
- pause : function() {},
- stop : function() {},
-
- width : 'auto',
- height : 'auto',
-
- autoplay : false,
- color : '#442359',
- hd : true,
- showUI : false,
- api : true,
-
- errors : {
- method : 'The method you called is not defined'
- },
-
- className : {
- active : 'active'
- },
-
- selector : {
- embed : '.embed',
- placeholder : '.placeholder',
- playButton : '.play'
- }
- };
-
- $.fn.videoPlaylist.settings = {
- moduleName : 'Video Playlist',
- namespace : 'videoPlaylist',
-
- source : 'vimeo',
- showPlaceholder : false,
- playFirst : true,
-
- metadata: {
- flv : 'flv',
- source : 'source',
- placeholder : 'placeholder'
- },
-
- errors: {
- init : 'The video player you specified was not yet initialized'
- },
-
- className : {
- active : 'active'
- }
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/packaged/semantic.min.css.REMOVED.git-id b/node/src/files/components/semantic/packaged/semantic.min.css.REMOVED.git-id
deleted file mode 100644
index 8f88ec159..000000000
--- a/node/src/files/components/semantic/packaged/semantic.min.css.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-a7e474c128bb27e8311776824353f60fcaa73ac7
\ No newline at end of file
diff --git a/node/src/files/components/semantic/packaged/semantic.min.js.REMOVED.git-id b/node/src/files/components/semantic/packaged/semantic.min.js.REMOVED.git-id
deleted file mode 100644
index 2b696d9b9..000000000
--- a/node/src/files/components/semantic/packaged/semantic.min.js.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-0f07dbd48e46e923a00189bae39db59576075359
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/fonts/icons.eot.REMOVED.git-id b/node/src/files/components/semantic/uncompressed/fonts/icons.eot.REMOVED.git-id
deleted file mode 100644
index 2776fbe5d..000000000
--- a/node/src/files/components/semantic/uncompressed/fonts/icons.eot.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-25066de069a62374b39f220581d1314fa60a5f45
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/fonts/icons.svg.REMOVED.git-id b/node/src/files/components/semantic/uncompressed/fonts/icons.svg.REMOVED.git-id
deleted file mode 100644
index fbf9c2439..000000000
--- a/node/src/files/components/semantic/uncompressed/fonts/icons.svg.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-b9c54d022b2628b920f09afd4cb10d4dc0ce0d17
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/fonts/icons.ttf.REMOVED.git-id b/node/src/files/components/semantic/uncompressed/fonts/icons.ttf.REMOVED.git-id
deleted file mode 100644
index f8d220df0..000000000
--- a/node/src/files/components/semantic/uncompressed/fonts/icons.ttf.REMOVED.git-id
+++ /dev/null
@@ -1 +0,0 @@
-318a2643d3af55fe51b472e7769b99caf74ff7b0
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/fonts/icons.woff b/node/src/files/components/semantic/uncompressed/fonts/icons.woff
deleted file mode 100644
index baba1b5eb..000000000
Binary files a/node/src/files/components/semantic/uncompressed/fonts/icons.woff and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/button-error.gif b/node/src/files/components/semantic/uncompressed/images/button-error.gif
deleted file mode 100644
index 0615c1626..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/button-error.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/footnote.png b/node/src/files/components/semantic/uncompressed/images/footnote.png
deleted file mode 100644
index c13a1f233..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/footnote.png and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/loader-generic-transparent.gif b/node/src/files/components/semantic/uncompressed/images/loader-generic-transparent.gif
deleted file mode 100644
index 74c9d63f3..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/loader-generic-transparent.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/notecard-stripes.png b/node/src/files/components/semantic/uncompressed/images/notecard-stripes.png
deleted file mode 100644
index 57b1c37a7..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/notecard-stripes.png and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/paperclip.png b/node/src/files/components/semantic/uncompressed/images/paperclip.png
deleted file mode 100644
index 82edf737d..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/paperclip.png and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/placeholder-subtle.png b/node/src/files/components/semantic/uncompressed/images/placeholder-subtle.png
deleted file mode 100644
index a69787855..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/placeholder-subtle.png and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/placeholder-tiny.png b/node/src/files/components/semantic/uncompressed/images/placeholder-tiny.png
deleted file mode 100644
index e936460e6..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/placeholder-tiny.png and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/placeholder.png b/node/src/files/components/semantic/uncompressed/images/placeholder.png
deleted file mode 100644
index b635fa2ce..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/placeholder.png and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-blue-large.gif b/node/src/files/components/semantic/uncompressed/images/throbber-blue-large.gif
deleted file mode 100644
index d0ac895ea..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-blue-large.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-blue-medium.gif b/node/src/files/components/semantic/uncompressed/images/throbber-blue-medium.gif
deleted file mode 100644
index 89dfc9137..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-blue-medium.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-blue-small.gif b/node/src/files/components/semantic/uncompressed/images/throbber-blue-small.gif
deleted file mode 100644
index 5ebe9a217..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-blue-small.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-blue-tiny.gif b/node/src/files/components/semantic/uncompressed/images/throbber-blue-tiny.gif
deleted file mode 100644
index 43475d481..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-blue-tiny.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-large.gif b/node/src/files/components/semantic/uncompressed/images/throbber-large.gif
deleted file mode 100644
index 519621ccd..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-large.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-medium-white.gif b/node/src/files/components/semantic/uncompressed/images/throbber-medium-white.gif
deleted file mode 100644
index 010e29eae..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-medium-white.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-medium.gif b/node/src/files/components/semantic/uncompressed/images/throbber-medium.gif
deleted file mode 100644
index ae34460f9..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-medium.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-small.gif b/node/src/files/components/semantic/uncompressed/images/throbber-small.gif
deleted file mode 100644
index d9a6760a4..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-small.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/images/throbber-tiny.gif b/node/src/files/components/semantic/uncompressed/images/throbber-tiny.gif
deleted file mode 100644
index c65ee55fd..000000000
Binary files a/node/src/files/components/semantic/uncompressed/images/throbber-tiny.gif and /dev/null differ
diff --git a/node/src/files/components/semantic/uncompressed/modules/accordion.js b/node/src/files/components/semantic/uncompressed/modules/accordion.js
deleted file mode 100644
index 0003c3012..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/accordion.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/* ******************************
- Accordion
- Author: Jack Lukic
- Notes: First Commit July 19, 2012
-
- Simple accordion design
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.accordion = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.accordion.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
-
- var
- $module = $(this),
- $title = $module.find(settings.selector.title),
- $icon = $module.find(settings.selector.icon),
- $content = $module.find(settings.selector.content),
-
- instance = $module.data('module'),
- className = settings.className,
- module
- ;
-
- module = {
-
- initialize: function() {
- // initializing
- $title
- .on('click', module.change)
- ;
- $module
- .data('module', module)
- ;
- },
-
- change: function() {
- var
- $activeTitle = $(this),
- $activeContent = $activeTitle.next($content),
- contentIsOpen = $activeTitle.hasClass(className.active)
- ;
- if(contentIsOpen) {
- if(settings.collapsible) {
- $.proxy(module.close, $activeTitle)();
- }
- }
- else {
- $.proxy(module.open, $activeTitle)();
- }
- },
-
- open: function() {
- var
- $activeTitle = $(this),
- $activeContent = $activeTitle.next($content),
- $currentTitle = $title.filter('.' + className.active),
- $currentContent = $currentTitle.next($title)
- ;
- if(settings.exclusive && $currentTitle.size() > 0) {
-
- $currentTitle
- .removeClass('active')
- ;
- $currentContent
- .stop()
- .slideUp(settings.speed , settings.easing, function() {
- $(this)
- .removeClass('active')
- .removeAttr('style')
- ;
- })
- ;
- }
- $activeTitle
- .addClass(className.active)
- ;
- $activeContent
- .hide()
- .addClass(className.active)
- .stop()
- .slideDown(settings.speed, settings.easing, function() {
- $(this)
- .removeAttr('style')
- ;
- })
- ;
- },
-
- close: function() {
- var
- $activeTitle = $(this),
- $activeContent = $activeTitle.next($content)
- ;
- $activeTitle
- .removeClass(className.active)
- ;
- $activeContent
- .removeClass(className.active)
- .show()
- .stop()
- .slideUp(settings.speed, settings.easing, function(){
- $(this)
- .removeAttr('style')
- ;
- })
- ;
- },
-
- debug: function(message) {
- if(settings.debug) {
- console.info(settings.moduleName + ': ' + message);
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.method);
- return false;
- });
- }
- if ( $.isFunction( method ) ) {
- return method.apply(context, methodArguments);
- }
- // return retrieved variable or chain
- return method;
- }
-
- };
-
- // calling a method
- 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.accordion.settings = {
- moduleName : 'Accordion',
- debug : false,
-
- exclusive : true,
- collapsible : true,
-
- errors: {
- method : 'The method you called is not defined'
- },
-
- className : {
- active : 'active',
- hover : 'hover'
- },
-
- selector : {
- title : '.title',
- icon : '.icon',
- content : '.content'
- },
-
- speed : 500,
- easing : 'easeInOutQuint'
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/behavior/animation.js b/node/src/files/components/semantic/uncompressed/modules/behavior/animation.js
deleted file mode 100644
index 54c22e32f..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/behavior/animation.js
+++ /dev/null
@@ -1,247 +0,0 @@
-/* ******************************
- Animation
- Author: Jack Lukic
- Notes: First Commit May 24, 2012
-
- A collection of FX/Animations
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-
- // handles simplification of animation settings
- $.animationSettings = function(settings, duration, easing, complete) {
- // no parameters
- if(duration === undefined) {
- settings = settings;
- }
- // duration is actually settings object
- else if(typeof duration == 'object') {
- settings = $.extend({} , settings, duration);
- }
- // easing is actually complete callback
- else if(typeof easing == 'function') {
- settings = $.extend({} , settings, {
- duration: duration,
- complete: easing
- });
- }
- // easing is actually settings
- else if(typeof easing == 'object') {
- settings = $.extend(true, {} , settings, {duration: duration}, easing);
- }
- //
- else {
- settings = $.extend({} , settings, {
- duration : duration,
- easing : easing,
- complete : complete
- });
- }
- return settings;
- };
-
- /* ******************************
- Pop In -
- Animates one at a time
- scaling in
- ****************************** */
-
- $.fn.popIn = function(duration, easing, complete) {
- var
- settings = $.animationSettings($.fn.popIn.settings, duration, easing, complete),
-
- $this = $(this),
- totalElements = $this.size(),
- currentElement = 0,
- callback = function() {
- var
- elementsDoneAnimating = ($this.filter(':animated').size() == 0)
- ;
- currentElement++;
- $(this)
- .css('transform', '')
- .removeClass(settings.className.init)
- ;
- $.proxy(settings.eachComplete, this)();
- if(currentElement == totalElements) {
- $.proxy(settings.complete, $this)();
- }
- },
- animate = function(index) {
- $(this)
- .delay(settings.delay * index)
- .animate({
- opacity : settings.endOpacity,
- transform : 'scale('+ settings.endScale +')'
- }, settings.duration, settings.easing, callback)
- ;
- }
- ;
- if(settings.isLegacyBrowser) {
- $this
- .show()
- ;
- }
- else {
- $this
- .addClass(settings.className.init)
- .show()
- .css({
- opacity : settings.startOpacity,
- transform : 'scale('+ settings.startScale +')'
- })
- .each(animate)
- ;
- }
- return $(this);
- };
-
- $.fn.popOut = function(duration, easing, complete) {
- var
- parameters = $.animationSettings($.fn.popIn.settings, duration, easing, complete),
- // flip some defaults
- defaults = {
- complete: function() {
- $(this).hide();
- $.proxy(parameters.complete, this)();
- },
- startOpacity : parameters.endOpacity,
- endOpacity : 0,
- startScale : parameters.endScale,
- endScale : parameters.startScale
- },
- settings = $.extend(true, {}, parameters, defaults)
- ;
- $(this)
- .popIn(settings)
- ;
- };
-
- $.fn.popIn.settings = {
-
- // legacy browser
- isLegacyBrowser: false,
-
- // class given until animation ends
- className: {
- init : 'init'
- },
- // duration of each animation
- duration : 450,
- // easing for animation
- easing : 'easeOutExpo',
- // delay before each
- delay : 100,
-
- startOpacity : 0,
- endOpacity : 1,
-
- startScale : 0.7,
- endScale : 1,
- // called after each element completes
- eachComplete : function(){},
- // called after entire chain of animation completes
- complete : function(){}
- };
-
-
- $.fn.kenBurns = function(duration, easing, complete) {
- var
- settings = $.animationSettings($.fn.kenBurns.settings, duration, easing, complete),
- module = {
-
- randomPosition: function(starting, rangeMin, rangeMax) {
- var
- rangeMax = (rangeMax !== undefined)
- ? rangeMax
- : rangeMin,
- number = Math.random() * ((starting + rangeMax) - (starting - rangeMin) ) + (starting - rangeMin)
- ;
- return parseInt(number, 10);
- },
-
- animate: function() {
- var
- startingPosition = {},
- endingPosition = {},
- startingScale,
- endingScale
- ;
-
- startingPosition = (settings.useStartPosition)
- ? {
- x: parseInt( $(this).css('background-position-x'), 10),
- y: parseInt( $(this).css('background-position-y'), 10)
- }
- : {
- x: module.randomPosition(50, settings.xRange),
- y: module.randomPosition(50, settings.yRange)
- }
- ;
- // determine direction of animation based on origin position
- endingPosition.x = (startingPosition.x > 50)
- ? module.randomPosition(startingPosition.x, settings.xMaxTravelDistance, -settings.xMinTravelDistance)
- : module.randomPosition(startingPosition.x, -settings.xMinTravelDistance, settings.xMaxTravelDistance)
- ;
- endingPosition.y = (startingPosition.y > 50)
- ? module.randomPosition(startingPosition.y, settings.yMaxTravelDistance, -settings.yMinTravelDistance)
- : module.randomPosition(startingPosition.y, -settings.yMinTravelDistance, settings.yMaxTravelDistance)
- ;
-
- /*console.log(startingPosition.x + '% ' + startingPosition.y + '%');
- console.log(endingPosition.x + '% ' + endingPosition.y + '%');*/
-
- $(this)
- .css({
- backgroundPosition: startingPosition.x + '%',
- backgroundPositionY: startingPosition.y + '%'
- })
- .stop()
- .animate({
- backgroundPosition: endingPosition.x + '%',
- backgroundPositionY: endingPosition.y + '%'
- }, settings.duration, settings.easing, settings.complete)
- ;
- }
-
- }
- ;
- if(!settings.isLegacyBrowser) {
- $(this)
- .each(module.animate)
- ;
- }
- return $(this);
- };
-
- $.fn.kenBurns.settings = {
-
- // legacy browser
- isLegacyBrowser : false,
-
- // duration of animation
- duration : 10000,
- // easing for animation
- easing : 'linear',
- useStartPosition : false,
-
- xRange : 40,
- yRange : 20,
-
- xMinTravelDistance : 30,
- xMaxTravelDistance : 60,
-
- yMinTravelDistance : 20,
- yMaxTravelDistance : 40,
-
- // not yet implemented, need css hook for background-size
- scale : 0.1,
-
- // called after entire chain of animation completes
- complete : function(){}
- };
-
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/modules/behavior/api.js b/node/src/files/components/semantic/uncompressed/modules/behavior/api.js
deleted file mode 100644
index 3f5b0ab14..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/behavior/api.js
+++ /dev/null
@@ -1,515 +0,0 @@
- /* ******************************
- API
- Author: Jack Lukic
- Notes: First Commit May 08, 2012
-
- These are modules which bind API functionality to the DOM
-
- Requires: nada
-
- Initialization:
- $('.button')
- .apiButton({
- success: function() {}
- })
- ;
-
- in our example api is automapped to an object literal
- @ quirky.config.endpoint.api
-
- HTML:
-
-
- URL : quirky.config.endpoint.api.follow
- Given Value: /follow/{$id}/
- Sent Value : /follow/5/
-
- (4 ways to map api endpoint, each will be looked for in succession)
- url mapping order:
- first : defined in plugin init as url (arbitrary url)
- second : defined in plugin init as action (action in obj literal grouping 'api')
- third : defined in data-url
- fourth : defined in data-action
-
- beforeSend:
- this callback can be used to modify request settings before XHR
- it also can be used to look for for pre-conditions to prevent API
- call by returning "false"
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
- $.api = $.fn.api = function(parameters) {
-
- var
- settings = $.extend(true, {}, $.api.settings, parameters),
-
- // if this keyword isn't a jQuery object, create one
- context = (typeof this != 'function')
- ? this
- : $('
'),
- // context defines the element used for loading/error state
- $context = (settings.stateContext)
- ? $(settings.stateContext)
- : $(context),
- // module is the thing that initiates the api action, can be independent of context
- $module = typeof this == 'object'
- ? $(context)
- : $context,
-
- action = $module.data(settings.metadata.action) || settings.action || false,
-
- className = settings.className,
- metadata = settings.metadata,
- errors = settings.errors,
- module
- ;
-
- module = {
- initialize: function() {
- var
- exitConditions = false,
-
- runSettings,
-
- loadingTimer = new Date().getTime(),
- loadingDelay,
-
- promise,
- url,
- urlVariables,
-
- formData = {},
- data,
-
- ajaxSettings = {},
- xhr,
-
- errors = settings.errors
- ;
-
- // serialize parent form if requested!
- if(settings.serializeForm && $(this).toJSON() !== undefined) {
- formData = $module
- .closest('form')
- .toJSON()
- ;
- $.extend(true, settings.data, formData);
- module.debug('Adding form data to API Request', formData);
- }
-
- // let beforesend change settings object
- runSettings = $.proxy(settings.beforeSend, $module)(settings);
-
- // check for exit conditions
- if(runSettings !== undefined && !runSettings) {
- module.error(errors.beforeSend);
- module.reset();
- return;
- }
-
- if(action) {
- module.debug('Initializing API Request for: ', action);
- if(settings.api[action] !== undefined) {
- url = settings.api[action];
- }
- else {
- module.error(errors.missingAction);
- }
- }
- // override with url if specified
- if(settings.url) {
- url = settings.url;
- module.debug('Using specified url: ', url);
- }
-
- if(!url) {
- module.error(errors.missingURL);
- module.reset();
- }
-
- // replace url data in url
- urlVariables = url.match(settings.regExpTemplate);
-
- if(urlVariables) {
- module.debug('Looking for URL variables', urlVariables);
- $.each(urlVariables, function(index, templateValue){
- var
- term = templateValue.substr( 2, templateValue.length - 3),
- termValue = ($.isPlainObject(parameters.urlData) && parameters.urlData[term] !== undefined)
- ? parameters.urlData[term]
- : ($module.data(term) !== undefined)
- ? $module.data(term)
- : settings.urlData[term]
- ;
- module.verbose('Looking for variable', term, $module, $module.data(term), settings.urlData[term]);
- // remove optional value
- if(termValue === false) {
- module.debug('Removing variable from URL', urlVariables);
- url = url.replace('/' + templateValue, '');
- }
- // undefined condition
- else if(termValue === undefined || !termValue) {
- module.error(errors.missingParameter + term);
- exitConditions = true;
- }
- else {
- url = url.replace(templateValue, termValue);
- }
- });
- }
-
- // exit conditions reached from missing url parameters
- if( exitConditions ) {
- module.reset();
- return;
- }
-
- // promise handles notification on api request, so loading min. delay can occur for all notifications
- promise =
- $.Deferred()
- .always(function() {
- if(settings.stateContext) {
- $context
- .removeClass(className.loading)
- ;
- }
- $.proxy(settings.complete, $module)();
- })
- .done(function(response) {
- module.debug('API request successful');
- // take a stab at finding success state if json
- if(settings.dataType == 'json') {
- if(response.success === true) {
- $.proxy(settings.success, $context)(response, settings, $module);
- }
- else {
- module.debug('JSON success flag is not set.');
- if (response.error !== undefined) {
- $.proxy(settings.failure, $context)(response.error, settings, $module);
- }
- else if ($.isArray(response.errors)) {
- $.proxy(settings.failure, $context)(response.errors[0], settings, $module);
- }
- else if(response.message !== undefined) {
- $.proxy(settings.failure, $context)(response.message, settings, $module);
- }
- else {
- $.proxy(settings.failure, $context)(errors.error, settings, $module);
- }
- }
- }
- // otherwise
- else {
- $.proxy(settings.success, $context)(response, settings, $module);
- }
- })
- .fail(function(xhr, status, httpMessage) {
- var
- errorMessage = (settings.errors[status] !== undefined)
- ? settings.errors[status]
- : httpMessage,
- response
- ;
- // let em know unless request aborted
- if(xhr !== undefined) {
- // readyState 4 = done, anything less is not really sent
- if(xhr.readyState !== undefined && xhr.readyState == 4) {
-
- // if http status code returned and json returned error, look for it
- if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {
- module.error(errors.statusMessage + httpMessage);
- }
- else {
- if(status == 'error' && settings.dataType == 'json') {
- try {
- response = $.parseJSON(xhr.responseText);
- if(response && response.error !== undefined) {
- errorMessage = response.error;
- }
- }
- catch(error) {
- module.error(errors.JSONParse);
- }
- }
- }
- $context
- .removeClass(className.loading)
- .addClass(className.error)
- ;
- // show error state only for duration specified in settings
- if(settings.errorLength > 0) {
- setTimeout(function(){
- $context
- .removeClass(className.error)
- ;
- }, settings.errorLength);
- }
- module.debug('API Request error:', errorMessage);
- $.proxy(settings.failure, $context)(errorMessage, settings, this);
- }
- else {
- module.debug('Request Aborted (Most likely caused by page change)');
- }
- }
- })
- ;
-
- // look for params in data
- $.extend(true, ajaxSettings, settings, {
- type : settings.method || settings.type,
- data : data,
- url : url,
- beforeSend : settings.beforeXHR
- });
-
- if(settings.stateContext) {
- $context
- .addClass(className.loading)
- ;
- }
-
- if(settings.progress) {
- module.verbose('Adding progress events');
- $.extend(true, ajaxSettings, {
- xhr: function() {
- var
- xhr = new window.XMLHttpRequest()
- ;
- xhr.upload.addEventListener('progress', function(event) {
- var
- percentComplete
- ;
- if (event.lengthComputable) {
- percentComplete = Math.round(event.loaded / event.total * 10000) / 100 + '%';
- $.proxy(settings.progress, $context)(percentComplete, event);
- }
- }, false);
- xhr.addEventListener('progress', function(event) {
- var
- percentComplete
- ;
- if (event.lengthComputable) {
- percentComplete = Math.round(event.loaded / event.total * 10000) / 100 + '%';
- $.proxy(settings.progress, $context)(percentComplete, event);
- }
- }, false);
- return xhr;
- }
- });
- }
-
- module.verbose('Creating AJAX request with settings: ', ajaxSettings);
- xhr =
- $.ajax(ajaxSettings)
- .always(function() {
- // calculate if loading time was below minimum threshold
- loadingDelay = ( settings.loadingLength - (new Date().getTime() - loadingTimer) );
- settings.loadingDelay = loadingDelay < 0
- ? 0
- : loadingDelay
- ;
- })
- .done(function(response) {
- var
- context = this
- ;
- setTimeout(function(){
- promise.resolveWith(context, [response]);
- }, settings.loadingDelay);
- })
- .fail(function(xhr, status, httpMessage) {
- var
- context = this
- ;
- // page triggers abort on navigation, dont show error
- if(status != 'abort') {
- setTimeout(function(){
- promise.rejectWith(context, [xhr, status, httpMessage]);
- }, settings.loadingDelay);
- }
- else {
- $context
- .removeClass(className.error)
- .removeClass(className.loading)
- ;
- }
- })
- ;
- if(settings.stateContext) {
- $module
- .data(metadata.promise, promise)
- .data(metadata.xhr, xhr)
- ;
- }
- },
-
- // reset api request
- reset: function() {
- $module
- .data(metadata.promise, false)
- .data(metadata.xhr, false)
- ;
- $context
- .removeClass(className.error)
- .removeClass(className.loading)
- ;
- module.error(errors.exitConditions);
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- }
- };
-
- module.initialize();
- return this;
- };
-
- // handle DOM attachment to API functionality
- $.fn.apiButton = function(parameters) {
- $(this)
- .each(function(){
- var
- // if only function passed it is success callback
- $module = $(this),
- element = this,
- selector = $(this).selector || '',
-
- settings = ( $.isFunction(parameters) )
- ? $.extend(true, {}, $.api.settings, $.fn.apiButton.settings, { stateContext: this, success: parameters })
- : $.extend(true, {}, $.api.settings, $.fn.apiButton.settings, { stateContext: this}, parameters),
- module
- ;
- module = {
- initialize: function() {
- if(settings.context && selector !== '') {
- $(settings.context)
- .on(selector, 'click.' + settings.namespace, module.click)
- ;
- }
- else {
- $module
- .on('click.' + settings.namespace, module.click)
- ;
- }
- },
- click: function() {
- if(!settings.filter || $(this).filter(settings.filter).size() === 0) {
- $.proxy( $.api, this )(settings);
- }
- }
- };
- module.initialize();
- })
- ;
- return this;
- };
-
- $.api.settings = {
- moduleName : 'API Module',
- namespace : 'api',
-
- verbose : true,
- debug : true,
-
- api : {},
-
- beforeSend : function(settings) {
- return settings;
- },
- beforeXHR : function(xhr) {},
-
- success : function(response) {},
- complete : function(response) {},
- failure : function(errorCode) {},
- progress : false,
-
- errors : {
- missingAction : 'API action used but no url was defined',
- missingURL : 'URL not specified for the API action',
- missingParameter : 'Missing an essential URL parameter: ',
-
- timeout : 'Your request timed out',
- error : 'There was an error with your request',
- parseError : 'There was an error parsing your request',
- JSONParse : 'JSON could not be parsed during error handling',
- statusMessage : 'Server gave an error: ',
- beforeSend : 'The before send function has aborted the request',
- exitConditions : 'API Request Aborted. Exit conditions met'
- },
-
- className: {
- loading : 'loading',
- error : 'error'
- },
-
- metadata: {
- action : 'action',
- promise : 'promise',
- xhr : 'xhr'
- },
-
- regExpTemplate: /\{\$([A-z]+)\}/g,
-
- action : false,
- url : false,
- urlData : false,
- serializeForm : false,
-
- stateContext : false,
-
- method : 'get',
- data : {},
- dataType : 'json',
- cache : true,
-
- loadingLength : 200,
- errorLength : 2000
-
- };
-
- $.fn.apiButton.settings = {
- filter : '.disabled, .loading',
- context : false,
- stateContext : false
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/modules/behavior/colorize.js b/node/src/files/components/semantic/uncompressed/modules/behavior/colorize.js
deleted file mode 100644
index 245d66815..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/behavior/colorize.js
+++ /dev/null
@@ -1,271 +0,0 @@
-/* ******************************
- Colorizer
- Author: Jack Lukic
- Notes: First Commit June 06, 2012
-
- Tooltip Wrapper for loading
- colorizes of ideations, concepts and users
-
- Will eventually rewrite to use own tooltip lib
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
- $.fn.colorize = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.colorize.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function(instanceIndex) {
-
- var
- $module = $(this),
-
- mainCanvas = $('
')[0],
- imageCanvas = $('
')[0],
- overlayCanvas = $('
')[0],
-
- backgroundImage = new Image(),
-
- // defs
- mainContext,
- imageContext,
- overlayContext,
-
- image,
- imageName,
-
- width,
- height,
-
- // shortucts
- colors = settings.colors,
- paths = settings.paths,
- namespace = settings.namespace,
- errors = settings.errors,
-
- // boilerplate
- instance = $module.data('module-' + namespace),
- module
- ;
-
- module = {
-
- checkPreconditions: function() {
- module.debug('Checking pre-conditions');
-
- if( !$.isPlainObject(colors) || $.isEmptyObject(colors) ) {
- module.error(errors.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(errors.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(errors.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(errors.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(errors.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.moduleName + ': ' + message, variableName);
- }
- else {
- console.info(settings.moduleName + ': ' + message);
- }
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.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 = {
- moduleName : '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'
- },
-
- errors: {
- 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 );
diff --git a/node/src/files/components/semantic/uncompressed/modules/behavior/default-text.js b/node/src/files/components/semantic/uncompressed/modules/behavior/default-text.js
deleted file mode 100644
index 24d849842..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/behavior/default-text.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/* ******************************
- Default Text (Form)
- Author: Jack Lukic
- Notes: First Commit April 08, 2012
-
- Refactored Aug 13, 2012
-
- allows you to set a default text value which will be added and removed on form field focus
-
-****************************** */
-;(function ( $, window, document, undefined ) {
-
- $.fn.defaultText = function(parameters) {
- var
- // overload for shorthand to default value
- settings = (typeof parameters == 'string')
- ? $.extend({}, $.fn.defaultText.settings, { defaultValue: parameters })
- : $.extend(true, {}, $.fn.defaultText.settings, parameters)
- ;
- // overload function
- if(typeof parameters == 'string') {
- parameters = { defaultValue: parameters };
- }
- $.extend(settings, parameters);
- $(this)
- .each(function() {
- var
- $element = $(this),
- module = {
-
- checkDefault: function() {
- if($element.val().toLowerCase() != settings.defaultValue.toLowerCase()) {
- $element.addClass(settings.filledClass);
- }
- },
-
- placeholder: {
- add: function(){
- if( $element.filter(settings.disabledClassList).size() === 0 ) {
- if( $element.val() == settings.replaceValue ) {
- if(settings.alwaysReplace) {
- $element
- .removeClass(settings.filledClass)
- .val($element.attr('last'))
- .removeAttr('last')
- ;
- }
- else {
- $element
- .removeClass(settings.filledClass)
- .val(settings.defaultValue)
- ;
- }
- }
- else {
- $element
- .addClass(settings.filledClass)
- ;
- }
- }
- },
- remove: function() {
- if( $element.filter(settings.disabledClassList).size() === 0 ) {
- if(settings.alwaysReplace) {
- $element
- .attr('last', $element.val())
- .val(settings.replaceValue)
- ;
- }
- else {
- if( $element.val().toLowerCase() == settings.defaultValue.toLowerCase() ) {
- $element
- .val(settings.replaceValue)
- ;
- }
- }
- }
- }
- }
- }
- ;
- if(settings.defaultValue == 'auto') {
- settings.defaultValue = $(this).val();
- }
- $element
- .on('focus', module.placeholder.remove)
- .on('blur', module.placeholder.add)
- ;
- // check for user value on load
- module.checkDefault();
- })
- ;
- return this;
- };
-
- $.fn.defaultText.settings = {
- defaultValue : 'auto',
- replaceValue : '',
- alwaysReplace : false,
- disabledClassList : '.readonly, .disabled',
- filledClass : 'filled'
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/behavior/form.js b/node/src/files/components/semantic/uncompressed/modules/behavior/form.js
deleted file mode 100644
index 89fd569ef..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/behavior/form.js
+++ /dev/null
@@ -1,408 +0,0 @@
-/* ******************************
- Form Validation Components
- Author: Jack Lukic
- Notes: First Commit April 08, 2012
-
- Refactored Feb 22, 2012
-
- Allows you to validate forms based on a form validation object
- Form validation objects are bound by either data-validate="" metadata, or form id or name tags
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.validateForm = function(fields, parameters) {
- var
- $allModules = $(this),
-
- settings = $.extend(true, {}, $.fn.validateForm.settings, parameters),
- // make arguments available
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
- $allModules
- .each(function() {
- var
- $module = $(this),
- $group = $(this).find(settings.selector.group),
- $field = $(this).find(settings.selector.field),
- $errorPrompt = $(this).find(settings.selector.prompt),
-
- formErrors = [],
-
- selector = $module.selector || '',
- element = this,
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (typeof query == 'string'),
-
- namespace = settings.namespace,
- metadata = settings.metadata,
- className = settings.className,
- errors = settings.errors,
- module
- ;
-
- module = {
-
- initialize: function() {
- module.verbose('Initializing form validation');
- if(fields !== undefined || !$.isEmptyObject(fields) ) {
- // add default text if set
- if($.fn.defaultText !== undefined) {
- $.each(fields, function(fieldName, field) {
- module.field.add.defaultText(field);
- });
- }
- // attach event handler
- $module
- .on('submit.' + namespace, module.validate.form)
- ;
- }
- else {
- module.error(errors.noFields, $module);
- }
- },
-
- destroy: function() {
- $module
- .off(namespace)
- ;
- },
-
- field: {
- find: function(identifier) {
- var
- $field = $module.find(settings.selector.field)
- ;
- if( $field.filter('#' + identifier).size() > 0 ) {
- return $field.filter('#' + identifier);
- }
- else if( $field.filter('[name="' + identifier +'"]').size() > 0 ) {
- return $field.filter('[name="' + identifier +'"]');
- }
- else if( $field.filter('[data-' + metadata.validate + '="'+ identifier +'"]').size() > 0 ) {
- return $field.filter('[data-' + metadata.validate + '="'+ identifier +'"]');
- }
- return $('
');
- },
- add: {
- defaultText: function(field) {
- var
- $field = module.field.find(field.identifier)
- ;
- if(field.defaultText !== undefined) {
- $field.defaultText(field.defaultText);
- }
- },
- error: function(field, errors) {
- var
- $field = module.field.find(field.identifier),
- $errorGroup = $field.closest($group),
- $errorPrompt = $group.find($errorPrompt),
- promptExists = ($errorPrompt.size() !== 0)
- ;
- $errorGroup
- .addClass(className.error)
- ;
- if(settings.inlineError) {
- // create message container on first invalid validation attempt
- if(!promptExists) {
- $errorPrompt = $('
')
- .addClass(className.prompt)
- .insertBefore($field)
- ;
- }
- // add prompt message
- $errorPrompt
- .html(errors[0])
- .fadeIn(settings.animateSpeed)
- ;
- }
- }
- },
- remove: {
- error: function(field) {
- var
- $field = module.field.find(field.identifier),
- $errorGroup = $field.closest($group),
- $errorPrompt = $group.find($errorPrompt)
- ;
- $errorGroup
- .removeClass(className.error)
- ;
- if(settings.inlineError) {
- $errorPrompt.hide();
- }
- }
- }
- },
-
- validate: {
-
- form: function(event) {
- var
- allValid = true
- ;
- // reset errors
- formErrors = [];
- $.each(fields, function(fieldName, field){
- // form is invalid after first bad field, but keep checking
- if( !( module.validate.field(field) ) ) {
- allValid = false;
- }
- });
- // Evaluate form callbacks
- return (allValid)
- ? $.proxy(settings.onSuccess, this)(event)
- : $.proxy(settings.onFailure, this)(formErrors)
- ;
- },
-
- // takes a validation object and returns whether field passes validation
- field: function(field) {
- var
- $field = module.field.find(field.identifier),
- fieldValid = true,
- fieldErrors = []
- ;
- if(field.rules !== undefined) {
- // iterate over all validation types for a certain field
- $.each(field.rules, function(index, rule) {
- if( !( module.validate.rule(field, rule) ) ) {
- module.debug('Field is invalid', field.identifier, rule.type);
- fieldErrors.push(rule.prompt);
- fieldValid = false;
- }
- });
- }
- if(fieldValid) {
- module.field.remove.error(field, fieldErrors);
- settings.onValid($field);
- }
- else {
- formErrors = formErrors.concat(fieldErrors);
- module.field.add.error(field, fieldErrors);
- $.proxy(settings.onInvalid, $field)(fieldErrors);
- return false;
- }
- return true;
- },
-
- // takes validation rule and returns whether field passes rule
- rule: function(field, validation) {
- var
- $field = module.field.find(field.identifier),
- type = validation.type,
- defaultText = (field.defaultText !== undefined)
- ? field.defaultText
- : false,
- value = ($field.val() == defaultText)
- ? ''
- : $field.val(),
-
- bracketRegExp = /\[(.*?)\]/i,
- bracket = bracketRegExp.exec(type),
- isValid = true,
- ancillary,
- functionType
- ;
- // if bracket notation is used, pass in extra parameters
- if(bracket !== undefined && bracket != null) {
- ancillary = bracket[1];
- functionType = type.replace(bracket[0], '');
- isValid = $.proxy(settings.rules[functionType], $module)(value, ancillary);
- }
- // normal notation
- else {
- isValid = (type == 'checked')
- ? $field.filter(':checked').size() > 0
- : settings.rules[type](value)
- ;
- }
- return isValid;
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
-
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.validateForm.settings = {
-
- // module info
- moduleName : 'Validate Form Module',
- debug : true,
- verbose : false,
- namespace : 'validate',
-
- animateSpeed : 150,
- inlineError : false,
-
- onValid : function() {},
- onInvalid : function() {},
- onSuccess : function() { return true; },
- onFailure : function() { return false; },
-
- metadata : {
- validate: 'validate'
- },
-
- // errors
- errors: {
- method : 'The method you called is not defined.',
- noFields : 'No validation object specified.'
- },
-
-
- selector : {
- group : '.field',
- prompt : '.prompt',
- field : 'input, textarea, select'
- },
-
- className : {
- error : 'error',
- prompt : 'prompt'
- },
-
- rules: {
- empty: function(value) {
- return !(value === undefined || '' === value);
- },
- email: function(value){
- var
- emailRegExp = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
- ;
- return emailRegExp.test(value);
- },
- length: function(value, requiredLength) {
- return (value !== undefined)
- ? (value.length >= requiredLength)
- : false
- ;
- },
- not: function(value, notValue) {
- return (value != notValue);
- },
- maxLength: function(value, maxLength) {
- return (value !== undefined)
- ? (value.length <= maxLength)
- : false
- ;
- },
- match: function(value, matchingField) {
- // use either id or name of field
- var
- $form = $(this),
- matchingValue
- ;
- if($form.find('#' + matchingField).size() > 0) {
- matchingValue = $form.find('#' + matchingField).val();
- }
- else if($form.find('[name=' + matchingField +']').size() > 0) {
- matchingValue = $form.find('[name=' + matchingField + ']').val();
- }
- else if( $form.find('[data-validate="'+ matchingField +'"]').size() > 0 ) {
- matchingValue = $form.find('[data-validate="'+ matchingField +'"]').val();
- }
- return (matchingValue !== undefined)
- ? ( value.toString() == matchingValue.toString() )
- : false
- ;
- },
- url: function(value) {
- var
- urlRegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
- ;
- return urlRegExp.test(value);
- }
- }
-
-};
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/behavior/state.js b/node/src/files/components/semantic/uncompressed/modules/behavior/state.js
deleted file mode 100644
index f05887f5a..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/behavior/state.js
+++ /dev/null
@@ -1,649 +0,0 @@
-/* ******************************
- Module
- State
- Change text based on state context
- Hover/Pressed/Active/Inactive
- Author: Jack Lukic
- Last revision: May 2012
-
- State text module is used to apply text to a given node
- depending on the elements "state"
-
- State is either defined as "active" or "inactive" depending
- on the returned value of a test function
-
- Usage:
-
- $button
- .state({
- states: {
- active: true
- },
- text: {
- inactive: 'Follow',
- active : 'Following',
- enable : 'Add',
- disable : 'Remove'
- }
- })
- ;
-
- "Follow", turns to "Add" on hover, then "Following" on active
- and finally "Remove" on active hover
-
- This plugin works in correlation to API module and will, by default,
- use deffered object accept/reject to determine state.
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.state = function(parameters) {
- var
-
- $allModules = $(this),
-
- // make available in scope
- selector = $allModules.selector || '',
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
-
- // set up performance tracking
- time = new Date().getTime(),
- performance = [],
-
- invokedResponse
- ;
- $allModules
- .each(function() {
- var
- $module = $(this),
-
- settings = $.extend(true, {}, $.fn.state.settings, parameters),
-
- element = this,
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (typeof query == 'string'),
-
- // shortcuts
- namespace = settings.namespace,
- metadata = settings.metadata,
- className = settings.className,
- states = settings.states,
- text = settings.text,
-
- module
- ;
- module = {
-
- initialize: function() {
- module.verbose('Initializing module', element);
-
- // allow module to guess desired state based on element
- if(settings.automatic) {
- module.add.defaults();
- }
-
- // bind events with delegated events
- if(settings.context && selector !== '') {
- if( module.allows('hover') ) {
- $(element, settings.context)
- .on(selector, 'mouseenter.' + namespace, module.hover.enable)
- .on(selector, 'mouseleave.' + namespace, module.hover.disable)
- ;
- }
- if( module.allows('pressed') ) {
- $(element, settings.context)
- .on(selector, 'mousedown.' + namespace, module.pressed.enable)
- .on(selector, 'mouseup.' + namespace, module.pressed.disable)
- ;
- }
- if( module.allows('focus') ) {
- $(element, settings.context)
- .on(selector, 'focus.' + namespace, module.focus.enable)
- .on(selector, 'blur.' + namespace, module.focus.disable)
- ;
- }
- $(settings.context)
- .on(selector, 'mouseenter.' + namespace, module.text.change)
- .on(selector, 'mouseleave.' + namespace, module.text.reset)
- .on(selector, 'click.' + namespace, module.toggle)
- ;
-
- }
- else {
- if( module.allows('hover') ) {
- $module
- .on('mouseenter.' + namespace, module.hover.enable)
- .on('mouseleave.' + namespace, module.hover.disable)
- ;
- }
- if( module.allows('pressed') ) {
- $module
- .on('mousedown.' + namespace, module.pressed.enable)
- .on('mouseup.' + namespace, module.pressed.disable)
- ;
- }
- if( module.allows('focus') ) {
- $module
- .on('focus.' + namespace, module.focus.enable)
- .on('blur.' + namespace, module.focus.disable)
- ;
- }
- $module
- .on('mouseenter.' + namespace, module.text.change)
- .on('mouseleave.' + namespace, module.text.reset)
- .on('click.' + namespace, module.toggle)
- ;
- }
- $module
- .data('module-' + namespace, module)
- ;
- },
-
- destroy: function() {
- module.verbose('Destroying previous module', element);
- $module
- .off('.' + namespace)
- ;
- },
-
- refresh: function() {
- module.verbose('Refreshing selector cache', element);
- $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) );
- },
-
- 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');
- }
- },
-
- allows: function(state) {
- return states[state] || false;
- },
- enable: function(state) {
- if(module.allows(state)) {
- $module.addClass( className[state] );
- }
- },
- disable: function(state) {
- if(module.allows(state)) {
- $module.removeClass( className[state] );
- }
- },
- textFor: function(state) {
- return text[state] || false;
- },
-
- focus : {
- enable: function() {
- $module.addClass(className.focus);
- },
- disable: function() {
- $module.removeClass(className.focus);
- }
- },
-
- hover : {
- enable: function() {
- $module.addClass(className.hover);
- },
- disable: function() {
- $module.removeClass(className.hover);
- }
- },
-
- pressed : {
- enable: function() {
- $module
- .addClass(className.pressed)
- .one('mouseleave', module.pressed.disable)
- ;
- },
- disable: function() {
- $module.removeClass(className.pressed);
- }
- },
-
- // determines method for state activation
- toggle: function() {
- var
- apiRequest = $module.data(metadata.promise)
- ;
- if( module.allows('active') && module.is.enabled() ) {
- module.refresh();
- if(apiRequest !== undefined) {
- module.listenTo(apiRequest);
- }
- else {
- module.change();
- }
- }
- },
-
- listenTo: function(apiRequest) {
- module.debug('API request detected, waiting for state signal', apiRequest);
- if(apiRequest) {
- if(text.loading) {
- module.text.update(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();
- })
- ;
- }
- // xhr exists but set to false, beforeSend killed the xhr
- else {
- settings.activateTest = function(){ return false; };
- settings.deactivateTest = function(){ return false; };
- }
- },
-
- // checks whether active/inactive state can be given
- change: 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();
- },
-
- activate: function() {
- if( $.proxy(settings.activateTest, element)() ) {
- module.debug('Setting state to active');
- $module
- .addClass(className.active)
- ;
- module.text.update(text.active);
- }
- },
-
- deactivate: function() {
- if($.proxy(settings.deactivateTest, element)() ) {
- module.debug('Setting state to inactive');
- $module
- .removeClass(className.active)
- ;
- module.text.update(text.inactive);
- }
- },
-
- 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')
- ;
- }
- },
-
- text: {
-
- // finds text node to update
- get: function() {
- return (settings.selector.text)
- ? $module.find(settings.selector.text).text()
- : $module.html()
- ;
- },
-
- flash: function(text, duration) {
- var
- previousText = module.text.get()
- ;
- text = text || settings.text.flash;
- duration = duration || settings.flashDuration;
- module.text.update(text);
- setTimeout(function(){
- module.text.update(previousText);
- }, duration);
- },
-
- change: function() {
- module.verbose('Checking if text should be changed');
- if( module.is.textEnabled() ) {
- if( module.is.active() ) {
- if(text.hover) {
- module.verbose('Changing text to hover text', text.hover);
- module.text.update(text.hover);
- }
- else if(text.disable) {
- module.verbose('Changing text to disable text', text.disable);
- module.text.update(text.disable);
- }
- }
- else {
- if(text.hover) {
- module.verbose('Changing text to hover text', text.disable);
- module.text.update(text.hover);
- }
- else if(text.enable){
- module.verbose('Changing text to enable text', text.disable);
- module.text.update(text.enable);
- }
- }
- }
- },
-
- // on mouseout sets text to previous value
- reset : 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.text.update(activeText);
- }
- else if(inactiveText) {
- module.verbose('Resetting inactive text', activeText);
- module.text.update(inactiveText);
- }
- }
- },
-
- update: function(text) {
- var
- currentText = module.text.get()
- ;
- 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)
- ;
- }
- }
- }
- },
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- performance: {
- log: function(message) {
- var
- currentTime,
- executionTime
- ;
- if(settings.performance) {
- currentTime = new Date().getTime();
- executionTime = currentTime - time;
- time = currentTime;
- performance.push({
- 'Name' : message,
- 'Execution Time' : executionTime
- });
- clearTimeout(module.performance.timer);
- module.performance.timer = setTimeout(module.performance.display, 100);
- }
- },
- display: function() {
- var
- title = settings.moduleName + ' Performance (' + selector + ')',
- caption = settings.moduleName + ': ' + selector + '(' + $allModules.size() + ' elements)'
- ;
- if(console.group !== 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']);
- });
- }
- console.groupEnd();
- performance = [];
- }
- }
- },
- verbose: function() {
- if(settings.verbose && settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- debug: function() {
- if(settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- error: function() {
- if(console.log !== undefined) {
- module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':');
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- if(instance !== undefined) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.state.settings = {
-
- // module info
- moduleName : 'State Module',
-
- // debug output
- debug : true,
-
- // verbose debug output
- verbose : false,
-
- // namespace for events
- namespace : 'state',
-
- // debug data includes performance
- performance: true,
-
- // callback occurs on state change
- 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 : 3000,
-
- // selector filter
- filter : {
- text : '.loading, .disabled',
- active : '.disabled'
- },
-
- context : false,
- // errors
- errors: {
- method : 'The method you called is not defined.'
- },
-
- // metadata
- metadata: {
- promise : 'promise',
- storedText : 'stored-text'
- },
-
- // change class on state
- className: {
- focus : 'focus',
- hover : 'hover',
- pressed : 'down',
- active : 'active',
- loading : 'loading'
- },
-
- selector: {
- // selector for text node
- text: false
- },
-
- defaults : {
- input: {
- hover : true,
- focus : true,
- pressed : true,
- loading : false,
- active : false
- },
- button: {
- hover : true,
- focus : false,
- pressed : true,
- active : false,
- loading : true
- }
- },
-
- states : {
- hover : true,
- focus : true,
- pressed : true,
- loading : false,
- active : false
- },
-
- text : {
- flash : false,
- hover : false,
- active : false,
- inactive : false,
- enable : false,
- disable : false
- }
-
-};
-
-
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/chat.js b/node/src/files/components/semantic/uncompressed/modules/chat.js
deleted file mode 100644
index 017a1af4f..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/chat.js
+++ /dev/null
@@ -1,697 +0,0 @@
-/* ******************************
- Module - Chat Room
- Author: Jack Lukic
- Notes: First Commit Aug 8, 2012
-
- Designed as a simple modular chat component
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.chat = function(key, channelName, parameters) {
- var
- settings = $.extend(true, {}, $.fn.chat.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $expandButton = $module.find(settings.selector.expandButton),
- $userListButton = $module.find(settings.selector.userListButton),
- $userList = $module.find(settings.selector.userList),
- $room = $module.find(settings.selector.room),
- $userCount = $module.find(settings.selector.userCount),
-
- $log = $module.find(settings.selector.log),
- $message = $module.find(settings.selector.message),
-
- $messageInput = $module.find(settings.selector.messageInput),
- $messageButton = $module.find(settings.selector.messageButton),
-
- instance = $module.data('module'),
-
- className = settings.className,
- namespace = settings.namespace,
-
- html = '',
- users = {},
- loggedInUser,
-
- message,
- count,
-
- height,
-
- pusher,
- module
- ;
-
- module = {
-
- channel: false,
- width: {
- log : $log.width(),
- userList : $userList.outerWidth()
- },
-
- initialize: function() {
-
- // check error conditions
- if(Pusher === undefined) {
- module.error(settings.errors.pusher);
- }
- if(key === undefined || channelName === undefined) {
- module.error(settings.errors.key);
- return false;
- }
- else if( !(settings.endpoint.message || settings.endpoint.authentication) ) {
- module.error(settings.errors.endpoint);
- return false;
- }
-
- // define pusher
- pusher = new Pusher(key);
- Pusher.channel_auth_endpoint = settings.endpoint.authentication;
-
- module.channel = pusher.subscribe(channelName);
-
- module.channel.bind('pusher:subscription_succeeded', module.user.list.create);
- module.channel.bind('pusher:subscription_error', module.error);
- module.channel.bind('pusher:member_added', module.user.joined);
- module.channel.bind('pusher:member_removed', module.user.left);
- module.channel.bind('update_messages', module.message.receive);
-
- $.each(settings.customEvents, function(label, value) {
- module.channel.bind(label, value);
- });
-
- // expandable with states
- if( $.fn.hoverClass !== undefined && $.fn.downClass !== undefined ) {
- $expandButton
- .hoverClass()
- .downClass()
- ;
- $userListButton
- .hoverClass()
- .downClass()
- ;
- $messageButton
- .hoverClass()
- .downClass()
- ;
- }
- // bind module events
- $userListButton
- .on('click.' + namespace, module.event.toggleUserList)
- ;
- $expandButton
- .on('click.' + namespace, module.event.toggleExpand)
- ;
- $messageInput
- .on('keydown.' + namespace, module.event.input.keydown)
- .on('keyup.' + namespace, module.event.input.keyup)
- ;
- $messageButton
- .on('mouseenter.' + namespace, module.event.hover)
- .on('mouseleave.' + namespace, module.event.hover)
- .on('click.' + namespace, module.event.submit)
- ;
- // scroll to bottom of chat log
- $log
- .animate({
- scrollTop: $log.prop('scrollHeight')
- }, 400)
- ;
- $module
- .data('module', module)
- .addClass(className.loading)
- ;
-
- },
-
- // refresh module
- refresh: function() {
- // reset width calculations
- $userListButton
- .removeClass(className.active)
- ;
- module.width = {
- log : $log.width(),
- userList : $userList.outerWidth()
- };
- if( $userListButton.hasClass(className.active) ) {
- module.user.list.hide();
- }
- $module.data('module', module);
- },
-
- user: {
-
- updateCount: function() {
- if(settings.userCount) {
- users = $module.data('users');
- count = 0;
- $.each(users, function(index){
- count++;
- });
- $userCount
- .html( settings.templates.userCount(count) )
- ;
- }
- },
-
- // add user to user list
- joined: function(member) {
- users = $module.data('users');
- if(member.id != 'anonymous' && users[ member.id ] === undefined ) {
- users[ member.id ] = member.info;
- if(settings.randomColor && member.info.color === undefined) {
- member.info.color = settings.templates.color(member.id);
- }
- html = settings.templates.userList(member.info);
- if(member.info.isAdmin) {
- $(html)
- .prependTo($userList)
- .preview({
- type : 'user',
- placement : 'left'
- })
- ;
- }
- else {
- $(html)
- .appendTo($userList)
- .preview({
- type : 'user',
- placement : 'left'
- })
- ;
- }
- if( $.fn.preview !== undefined ) {
- $userList
- .children()
- .last()
- .preview({
- type: 'user',
- placement: 'left'
- })
- ;
- }
- if(settings.partingMessages) {
- $log
- .append( settings.templates.joined(member.info) )
- ;
- module.message.scroll.test();
- }
- module.user.updateCount();
- }
- },
-
- // remove user from user list
- left: function(member) {
- users = $module.data('users');
- if(member !== undefined && member.id !== 'anonymous') {
- delete users[ member.id ];
- $module
- .data('users', users)
- ;
- $userList
- .find('[data-id='+ member.id + ']')
- .remove()
- ;
- if(settings.partingMessages) {
- $log
- .append( settings.templates.left(member.info) )
- ;
- module.message.scroll.test();
- }
- module.user.updateCount();
- }
- },
-
- list: {
-
- // receives list of members and generates user list
- create: function(members) {
- users = {};
- members.each(function(member) {
- if(member.id !== 'anonymous' && member.id !== 'undefined') {
- if(settings.randomColor && member.info.color === undefined) {
- member.info.color = settings.templates.color(member.id);
- }
- // sort list with admin first
- html = (member.info.isAdmin)
- ? settings.templates.userList(member.info) + html
- : html + settings.templates.userList(member.info)
- ;
- users[ member.id ] = member.info;
- }
- });
- $module
- .data('users', users)
- .data('user', users[members.me.id] )
- .removeClass(className.loading)
- ;
- $userList
- .html(html)
- ;
- if( $.fn.preview !== undefined ) {
- $userList
- .children()
- .preview({
- type: 'user',
- placement: 'left'
- })
- ;
- }
- module.user.updateCount();
- $.proxy(settings.onJoin, $userList.children())();
- },
-
- // shows user list
- show: function() {
- $log
- .animate({
- width: (module.width.log - module.width.userList)
- }, {
- duration : settings.speed,
- easing : settings.easing,
- complete : module.message.scroll.move
- })
- ;
- },
-
- // hides user list
- hide: function() {
- $log
- .stop()
- .animate({
- width: (module.width.log)
- }, {
- duration : settings.speed,
- easing : settings.easing,
- complete : module.message.scroll.move
- })
- ;
- }
-
- }
-
- },
-
- message: {
-
- // handles scrolling of chat log
- scroll: {
- test: function() {
- height = $log.prop('scrollHeight') - $log.height();
- if( Math.abs($log.scrollTop() - height) < settings.scrollArea) {
- module.message.scroll.move();
- }
- },
-
- move: function() {
- height = $log.prop('scrollHeight') - $log.height();
- $log
- .scrollTop(height)
- ;
- }
- },
-
- // sends chat message
- send: function(message) {
- if( !module.utils.emptyString(message) ) {
- $.api({
- url : settings.endpoint.message,
- method : 'POST',
- data : {
- 'chat_message': {
- content : message,
- timestamp : new Date().getTime()
- }
- }
- });
- }
- },
-
- // receives chat response and processes
- receive: function(response) {
- message = response.data;
- users = $module.data('users');
- loggedInUser = $module.data('user');
- if(users[ message.userID] !== undefined) {
- // logged in user's messages already pushed instantly
- if(loggedInUser === undefined || loggedInUser.id != message.userID) {
- message.user = users[ message.userID ];
- module.message.display(message);
- }
- }
- },
-
- // displays message in chat log
- display: function(message) {
- $log
- .append( settings.templates.message(message) )
- ;
- module.message.scroll.test();
- $.proxy(settings.onMessage, $log.children().last() )();
- }
-
- },
-
- expand: function() {
- $module
- .addClass(className.expand)
- ;
- $.proxy(settings.onExpand, $module )();
- module.refresh();
- },
-
- contract: function() {
- $module
- .removeClass(className.expand)
- ;
- $.proxy(settings.onContract, $module )();
- module.refresh();
- },
-
- event: {
-
- input: {
-
- keydown: function(event) {
- if(event.which == 13) {
- $messageButton
- .addClass(className.down)
- ;
- }
- },
-
- keyup: function(event) {
- if(event.which == 13) {
- $messageButton
- .removeClass(className.down)
- ;
- module.event.submit();
- }
- }
-
- },
-
- // handles message form submit
- submit: function() {
- var
- message = $messageInput.val(),
- loggedInUser = $module.data('user')
- ;
- if(loggedInUser !== undefined && !module.utils.emptyString(message)) {
- module.message.send(message);
- // display immediately
- module.message.display({
- user: loggedInUser,
- text: message
- });
- module.message.scroll.move();
- $messageInput
- .val('')
- ;
-
- }
- },
-
- // handles button click on expand button
- toggleExpand: function() {
- if( !$module.hasClass(className.expand) ) {
- $expandButton
- .addClass(className.active)
- ;
- module.expand();
- }
- else {
- $expandButton
- .removeClass(className.active)
- ;
- module.contract();
- }
- },
-
- // handles button click on user list button
- toggleUserList: function() {
- if( !$log.is(':animated') ) {
- if( !$userListButton.hasClass(className.active) ) {
- $userListButton
- .addClass(className.active)
- ;
- module.user.list.show();
- }
- else {
- $userListButton
- .removeClass('active')
- ;
- module.user.list.hide();
- }
- }
-
- }
- },
-
- utils: {
-
- emptyString: function(string) {
- if(typeof string == 'string') {
- return (string.search(/\S/) == -1);
- }
- return false;
- }
-
- },
-
- // standard methods
- debug: function(message) {
- if(settings.debug) {
- console.info(settings.moduleName + ': ' + message);
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.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.chat.settings = {
-
- moduleName : 'Chat Module',
- debug : false,
- namespace : 'chat',
-
- onJoin : function(){},
- onMessage : function(){},
- onExpand : function(){},
- onContract : function(){},
-
- customEvents : {},
-
- partingMessages : false,
- userCount : true,
-
- randomColor : true,
-
- speed : 300,
- easing : 'easeOutQuint',
-
- // pixels from bottom of chat log that should trigger auto scroll to bottom
- scrollArea : 9999,
-
- endpoint : {
- message : false,
- authentication : false
- },
-
- errors: {
- method : 'The method you called is not defined',
- endpoint : 'Please define a message and authentication endpoint.',
- key : 'You must specify a pusher key and channel.',
- pusher : 'You must include the Pusher library.'
- },
-
- className : {
- expand : 'expand',
- active : 'active',
- hover : 'hover',
- down : 'down',
- loading : 'loading'
- },
-
- selector : {
- userCount : '.actions .message',
- userListButton : '.actions .button.user-list',
- expandButton : '.actions .button.expand',
- room : '.room',
- userList : '.room .user-list',
- log : '.room .log',
- message : '.room .log .message',
- author : '.room log .message .author',
- messageInput : '.talk input',
- messageButton : '.talk .send.button'
- },
-
- templates: {
-
- userCount: function(number) {
- return number + ' users in chat';
- },
-
- color: function(userID) {
- var
- colors = [
- '#000000',
- '#333333',
- '#666666',
- '#999999',
- '#CC9999',
- '#CC6666',
- '#CC3333',
- '#993333',
- '#663333',
- '#CC6633',
- '#CC9966',
- '#CC9933',
- '#999966',
- '#CCCC66',
- '#99CC66',
- '#669933',
- '#669966',
- '#33A3CC',
- '#336633',
- '#33CCCC',
- '#339999',
- '#336666',
- '#336699',
- '#6666CC',
- '#9966CC',
- '#333399',
- '#663366',
- '#996699',
- '#993366',
- '#CC6699'
- ]
- ;
- return colors[ Math.floor( Math.random() * colors.length) ];
- },
-
- message: function(message) {
- var
- html = ''
- ;
- if(message.user.isAdmin) {
- message.user.color = '#55356A';
- html += '
';
- html += '
';
- }
- /*
- else if(message.user.isPro) {
- html += '
';
- html += '
';
- }
- */
- else {
- html += '
';
- }
- html += '
';
- if(message.user.color !== undefined) {
- html += '' + message.user.name + ': ';
- }
- else {
- html += '' + message.user.name + ': ';
- }
- html += ''
- + message.text
- + '
'
- + '
'
- ;
- return html;
- },
-
- joined: function(member) {
- return (typeof member.name !== undefined)
- ? '
' + member.name + ' has joined the chat.
'
- : false
- ;
- },
- left: function(member) {
- return (typeof member.name !== undefined)
- ? '
' + member.name + ' has left the chat.
'
- : false
- ;
- },
-
- userList: function(member) {
- var
- html = ''
- ;
- if(member.isAdmin) {
- member.color = '#55356A';
- }
- html += ''
- + '
';
- return html;
- }
-
- }
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/checkbox.js b/node/src/files/components/semantic/uncompressed/modules/checkbox.js
deleted file mode 100644
index 23fedc290..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/checkbox.js
+++ /dev/null
@@ -1,283 +0,0 @@
-/* ******************************
- Semantic Module: Checkbox
- Author: Jack Lukic
- Notes: First Commit March 25, 2013
-
- Simple plug-in which maintains the state for ui checkbox
- This can be done without javascript, only in instances
- where each checkbox is assigned a unique ID. This provides a separate
- programmatic option when that is not possible.
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.checkbox = function(parameters) {
- var
- $allModules = $(this),
-
- settings = $.extend(true, {}, $.fn.checkbox.settings, parameters),
-
- eventNamespace = '.' + settings.namespace,
- moduleNamespace = 'module-' + settings.namespace,
-
- selector = $allModules.selector || '',
- time = new Date().getTime(),
- performance = [],
-
- query = arguments[0],
- methodInvoked = (typeof query == 'string'),
- queryArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
-
- $allModules
- .each(function() {
- var
- $module = $(this),
- $input = $(this).find(settings.selector.input),
-
- selector = $module.selector || '',
- element = this,
- instance = $module.data('module-' + settings.namespace),
-
- className = settings.className,
- namespace = settings.namespace,
- errors = settings.errors,
- module
- ;
-
- module = {
-
- initialize: function() {
- if(settings.context && selector !== '') {
- module.verbose('Initializing checkbox with delegated events', $module);
- $(element, settings.context)
- .on(selector, 'click' + eventNamespace, module.toggle)
- .data(moduleNamespace, module)
- ;
- }
- else {
- module.verbose('Initializing checkbox with bound events', $module);
- $module
- .on('click' + eventNamespace, module.toggle)
- .data(moduleNamespace, module)
- ;
- }
- },
-
- destroy: function() {
- module.verbose('Destroying previous module for', $module);
- $module
- .off(namespace)
- ;
- },
-
- enable: function() {
- module.debug('Enabling checkbox');
- $module
- .addClass(className.active)
- ;
- $input
- .prop('checked', true)
- ;
- $.proxy(settings.onChange, $input.get())();
- $.proxy(settings.onEnable, $input.get())();
- },
-
- disable: function() {
- module.debug('Disabling checkbox');
- $module
- .removeClass(className.active)
- ;
- $input
- .prop('checked', false)
- ;
- $.proxy(settings.onChange, $input.get())();
- $.proxy(settings.onDisable, $input.get())();
- },
-
- toggle: function() {
- if( $input.prop('checked') === undefined || !$input.prop('checked') ) {
- module.enable();
- }
- else {
- module.disable();
- }
- },
-
- setting: function(name, value) {
- if(value !== undefined) {
- if( $.isPlainObject(name) ) {
- $.extend(true, settings, name);
- }
- else {
- settings[name] = value;
- }
- }
- else {
- return settings[name];
- }
- },
- internal: function(name, value) {
- if(value !== undefined) {
- if( $.isPlainObject(name) ) {
- $.extend(true, module, name);
- }
- else {
- module[name] = value;
- }
- }
- else {
- return module[name];
- }
- },
- debug: function() {
- if(settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- verbose: function() {
- if(settings.verbose && settings.debug) {
- module.performance.log(arguments[0]);
- module.verbose = Function.prototype.bind.call(console.info, console, settings.moduleName + ':');
- }
- },
- error: function() {
- if(console.log !== undefined) {
- module.error = Function.prototype.bind.call(console.log, console, settings.moduleName + ':');
- }
- },
- 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,
- 'Execution Time' : executionTime
- });
- clearTimeout(module.performance.timer);
- module.performance.timer = setTimeout(module.performance.display, 100);
- }
- },
- display: function() {
- var
- title = settings.moduleName,
- caption = settings.moduleName + ': ' + selector + '(' + $allModules.size() + ' elements)',
- totalExecutionTime = 0
- ;
- if(selector) {
- title += 'Performance (' + selector + ')';
- }
- if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
- console.groupCollapsed(title);
- if(console.table) {
- $.each(performance, function(index, data) {
- totalExecutionTime += data['Execution Time'];
- });
- console.table(performance);
- }
- else {
- $.each(performance, function(index, data) {
- totalExecutionTime += data['Execution Time'];
- });
- }
- console.log('Total Execution Time:', totalExecutionTime +'ms');
- console.groupEnd();
- performance = [];
- time = false;
- }
- }
- },
- invoke: function(query, passedArguments, context) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || queryArguments;
- context = element || context;
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- module.verbose('Executing invoked function', found);
- return found.apply(context, passedArguments);
- }
- return found || false;
- }
- };
-
- if(methodInvoked) {
- if(instance === undefined) {
- module.initialize();
- }
- invokedResponse = module.invoke(query);
- }
- else {
- if(instance !== undefined) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- return (invokedResponse)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.checkbox.settings = {
-
- moduleName : 'Checkbox Module',
- namespace : 'checkbox',
-
- verbose : true,
- debug : true,
- performance : true,
-
- // delegated event context
- context : false,
-
- onChange : function(){},
- onEnable : function(){},
- onDisable : function(){},
-
- errors : {
- method : 'The method you called is not defined.'
- },
-
- selector : {
- input : 'input'
- },
-
- className : {
- active : 'active'
- }
-
-};
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/modal.js b/node/src/files/components/semantic/uncompressed/modules/modal.js
deleted file mode 100644
index d3f674ad4..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/modal.js
+++ /dev/null
@@ -1,354 +0,0 @@
-/* ******************************
- Modal
- Author: Jack Lukic
- Notes: First Commit May 14, 2012
-
- Manages modal state and
- stage dimming
-
-****************************** */
-
-;(function ( $, window, document, undefined ) {
-
- $.dimScreen = function(parameters) {
- var
- // if parameter is string it is callback function
- settings = (typeof parameters == 'function')
- ? $.extend({}, $.fn.modal.settings, { dim: parameters })
- : $.extend({}, $.fn.modal.settings, parameters),
-
- $context = $(settings.context),
- $dimmer = $context.children(settings.selector.dimmer),
- dimmerExists = ($dimmer.size() > 0),
- currentOpacity = $dimmer.css('opacity')
- ;
- if(!dimmerExists) {
- $dimmer = $('
')
- .attr('id','dimmer')
- .html('
')
- ;
- $context
- .append($dimmer)
- ;
- }
- if(currentOpacity != settings.opacity) {
- $dimmer
- .one('click', function() {
- settings.unDim();
- $.unDimScreen();
- })
- ;
- if(settings.duration === 0) {
- $dimmer
- .css({
- visibility : 'visible'
- })
- .find('.content')
- .css({
- opacity : settings.opacity,
- visibility : 'visible'
- })
- ;
- }
- else {
- $dimmer
- .css({
- visibility : 'visible'
- })
- .find('.content')
- .css({
- opacity : 0,
- visibility : 'visible'
- })
- .fadeTo(settings.duration, settings.opacity, settings.dim)
- ;
- }
- }
- return this;
- };
- $.unDimScreen = function(parameters) {
- var
- settings = (typeof parameters == 'function')
- ? $.extend({}, $.fn.modal.settings, { unDim: parameters })
- : $.extend({}, $.fn.modal.settings, parameters),
-
- $context = $(settings.context),
- $dimmer = $context.children(settings.selector.dimmer),
- dimmerExists = ($dimmer.size() > 0)
- ;
- if(dimmerExists) {
- // callback before unDim
- settings.unDim();
- if(settings.duration === 0) {
- $dimmer
- .css({
- visibility: 'hidden'
- })
- .remove()
- ;
- }
- else {
- $dimmer
- .find('.content')
- .fadeTo(settings.duration, 0, function(){
- $dimmer.remove();
- })
- ;
- }
- }
- return this;
- };
-
- $.fn.modal = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.modal.settings, parameters),
- // make arguments available
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
-
- $(this)
- .each(function() {
- var
- $modal = $(this),
-
- $closeButton = $modal.find(settings.selector.closeButton),
- $dimmer = $(settings.context).find(settings.selector.dimmer),
- $modals = $(settings.context).children(settings.selector.modal),
- $otherModals = $modals.not($modal),
-
- instance = $modal.data('module-' + settings.namespace),
- methodInvoked = (typeof query == 'string'),
-
- className = settings.className,
- namespace = settings.namespace,
-
- module
- ;
-
- module = {
-
- initialize: function() {
- // attach events
- $modal
- .on('modalShow.' + namespace, module.show)
- .on('modalHide.' + namespace, module.hide)
- .data('module-' + namespace, module)
- ;
- },
-
- show: function() {
- var
- modalHeight = $modal.outerHeight(),
- windowHeight = $(window).height(),
-
- cantFit = (modalHeight > windowHeight),
- modalType = (cantFit)
- ? 'absolute'
- : 'fixed',
- topCentering = (cantFit)
- ? '0'
- : '50%',
- offsetTop = (cantFit)
- ? (windowHeight / 8)
- : -( (modalHeight - settings.closeSpacing) / 2),
-
- finalPosition = ($modal.css('position') == 'absolute')
- ? offsetTop + $(window).prop('pageYOffset')
- : offsetTop,
- startPosition = finalPosition + settings.animationOffset
- ;
- // set top margin as offset
- if($.fn.popIn !== undefined) {
- $modal
- .addClass(modalType)
- .css({
- display : 'block',
- opacity : 0,
- top: topCentering,
- marginTop : finalPosition + 'px'
- })
- .popIn()
- ;
- }
- else {
- $modal
- .addClass(modalType)
- .css({
- display : 'block',
- opacity : 0,
- top: topCentering,
- marginTop : startPosition + 'px'
- })
- .animate({
- opacity : 1,
- marginTop : finalPosition + 'px'
- }, (settings.duration + 300), settings.easing)
- ;
- }
- if( $otherModals.is(':visible') ) {
- $otherModals
- .filter(':visible')
- .hide()
- ;
- }
- $.dimScreen({
- context : settings.context,
- duration : 0,
- dim : function() {
- $(document)
- .on('keyup.' + namespace, function(event) {
- var
- keyCode = event.which,
- escapeKey = 27
- ;
- switch(keyCode) {
- case escapeKey:
- $modal.trigger('modalHide');
- event.preventDefault();
- break;
- }
- })
- ;
- $closeButton
- .one('click', function() {
- $modal.trigger('modalHide');
- })
- ;
- settings.dim();
- },
- unDim: function() {
- $modal.trigger('modalHide');
- $closeButton.unbind('click');
- }
- });
- },
-
- hide: function() {
- // remove keyboard detection
- $(document)
- .off('keyup.' + namespace)
- ;
- $.unDimScreen({
- duration: 0,
- unDim: function() {
- $modal
- .popOut(200)
- ;
- settings.unDim();
- }
- });
- },
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
- };
-
- $.fn.modal.settings = {
-
- moduleName : 'Modal',
- debug : false,
- namespace : 'modal',
-
- errors: {
- method : 'The method you called is not defined'
- },
-
- dim : function(){},
- unDim : function(){},
- hide : function(){},
- show : function(){},
-
- context : 'body',
- opacity : 0.8,
-
- closeSpacing : 25,
- animationOffset : 15,
-
- duration : 400,
- easing : 'easeOutExpo',
-
- selector : {
- dimmer : '#dimmer',
- modal : '.modal',
- closeButton : '.close'
- }
- };
-
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/modules/nag.js b/node/src/files/components/semantic/uncompressed/modules/nag.js
deleted file mode 100644
index f3c0bc3a3..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/nag.js
+++ /dev/null
@@ -1,350 +0,0 @@
-/* ******************************
- Nag
- Author: Jack Lukic
- Notes: First Commit July 19, 2012
-
- Simple fixed position nag
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.nag = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.nag.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $close = $module.find(settings.selector.close),
-
- $context = $(settings.context),
-
- instance = $module.data('module'),
- className = settings.className,
-
- 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() {
- // calculate module offset once
- moduleOffset = $module.offset();
- moduleHeight = $module.outerHeight();
- contextWidth = $context.outerWidth();
- contextHeight = $context.outerHeight();
- contextOffset = $context.offset();
-
- $module
- .data('module', module)
- ;
- $close
- .on('mouseenter mouseleave', module.event.hover)
- .on('click', module.dismiss)
- ;
- // lets avoid javascript if we dont need to reposition
- if(settings.context == window && settings.position == 'fixed') {
- $module
- .addClass(className.fixed)
- ;
- }
- if(settings.sticky) {
- // retrigger on scroll for absolute
- if(settings.position == 'absolute') {
- $context
- .on('scroll resize', module.event.scroll)
- ;
- }
- // fixed is always relative to window
- else {
- $(window)
- .on('scroll resize', module.event.scroll)
- ;
- }
- // fire once to position on init
- $.proxy(module.event.scroll, this)();
- }
- if(settings.followLink) {
- $module
- .on('mouseenter mouseleave', module.event.hover)
- .on('click', module.followLink)
- ;
- }
-
- if(settings.displayTime > 0) {
- setTimeout(module.hide, settings.displayTime);
- }
- if(module.should.show()) {
- if( !$module.is(':visible') ) {
- module.show();
- }
- }
- else {
- module.hide();
- }
- },
-
- refresh: function() {
- moduleOffset = $module.offset();
- moduleHeight = $module.outerHeight();
- contextWidth = $context.outerWidth();
- contextHeight = $context.outerHeight();
- contextOffset = $context.offset();
- },
-
- show: function() {
- if($.fn.popIn !== undefined) {
- $module
- .popIn(settings.duration)
- ;
- }
- else {
- $module
- .fadeIn(settings.duration, settings.easing)
- ;
- }
- },
- hide: function() {
- $module
- .fadeOut(settings.duration, settings.easing)
- ;
- },
-
- stick: function() {
- module.refresh();
-
- if(settings.position == 'fixed') {
- var
- windowScroll = $(window).prop('pageYOffset') || $(window).scrollTop(),
- fixedOffset = ( $module.hasClass(className.bottom) )
- ? contextOffset.top + (contextHeight - moduleHeight) - windowScroll
- : contextOffset.top - windowScroll
- ;
- $module
- .css({
- position : 'fixed',
- top : fixedOffset,
- left : contextOffset.left,
- width : contextWidth - settings.scrollBarWidth
- })
- ;
- }
- else {
- $module
- .css({
- top : yPosition
- })
- ;
- }
- },
- unStick: function() {
- $module
- .css({
- top : ''
- })
- ;
- },
- dismiss: function() {
- if(settings.storageMethod) {
- module.storage.set(settings.storedKey, settings.storedValue);
- }
- module.hide();
- },
-
- should: {
- show: function() {
- if( module.storage.get(settings.storedKey) == settings.storedValue) {
- return false;
- }
- return true;
- },
- stick: function() {
- yOffset = $context.prop('pageYOffset') || $context.scrollTop();
- yPosition = ( $module.hasClass(className.bottom) )
- ? (contextHeight - $module.outerHeight() ) + yOffset
- : yOffset
- ;
- // absolute position calculated when y offset met
- if(yPosition > moduleOffset.top) {
- return true;
- }
- else if(settings.position == 'fixed') {
- return true;
- }
- return false;
- }
- },
-
- followLink: function() {
- if($.fn.followLink !== undefined) {
- $module
- .followLink()
- ;
- }
- },
-
- storage: {
-
- set: function(key, value) {
- if(settings.storageMethod == 'local' && store !== undefined) {
- store.set(key, value);
- }
- // store by cookie
- else if($.cookie !== undefined) {
- $.cookie(key, value);
- }
- else {
- module.error(settings.errors.noStorage);
- }
- },
- get: function(key) {
- if(settings.storageMethod == 'local' && store !== undefined) {
- return store.get(key);
- }
- // get by cookie
- else if($.cookie !== undefined) {
- return $.cookie(key);
- }
- else {
- module.error(settings.errors.noStorage);
- }
- }
-
- },
-
- event: {
- hover: function() {
- $(this)
- .toggleClass(className.hover)
- ;
- },
- scroll: function() {
- if(timer !== undefined) {
- clearTimeout(timer);
- }
- timer = setTimeout(function() {
- if(module.should.stick() ) {
- requestAnimationFrame(module.stick);
- }
- else {
- module.unStick();
- }
- }, settings.lag);
- }
- },
-
- error: function(error) {
- console.log('Nag Module:' + error);
- },
-
- // allows for dot notation method calls
- 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.errors.method);
- return false;
- });
- }
- if ( $.isFunction( method ) ) {
- return method.apply(context, methodArguments);
- }
- // return retrieved variable or chain
- return method;
- }
-
- };
-
- if(instance !== undefined && moduleArguments) {
- if(moduleArguments[0] == 'invoke') {
- moduleArguments = Array.prototype.slice.call( moduleArguments, 1 );
- }
- return module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
- }
- module.initialize();
-
- })
- ;
- return this;
- };
-
- $.fn.nag.settings = {
-
- // set to zero to manually dismiss, otherwise hides on its own
- displayTime : 0,
-
- // if there is a link to follow
- followLink : true,
-
- // method of stickyness
- position : 'fixed',
- scrollBarWidth : 18,
-
- // type of storage to use
- storageMethod : 'cookie',
-
- // value to store in dismissed localstorage/cookie
- storedKey : 'nag',
- storedValue : 'dismiss',
-
- // need to calculate stickyness on scroll
- sticky : true,
-
- // how often to check scroll event
- lag : 0,
-
- // context for scroll event
- context : window,
-
- errors: {
- noStorage : 'Neither $.cookie or store is defined. A storage solution is required for storing state',
- followLink : 'Follow link is set but the plugin is not included'
- },
-
- className : {
- bottom : 'bottom',
- hover : 'hover',
- fixed : 'fixed'
- },
-
- selector : {
- close: '.icon.close'
- },
-
- speed : 500,
- easing : 'easeOutQuad'
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/popup.js b/node/src/files/components/semantic/uncompressed/modules/popup.js
deleted file mode 100644
index 9fa717cfd..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/popup.js
+++ /dev/null
@@ -1,590 +0,0 @@
-/* ******************************
- Tooltip / Popup
- Author: Jack Lukic
- Notes: First Commit Sep 07, 2012
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.popup = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.popup.settings, parameters),
- // make arguments available
- moduleArguments = arguments || false,
- invokedResponse
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $window = $(window),
- $offsetParent = $module.offsetParent(),
- $popup = (settings.inline)
- ? $module.next(settings.selector.popup)
- : $window.children(settings.selector.popup).last(),
-
- timer,
- recursionDepth = 0,
-
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (instance !== undefined && typeof parameters == 'string'),
-
- selector = settings.selector,
- className = settings.className,
- errors = settings.errors,
- metadata = settings.metadata,
- namespace = settings.namespace,
- module
- ;
-
- module = {
-
- // binds events
- initialize: function() {
- if(settings.event == 'hover') {
- $module
- .on('mouseenter.' + namespace, module.event.mouseenter)
- .on('mouseleave.' + namespace, module.event.mouseleave)
- ;
- }
- else {
- $module
- .on(settings.event + '.' + namespace, module.event[settings.event])
- ;
- }
- $window
- .on('resize.' + namespace, module.event.resize)
- ;
- $module
- .data('module-' + namespace, module)
- ;
- },
-
- refresh: function() {
- $popup = (settings.inline)
- ? $module.next(selector.popup)
- : $window.children(selector.popup).last()
- ;
- $offsetParent = $module.offsetParent();
- },
-
- destroy: function() {
- module.debug('Destroying existing popups');
- $module
- .off('.' + namespace)
- ;
- $popup
- .remove()
- ;
- },
-
- event: {
- mouseenter: function(event) {
- var element = this;
- timer = setTimeout(function() {
- $.proxy(module.toggle, element)();
- if( $(element).hasClass(className.visible) ) {
- event.stopPropagation();
- }
- }, settings.delay);
- },
- mouseleave: function(event) {
- clearTimeout(timer);
- if( $module.is(':visible') ) {
- module.hide();
- }
- },
- click: function(event) {
- $.proxy(module.toggle, this)();
- if( $(this).hasClass(className.visible) ) {
- event.stopPropagation();
- }
- },
- resize: function() {
- if( $popup.is(':visible') ) {
- module.position();
- }
- }
- },
-
- // generates popup html from metadata
- create: function() {
- module.debug('Creating pop-up content');
- var
- html = $module.data(metadata.html) || settings.html,
- title = $module.data(metadata.title) || settings.title,
- content = $module.data(metadata.content) || $module.attr('title') || settings.content
- ;
- if(html || content || title) {
- if(!html) {
- html = settings.template({
- title : title,
- content : content
- });
- }
- $popup = $('
')
- .addClass(className.popup)
- .html(html)
- ;
- if(settings.inline) {
- $popup
- .insertAfter($module)
- ;
- }
- else {
- $popup
- .appendTo( $('body') )
- ;
- }
- }
- else {
- module.error(errors.content);
- }
- },
-
- remove: function() {
- $popup
- .remove()
- ;
- },
-
- get: {
- offstagePosition: function() {
- var
- boundary = {
- top : $(window).scrollTop(),
- bottom : $(window).scrollTop() + $(window).height(),
- left : 0,
- right : $(window).width()
- },
- popup = {
- width : $popup.outerWidth(),
- height : $popup.outerHeight(),
- position : $popup.offset()
- },
- offstage = {},
- offstagePositions = []
- ;
- if(popup.position) {
- offstage = {
- top : (popup.position.top < boundary.top),
- bottom : (popup.position.top + popup.height > boundary.bottom),
- right : (popup.position.left + popup.width > boundary.right),
- left : (popup.position.left < boundary.left)
- };
- }
- // return only boundaries that have been surpassed
- $.each(offstage, function(direction, isOffstage) {
- if(isOffstage) {
- offstagePositions.push(direction);
- }
- });
- return (offstagePositions.length > 0)
- ? offstagePositions.join(' ')
- : false
- ;
- },
- nextPosition: function(position) {
- switch(position) {
- case 'top left':
- position = 'bottom left';
- break;
- case 'bottom left':
- position = 'top right';
- break;
- case 'top right':
- position = 'bottom right';
- break;
- case 'bottom right':
- position = 'top center';
- break;
- case 'top center':
- position = 'bottom center';
- break;
- case 'bottom center':
- position = 'right center';
- break;
- case 'right center':
- position = 'left center';
- break;
- case 'left center':
- position = 'top center';
- break;
- }
- return position;
- }
- },
-
- // determines popup state
- toggle: function() {
- $module = $(this);
- module.debug('Toggling pop-up');
- // refresh state of module
- module.refresh();
- if($popup.size() === 0) {
- module.create();
- }
- if( !$module.hasClass(className.visible) ) {
- if( module.position() ) {
- module.show();
- }
- }
- else {
- module.hide();
- }
- },
-
- position: function(position, arrowOffset) {
- var
- windowWidth = $(window).width(),
- windowHeight = $(window).height(),
- width = $module.outerWidth(),
- height = $module.outerHeight(),
- popupWidth = $popup.outerWidth(),
- popupHeight = $popup.outerHeight(),
-
- offset = (settings.inline)
- ? $module.position()
- : $module.offset(),
- parentWidth = (settings.inline)
- ? $offsetParent.outerWidth()
- : $window.outerWidth(),
- parentHeight = (settings.inline)
- ? $offsetParent.outerHeight()
- : $window.outerHeight(),
-
- positioning,
- offstagePosition
- ;
- position = position || $module.data(metadata.position) || settings.position;
- arrowOffset = arrowOffset || $module.data(metadata.arrowOffset) || settings.arrowOffset;
- module.debug('Calculating offset for position', position);
- switch(position) {
- case 'top left':
- positioning = {
- top : 'auto',
- bottom : parentHeight - offset.top + settings.distanceAway,
- left : offset.left + arrowOffset
- };
- break;
- case 'top center':
- positioning = {
- bottom : parentHeight - offset.top + settings.distanceAway,
- left : offset.left + (width / 2) - (popupWidth / 2) + arrowOffset,
- top : 'auto',
- right : 'auto'
- };
- break;
- case 'top right':
- positioning = {
- bottom : parentHeight - offset.top + settings.distanceAway,
- right : parentWidth - offset.left - width - arrowOffset,
- top : 'auto',
- left : 'auto'
- };
- break;
- case 'left center':
- positioning = {
- top : offset.top + (height / 2) - (popupHeight / 2),
- right : parentWidth - offset.left + settings.distanceAway - arrowOffset,
- left : 'auto',
- bottom : 'auto'
- };
- break;
- case 'right center':
- positioning = {
- top : offset.top + (height / 2) - (popupHeight / 2),
- left : offset.left + width + settings.distanceAway + arrowOffset,
- bottom : 'auto',
- right : 'auto'
- };
- break;
- case 'bottom left':
- positioning = {
- top : offset.top + height + settings.distanceAway,
- left : offset.left + arrowOffset,
- bottom : 'auto',
- right : 'auto'
- };
- break;
- case 'bottom center':
- positioning = {
- top : offset.top + height + settings.distanceAway,
- left : offset.left + (width / 2) - (popupWidth / 2) + arrowOffset,
- bottom : 'auto',
- right : 'auto'
- };
- break;
- case 'bottom right':
- positioning = {
- top : offset.top + height + settings.distanceAway,
- right : parentWidth - offset.left - width - arrowOffset,
- left : 'auto',
- bottom : 'auto'
- };
- break;
- }
- // true width on popup, avoid rounding error
- $.extend(positioning, {
- width: $popup.width() + 1
- });
- // tentatively place on stage
- $popup
- .removeAttr('style')
- .removeClass('top right bottom left center')
- .css(positioning)
- .addClass(position)
- .addClass(className.loading)
- ;
- // check if is offstage
- offstagePosition = module.get.offstagePosition();
- // recursively find new positioning
- if(offstagePosition) {
- module.debug('Element is outside boundaries ', offstagePosition);
- if(recursionDepth < settings.maxRecursion) {
- position = module.get.nextPosition(position);
- recursionDepth++;
- module.debug('Trying new position: ', position);
- return module.position(position);
- }
- else {
- module.error(errors.recursion);
- recursionDepth = 0;
- return false;
- }
- }
- else {
- module.debug('Position is on stage', position);
- recursionDepth = 0;
- return true;
- }
- },
-
- show: function() {
- module.debug('Showing pop-up');
- $(selector.popup)
- .filter(':visible')
- .stop()
- .fadeOut(200)
- .prev($module)
- .removeClass(className.visible)
- ;
- $module
- .addClass(className.visible)
- ;
- $popup
- .removeClass(className.loading)
- ;
- if(settings.animation == 'pop' && $.fn.popIn !== undefined) {
- $popup
- .stop()
- .popIn(settings.duration, settings.easing)
- ;
- }
- else {
- $popup
- .stop()
- .fadeIn(settings.duration, settings.easing)
- ;
- }
- if(settings.event == 'click' && settings.clicktoClose) {
- module.debug('Binding popup close event');
- $(document)
- .on('click.' + namespace, module.gracefully.hide)
- ;
- }
- $.proxy(settings.onShow, $popup)();
- },
-
- hide: function() {
- $module
- .removeClass(className.visible)
- ;
- if($popup.is(':visible') ) {
- module.debug('Hiding pop-up');
- if(settings.animation == 'pop' && $.fn.popOut !== undefined) {
- $popup
- .stop()
- .popOut(settings.duration, settings.easing, function() {
- $popup.hide();
- })
- ;
- }
- else {
- $popup
- .stop()
- .fadeOut(settings.duration, settings.easing)
- ;
- }
- }
- if(settings.event == 'click' && settings.clicktoClose) {
- $(document)
- .off('click.' + namespace)
- ;
- }
- $.proxy(settings.onHide, $popup)();
- if(!settings.inline) {
- module.remove();
- }
- },
-
- gracefully: {
- hide: function(event) {
- // don't close on clicks inside popup
- if( $(event.target).closest(selector.popup).size() === 0) {
- module.hide();
- }
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
-
- };
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
- }
- // otherwise initialize
- else {
- if(instance) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
- };
-
- $.fn.popup.settings = {
-
- moduleName : 'Pop-up Module',
- debug : true,
- namespace : 'popup',
-
- onShow : function(){},
- onHide : function(){},
-
- content : false,
- html : false,
- title : false,
-
- position : 'top center',
- delay : 0,
- inline : true,
-
- duration : 250,
- easing : 'easeOutQuint',
- animation : 'pop',
-
- errors: {
- content : 'Warning: Your popup has no content specified',
- method : 'The method you called is not defined.',
- recursion : 'Popup attempted to reposition element to fit, but could not find an adequate position.'
- },
-
- distanceAway : 2,
- arrowOffset : 0,
-
- maxRecursion : 10,
-
- event : 'hover',
- clicktoClose : true,
-
- metadata: {
- content : 'content',
- html : 'html',
- title : 'title',
- position : 'position',
- arrowOffset : 'arrowOffset'
- },
-
- className : {
- popup : 'ui popup',
- visible : 'visible',
- loading : 'loading'
- },
-
- selector : {
- popup : '.ui.popup'
- },
-
- template: function(text) {
- var html = '';
- if(typeof text !== undefined) {
- if(typeof text.title !== undefined && text.title) {
- html += '
' + text.title + '
';
- }
- if(typeof text.content !== undefined && text.content) {
- html += '
' + text.content + '
';
- }
- }
- return html;
- }
-
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/modules/search.js b/node/src/files/components/semantic/uncompressed/modules/search.js
deleted file mode 100644
index 63e1da670..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/search.js
+++ /dev/null
@@ -1,670 +0,0 @@
-/* ******************************
- Search Prompt
- Author: Jack Lukic
- Notes: First Commit July 19, 2012
-
- Designed to be used as an autocomplete
- or to deliver quick inline search results
-****************************** */
-
-;(function ($, window, document, undefined) {
-
-$.fn.searchPrompt = function(source, parameters) {
- var
- settings = $.extend(true, {}, $.fn.searchPrompt.settings, parameters),
- // make arguments available
- query = arguments[0],
- passedArguments = [].slice.call(arguments, 1),
- invokedResponse
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $searchPrompt = $module.find(settings.selector.searchPrompt),
- $searchButton = $module.find(settings.selector.searchButton),
- $searchResults = $module.find(settings.selector.searchResults),
- $result = $module.find(settings.selector.result),
- $category = $module.find(settings.selector.category),
- $emptyResult = $module.find(settings.selector.emptyResult),
- $resultPage = $module.find(settings.selector.resultPage),
-
- element = this,
- selector = $module.selector || '',
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (instance !== undefined && typeof query == 'string'),
-
- className = settings.className,
- namespace = settings.namespace,
- errors = settings.errors,
- module
- ;
- module = {
-
- initialize: function() {
- var
- searchPrompt = $searchPrompt[0],
- inputEvent = (searchPrompt.oninput !== undefined)
- ? 'input'
- : (searchPrompt.onpropertychange !== undefined)
- ? 'propertychange'
- : 'keyup'
- ;
- // attach events
- $searchPrompt
- .on('focus.' + namespace, module.event.focus)
- .on('blur.' + namespace, module.event.blur)
- .on('keydown.' + namespace, module.handleKeyboard)
- ;
- if(settings.automatic) {
- $searchPrompt
- .on(inputEvent + '.' + namespace, module.search.throttle)
- ;
- }
- $searchButton
- .on('click.' + namespace, module.search.query)
- ;
- $searchResults
- .on('click.' + namespace, settings.selector.result, module.results.select)
- ;
- $module
- .data('module-' + namespace, module)
- ;
- },
- event: {
- focus: function() {
- $module
- .addClass(className.focus)
- ;
- module.results.show();
- },
- blur: function() {
- module.search.cancel();
- $module
- .removeClass(className.focus)
- ;
- module.results.hide();
- }
- },
- handleKeyboard: function(event) {
- var
- // force latest jq dom
- $result = $module.find(settings.selector.result),
- $category = $module.find(settings.selector.category),
- keyCode = event.which,
- keys = {
- backspace : 8,
- enter : 13,
- escape : 27,
- upArrow : 38,
- downArrow : 40
- },
- activeClass = className.active,
- currentIndex = $result.index( $result.filter('.' + activeClass) ),
- resultSize = $result.size(),
- newIndex
- ;
- // search shortcuts
- if(keyCode == keys.escape) {
- $searchPrompt
- .trigger('blur')
- ;
- }
- // result shortcuts
- if($searchResults.filter(':visible').size() > 0) {
- if(keyCode == keys.enter) {
- if( $result.filter('.' + activeClass).exists() ) {
- $.proxy(module.results.select, $result.filter('.' + activeClass) )();
- event.preventDefault();
- return false;
- }
- }
- else if(keyCode == keys.upArrow) {
- newIndex = (currentIndex - 1 < 0)
- ? currentIndex
- : currentIndex - 1
- ;
- $category
- .removeClass(activeClass)
- ;
- $result
- .removeClass(activeClass)
- .eq(newIndex)
- .addClass(activeClass)
- .closest($category)
- .addClass(activeClass)
- ;
- event.preventDefault();
- }
- else if(keyCode == keys.downArrow) {
- newIndex = (currentIndex + 1 >= resultSize)
- ? currentIndex
- : currentIndex + 1
- ;
- $category
- .removeClass(activeClass)
- ;
- $result
- .removeClass(activeClass)
- .eq(newIndex)
- .addClass(activeClass)
- .closest($category)
- .addClass(activeClass)
- ;
- event.preventDefault();
- }
- }
- else {
- // query shortcuts
- if(keyCode == keys.enter) {
- module.search.query();
- $searchButton
- .addClass(className.down)
- ;
- $searchPrompt
- .one('keyup', function(){
- $searchButton
- .removeClass(className.down)
- ;
- })
- ;
- }
- }
- },
- search: {
- cancel: function() {
- var
- xhr = $module.data('xhr') || false
- ;
- if( xhr && xhr.state() != 'resolved') {
- xhr.abort();
- }
- },
- throttle: function(event) {
- var
- searchTerm = $searchPrompt.val(),
- numCharacters = searchTerm.length,
- timer
- ;
- clearTimeout($module.data('timer'));
- if(numCharacters >= settings.minCharacters) {
- timer = setTimeout(module.search.query, settings.searchThrottle);
- $module
- .data('timer', timer)
- ;
- }
- else {
- module.results.hide();
- }
- },
- query: function() {
- var
- searchTerm = $searchPrompt.val(),
- cachedHTML = module.search.cache.read(searchTerm)
- ;
- if(cachedHTML) {
- module.debug("Reading result for '" + searchTerm + "' from cache");
- module.results.add(cachedHTML);
- }
- else {
- module.debug("Querying for '" + searchTerm + "'");
- if(typeof source == 'object') {
- module.search.local(searchTerm);
- }
- else {
- module.search.remote(searchTerm);
- }
- $.proxy(settings.onSearchQuery, $module)(searchTerm);
- }
- },
- local: function(searchTerm) {
- var
- searchResults = [],
- fullTextResults = [],
- searchFields = $.isArray(settings.searchFields)
- ? settings.searchFields
- : [settings.searchFields],
-
- searchRegExp = new RegExp('(?:\s|^)' + searchTerm, 'i'),
- fullTextRegExp = new RegExp(searchTerm, 'i'),
- searchHTML
- ;
- $module
- .addClass(className.loading)
- ;
- // iterate through search fields in array order
- $.each(searchFields, function(index, field) {
- $.each(source, function(label, thing) {
- if(typeof thing[field] == 'string' && ($.inArray(thing, searchResults) == -1) && ($.inArray(thing, fullTextResults) == -1) ) {
- if( searchRegExp.test( thing[field] ) ) {
- searchResults.push(thing);
- }
- else if( fullTextRegExp.test( thing[field] ) ) {
- fullTextResults.push(thing);
- }
- }
- });
- });
- searchHTML = module.results.generate({
- results: $.merge(searchResults, fullTextResults)
- });
- $module
- .removeClass(className.loading)
- ;
- module.search.cache.write(searchTerm, searchHTML);
- module.results.add(searchHTML);
- },
- remote: function(searchTerm) {
- var
- xhr = ($module.data('xhr') !== undefined)
- ? $module.data('xhr')
- : false,
- apiSettings = {
- stateContext : $module,
- url : source,
- urlData: { query: searchTerm },
- success : function(response) {
- searchHTML = module.results.generate(response);
- module.search.cache.write(searchTerm, searchHTML);
- module.results.add(searchHTML);
- },
- failure : module.error
- },
- searchHTML
- ;
- // api attaches xhr event to context, use this to prevent overlapping queries
- if( xhr && xhr.state() != 'resolved') {
- xhr.abort();
- }
- $.extend(true, apiSettings, settings.apiSettings);
- $.api(apiSettings);
- },
-
- cache: {
- read: function(name) {
- var
- cache = $module.data('cache')
- ;
- return (settings.cache && (typeof cache == 'object') && (cache[name] !== undefined) )
- ? cache[name]
- : false
- ;
- },
- write: function(name, value) {
- var
- cache = ($module.data('cache') !== undefined)
- ? $module.data('cache')
- : {}
- ;
- cache[name] = value;
- $module
- .data('cache', cache)
- ;
- }
- }
- },
-
- results: {
- generate: function(response) {
- module.debug('Generating html from response', response);
- var
- template = settings.templates[settings.type],
- html = ''
- ;
- if(($.isPlainObject(response.results) && !$.isEmptyObject(response.results)) || ($.isArray(response.results) && response.results.length > 0) ) {
- if(settings.maxResults > 0) {
- response.results = $.makeArray(response.results).slice(0, settings.maxResults);
- }
- if(response.results.length > 0) {
- if($.isFunction(template)) {
- html = template(response);
- }
- else {
- module.error(errors.noTemplate, false);
- }
- }
- }
- else {
- html = module.message(errors.noResults, 'empty');
- }
- $.proxy(settings.onSearchResults, $module)(response);
- return html;
- },
- add: function(html) {
- if(settings.onResultsAdd == 'default' || $.proxy(settings.onResultsAdd, $searchResults)(html) == 'default') {
- $searchResults
- .html(html)
- ;
- }
- module.results.show();
- },
- show: function() {
- if( ($searchResults.filter(':visible').size() === 0) && ($searchPrompt.filter(':focus').size() > 0) && $searchResults.html() !== '') {
- $searchResults
- .stop()
- .fadeIn(200)
- ;
- $.proxy(settings.onResultsOpen, $searchResults)();
- }
- },
- hide: function() {
- if($searchResults.filter(':visible').size() > 0) {
- $searchResults
- .stop()
- .fadeOut(200)
- ;
- $.proxy(settings.onResultsClose, $searchResults)();
- }
- },
- followLink: function() {
-
- },
- select: function(event) {
- module.debug('Search result selected');
- var
- $result = $(this),
- $title = $result.find('.title'),
- title = $title.html()
- ;
- if(settings.onSelect == 'default' || $.proxy(settings.onSelect, this)(event) == 'default') {
- var
- $link = $result.find('a[href]').eq(0),
- href = $link.attr('href'),
- target = $link.attr('target')
- ;
- try {
- module.results.hide();
- $searchPrompt
- .val(title)
- ;
- if(target == '_blank' || event.ctrlKey) {
- window.open(href);
- }
- else {
- window.location.href = (href);
- }
- }
- catch(error) {}
- }
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- // displays mesage visibly in search results
- message: function(text, type) {
- type = type || 'standard';
- module.results.add( settings.templates.message(text, type) );
- return settings.templates.message(text, type);
- },
- // update view with error message
- error: function(errorMessage, escalate) {
- // show user error message
- escalate = (escalate !== undefined)
- ? escalate
- : true
- ;
- console.warn(settings.moduleName + ': ' + errorMessage);
- if(escalate && errorMessage !== undefined) {
- module.message(errorMessage, 'error');
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, element, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-};
-
- $.fn.searchPrompt.settings = {
-
- moduleName : 'Search Module',
- debug : true,
- namespace : 'search',
-
- // onSelect default action is defined in module
- onSelect : 'default',
- onResultsAdd : 'default',
-
- onSearchQuery : function(){},
- onSearchResults : function(response){},
-
- onResultsOpen : function(){},
- onResultsClose : function(){},
-
- automatic : 'true',
- type : 'simple',
- minCharacters : 3,
- searchThrottle : 300,
- maxResults : 7,
- cache : true,
-
- searchFields : ['title', 'description'],
-
- // api config
- apiSettings: {
-
- },
-
- className: {
- active : 'active',
- down : 'down',
- focus : 'focus',
- empty : 'empty',
- loading : 'loading'
- },
-
- errors : {
- noResults : 'Your search returned no results',
- logging : 'Error in debug logging, exiting.',
- noTemplate : 'A valid template name was not specified.',
- serverError : 'There was an issue with querying the server.',
- method : 'The method you called is not defined.'
- },
-
- selector : {
- searchPrompt : '.prompt',
- searchButton : '.search.button',
- searchResults : '.results',
-
- category : '.category',
- result : '.result',
-
- emptyResult : '.results .message',
- resultPage : '.results .page'
- },
-
- templates: {
- message: function(message, type) {
- var
- html = ''
- ;
- if(message !== undefined && type !== undefined) {
- html += ''
- + '
'
- + '
'
- ;
- // message type
- if(type == 'empty') {
- html += ''
- + '
No Results
'
- + '
' + message + '
'
- ;
- }
- else {
- html += '
' + message + '
';
- }
- html += '
';
- }
- return html;
- },
- categories: function(response) {
- var
- html = ''
- ;
- if(response.results !== undefined) {
- // each category
- $.each(response.results, function(index, category) {
- if(category.results !== undefined && category.results.length > 0) {
- html += ''
- + '
'
- + '
' + category.name + '
'
- + '
'
- ;
- // each item inside category
- $.each(category.results, function(index, result) {
- html += '- ';
- html += '';
- if(result.image !== undefined) {
- html+= ''
- + '
'
- + '
'
- + '
'
- ;
- }
- html += (result.image !== undefined)
- ? ''
- : '
'
- ;
- if(result.price !== undefined) {
- html+= '
' + result.price + '
';
- }
- if(result.title !== undefined) {
- html+= '
' + result.title + '
';
- }
- if(result.description !== undefined) {
- html+= '
' + result.description + '
';
- }
- html += ''
- + '
'
- + ''
- ;
- });
- html += ''
- + ''
- + '
'
- ;
- }
- });
- if(response.resultPage) {
- html += ''
- + ''
- + response.resultPage.text
- + '';
- }
- return html;
- }
- return false;
- },
- simple: function(response) {
- var
- html = ''
- ;
- if(response.results !== undefined) {
- html += '';
- // each result
- $.each(response.results, function(index, result) {
- html += '- ';
-
- if(result.url !== undefined) {
- html += '';
- }
- if(result.image !== undefined) {
- html+= ''
- + '
'
- + '
'
- + '
'
- ;
- }
- html += (result.image !== undefined)
- ? ''
- : '
'
- ;
- if(result.price !== undefined) {
- html+= '
' + result.price + '
';
- }
- if(result.title !== undefined) {
- html+= '
' + result.title + '
';
- }
- if(result.description !== undefined) {
- html+= '
' + result.description + '
';
- }
- html += ''
- + '
'
- + ''
- ;
- });
- html += '';
-
- if(response.resultPage) {
- html += ''
- + '
'
- + response.resultPage.text
- + '';
- }
- return html;
- }
- return false;
- }
- }
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/modules/shape.js b/node/src/files/components/semantic/uncompressed/modules/shape.js
deleted file mode 100644
index 0dc0b6913..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/shape.js
+++ /dev/null
@@ -1,640 +0,0 @@
-/* *******************************************************************************************
-
- Shape - A 3D Animation Plugin
- Version 0.1
- (built using Semantic module spec)
-
- Author : Jack Lukic
- Last revision : April 2013
-
-********************************************************************************************* */
-
-;(function ( $, window, document, undefined ) {
-
-$.fn.shape = function(parameters) {
- var
- $allModules = $(this),
-
- settings = $.extend(true, {}, $.fn.shape.settings, parameters),
-
- // define namespaces for modules
- eventNamespace = '.' + settings.namespace,
- moduleNamespace = 'module-' + settings.namespace,
-
- // allow methods to be queried directly
- query = arguments[0],
- queryArguments = [].slice.call(arguments, 1),
- methodInvoked = (typeof query == 'string'),
- invokedResponse
- ;
-
- $allModules
- .each(function() {
- var
- // selector cache
- $module = $(this),
- $shape = $module.find(settings.selector.shape),
- $side = $module.find(settings.selector.side),
-
- // private variables
- $activeSide,
- $nextSide,
- endTransition = 'transitionend msTransitionEnd oTransitionEnd',
-
- // standard module
- selector = $module.selector || '',
- element = this,
- instance = $module.data(moduleNamespace),
-
- // internal aliases
- namespace = settings.namespace,
- error = settings.error,
- className = settings.className,
-
- module
- ;
-
- module = {
-
- initialize: function() {
- module.verbose('Initializing module for', element);
- module.set.defaultSide();
- 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);
- $shape = $(this).find(settings.selector.shape);
- $side = $(this).find(settings.selector.side);
- },
-
- repaint: function() {
- module.verbose('Forcing repaint event');
- var
- shape = $shape.get(0) || document.createElement('div'),
- fakeAssignment = shape.offsetWidth
- ;
- },
-
- animate: function(propertyObject, callback) {
- module.verbose('Animating box with properties', propertyObject);
- callback = callback || function(event) {
- module.reset();
- module.set.active();
- $.proxy(settings.onChange, $nextSide)();
- event.stopImmediatePropagation();
- };
- if(settings.useCSS) {
- module.verbose('Starting CSS animation');
- $module
- .addClass(className.animating)
- ;
- module.set.stageSize();
- module.repaint();
- $module
- .addClass(className.css)
- ;
- $activeSide
- .addClass(className.hidden)
- ;
- $shape
- .css(propertyObject)
- .one(endTransition, callback)
- ;
- }
- else {
- // not yet supported until .animate() is extended to allow RotateX/Y
- module.verbose('Starting javascript animation');
- $module
- .addClass(className.animating)
- .removeClass(className.css)
- ;
- module.set.stageSize();
- module.repaint();
- $activeSide
- .animate({
- opacity: 0
- }, settings.duration, settings.easing)
- ;
- $shape
- .animate(propertyObject, settings.duration, settings.easing, callback)
- ;
- }
- },
-
- queue: function(method) {
- module.debug('Queueing animation of', method);
- $shape
- .one(endTransition, function() {
- module.debug('Executing queued animation');
- $module.shape(method);
- })
- ;
- },
-
- reset: function() {
- module.verbose('Animating states reset');
- $module
- .removeClass(className.css)
- .removeClass(className.animating)
- .removeAttr('style')
- ;
- $shape
- .removeAttr('style')
- ;
- $side
- .removeAttr('style')
- .removeClass(className.hidden)
- ;
- $nextSide
- .removeClass(className.animating)
- .removeAttr('style')
- ;
- },
-
- is: {
-
- animating: function() {
- return $module.hasClass(className.animating);
- }
-
- },
-
- get: {
-
- nextSide: function() {
- return ( $activeSide.next(settings.selector.side).size() > 0 )
- ? $activeSide.next(settings.selector.side)
- : $module.find(settings.selector.side).first()
- ;
- }
-
- },
-
- set: {
-
- defaultSide: function() {
- $activeSide = $module.find('.' + settings.className.active);
- $nextSide = ( $activeSide.next(settings.selector.side).size() > 0 )
- ? $activeSide.next(settings.selector.side)
- : $module.find(settings.selector.side).first()
- ;
- module.verbose('Active side set to', $activeSide);
- module.verbose('Next side set to', $nextSide);
- },
-
- stageSize: function() {
- var
- stage = {
- width : $nextSide.outerWidth(),
- height : $nextSide.outerHeight()
- }
- ;
- module.verbose('Resizing stage to fit new content', stage);
- $module
- .css({
- width : stage.width,
- height : stage.height
- })
- ;
- },
-
- nextSide: function(selector) {
- $nextSide = $module.find(selector);
- if($nextSide.size() === 0) {
- 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)
- ;
- module.set.defaultSide();
- }
- },
-
- flip: {
-
- up: function() {
- module.debug('Flipping up', $nextSide);
- if( !module.is.animating() ) {
- module.stage.above();
- module.animate( module.getTransform.up() );
- }
- else {
- module.queue('flip.up');
- }
- },
-
- down: function() {
- module.debug('Flipping down', $nextSide);
- if( !module.is.animating() ) {
- module.stage.below();
- module.animate( module.getTransform.down() );
- }
- else {
- module.queue('flip.down');
- }
- },
-
- left: function() {
- module.debug('Flipping left', $nextSide);
- if( !module.is.animating() ) {
- module.stage.left();
- module.animate(module.getTransform.left() );
- }
- else {
- module.queue('flip.left');
- }
- },
-
- right: function() {
- module.debug('Flipping right', $nextSide);
- if( !module.is.animating() ) {
- module.stage.right();
- module.animate(module.getTransform.right() );
- }
- else {
- module.queue('flip.right');
- }
- },
-
- over: function() {
- module.debug('Flipping over', $nextSide);
- if( !module.is.animating() ) {
- module.stage.behind();
- module.animate(module.getTransform.behind() );
- }
- else {
- module.queue('flip.over');
- }
- }
-
- },
-
- getTransform: {
-
- up: function() {
- var
- translate = {
- y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- z: -($activeSide.outerHeight() / 2)
- }
- ;
- return {
- transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'
- };
- },
-
- down: function() {
- var
- translate = {
- y: -(($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- z: -($activeSide.outerHeight() / 2)
- }
- ;
- return {
- transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'
- };
- },
-
- left: function() {
- var
- translate = {
- x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2),
- z : -($activeSide.outerWidth() / 2)
- }
- ;
- return {
- transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'
- };
- },
-
- right: function() {
- var
- translate = {
- x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2),
- z : -($activeSide.outerWidth() / 2)
- }
- ;
- return {
- transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'
- };
- },
-
- behind: function() {
- var
- translate = {
- x : -(($activeSide.outerWidth() - $nextSide.outerWidth()) / 2)
- }
- ;
- return {
- transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'
- };
- }
-
- },
-
- stage: {
-
- above: function() {
- var
- box = {
- origin : (($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- depth : {
- active : ($nextSide.outerHeight() / 2),
- next : ($activeSide.outerHeight() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as above', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'top' : box.origin + 'px',
- 'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- below: function() {
- var
- box = {
- origin : (($activeSide.outerHeight() - $nextSide.outerHeight()) / 2),
- depth : {
- active : ($nextSide.outerHeight() / 2),
- next : ($activeSide.outerHeight() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as below', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'top' : box.origin + 'px',
- 'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- left: function() {
- var
- box = {
- origin : ( ( $activeSide.outerWidth() - $nextSide.outerWidth() ) / 2),
- depth : {
- active : ($nextSide.outerWidth() / 2),
- next : ($activeSide.outerWidth() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as left', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'left' : box.origin + 'px',
- 'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- right: function() {
- var
- box = {
- origin : ( ( $activeSide.outerWidth() - $nextSide.outerWidth() ) / 2),
- depth : {
- active : ($nextSide.outerWidth() / 2),
- next : ($activeSide.outerWidth() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as left', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'left' : box.origin + 'px',
- 'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'
- })
- ;
- },
-
- behind: function() {
- var
- box = {
- origin : ( ( $activeSide.outerWidth() - $nextSide.outerWidth() ) / 2),
- depth : {
- active : ($nextSide.outerWidth() / 2),
- next : ($activeSide.outerWidth() / 2)
- }
- }
- ;
- module.verbose('Setting the initial animation position as behind', $nextSide, box);
- $activeSide
- .css({
- 'transform' : 'rotateY(0deg)'
- })
- ;
- $nextSide
- .addClass(className.animating)
- .css({
- 'display' : 'block',
- 'left' : box.origin + 'px',
- 'transform' : 'rotateY(-180deg)'
- })
- ;
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if( $.isPlainObject(name) ) {
- $.extend(true, settings, name);
- }
- else if(value === undefined) {
- return settings[name];
- }
- else {
- settings[name] = value;
- }
- },
-
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
-
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
-
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables) );
- }
- },
-
- invoke: function(query, passedArguments, context) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || queryArguments || [].slice.call( arguments, 2 );
- context = element || context;
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(error.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- module.verbose('Executing invoked function', found);
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found || false;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- if(instance === undefined) {
- module.initialize();
- }
- invokedResponse = module.invoke(query);
- }
- // otherwise initialize
- else {
- if(instance !== undefined) {
- module.destroy();
- }
- module.initialize();
- }
- })
- ;
- // chain or return queried method
- return (invokedResponse)
- ? invokedResponse
- : this
- ;
-};
-
-$.fn.shape.settings = {
-
- // module info
- moduleName : 'Shape Module',
-
- // debug content outputted to console
- debug : true,
-
- // verbose debug output
- verbose : true,
-
- // event namespace
- namespace : 'shape',
-
- // callback occurs on side change
- beforeChange : function() {},
- onChange : function() {},
-
- // use css animation (currently only true is supported)
- useCSS : true,
-
- // animation duration (useful only with future js animations)
- duration : 1000,
- easing : 'easeInOutQuad',
-
- // 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 : {
- css : 'css',
- animating : 'animating',
- hidden : 'hidden',
- active : 'active'
- },
-
- // selectors used
- selector : {
- shape : '.shape',
- side : '.side'
- }
-
-};
-
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/star.js b/node/src/files/components/semantic/uncompressed/modules/star.js
deleted file mode 100644
index e394ce5fc..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/star.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/* ******************************
- Star Review
- Author: Jack Lukic
- Notes: First Commit Sep 04, 2012
-
- Simple rating module
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.starReview = function(parameters) {
- var
- settings = $.extend(true, {}, $.fn.starReview.settings, parameters),
- // hoist arguments
- moduleArguments = arguments || false
- ;
- $(this)
- .each(function() {
- var
- $module = $(this),
- $star = $module.find(settings.selector.star),
-
- className = settings.className,
- namespace = settings.namespace,
- instance = $module.data('module'),
- module
- ;
-
- module = {
-
- settings: settings,
-
- initialize: function() {
- if(settings.rateable) {
- // expandable with states
- if($.fn.state !== undefined) {
- $module
- .state()
- ;
- $star
- .state()
- ;
- }
- $star
- .bind('mouseenter.' + namespace, module.event.mouseenter)
- .bind('mouseleave.' + namespace, module.event.mouseleave)
- .bind('click.' + namespace, module.event.click)
- ;
- }
- $module
- .addClass(className.initialize)
- .data('module', module)
- ;
- },
-
- setRating: function(rating) {
- var
- $activeStar = $star.eq(rating - 1)
- ;
- $module
- .removeClass(className.hover)
- ;
- $star
- .removeClass(className.hover)
- ;
- $activeStar
- .nextAll()
- .removeClass(className.active)
- ;
- $activeStar
- .addClass(className.active)
- .prevAll()
- .addClass(className.active)
- ;
- $.proxy(settings.onRate, $module)();
- },
-
- event: {
- mouseenter: function() {
- var
- $activeStar = $(this)
- ;
- $activeStar
- .nextAll()
- .removeClass(className.hover)
- ;
- $module
- .addClass(className.hover)
- ;
- $activeStar
- .addClass(className.hover)
- .prevAll()
- .addClass(className.hover)
- ;
- },
- mouseleave: function() {
- $star
- .removeClass(className.hover)
- ;
- },
- click: function() {
- var
- $activeStar = $(this)
- ;
- module.setRating( $star.index($activeStar) + 1);
- }
- },
-
- // handle error logging
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + errorMessage);
- },
-
- // allows for dot notation method calls
- 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.errors.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.starReview.settings = {
-
- moduleName : 'Star Module',
- namespace : 'star',
-
- rateable : true,
- onRate : function(){},
-
- className : {
- initialize : 'initialize',
- loading : 'loading',
- active : 'active',
- hover : 'hover',
- down : 'down'
- },
-
- selector : {
- star : 'i'
- }
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/modules/tab.js b/node/src/files/components/semantic/uncompressed/modules/tab.js
deleted file mode 100644
index 6506548b3..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/tab.js
+++ /dev/null
@@ -1,523 +0,0 @@
-/* ******************************
- Module - Simple Tab Navigation
- Author: Jack Lukic
- Notes: First Commit Aug 15, 2012
-
- History based tab navigation
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.tabNavigation = function(parameters) {
-
- var
- settings = $.extend(true, {}, $.fn.tabNavigation.settings, parameters),
-
- $tabNavigation = $(this),
- $tabs = $(settings.context).find(settings.selector.tabs),
-
- firstLoad = true,
- cache = {},
- recursionDepth = 0,
-
- activeTabPath,
- parameterArray,
- historyEvent,
-
- className = settings.className,
- metadata = settings.metadata,
- namespace = settings.namespace,
- errors = settings.errors,
-
- instance = $tabNavigation.data('module'),
-
- query = arguments[0],
- methodInvoked = (instance !== undefined && typeof query == 'string'),
- passedArguments = [].slice.call(arguments, 1),
-
- module,
- invokedResponse
- ;
-
- module = {
-
- initialize: function() {
- module.debug('Initializing Tabs', $tabNavigation);
- // attach history events
- if(settings.history && settings.path !== false) {
- if( $.address !== undefined ) {
- module.verbose('Address library found adding state change event');
- $.address
- .state(settings.path)
- .change(module.event.history.change)
- ;
- }
- else {
- module.error(errors.state);
- }
- }
- // attach events if navigation wasn't set to window
- if( !$.isWindow( $tabNavigation.get(0) ) ) {
- $tabNavigation
- .on('click.' + namespace, module.event.click)
- ;
- }
- $tabNavigation
- .data('module', module)
- ;
- },
-
- destroy: function() {
- module.debug('Destroying tabs', $tabNavigation);
- $tabNavigation
- .off('.' + namespace)
- ;
- },
-
- event: {
- click: function() {
- module.debug('Navigation clicked');
- var
- tabPath = $(this).data(metadata.tab)
- ;
- if(tabPath !== undefined) {
- if(tabPath !== activeTabPath) {
- if(settings.history) {
- $.address.value(tabPath);
- }
- else {
- module.change(tabPath);
- }
- }
- }
- 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.debug('History change event', tabPath, event);
- historyEvent = event;
- if(tabPath !== undefined) {
- module.change(tabPath);
- }
- if(pageTitle) {
- $.address.title(pageTitle);
- }
- }
- }
- },
-
- refresh: function() {
- if(activeTabPath) {
- module.debug('Refreshing tab', activeTabPath);
- module.change(activeTabPath);
- }
- },
-
- cache: {
- read: function(tabPath) {
- return (tabPath !== undefined)
- ? cache[tabPath]
- : cache
- ;
- },
- add: function(tabPath, content) {
- tabPath = tabPath || activeTabPath;
- module.debug('Adding cached content for', tabPath);
- cache[tabPath] = content;
- },
- remove: function(tabPath) {
- tabPath = tabPath || activeTabPath;
- module.debug('Removing cached content for', tabPath);
- delete cache[tabPath];
- }
- },
-
- change: function(tabPath) {
- var
- pathArray = module.get.defaultPathArray(tabPath)
- ;
- module.deactivate.all();
- $.each(pathArray, function(index, tab) {
- var
- currentPathArray = pathArray.slice(0, index + 1),
- currentPath = module.utils.arrayToPath(currentPathArray),
-
- isLastTab = (module.utils.last(pathArray) == currentPath),
- isTab = module.is.tab(currentPath),
- isParam = !(isTab),
-
- pushStateAvailable = (window.history && window.history.pushState),
- shouldIgnoreLoad = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),
- remoteContent = $.isPlainObject(settings.apiSettings),
-
- $tab = module.get.tabElement(currentPath)
- ;
- module.verbose('Looking for tab', tab);
- if(isParam) {
- module.verbose('Tab is not found, assuming it is a parameter', tab);
- return true;
- }
- else if(isTab) {
- // scope up
- module.verbose('Tab was found', tab);
- activeTabPath = currentPath;
- parameterArray = module.utils.filterArray(pathArray, currentPathArray);
- if(isLastTab && remoteContent) {
- if(!shouldIgnoreLoad) {
- module.activate.navigation(currentPath);
- module.content.fetch(currentPath, settings.onTabLoad);
- }
- else {
- module.debug('Ignoring remote content on first tab load', currentPath);
- firstLoad = false;
- cache[tabPath] = $tab.html();
- module.activate.all(currentPath);
- $.proxy(settings.onTabInit, $tab)(currentPath, parameterArray, historyEvent);
- }
- }
- else {
- module.debug('Opened tab', currentPath);
- module.activate.all(currentPath);
- $.proxy(settings.onTabLoad, $tab)(currentPath, parameterArray, historyEvent);
- }
-
- }
- });
- },
-
- content: {
-
- fetch: function(tabPath) {
- var
- $tab = module.get.tabElement(tabPath),
- cachedContent = cache[tabPath] || false,
- apiSettings = {
- dataType : 'html',
- stateContext : $tab,
- success : function(response) {
- cache[tabPath] = response;
- module.content.update(tabPath, response);
- if(tabPath == activeTabPath) {
- module.debug('Content loaded', tabPath);
- module.activate.tab(tabPath);
- }
- else {
- module.debug('Content loaded in background', tabPath);
- }
- $.proxy(settings.onTabInit, $tab)(tabPath, parameterArray, historyEvent);
- },
- urlData: { tab: tabPath }
- },
- request = $tab.data(metadata.promise) || false,
- existingRequest = ( request && request.state() === 'pending' )
- ;
- if(settings.cache && cachedContent) {
- module.debug('Showing existing content', tabPath);
- // module.content.update(tabPath, cachedContent);
- module.activate.tab(tabPath);
- $.proxy(settings.onTabLoad, $tab)(tabPath, parameterArray, historyEvent);
- }
- else if(existingRequest) {
- module.debug('Content is already loading', tabPath);
- $tab
- .addClass(className.loading)
- ;
- }
- else if($.api !== undefined) {
- module.debug('Retrieving content', tabPath);
- $.api( $.extend(true, {}, settings.apiSettings, apiSettings) );
- }
- else {
- module.error(errors.api);
- }
- },
-
- update: function(tabPath, html) {
- module.debug('Updating html for', tabPath);
- var
- $tab = module.get.tabElement(tabPath)
- ;
- $tab
- .html(html)
- ;
- }
- },
-
- activate: {
- all: function(tabPath) {
- module.activate.tab(tabPath);
- module.activate.navigation(tabPath);
- },
- tab: function(tabPath) {
- var
- $tab = module.get.tabElement(tabPath)
- ;
- module.verbose('Showing tab content for', $tab);
- $tab.addClass(className.active);
- },
- navigation: function(tabPath) {
- var
- $nav = module.get.navElement(tabPath)
- ;
- module.verbose('Activating tab navigation for', $nav);
- $nav.addClass(className.active);
- }
- },
-
- deactivate: {
- all: function() {
- module.deactivate.navigation();
- module.deactivate.tabs();
- },
- navigation: function() {
- $tabNavigation
- .removeClass(className.active)
- ;
- },
- tabs: function() {
- $tabs
- .removeClass(className.active + ' ' + className.loading)
- ;
- }
- },
-
- is: {
- tab: function(tabName) {
- return ( module.get.tabElement(tabName).size() > 0 );
- }
- },
-
- get: {
- initialPath: function() {
- return $tabNavigation.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);
- },
- // adds default tabs to tab path
- defaultPathArray: function(tabPath) {
- return module.utils.pathToArray( module.get.defaultPath(tabPath) );
- },
- defaultPath: function(tabPath) {
- var
- $defaultNav = $tabNavigation.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(errors.recursion);
- }
- recursionDepth = 0;
- return tabPath;
- },
- navElement: function(tabPath) {
- tabPath = tabPath || activeTabPath;
- return $tabNavigation.filter('[data-' + metadata.tab + '="' + tabPath + '"]');
- },
- tabElement: function(tabPath) {
- var
- $fullPathTab,
- $simplePathTab,
- tabPathArray,
- lastTab
- ;
- tabPath = tabPath || activeTabPath;
- tabPathArray = module.utils.pathToArray(tabPath);
- lastTab = module.utils.last(tabPathArray);
- $fullPathTab = $tabs.filter('[data-' + metadata.tab + '="' + lastTab + '"]');
- $simplePathTab = $tabs.filter('[data-' + metadata.tab + '="' + tabPath + '"]');
- return ($fullPathTab.size() > 0)
- ? $fullPathTab
- : $simplePathTab
- ;
- },
- tab: function() {
- return activeTabPath;
- }
- },
-
- utils: {
- 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
- ;
- }
- },
-
- /* standard module */
- setting: function(name, value) {
- if(value === undefined) {
- return settings[name];
- }
- settings[name] = value;
- },
- verbose: function() {
- if(settings.verbose) {
- module.debug.apply(this, arguments);
- }
- },
- debug: function() {
- var
- output = [],
- message = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.info || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(message);
- log.apply(console, output.concat(variables) );
- }
- },
- error: function() {
- var
- output = [],
- errorMessage = settings.moduleName + ': ' + arguments[0],
- variables = [].slice.call( arguments, 1 ),
- log = console.warn || console.log || function(){}
- ;
- log = Function.prototype.bind.call(log, console);
- if(settings.debug) {
- output.push(errorMessage);
- output.concat(variables);
- log.apply(console, output.concat(variables));
- }
- },
- invoke: function(query, context, passedArguments) {
- var
- maxDepth,
- found
- ;
- passedArguments = passedArguments || [].slice.call( arguments, 2 );
- if(typeof query == 'string' && instance !== undefined) {
- query = query.split('.');
- maxDepth = query.length - 1;
- $.each(query, function(depth, value) {
- if( $.isPlainObject( instance[value] ) && (depth != maxDepth) ) {
- instance = instance[value];
- return true;
- }
- else if( instance[value] !== undefined ) {
- found = instance[value];
- return true;
- }
- module.error(settings.errors.method);
- return false;
- });
- }
- if ( $.isFunction( found ) ) {
- return found.apply(context, passedArguments);
- }
- // return retrieved variable or chain
- return found;
- }
- };
-
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(query, this, passedArguments);
- }
- // otherwise initialize
- else {
- module.initialize();
- }
-
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
-
- };
-
- // shortcut for tabbed content with no defined navigation
- $.tabNavigation = function(settings) {
- $(window).tabNavigation(settings);
- };
-
- $.fn.tabNavigation.settings = {
-
- moduleName : 'Tab Module',
- verbose : false,
- debug : true,
- namespace : 'tab',
-
- // only called first time a tab's content is loaded (when remote source)
- onTabInit : function(tabPath, parameterArray, historyEvent) {},
- // called on every load
- onTabLoad : function(tabPath, parameterArray, historyEvent) {},
-
- templates: {
- determineTitle: function(tabArray) {}
- },
-
- history : false,
- path : false,
-
- context : 'body',
-
- // max depth a tab can be nested
- maxDepth : 25,
- // dont load content on first load
- ignoreFirstLoad : true,
- // load tab content new every tab click
- alwaysRefresh : false,
- // cache the content requests to pull locally
- cache : true,
- // settings for api call
- apiSettings : false,
-
- errors: {
- api : 'You attempted to load content without API module',
- noContent : 'The tab you specified is missing a content url.',
- method : 'The method you called is not defined',
- state : 'The state library has not been initialized',
- missingTab : 'Missing tab: ',
- recursion : 'Max recursive depth reached'
- },
-
- metadata : {
- tab : 'tab',
- loaded : 'loaded',
- promise: 'promise'
- },
-
- className : {
- loading : 'loading',
- active : 'active'
- },
-
- selector : {
- tabs : '.tab'
- }
-
- };
-
-})( jQuery, window , document );
\ No newline at end of file
diff --git a/node/src/files/components/semantic/uncompressed/modules/video.js b/node/src/files/components/semantic/uncompressed/modules/video.js
deleted file mode 100644
index 8dd11a6d0..000000000
--- a/node/src/files/components/semantic/uncompressed/modules/video.js
+++ /dev/null
@@ -1,391 +0,0 @@
-/* ******************************
- Module - Video Component
- Author: Jack Lukic
- Notes: First Commit June 30, 2012
-
- This is a video playlist and video embed plugin which helps
- provide helpers for adding embed code for vimeo and youtube and
- abstracting event handlers for each library
-
-****************************** */
-
-;(function ($, window, document, undefined) {
-
- $.fn.video = function(parameters) {
-
- var
- settings = $.extend(true, {}, $.fn.video.settings, parameters),
- // make arguments available
- moduleArguments = arguments || false,
- invokedResponse
- ;
-
- $(this)
- .each(function() {
- var
- $module = $(this),
- $placeholder = $module.find(settings.selector.placeholder),
- $playButton = $module.find(settings.selector.playButton),
- $embed = $module.find(settings.selector.embed),
-
- element = this,
- instance = $module.data('module-' + settings.namespace),
- methodInvoked = (typeof parameters == 'string'),
-
- namespace = settings.namespace,
- metadata = settings.metadata,
- className = settings.className,
-
- module
- ;
-
- module = {
-
- initialize: function() {
- module.debug('Initializing video');
- $placeholder
- .off('.video')
- .on('click.' + namespace, module.play)
- ;
- $playButton
- .off('.video')
- .on('click.' + namespace, module.play)
- ;
- $module
- .data('module-' + namespace, module)
- ;
- },
-
- // sets new video
- change: function(source, flv) {
- module.debug('Changing video to ', flv);
- $module
- .data(metadata.source, source)
- .data(metadata.flv, flv)
- ;
- settings.onChange();
- },
-
- // clears video embed
- reset: function() {
- module.debug('Clearing video embed and showing placeholder');
- $module
- .removeClass(className.active)
- ;
- $embed
- .html(' ')
- ;
- $placeholder
- .show()
- ;
- settings.onReset();
- },
-
- // plays current video
- play: function() {
- module.debug('Playing video');
- var
- source = $module.data(metadata.source),
- flv = $module.data(metadata.flv)
- ;
- $embed
- .html( module.generate.html(source, flv) )
- ;
- $module
- .addClass(className.active)
- ;
- settings.onPlay();
- },
-
- generate: {
- // generates iframe html
- html: function(source, flv) {
- module.debug('Generating embed html');
- var
- width = (settings.width == 'auto')
- ? $module.width()
- : settings.width,
- height = (settings.height == 'auto')
- ? $module.height()
- : settings.height,
- html
- ;
- if(source == 'vimeo') {
- html = ''
- + '
'
- ;
- }
- else if(source == 'youtube') {
- html = ''
- + '
'
- ;
- }
- return html;
- },
-
- // generate url parameters
- url: function(source) {
- var
- api = (settings.api)
- ? 1
- : 0,
- autoplay = (settings.autoplay)
- ? 1
- : 0,
- hd = (settings.hd)
- ? 1
- : 0,
- showUI = (settings.showUI)
- ? 1
- : 0,
- // opposite used for some params
- hideUI = !(settings.showUI)
- ? 1
- : 0,
- url = ''
- ;
- if(source == 'vimeo') {
- url = ''
- + 'api=' + api
- + '&title=' + showUI
- + '&byline=' + showUI
- + '&portrait=' + showUI
- + '&autoplay=' + autoplay
- ;
- if(settings.color) {
- url += '&color=' + settings.color;
- }
- }
- else if(source == 'youtube') {
- url = ''
- + 'enablejsapi=' + api
- + '&autoplay=' + autoplay
- + '&autohide=' + hideUI
- + '&hq=' + hd
- + '&modestbranding=1'
- ;
- if(settings.color) {
- url += '&color=' + settings.color;
- }
- }
- return url;
- }
- },
-
- /* standard module */
- debug: function(message, variableName) {
- if(settings.debug) {
- if(variableName !== undefined) {
- console.info(settings.moduleName + ': ' + message, variableName);
- }
- else {
- console.info(settings.moduleName + ': ' + message);
- }
- }
- },
- error: function(errorMessage) {
- console.warn(settings.moduleName + ': ' + 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.errors.method);
- return false;
- });
- }
- if ( $.isFunction( method ) ) {
- return method.apply(context, methodArguments);
- }
- // return retrieved variable or chain
- return method;
- }
- };
- // check for invoking internal method
- if(methodInvoked) {
- invokedResponse = module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
- }
- // otherwise initialize
- else {
- if(instance) {
- module.destroy();
- }
- module.initialize();
- }
-
- })
- ;
- // chain or return queried method
- return (invokedResponse !== undefined)
- ? invokedResponse
- : this
- ;
- };
-
-
- $.fn.videoPlaylist = function(video, parameters) {
- var
- $allModules = $(this),
- $video = $(video),
- $iframe = $video.find('.embed iframe'),
-
- settings = $.extend({}, $.fn.videoPlaylist.settings, parameters, true)
- ;
- $allModules
- .each(function() {
- var
- $element = $(this),
-
- metadata = settings.metadata,
- namespace = settings.namespace,
- className = settings.className,
-
- module = {
- initialize: function() {
- $element
- .on('click.' + namespace , module.changeVideo)
- ;
- },
- changeVideo: function() {
- var
- flv = $element.data(metadata.flv) || false,
- source = $element.data(metadata.source) || false,
- placeholder = $element.data(metadata.placeholder) || false
- ;
- if(flv && source) {
- $video
- .data(metadata.source, source)
- .data(metadata.flv, flv)
- ;
- if(settings.showPlaceholder) {
- $video
- .removeClass(className.active)
- .find($.fn.video.selector.placeholder)
- .attr('src', placeholder)
- ;
- }
- else {
- try {
- $video
- .video('play')
- ;
- }
- catch(error) {
- console.warn('Video Playlist Module: ' + settings.error.init);
- }
- }
- $allModules
- .removeClass(className.active)
- ;
- $element
- .addClass(className.active)
- ;
- }
- }
- }
- ;
- module.initialize();
- })
- ;
-
- if(settings.playFirst) {
- $allModules
- .eq(0)
- .trigger('click')
- ;
- // we all like a good hack
- if($iframe.size() > 0) {
- $iframe
- .attr('src', $iframe.attr('src').replace('autoplay=1', 'autoplay=0') )
- ;
- }
-
- }
-
- };
-
- $.fn.video.settings = {
-
- moduleName : 'Video',
- namespace : 'video',
- debug : false,
-
- metadata : {
- source : 'source',
- flv : 'flv'
- },
-
- onPlay : function(){},
- onReset : function(){},
- onChange : function(){},
-
- // callbacks not coded yet (needs to use jsapi)
- play : function() {},
- pause : function() {},
- stop : function() {},
-
- width : 'auto',
- height : 'auto',
-
- autoplay : false,
- color : '#442359',
- hd : true,
- showUI : false,
- api : true,
-
- errors : {
- method : 'The method you called is not defined'
- },
-
- className : {
- active : 'active'
- },
-
- selector : {
- embed : '.embed',
- placeholder : '.placeholder',
- playButton : '.play'
- }
- };
-
- $.fn.videoPlaylist.settings = {
- moduleName : 'Video Playlist',
- namespace : 'videoPlaylist',
-
- source : 'vimeo',
- showPlaceholder : false,
- playFirst : true,
-
- metadata: {
- flv : 'flv',
- source : 'source',
- placeholder : 'placeholder'
- },
-
- errors: {
- init : 'The video player you specified was not yet initialized'
- },
-
- className : {
- active : 'active'
- }
-
- };
-
-})( jQuery, window , document );
diff --git a/node/src/files/components/semantic/uncompressed/views/activity-feed.css b/node/src/files/components/semantic/views/activity-feed.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/views/activity-feed.css
rename to node/src/files/components/semantic/views/activity-feed.css
diff --git a/node/src/files/components/semantic/uncompressed/views/cover.css b/node/src/files/components/semantic/views/cover.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/views/cover.css
rename to node/src/files/components/semantic/views/cover.css
diff --git a/node/src/files/components/semantic/uncompressed/views/data-grid.css b/node/src/files/components/semantic/views/data-grid.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/views/data-grid.css
rename to node/src/files/components/semantic/views/data-grid.css
diff --git a/node/src/files/components/semantic/uncompressed/views/notecard.css b/node/src/files/components/semantic/views/notecard.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/views/notecard.css
rename to node/src/files/components/semantic/views/notecard.css
diff --git a/node/src/files/components/semantic/uncompressed/views/video.css b/node/src/files/components/semantic/views/video.css
similarity index 100%
rename from node/src/files/components/semantic/uncompressed/views/video.css
rename to node/src/files/components/semantic/views/video.css
diff --git a/node/src/layouts/default.html.eco b/node/src/layouts/default.html.eco
index 6617c05a6..dfecef4c1 100755
--- a/node/src/layouts/default.html.eco
+++ b/node/src/layouts/default.html.eco
@@ -24,23 +24,23 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -54,10 +54,10 @@
-
-
-
-
+
+
+
+