Update semantic UI to 2.4.2
authorJan Dittberner <jandd@cacert.org>
Wed, 31 Jul 2019 12:48:02 +0000 (14:48 +0200)
committerJan Dittberner <jandd@cacert.org>
Wed, 31 Jul 2019 12:48:02 +0000 (14:48 +0200)
141 files changed:
.gitignore
semantic.json
semantic/src/definitions/behaviors/api.js
semantic/src/definitions/behaviors/colorize.js [deleted file]
semantic/src/definitions/behaviors/form.js
semantic/src/definitions/behaviors/state.js [deleted file]
semantic/src/definitions/behaviors/visibility.js [changed mode: 0644->0755]
semantic/src/definitions/behaviors/visit.js [deleted file]
semantic/src/definitions/collections/breadcrumb.less [changed mode: 0644->0755]
semantic/src/definitions/collections/form.less [changed mode: 0644->0755]
semantic/src/definitions/collections/grid.less [changed mode: 0644->0755]
semantic/src/definitions/collections/menu.less [changed mode: 0644->0755]
semantic/src/definitions/collections/message.less [changed mode: 0644->0755]
semantic/src/definitions/collections/table.less [changed mode: 0644->0755]
semantic/src/definitions/elements/button.less [changed mode: 0644->0755]
semantic/src/definitions/elements/divider.less [changed mode: 0644->0755]
semantic/src/definitions/elements/flag.less [changed mode: 0644->0755]
semantic/src/definitions/elements/header.less [changed mode: 0644->0755]
semantic/src/definitions/elements/icon.less [changed mode: 0644->0755]
semantic/src/definitions/elements/image.less [changed mode: 0644->0755]
semantic/src/definitions/elements/input.less [changed mode: 0644->0755]
semantic/src/definitions/elements/label.less [changed mode: 0644->0755]
semantic/src/definitions/elements/list.less [changed mode: 0644->0755]
semantic/src/definitions/elements/loader.less [changed mode: 0644->0755]
semantic/src/definitions/elements/placeholder.less [new file with mode: 0644]
semantic/src/definitions/elements/rail.less [changed mode: 0644->0755]
semantic/src/definitions/elements/reveal.less [changed mode: 0644->0755]
semantic/src/definitions/elements/segment.less [changed mode: 0644->0755]
semantic/src/definitions/elements/step.less [changed mode: 0644->0755]
semantic/src/definitions/globals/reset.less [changed mode: 0644->0755]
semantic/src/definitions/globals/site.less [changed mode: 0644->0755]
semantic/src/definitions/modules/accordion.js
semantic/src/definitions/modules/accordion.less [changed mode: 0644->0755]
semantic/src/definitions/modules/checkbox.js
semantic/src/definitions/modules/checkbox.less [changed mode: 0644->0755]
semantic/src/definitions/modules/dimmer.js [changed mode: 0644->0755]
semantic/src/definitions/modules/dimmer.less [changed mode: 0644->0755]
semantic/src/definitions/modules/dropdown.js
semantic/src/definitions/modules/dropdown.less [changed mode: 0644->0755]
semantic/src/definitions/modules/embed.js
semantic/src/definitions/modules/modal.js [changed mode: 0644->0755]
semantic/src/definitions/modules/modal.less [changed mode: 0644->0755]
semantic/src/definitions/modules/nag.js
semantic/src/definitions/modules/nag.less [changed mode: 0644->0755]
semantic/src/definitions/modules/popup.js
semantic/src/definitions/modules/popup.less [changed mode: 0644->0755]
semantic/src/definitions/modules/progress.js
semantic/src/definitions/modules/progress.less [changed mode: 0644->0755]
semantic/src/definitions/modules/rating.js
semantic/src/definitions/modules/rating.less [changed mode: 0644->0755]
semantic/src/definitions/modules/search.js
semantic/src/definitions/modules/search.less [changed mode: 0644->0755]
semantic/src/definitions/modules/shape.js
semantic/src/definitions/modules/shape.less [changed mode: 0644->0755]
semantic/src/definitions/modules/sidebar.js
semantic/src/definitions/modules/sidebar.less [changed mode: 0644->0755]
semantic/src/definitions/modules/sticky.js [changed mode: 0644->0755]
semantic/src/definitions/modules/sticky.less [changed mode: 0644->0755]
semantic/src/definitions/modules/tab.js
semantic/src/definitions/modules/tab.less [changed mode: 0644->0755]
semantic/src/definitions/modules/transition.js [changed mode: 0644->0755]
semantic/src/definitions/modules/transition.less [changed mode: 0644->0755]
semantic/src/definitions/views/card.less [changed mode: 0644->0755]
semantic/src/definitions/views/comment.less [changed mode: 0644->0755]
semantic/src/definitions/views/feed.less [changed mode: 0644->0755]
semantic/src/definitions/views/item.less [changed mode: 0644->0755]
semantic/src/definitions/views/statistic.less [changed mode: 0644->0755]
semantic/src/theme.less
semantic/src/themes/default/assets/fonts/brand-icons.eot [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/brand-icons.svg [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/brand-icons.ttf [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/brand-icons.woff [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/brand-icons.woff2 [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/icons.eot
semantic/src/themes/default/assets/fonts/icons.svg
semantic/src/themes/default/assets/fonts/icons.ttf
semantic/src/themes/default/assets/fonts/icons.woff
semantic/src/themes/default/assets/fonts/icons.woff2
semantic/src/themes/default/assets/fonts/outline-icons.eot [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/outline-icons.svg [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/outline-icons.ttf [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/outline-icons.woff [new file with mode: 0644]
semantic/src/themes/default/assets/fonts/outline-icons.woff2 [new file with mode: 0644]
semantic/src/themes/default/collections/breadcrumb.variables
semantic/src/themes/default/collections/form.variables
semantic/src/themes/default/collections/menu.variables
semantic/src/themes/default/collections/message.variables
semantic/src/themes/default/collections/table.variables
semantic/src/themes/default/elements/button.variables
semantic/src/themes/default/elements/divider.variables
semantic/src/themes/default/elements/flag.overrides
semantic/src/themes/default/elements/header.variables
semantic/src/themes/default/elements/icon.overrides [changed mode: 0644->0755]
semantic/src/themes/default/elements/icon.variables
semantic/src/themes/default/elements/label.variables
semantic/src/themes/default/elements/list.variables
semantic/src/themes/default/elements/loader.variables
semantic/src/themes/default/elements/placeholder.overrides [new file with mode: 0644]
semantic/src/themes/default/elements/placeholder.variables [new file with mode: 0644]
semantic/src/themes/default/elements/reveal.variables
semantic/src/themes/default/elements/segment.variables
semantic/src/themes/default/elements/step.variables
semantic/src/themes/default/globals/reset.overrides [changed mode: 0644->0755]
semantic/src/themes/default/globals/site.variables [changed mode: 0644->0755]
semantic/src/themes/default/modules/accordion.overrides
semantic/src/themes/default/modules/accordion.variables
semantic/src/themes/default/modules/checkbox.variables
semantic/src/themes/default/modules/dimmer.variables
semantic/src/themes/default/modules/dropdown.overrides [changed mode: 0644->0755]
semantic/src/themes/default/modules/dropdown.variables [changed mode: 0644->0755]
semantic/src/themes/default/modules/modal.variables [changed mode: 0644->0755]
semantic/src/themes/default/modules/popup.variables
semantic/src/themes/default/modules/progress.variables
semantic/src/themes/default/modules/search.variables
semantic/src/themes/default/modules/transition.overrides
semantic/src/themes/default/views/ad.variables
semantic/src/themes/default/views/card.variables
semantic/src/themes/default/views/comment.variables
semantic/src/themes/default/views/feed.variables
semantic/src/themes/default/views/item.variables
semantic/src/themes/default/views/statistic.variables
semantic/src/themes/material/assets/fonts/icons.woff2 [new file with mode: 0644]
semantic/tasks/admin/components/create.js
semantic/tasks/admin/components/init.js
semantic/tasks/admin/components/update.js
semantic/tasks/admin/distributions/update.js
semantic/tasks/admin/register.js
semantic/tasks/build/css.js
semantic/tasks/build/javascript.js
semantic/tasks/collections/internal.js
semantic/tasks/config/admin/release.js
semantic/tasks/config/defaults.js
semantic/tasks/config/project/install.js
semantic/tasks/config/tasks.js
semantic/tasks/config/user.js
semantic/tasks/docs/build.js
semantic/tasks/docs/serve.js
semantic/tasks/install.js
semantic/tasks/rtl/build.js
semantic/tasks/rtl/watch.js
semantic/tasks/watch.js

index 3a71e2f..12f23a8 100644 (file)
@@ -9,3 +9,4 @@
 cacert-boardvoting
 config.yaml
 boardvoting/assets.go
+node_modules/
index 063aac1..2c83918 100644 (file)
@@ -8,43 +8,16 @@
       "themes": "src/themes/"
     },
     "output": {
-      "packaged": "../static/",
+      "packaged": "../boardvoting/static/",
       "uncompressed": "dist/components/",
       "compressed": "dist/components/",
-      "themes": "../static/themes/"
+      "themes": "../boardvoting/static/themes/"
     },
     "clean": "dist/"
   },
   "permission": false,
   "autoInstall": false,
   "rtl": false,
-  "components": [
-    "reset",
-    "site",
-    "button",
-    "container",
-    "divider",
-    "header",
-    "icon",
-    "input",
-    "label",
-    "list",
-    "segment",
-    "form",
-    "grid",
-    "menu",
-    "message",
-    "table",
-    "item",
-    "checkbox",
-    "dropdown",
-    "embed",
-    "shape",
-    "sticky",
-    "api",
-    "form",
-    "state",
-    "visibility"
-  ],
-  "version": "2.2.10"
+  "components": ["reset", "site", "button", "container", "divider", "header", "icon", "input", "label", "list", "segment", "form", "grid", "menu", "message", "table", "item", "checkbox", "dropdown", "embed", "shape", "sticky", "api", "form", "state", "visibility"],
+  "version": "2.4.2"
 }
index 578e201..cdcfc75 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 var
   window = (typeof window != 'undefined' && window.Math == Math)
diff --git a/semantic/src/definitions/behaviors/colorize.js b/semantic/src/definitions/behaviors/colorize.js
deleted file mode 100644 (file)
index 31efb1c..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/*!
- * # Semantic UI - Colorize
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-
-;(function ($, window, document, undefined) {
-
-"use strict";
-
-window = (typeof window != 'undefined' && window.Math == Math)
-  ? window
-  : (typeof self != 'undefined' && self.Math == Math)
-    ? self
-    : Function('return this')()
-;
-
-$.fn.colorize = function(parameters) {
-  var
-    settings          = ( $.isPlainObject(parameters) )
-      ? $.extend(true, {}, $.fn.colorize.settings, parameters)
-      : $.extend({}, $.fn.colorize.settings),
-    // hoist arguments
-    moduleArguments = arguments || false
-  ;
-  $(this)
-    .each(function(instanceIndex) {
-
-      var
-        $module         = $(this),
-
-        mainCanvas      = $('<canvas />')[0],
-        imageCanvas     = $('<canvas />')[0],
-        overlayCanvas   = $('<canvas />')[0],
-
-        backgroundImage = new Image(),
-
-        // defs
-        mainContext,
-        imageContext,
-        overlayContext,
-
-        image,
-        imageName,
-
-        width,
-        height,
-
-        // shortcuts
-        colors    = settings.colors,
-        paths     = settings.paths,
-        namespace = settings.namespace,
-        error     = settings.error,
-
-        // boilerplate
-        instance   = $module.data('module-' + namespace),
-        module
-      ;
-
-      module = {
-
-        checkPreconditions: function() {
-          module.debug('Checking pre-conditions');
-
-          if( !$.isPlainObject(colors) || $.isEmptyObject(colors) ) {
-            module.error(error.undefinedColors);
-            return false;
-          }
-          return true;
-        },
-
-        async: function(callback) {
-          if(settings.async) {
-            setTimeout(callback, 0);
-          }
-          else {
-            callback();
-          }
-        },
-
-        getMetadata: function() {
-          module.debug('Grabbing metadata');
-          image     = $module.data('image') || settings.image || undefined;
-          imageName = $module.data('name')  || settings.name  || instanceIndex;
-          width     = settings.width        || $module.width();
-          height    = settings.height       || $module.height();
-          if(width === 0 || height === 0) {
-            module.error(error.undefinedSize);
-          }
-        },
-
-        initialize: function() {
-          module.debug('Initializing with colors', colors);
-          if( module.checkPreconditions() ) {
-
-            module.async(function() {
-              module.getMetadata();
-              module.canvas.create();
-
-              module.draw.image(function() {
-                module.draw.colors();
-                module.canvas.merge();
-              });
-              $module
-                .data('module-' + namespace, module)
-              ;
-            });
-          }
-        },
-
-        redraw: function() {
-          module.debug('Redrawing image');
-          module.async(function() {
-            module.canvas.clear();
-            module.draw.colors();
-            module.canvas.merge();
-          });
-        },
-
-        change: {
-          color: function(colorName, color) {
-            module.debug('Changing color', colorName);
-            if(colors[colorName] === undefined) {
-              module.error(error.missingColor);
-              return false;
-            }
-            colors[colorName] = color;
-            module.redraw();
-          }
-        },
-
-        canvas: {
-          create: function() {
-            module.debug('Creating canvases');
-
-            mainCanvas.width     = width;
-            mainCanvas.height    = height;
-            imageCanvas.width    = width;
-            imageCanvas.height   = height;
-            overlayCanvas.width  = width;
-            overlayCanvas.height = height;
-
-            mainContext    = mainCanvas.getContext('2d');
-            imageContext   = imageCanvas.getContext('2d');
-            overlayContext = overlayCanvas.getContext('2d');
-
-            $module
-              .append( mainCanvas )
-            ;
-            mainContext    = $module.children('canvas')[0].getContext('2d');
-          },
-          clear: function(context) {
-            module.debug('Clearing canvas');
-            overlayContext.fillStyle = '#FFFFFF';
-            overlayContext.fillRect(0, 0, width, height);
-          },
-          merge: function() {
-            if( !$.isFunction(mainContext.blendOnto) ) {
-              module.error(error.missingPlugin);
-              return;
-            }
-            mainContext.putImageData( imageContext.getImageData(0, 0, width, height), 0, 0);
-            overlayContext.blendOnto(mainContext, 'multiply');
-          }
-        },
-
-        draw: {
-
-          image: function(callback) {
-            module.debug('Drawing image');
-            callback = callback || function(){};
-            if(image) {
-              backgroundImage.src    = image;
-              backgroundImage.onload = function() {
-                imageContext.drawImage(backgroundImage, 0, 0);
-                callback();
-              };
-            }
-            else {
-              module.error(error.noImage);
-              callback();
-            }
-          },
-
-          colors: function() {
-            module.debug('Drawing color overlays', colors);
-            $.each(colors, function(colorName, color) {
-              settings.onDraw(overlayContext, imageName, colorName, color);
-            });
-          }
-
-        },
-
-        debug: function(message, variableName) {
-          if(settings.debug) {
-            if(variableName !== undefined) {
-              console.info(settings.name + ': ' + message, variableName);
-            }
-            else {
-              console.info(settings.name + ': ' + message);
-            }
-          }
-        },
-        error: function(errorMessage) {
-          console.warn(settings.name + ': ' + errorMessage);
-        },
-        invoke: function(methodName, context, methodArguments) {
-          var
-            method
-          ;
-          methodArguments = methodArguments || Array.prototype.slice.call( arguments, 2 );
-
-          if(typeof methodName == 'string' && instance !== undefined) {
-            methodName = methodName.split('.');
-            $.each(methodName, function(index, name) {
-              if( $.isPlainObject( instance[name] ) ) {
-                instance = instance[name];
-                return true;
-              }
-              else if( $.isFunction( instance[name] ) ) {
-                method = instance[name];
-                return true;
-              }
-              module.error(settings.error.method);
-              return false;
-            });
-          }
-          return ( $.isFunction( method ) )
-            ? method.apply(context, methodArguments)
-            : false
-          ;
-        }
-
-      };
-      if(instance !== undefined && moduleArguments) {
-        // simpler than invoke realizing to invoke itself (and losing scope due prototype.call()
-        if(moduleArguments[0] == 'invoke') {
-          moduleArguments = Array.prototype.slice.call( moduleArguments, 1 );
-        }
-        return module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );
-      }
-      // initializing
-      module.initialize();
-    })
-  ;
-  return this;
-};
-
-$.fn.colorize.settings = {
-  name      : 'Image Colorizer',
-  debug     : true,
-  namespace : 'colorize',
-
-  onDraw    : function(overlayContext, imageName, colorName, color) {},
-
-  // whether to block execution while updating canvas
-  async     : true,
-  // object containing names and default values of color regions
-  colors    : {},
-
-  metadata: {
-    image : 'image',
-    name  : 'name'
-  },
-
-  error: {
-    noImage         : 'No tracing image specified',
-    undefinedColors : 'No default colors specified.',
-    missingColor    : 'Attempted to change color that does not exist',
-    missingPlugin   : 'Blend onto plug-in must be included',
-    undefinedHeight : 'The width or height of image canvas could not be automatically determined. Please specify a height.'
-  }
-
-};
-
-})( jQuery, window, document );
index 0176455..19d0945 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -252,6 +252,17 @@ $.fn.form = function(parameters) {
           bracketedRule: function(rule) {
             return (rule.type && rule.type.match(settings.regExp.bracket));
           },
+          shorthandFields: function(fields) {
+            var
+              fieldKeys = Object.keys(fields),
+              firstRule = fields[fieldKeys[0]]
+            ;
+            return module.is.shorthandRules(firstRule);
+          },
+          // duck type rule test
+          shorthandRules: function(rules) {
+            return (typeof rules == 'string' || $.isArray(rules));
+          },
           empty: function($field) {
             if(!$field || $field.length === 0) {
               return true;
@@ -347,7 +358,7 @@ $.fn.form = function(parameters) {
                   module.validate.field( validationRules );
                 }
               }
-              else if(settings.on == 'blur' || settings.on == 'change') {
+              else if(settings.on == 'blur') {
                 if(validationRules) {
                   module.validate.field( validationRules );
                 }
@@ -403,20 +414,37 @@ $.fn.form = function(parameters) {
                 : 'keyup'
             ;
           },
+          fieldsFromShorthand: function(fields) {
+            var
+              fullFields = {}
+            ;
+            $.each(fields, function(name, rules) {
+              if(typeof rules == 'string') {
+                rules = [rules];
+              }
+              fullFields[name] = {
+                rules: []
+              };
+              $.each(rules, function(index, rule) {
+                fullFields[name].rules.push({ type: rule });
+              });
+            });
+            return fullFields;
+          },
           prompt: function(rule, field) {
             var
               ruleName      = module.get.ruleName(rule),
               ancillary     = module.get.ancillaryValue(rule),
-              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,
+              $field        = module.get.field(field.identifier),
+              value         = $field.val(),
+              prompt        = $.isFunction(rule.prompt)
+                ? rule.prompt(value)
+                : rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,
               requiresValue = (prompt.search('{value}') !== -1),
               requiresName  = (prompt.search('{name}') !== -1),
               $label,
-              $field,
               name
             ;
-            if(requiresName || requiresValue) {
-              $field = module.get.field(field.identifier);
-            }
             if(requiresValue) {
               prompt = prompt.replace('{value}', $field.val());
             }
@@ -453,23 +481,9 @@ $.fn.form = function(parameters) {
               }
               else {
                 // 2.x
-                if(parameters.fields) {
-                  ruleKeys = Object.keys(parameters.fields);
-                  if( typeof parameters.fields[ruleKeys[0]] == 'string' || $.isArray(parameters.fields[ruleKeys[0]]) ) {
-                    $.each(parameters.fields, function(name, rules) {
-                      if(typeof rules == 'string') {
-                        rules = [rules];
-                      }
-                      parameters.fields[name] = {
-                        rules: []
-                      };
-                      $.each(rules, function(index, rule) {
-                        parameters.fields[name].rules.push({ type: rule });
-                      });
-                    });
-                  }
+                if(parameters.fields && module.is.shorthandFields(parameters.fields)) {
+                  parameters.fields = module.get.fieldsFromShorthand(parameters.fields);
                 }
-
                 settings   = $.extend(true, {}, $.fn.form.settings, parameters);
                 validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);
                 module.verbose('Extending settings', validation, settings);
@@ -589,8 +603,11 @@ $.fn.form = function(parameters) {
                 }
                 else {
                   if(isRadio) {
-                    if(isChecked) {
-                      values[name] = value;
+                    if(values[name] === undefined || values[name] == false) {
+                      values[name] = (isChecked)
+                        ? value || true
+                        : false
+                      ;
                     }
                   }
                   else if(isCheckbox) {
@@ -641,6 +658,44 @@ $.fn.form = function(parameters) {
         },
 
         add: {
+          // alias
+          rule: function(name, rules) {
+            module.add.field(name, rules);
+          },
+          field: function(name, rules) {
+            var
+              newValidation = {}
+            ;
+            if(module.is.shorthandRules(rules)) {
+              rules = $.isArray(rules)
+                ? rules
+                : [rules]
+              ;
+              newValidation[name] = {
+                rules: []
+              };
+              $.each(rules, function(index, rule) {
+                newValidation[name].rules.push({ type: rule });
+              });
+            }
+            else {
+              newValidation[name] = rules;
+            }
+            validation = $.extend({}, validation, newValidation);
+            module.debug('Adding rules', newValidation, validation);
+          },
+          fields: function(fields) {
+            var
+              newValidation
+            ;
+            if(fields && module.is.shorthandFields(fields)) {
+              newValidation = module.get.fieldsFromShorthand(fields);
+            }
+            else {
+              newValidation = fields;
+            }
+            validation = $.extend({}, validation, newValidation);
+          },
           prompt: function(identifier, errors) {
             var
               $field       = module.get.field(identifier),
@@ -693,6 +748,51 @@ $.fn.form = function(parameters) {
         },
 
         remove: {
+          rule: function(field, rule) {
+            var
+              rules = $.isArray(rule)
+                ? rule
+                : [rule]
+            ;
+            if(rule == undefined) {
+              module.debug('Removed all rules');
+              validation[field].rules = [];
+              return;
+            }
+            if(validation[field] == undefined || !$.isArray(validation[field].rules)) {
+              return;
+            }
+            $.each(validation[field].rules, function(index, rule) {
+              if(rules.indexOf(rule.type) !== -1) {
+                module.debug('Removed rule', rule.type);
+                validation[field].rules.splice(index, 1);
+              }
+            });
+          },
+          field: function(field) {
+            var
+              fields = $.isArray(field)
+                ? field
+                : [field]
+            ;
+            $.each(fields, function(index, field) {
+              module.remove.rule(field);
+            });
+          },
+          // alias
+          rules: function(field, rules) {
+            if($.isArray(field)) {
+              $.each(fields, function(index, field) {
+                module.remove.rule(field, rules);
+              });
+            }
+            else {
+              module.remove.rule(field, rules);
+            }
+          },
+          fields: function(fields) {
+            module.remove.field(fields);
+          },
           prompt: function(identifier) {
             var
               $field      = module.get.field(identifier),
@@ -857,7 +957,7 @@ $.fn.form = function(parameters) {
             if(typeof field == 'string') {
               module.verbose('Validating field', field);
               fieldName = field;
-              field = validation[field];
+              field     = validation[field];
             }
             var
               identifier    = field.identifier || fieldName,
@@ -1163,10 +1263,10 @@ $.fn.form.settings = {
     isExactly            : '{name} must be exactly "{ruleValue}"',
     not                  : '{name} cannot be set to "{ruleValue}"',
     notExactly           : '{name} cannot be set to exactly "{ruleValue}"',
-    contain              : '{name} cannot contain "{ruleValue}"',
-    containExactly       : '{name} cannot contain exactly "{ruleValue}"',
-    doesntContain        : '{name} must contain  "{ruleValue}"',
-    doesntContainExactly : '{name} must contain exactly "{ruleValue}"',
+    contain              : '{name} must contain "{ruleValue}"',
+    containExactly       : '{name} must contain exactly "{ruleValue}"',
+    doesntContain        : '{name} cannot contain  "{ruleValue}"',
+    doesntContainExactly : '{name} cannot contain exactly "{ruleValue}"',
     minLength            : '{name} must be at least {ruleValue} characters',
     length               : '{name} must be at least {ruleValue} characters',
     exactLength          : '{name} must be exactly {ruleValue} characters',
diff --git a/semantic/src/definitions/behaviors/state.js b/semantic/src/definitions/behaviors/state.js
deleted file mode 100644 (file)
index 83f9ae7..0000000
+++ /dev/null
@@ -1,708 +0,0 @@
-/*!
- * # Semantic UI - State
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-
-;(function ($, window, document, undefined) {
-
-"use strict";
-
-window = (typeof window != 'undefined' && window.Math == Math)
-  ? window
-  : (typeof self != 'undefined' && self.Math == Math)
-    ? self
-    : Function('return this')()
-;
-
-$.fn.state = function(parameters) {
-  var
-    $allModules     = $(this),
-
-    moduleSelector  = $allModules.selector || '',
-
-    hasTouch        = ('ontouchstart' in document.documentElement),
-    time            = new Date().getTime(),
-    performance     = [],
-
-    query           = arguments[0],
-    methodInvoked   = (typeof query == 'string'),
-    queryArguments  = [].slice.call(arguments, 1),
-
-    returnedValue
-  ;
-  $allModules
-    .each(function() {
-      var
-        settings          = ( $.isPlainObject(parameters) )
-          ? $.extend(true, {}, $.fn.state.settings, parameters)
-          : $.extend({}, $.fn.state.settings),
-
-        error           = settings.error,
-        metadata        = settings.metadata,
-        className       = settings.className,
-        namespace       = settings.namespace,
-        states          = settings.states,
-        text            = settings.text,
-
-        eventNamespace  = '.' + namespace,
-        moduleNamespace = namespace + '-module',
-
-        $module         = $(this),
-
-        element         = this,
-        instance        = $module.data(moduleNamespace),
-
-        module
-      ;
-      module = {
-
-        initialize: function() {
-          module.verbose('Initializing module');
-
-          // allow module to guess desired state based on element
-          if(settings.automatic) {
-            module.add.defaults();
-          }
-
-          // bind events with delegated events
-          if(settings.context && moduleSelector !== '') {
-            $(settings.context)
-              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)
-              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)
-              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)
-            ;
-          }
-          else {
-            $module
-              .on('mouseenter' + eventNamespace, module.change.text)
-              .on('mouseleave' + eventNamespace, module.reset.text)
-              .on('click'      + eventNamespace, module.toggle.state)
-            ;
-          }
-          module.instantiate();
-        },
-
-        instantiate: function() {
-          module.verbose('Storing instance of module', module);
-          instance = module;
-          $module
-            .data(moduleNamespace, module)
-          ;
-        },
-
-        destroy: function() {
-          module.verbose('Destroying previous module', instance);
-          $module
-            .off(eventNamespace)
-            .removeData(moduleNamespace)
-          ;
-        },
-
-        refresh: function() {
-          module.verbose('Refreshing selector cache');
-          $module = $(element);
-        },
-
-        add: {
-          defaults: function() {
-            var
-              userStates = parameters && $.isPlainObject(parameters.states)
-                ? parameters.states
-                : {}
-            ;
-            $.each(settings.defaults, function(type, typeStates) {
-              if( module.is[type] !== undefined && module.is[type]() ) {
-                module.verbose('Adding default states', type, element);
-                $.extend(settings.states, typeStates, userStates);
-              }
-            });
-          }
-        },
-
-        is: {
-
-          active: function() {
-            return $module.hasClass(className.active);
-          },
-          loading: function() {
-            return $module.hasClass(className.loading);
-          },
-          inactive: function() {
-            return !( $module.hasClass(className.active) );
-          },
-          state: function(state) {
-            if(className[state] === undefined) {
-              return false;
-            }
-            return $module.hasClass( className[state] );
-          },
-
-          enabled: function() {
-            return !( $module.is(settings.filter.active) );
-          },
-          disabled: function() {
-            return ( $module.is(settings.filter.active) );
-          },
-          textEnabled: function() {
-            return !( $module.is(settings.filter.text) );
-          },
-
-          // definitions for automatic type detection
-          button: function() {
-            return $module.is('.button:not(a, .submit)');
-          },
-          input: function() {
-            return $module.is('input');
-          },
-          progress: function() {
-            return $module.is('.ui.progress');
-          }
-        },
-
-        allow: function(state) {
-          module.debug('Now allowing state', state);
-          states[state] = true;
-        },
-        disallow: function(state) {
-          module.debug('No longer allowing', state);
-          states[state] = false;
-        },
-
-        allows: function(state) {
-          return states[state] || false;
-        },
-
-        enable: function() {
-          $module.removeClass(className.disabled);
-        },
-
-        disable: function() {
-          $module.addClass(className.disabled);
-        },
-
-        setState: function(state) {
-          if(module.allows(state)) {
-            $module.addClass( className[state] );
-          }
-        },
-
-        removeState: function(state) {
-          if(module.allows(state)) {
-            $module.removeClass( className[state] );
-          }
-        },
-
-        toggle: {
-          state: function() {
-            var
-              apiRequest,
-              requestCancelled
-            ;
-            if( module.allows('active') && module.is.enabled() ) {
-              module.refresh();
-              if($.fn.api !== undefined) {
-                apiRequest       = $module.api('get request');
-                requestCancelled = $module.api('was cancelled');
-                if( requestCancelled ) {
-                  module.debug('API Request cancelled by beforesend');
-                  settings.activateTest   = function(){ return false; };
-                  settings.deactivateTest = function(){ return false; };
-                }
-                else if(apiRequest) {
-                  module.listenTo(apiRequest);
-                  return;
-                }
-              }
-              module.change.state();
-            }
-          }
-        },
-
-        listenTo: function(apiRequest) {
-          module.debug('API request detected, waiting for state signal', apiRequest);
-          if(apiRequest) {
-            if(text.loading) {
-              module.update.text(text.loading);
-            }
-            $.when(apiRequest)
-              .then(function() {
-                if(apiRequest.state() == 'resolved') {
-                  module.debug('API request succeeded');
-                  settings.activateTest   = function(){ return true; };
-                  settings.deactivateTest = function(){ return true; };
-                }
-                else {
-                  module.debug('API request failed');
-                  settings.activateTest   = function(){ return false; };
-                  settings.deactivateTest = function(){ return false; };
-                }
-                module.change.state();
-              })
-            ;
-          }
-        },
-
-        // checks whether active/inactive state can be given
-        change: {
-
-          state: function() {
-            module.debug('Determining state change direction');
-            // inactive to active change
-            if( module.is.inactive() ) {
-              module.activate();
-            }
-            else {
-              module.deactivate();
-            }
-            if(settings.sync) {
-              module.sync();
-            }
-            settings.onChange.call(element);
-          },
-
-          text: function() {
-            if( module.is.textEnabled() ) {
-              if(module.is.disabled() ) {
-                module.verbose('Changing text to disabled text', text.hover);
-                module.update.text(text.disabled);
-              }
-              else if( module.is.active() ) {
-                if(text.hover) {
-                  module.verbose('Changing text to hover text', text.hover);
-                  module.update.text(text.hover);
-                }
-                else if(text.deactivate) {
-                  module.verbose('Changing text to deactivating text', text.deactivate);
-                  module.update.text(text.deactivate);
-                }
-              }
-              else {
-                if(text.hover) {
-                  module.verbose('Changing text to hover text', text.hover);
-                  module.update.text(text.hover);
-                }
-                else if(text.activate){
-                  module.verbose('Changing text to activating text', text.activate);
-                  module.update.text(text.activate);
-                }
-              }
-            }
-          }
-
-        },
-
-        activate: function() {
-          if( settings.activateTest.call(element) ) {
-            module.debug('Setting state to active');
-            $module
-              .addClass(className.active)
-            ;
-            module.update.text(text.active);
-            settings.onActivate.call(element);
-          }
-        },
-
-        deactivate: function() {
-          if( settings.deactivateTest.call(element) ) {
-            module.debug('Setting state to inactive');
-            $module
-              .removeClass(className.active)
-            ;
-            module.update.text(text.inactive);
-            settings.onDeactivate.call(element);
-          }
-        },
-
-        sync: function() {
-          module.verbose('Syncing other buttons to current state');
-          if( module.is.active() ) {
-            $allModules
-              .not($module)
-                .state('activate');
-          }
-          else {
-            $allModules
-              .not($module)
-                .state('deactivate')
-            ;
-          }
-        },
-
-        get: {
-          text: function() {
-            return (settings.selector.text)
-              ? $module.find(settings.selector.text).text()
-              : $module.html()
-            ;
-          },
-          textFor: function(state) {
-            return text[state] || false;
-          }
-        },
-
-        flash: {
-          text: function(text, duration, callback) {
-            var
-              previousText = module.get.text()
-            ;
-            module.debug('Flashing text message', text, duration);
-            text     = text     || settings.text.flash;
-            duration = duration || settings.flashDuration;
-            callback = callback || function() {};
-            module.update.text(text);
-            setTimeout(function(){
-              module.update.text(previousText);
-              callback.call(element);
-            }, duration);
-          }
-        },
-
-        reset: {
-          // on mouseout sets text to previous value
-          text: function() {
-            var
-              activeText   = text.active   || $module.data(metadata.storedText),
-              inactiveText = text.inactive || $module.data(metadata.storedText)
-            ;
-            if( module.is.textEnabled() ) {
-              if( module.is.active() && activeText) {
-                module.verbose('Resetting active text', activeText);
-                module.update.text(activeText);
-              }
-              else if(inactiveText) {
-                module.verbose('Resetting inactive text', activeText);
-                module.update.text(inactiveText);
-              }
-            }
-          }
-        },
-
-        update: {
-          text: function(text) {
-            var
-              currentText = module.get.text()
-            ;
-            if(text && text !== currentText) {
-              module.debug('Updating text', text);
-              if(settings.selector.text) {
-                $module
-                  .data(metadata.storedText, text)
-                  .find(settings.selector.text)
-                    .text(text)
-                ;
-              }
-              else {
-                $module
-                  .data(metadata.storedText, text)
-                  .html(text)
-                ;
-              }
-            }
-            else {
-              module.debug('Text is already set, ignoring update', text);
-            }
-          }
-        },
-
-        setting: function(name, value) {
-          module.debug('Changing setting', name, value);
-          if( $.isPlainObject(name) ) {
-            $.extend(true, settings, name);
-          }
-          else if(value !== undefined) {
-            if($.isPlainObject(settings[name])) {
-              $.extend(true, settings[name], value);
-            }
-            else {
-              settings[name] = value;
-            }
-          }
-          else {
-            return settings[name];
-          }
-        },
-        internal: function(name, value) {
-          if( $.isPlainObject(name) ) {
-            $.extend(true, module, name);
-          }
-          else if(value !== undefined) {
-            module[name] = value;
-          }
-          else {
-            return module[name];
-          }
-        },
-        debug: function() {
-          if(!settings.silent && settings.debug) {
-            if(settings.performance) {
-              module.performance.log(arguments);
-            }
-            else {
-              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
-              module.debug.apply(console, arguments);
-            }
-          }
-        },
-        verbose: function() {
-          if(!settings.silent && settings.verbose && settings.debug) {
-            if(settings.performance) {
-              module.performance.log(arguments);
-            }
-            else {
-              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
-              module.verbose.apply(console, arguments);
-            }
-          }
-        },
-        error: function() {
-          if(!settings.silent) {
-            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
-            module.error.apply(console, arguments);
-          }
-        },
-        performance: {
-          log: function(message) {
-            var
-              currentTime,
-              executionTime,
-              previousTime
-            ;
-            if(settings.performance) {
-              currentTime   = new Date().getTime();
-              previousTime  = time || currentTime;
-              executionTime = currentTime - previousTime;
-              time          = currentTime;
-              performance.push({
-                'Name'           : message[0],
-                'Arguments'      : [].slice.call(message, 1) || '',
-                'Element'        : element,
-                'Execution Time' : executionTime
-              });
-            }
-            clearTimeout(module.performance.timer);
-            module.performance.timer = setTimeout(module.performance.display, 500);
-          },
-          display: function() {
-            var
-              title = settings.name + ':',
-              totalTime = 0
-            ;
-            time = false;
-            clearTimeout(module.performance.timer);
-            $.each(performance, function(index, data) {
-              totalTime += data['Execution Time'];
-            });
-            title += ' ' + totalTime + 'ms';
-            if(moduleSelector) {
-              title += ' \'' + moduleSelector + '\'';
-            }
-            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
-              console.groupCollapsed(title);
-              if(console.table) {
-                console.table(performance);
-              }
-              else {
-                $.each(performance, function(index, data) {
-                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
-                });
-              }
-              console.groupEnd();
-            }
-            performance = [];
-          }
-        },
-        invoke: function(query, passedArguments, context) {
-          var
-            object = instance,
-            maxDepth,
-            found,
-            response
-          ;
-          passedArguments = passedArguments || queryArguments;
-          context         = element         || context;
-          if(typeof query == 'string' && object !== undefined) {
-            query    = query.split(/[\. ]/);
-            maxDepth = query.length - 1;
-            $.each(query, function(depth, value) {
-              var camelCaseValue = (depth != maxDepth)
-                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
-                : query
-              ;
-              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
-                object = object[camelCaseValue];
-              }
-              else if( object[camelCaseValue] !== undefined ) {
-                found = object[camelCaseValue];
-                return false;
-              }
-              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
-                object = object[value];
-              }
-              else if( object[value] !== undefined ) {
-                found = object[value];
-                return false;
-              }
-              else {
-                module.error(error.method, query);
-                return false;
-              }
-            });
-          }
-          if ( $.isFunction( found ) ) {
-            response = found.apply(context, passedArguments);
-          }
-          else if(found !== undefined) {
-            response = found;
-          }
-          if($.isArray(returnedValue)) {
-            returnedValue.push(response);
-          }
-          else if(returnedValue !== undefined) {
-            returnedValue = [returnedValue, response];
-          }
-          else if(response !== undefined) {
-            returnedValue = response;
-          }
-          return found;
-        }
-      };
-
-      if(methodInvoked) {
-        if(instance === undefined) {
-          module.initialize();
-        }
-        module.invoke(query);
-      }
-      else {
-        if(instance !== undefined) {
-          instance.invoke('destroy');
-        }
-        module.initialize();
-      }
-    })
-  ;
-
-  return (returnedValue !== undefined)
-    ? returnedValue
-    : this
-  ;
-};
-
-$.fn.state.settings = {
-
-  // module info
-  name           : 'State',
-
-  // debug output
-  debug          : false,
-
-  // verbose debug output
-  verbose        : false,
-
-  // namespace for events
-  namespace      : 'state',
-
-  // debug data includes performance
-  performance    : true,
-
-  // callback occurs on state change
-  onActivate     : function() {},
-  onDeactivate   : function() {},
-  onChange       : function() {},
-
-  // state test functions
-  activateTest   : function() { return true; },
-  deactivateTest : function() { return true; },
-
-  // whether to automatically map default states
-  automatic      : true,
-
-  // activate / deactivate changes all elements instantiated at same time
-  sync           : false,
-
-  // default flash text duration, used for temporarily changing text of an element
-  flashDuration  : 1000,
-
-  // selector filter
-  filter     : {
-    text   : '.loading, .disabled',
-    active : '.disabled'
-  },
-
-  context    : false,
-
-  // error
-  error: {
-    beforeSend : 'The before send function has cancelled state change',
-    method     : 'The method you called is not defined.'
-  },
-
-  // metadata
-  metadata: {
-    promise    : 'promise',
-    storedText : 'stored-text'
-  },
-
-  // change class on state
-  className: {
-    active   : 'active',
-    disabled : 'disabled',
-    error    : 'error',
-    loading  : 'loading',
-    success  : 'success',
-    warning  : 'warning'
-  },
-
-  selector: {
-    // selector for text node
-    text: false
-  },
-
-  defaults : {
-    input: {
-      disabled : true,
-      loading  : true,
-      active   : true
-    },
-    button: {
-      disabled : true,
-      loading  : true,
-      active   : true,
-    },
-    progress: {
-      active   : true,
-      success  : true,
-      warning  : true,
-      error    : true
-    }
-  },
-
-  states     : {
-    active   : true,
-    disabled : true,
-    error    : true,
-    loading  : true,
-    success  : true,
-    warning  : true
-  },
-
-  text     : {
-    disabled   : false,
-    flash      : false,
-    hover      : false,
-    active     : false,
-    inactive   : false,
-    activate   : false,
-    deactivate : false
-  }
-
-};
-
-
-
-})( jQuery, window, document );
old mode 100644 (file)
new mode 100755 (executable)
index fcffbd8..8ae572c
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -927,13 +927,13 @@ $.fn.visibility = function(parameters) {
             // visibility
             element.topPassed        = (screen.top >= element.top);
             element.bottomPassed     = (screen.top >= element.bottom);
-            element.topVisible       = (screen.bottom >= element.top) && !element.bottomPassed;
-            element.bottomVisible    = (screen.bottom >= element.bottom) && !element.topPassed;
+            element.topVisible       = (screen.bottom >= element.top) && !element.topPassed;
+            element.bottomVisible    = (screen.bottom >= element.bottom) && !element.bottomPassed;
             element.pixelsPassed     = 0;
             element.percentagePassed = 0;
 
             // meta calculations
-            element.onScreen  = (element.topVisible && !element.bottomPassed);
+            element.onScreen  = ((element.topVisible || element.passing) && !element.bottomPassed);
             element.passing   = (element.topPassed && !element.bottomPassed);
             element.offScreen = (!element.onScreen);
 
diff --git a/semantic/src/definitions/behaviors/visit.js b/semantic/src/definitions/behaviors/visit.js
deleted file mode 100644 (file)
index df88d0b..0000000
+++ /dev/null
@@ -1,525 +0,0 @@
-/*!
- * # Semantic UI - Visit
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-
-;(function ($, window, document, undefined) {
-
-"use strict";
-
-window = (typeof window != 'undefined' && window.Math == Math)
-  ? window
-  : (typeof self != 'undefined' && self.Math == Math)
-    ? self
-    : Function('return this')()
-;
-
-$.visit = $.fn.visit = function(parameters) {
-  var
-    $allModules     = $.isFunction(this)
-        ? $(window)
-        : $(this),
-    moduleSelector  = $allModules.selector || '',
-
-    time            = new Date().getTime(),
-    performance     = [],
-
-    query           = arguments[0],
-    methodInvoked   = (typeof query == 'string'),
-    queryArguments  = [].slice.call(arguments, 1),
-    returnedValue
-  ;
-  $allModules
-    .each(function() {
-      var
-        settings          = ( $.isPlainObject(parameters) )
-          ? $.extend(true, {}, $.fn.visit.settings, parameters)
-          : $.extend({}, $.fn.visit.settings),
-
-        error           = settings.error,
-        namespace       = settings.namespace,
-
-        eventNamespace  = '.' + namespace,
-        moduleNamespace = namespace + '-module',
-
-        $module         = $(this),
-        $displays       = $(),
-
-        element         = this,
-        instance        = $module.data(moduleNamespace),
-        module
-      ;
-      module = {
-
-        initialize: function() {
-          if(settings.count) {
-            module.store(settings.key.count, settings.count);
-          }
-          else if(settings.id) {
-            module.add.id(settings.id);
-          }
-          else if(settings.increment && methodInvoked !== 'increment') {
-            module.increment();
-          }
-          module.add.display($module);
-          module.instantiate();
-        },
-
-        instantiate: function() {
-          module.verbose('Storing instance of visit module', module);
-          instance = module;
-          $module
-            .data(moduleNamespace, module)
-          ;
-        },
-
-        destroy: function() {
-          module.verbose('Destroying instance');
-          $module
-            .removeData(moduleNamespace)
-          ;
-        },
-
-        increment: function(id) {
-          var
-            currentValue = module.get.count(),
-            newValue     = +(currentValue) + 1
-          ;
-          if(id) {
-            module.add.id(id);
-          }
-          else {
-            if(newValue > settings.limit && !settings.surpass) {
-              newValue = settings.limit;
-            }
-            module.debug('Incrementing visits', newValue);
-            module.store(settings.key.count, newValue);
-          }
-        },
-
-        decrement: function(id) {
-          var
-            currentValue = module.get.count(),
-            newValue     = +(currentValue) - 1
-          ;
-          if(id) {
-            module.remove.id(id);
-          }
-          else {
-            module.debug('Removing visit');
-            module.store(settings.key.count, newValue);
-          }
-        },
-
-        get: {
-          count: function() {
-            return +(module.retrieve(settings.key.count)) || 0;
-          },
-          idCount: function(ids) {
-            ids = ids || module.get.ids();
-            return ids.length;
-          },
-          ids: function(delimitedIDs) {
-            var
-              idArray = []
-            ;
-            delimitedIDs = delimitedIDs || module.retrieve(settings.key.ids);
-            if(typeof delimitedIDs === 'string') {
-              idArray = delimitedIDs.split(settings.delimiter);
-            }
-            module.verbose('Found visited ID list', idArray);
-            return idArray;
-          },
-          storageOptions: function(data) {
-            var
-              options = {}
-            ;
-            if(settings.expires) {
-              options.expires = settings.expires;
-            }
-            if(settings.domain) {
-              options.domain = settings.domain;
-            }
-            if(settings.path) {
-              options.path = settings.path;
-            }
-            return options;
-          }
-        },
-
-        has: {
-          visited: function(id, ids) {
-            var
-              visited = false
-            ;
-            ids = ids || module.get.ids();
-            if(id !== undefined && ids) {
-              $.each(ids, function(index, value){
-                if(value == id) {
-                  visited = true;
-                }
-              });
-            }
-            return visited;
-          }
-        },
-
-        set: {
-          count: function(value) {
-            module.store(settings.key.count, value);
-          },
-          ids: function(value) {
-            module.store(settings.key.ids, value);
-          }
-        },
-
-        reset: function() {
-          module.store(settings.key.count, 0);
-          module.store(settings.key.ids, null);
-        },
-
-        add: {
-          id: function(id) {
-            var
-              currentIDs = module.retrieve(settings.key.ids),
-              newIDs = (currentIDs === undefined || currentIDs === '')
-                ? id
-                : currentIDs + settings.delimiter + id
-            ;
-            if( module.has.visited(id) ) {
-              module.debug('Unique content already visited, not adding visit', id, currentIDs);
-            }
-            else if(id === undefined) {
-              module.debug('ID is not defined');
-            }
-            else {
-              module.debug('Adding visit to unique content', id);
-              module.store(settings.key.ids, newIDs);
-            }
-            module.set.count( module.get.idCount() );
-          },
-          display: function(selector) {
-            var
-              $element = $(selector)
-            ;
-            if($element.length > 0 && !$.isWindow($element[0])) {
-              module.debug('Updating visit count for element', $element);
-              $displays = ($displays.length > 0)
-                ? $displays.add($element)
-                : $element
-              ;
-            }
-          }
-        },
-
-        remove: {
-          id: function(id) {
-            var
-              currentIDs = module.get.ids(),
-              newIDs     = []
-            ;
-            if(id !== undefined && currentIDs !== undefined) {
-              module.debug('Removing visit to unique content', id, currentIDs);
-              $.each(currentIDs, function(index, value){
-                if(value !== id) {
-                  newIDs.push(value);
-                }
-              });
-              newIDs = newIDs.join(settings.delimiter);
-              module.store(settings.key.ids, newIDs );
-            }
-            module.set.count( module.get.idCount() );
-          }
-        },
-
-        check: {
-          limit: function(value) {
-            value = value || module.get.count();
-            if(settings.limit) {
-              if(value >= settings.limit) {
-                module.debug('Pages viewed exceeded limit, firing callback', value, settings.limit);
-                settings.onLimit.call(element, value);
-              }
-              module.debug('Limit not reached', value, settings.limit);
-              settings.onChange.call(element, value);
-            }
-            module.update.display(value);
-          }
-        },
-
-        update: {
-          display: function(value) {
-            value = value || module.get.count();
-            if($displays.length > 0) {
-              module.debug('Updating displayed view count', $displays);
-              $displays.html(value);
-            }
-          }
-        },
-
-        store: function(key, value) {
-          var
-            options = module.get.storageOptions(value)
-          ;
-          if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
-            window.localStorage.setItem(key, value);
-            module.debug('Value stored using local storage', key, value);
-          }
-          else if($.cookie !== undefined) {
-            $.cookie(key, value, options);
-            module.debug('Value stored using cookie', key, value, options);
-          }
-          else {
-            module.error(error.noCookieStorage);
-            return;
-          }
-          if(key == settings.key.count) {
-            module.check.limit(value);
-          }
-        },
-        retrieve: function(key, value) {
-          var
-            storedValue
-          ;
-          if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
-            storedValue = window.localStorage.getItem(key);
-          }
-          // get by cookie
-          else if($.cookie !== undefined) {
-            storedValue = $.cookie(key);
-          }
-          else {
-            module.error(error.noCookieStorage);
-          }
-          if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {
-            storedValue = undefined;
-          }
-          return storedValue;
-        },
-
-        setting: function(name, value) {
-          if( $.isPlainObject(name) ) {
-            $.extend(true, settings, name);
-          }
-          else if(value !== undefined) {
-            settings[name] = value;
-          }
-          else {
-            return settings[name];
-          }
-        },
-        internal: function(name, value) {
-          module.debug('Changing internal', name, value);
-          if(value !== undefined) {
-            if( $.isPlainObject(name) ) {
-              $.extend(true, module, name);
-            }
-            else {
-              module[name] = value;
-            }
-          }
-          else {
-            return module[name];
-          }
-        },
-        debug: function() {
-          if(!settings.silent && settings.debug) {
-            if(settings.performance) {
-              module.performance.log(arguments);
-            }
-            else {
-              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
-              module.debug.apply(console, arguments);
-            }
-          }
-        },
-        verbose: function() {
-          if(!settings.silent && settings.verbose && settings.debug) {
-            if(settings.performance) {
-              module.performance.log(arguments);
-            }
-            else {
-              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
-              module.verbose.apply(console, arguments);
-            }
-          }
-        },
-        error: function() {
-          if(!settings.silent) {
-            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
-            module.error.apply(console, arguments);
-          }
-        },
-        performance: {
-          log: function(message) {
-            var
-              currentTime,
-              executionTime,
-              previousTime
-            ;
-            if(settings.performance) {
-              currentTime   = new Date().getTime();
-              previousTime  = time || currentTime;
-              executionTime = currentTime - previousTime;
-              time          = currentTime;
-              performance.push({
-                'Name'           : message[0],
-                'Arguments'      : [].slice.call(message, 1) || '',
-                'Element'        : element,
-                'Execution Time' : executionTime
-              });
-            }
-            clearTimeout(module.performance.timer);
-            module.performance.timer = setTimeout(module.performance.display, 500);
-          },
-          display: function() {
-            var
-              title = settings.name + ':',
-              totalTime = 0
-            ;
-            time = false;
-            clearTimeout(module.performance.timer);
-            $.each(performance, function(index, data) {
-              totalTime += data['Execution Time'];
-            });
-            title += ' ' + totalTime + 'ms';
-            if(moduleSelector) {
-              title += ' \'' + moduleSelector + '\'';
-            }
-            if($allModules.length > 1) {
-              title += ' ' + '(' + $allModules.length + ')';
-            }
-            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
-              console.groupCollapsed(title);
-              if(console.table) {
-                console.table(performance);
-              }
-              else {
-                $.each(performance, function(index, data) {
-                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
-                });
-              }
-              console.groupEnd();
-            }
-            performance = [];
-          }
-        },
-        invoke: function(query, passedArguments, context) {
-          var
-            object = instance,
-            maxDepth,
-            found,
-            response
-          ;
-          passedArguments = passedArguments || queryArguments;
-          context         = element         || context;
-          if(typeof query == 'string' && object !== undefined) {
-            query    = query.split(/[\. ]/);
-            maxDepth = query.length - 1;
-            $.each(query, function(depth, value) {
-              var camelCaseValue = (depth != maxDepth)
-                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
-                : query
-              ;
-              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
-                object = object[camelCaseValue];
-              }
-              else if( object[camelCaseValue] !== undefined ) {
-                found = object[camelCaseValue];
-                return false;
-              }
-              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
-                object = object[value];
-              }
-              else if( object[value] !== undefined ) {
-                found = object[value];
-                return false;
-              }
-              else {
-                return false;
-              }
-            });
-          }
-          if ( $.isFunction( found ) ) {
-            response = found.apply(context, passedArguments);
-          }
-          else if(found !== undefined) {
-            response = found;
-          }
-          if($.isArray(returnedValue)) {
-            returnedValue.push(response);
-          }
-          else if(returnedValue !== undefined) {
-            returnedValue = [returnedValue, response];
-          }
-          else if(response !== undefined) {
-            returnedValue = response;
-          }
-          return found;
-        }
-      };
-      if(methodInvoked) {
-        if(instance === undefined) {
-          module.initialize();
-        }
-        module.invoke(query);
-      }
-      else {
-        if(instance !== undefined) {
-          instance.invoke('destroy');
-        }
-        module.initialize();
-      }
-
-    })
-  ;
-  return (returnedValue !== undefined)
-    ? returnedValue
-    : this
-  ;
-};
-
-$.fn.visit.settings = {
-
-  name          : 'Visit',
-
-  debug         : false,
-  verbose       : false,
-  performance   : true,
-
-  namespace     : 'visit',
-
-  increment     : false,
-  surpass       : false,
-  count         : false,
-  limit         : false,
-
-  delimiter     : '&',
-  storageMethod : 'localstorage',
-
-  key           : {
-    count : 'visit-count',
-    ids   : 'visit-ids'
-  },
-
-  expires       : 30,
-  domain        : false,
-  path          : '/',
-
-  onLimit       : function() {},
-  onChange      : function() {},
-
-  error         : {
-    method          : 'The method you called is not defined',
-    missingPersist  : 'Using the persist setting requires the inclusion of PersistJS',
-    noCookieStorage : 'The default storage cookie requires $.cookie to be included.'
-  }
-
-};
-
-})( jQuery, window, document );
old mode 100644 (file)
new mode 100755 (executable)
index 0504601..73ef2a2
   color: @inputPlaceholderColor;
 }
 .ui.form :-ms-input-placeholder {
-  color: @inputPlaceholderColor;
+  color: @inputPlaceholderColor !important;
 }
 .ui.form ::-moz-placeholder {
   color: @inputPlaceholderColor;
   color: @inputPlaceholderFocusColor;
 }
 .ui.form :focus:-ms-input-placeholder {
-  color: @inputPlaceholderFocusColor;
+  color: @inputPlaceholderFocusColor !important;
 }
 .ui.form :focus::-moz-placeholder {
   color: @inputPlaceholderFocusColor;
     flex-wrap: wrap;
   }
 
-  .ui[class*="equal width"].form .fields > .field,
-  .ui.form [class*="equal width"].fields > .field,
-  .ui.form .two.fields > .fields,
-  .ui.form .two.fields > .field,
-  .ui.form .three.fields > .fields,
-  .ui.form .three.fields > .field,
-  .ui.form .four.fields > .fields,
-  .ui.form .four.fields > .field,
-  .ui.form .five.fields > .fields,
-  .ui.form .five.fields > .field,
-  .ui.form .six.fields > .fields,
-  .ui.form .six.fields > .field,
-  .ui.form .seven.fields > .fields,
-  .ui.form .seven.fields > .field,
-  .ui.form .eight.fields > .fields,
-  .ui.form .eight.fields > .field,
-  .ui.form .nine.fields > .fields,
-  .ui.form .nine.fields > .field,
-  .ui.form .ten.fields > .fields,
-  .ui.form .ten.fields > .field {
+  .ui[class*="equal width"].form:not(.unstackable) .fields > .field,
+  .ui.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field {
     width: @oneColumn !important;
     margin: 0em 0em @rowDistance;
   }
 
 /* Swap to full width on mobile */
 @media only screen and (max-width : @largestMobileScreen) {
-  .ui.form .two.fields > .fields,
-  .ui.form .two.fields > .field,
-  .ui.form .three.fields > .fields,
-  .ui.form .three.fields > .field,
-  .ui.form .four.fields > .fields,
-  .ui.form .four.fields > .field,
-  .ui.form .five.fields > .fields,
-  .ui.form .five.fields > .field,
-  .ui.form .fields > .two.wide.field,
-  .ui.form .fields > .three.wide.field,
-  .ui.form .fields > .four.wide.field,
-  .ui.form .fields > .five.wide.field,
-  .ui.form .fields > .six.wide.field,
-  .ui.form .fields > .seven.wide.field,
-  .ui.form .fields > .eight.wide.field,
-  .ui.form .fields > .nine.wide.field,
-  .ui.form .fields > .ten.wide.field,
-  .ui.form .fields > .eleven.wide.field,
-  .ui.form .fields > .twelve.wide.field,
-  .ui.form .fields > .thirteen.wide.field,
-  .ui.form .fields > .fourteen.wide.field,
-  .ui.form .fields > .fifteen.wide.field,
-  .ui.form .fields > .sixteen.wide.field {
+  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,
+  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field,
+  .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field {
     width: @oneColumn !important;
   }
   .ui.form .fields {
old mode 100644 (file)
new mode 100755 (executable)
index ba1b535..05c0a2b
   margin: (@rowSpacing / 2) (@gutterWidth / 2);
 }
 .ui.grid .column + .ui.vertical.divider {
-  height: ~"calc(50% - "(@rowSpacing/2)~")";
+  height: calc(50% - (@rowSpacing / 2));
 }
 
 /* Remove Border on Last Horizontal Segment */
   top: 0em;
   left: 0px;
 
-  width: ~"calc(100% - "@gutterWidth~")";
+  width: calc(100% - @gutterWidth);
   height: 1px;
 
   margin: 0% (@gutterWidth / 2);
 .ui.relaxed[class*="vertically divided"].grid > .row:before {
   margin-left: (@relaxedGutterWidth / 2);
   margin-right: (@relaxedGutterWidth / 2);
-  width: ~"calc(100% - "@relaxedGutterWidth~")";
+  width: calc(100% - @relaxedGutterWidth);
 }
 .ui[class*="very relaxed"][class*="vertically divided"].grid > .row:before {
-  margin-left: @veryRelaxedGutterWidth;
-  margin-right: @veryRelaxedGutterWidth;
-  width: ~"calc(100% - "@veryRelaxedGutterWidth~")";
+  margin-left: (@veryRelaxedGutterWidth / 2);
+  margin-right: (@veryRelaxedGutterWidth / 2);
+  width: calc(100% - @veryRelaxedGutterWidth);
 }
 
 /*----------------------
old mode 100644 (file)
new mode 100755 (executable)
index 3285b97..5e48306
 
 /* Menu */
 .ui.menu .dropdown.item .menu {
-  left: 0px;
-  min-width: ~"calc(100% - 1px)";
+  min-width: calc(100% - 1px);
   border-radius: 0em 0em @dropdownMenuBorderRadius @dropdownMenuBorderRadius;
   background: @dropdownBackground;
   margin: @dropdownMenuDistance 0px 0px;
   display: inline-block;
   font-size: @dropdownItemIconFontSize !important;
   float: @dropdownItemIconFloat;
-  margin: @dropdownItemIconMargin;
+  margin: @dropdownItemIconMargin !important;
 }
 
 
 *******************************/
 
 /*--------------
+     List
+---------------*/
+
+/* Menu divider shouldnt apply */
+.ui.menu .list .item:before {
+  background: none !important;
+}
+
+/*--------------
      Sidebar
 ---------------*/
 
 
 .ui.menu .item.disabled,
 .ui.menu .item.disabled:hover {
-  cursor: default;
+  cursor: default !important;
   background-color: transparent !important;
-  color: @disabledTextColor;
+  color: @disabledTextColor !important;
 }
 
 
@@ -460,7 +468,7 @@ Floated Menu / Item
 
 /* Left Floated */
 .ui.menu:not(.vertical) .left.item,
-.ui.menu:not(.vertical) .left.menu {
+.ui.menu:not(.vertical) :not(.dropdown) > .left.menu {
   display: flex;
   margin-right: auto !important;
 }
@@ -1185,7 +1193,7 @@ Floated Menu / Item
 }
 
 /* Item */
-.ui.labeled.icon.menu  .item {
+.ui.labeled.icon.menu .item {
   min-width: @labeledIconMinWidth;
   flex-direction: column;
 }
@@ -1238,6 +1246,11 @@ Floated Menu / Item
   .ui.stackable.menu .right.item {
     margin-left: 0 !important;
   }
+
+  .ui.stackable.menu .right.menu,
+  .ui.stackable.menu .left.menu {
+    flex-direction: column;
+  }
 }
 
 /*--------------
@@ -1649,6 +1662,9 @@ Floated Menu / Item
   text-align: center;
   justify-content: center;
 }
+.ui.attached.item.menu {
+  margin: 0em @attachedHorizontalOffset !important;
+}
 
 .ui.item.menu .item:last-child:before {
   display: none;
old mode 100644 (file)
new mode 100755 (executable)
index 7b75feb..8712679
 .ui.compact.message {
   display: inline-block;
 }
+.ui.compact.icon.message {
+  display: inline-flex;
+}
 
 
 /*--------------
old mode 100644 (file)
new mode 100755 (executable)
index b72dbac..240e830
   border-top: none;
 }
 
+/* Repeated tbody */
+.ui.table tbody + tbody tr:first-child td {
+  border-top: @rowBorder;
+}
+
 /* Table Cells */
 .ui.table td {
   padding: @cellVerticalPadding @cellHorizontalPadding;
   }
   .ui.table:not(.unstackable) th:first-child,
   .ui.table:not(.unstackable) td:first-child {
-    font-weight: bold;
+    font-weight: @responsiveCellHeaderFontWeight;
   }
 
   /* Definition Table */
 .ui.sortable.table thead th:after {
   display: none;
   font-style: normal;
-  font-weight: normal;
+  font-weight: @normal;
   text-decoration: inherit;
   content: '';
   height: 1em;
 .ui.inverted.table th {
   background-color: @invertedHeaderBackground;
   border-color: @invertedHeaderBorderColor !important;
-  color: @invertedHeaderColor;
+  color: @invertedHeaderColor !important;
 }
 .ui.inverted.table tr td {
   border-color: @invertedCellBorderColor !important;
old mode 100644 (file)
new mode 100755 (executable)
index e5b2647..ebe3d7d
 .ui.basic.active.button {
   background: @basicActiveBackground !important;
   box-shadow: @basicActiveBoxShadow !important;
-  color: @basicActiveTextColor;
+  color: @basicActiveTextColor !important;
 }
 .ui.basic.buttons .active.button:hover,
 .ui.basic.active.button:hover {
   margin-left: -@basicColoredBorderSize;
 }
 
+/* Inverted */
+.ui.inverted.primary.buttons .button,
+.ui.inverted.primary.button {
+  background-color: transparent;
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightPrimaryColor inset !important;
+  color: @lightPrimaryColor;
+}
+.ui.inverted.primary.buttons .button:hover,
+.ui.inverted.primary.button:hover,
+.ui.inverted.primary.buttons .button:focus,
+.ui.inverted.primary.button:focus,
+.ui.inverted.primary.buttons .button.active,
+.ui.inverted.primary.button.active,
+.ui.inverted.primary.buttons .button:active,
+.ui.inverted.primary.button:active {
+  box-shadow: none !important;
+  color: @lightPrimaryTextColor;
+}
+.ui.inverted.primary.buttons .button:hover,
+.ui.inverted.primary.button:hover {
+  background-color: @lightPrimaryColorHover;
+}
+.ui.inverted.primary.buttons .button:focus,
+.ui.inverted.primary.button:focus {
+  background-color: @lightPrimaryColorFocus;
+}
+.ui.inverted.primary.buttons .active.button,
+.ui.inverted.primary.active.button {
+  background-color: @lightPrimaryColorActive;
+}
+.ui.inverted.primary.buttons .button:active,
+.ui.inverted.primary.button:active {
+  background-color: @lightPrimaryColorDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.primary.basic.buttons .button,
+.ui.inverted.primary.buttons .basic.button,
+.ui.inverted.primary.basic.button {
+  background-color: transparent;
+  box-shadow: @basicInvertedBoxShadow !important;
+  color: @white !important;
+}
+.ui.inverted.primary.basic.buttons .button:hover,
+.ui.inverted.primary.buttons .basic.button:hover,
+.ui.inverted.primary.basic.button:hover {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightPrimaryColorHover inset !important;
+  color: @lightPrimaryColor !important;
+}
+.ui.inverted.primary.basic.buttons .button:focus,
+.ui.inverted.primary.basic.buttons .button:focus,
+.ui.inverted.primary.basic.button:focus {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightPrimaryColorFocus inset !important;
+  color: @lightPrimaryColor !important;
+}
+.ui.inverted.primary.basic.buttons .active.button,
+.ui.inverted.primary.buttons .basic.active.button,
+.ui.inverted.primary.basic.active.button {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightPrimaryColorActive inset !important;
+  color: @lightPrimaryColor !important;
+}
+.ui.inverted.primary.basic.buttons .button:active,
+.ui.inverted.primary.buttons .basic.button:active,
+.ui.inverted.primary.basic.button:active {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightPrimaryColorDown inset !important;
+  color: @lightPrimaryColor !important;
+}
+
 /*-------------------
       Secondary
 --------------------*/
   margin-left: -@basicColoredBorderSize;
 }
 
+/* Inverted */
+.ui.inverted.secondary.buttons .button,
+.ui.inverted.secondary.button {
+  background-color: transparent;
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightSecondaryColor inset !important;
+  color: @lightSecondaryColor;
+}
+.ui.inverted.secondary.buttons .button:hover,
+.ui.inverted.secondary.button:hover,
+.ui.inverted.secondary.buttons .button:focus,
+.ui.inverted.secondary.button:focus,
+.ui.inverted.secondary.buttons .button.active,
+.ui.inverted.secondary.button.active,
+.ui.inverted.secondary.buttons .button:active,
+.ui.inverted.secondary.button:active {
+  box-shadow: none !important;
+  color: @lightSecondaryTextColor;
+}
+.ui.inverted.secondary.buttons .button:hover,
+.ui.inverted.secondary.button:hover {
+  background-color: @lightSecondaryColorHover;
+}
+.ui.inverted.secondary.buttons .button:focus,
+.ui.inverted.secondary.button:focus {
+  background-color: @lightSecondaryColorFocus;
+}
+.ui.inverted.secondary.buttons .active.button,
+.ui.inverted.secondary.active.button {
+  background-color: @lightSecondaryColorActive;
+}
+.ui.inverted.secondary.buttons .button:active,
+.ui.inverted.secondary.button:active {
+  background-color: @lightSecondaryColorDown;
+}
+
+/* Inverted Basic */
+.ui.inverted.secondary.basic.buttons .button,
+.ui.inverted.secondary.buttons .basic.button,
+.ui.inverted.secondary.basic.button {
+  background-color: transparent;
+  box-shadow: @basicInvertedBoxShadow !important;
+  color: @white !important;
+}
+.ui.inverted.secondary.basic.buttons .button:hover,
+.ui.inverted.secondary.buttons .basic.button:hover,
+.ui.inverted.secondary.basic.button:hover {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightSecondaryColorHover inset !important;
+  color: @lightSecondaryColor !important;
+}
+.ui.inverted.secondary.basic.buttons .button:focus,
+.ui.inverted.secondary.basic.buttons .button:focus,
+.ui.inverted.secondary.basic.button:focus {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightSecondaryColorFocus inset !important;
+  color: @lightSecondaryColor !important;
+}
+.ui.inverted.secondary.basic.buttons .active.button,
+.ui.inverted.secondary.buttons .basic.active.button,
+.ui.inverted.secondary.basic.active.button {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightSecondaryColorActive inset !important;
+  color: @lightSecondaryColor !important;
+}
+.ui.inverted.secondary.basic.buttons .button:active,
+.ui.inverted.secondary.buttons .basic.button:active,
+.ui.inverted.secondary.basic.button:active {
+  box-shadow: 0px 0px 0px @invertedBorderSize @lightSecondaryColorDown inset !important;
+  color: @lightSecondaryColor !important;
+}
+
 /*---------------
     Positive
 ----------------*/
 }
 
 .loadUIOverrides();
-
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 07ef64f..294d77a
@@ -48,7 +48,7 @@
 
 .ui.header .sub.header {
   display: block;
-  font-weight: normal;
+  font-weight: @normal;
   padding: 0em;
   margin: @subHeaderMargin;
   font-size: @subHeaderFontSize;
old mode 100644 (file)
new mode 100755 (executable)
index 29290dc..88b870d
@@ -28,7 +28,7 @@
   src: @fallbackSRC;
   src: @src;
   font-style: normal;
-  font-weight: normal;
+  font-weight: @normal;
   font-variant: normal;
   text-decoration: inherit;
   text-transform: none;
@@ -45,7 +45,7 @@ i.icon {
 
   font-family: 'Icons';
   font-style: normal;
-  font-weight: normal;
+  font-weight: @normal;
   text-decoration: inherit;
   text-align: center;
 
@@ -114,7 +114,7 @@ i.disabled.icon {
 
 i.fitted.icon {
   width: auto;
-  margin: 0em;
+  margin: 0em !important;
 }
 
 /*-------------------
@@ -469,6 +469,30 @@ i.icons .corner.icon {
   font-size: @cornerIconSize;
   text-shadow: @cornerIconShadow;
 }
+i.icons .top.right.corner.icon {
+  top: 0;
+  left: auto;
+  right: 0;
+  bottom: auto;
+}
+i.icons .top.left.corner.icon {
+  top: 0;
+  left: 0;
+  right: auto;
+  bottom: auto;
+}
+i.icons .bottom.left.corner.icon {
+  top: auto;
+  left: 0;
+  right: auto;
+  bottom: 0;
+}
+i.icons .bottom.right.corner.icon {
+  top: auto;
+  left: auto;
+  right: 0;
+  bottom: 0;
+}
 
 i.icons .inverted.corner.icon {
   text-shadow: @cornerIconInvertedShadow;
old mode 100644 (file)
new mode 100755 (executable)
index b996cde..03db0f2
@@ -56,6 +56,10 @@ img.ui.image {
   display: block;
   visibility: hidden;
 }
+.ui.images > .hidden.transition {
+  display: inline-block;
+  visibility: hidden;
+}
 
 
 .ui.disabled.images,
@@ -315,8 +319,8 @@ img.ui.bordered.image {
 }
 
 .ui.images .image,
-.ui.images img,
-.ui.images svg {
+.ui.images img,
+.ui.images svg {
   display: inline-block;
   margin: 0em @imageHorizontalMargin @imageVerticalMargin;
 }
old mode 100644 (file)
new mode 100755 (executable)
index 991a309..22d439f
 
 .ui.input {
   position: relative;
-  font-weight: normal;
+  font-weight: @normal;
   font-style: normal;
   display: inline-flex;
   color: @inputColor;
 }
-.ui.input input {
+.ui.input input {
   margin: 0em;
   max-width: 100%;
   flex: 1 0 auto;
 
 /* browsers require these rules separate */
 
-.ui.input input::-webkit-input-placeholder {
+.ui.input input::-webkit-input-placeholder {
   color: @placeholderColor;
 }
-.ui.input input::-moz-placeholder {
+.ui.input input::-moz-placeholder {
   color: @placeholderColor;
 }
-.ui.input input:-ms-input-placeholder {
+.ui.input input:-ms-input-placeholder {
   color: @placeholderColor;
 }
 
 ---------------------*/
 
 .ui.disabled.input,
-.ui.input input[disabled] {
+.ui.input:not(.disabled) input[disabled] {
   opacity: @disabledOpacity;
 }
 
-.ui.disabled.input input,
-.ui.input input[disabled] {
+.ui.disabled.input input,
+.ui.input:not(.disabled) input[disabled] {
   pointer-events: none;
 }
 
@@ -95,7 +95,7 @@
         Active
 ---------------------*/
 
-.ui.input input:active,
+.ui.input input:active,
 .ui.input.down input {
   border-color: @downBorderColor;
   background: @downBackground;
         Focus
 ---------------------*/
 
-.ui.input.focus input,
-.ui.input input:focus  {
+.ui.input.focus input,
+.ui.input input:focus  {
   border-color: @focusBorderColor;
   background: @focusBackground;
   color: @focusColor;
   box-shadow: @focusBoxShadow;
 }
-.ui.input.focus input::-webkit-input-placeholder,
-.ui.input input:focus::-webkit-input-placeholder {
+.ui.input.focus input::-webkit-input-placeholder,
+.ui.input input:focus::-webkit-input-placeholder {
   color: @placeholderFocusColor;
 }
-.ui.input.focus input::-moz-placeholder,
-.ui.input input:focus::-moz-placeholder {
+.ui.input.focus input::-moz-placeholder,
+.ui.input input:focus::-moz-placeholder {
   color: @placeholderFocusColor;
 }
-.ui.input.focus input:-ms-input-placeholder,
-.ui.input input:focus:-ms-input-placeholder {
+.ui.input.focus input:-ms-input-placeholder,
+.ui.input input:focus:-ms-input-placeholder {
   color: @placeholderFocusColor;
 }
 
         Error
 ---------------------*/
 
-.ui.input.error input {
+.ui.input.error input {
   background-color: @errorBackground;
   border-color: @errorBorder;
   color: @errorColor;
 }
 
 /* Error Placeholder */
-.ui.input.error input::-webkit-input-placeholder {
+.ui.input.error input::-webkit-input-placeholder {
   color: @placeholderErrorColor;
 }
-.ui.input.error input::-moz-placeholder {
+.ui.input.error input::-moz-placeholder {
   color: @placeholderErrorColor;
 }
-.ui.input.error input:-ms-input-placeholder {
+.ui.input.error input:-ms-input-placeholder {
   color: @placeholderErrorColor !important;
 }
 
 /* Focused Error Placeholder */
-.ui.input.error input:focus::-webkit-input-placeholder {
+.ui.input.error input:focus::-webkit-input-placeholder {
   color: @placeholderErrorFocusColor;
 }
-.ui.input.error input:focus::-moz-placeholder {
+.ui.input.error input:focus::-moz-placeholder {
   color: @placeholderErrorFocusColor;
 }
-.ui.input.error input:focus:-ms-input-placeholder {
+.ui.input.error input:focus:-ms-input-placeholder {
   color: @placeholderErrorFocusColor !important;
 }
 
 ---------------------*/
 
 
-.ui.transparent.input input {
+.ui.transparent.input input {
   border-color: transparent !important;
   background-color: transparent !important;
   padding: 0em !important;
   box-shadow: none !important;
+  border-radius: 0px !important;
 }
 
 /* Transparent Icon */
 .ui.transparent.inverted.input {
   color: @transparentInvertedColor;
 }
-.ui.transparent.inverted.input input {
+.ui.transparent.inverted.input input {
   color: inherit;
 }
 
-.ui.transparent.inverted.input input::-webkit-input-placeholder {
+.ui.transparent.inverted.input input::-webkit-input-placeholder {
   color: @transparentInvertedPlaceholderColor;
 }
-.ui.transparent.inverted.input input::-moz-placeholder {
+.ui.transparent.inverted.input input::-moz-placeholder {
   color: @transparentInvertedPlaceholderColor;
 }
-.ui.transparent.inverted.input input:-ms-input-placeholder {
+.ui.transparent.inverted.input input:-ms-input-placeholder {
   color: @transparentInvertedPlaceholderColor;
 }
 
 .ui.icon.input > i.icon:not(.link) {
   pointer-events: none;
 }
-.ui.icon.input input {
+.ui.icon.input input {
   padding-right: @iconMargin !important;
 }
 
 }
 
 /* Regular Label on Right */
-.ui[class*="right labeled"].input input {
+.ui[class*="right labeled"].input input {
   border-top-right-radius: 0px !important;
   border-bottom-right-radius: 0px !important;
   border-right-color: transparent !important;
 }
-.ui[class*="right labeled"].input input + .label {
+.ui[class*="right labeled"].input input + .label {
   border-top-left-radius: 0px;
   border-bottom-left-radius: 0px;
 }
 
-.ui[class*="right labeled"].input input:focus {
+.ui[class*="right labeled"].input input:focus {
   border-right-color: @focusBorderColor !important;
 }
 
 }
 
 /* Spacing with corner label */
-.ui[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input input {
+.ui[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input input {
   padding-right: @labeledMargin !important;
 }
 .ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > input {
 }
 
 /* Left Labeled */
-.ui[class*="left corner labeled"].labeled.input input {
+.ui[class*="left corner labeled"].labeled.input input {
   padding-left: @labeledMargin !important;
 }
 .ui[class*="left corner labeled"].icon.input > input {
 }
 
 /* Input Focus */
-.ui.action.input:not([class*="left action"]) input:focus {
+.ui.action.input:not([class*="left action"]) input:focus {
   border-right-color: @focusBorderColor !important;
 }
 
 ---------------------*/
 
 /* Standard */
-.ui.inverted.input input {
+.ui.inverted.input input {
   border: none;
 }
 
old mode 100644 (file)
new mode 100755 (executable)
index 7141666..7869305
@@ -122,6 +122,7 @@ a.ui.label {
   margin-top: @lineHeightOffset;
 }
 
+
 /* Remove border radius on attached segment */
 .ui.attached.segment > .ui.top.left.attached.label,
 .ui.bottom.attached.segment > .ui.top.left.attached.label  {
@@ -565,7 +566,7 @@ a.ui.red.label:hover{
 }
 /* Basic */
 .ui.basic.red.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @red !important;
   border-color: @red !important;
 }
@@ -601,7 +602,7 @@ a.ui.orange.label:hover{
 }
 /* Basic */
 .ui.basic.orange.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @orange !important;
   border-color: @orange !important;
 }
@@ -637,7 +638,7 @@ a.ui.yellow.label:hover{
 }
 /* Basic */
 .ui.basic.yellow.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @yellow !important;
   border-color: @yellow !important;
 }
@@ -673,7 +674,7 @@ a.ui.olive.label:hover{
 }
 /* Basic */
 .ui.basic.olive.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @olive !important;
   border-color: @olive !important;
 }
@@ -709,7 +710,7 @@ a.ui.green.label:hover{
 }
 /* Basic */
 .ui.basic.green.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @green !important;
   border-color: @green !important;
 }
@@ -745,7 +746,7 @@ a.ui.teal.label:hover{
 }
 /* Basic */
 .ui.basic.teal.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @teal !important;
   border-color: @teal !important;
 }
@@ -781,7 +782,7 @@ a.ui.blue.label:hover{
 }
 /* Basic */
 .ui.basic.blue.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @blue !important;
   border-color: @blue !important;
 }
@@ -817,7 +818,7 @@ a.ui.violet.label:hover{
 }
 /* Basic */
 .ui.basic.violet.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @violet !important;
   border-color: @violet !important;
 }
@@ -853,7 +854,7 @@ a.ui.purple.label:hover{
 }
 /* Basic */
 .ui.basic.purple.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @purple !important;
   border-color: @purple !important;
 }
@@ -889,7 +890,7 @@ a.ui.pink.label:hover{
 }
 /* Basic */
 .ui.basic.pink.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @pink !important;
   border-color: @pink !important;
 }
@@ -925,7 +926,7 @@ a.ui.brown.label:hover{
 }
 /* Basic */
 .ui.basic.brown.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @brown !important;
   border-color: @brown !important;
 }
@@ -961,7 +962,7 @@ a.ui.grey.label:hover{
 }
 /* Basic */
 .ui.basic.grey.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @grey !important;
   border-color: @grey !important;
 }
@@ -997,7 +998,7 @@ a.ui.black.label:hover{
 }
 /* Basic */
 .ui.basic.black.label {
-  background-color: @white !important;
+  background: @basicBackground !important;
   color: @black !important;
   border-color: @black !important;
 }
old mode 100644 (file)
new mode 100755 (executable)
index b9c9cf4..eb747d3
@@ -154,12 +154,14 @@ ol.ui.list ol li,
 .ui.list > .item > .image + .content,
 .ui.list > .item > .icon + .content {
   display: table-cell;
+  width: 100%;
   padding: 0em 0em 0em @contentDistance;
   vertical-align: @contentVerticalAlign;
 }
 .ui.list .list > .item > img.image + .content,
 .ui.list > .item > img.image + .content {
   display: inline-block;
+  width: auto;
 }
 .ui.list .list > .item > .content > .list,
 .ui.list > .item > .content > .list {
@@ -421,16 +423,16 @@ ol.ui.list ol li,
   color: @linkListItemColor;
   transition: @linkListTransition;
 }
-.ui.link.list a.item:hover,
-.ui.link.list .item a:not(.ui):hover {
+.ui.link.list.list a.item:hover,
+.ui.link.list.list .item a:not(.ui):hover {
   color: @linkListItemHoverColor;
 }
-.ui.link.list a.item:active,
-.ui.link.list .item a:not(.ui):active {
+.ui.link.list.list a.item:active,
+.ui.link.list.list .item a:not(.ui):active {
   color: @linkListItemDownColor;
 }
-.ui.link.list .active.item,
-.ui.link.list .active.item a:not(.ui) {
+.ui.link.list.list .active.item,
+.ui.link.list.list .active.item a:not(.ui) {
   color: @linkListItemActiveColor;
 }
 
@@ -440,16 +442,16 @@ ol.ui.list ol li,
 .ui.inverted.link.list .item a:not(.ui) {
   color: @invertedLinkListItemColor;
 }
-.ui.inverted.link.list a.item:hover,
-.ui.inverted.link.list .item a:not(.ui):hover {
+.ui.inverted.link.list.list a.item:hover,
+.ui.inverted.link.list.list .item a:not(.ui):hover {
   color: @invertedLinkListItemHoverColor;
 }
-.ui.inverted.link.list a.item:active,
-.ui.inverted.link.list .item a:not(.ui):active {
+.ui.inverted.link.list.list a.item:active,
+.ui.inverted.link.list.list .item a:not(.ui):active {
   color: @invertedLinkListItemDownColor;
 }
-.ui.inverted.link.list a.active.item,
-.ui.inverted.link.list .active.item a:not(.ui) {
+.ui.inverted.link.list.list a.active.item,
+.ui.inverted.link.list.list .active.item a:not(.ui) {
   color: @invertedLinkListItemActiveColor;
 }
 
@@ -471,7 +473,7 @@ ol.ui.list ol li,
 .ui.selection.list > .item:last-child {
   margin-bottom: 0em;
 }
-.ui.selection.list.list >  .item:hover,
+.ui.selection.list.list > .item:hover,
 .ui.selection.list > .item:hover {
   background: @selectionListHoverBackground;
   color: @selectionListHoverColor;
@@ -563,7 +565,7 @@ ul.ui.list li:before,
   position: absolute;
   top: auto;
   left: auto;
-  font-weight: normal;
+  font-weight: @normal;
   margin-left: @bulletOffset;
   content: @bulletCharacter;
   opacity: @bulletOpacity;
old mode 100644 (file)
new mode 100755 (executable)
index 40d5de6..9bf271d
              Types
 *******************************/
 
-
 /*-------------------
         Text
 --------------------*/
diff --git a/semantic/src/definitions/elements/placeholder.less b/semantic/src/definitions/elements/placeholder.less
new file mode 100644 (file)
index 0000000..e18c4ab
--- /dev/null
@@ -0,0 +1,232 @@
+/*!
+ * # Semantic UI - Loader
+ * http://github.com/semantic-org/semantic-ui/
+ *
+ *
+ * Released under the MIT license
+ * http://opensource.org/licenses/MIT
+ *
+ */
+/*******************************
+            Theme
+*******************************/
+
+@type    : 'element';
+@element : 'placeholder';
+
+@import (multiple) '../../theme.config';
+
+/*-------------------
+      Content
+--------------------*/
+
+.ui.placeholder {
+  position: static;
+  overflow: hidden;
+  animation: placeholderShimmer @placeholderLoadingAnimationDuration linear;
+  animation-iteration-count: infinite;
+  background-color: @white;
+  background-image: @placeholderLoadingGradient;
+  background-size: @placeholderLoadingGradientWidth 100%;
+  max-width: @placeholderMaxWidth;
+}
+
+@keyframes placeholderShimmer{
+  0% {
+    background-position: -@placeholderLoadingGradientWidth 0
+  }
+  100% {
+    background-position: @placeholderLoadingGradientWidth 0
+  }
+}
+
+.ui.placeholder + .ui.placeholder {
+  margin-top: @consecutivePlaceholderSpacing;
+}
+.ui.placeholder + .ui.placeholder {
+  animation-delay: @placeholderAnimationInterval;
+}
+.ui.placeholder + .ui.placeholder + .ui.placeholder {
+  animation-delay: (@placeholderAnimationInterval * 2);
+}
+.ui.placeholder + .ui.placeholder + .ui.placeholder + .ui.placeholder {
+  animation-delay: (@placeholderAnimationInterval * 3);
+}
+.ui.placeholder + .ui.placeholder + .ui.placeholder + .ui.placeholder + .ui.placeholder {
+  animation-delay: (@placeholderAnimationInterval * 4);
+}
+
+.ui.placeholder,
+.ui.placeholder > :before,
+.ui.placeholder .image.header:after,
+.ui.placeholder .line,
+.ui.placeholder .line:after {
+  background-color: @white;
+}
+
+/* Image */
+.ui.placeholder .image:not(.header):not(.ui) {
+  height: @placeholderImageHeight;
+}
+.ui.placeholder .square.image:not(.header) {
+  height: 0px;
+  overflow: hidden;
+  /* 1/1 aspect ratio */
+  padding-top: 100%;
+}
+.ui.placeholder .rectangular.image:not(.header) {
+  height: 0px;
+  overflow: hidden;
+  /* 4/3 aspect ratio */
+  padding-top: 75%;
+}
+
+
+/* Lines */
+.ui.placeholder .line {
+  position: relative;
+  height: @placeholderLineMargin;
+}
+.ui.placeholder .line:before,
+.ui.placeholder .line:after {
+  top: 100%;
+  position: absolute;
+  content: '';
+  background-color: inherit;
+}
+.ui.placeholder .line:before {
+  left: 0px;
+}
+.ui.placeholder .line:after {
+  right: 0px;
+}
+
+/* Any Lines */
+.ui.placeholder .line {
+  margin-bottom: @placeholderLineHeight;
+}
+.ui.placeholder .line:before,
+.ui.placeholder .line:after {
+  height: @placeholderLineHeight;
+}
+.ui.placeholder .line:not(:first-child) {
+  margin-top: @placeholderLineHeight;
+}
+
+/* Header Image + 2 Lines */
+.ui.placeholder .header {
+  position: relative;
+  overflow: hidden;
+}
+
+/* Line Outdent */
+.ui.placeholder .line:nth-child(1):after {
+  width: @placeholderLineOneOutdent;
+}
+.ui.placeholder .line:nth-child(2):after {
+  width: @placeholderLineTwoOutdent;
+}
+.ui.placeholder .line:nth-child(3):after {
+  width: @placeholderLineThreeOutdent;
+}
+.ui.placeholder .line:nth-child(4):after {
+  width: @placeholderLineFourOutdent;
+}
+.ui.placeholder .line:nth-child(5):after {
+  width: @placeholderLineFiveOutdent;
+}
+
+/* Header Line 1 & 2*/
+.ui.placeholder .header .line {
+  margin-bottom: @placeholderHeaderLineHeight;
+}
+.ui.placeholder .header .line:before,
+.ui.placeholder .header .line:after {
+  height: @placeholderHeaderLineHeight;
+}
+.ui.placeholder .header .line:not(:first-child) {
+  margin-top: @placeholderHeaderLineHeight;
+}
+.ui.placeholder .header .line:after {
+  width: @placeholderHeaderLineOneOutdent;
+}
+.ui.placeholder .header .line:nth-child(2):after {
+  width: @placeholderHeaderLineTwoOutdent;
+}
+
+/* Image Header */
+.ui.placeholder .image.header .line {
+  margin-left: @placeholderImageWidth;
+}
+.ui.placeholder .image.header .line:before {
+  width: @placeholderImageTextIndent;
+}
+.ui.placeholder .image.header:after {
+  display: block;
+  height: @placeholderLineMargin;
+  content: '';
+  margin-left: @placeholderImageWidth;
+}
+
+/* Spacing */
+.ui.placeholder .image .line:first-child,
+.ui.placeholder .paragraph .line:first-child,
+.ui.placeholder .header .line:first-child {
+  height: 0.01px;
+}
+.ui.placeholder .image:not(:first-child):before,
+.ui.placeholder .paragraph:not(:first-child):before,
+.ui.placeholder .header:not(:first-child):before {
+  height: @placeholderSpacing;
+  content: '';
+  display: block;
+}
+
+/* Inverted Content Loader */
+.ui.inverted.placeholder {
+  background-image: @placeholderInvertedLoadingGradient;
+}
+.ui.inverted.placeholder,
+.ui.inverted.placeholder > :before,
+.ui.inverted.placeholder .image.header:after,
+.ui.inverted.placeholder .line,
+.ui.inverted.placeholder .line:after {
+  background-color: @black;
+}
+
+/*******************************
+            Variations
+*******************************/
+
+
+/*-------------------
+        Sizes
+--------------------*/
+
+.ui.placeholder .full.line.line.line:after {
+  width: @placeholderFullLineOutdent;
+}
+.ui.placeholder .very.long.line.line.line:after {
+  width: @placeholderVeryLongLineOutdent;
+}
+.ui.placeholder .long.line.line.line:after {
+  width: @placeholderLongLineOutdent;
+}
+.ui.placeholder .medium.line.line.line:after {
+  width: @placeholderMediumLineOutdent;
+}
+.ui.placeholder .short.line.line.line:after {
+  width: @placeholderShortLineOutdent;
+}
+.ui.placeholder .very.short.line.line.line:after {
+  width: @placeholderVeryShortLineOutdent;
+}
+
+
+/*-------------------
+        Fluid
+--------------------*/
+
+.ui.fluid.placeholder {
+  max-width: none;
+}
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 353ba63..41b3764
@@ -64,6 +64,7 @@
 .ui.slide.reveal > .content {
   display: block;
   width: 100%;
+  white-space: normal;
   float: left;
 
   margin: 0em;
 .ui.move.reveal > .content {
   display: block;
   float: left;
+  white-space: normal;
 
   margin: 0em;
   transition: @moveTransition;
 
 
 /*******************************
+           Coupling
+*******************************/
+
+.ui.reveal > .ui.ribbon.label {
+  z-index: @overlayZIndex;
+}
+
+/*******************************
            Variations
 *******************************/
 
old mode 100644 (file)
new mode 100755 (executable)
index 9a7bd52..34d5a42
              Types
 *******************************/
 
+
+/*-------------------
+     Placeholder
+--------------------*/
+
+.ui.placeholder.segment {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: stretch;
+  max-width: initial;
+  animation: none;
+  overflow: visible;
+  padding: @placeholderPadding;
+  min-height: @placeholderMinHeight;
+  background: @placeholderBackground;
+  border-color: @placeholderBorderColor;
+  box-shadow: @placeholderBoxShadow;
+}
+
+.ui.placeholder.segment .button,
+.ui.placeholder.segment textarea {
+  display: block;
+}
+.ui.placeholder.segment .field,
+.ui.placeholder.segment textarea,
+.ui.placeholder.segment > .ui.input,
+.ui.placeholder.segment .button {
+  max-width: @placeholderContentMaxWidth;
+  margin-left: auto;
+  margin-right: auto;
+}
+.ui.placeholder.segment .column .button,
+.ui.placeholder.segment .column .field,
+.ui.placeholder.segment .column textarea,
+.ui.placeholder.segment .column > .ui.input {
+  max-width: @placeholderContentMaxWidth;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.ui.placeholder.segment > .inline  {
+  align-self: center;
+}
+.ui.placeholder.segment > .inline > .button {
+  display: inline-block;
+  width: auto;
+  margin: @placeholderContentInlineButtonMargin;
+}
+.ui.placeholder.segment > .inline > .button:last-child {
+  margin-right: 0px;
+}
+
+
 /*-------------------
         Piled
 --------------------*/
 
 /* Red */
 .ui.red.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @red;
+  border-top: @coloredBorderSize solid @red !important;
 }
 .ui.inverted.red.segment {
   background-color: @red !important;
 
 /* Orange */
 .ui.orange.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @orange;
+  border-top: @coloredBorderSize solid @orange !important;
 }
 .ui.inverted.orange.segment {
   background-color: @orange !important;
 
 /* Yellow */
 .ui.yellow.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @yellow;
+  border-top: @coloredBorderSize solid @yellow !important;
 }
 .ui.inverted.yellow.segment {
   background-color: @yellow !important;
 
 /* Olive */
 .ui.olive.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @olive;
+  border-top: @coloredBorderSize solid @olive !important;
 }
 .ui.inverted.olive.segment {
   background-color: @olive !important;
 
 /* Green */
 .ui.green.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @green;
+  border-top: @coloredBorderSize solid @green !important;
 }
 .ui.inverted.green.segment {
   background-color: @green !important;
 
 /* Teal */
 .ui.teal.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @teal;
+  border-top: @coloredBorderSize solid @teal !important;
 }
 .ui.inverted.teal.segment {
   background-color: @teal !important;
 
 /* Blue */
 .ui.blue.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @blue;
+  border-top: @coloredBorderSize solid @blue !important;
 }
 .ui.inverted.blue.segment {
   background-color: @blue !important;
 
 /* Violet */
 .ui.violet.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @violet;
+  border-top: @coloredBorderSize solid @violet !important;
 }
 .ui.inverted.violet.segment {
   background-color: @violet !important;
 
 /* Purple */
 .ui.purple.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @purple;
+  border-top: @coloredBorderSize solid @purple !important;
 }
 .ui.inverted.purple.segment {
   background-color: @purple !important;
 
 /* Pink */
 .ui.pink.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @pink;
+  border-top: @coloredBorderSize solid @pink !important;
 }
 .ui.inverted.pink.segment {
   background-color: @pink !important;
 
 /* Brown */
 .ui.brown.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @brown;
+  border-top: @coloredBorderSize solid @brown !important;
 }
 .ui.inverted.brown.segment {
   background-color: @brown !important;
 
 /* Grey */
 .ui.grey.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @grey;
+  border-top: @coloredBorderSize solid @grey !important;
 }
 .ui.inverted.grey.segment {
   background-color: @grey !important;
 
 /* Black */
 .ui.black.segment:not(.inverted) {
-  border-top: @coloredBorderSize solid @black;
+  border-top: @coloredBorderSize solid @black !important;
 }
 .ui.inverted.black.segment {
   background-color: @black !important;
old mode 100644 (file)
new mode 100755 (executable)
index d4c1937..5c4aff2
 /* Mobile (Default) */
 @media only screen and (max-width: (@largestMobileScreen)) {
 
-.ui.steps {
-  display: inline-flex;
-  overflow: visible;
-  flex-direction: column;
-}
-.ui.steps .step {
-  width: 100% !important;
-  flex-direction: column;
-  border-radius: @borderRadius;
-  padding: @verticalPadding @horizontalPadding;
-}
-.ui.steps .step:first-child {
-  padding: @verticalPadding @horizontalPadding;
-  border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;
-}
-.ui.steps .step:last-child {
-  border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;
-}
-
-/* Arrow */
-.ui.steps .step:after {
-  display: none !important;
-}
-
-/* Content */
-.ui.steps .step .content {
-  text-align: center;
-}
-
-/* Icon */
-.ui.steps .step > .icon,
-.ui.ordered.steps .step:before {
-  margin: 0em 0em @mobileIconDistance 0em;
-}
+  .ui.steps:not(.unstackable) {
+    display: inline-flex;
+    overflow: visible;
+    flex-direction: column;
+  }
+  .ui.steps:not(.unstackable) .step {
+    width: 100% !important;
+    flex-direction: column;
+    border-radius: @borderRadius;
+    padding: @verticalPadding @horizontalPadding;
+  }
+  .ui.steps:not(.unstackable) .step:first-child {
+    padding: @verticalPadding @horizontalPadding;
+    border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;
+  }
+  .ui.steps:not(.unstackable) .step:last-child {
+    border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;
+  }
+
+  /* Arrow */
+  .ui.steps:not(.unstackable) .step:after {
+    display: none !important;
+  }
+
+  /* Content */
+  .ui.steps:not(.unstackable) .step .content {
+    text-align: center;
+  }
+
+  /* Icon */
+  .ui.steps:not(.unstackable) .step > .icon,
+  .ui.ordered.steps:not(.unstackable) .step:before {
+    margin: 0em 0em @mobileIconDistance 0em;
+  }
 
 }
 
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 49c1534..ffe558b
@@ -46,8 +46,6 @@ body {
   font-smoothing: @fontSmoothing;
 }
 
-
-
 /*******************************
              Headers
 *******************************/
@@ -128,6 +126,50 @@ a:hover {
 
 
 /*******************************
+         Scrollbars
+*******************************/
+
+.addScrollbars() when (@useCustomScrollbars) {
+
+  /* Force Simple Scrollbars */
+  body ::-webkit-scrollbar {
+    -webkit-appearance: none;
+    width: @customScrollbarWidth;
+    height: @customScrollbarHeight;
+  }
+  body ::-webkit-scrollbar-track {
+    background: @trackBackground;
+    border-radius: @trackBorderRadius;
+  }
+  body ::-webkit-scrollbar-thumb {
+    cursor: pointer;
+    border-radius: @thumbBorderRadius;
+    background: @thumbBackground;
+    transition: @thumbTransition;
+  }
+  body ::-webkit-scrollbar-thumb:window-inactive {
+    background: @thumbInactiveBackground;
+  }
+  body ::-webkit-scrollbar-thumb:hover {
+    background: @thumbHoverBackground;
+  }
+
+  /* Inverted UI */
+  body .ui.inverted::-webkit-scrollbar-track {
+    background: @trackInvertedBackground;
+  }
+  body .ui.inverted::-webkit-scrollbar-thumb {
+    background: @thumbInvertedBackground;
+  }
+  body .ui.inverted::-webkit-scrollbar-thumb:window-inactive {
+    background: @thumbInvertedInactiveBackground;
+  }
+  body .ui.inverted::-webkit-scrollbar-thumb:hover {
+    background: @thumbInvertedHoverBackground;
+  }
+}
+
+/*******************************
           Highlighting
 *******************************/
 
@@ -162,5 +204,5 @@ input::selection {
   color: @inputHighlightColor;
 }
 
-
+.addScrollbars();
 .loadUIOverrides();
index a6b327c..818e3d6 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -169,6 +169,7 @@ $.fn.accordion = function(parameters) {
           }
           module.debug('Opening accordion content', $activeTitle);
           settings.onOpening.call($activeContent);
+          settings.onChanging.call($activeContent);
           if(settings.exclusive) {
             module.closeOthers.call($activeTitle);
           }
@@ -232,6 +233,7 @@ $.fn.accordion = function(parameters) {
           if((isActive || isOpening) && !isClosing) {
             module.debug('Closing accordion content', $activeContent);
             settings.onClosing.call($activeContent);
+            settings.onChanging.call($activeContent);
             $activeTitle
               .removeClass(className.active)
             ;
@@ -574,10 +576,11 @@ $.fn.accordion.settings = {
   duration        : 350, // duration of animation
   easing          : 'easeOutQuad', // easing equation for animation
 
-
   onOpening       : function(){}, // callback before open animation
-  onOpen          : function(){}, // callback after open animation
   onClosing       : function(){}, // callback before closing animation
+  onChanging      : function(){}, // callback before closing or opening animation
+
+  onOpen          : function(){}, // callback after open animation
   onClose         : function(){}, // callback after closing animation
   onChange        : function(){}, // callback after closing or opening animation
 
old mode 100644 (file)
new mode 100755 (executable)
index 4c92984..f88c4d0 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 2feb915..49bf63e
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -83,7 +83,6 @@ $.fn.dimmer = function(parameters) {
             else {
               $dimmer = module.create();
             }
-            module.set.variation();
           }
         },
 
@@ -157,7 +156,7 @@ $.fn.dimmer = function(parameters) {
               module.hide();
               event.stopImmediatePropagation();
             }
-          }
+          },
         },
 
         addContent: function(element) {
@@ -190,6 +189,7 @@ $.fn.dimmer = function(parameters) {
             : function(){}
           ;
           module.debug('Showing dimmer', $dimmer, settings);
+          module.set.variation();
           if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {
             module.animate.show(callback);
             settings.onShow.call(element);
@@ -233,11 +233,22 @@ $.fn.dimmer = function(parameters) {
               : function(){}
             ;
             if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
+              if(settings.useFlex) {
+                module.debug('Using flex dimmer');
+                module.remove.legacy();
+              }
+              else {
+                module.debug('Using legacy non-flex dimmer');
+                module.set.legacy();
+              }
               if(settings.opacity !== 'auto') {
                 module.set.opacity();
               }
               $dimmer
                 .transition({
+                  displayType : settings.useFlex
+                    ? 'flex'
+                    : 'block',
                   animation   : settings.transition + ' in',
                   queue       : false,
                   duration    : module.get.duration(),
@@ -282,6 +293,9 @@ $.fn.dimmer = function(parameters) {
               module.verbose('Hiding dimmer with css');
               $dimmer
                 .transition({
+                  displayType : settings.useFlex
+                    ? 'flex'
+                    : 'block',
                   animation   : settings.transition + ' out',
                   queue       : false,
                   duration    : module.get.duration(),
@@ -290,6 +304,7 @@ $.fn.dimmer = function(parameters) {
                     module.remove.dimmed();
                   },
                   onComplete  : function() {
+                    module.remove.variation();
                     module.remove.active();
                     callback();
                   }
@@ -403,6 +418,9 @@ $.fn.dimmer = function(parameters) {
             module.debug('Setting opacity to', opacity);
             $dimmer.css('background-color', color);
           },
+          legacy: function() {
+            $dimmer.addClass(className.legacy);
+          },
           active: function() {
             $dimmer.addClass(className.active);
           },
@@ -432,6 +450,9 @@ $.fn.dimmer = function(parameters) {
               .removeClass(className.active)
             ;
           },
+          legacy: function() {
+            $dimmer.removeClass(className.legacy);
+          },
           dimmed: function() {
             $dimmable.removeClass(className.dimmed);
           },
@@ -645,6 +666,9 @@ $.fn.dimmer.settings = {
   verbose     : false,
   performance : true,
 
+  // whether should use flex layout
+  useFlex     : true,
+
   // name to distinguish between multiple dimmers in context
   dimmerName  : false,
 
@@ -688,6 +712,7 @@ $.fn.dimmer.settings = {
     dimmer     : 'dimmer',
     disabled   : 'disabled',
     hide       : 'hide',
+    legacy     : 'legacy',
     pageDimmer : 'page',
     show       : 'show'
   },
old mode 100644 (file)
new mode 100755 (executable)
index ff6c605..fb0ce54
@@ -21,7 +21,7 @@
             Dimmer
 *******************************/
 
-.dimmable:not(.body) {
+.dimmable:not(body) {
   position: @dimmablePosition;
 }
 
@@ -36,6 +36,7 @@
 
   text-align: @textAlign;
   vertical-align: @verticalAlign;
+  padding: @padding;
 
   background-color: @backgroundColor;
   opacity: @hiddenOpacity;
   animation-duration: @duration;
   transition: @transition;
 
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+
   user-select: none;
   will-change: opacity;
   z-index: @zIndex;
 
 /* Dimmer Content */
 .ui.dimmer > .content {
-  width: 100%;
-  height: 100%;
-  display: @contentDisplay;
   user-select: text;
-}
-.ui.dimmer > .content > * {
-  display: @contentChildDisplay;
-  vertical-align: @verticalAlign;
   color: @textColor;
 }
 
   border-radius: inherit !important;
 }
 
+/* Scrollbars */
+.addScrollbars() when (@useCustomScrollbars) {
+  .ui.dimmer:not(.inverted)::-webkit-scrollbar-track {
+    background: @trackInvertedBackground;
+  }
+  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb {
+    background: @thumbInvertedBackground;
+  }
+  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive {
+    background: @thumbInvertedInactiveBackground;
+  }
+  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {
+    background: @thumbInvertedHoverBackground;
+  }
+}
+.addScrollbars();
+
 /*******************************
             States
 *******************************/
 
+/* Animating */
 .animating.dimmable:not(body),
 .dimmed.dimmable:not(body) {
   overflow: @overflow;
 }
 
+/* Animating / Active / Visible */
 .dimmed.dimmable > .ui.animating.dimmer,
 .dimmed.dimmable > .ui.visible.dimmer,
 .ui.active.dimmer {
-  display: block;
+  display: flex;
   opacity: @visibleOpacity;
 }
 
+/* Disabled */
 .ui.disabled.dimmer {
   width: 0 !important;
   height: 0 !important;
 }
 
+
 /*******************************
            Variations
 *******************************/
 
+
+/*--------------
+    Legacy
+---------------*/
+
+/* Animating / Active / Visible */
+.dimmed.dimmable > .ui.animating.legacy.dimmer,
+.dimmed.dimmable > .ui.visible.legacy.dimmer,
+.ui.active.legacy.dimmer {
+  display: block;
+}
+
+/*--------------
+    Alignment
+---------------*/
+
+.ui[class*="top aligned"].dimmer {
+  justify-content: flex-start;
+}
+.ui[class*="bottom aligned"].dimmer {
+  justify-content: flex-end;
+}
+
 /*--------------
       Page
 ---------------*/
@@ -153,7 +195,7 @@ body.dimmable > .dimmer {
   background-color: @invertedBackgroundColor;
 }
 .ui.inverted.dimmer > .content > * {
-  color: @textColor;
+  color: @invertedTextColor;
 }
 
 /*--------------
index e8c663e..04da799 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -97,7 +97,13 @@ $.fn.dropdown = function(parameters) {
             module.setup.reference();
           }
           else {
+
             module.setup.layout();
+
+            if(settings.values) {
+              module.change.values(settings.values);
+            }
+
             module.refreshData();
 
             module.save.defaults();
@@ -162,7 +168,7 @@ $.fn.dropdown = function(parameters) {
         observe: {
           select: function() {
             if(module.has.input()) {
-              selectObserver.observe($input[0], {
+              selectObserver.observe($module[0], {
                 childList : true,
                 subtree   : true
               });
@@ -383,19 +389,16 @@ $.fn.dropdown = function(parameters) {
           reference: function() {
             module.debug('Dropdown behavior was called on select, replacing with closest dropdown');
             // replace module reference
-            $module = $module.parent(selector.dropdown);
+            $module  = $module.parent(selector.dropdown);
+            instance = $module.data(moduleNamespace);
+            element  = $module.get(0);
             module.refresh();
             module.setup.returnedObject();
-            // invoke method in context of current instance
-            if(methodInvoked) {
-              instance = module;
-              module.invoke(query);
-            }
           },
           returnedObject: function() {
             var
               $firstModules = $allModules.slice(0, elementIndex),
-              $lastModules = $allModules.slice(elementIndex + 1)
+              $lastModules  = $allModules.slice(elementIndex + 1)
             ;
             // adjust all modules to use correct reference
             $allModules = $firstModules.add($module).add($lastModules);
@@ -493,7 +496,7 @@ $.fn.dropdown = function(parameters) {
             ? callback
             : function(){}
           ;
-          if( module.is.active() ) {
+          if( module.is.active() && !module.is.animatingOutward() ) {
             module.debug('Hiding dropdown');
             if(settings.onHide.call(element) !== false) {
               module.animate.hide(function() {
@@ -602,7 +605,6 @@ $.fn.dropdown = function(parameters) {
             else {
               if(settings.on == 'click') {
                 $module
-                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)
                   .on('click' + eventNamespace, module.event.test.toggle)
                 ;
               }
@@ -618,6 +620,7 @@ $.fn.dropdown = function(parameters) {
                 ;
               }
               $module
+                .on('click' + eventNamespace, selector.icon, module.event.icon.click)
                 .on('mousedown' + eventNamespace, module.event.mousedown)
                 .on('mouseup'   + eventNamespace, module.event.mouseup)
                 .on('focus'     + eventNamespace, module.event.focus)
@@ -677,7 +680,9 @@ $.fn.dropdown = function(parameters) {
               if(module.is.multiple()) {
                 module.filterActive();
               }
-              module.select.firstUnfiltered();
+              if(query || (!query && module.get.activeItem().length == 0)) {
+                module.select.firstUnfiltered();
+              }
               if( module.has.allResultsFiltered() ) {
                 if( settings.onNoResults.call(element, searchTerm) ) {
                   if(settings.allowAdditions) {
@@ -749,10 +754,19 @@ $.fn.dropdown = function(parameters) {
                 callback();
               },
               onSuccess : function(response) {
-                module.remove.message();
-                module.setup.menu({
-                  values: response[fields.remoteValues]
-                });
+                var
+                  values          = response[fields.remoteValues],
+                  hasRemoteValues = ($.isArray(values) && values.length > 0)
+                ;
+                if(hasRemoteValues) {
+                  module.remove.message();
+                  module.setup.menu({
+                    values: response[fields.remoteValues]
+                  });
+                }
+                else {
+                  module.add.message(message.noResults);
+                }
                 callback();
               }
             }
@@ -911,6 +925,23 @@ $.fn.dropdown = function(parameters) {
           }
         },
 
+        change: {
+          values: function(values) {
+            if(!settings.allowAdditions) {
+              module.clear();
+            }
+            module.debug('Creating dropdown with specified values', values);
+            module.setup.menu({values: values});
+            $.each(values, function(index, item) {
+              if(item.selected == true) {
+                module.debug('Setting initial selection to', item.value);
+                module.set.selected(item.value);
+                return true;
+              }
+            });
+          }
+        },
+
         event: {
           change: function() {
             if(!internalChange) {
@@ -988,7 +1019,12 @@ $.fn.dropdown = function(parameters) {
           },
           icon: {
             click: function(event) {
-              module.toggle();
+              if($icon.hasClass(className.clear)) {
+                module.clear();
+              }
+              else if (module.can.click()) {
+                module.toggle();
+              }
             }
           },
           text: {
@@ -1079,7 +1115,22 @@ $.fn.dropdown = function(parameters) {
           select: {
             mutation: function(mutations) {
               module.debug('<select> modified, recreating menu');
-              module.setup.select();
+              var
+                isSelectMutation = false
+              ;
+              $.each(mutations, function(index, mutation) {
+                if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
+                  isSelectMutation = true;
+                  return true;
+                }
+              });
+              if(isSelectMutation) {
+                module.disconnect.selectObserver();
+                module.refresh();
+                module.setup.select();
+                module.set.selected();
+                module.observe.select();
+              }
             }
           },
           menu: {
@@ -1468,7 +1519,6 @@ $.fn.dropdown = function(parameters) {
                 // down arrow (open menu)
                 if(pressedKey == keys.downArrow && !module.is.visible()) {
                   module.verbose('Down key pressed, showing dropdown');
-                  module.select.firstUnfiltered();
                   module.show();
                   event.preventDefault();
                 }
@@ -1581,7 +1631,7 @@ $.fn.dropdown = function(parameters) {
               : text
             ;
             if( module.can.activate( $(element) ) ) {
-              module.set.value(value, $(element));
+              module.set.value(value, text, $(element));
               if(module.is.multiple() && !module.is.allFiltered()) {
                 return;
               }
@@ -1601,7 +1651,7 @@ $.fn.dropdown = function(parameters) {
           },
 
           hide: function(text, value, element) {
-            module.set.value(value, text);
+            module.set.value(value, text, $(element));
             module.hideAndClear();
           }
 
@@ -1618,6 +1668,9 @@ $.fn.dropdown = function(parameters) {
             return $module.data(metadata.defaultValue);
           },
           placeholderText: function() {
+            if(settings.placeholder != 'auto' && typeof settings.placeholder == 'string') {
+              return settings.placeholder;
+            }
             return $module.data(metadata.placeholderText) || '';
           },
           text: function() {
@@ -2244,7 +2297,7 @@ $.fn.dropdown = function(parameters) {
             var
               length = module.get.query().length
             ;
-            $search.val( text.substr(0 , length));
+            $search.val( text.substr(0, length));
           },
           scrollPosition: function($item, forceScroll) {
             var
@@ -2367,26 +2420,35 @@ $.fn.dropdown = function(parameters) {
           },
           direction: function($menu) {
             if(settings.direction == 'auto') {
-              if(module.is.onScreen($menu)) {
+              // reset position
+              module.remove.upward();
+
+              if(module.can.openDownward($menu)) {
                 module.remove.upward($menu);
               }
               else {
                 module.set.upward($menu);
               }
+              if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {
+                module.set.leftward($menu);
+              }
             }
             else if(settings.direction == 'upward') {
               module.set.upward($menu);
             }
           },
-          upward: function($menu) {
-            var $element = $menu || $module;
+          upward: function($currentMenu) {
+            var $element = $currentMenu || $module;
             $element.addClass(className.upward);
           },
+          leftward: function($currentMenu) {
+            var $element = $currentMenu || $menu;
+            $element.addClass(className.leftward);
+          },
           value: function(value, text, $selected) {
             var
               escapedValue = module.escape.value(value),
               hasInput     = ($input.length > 0),
-              isAddition   = !module.has.value(value),
               currentValue = module.get.values(),
               stringValue  = (value !== undefined)
                 ? String(value)
@@ -2424,6 +2486,15 @@ $.fn.dropdown = function(parameters) {
                 $module.data(metadata.value, stringValue);
               }
             }
+            if(module.is.single() && settings.clearable) {
+              // treat undefined or '' as empty
+              if(!escapedValue) {
+                module.remove.clearable();
+              }
+              else {
+                module.set.clearable();
+              }
+            }
             if(settings.fireOnInit === false && module.is.initialLoad()) {
               module.verbose('No callback on initial load', settings.onChange);
             }
@@ -2489,8 +2560,8 @@ $.fn.dropdown = function(parameters) {
                       module.save.remoteData(selectedText, selectedValue);
                     }
                     if(settings.useLabels) {
-                      module.add.value(selectedValue, selectedText, $selected);
                       module.add.label(selectedValue, selectedText, shouldAnimate);
+                      module.add.value(selectedValue, selectedText, $selected);
                       module.set.activeItem($selected);
                       module.filterActive();
                       module.select.nextAvailable($selectedItem);
@@ -2519,7 +2590,10 @@ $.fn.dropdown = function(parameters) {
                 }
               })
             ;
-          }
+          },
+          clearable: function() {
+            $icon.addClass(className.clear);
+          },
         },
 
         add: {
@@ -2531,6 +2605,9 @@ $.fn.dropdown = function(parameters) {
               escapedValue = module.escape.value(value),
               $label
             ;
+            if(settings.ignoreCase) {
+              escapedValue = escapedValue.toLowerCase();
+            }
             $label =  $('<a />')
               .addClass(className.label)
               .attr('data-' + metadata.value, escapedValue)
@@ -2539,7 +2616,7 @@ $.fn.dropdown = function(parameters) {
             $label = settings.onLabelCreate.call($label, escapedValue, text);
 
             if(module.has.label(value)) {
-              module.debug('Label already exists, skipping', escapedValue);
+              module.debug('User selection already exists, skipping', escapedValue);
               return;
             }
             if(settings.label.variation) {
@@ -2678,6 +2755,10 @@ $.fn.dropdown = function(parameters) {
               currentValue = module.get.values(),
               newValue
             ;
+            if(module.has.value(addedValue)) {
+              module.debug('Value already selected');
+              return;
+            }
             if(addedValue === '') {
               module.debug('Cannot select blank values from multiselect');
               return;
@@ -2710,7 +2791,7 @@ $.fn.dropdown = function(parameters) {
             }
             module.set.value(newValue, addedValue, addedText, $selectedItem);
             module.check.maxSelections();
-          }
+          },
         },
 
         remove: {
@@ -2729,10 +2810,14 @@ $.fn.dropdown = function(parameters) {
           initialLoad: function() {
             initialLoad = false;
           },
-          upward: function($menu) {
-            var $element = $menu || $module;
+          upward: function($currentMenu) {
+            var $element = $currentMenu || $module;
             $element.removeClass(className.upward);
           },
+          leftward: function($currentMenu) {
+            var $element = $currentMenu || $menu;
+            $element.removeClass(className.leftward);
+          },
           visible: function() {
             $module.removeClass(className.visible);
           },
@@ -2931,6 +3016,9 @@ $.fn.dropdown = function(parameters) {
                 .removeAttr('tabindex')
               ;
             }
+          },
+          clearable: function() {
+            $icon.removeClass(className.clear);
           }
         },
 
@@ -2987,6 +3075,9 @@ $.fn.dropdown = function(parameters) {
               escapedValue = module.escape.value(value),
               $labels      = $module.find(selector.label)
             ;
+            if(settings.ignoreCase) {
+              escapedValue = escapedValue.toLowerCase();
+            }
             return ($labels.filter('[data-' + metadata.value + '="' + module.escape.string(escapedValue) +'"]').length > 0);
           },
           maxSelections: function() {
@@ -3005,6 +3096,12 @@ $.fn.dropdown = function(parameters) {
             return (module.get.query() !== '');
           },
           value: function(value) {
+            return (settings.ignoreCase)
+              ? module.has.valueIgnoringCase(value)
+              : module.has.valueMatchingCase(value)
+            ;
+          },
+          valueMatchingCase: function(value) {
             var
               values   = module.get.values(),
               hasValue = $.isArray(values)
@@ -3015,6 +3112,22 @@ $.fn.dropdown = function(parameters) {
               ? true
               : false
             ;
+          },
+          valueIgnoringCase: function(value) {
+            var
+              values   = module.get.values(),
+              hasValue = false
+            ;
+            if(!$.isArray(values)) {
+              values = [values];
+            }
+            $.each(values, function(index, existingValue) {
+              if(String(value).toLowerCase() == String(existingValue).toLowerCase()) {
+                hasValue = true;
+                return false;
+              }
+            });
+            return hasValue;
           }
         },
 
@@ -3022,6 +3135,12 @@ $.fn.dropdown = function(parameters) {
           active: function() {
             return $module.hasClass(className.active);
           },
+          animatingInward: function() {
+            return $menu.transition('is inward');
+          },
+          animatingOutward: function() {
+            return $menu.transition('is outward');
+          },
           bubbledLabelClick: function(event) {
             return $(event.target).is('select, input') && $module.closest('label').length > 0;
           },
@@ -3029,7 +3148,7 @@ $.fn.dropdown = function(parameters) {
             return $(event.target).closest($icon).length > 0;
           },
           alreadySetup: function() {
-            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);
+            return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
           },
           animating: function($subMenu) {
             return ($subMenu)
@@ -3037,6 +3156,10 @@ $.fn.dropdown = function(parameters) {
               : $menu.transition    && $menu.transition('is animating')
             ;
           },
+          leftward: function($subMenu) {
+            var $selectedMenu = $subMenu || $menu;
+            return $selectedMenu.hasClass(className.leftward);
+          },
           disabled: function() {
             return $module.hasClass(className.disabled);
           },
@@ -3055,46 +3178,6 @@ $.fn.dropdown = function(parameters) {
           initialLoad: function() {
             return initialLoad;
           },
-          onScreen: function($subMenu) {
-            var
-              $currentMenu   = $subMenu || $menu,
-              canOpenDownward = true,
-              onScreen = {},
-              calculations
-            ;
-            $currentMenu.addClass(className.loading);
-            calculations = {
-              context: {
-                scrollTop : $context.scrollTop(),
-                height    : $context.outerHeight()
-              },
-              menu : {
-                offset: $currentMenu.offset(),
-                height: $currentMenu.outerHeight()
-              }
-            };
-            if(module.is.verticallyScrollableContext()) {
-              calculations.menu.offset.top += calculations.context.scrollTop;
-            }
-            onScreen = {
-              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,
-              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height
-            };
-            if(onScreen.below) {
-              module.verbose('Dropdown can fit in context downward', onScreen);
-              canOpenDownward = true;
-            }
-            else if(!onScreen.below && !onScreen.above) {
-              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);
-              canOpenDownward = true;
-            }
-            else {
-              module.verbose('Dropdown cannot fit below, opening upward', onScreen);
-              canOpenDownward = false;
-            }
-            $currentMenu.removeClass(className.loading);
-            return canOpenDownward;
-          },
           inObject: function(needle, object) {
             var
               found = false
@@ -3157,6 +3240,14 @@ $.fn.dropdown = function(parameters) {
                 : false
             ;
             return (overflowY == 'auto' || overflowY == 'scroll');
+          },
+          horizontallyScrollableContext: function() {
+            var
+              overflowX = ($context.get(0) !== window)
+                ? $context.css('overflow-X')
+                : false
+            ;
+            return (overflowX == 'auto' || overflowX == 'scroll');
           }
         },
 
@@ -3173,6 +3264,85 @@ $.fn.dropdown = function(parameters) {
             }
             return false;
           },
+          openDownward: function($subMenu) {
+            var
+              $currentMenu    = $subMenu || $menu,
+              canOpenDownward = true,
+              onScreen        = {},
+              calculations
+            ;
+            $currentMenu
+              .addClass(className.loading)
+            ;
+            calculations = {
+              context: {
+                offset    : ($context.get(0) === window)
+                  ? { top: 0, left: 0}
+                  : $context.offset(),
+                scrollTop : $context.scrollTop(),
+                height    : $context.outerHeight()
+              },
+              menu : {
+                offset: $currentMenu.offset(),
+                height: $currentMenu.outerHeight()
+              }
+            };
+            if(module.is.verticallyScrollableContext()) {
+              calculations.menu.offset.top += calculations.context.scrollTop;
+            }
+            onScreen = {
+              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.context.offset.top - calculations.menu.height,
+              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top - calculations.context.offset.top + calculations.menu.height
+            };
+            if(onScreen.below) {
+              module.verbose('Dropdown can fit in context downward', onScreen);
+              canOpenDownward = true;
+            }
+            else if(!onScreen.below && !onScreen.above) {
+              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);
+              canOpenDownward = true;
+            }
+            else {
+              module.verbose('Dropdown cannot fit below, opening upward', onScreen);
+              canOpenDownward = false;
+            }
+            $currentMenu.removeClass(className.loading);
+            return canOpenDownward;
+          },
+          openRightward: function($subMenu) {
+            var
+              $currentMenu     = $subMenu || $menu,
+              canOpenRightward = true,
+              isOffscreenRight = false,
+              calculations
+            ;
+            $currentMenu
+              .addClass(className.loading)
+            ;
+            calculations = {
+              context: {
+                offset     : ($context.get(0) === window)
+                  ? { top: 0, left: 0}
+                  : $context.offset(),
+                scrollLeft : $context.scrollLeft(),
+                width      : $context.outerWidth()
+              },
+              menu: {
+                offset : $currentMenu.offset(),
+                width  : $currentMenu.outerWidth()
+              }
+            };
+            if(module.is.horizontallyScrollableContext()) {
+              calculations.menu.offset.left += calculations.context.scrollLeft;
+            }
+            isOffscreenRight = (calculations.menu.offset.left - calculations.context.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);
+            if(isOffscreenRight) {
+              module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);
+              canOpenRightward = false;
+            }
+            $currentMenu.removeClass(className.loading);
+            return canOpenRightward;
+          },
           click: function() {
             return (hasTouch || settings.on == 'click');
           },
@@ -3271,12 +3441,9 @@ $.fn.dropdown = function(parameters) {
                     duration   : settings.duration,
                     debug      : settings.debug,
                     verbose    : settings.verbose,
-                    queue      : true,
+                    queue      : false,
                     onStart    : start,
                     onComplete : function() {
-                      if(settings.direction == 'auto') {
-                        module.remove.upward($subMenu);
-                      }
                       callback.call(element);
                     }
                   })
@@ -3537,6 +3704,9 @@ $.fn.dropdown.settings = {
   on                     : 'click',    // what event should show menu action on item selection
   action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})
 
+  values                 : false,      // specify values to use for dropdown
+
+  clearable              : false,      // whether the value of the dropdown can be cleared
 
   apiSettings            : false,
   selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used
@@ -3561,7 +3731,8 @@ $.fn.dropdown.settings = {
   forceSelection         : true,       // force a choice on blur with search selection
 
   allowAdditions         : false,      // whether multiple select should allow user added values
-  hideAdditions          : true,      // whether or not to hide special message prompting a user they can enter a value
+  ignoreCase             : false,       // whether to consider values not matching in case to be the same
+  hideAdditions          : true,       // whether or not to hide special message prompting a user they can enter a value
 
   maxSelections          : false,      // When set to a number limits the number of selections to this count
   useLabels              : true,       // whether multiple select should filter currently active selections from choices
@@ -3689,6 +3860,7 @@ $.fn.dropdown.settings = {
     active      : 'active',
     addition    : 'addition',
     animating   : 'animating',
+    clear       : 'clear',
     disabled    : 'disabled',
     empty       : 'empty',
     dropdown    : 'ui dropdown',
@@ -3706,6 +3878,7 @@ $.fn.dropdown.settings = {
     selected    : 'selected',
     selection   : 'selection',
     upward      : 'upward',
+    leftward    : 'left',
     visible     : 'visible'
   }
 
@@ -3754,7 +3927,7 @@ $.fn.dropdown.settings.templates = {
           ? 'disabled '
           : ''
       ;
-      html += '<div class="'+ maybeDisabled +'item" data-value="' + option[fields.value] + '"' + maybeText + '>'
+      html += '<div class="'+ maybeDisabled +'item" data-value="' + option[fields.value] + '"' + maybeText + '>';
       html +=   option[fields.name];
       html += '</div>';
     });
old mode 100644 (file)
new mode 100755 (executable)
index 28dc67d..721aa01
   margin: @menuDividerMargin;
 }
 
-.ui.dropdown .menu > .input {
+.ui.dropdown.dropdown .menu > .input {
   width: auto;
   display: flex;
   margin: @menuInputMargin;
 
 .ui.dropdown .menu .menu {
   top: @subMenuTop !important;
-  left: @subMenuLeft !important;
-  right: @subMenuRight !important;
+  left: @subMenuLeft;
+  right: @subMenuRight;
   margin: @subMenuMargin !important;
   border-radius: @subMenuBorderRadius !important;
   z-index: @subMenuZIndex !important;
 .ui.dropdown .menu > .item > .image,
 .ui.dropdown .menu > .item > img {
   display: inline-block;
-  vertical-align: middle;
+  vertical-align: top;
   width: auto;
+  margin-top: @menuImageVerticalMargin;
+  margin-bottom: @menuImageVerticalMargin;
   max-height: @menuImageMaxHeight;
 }
 
@@ -769,7 +771,9 @@ select.ui.dropdown {
 
 .ui.loading.dropdown > i.icon {
   height: @relative14px !important;
-  padding: @relative16px @relative15px !important;
+}
+.ui.loading.selection.dropdown > i.icon {
+  padding: @relative21px @relative18px !important;
 }
 .ui.loading.dropdown > i.icon:before {
   position: absolute;
@@ -829,8 +833,8 @@ select.ui.dropdown {
 .ui.default.dropdown:not(.button) > .text {
   color: @defaultTextColor;
 }
-.ui.dropdown:not(.button) > input:focus + .default.text,
-.ui.default.dropdown:not(.button) > input:focus + .text {
+.ui.dropdown:not(.button) > input:focus ~ .default.text,
+.ui.default.dropdown:not(.button) > input:focus ~ .text {
   color: @defaultTextFocusColor;
 }
 /*--------------------
@@ -847,6 +851,14 @@ select.ui.dropdown {
   visibility: hidden;
   z-index: @loadingZIndex;
 }
+.ui.dropdown > .loading.menu {
+  left: 0px !important;
+  right: auto !important;
+}
+.ui.dropdown > .menu .loading.menu {
+  left: 100% !important;
+  right: auto !important;
+}
 
 /*--------------------
     Keyboard Select
@@ -913,6 +925,18 @@ select.ui.dropdown {
 }
 
 
+/*--------------------
+        Clear
+----------------------*/
+
+.ui.dropdown > .clear.dropdown.icon {
+  opacity: @clearableIconOpacity;
+  transition: opacity @defaultDuration @defaultEasing;
+}
+.ui.dropdown > .clear.dropdown.icon:hover {
+  opacity: @clearableIconActiveOpacity;
+}
+
 
 /*--------------------
         Disabled
@@ -949,11 +973,17 @@ select.ui.dropdown {
   border-radius: @subMenuBorderRadius !important;
 }
 
-/* Left Flyout Menu */
+/* Leftward Opening Menu */
+.ui.dropdown > .left.menu {
+  left: auto !important;
+  right: 0px !important;
+}
+
 .ui.dropdown > .left.menu .menu,
 .ui.dropdown .menu .left.menu {
-  left: auto !important;
-  right: 100% !important;
+  left: auto;
+  right: 100%;
+  margin: @leftSubMenuMargin !important;
   border-radius: @leftSubMenuBorderRadius !important;
 }
 
@@ -972,6 +1002,7 @@ select.ui.dropdown {
 .ui.dropdown .item .left.dropdown.icon + .text,
 .ui.dropdown .left.menu .item .dropdown.icon + .text {
   margin-left: @itemDropdownIconDistance;
+  margin-right: 0em;
 }
 
 
@@ -1079,7 +1110,7 @@ select.ui.dropdown {
 @media all and (-ms-high-contrast:none) {
   .ui.scrolling.dropdown .menu,
   .ui.dropdown .scrolling.menu {
-    min-width: ~"calc(100% - "@scrollbarWidth~")";
+    min-width: calc(100% - @scrollbarWidth);
   }
 }
 @media only screen and (max-width : @largestMobileScreen) {
@@ -1245,7 +1276,7 @@ select.ui.dropdown {
   margin: 0em;
   transform: rotate(45deg);
 }
-/* Top Right  Pointing */
+/* Top Right Pointing */
 .ui.top.right.pointing.dropdown > .menu {
   top: 100%;
   bottom: auto;
@@ -1253,10 +1284,11 @@ select.ui.dropdown {
   left: auto;
   margin: @pointingArrowDistanceFromEdge 0em 0em;
 }
+.ui.top.pointing.dropdown > .left.menu:after,
 .ui.top.right.pointing.dropdown > .menu:after {
   top: @pointingArrowOffset;
-  left: auto;
-  right: @pointingArrowDistanceFromEdge;
+  left: auto !important;
+  right: @pointingArrowDistanceFromEdge !important;
   margin: 0em;
   transform: rotate(45deg);
 }
@@ -1274,6 +1306,19 @@ select.ui.dropdown {
   margin: 0em 0em 0em 0em;
   transform: rotate(-45deg);
 }
+.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu {
+  left: auto !important;
+  right: 100% !important;
+  margin: 0em @pointingArrowDistanceFromEdge 0em 0em;
+}
+.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after {
+  top: 1em;
+  left: auto;
+  right: @pointingArrowOffset;
+  margin: 0em 0em 0em 0em;
+  transform: rotate(135deg);
+}
+
 
 /* Right Pointing */
 .ui.right.pointing.dropdown > .menu {
@@ -1332,44 +1377,44 @@ select.ui.dropdown {
 }
 
 /* Upward pointing */
-.ui.upward.pointing.dropdown > .menu,
-.ui.upward.top.pointing.dropdown > .menu {
-  top: auto;
-  bottom: 100%;
+.ui.pointing.upward.dropdown .menu,
+.ui.top.pointing.upward.dropdown .menu {
+  top: auto !important;
+  bottom: 100% !important;
   margin: 0em 0em @pointingMenuDistance;
   border-radius: @pointingUpwardMenuBorderRadius;
 }
-.ui.upward.pointing.dropdown > .menu:after,
-.ui.upward.top.pointing.dropdown > .menu:after {
-  top: 100%;
-  bottom: auto;
+.ui.pointing.upward.dropdown .menu:after,
+.ui.top.pointing.upward.dropdown .menu:after {
+  top: 100% !important;
+  bottom: auto !important;
   box-shadow: @pointingUpwardArrowBoxShadow;
   margin: @pointingArrowOffset 0em 0em;
 }
 
 /* Right Pointing Upward */
-.ui.upward.right.pointing.dropdown:not(.top):not(.bottom) > .menu {
-  top: auto;
-  bottom: 0;
+.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu {
+  top: auto !important;
+  bottom: 0 !important;
   margin: 0em @pointingArrowDistanceFromEdge 0em 0em;
 }
-.ui.upward.right.pointing.dropdown:not(.top):not(.bottom) > .menu:after {
-  top: auto;
-  bottom: 0;
+.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {
+  top: auto !important;
+  bottom: 0 !important;
   margin: 0em 0em @pointingArrowDistanceFromEdge 0em;
   box-shadow: @pointingArrowBoxShadow;
 }
 
 
 /* Left Pointing Upward */
-.ui.upward.left.pointing.dropdown:not(.top):not(.bottom) > .menu {
-  top: auto;
-  bottom: 0;
+.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu {
+  top: auto !important;
+  bottom: 0 !important;
   margin: 0em 0em 0em @pointingArrowDistanceFromEdge;
 }
-.ui.upward.left.pointing.dropdown:not(.top):not(.bottom) > .menu:after {
-  top: auto;
-  bottom: 0;
+.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {
+  top: auto !important;
+  bottom: 0 !important;
   margin: 0em 0em @pointingArrowDistanceFromEdge 0em;
   box-shadow: @pointingArrowBoxShadow;
 }
index 6ed6f5a..a9f684d 100644 (file)
@@ -181,6 +181,7 @@ $.fn.embed = function(parameters) {
         // clears embed
         reset: function() {
           module.debug('Clearing embed and showing placeholder');
+          module.remove.data();
           module.remove.active();
           module.remove.embed();
           module.showPlaceholder();
@@ -300,6 +301,15 @@ $.fn.embed = function(parameters) {
         },
 
         remove: {
+          data: function() {
+            $module
+              .removeData(metadata.id)
+              .removeData(metadata.icon)
+              .removeData(metadata.placeholder)
+              .removeData(metadata.source)
+              .removeData(metadata.url)
+            ;
+          },
           active: function() {
             $module.removeClass(className.active);
           },
old mode 100644 (file)
new mode 100755 (executable)
index 9de8673..d2793ee
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -108,25 +108,18 @@ $.fn.modal = function(parameters) {
             var
               defaultSettings = {
                 debug      : settings.debug,
-                dimmerName : 'modals',
-                duration   : {
-                  show     : settings.duration,
-                  hide     : settings.duration
-                }
+                variation  : settings.centered
+                  ? false
+                  : 'top aligned',
+                dimmerName : 'modals'
               },
               dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)
             ;
-            if(settings.inverted) {
-              dimmerSettings.variation = (dimmerSettings.variation !== undefined)
-                ? dimmerSettings.variation + ' inverted'
-                : 'inverted'
-              ;
-            }
             if($.fn.dimmer === undefined) {
               module.error(error.dimmer);
               return;
             }
-            module.debug('Creating dimmer with settings', dimmerSettings);
+            module.debug('Creating dimmer');
             $dimmable = $context.dimmer(dimmerSettings);
             if(settings.detachable) {
               module.verbose('Modal is detachable, moving content into dimmer');
@@ -135,13 +128,10 @@ $.fn.modal = function(parameters) {
             else {
               module.set.undetached();
             }
-            if(settings.blurring) {
-              $dimmable.addClass(className.blurring);
-            }
             $dimmer = $dimmable.dimmer('get dimmer');
           },
           id: function() {
-            id = (Math.random().toString(16) + '000000000').substr(2,8);
+            id = (Math.random().toString(16) + '000000000').substr(2, 8);
             elementEventNamespace = '.' + id;
             module.verbose('Creating unique id for element', id);
           }
@@ -176,9 +166,11 @@ $.fn.modal = function(parameters) {
         refresh: function() {
           module.remove.scrolling();
           module.cacheSizes();
+          if(!module.can.useFlex()) {
+            module.set.modalOffset();
+          }
           module.set.screenHeight();
           module.set.type();
-          module.set.position();
         },
 
         refreshModals: function() {
@@ -217,12 +209,22 @@ $.fn.modal = function(parameters) {
             $window
               .on('resize' + elementEventNamespace, module.event.resize)
             ;
+          },
+          scrollLock: function() {
+            // touch events default to passive, due to changes in chrome to optimize mobile perf
+            $dimmable.get(0).addEventListener('touchmove', module.event.preventScroll, { passive: false });
+          }
+        },
+
+        unbind: {
+          scrollLock: function() {
+            $dimmable.get(0).removeEventListener('touchmove', module.event.preventScroll, { passive: false });
           }
         },
 
         get: {
           id: function() {
-            return (Math.random().toString(16) + '000000000').substr(2,8);
+            return (Math.random().toString(16) + '000000000').substr(2, 8);
           }
         },
 
@@ -237,6 +239,9 @@ $.fn.modal = function(parameters) {
               ignoreRepeatedEvents = false;
             });
           },
+          preventScroll: function(event) {
+            event.preventDefault();
+          },
           deny: function() {
             if(ignoreRepeatedEvents || settings.onDeny.call(element, $(this)) === false) {
               module.verbose('Deny callback returned false cancelling hide');
@@ -251,21 +256,23 @@ $.fn.modal = function(parameters) {
             module.hide();
           },
           click: function(event) {
+            if(!settings.closable) {
+              module.verbose('Dimmer clicked but closable setting is disabled');
+              return;
+            }
             var
               $target   = $(event.target),
               isInModal = ($target.closest(selector.modal).length > 0),
               isInDOM   = $.contains(document.documentElement, event.target)
             ;
-            if(!isInModal && isInDOM) {
+            if(!isInModal && isInDOM && module.is.active()) {
               module.debug('Dimmer clicked, hiding all modals');
-              if( module.is.active() ) {
-                module.remove.clickaway();
-                if(settings.allowMultiple) {
-                  module.hide();
-                }
-                else {
-                  module.hideAll();
-                }
+              module.remove.clickaway();
+              if(settings.allowMultiple) {
+                module.hide();
+              }
+              else {
+                module.hideAll();
               }
             }
           },
@@ -290,7 +297,7 @@ $.fn.modal = function(parameters) {
             }
           },
           resize: function() {
-            if( $dimmable.dimmer('is active') ) {
+            if( $dimmable.dimmer('is active') && ( module.is.animating() || module.is.active() ) ) {
               requestAnimationFrame(module.refresh);
             }
           }
@@ -311,6 +318,9 @@ $.fn.modal = function(parameters) {
             : function(){}
           ;
           module.refreshModals();
+          module.set.dimmerSettings();
+          module.set.dimmerStyles();
+
           module.showModal(callback);
         },
 
@@ -329,10 +339,16 @@ $.fn.modal = function(parameters) {
             : function(){}
           ;
           if( module.is.animating() || !module.is.active() ) {
-
             module.showDimmer();
             module.cacheSizes();
-            module.set.position();
+            if(module.can.useFlex()) {
+              module.remove.legacy();
+            }
+            else {
+              module.set.legacy();
+              module.set.modalOffset();
+              module.debug('Using non-flex legacy modal positioning.');
+            }
             module.set.screenHeight();
             module.set.type();
             module.set.clickaway();
@@ -341,6 +357,9 @@ $.fn.modal = function(parameters) {
               module.hideOthers(module.showModal);
             }
             else {
+              if(settings.allowMultiple && settings.detachable) {
+                $module.detach().appendTo($dimmer);
+              }
               settings.onShow.call(element);
               if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
                 module.debug('Showing modal with css animations');
@@ -407,6 +426,7 @@ $.fn.modal = function(parameters) {
                   },
                   onComplete : function() {
                     settings.onHidden.call(element);
+                    module.remove.dimmerStyles();
                     module.restore.focus();
                     callback();
                   }
@@ -431,6 +451,7 @@ $.fn.modal = function(parameters) {
 
         hideDimmer: function() {
           if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {
+            module.unbind.scrollLock();
             $dimmable.dimmer('hide', function() {
               module.remove.clickaway();
               module.remove.screenHeight();
@@ -496,7 +517,13 @@ $.fn.modal = function(parameters) {
 
         save: {
           focus: function() {
-            $focusedElement = $(document.activeElement).blur();
+            var
+              $activeElement = $(document.activeElement),
+              inCurrentModal = $activeElement.closest($module).length > 0
+            ;
+            if(!inCurrentModal) {
+              $focusedElement = $(document.activeElement).blur();
+            }
           }
         },
 
@@ -512,12 +539,17 @@ $.fn.modal = function(parameters) {
           active: function() {
             $module.removeClass(className.active);
           },
+          legacy: function() {
+            $module.removeClass(className.legacy);
+          },
           clickaway: function() {
-            if(settings.closable) {
-              $dimmer
-                .off('click' + elementEventNamespace)
-              ;
-            }
+            $dimmer
+              .off('click' + elementEventNamespace)
+            ;
+          },
+          dimmerStyles: function() {
+            $dimmer.removeClass(className.inverted);
+            $dimmable.removeClass(className.blurring);
           },
           bodyStyle: function() {
             if($body.attr('style') === '') {
@@ -544,24 +576,49 @@ $.fn.modal = function(parameters) {
         },
 
         cacheSizes: function() {
+          $module.addClass(className.loading);
           var
-            modalHeight = $module.outerHeight()
+            scrollHeight = $module.prop('scrollHeight'),
+            modalWidth   = $module.outerWidth(),
+            modalHeight  = $module.outerHeight()
           ;
           if(module.cache === undefined || modalHeight !== 0) {
             module.cache = {
               pageHeight    : $(document).outerHeight(),
+              width         : modalWidth,
               height        : modalHeight + settings.offset,
+              scrollHeight  : scrollHeight + settings.offset,
               contextHeight : (settings.context == 'body')
                 ? $(window).height()
-                : $dimmable.height()
+                : $dimmable.height(),
             };
+            module.cache.topOffset = -(module.cache.height / 2);
           }
+          $module.removeClass(className.loading);
           module.debug('Caching modal and container sizes', module.cache);
         },
 
         can: {
+          useFlex: function() {
+            return (settings.useFlex == 'auto')
+              ? settings.detachable && !module.is.ie()
+              : settings.useFlex
+            ;
+          },
           fit: function() {
-            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);
+            var
+              contextHeight  = module.cache.contextHeight,
+              verticalCenter = module.cache.contextHeight / 2,
+              topOffset      = module.cache.topOffset,
+              scrollHeight   = module.cache.scrollHeight,
+              height         = module.cache.height,
+              paddingHeight  = settings.padding,
+              startPosition  = (verticalCenter + topOffset)
+            ;
+            return (scrollHeight > height)
+              ? (startPosition + scrollHeight + paddingHeight < contextHeight)
+              : (height + (paddingHeight * 2) < contextHeight)
+            ;
           }
         },
 
@@ -569,6 +626,13 @@ $.fn.modal = function(parameters) {
           active: function() {
             return $module.hasClass(className.active);
           },
+          ie: function() {
+            var
+              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),
+              isIE   = ('ActiveXObject' in window)
+            ;
+            return (isIE11 || isIE);
+          },
           animating: function() {
             return $module.transition('is supported')
               ? $module.transition('is animating')
@@ -580,7 +644,7 @@ $.fn.modal = function(parameters) {
           },
           modernBrowser: function() {
             // appName for IE11 reports 'Netscape' can no longer use
-            return !(window.ActiveXObject || "ActiveXObject" in window);
+            return !(window.ActiveXObject || 'ActiveXObject' in window);
           }
         },
 
@@ -598,11 +662,67 @@ $.fn.modal = function(parameters) {
             }
           },
           clickaway: function() {
-            if(settings.closable) {
-              $dimmer
-                .on('click' + elementEventNamespace, module.event.click)
+            $dimmer
+              .on('click' + elementEventNamespace, module.event.click)
+            ;
+          },
+          dimmerSettings: function() {
+            if($.fn.dimmer === undefined) {
+              module.error(error.dimmer);
+              return;
+            }
+            var
+              defaultSettings = {
+                debug      : settings.debug,
+                dimmerName : 'modals',
+                closable   : 'auto',
+                useFlex    : module.can.useFlex(),
+                variation  : settings.centered
+                  ? false
+                  : 'top aligned',
+                duration   : {
+                  show     : settings.duration,
+                  hide     : settings.duration
+                }
+              },
+              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)
+            ;
+            if(settings.inverted) {
+              dimmerSettings.variation = (dimmerSettings.variation !== undefined)
+                ? dimmerSettings.variation + ' inverted'
+                : 'inverted'
               ;
             }
+            $context.dimmer('setting', dimmerSettings);
+          },
+          dimmerStyles: function() {
+            if(settings.inverted) {
+              $dimmer.addClass(className.inverted);
+            }
+            else {
+              $dimmer.removeClass(className.inverted);
+            }
+            if(settings.blurring) {
+              $dimmable.addClass(className.blurring);
+            }
+            else {
+              $dimmable.removeClass(className.blurring);
+            }
+          },
+          modalOffset: function() {
+            var
+              width = module.cache.width,
+              height = module.cache.height
+            ;
+            $module
+              .css({
+                marginTop: (settings.centered && module.can.fit())
+                  ? -(height / 2)
+                  : 0,
+                marginLeft: -(width / 2)
+              })
+            ;
+            module.verbose('Setting modal offset for legacy mode');
           },
           screenHeight: function() {
             if( module.can.fit() ) {
@@ -621,12 +741,17 @@ $.fn.modal = function(parameters) {
           scrolling: function() {
             $dimmable.addClass(className.scrolling);
             $module.addClass(className.scrolling);
+            module.unbind.scrollLock();
+          },
+          legacy: function() {
+            $module.addClass(className.legacy);
           },
           type: function() {
             if(module.can.fit()) {
               module.verbose('Modal fits on screen');
               if(!module.others.active() && !module.others.animating()) {
                 module.remove.scrolling();
+                module.bind.scrollLock();
               }
             }
             else {
@@ -634,25 +759,6 @@ $.fn.modal = function(parameters) {
               module.set.scrolling();
             }
           },
-          position: function() {
-            module.verbose('Centering modal on page', module.cache);
-            if(module.can.fit()) {
-              $module
-                .css({
-                  top: '',
-                  marginTop: -(module.cache.height / 2)
-                })
-              ;
-            }
-            else {
-              $module
-                .css({
-                  marginTop : '',
-                  top       : $document.scrollTop()
-                })
-              ;
-            }
-          },
           undetached: function() {
             $dimmable.addClass(className.undetached);
           }
@@ -846,6 +952,9 @@ $.fn.modal.settings = {
   name           : 'Modal',
   namespace      : 'modal',
 
+  useFlex        : 'auto',
+  offset         : 0,
+
   silent         : false,
   debug          : false,
   verbose        : false,
@@ -861,6 +970,8 @@ $.fn.modal.settings = {
   inverted       : false,
   blurring       : false,
 
+  centered       : true,
+
   dimmerSettings : {
     closable : false,
     useCSS   : true
@@ -873,7 +984,6 @@ $.fn.modal.settings = {
 
   queue      : false,
   duration   : 500,
-  offset     : 0,
   transition : 'scale',
 
   // padding with edge of page
@@ -912,6 +1022,9 @@ $.fn.modal.settings = {
     active     : 'active',
     animating  : 'animating',
     blurring   : 'blurring',
+    inverted   : 'inverted',
+    legacy     : 'legacy',
+    loading    : 'loading',
     scrolling  : 'scrolling',
     undetached : 'undetached'
   }
old mode 100644 (file)
new mode 100755 (executable)
index b59a2f4..1d59597
 *******************************/
 
 .ui.modal {
+  position: absolute;
   display: none;
-  position: fixed;
   z-index: @zIndex;
-
-  top: 50%;
-  left: 50%;
   text-align: left;
 
   background: @background;
@@ -36,6 +33,8 @@
   box-shadow: @boxShadow;
   transform-origin: @transformOrigin;
 
+  flex: 0 0 auto;
+
   border-radius: @borderRadius;
   user-select: text;
   will-change: top, left, margin, transform, opacity;
   color: @basicInvertedModalHeaderColor;
 }
 
+/* Resort to margin positioning if legacy */
+.ui.legacy.modal,
+.ui.legacy.page.dimmer > .ui.modal {
+  top: 50%;
+  left: 50%;
+}
+
+.ui.legacy.page.dimmer > .ui.scrolling.modal,
+.ui.page.dimmer > .ui.scrolling.legacy.modal,
+.ui.top.aligned.legacy.page.dimmer > .ui.modal,
+.ui.top.aligned.dimmer > .ui.legacy.modal {
+  top: auto;
+}
+
 /* Tablet and Mobile */
 @media only screen and (max-width : @largestTabletScreen) {
   .ui.basic.modal > .close {
              States
 *******************************/
 
+.ui.loading.modal {
+  display: block;
+  visibility: hidden;
+  z-index: @loadingZIndex;
+}
+
 .ui.active.modal {
   display: block;
 }
 *******************************/
 
 /*--------------
+   Top Aligned
+---------------*/
+
+/* Top Aligned Modal */
+.modals.dimmer[class*="top aligned"] .modal {
+  margin: @topAlignedMargin auto;
+}
+@media only screen and (max-width : @largestMobileScreen) {
+  .modals.dimmer[class*="top aligned"] .modal {
+    margin: @mobileTopAlignedMargin auto;
+  }
+}
+/* Legacy Top Aligned */
+.legacy.modals.dimmer[class*="top aligned"] {
+  padding-top: @topAlignedMargin;
+}
+@media only screen and (max-width : @largestMobileScreen) {
+  .legacy.modals.dimmer[class*="top aligned"] {
+    padding-top: @mobileTopAlignedMargin;
+  }
+}
+
+/*--------------
     Scrolling
 ---------------*/
 
-/* A modal that cannot fit on the page */
+/* Scrolling Dimmer */
 .scrolling.dimmable.dimmed {
   overflow: hidden;
 }
+.scrolling.dimmable > .dimmer {
+  justify-content: flex-start;
+}
 .scrolling.dimmable.dimmed > .dimmer {
   overflow: auto;
   -webkit-overflow-scrolling: touch;
   position: fixed;
 }
 .modals.dimmer .ui.scrolling.modal {
-  position: static !important;
-  margin: @scrollingMargin auto !important;
+  margin: @scrollingMargin auto;
 }
 
-/* undetached scrolling */
+/* Undetached Scrolling */
 .scrolling.undetached.dimmable.dimmed {
   overflow: auto;
   -webkit-overflow-scrolling: touch;
   margin-top: @scrollingMargin !important;
 }
 
-/* Coupling with Sidebar */
-.undetached.dimmable.dimmed > .pusher {
-  z-index: auto;
-}
-
-@media only screen and (max-width : @largestTabletScreen) {
-  .modals.dimmer .ui.scrolling.modal {
-    margin-top: @mobileScrollingMargin !important;
-    margin-bottom: @mobileScrollingMargin !important;
-  }
+/* Scrolling Content */
+.ui.modal .scrolling.content {
+  max-height: @scrollingContentMaxHeight;
+  overflow: auto;
 }
 
-
 /*--------------
    Full Screen
 ---------------*/
 
 .ui.fullscreen.modal {
   width: @fullScreenWidth !important;
-  left: @fullScreenOffset !important;
   margin: @fullScreenMargin;
 }
-.ui.fullscreen.scrolling.modal {
-  left: 0em !important;
-}
 .ui.fullscreen.modal > .header {
   padding-right: @closeHitbox;
 }
   font-size: @medium;
 }
 
+/* Mini */
+.ui.mini.modal > .header:not(.ui) {
+  font-size: @miniHeaderSize;
+}
+
+/* Mini Modal Width */
+@media only screen and (max-width : @largestMobileScreen) {
+  .ui.mini.modal {
+    width: @miniMobileWidth;
+    margin: @miniMobileMargin;
+  }
+}
+@media only screen and (min-width : @tabletBreakpoint) {
+  .ui.mini.modal {
+    width: @miniTabletWidth;
+    margin: @miniTabletMargin;
+  }
+}
+@media only screen and (min-width : @computerBreakpoint) {
+  .ui.mini.modal {
+    width: @miniComputerWidth;
+    margin: @miniComputerMargin;
+  }
+}
+@media only screen and (min-width : @largeMonitorBreakpoint) {
+  .ui.mini.modal {
+    width: @miniLargeMonitorWidth;
+    margin: @miniLargeMonitorMargin;
+  }
+}
+@media only screen and (min-width : @widescreenMonitorBreakpoint) {
+  .ui.mini.modal {
+    width: @miniWidescreenMonitorWidth;
+    margin: @miniWidescreenMonitorMargin;
+  }
+}
+
+/* mini */
+.ui.small.modal > .header:not(.ui) {
+  font-size: @miniHeaderSize;
+}
+
+/* Tiny Modal Width */
+@media only screen and (max-width : @largestMobileScreen) {
+  .ui.tiny.modal {
+    width: @tinyMobileWidth;
+    margin: @tinyMobileMargin;
+  }
+}
+@media only screen and (min-width : @tabletBreakpoint) {
+  .ui.tiny.modal {
+    width: @tinyTabletWidth;
+    margin: @tinyTabletMargin;
+  }
+}
+@media only screen and (min-width : @computerBreakpoint) {
+  .ui.tiny.modal {
+    width: @tinyComputerWidth;
+    margin: @tinyComputerMargin;
+  }
+}
+@media only screen and (min-width : @largeMonitorBreakpoint) {
+  .ui.tiny.modal {
+    width: @tinyLargeMonitorWidth;
+    margin: @tinyLargeMonitorMargin;
+  }
+}
+@media only screen and (min-width : @widescreenMonitorBreakpoint) {
+  .ui.tiny.modal {
+    width: @tinyWidescreenMonitorWidth;
+    margin: @tinyWidescreenMonitorMargin;
+  }
+}
+
 /* Small */
 .ui.small.modal > .header:not(.ui) {
   font-size: @smallHeaderSize;
index f8d862c..79d4311 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
old mode 100644 (file)
new mode 100755 (executable)
index 0e4a614..f8a201c 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -128,7 +128,7 @@ $.fn.popup = function(parameters) {
             $offsetParent = module.get.offsetParent();
             $popup.removeClass(className.loading);
             if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {
-              module.debug('Moving popup to the same offset parent as activating element');
+              module.debug('Moving popup to the same offset parent as target');
               $popup
                 .detach()
                 .appendTo($offsetParent)
@@ -360,7 +360,7 @@ $.fn.popup = function(parameters) {
 
         hideAll: function() {
           $(selector.popup)
-            .filter('.' + className.visible)
+            .filter('.' + className.popupVisible)
             .each(function() {
               $(this)
                 .data(metadata.activator)
@@ -415,7 +415,7 @@ $.fn.popup = function(parameters) {
         },
         supports: {
           svg: function() {
-            return (typeof SVGGraphicsElement === undefined);
+            return (typeof SVGGraphicsElement === 'undefined');
           }
         },
         animate: {
@@ -488,7 +488,7 @@ $.fn.popup = function(parameters) {
           },
           content: function() {
             $module.removeData(metadata.content);
-            return $module.data(metadata.content) || $module.attr('title') || settings.content;
+            return $module.data(metadata.content) || settings.content || $module.attr('title');
           },
           variation: function() {
             $module.removeData(metadata.variation);
@@ -502,9 +502,10 @@ $.fn.popup = function(parameters) {
           },
           calculations: function() {
             var
-              targetElement    = $target[0],
-              isWindow         = ($boundary[0] == window),
-              targetPosition   = (settings.inline || (settings.popup && settings.movePopup))
+              $popupOffsetParent = module.get.offsetParent($popup),
+              targetElement      = $target[0],
+              isWindow           = ($boundary[0] == window),
+              targetPosition     = (settings.inline || (settings.popup && settings.movePopup))
                 ? $target.position()
                 : $target.offset(),
               screenPosition = (isWindow)
@@ -549,6 +550,17 @@ $.fn.popup = function(parameters) {
               }
             };
 
+            // if popup offset context is not same as target, then adjust calculations
+            if($popupOffsetParent.get(0) !== $offsetParent.get(0)) {
+              var
+                popupOffset        = $popupOffsetParent.offset()
+              ;
+              calculations.target.top -= popupOffset.top;
+              calculations.target.left -= popupOffset.left;
+              calculations.parent.width = $popupOffsetParent.outerWidth();
+              calculations.parent.height = $popupOffsetParent.outerHeight();
+            }
+
             // add in container calcs if fluid
             if( settings.setFluidWidth && module.is.fluid() ) {
               calculations.container = {
@@ -625,11 +637,11 @@ $.fn.popup = function(parameters) {
             }
             return distanceFromBoundary;
           },
-          offsetParent: function($target) {
+          offsetParent: function($element) {
             var
-              element = ($target !== undefined)
-                ? $target[0]
-                : $module[0],
+              element = ($element !== undefined)
+                ? $element[0]
+                : $target[0],
               parentNode = element.parentNode,
               $node    = $(parentNode)
             ;
@@ -637,14 +649,14 @@ $.fn.popup = function(parameters) {
               var
                 is2D     = ($node.css('transform') === 'none'),
                 isStatic = ($node.css('position') === 'static'),
-                isHTML   = $node.is('html')
+                isBody   = $node.is('body')
               ;
-              while(parentNode && !isHTML && isStatic && is2D) {
+              while(parentNode && !isBody && isStatic && is2D) {
                 parentNode = parentNode.parentNode;
                 $node    = $(parentNode);
                 is2D     = ($node.css('transform') === 'none');
                 isStatic = ($node.css('position') === 'static');
-                isHTML   = $node.is('html');
+                isBody   = $node.is('body');
               }
             }
             return ($node && $node.length > 0)
@@ -753,6 +765,18 @@ $.fn.popup = function(parameters) {
             popup  = calculations.popup;
             parent = calculations.parent;
 
+            if(module.should.centerArrow(calculations)) {
+              module.verbose('Adjusting offset to center arrow on small target element');
+              if(position == 'top left' || position == 'bottom left') {
+                offset += (target.width / 2)
+                offset -= settings.arrowPixelsFromEdge;
+              }
+              if(position == 'top right' || position == 'bottom right') {
+                offset -= (target.width / 2)
+                offset += settings.arrowPixelsFromEdge;
+              }
+            }
+
             if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {
               module.debug('Popup target is hidden, no action taken');
               return false;
@@ -986,28 +1010,38 @@ $.fn.popup = function(parameters) {
           },
           close: function() {
             if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {
-              $scrollContext
-                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)
-              ;
+              module.bind.closeOnScroll();
             }
-            if(settings.on == 'hover' && openedWithTouch) {
-              module.verbose('Binding popup close event to document');
-              $document
-                .on('touchstart' + elementNamespace, function(event) {
-                  module.verbose('Touched away from popup');
-                  module.event.hideGracefully.call(element, event);
-                })
-              ;
+            if(module.is.closable()) {
+              module.bind.clickaway();
             }
-            if(settings.on == 'click' && settings.closable) {
-              module.verbose('Binding popup close event to document');
-              $document
-                .on('click' + elementNamespace, function(event) {
-                  module.verbose('Clicked away from popup');
-                  module.event.hideGracefully.call(element, event);
-                })
-              ;
+            else if(settings.on == 'hover' && openedWithTouch) {
+              module.bind.touchClose();
             }
+          },
+          closeOnScroll: function() {
+            module.verbose('Binding scroll close event to document');
+            $scrollContext
+              .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)
+            ;
+          },
+          touchClose: function() {
+            module.verbose('Binding popup touchclose event to document');
+            $document
+              .on('touchstart' + elementNamespace, function(event) {
+                module.verbose('Touched away from popup');
+                module.event.hideGracefully.call(element, event);
+              })
+            ;
+          },
+          clickaway: function() {
+            module.verbose('Binding popup close event to document');
+            $document
+              .on('click' + elementNamespace, function(event) {
+                module.verbose('Clicked away from popup');
+                module.event.hideGracefully.call(element, event);
+              })
+            ;
           }
         },
 
@@ -1036,7 +1070,22 @@ $.fn.popup = function(parameters) {
           }
         },
 
+        should: {
+          centerArrow: function(calculations) {
+            return !module.is.basic() && calculations.target.width <= (settings.arrowPixelsFromEdge * 2);
+          },
+        },
+
         is: {
+          closable: function() {
+            if(settings.closable == 'auto') {
+              if(settings.on == 'hover') {
+                return false;
+              }
+              return true;
+            }
+            return settings.closable;
+          },
           offstage: function(distanceFromBoundary, position) {
             var
               offstage = []
@@ -1058,6 +1107,9 @@ $.fn.popup = function(parameters) {
           svg: function(element) {
             return module.supports.svg() && (element instanceof SVGGraphicsElement);
           },
+          basic: function() {
+            return $module.hasClass(className.basic);
+          },
           active: function() {
             return $module.hasClass(className.active);
           },
@@ -1068,7 +1120,7 @@ $.fn.popup = function(parameters) {
             return ($popup !== undefined && $popup.hasClass(className.fluid));
           },
           visible: function() {
-            return ($popup !== undefined && $popup.hasClass(className.visible));
+            return ($popup !== undefined && $popup.hasClass(className.popupVisible));
           },
           dropdown: function() {
             return $module.hasClass(className.dropdown);
@@ -1370,8 +1422,11 @@ $.fn.popup.settings = {
   // specify position to appear even if it doesn't fit
   lastResort     : false,
 
+  // number of pixels from edge of popup to pointing arrow center (used from centering)
+  arrowPixelsFromEdge: 20,
+
   // delay used to prevent accidental refiring of animations due to user error
-  delay        : {
+  delay : {
     show : 50,
     hide : 70
   },
@@ -1414,14 +1469,16 @@ $.fn.popup.settings = {
   },
 
   className   : {
-    active    : 'active',
-    animating : 'animating',
-    dropdown  : 'dropdown',
-    fluid     : 'fluid',
-    loading   : 'loading',
-    popup     : 'ui popup',
-    position  : 'top left center bottom right',
-    visible   : 'visible'
+    active       : 'active',
+    basic        : 'basic',
+    animating    : 'animating',
+    dropdown     : 'dropdown',
+    fluid        : 'fluid',
+    loading      : 'loading',
+    popup        : 'ui popup',
+    position     : 'top left center bottom right',
+    visible      : 'visible',
+    popupVisible : 'visible'
   },
 
   selector    : {
old mode 100644 (file)
new mode 100755 (executable)
index d5aa745..9a5b2a5
@@ -52,7 +52,7 @@
   font-family: @headerFont;
   font-size: @headerFontSize;
   line-height: @headerLineHeight;
-  font-weight: bold;
+  font-weight: @headerFontWeight;
 }
 .ui.popup > .header + .content {
   padding-top: @headerDistance;
index 846fa4c..544e8c7 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
old mode 100644 (file)
new mode 100755 (executable)
index 1affce2..e1a643b 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
old mode 100644 (file)
new mode 100755 (executable)
index b82667c..e2effed
@@ -36,7 +36,7 @@
   padding: 0em;
   margin: 0em;
   text-align: center;
-  font-weight: normal;
+  font-weight: @normal;
   font-style: normal;
   flex: 1 0 auto;
   cursor: @iconCursor;
index e2b8615..33f4fa3 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -70,6 +70,7 @@ $.fn.search = function(parameters) {
 
         initialize: function() {
           module.verbose('Initializing module');
+          module.get.settings();
           module.determine.searchFields();
           module.bind.events();
           module.set.type();
@@ -143,8 +144,17 @@ $.fn.search = function(parameters) {
 
         event: {
           input: function() {
-            clearTimeout(module.timer);
-            module.timer = setTimeout(module.query, settings.searchDelay);
+            if(settings.searchDelay) {
+              clearTimeout(module.timer);
+              module.timer = setTimeout(function() {
+                if(module.is.focused()) {
+                  module.query();
+                }
+              }, settings.searchDelay);
+            }
+            else {
+              module.query();
+            }
           },
           focus: function() {
             module.set.focus();
@@ -327,7 +337,7 @@ $.fn.search = function(parameters) {
               apiSettings = {
                 debug             : settings.debug,
                 on                : false,
-                cache             : true,
+                cache             : settings.cache,
                 action            : 'search',
                 urlData           : {
                   query : searchTerm
@@ -393,6 +403,12 @@ $.fn.search = function(parameters) {
         },
 
         get: {
+          settings: function() {
+            if($.isPlainObject(parameters) && parameters.searchFullText) {
+              settings.fullTextSearch = parameters.searchFullText;
+              module.error(settings.error.oldSearchSyntax, element);
+            }
+          },
           inputEvent: function() {
             var
               prompt = $prompt[0],
@@ -536,8 +552,14 @@ $.fn.search = function(parameters) {
             ;
             module.set.loading();
             module.save.results(results);
-            module.debug('Returned local search results', results);
-
+            module.debug('Returned full local search results', results);
+            if(settings.maxResults > 0) {
+              module.debug('Using specified max results', results);
+              results = results.slice(0, settings.maxResults);
+            }
+            if(settings.type == 'category') {
+              results = module.create.categoryResults(results);
+            }
             searchHTML = module.generateResults({
               results: results
             });
@@ -565,6 +587,7 @@ $.fn.search = function(parameters) {
           object: function(searchTerm, source, searchFields) {
             var
               results      = [],
+              exactResults = [],
               fuzzyResults = [],
               searchExp    = searchTerm.toString().replace(regExp.escape, '\\$&'),
               matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),
@@ -573,9 +596,10 @@ $.fn.search = function(parameters) {
               addResult = function(array, result) {
                 var
                   notResult      = ($.inArray(result, results) == -1),
-                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)
+                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1),
+                  notExactResults = ($.inArray(result, exactResults) == -1)
                 ;
-                if(notResult && notFuzzyResult) {
+                if(notResult && notFuzzyResult && notExactResults) {
                   array.push(result);
                 }
               }
@@ -596,7 +620,6 @@ $.fn.search = function(parameters) {
               module.error(error.source);
               return [];
             }
-
             // iterate through search fields looking for matches
             $.each(searchFields, function(index, field) {
               $.each(source, function(label, content) {
@@ -608,17 +631,30 @@ $.fn.search = function(parameters) {
                     // content starts with value (first in results)
                     addResult(results, content);
                   }
-                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {
+                  else if(settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, content[field]) ) {
+                    // content fuzzy matches (last in results)
+                    addResult(exactResults, content);
+                  }
+                  else if(settings.fullTextSearch == true && module.fuzzySearch(searchTerm, content[field]) ) {
                     // content fuzzy matches (last in results)
                     addResult(fuzzyResults, content);
                   }
                 }
               });
             });
-            return $.merge(results, fuzzyResults);
+            $.merge(exactResults, fuzzyResults)
+            $.merge(results, exactResults);
+            return results;
           }
         },
-
+        exactSearch: function (query, term) {
+          query = query.toLowerCase();
+          term  = term.toLowerCase();
+          if(term.indexOf(query) > -1) {
+             return true;
+          }
+          return false;
+        },
         fuzzySearch: function(query, term) {
           var
             termLength  = term.length,
@@ -730,6 +766,27 @@ $.fn.search = function(parameters) {
         },
 
         create: {
+          categoryResults: function(results) {
+            var
+              categoryResults = {}
+            ;
+            $.each(results, function(index, result) {
+              if(!result.category) {
+                return;
+              }
+              if(categoryResults[result.category] === undefined) {
+                module.verbose('Creating new category of results', result.category);
+                categoryResults[result.category] = {
+                  name    : result.category,
+                  results : [result]
+                }
+              }
+              else {
+                categoryResults[result.category].results.push(result);
+              }
+            });
+            return categoryResults;
+          },
           id: function(resultIndex, categoryIndex) {
             var
               resultID      = (resultIndex + 1), // not zero indexed
@@ -767,7 +824,10 @@ $.fn.search = function(parameters) {
               $selectedResult = (categoryIndex !== undefined)
                 ? $results
                     .children().eq(categoryIndex)
-                      .children(selector.result).eq(resultIndex)
+                      .children(selector.results)
+                        .first()
+                        .children(selector.result)
+                          .eq(resultIndex)
                 : $results
                     .children(selector.result).eq(resultIndex)
             ;
@@ -1188,8 +1248,8 @@ $.fn.search.settings = {
   // field to display in standard results template
   displayField   : '',
 
-  // whether to include fuzzy results in local search
-  searchFullText : true,
+  // search anywhere in value (set to 'exact' to require exact matches
+  fullTextSearch : 'exact',
 
   // whether to add events to prompt automatically
   automatic      : true,
@@ -1200,7 +1260,7 @@ $.fn.search.settings = {
   // delay before searching
   searchDelay    : 200,
 
-  // maximum results returned from local
+  // maximum results returned from search
   maxResults     : 7,
 
   // whether to store lookups in local cache
@@ -1236,14 +1296,15 @@ $.fn.search.settings = {
   },
 
   error : {
-    source      : 'Cannot search. No source used, and Semantic API module was not included',
-    noResults   : 'Your search returned no results',
-    logging     : 'Error in debug logging, exiting.',
-    noEndpoint  : 'No search endpoint was specified',
-    noTemplate  : 'A valid template name was not specified.',
-    serverError : 'There was an issue querying the server.',
-    maxResults  : 'Results must be an array to use maxResults setting',
-    method      : 'The method you called is not defined.'
+    source          : 'Cannot search. No source used, and Semantic API module was not included',
+    noResults       : 'Your search returned no results',
+    logging         : 'Error in debug logging, exiting.',
+    noEndpoint      : 'No search endpoint was specified',
+    noTemplate      : 'A valid template name was not specified.',
+    oldSearchSyntax : 'searchFullText setting has been renamed fullTextSearch for consistency, please adjust your settings.',
+    serverError     : 'There was an issue querying the server.',
+    maxResults      : 'Results must be an array to use maxResults setting',
+    method          : 'The method you called is not defined.'
   },
 
   metadata: {
@@ -1345,6 +1406,7 @@ $.fn.search.settings = {
             }
 
             // each item inside category
+            html += '<div class="results">';
             $.each(category.results, function(index, result) {
               if(result[fields.url]) {
                 html  += '<a class="result" href="' + result[fields.url] + '">';
@@ -1374,6 +1436,7 @@ $.fn.search.settings = {
               ;
               html += '</a>';
             });
+            html += '</div>';
             html  += ''
               + '</div>'
             ;
old mode 100644 (file)
new mode 100755 (executable)
index 4d28567..fc34dcf
@@ -34,7 +34,7 @@
 
   text-shadow: none;
   font-style: normal;
-  font-weight: normal;
+  font-weight: @normal;
 
   line-height: @promptLineHeight;
   padding: @promptPadding;
@@ -72,6 +72,8 @@
   left: 0%;
   transform-origin: center top;
   white-space: normal;
+  text-align: left;
+  text-transform: none;
 
   background: @resultsBackground;
 
   color: @resultActiveDescriptionColor;
 }
 
+/*--------------------
+        Disabled
+----------------------*/
+
+/* Disabled */
+.ui.disabled.search {
+  cursor: default;
+  pointer-events: none;
+  opacity: @disabledOpacity;
+}
+
+
 /*******************************
            Types
 *******************************/
   width: @categoryResultsWidth;
 }
 
+.ui.category.search .results.animating,
+.ui.category.search .results.visible {
+  display: table;
+}
+
 /* Category */
 .ui.category.search > .results .category {
+  display: table-row;
   background: @categoryBackground;
   box-shadow: @categoryBoxShadow;
-  border-bottom: @categoryDivider;
   transition: @categoryTransition;
 }
 
   border-radius: 0em 0em @resultsBorderRadius 0em;
 }
 
-/* Category Result */
-.ui.category.search > .results .category .result {
-  background: @categoryResultBackground;
-  margin-left: @categoryNameWidth;
-  border-left: @categoryResultLeftBorder;
-  border-bottom: @categoryResultDivider;
-  transition: @categoryResultTransition;
-  padding: @categoryResultPadding;
-}
-.ui.category.search > .results .category:last-child .result:last-child {
-  border-bottom: @categoryResultLastDivider;
-}
-
 /* Category Result Name */
 .ui.category.search > .results .category > .name {
+  display: table-cell;
+  text-overflow: ellipsis;
   width: @categoryNameWidth;
+  white-space: @categoryNameWhitespace;
   background: @categoryNameBackground;
   font-family: @categoryNameFont;
   font-size: @categoryNameFontSize;
-  float: @categoryNameFontSize;
-  float: @categoryNameFloat;
   padding: @categoryNamePadding;
   font-weight: @categoryNameFontWeight;
   color: @categoryNameColor;
+  border-bottom: @categoryDivider;
+}
+
+/* Category Result */
+.ui.category.search > .results .category .results {
+  display: table-cell;
+  background: @categoryResultBackground;
+  border-left: @categoryResultLeftBorder;
+  border-bottom: @categoryDivider;
+}
+.ui.category.search > .results .category .result {
+  border-bottom: @categoryResultDivider;
+  transition: @categoryResultTransition;
+  padding: @categoryResultPadding;
 }
 
 /*******************************
   font-size: @relativeMassive;
 }
 
+/*--------------
+      Mobile
+---------------*/
+
+@media only screen and (max-width: @largestMobileScreen) {
+  .ui.search .results {
+    max-width: @mobileMaxWidth;
+  }
+}
+
 .loadUIOverrides();
index d399046..5ba72ef 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
old mode 100644 (file)
new mode 100755 (executable)
index ba063f8..1dcb3ae 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -89,10 +89,6 @@ $.fn.sidebar = function(parameters) {
 
           transitionEvent = module.get.transitionEvent();
 
-          if(module.is.ios()) {
-            module.set.ios();
-          }
-
           // avoids locking rendering if initialized in onReady
           if(settings.delaySetup) {
             requestAnimationFrame(module.setup.layout);
@@ -569,6 +565,7 @@ $.fn.sidebar = function(parameters) {
         set: {
 
           // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios
+          // (This is no longer necessary in latest iOS)
           ios: function() {
             $html.addClass(className.ios);
           },
old mode 100644 (file)
new mode 100755 (executable)
index 52debc2..489eff0
@@ -239,16 +239,6 @@ body.pushable > .pusher {
        iOS
 ---------------*/
 
-/*
-  iOS incorrectly sizes document when content
-  is presented outside of view with 2Dtranslate
-*/
-html.ios {
-  overflow-x: hidden;
-  -webkit-overflow-scrolling: touch;
-}
-
-
 
 /*******************************
           Variations
old mode 100644 (file)
new mode 100755 (executable)
index 4413e79..436b1c3
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
@@ -286,7 +286,8 @@ $.fn.sticky = function(parameters) {
               context.offset.left += scrollContext.left;
             }
             module.cache = {
-              fits : ( element.height < scrollContext.height ),
+              fits          : ( (element.height + settings.offset) <= scrollContext.height),
+              sameHeight    : (element.height == context.height),
               scrollContext : {
                 height : scrollContext.height
               },
@@ -305,7 +306,7 @@ $.fn.sticky = function(parameters) {
               }
             };
             module.set.containerSize();
-            module.set.size();
+
             module.stick();
             module.debug('Caching element positions', module.cache);
           }
@@ -374,6 +375,11 @@ $.fn.sticky = function(parameters) {
           elementScroll: function(scroll) {
             delete module.elementScroll;
           },
+          minimumSize: function() {
+            $container
+              .css('min-height', '')
+            ;
+          },
           offset: function() {
             $module.css('margin-top', '');
           }
@@ -467,6 +473,7 @@ $.fn.sticky = function(parameters) {
             cachedPosition = scroll || $scroll.scrollTop(),
             cache          = module.cache,
             fits           = cache.fits,
+            sameHeight     = cache.sameHeight,
             element        = cache.element,
             scrollContext  = cache.scrollContext,
             context        = cache.context,
@@ -486,8 +493,7 @@ $.fn.sticky = function(parameters) {
             doesntFit      = !fits,
             elementVisible = (element.height !== 0)
           ;
-
-          if(elementVisible) {
+          if(elementVisible && !sameHeight) {
 
             if( module.is.initialPosition() ) {
               if(scroll.top >= context.bottom) {
@@ -614,6 +620,9 @@ $.fn.sticky = function(parameters) {
 
         fixTop: function() {
           module.debug('Fixing element to top of page');
+          if(settings.setSize) {
+            module.set.size();
+          }
           module.set.minimumSize();
           module.set.offset();
           $module
@@ -632,6 +641,9 @@ $.fn.sticky = function(parameters) {
 
         fixBottom: function() {
           module.debug('Sticking element to bottom of page');
+          if(settings.setSize) {
+            module.set.size();
+          }
           module.set.minimumSize();
           module.set.offset();
           $module
@@ -663,6 +675,7 @@ $.fn.sticky = function(parameters) {
         unfix: function() {
           if( module.is.fixed() ) {
             module.debug('Removing fixed position on element');
+            module.remove.minimumSize();
             module.remove.offset();
             $module
               .removeClass(className.fixed)
@@ -898,7 +911,11 @@ $.fn.sticky.settings = {
   // Offset to adjust scroll when attached to bottom of screen
   bottomOffset   : 0,
 
-  jitter         : 5, // will only set container height if difference between context and container is larger than this number
+  // will only set container height if difference between context and container is larger than this number
+  jitter         : 5,
+
+  // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)
+  setSize        : true,
 
   // Whether to automatically observe changes with Mutation Observers
   observeChanges : false,
old mode 100644 (file)
new mode 100755 (executable)
index 383a8d5..4eedf6c 100644 (file)
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 1dedef9..d6e2349
@@ -10,7 +10,7 @@
 
 ;(function ($, window, document, undefined) {
 
-"use strict";
+'use strict';
 
 window = (typeof window != 'undefined' && window.Math == Math)
   ? window
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index e345c45..5e8f898
@@ -77,9 +77,6 @@
 .ui.statistics:first-child {
   margin-top: 0em;
 }
-.ui.statistics:last-child {
-  margin-bottom: 0em;
-}
 
 
 /*******************************
index aeb092d..ffaf4f8 100644 (file)
@@ -48,7 +48,7 @@
 -------------------*/
 
 .loadFonts() when (@importGoogleFonts) {
-  @import url('@{googleProtocol}fonts.googleapis.com/css?family=@{googleFontRequest}');
+  @import (css) url('@{googleProtocol}fonts.googleapis.com/css?family=@{googleFontRequest}');
 }
 
 /*------------------
diff --git a/semantic/src/themes/default/assets/fonts/brand-icons.eot b/semantic/src/themes/default/assets/fonts/brand-icons.eot
new file mode 100644 (file)
index 0000000..0a1ef3f
Binary files /dev/null and b/semantic/src/themes/default/assets/fonts/brand-icons.eot differ
diff --git a/semantic/src/themes/default/assets/fonts/brand-icons.svg b/semantic/src/themes/default/assets/fonts/brand-icons.svg
new file mode 100644 (file)
index 0000000..4c23753
--- /dev/null
@@ -0,0 +1,1008 @@
+<?xml version="1.0" standalone="no"?> 
+<!--
+Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com
+License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+-->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs>
+  <font id="fontawesome-free" horiz-adv-x="640.4">
+    <font-face font-family="Font Awesome 5 Brands"
+      units-per-em="512" ascent="448"
+      descent="64"
+      font-weight="400"
+      font-style="Regular" />
+    <missing-glyph horiz-adv-x="0" />
+    <glyph glyph-name="500px"
+      unicode="&#xF26E;"
+      horiz-adv-x="448" d=" M103.3 103.7C96.8 117.9 96.4 122 110.7 126.8C136.3 134.8 118.7 117.6 153.9 77.6H154.2V171.5C155.4 221.7 198.2 263.7 251.9000000000001 263.7C305.8 263.7 349.6 220.2 349.6 166.9C349.6 103.5 288.8 53.7 221.1 73.6C210.6 77.8 219 105.3 229.6 102.2C282.6 102.2 319 112.3 319 166.6C319 227.6 241.9 256.2000000000001 202.1 211.2C178.6 184.8 184.5 169.1 184.5 53.6C235.2 22.6 302.8 31.6 344.9 73.7000000000001C369.7 98.5000000000001 383.4 131.7000000000001 383.4 166.7000000000001C383.4 201.9 369.6 234.9000000000001 344.6 260.0000000000001C319.8 284.8000000000001 286.8 298.5000000000001 251.3 298.5000000000001S182.5 284.7000000000001 157.8 260.0000000000001C157.5 259.7000000000001 141.8 243.5000000000001 136.6 236.1000000000001L136.1 235.5000000000001C132.8 230.8000000000001 129.8 226.4000000000001 116 229.4000000000001C109.1 231.1000000000001 101.7 235.2000000000001 101.7 241.2000000000001V428C101.7 433 105.6 438.5 112.2 438.5H353.5C361.8 438.5 361.8 426.9 361.8 423.4C361.8 419.5 361.8 408.3 353.5 408.3H130.3V275.4H130.6C234.8 385.2 413.4000000000001 311.4 413.4000000000001 166.5C413.4000000000001 -11.6 168.6 -53.8 103.3 103.7zM166.6 364.5C166.1 360.3 171.2 340 181.2 343.9C306 391.4 384 303.5 390.6 303.5C395.4000000000001 303.5 413.4000000000001 318.8 404.9000000000001 326.3C311.7000000000001 415.3 170.4 383.3 166.6 364.5zM393 33.3C283 -76.6 94 -27.5 61 137.5C61 149.7 30.6 144.9 32.1 134.2C56.1 -39.2 278.1 -122.7 413.7000000000001 12.9C420.6 20.7 401.1 41.3 393.0000000000001 33.3zM213.6 141.4C213.6 137.4 217.9 134.1 219.1 132.9C222.1 129.9 225.2 128.5 227.6 128.5C231.4 128.5 230.2 128.3 249.9 148C269.5 128.7 269 128.5 272.2 128.5C277.6 128.5 290.7 138.9 282.9 146.7L265.6 164L283.8 182.2C290.1 189 273.7 204 267.6 197.9L249.7 180C231.1 198.8 231.3 199.5 228.2 199.5C223.2 199.5 210.2 187.8 215.8 182.2L234 164C215.9 146.1 213.6 144.8 213.6 141.4z" />
+    <glyph glyph-name="accessible-icon"
+      unicode="&#xF368;"
+      horiz-adv-x="448" d=" M423.9 192.2L411 34.9C407.7 -5.8 347.1 -0.2 350.4 39.8L360.4 162.3L319.3 160C329.4 139.3 335.1 116.1 335.1 91.4999999999999C335.1 50.3 319 12.8 292.8 -15.0000000000001L253.5 24.3C311.3999999999999 87.9999999999999 266.6 191.5 179.5 191.5C153.5999999999999 191.5 130 181.6 112.2999999999999 165.5L73 204.8C95 225.5 123.1 239.9 154.4 245L229.7 330.7L187.1 355.5L135.5 309.5C105.5 282.7 64.9 328 95 354.9L163 415.6C172.8 424.4000000000001 187.1 425.8 198.5 419.2C198.5 419.2 337.8 338.3 338 338.1C354.2 328 358.7 302.1 344.1 285.5L285.7 219L391.8 224.9C410.3 226 425.4 210.5 423.9 192.2zM359 346.2C387.1 346.2 409.9 369 409.9 397.1C409.9 425.2 387.1 448 359 448C330.9 448 308.1 425.2 308.1 397.1C308.1 369 330.9000000000001 346.2 359 346.2zM179.6 -8.5C99 -8.5 52.2 82.1 96.9 147.6L57.2 187.3C36.4 161 24 127.7 24 91.6C24 -39.1 174.7 -109.7999999999999 275.4 -30.9L235.7 8.8C219.7 -2.1 200.4 -8.5 179.6 -8.5z" />
+    <glyph glyph-name="accusoft"
+      unicode="&#xF369;"
+      horiz-adv-x="640" d=" M482.2 75.9C476.5 82.8 250 373 242.3 382.5C228.6 399.7 242.3 399.3 261.5 399.4C271.2 399.5 367.8 400 378 400C402.1 400.1 406.7 399.4 416.4 387.2C418.5 384.5 621.5 141.4 623.5999999999999 138.9C629.0999999999999 132.2 638.8 119.8 630.8 115.5C628.4 114.2 516.1999999999999 67.8 513 66.6C502.9 62.6 495.5 59.8 482.2 75.9M596.9 81.5000000000001S481.9 31.1000000000001 479.4 29.9C463.4 22.6 452.5 33.1 442.7 44.5000000000001L385.6 118.5000000000001C380.2 119.4 325.2 128.1000000000001 320.3 127.8000000000001C317.2 127.6000000000001 310.7 127.0000000000001 305.9 124.9000000000001C301 122.8000000000001 160.7 72.1000000000001 155.7 70.2000000000001C150.6 68.2000000000001 144.3 66.6000000000001 144.6 62.6000000000001C144.8 60.1000000000001 146.6 60.0000000000001 149.2 59.1000000000001C151.9 58.3000000000001 450.1 -8.4999999999999 457.2 -9.9999999999999C472.8 -13.2999999999999 495.7 -20.4999999999999 510.8 -11.6999999999999C512.9 -10.4999999999999 634.6 64.7000000000002 636.6 66.1000000000001C642 70.1000000000001 640.9 72.9000000000002 634.9 74.3000000000001C632.6 74.6000000000001 610.3 79.0000000000001 596.9 81.5000000000001M270.9 262.8000000000002S258.9 261.2000000000002 245.9 247.7000000000002C236.9 238.4000000000001 3.8 8.6000000000001 2.5 6.8000000000001C-4.5 -3.1999999999999 4.1 1e-13 18.2 5.1000000000001C19 5.1000000000001 132.7 41.7000000000002 132.7 41.7000000000002C133.2 42.3000000000002 132.6 41.8000000000002 133.3 42.3000000000002C132.9 47.4000000000002 132.5 68.5000000000002 132.3 70.0000000000002C131.7 75.2000000000002 134.5 76.9000000000002 139.3 78.9000000000002L231.9 112.7000000000002C232.5 113.5000000000002 320.4 194.4000000000002 322.1 196.0000000000002V197.0000000000002L270.9 262.8000000000002" />
+    <glyph glyph-name="adn"
+      unicode="&#xF170;"
+      horiz-adv-x="496" d=" M248 280.5L312.9 181.7H183.1L248 280.5zM496 192C496 55.1 384.9 -56 248 -56S0 55.1 0 192S111.1 440 248 440S496 328.9 496 192zM396.2 109.3L248 332.5L99.8 109.3H130.2L163.8 161H332.4L366 109.3H396.2z" />
+    <glyph glyph-name="adversal"
+      unicode="&#xF36A;"
+      horiz-adv-x="512" d=" M482.1 416H28.7C5.8 416 0 410.1 0 387.1V-3.1C0 -26.4 5.8 -32 28.7 -32H482.1C506.4999999999999 -32 511.9999999999999 -26.8 511.9999999999999 -2.3V385.8C511.9999999999999 410.4 506.6 416 482.1 416zM178.4 227.7C150.9 247.9 106.3 236.4 94.2 204.3C89.9 193.2 84.9 194.8 76.7 196C67 197.5 59.5 199.2 54.2 201.5C25.4 212.9 62.8 256.8 79.1 265.8C120.2 287.2 162.5 288 204.4 270.6C245.3 253.8 238.9 211.4 238.9 142.1C241.6 116.3 234.6 83.8 248.2 53.3C250.1 48.9 248.6 45.4 245.5 42.6C237.1 35.9 206.2 40.4 198.9 49.9999999999999C197 52.1999999999999 197.1 53.6 195 56.1999999999999C191.4 60.0999999999999 187.7 58.3999999999999 183.1 55.1999999999999C125.7 18.8 42.8 33.8 36.1 98.4999999999999C33 127.8 48.5 155.6 75.7 169.5C113.9 189 187.9 181.3 189.7 200.4C190.8 210.5999999999999 187.8 220.5 178.4 227.7zM465.1 5.7C465.1 -9.4 454 -4.2 447.3 -4.2H52.4C45 -4.2 34.2 -9 34.6 6.5C35 20.4 45.1 15.6 51.7 15.6C184 16 316.2 16 448.5 15.6C455.3 15.6 465.1 20 465.1 5.7zM468.9 346.2V55.2C468.9 49.5 468.2 41.3 460.8 41.3C448.4000000000001 41.7 433.3 34.2 424.7 46.9C418.9 55.6 416.9 50.9 412.3 48.1C358.9000000000001 18.4 284.2000000000001 41 267.9 133.3C261.8 166.7 267.2 200.4 283.6 233.3C295.4 257.2000000000001 340.5 309.4 419.7 263.8V334.8C419.7 361 419.5999999999999 361 445.7 361C448.8 361 452.3 360.6 455.3999999999999 361C465.4999999999999 361.8 468.9999999999999 356.6 468.9999999999999 346.7000000000001C468.8999999999999 346.5 468.8999999999999 346.4000000000001 468.8999999999999 346.2000000000001zM417.4000000000001 113.9C397.9000000000001 66.3 344.5 70.6 327.4000000000001 108.7C312.3 142 311.9000000000001 176.9 327.8 210.2C344.1 244.3 387.5 245.9 409.3 215C429.9000000000001 186.2 424.2 130.4 417.4000000000001 113.9zM122.6 78.6C115.1 79.9 89.6 81.9 88.9 106.4C88.5 120.3 96.7 129.4 108.7 132.2C133.1 138.1 158 142.1 182.4 146.9C191.3000000000001 148.9 189.8000000000001 142.5 190.2000000000001 137.4C191.6000000000001 104.4 164.1000000000001 78.2 122.6000000000001 78.6z" />
+    <glyph glyph-name="affiliatetheme"
+      unicode="&#xF36B;"
+      horiz-adv-x="512" d=" M159.7 210.6C108.4 139.7 43.1 99.8 14 121.4C-15.2 143.1 2.8 218 54.2 288.9C105.5 359.8 170.8 399.7 199.9 378.1C229 356.5 211 281.5 159.7 210.6zM510.9 267.9C437.1 144.5 319 80.2 246.4 124.3C221.4 139.5 205.1 165.5 197.4 198.1C163.8 133.3 104.6 84.3 33.3 64.9C83.1 5.6 157.4 -32 240.3 -32C390.3 -32 511.9 91.1 511.9 242.9C512 251.4 511.6 259.7 510.9 267.9z" />
+    <glyph glyph-name="algolia"
+      unicode="&#xF36C;"
+      horiz-adv-x="448" d=" M229.3 265.4C180 265.4 140.1 225.5 140.1 176.2C140.1 126.9 180 87 229.3 87S318.5 126.9 318.5 176.2C318.5 225.5 278.5 265.4 229.3 265.4zM292 208.8L233.1 178.2C231.3 177.3 229.3 178.6 229.3 180.5V247C229.3 248.5 230.6 249.7 232 249.6C258.2 248.6 280.9 233.9 293.1 212.5C293.8 211.2 293.3 209.5 292 208.8zM389.1 416H58.9C26.4 416 0 389.6 0 357.1V27C0 -5.6 26.4 -32 58.9 -32H389C421.6 -32 447.9 -5.6 447.9 26.9V357.1C448 389.6 421.6 416 389.1 416zM186.5 331.3C186.5 342.1 195.2 350.8 206 350.8H251.3C262.1 350.8 270.8 342.1 270.8 331.3V315.9C270.8 314.1 269.1 312.9 267.5 313.4C255.2 316.8 242.4 318.5 229.4 318.5C215.9 318.5 202.7 316.7 190 313C188.3 312.5 186.6 313.8 186.6 315.5V331.3zM102.1 294.3L111.3 303.5C118.9 311.1 131.2 311.1 138.8 303.5L146.5 295.8C147.6 294.7000000000001 147.5 292.8 146.2 291.8C140 287.3 134.1 282.4 128.6 276.9C123.2 271.5 118.2 265.6 113.8 259.5C112.8 258.2 110.9 258 109.8 259.2L102.1 266.9C94.5 274.4 94.5 286.7 102.1 294.3zM229.3 49.5C159.3 49.5 102.7 106.2 102.7 176.1S159.4 302.7000000000001 229.3 302.7000000000001C299.3 302.7000000000001 355.9 246.1 355.9 176.1C355.9 106.3 299.2 49.5 229.3 49.5z" />
+    <glyph glyph-name="amazon-pay"
+      unicode="&#xF42C;"
+      horiz-adv-x="611.2" d=" M0 122.8C2.3 127 5.2 127.7 9.7 125.3C20.1 119.7 30.3 113.9 40.9 108.6C81.6 88.2000000000001 124.1 73 168.3 62.3C189.2 57.3 210.2 53.3 231.5 50.5C263 46.3 294.7 44.5 326.5 45.3C343.9 45.7 361.3 47.1 378.6 49.1C435 55.8 489.5 69.9 541.9000000000001 91.9C544.8000000000001 93.1 547.8000000000001 93.9 551.0000000000001 93.1C557.7000000000002 91.3 560.0000000000001 84.1 555.1000000000001 79.2000000000001C552.3000000000002 76.4 548.8000000000002 74.1 545.5000000000001 71.8000000000001C514.8000000000001 50.7 481.3000000000001 35.4000000000001 445.9000000000001 23.9000000000001C421.3000000000001 16.0000000000001 396.3000000000001 10.1000000000001 370.8000000000001 6.3000000000001C353.2000000000001 3.7 335.4000000000001 1.9000000000001 317.6000000000001 1.5000000000001C316.8000000000001 1.5000000000001 315.9000000000001 1.3000000000001 315.1000000000001 1.2H294C293.2 1.3000000000001 292.3 1.5000000000001 291.5 1.5000000000001C287.9 1.7 284.3 1.8000000000001 280.8 1.9C263.9000000000001 2.6 247.1 4.5000000000001 230.4 7.2C203 11.7 176.2 18.6 150 28.1C95.9 47.7 47.4 76.7000000000001 4.4 115.1C2.6 116.7000000000001 1.4 118.9 0 120.8V122.8zM158 383C156.6 382.8 155.1 382.6 153.7 382.4C139.7 380.7 127.1 375.5 115.7 367.3C113.3 365.6 111.1 363.8 108.6 361.9C108.4 362.4 108.2 362.9 108.2 363.3C107.8 366 107.4 368.8 106.9 371.5C106.2 376.1 103.9 378.1 99.3 378.1H87.8C80.9 378.1 79.6 376.8 79.6 369.9V160.6C79.6 159.6 79.6 158.6 79.7 157.6C79.9 154.6 81.7 152.7000000000001 84.6 152.6C91.6 152.5 98.7 152.5 105.7 152.6C108.6 152.6 110.4 154.6 110.7 157.6C110.8 158.6 110.8 159.6 110.8 160.6V233C111.9 232.1 112.5 231.6 113 231.1C130.9 216.2 151.5 211.3 174 215.7C194.4 219.7 208.6 232.2 217.8 250.6C224.8 264.5 227.7 279.3 228.1 294.7C228.6 311.8 226.9000000000001 328.6 220 344.5C211.5 364.1 197.4 377 176.1 381.4C172.9 382.1 169.6 382.4 166.3 382.9C163.5 383 160.8 383 158 383zM110.6 341.1C110.6 342.6 111 343.5 112.3 344.4C126 353.9 141.1 358.9 157.9 357.6C172.8 356.5 185 349.2 191.4 331.7C195.3 321 196.3 309.9 196.3 298.7C196.3 288.3 195.5 278.1 192.3 268.1C185.5 246.8 169.9 238.7 149.7 239.6C135.7 240.2 123.5 245.6 112.3 253.5C111.1 254.4 110.6 255.2 110.6 256.8C110.7 270.9 110.6 284.9 110.6 299C110.6 313 110.7 327 110.6 341.1zM316.3 383C315.3 382.9 314.3 382.7 313.4000000000001 382.6C303.6 382.1 294.0000000000001 380.9 284.5000000000001 378.5C278.4000000000001 376.9 272.5000000000001 374.7 266.6000000000001 372.7C263.0000000000001 371.5 261.2000000000001 368.9 261.3000000000001 365C261.4000000000001 361.7 261.2000000000001 358.4 261.3000000000001 355.1C261.4000000000001 350.3 263.4000000000001 349 268.1000000000001 350.2C275.9000000000001 352.2 283.7000000000001 354.4 291.6000000000001 355.9C303.9000000000001 358.2 316.3000000000001 359.2 328.8000000000001 357.3C335.3000000000001 356.3 341.4000000000001 354.4 345.6000000000001 348.9C349.3000000000001 344.1 350.7000000000001 338.4 350.9000000000001 332.5C351.2000000000001 324.2 351.1000000000001 315.9 351.2000000000001 307.6C351.2000000000001 307.2 351.1000000000001 306.7 351.0000000000001 306.2C350.5000000000001 306.3 350.1000000000002 306.2 349.7000000000001 306.3C339.2000000000001 308.8 328.6000000000001 310.6 317.7000000000001 311.2C306.4000000000001 311.8 295.2000000000001 311.1 284.4000000000001 307.3C271.5000000000001 302.8 261.1000000000001 295 255.0000000000001 282.4C250.3000000000001 272.6 249.6000000000001 262.2 251.1000000000001 251.7C253.1000000000001 237.7 260.1000000000001 226.9 272.5000000000001 220C284.4000000000001 213.4 297.3000000000001 212.6 310.4000000000001 214.6C325.5000000000001 216.9 338.9000000000001 223.3 350.7000000000001 233C351.1 233.4 351.6 233.7 352.3000000000001 234.1C352.9000000000001 230.3 353.4000000000001 226.7 354.1000000000001 223.1C354.7000000000001 220 356.6000000000001 218 359.5000000000001 217.9C364.9000000000001 217.8 370.4000000000001 217.8 375.8000000000001 217.9C378.5000000000001 218 380.3000000000001 219.8 380.6000000000001 222.6C380.7000000000001 223.5 380.7000000000001 224.5 380.7000000000001 225.4V331.4C380.7000000000001 335.7 380.5000000000001 340 379.8000000000002 344.3C377.9000000000002 357.2000000000001 372.4000000000002 367.8 360.8000000000002 374.7000000000001C354.1000000000002 378.7000000000001 346.7000000000001 380.7000000000001 339.0000000000001 381.8C335.4000000000001 382.3 331.8000000000002 382.6 328.2000000000001 383.1C324.3000000000002 383 320.3000000000002 383 316.3000000000002 383zM351.3 255.3C351.3 254 350.9000000000001 253.1 349.8 252.3C338.6 244.2 326.3 238.8 312.4000000000001 237.4C306.7000000000001 236.8 301.0000000000001 237 295.6 239.2C289.3 241.7 285.2000000000001 246.1 283.2000000000001 252.5000000000001S281.2000000000001 265.5 283.1 271.9000000000001C285.6 280.2000000000001 291.5 284.9000000000001 299.5 287.5C307.6 290.1 316 290.5 324.3 289.7000000000001C332.7 289 340.9000000000001 287.4 349.3 286.3C350.9000000000001 286.1 351.4000000000001 285.3 351.4000000000001 283.7000000000001C351.3 278.9 351.4000000000001 274.2000000000001 351.4000000000001 269.4C351.3 264.7000000000001 351.2000000000001 260 351.3 255.3zM611.2 125.9C610.2 130.9 606.4000000000001 132.8 602.1 134.2C595.3000000000001 136.5 588.2 137.5 581.1 138.1C568 139.2 554.9 138.6 541.9 136.2C527.6 133.5 514 128.9 501.9 120.6C500.5 119.6 499.1 118.5 498.2 117.1C497.5 116 497.3 114.3 497.7 113.1C498.1 111.6 499.8 111.2 501.3 111.3C502 111.3 502.8 111.3 503.5 111.4C511.3 112.2 519 113.1 526.8 113.9C538.1999999999999 115 549.6999999999999 115.7 561.0999999999999 114.8C565.8999999999999 114.5 570.8 113.4 575.4999999999999 112.1C580.5999999999999 110.7 582.8999999999999 106.9 583.0999999999999 101.7C583.4999999999999 93.7 581.6999999999999 86 579.5999999999999 78.4C575.4999999999999 63 569.5999999999999 48.1 563.8 33.3C563.4 32.3 563 31.3 562.8 30.3C562.3 27.4 564 25.4999999999999 566.9 26.1999999999999C568.6 26.5999999999999 570.5 27.4999999999999 571.6999999999999 28.6999999999999C576.0999999999999 32.9999999999999 580.5999999999999 37.3 584.4 42.0999999999999C597.1999999999999 58.4999999999999 604.6999999999999 77.3999999999999 609.1 97.6999999999999C609.9 101.3 610.5 104.9999999999999 611.2 108.5999999999999V125.8999999999999zM479.1 249.1C466.2 284.8 453.3 320.6 440.4000000000001 356.3C438.4000000000001 362 436.2000000000001 367.6 434.1 373.2C433 376.1 430.9000000000001 378 427.7000000000001 378C420.1 378.1 412.5000000000001 378.2 404.8000000000001 378.1C402.3000000000001 378.1 401.1000000000001 376.1 401.6000000000001 373.6C402.1000000000001 371.5 402.7000000000001 369.5 403.5000000000001 367.5C423.1000000000001 319 442.8000000000001 270.4 462.6000000000001 222C464.3000000000001 217.9 464.7000000000001 214.4 462.8000000000001 210.2C459.5000000000001 202.9 456.9000000000001 195.2 453.5000000000001 187.9C450.5000000000001 181.4 445.5000000000001 176.5 438.3000000000001 174.6C433.2000000000001 173.2 428.1000000000001 173 422.9000000000001 173.5C420.4000000000001 173.6999999999999 417.9000000000001 174.3 415.4000000000001 174.5C412.0000000000001 174.6999999999999 410.3000000000001 173.1999999999999 410.2000000000001 169.6999999999999C410.1000000000001 166.3999999999999 410.1000000000001 163.0999999999999 410.2000000000001 159.8C410.3000000000002 154.3 412.2000000000001 151.8 417.6000000000001 150.9C423.2000000000001 149.9 428.9000000000001 149 434.5000000000001 148.9C451.6000000000001 148.5 465.2 155.4 474.0000000000001 170.3C477.5000000000001 176.1999999999999 480.7 182.4 483.2 188.6999999999999C506.9 248.5 530.3000000000001 308.3999999999999 553.8000000000001 368.3C554.5000000000001 370.0999999999999 555.1 371.8999999999999 555.4000000000001 373.8C555.8000000000001 376.5999999999999 554.5000000000001 378.2 551.7 378.2C545.1 378.3 538.4000000000001 378.2 531.8000000000001 378.2C528.1 378.2 525.5000000000001 376.5999999999999 524.1 373C523.6 371.5999999999999 523 370.3 522.5 368.8999999999999C510.9 335.5999999999999 499.3 302.3 487.7 268.8999999999999C485.2 261.7 482.6 254.3999999999999 480 246.7C479.6 247.8 479.4 248.3999999999999 479.1 249.1z" />
+    <glyph glyph-name="amazon"
+      unicode="&#xF270;"
+      horiz-adv-x="448" d=" M257.2 285.3C208.5 283.5 87.7 269.8 87.7 167.8C87.7 58.3 226 53.8 271.2 124.6C277.7 114.4 306.6 87.1 316.5 77.8L373.3 133.8S341 159.1 341 186.6V333.7C341 359 316.5 416 228.7 416C140.7 416 94 361 94 311.7L167.5 304.9C183.8 354.4 221.7 354.4 221.7 354.4C262.4 354.5 257.2 324.6 257.2 285.3zM257.2 198.5C257.2 118.5 173 130.5 173 181.3C173 228.5 223.5 238 257.2 239.1V198.5zM393.2 35C385.5 25 323.2 -32 218.7 -32S34.2 39.5 9.7 69C2.9 76.7 10.7 80.3 15.2 77.3C88.5 32.8 203 -40.5 387.7 47C395.2 50.7 401 45 393.2 35zM433 32.8C426.5 17 417 6 411.8 1.8C406.3 -2.7 402.3 -0.9 405.3 5.6S424.6 52.1 418 60.6C411.5 68.9 381 64.9 370 63.8C359.2 62.8 357 61.8 356 64.1C353.7 69.8 377.7 79.6 393.5 81.6C409.2 83.4 434.5 82.4 439.5 75.9C443.2 70.8 439.5 48.8 433 32.8z" />
+    <glyph glyph-name="amilia"
+      unicode="&#xF36D;"
+      horiz-adv-x="448" d=" M240.1 416C178.2 416 108.6 399.1 55.9 360.6C50.8 357.5 46.8 351.4 48.7 341.2C49.8 336.1 53.8 313.8 58.9 301.6C63 291.4 73.1 291.4 79.2 295.5C111.7 317.8 175.7 343.2 231.5 343.2C289.4 343.2 290.4 314.8 290.4 270.1V231.6C203 220.3 78.2 197 46.7 183.8C11.2 167.5 16.3 90.3 16.3 72S31.5 -32 141.2 -32C189 -32 254.9000000000001 -11.3 294.5 10.1V-15.3C294.5 -18.3 296.6 -23.4999999999999 300.6 -24.4C303.7000000000001 -25.4 351.3 -26.4 360.5 -26.4S423 -26.7 427 -25.7C431.1 -24.7 432.1 -19.6 432.1 -16.6V280C432 360.3 374.2000000000001 416 240.1 416zM152.2 88.3C152.2 100.5 149.2 131 170.5 141.2C194.8 154.4 245.6 170.6 290.3 174.7V68C268.9000000000001 54.8 241.6 43.6 211.2 43.6C158.4 43.6 152.3 77.1 152.2 88.3" />
+    <glyph glyph-name="android"
+      unicode="&#xF17B;"
+      horiz-adv-x="448" d=" M89.6 243.5V127.7C89.6 112.3 77.5 100 62.1 100C46.8 100 32 112.4 32 127.7V243.5C32 258.6 46.8 271 62.1 271C77.2 271 89.6 258.6 89.6 243.5zM100.4 86.5C100.4 70.1 113.6 56.9 130 56.9H149.9L150.2 -4.2C150.2 -41.1 205.4 -40.8000000000001 205.4 -4.2V56.9H242.6V-4.2C242.6 -40.9 298.1 -41.0000000000001 298.1 -4.2V56.9H318.3C334.5 56.9 347.7 70.1 347.7 86.5V265.9H100.4V86.5zM348.4 275.6H99.3C99.3 318.4 124.9 355.6 162.9 375L143.8 410.3C141 415.2 148.1 418.3 150.5 414.1L169.9 378.5C204.8 394 244.9 393.2 278.2 378.5L297.5 414C300 418.3 307 415.1 304.2 410.2L285.1 375C322.8 355.6 348.4000000000001 318.4 348.4000000000001 275.6zM177.7 331.1C177.7 336.8 173.1 341.6 167.2 341.6C161.5 341.6 157 336.8 157 331.1S161.6 320.6 167.2 320.6C173.1 320.6 177.7 325.4 177.7 331.1zM291.1 331.1C291.1 336.8 286.5 341.6 280.9000000000001 341.6C275.0000000000001 341.6 270.4000000000001 336.8 270.4000000000001 331.1S275.0000000000001 320.6 280.9000000000001 320.6C286.5000000000001 320.6 291.1 325.4 291.1 331.1zM385.9000000000001 271C370.8 271 358.4000000000001 258.9 358.4000000000001 243.5V127.7C358.4000000000001 112.3 370.8 100 385.9000000000001 100C401.3 100 416.0000000000001 112.4 416.0000000000001 127.7V243.5C416.0000000000001 258.9 401.2000000000001 271 385.9000000000001 271z" />
+    <glyph glyph-name="angellist"
+      unicode="&#xF209;"
+      horiz-adv-x="448" d=" M347.1 232.6C358.8 265.2 392.5 359.5 392.5 389.7C392.5 416.3 376.8 438.6 348.8 438.6C304.2 438.6 264.2000000000001 306.9 251.7 275.5C242 304 196.6 448 156.6 448C125.5 448 110.9 425.1 110.9 396.3C110.9 361 145.1 269.5 157.5 234.3C151.2 236.6 144.4 238.6 137.5 238.6C114.1 238.6 89.2 209.5 89.2 186C89.2 177.1 94.1 164.6 97.2 156.3C60.3 146.3 46.1 121.7 46.1 84.6C46 12.4 114.4 -64 210.6 -64C328.6 -64 402 24.6 402 138.9C402 182 395.1 220.9 347.1 232.6zM311.7 340C315.7 352.3 332.8 404.3 348.8 404.3C357.4000000000001 404.3 359.7 395.4 359.7 388.3C359.7 369.2 321.1 263.7 312.6 240.3L278.6 246.3L311.7 340zM142.3 399.7C142.3 411.6 156.8 445.4 188.6 352.6L223.2 252.3C207.6 253.6 195.5 255.3 187.8 250.9C176.9 279.7000000000001 142.3 370.6 142.3 399.7000000000001zM140 204C169.3 204 207.1 109.4 207.1 96.6C207.1 91.5 202.2 85.2000000000001 196.5 85.2000000000001C175.6 85.2000000000001 119.6 162.1 119.6 182.9C119.7 190.6 132.3 204 140 204zM324.3 17.7C295.2 -14.3 258 -30.9 214.6 -30.9C155.2 -30.9 108.3 1.7 85.7 57.4C68.6 100.8 89.5 125.7 106.3 125.7C117.7 125.7 160.6 65.4 160.6 52.6C160.6 47.7 152.9 44.3 148.9 44.3C132.8000000000001 44.3 126.5 59.8 97.8 95.7C68.1 66 118.3000000000001 8.8 156.1 8.8C182.2 8.8 199.2 32.9999999999999 194.1 50.8C197.8 50.8 202.4 50.4999999999999 205.8 51.4C206.9 24.3 214.9 -8 247.5 -10.3C247.5 -9.4 249.5 -3.2 249.5 -2.9C249.5 14.4999999999999 238.9 29.7 238.9 47.4C238.9 75.7 260.6 103.1 282.6 119.1C290.6 125.1 300.3 128.8 309.7000000000001 132.2C319.4000000000001 135.9 329.7000000000001 140.2 337.1 147.6C336 158.8 331.4000000000001 168.7 320.2000000000001 168.7C292.5000000000001 168.7 199.6000000000001 164.7 199.6000000000001 208.4C199.6000000000001 215.1 199.7000000000001 221.5 217.0000000000001 221.5C249.3000000000001 221.5 331.3000000000001 213.5 355.3000000000001 192.4C373.4000000000001 176.3 379.6000000000001 79.2 324.3000000000001 17.7zM225.7 143.7C235.4 140.6 245.4 139.7 255.4 137.7C248 132.3 241.4 125.7 235.1 118.6C232.3 127.1 228.9 135.4 225.7 143.7z" />
+    <glyph glyph-name="angrycreative"
+      unicode="&#xF36E;"
+      horiz-adv-x="640" d=" M640 209.8L636.8 181.6L602.3 179.3L600.3 161.2L634.8 163.5L631.5999999999999 135.3L597.1999999999999 133.1L594.9 113L629.3 115.2L626.3 89.1L561.5999999999999 84.9999999999999L574.3 198.1999999999999L527 82.8L495.1 80.8L471.3 198.6L501.6 200.6L515.2 121.2000000000001L546.9000000000001 203.6000000000001L640.0000000000001 209.8000000000001zM426.8 76.5L455.1 78.3L468 198.4L439.6 196.5L426.8 76.5zM162 59.9L142.6 95.9L139.1 58.5L110.9 56.8L113.6 85.9C102.6 67.9 81.6 51.6 56.7 50.1C23.9 48.1 -3 71 0.3 108.3C2.9 137.6 27 171.1 67.8 173.7000000000001C105.5 176.1 115.4 150.5000000000001 119.1 144.9L121.9 175.7000000000001L160.8 178.2000000000001C180.9 179.5000000000001 199.5 174.5000000000001 203.3 154.5000000000001L205.9 181.1000000000001L270.7 185.3000000000001L268 157.4000000000001L231.6 155.0000000000001L229.9 137.1000000000001L266.3 139.4000000000002L263.6 111.5000000000002L227.2 109.2000000000002L225.3 89.3000000000002L261.6 91.6000000000002L259.5 70.8000000000002L314.5 188.0000000000002L338.3 189.6000000000002L370.4 79L379.3 164.6L357 163.2000000000001L359.8999999999999 191.1L434.8999999999999 196L431.8999999999999 168L407.5999999999999 166.4L397.8999999999999 74.5L339.8999999999999 70.8L335.5999999999999 86.4L296.2 83.9L288.2 67.6L162 59.9zM117.7 130.1L91.3 128.4C84.6 140.8 76.9 145 65 144.2C46 143 31.7 126.7 30.4 110.9C29 94.9 37.7 78.4 59.1 79.7C71.9 80.5 80.4 88.3 88 98.6L115 100.3L117.7 130.1zM173.8 137.8C175 150.6999999999999 166.2 151.4 147.7 150.1999999999999L145 121.6999999999999C159.2 122.5999999999999 172.5 123.8 173.8000000000001 137.8zM194.9 66.9999999999999L200.7 127C195.7 113.5 186 105.8999999999999 172.8 100.3999999999999L194.9 66.9999999999999zM330.3 111.9999999999999L322.4000000000001 149.8L306.6 110.4999999999999L330.3 111.9999999999999zM160.2 186.5999999999999L155.9 204.0999999999999L116.3 201.4999999999999L108.2 183.2999999999999L76.3 181.1999999999999L133.3 303.0999999999999L157.2 304.6999999999999L187.9 202.6999999999999L197.8 307.3999999999999L224.8 309.1999999999999L262.6 245.5999999999999L269.1 312.1999999999999L297.6 314.0999999999999L293.6 272.8999999999999C301 286.3999999999999 316.5 317.5999999999999 357.2000000000001 320.3999999999999C397.7000000000001 323.1999999999999 409.6 291.0999999999999 410.6 290.0999999999999L413.9000000000001 322.0999999999999L453.2 324.7999999999999C465.9 325.6999999999999 481.0000000000001 324.4999999999999 489.5000000000001 315.0999999999999L485.1000000000001 326.9999999999999L517.3000000000001 329.1999999999999L530.2 285.9999999999999L553.2 331.6999999999999L584.2 333.8999999999999L540.6 255.4999999999999L535.8000000000001 211.1999999999999L507.4000000000001 209.2999999999999L512.2 253.5999999999999L496.4 296.5999999999999C497.4 274.2999999999999 487.2 256.4999999999999 464.4 246.9999999999999L489.6 208.1999999999999L453.2 205.7999999999999L434.0000000000001 242.5999999999999L430.0000000000001 204.2999999999999L401.6000000000001 202.3999999999998L404.9000000000001 233.8999999999999C398.2000000000001 224.5999999999998 385.2000000000001 198.4999999999998 345.3000000000001 195.8999999999998C319.1000000000001 194.1999999999999 299.7000000000001 206.1999999999999 289.9000000000001 235.0999999999999L285.9000000000001 194.7999999999999L260.9000000000001 193.1999999999999L223.3000000000001 256.4999999999999L217.0000000000001 190.2999999999999L160.2000000000001 186.5999999999999zM436.8000000000001 268.7C447.0000000000001 269.3999999999999 454.3000000000001 270.7999999999999 458.4000000000001 272.9999999999999C462.9000000000001 275.3999999999999 465.4000000000001 279.3999999999999 466.0000000000001 285.0999999999999C466.6000000000001 290.3999999999999 465.4000000000001 293.8999999999999 462.6000000000001 295.4999999999999C459.0000000000001 297.5999999999999 452.0000000000001 298.3 439.7000000000002 297.4999999999999L436.8000000000002 268.7zM327.7 234C333.3 228.1 340.4 225.5 349 226.1C353.7 226.4 358.1 227.9 362.3 230.2C367.8 233.2 372.9000000000001 238.2 377.4000000000001 244.5L343.2000000000001 242.2L345.6 266.1L408.7000000000001 270.4L409.9000000000001 282.4L378.7000000000001 280.3C374.6 284 370.9000000000001 286.9 367.6 288.4C363.6 290.1 359.5 291.2000000000001 355.4000000000001 290.9C347.4000000000001 290.4 340.1 287.3 333.4000000000001 281.7000000000001C325.7000000000001 275.3 321.4000000000001 267.2000000000001 320.5000000000001 257.3C319.4000000000001 247.7 321.9000000000001 240 327.7000000000001 234zM126.4 225.8L150.2 227.4L141.9 265L126.4 225.8z" />
+    <glyph glyph-name="angular"
+      unicode="&#xF420;"
+      horiz-adv-x="415.6" d=" M169.7 179.9H245.9L207.8 271.5L169.7 179.9zM207.8 416L0 341.6L31.8 65.9L207.8 -32L383.8 65.9L415.6 341.6L207.8 416zM338 74.2H289.4L263.2 139.6H152.6L126.4 74.2000000000001H77.7L207.8 366.5L338 74.2z" />
+    <glyph glyph-name="app-store-ios"
+      unicode="&#xF370;"
+      horiz-adv-x="448" d=" M400 416H48C21.5 416 0 394.5 0 368V16C0 -10.5 21.5 -32 48 -32H400C426.5 -32 448 -10.5 448 16V368C448 394.5 426.5 416 400 416zM127 63.5C121.5 53.9 109.2 50.7 99.7 56.2C90.1 61.7 86.9 74 92.4 83.5L106.7 108.2C122.8 113.1 136 109.3 146.3 96.8L127 63.5zM265.9 117.4H84C73 117.4 64 126.4 64 137.4S73 157.4 84 157.4H135L200.4 270.6L179.9 306C174.4 315.6 177.7 327.8 187.2 333.3C196.8 338.8 209 335.5 214.5 326L223.4 310.6L232.3000000000001 326C237.8000000000001 335.6 250.1000000000001 338.8 259.6 333.3C269.2000000000001 327.8 272.4000000000001 315.5 266.9000000000001 306L181.1 157.4H243.2C263.4000000000001 157.4 274.7000000000001 133.7 265.9000000000001 117.4zM364 117.4H335L354.6 83.5C360.1 73.9 356.8 61.7 347.3 56.2C337.7 50.7 325.5 54 320 63.5C287.1 120.4 262.5 163.2 246 191.6C229.3 220.6 241.2 249.6 253.1 259.4000000000001C266.2 236.7000000000001 285.8 202.7000000000001 312 157.4H364C375 157.4 384 148.4 384 137.4C384 126.3 375 117.4 364 117.4z" />
+    <glyph glyph-name="app-store"
+      unicode="&#xF36F;"
+      horiz-adv-x="512" d=" M255.9 327.1L265 342.8C270.6 352.6 283.1 355.9 292.9 350.3C302.7 344.7 306 332.2 300.4 322.4L212.9 170.9H276.2C296.7 170.9 308.2 146.8 299.3 130.1H113.8C102.5 130.1 93.4 139.2 93.4 150.5C93.4 161.8 102.5 170.8999999999999 113.8 170.8999999999999H165.8L232.4 286.3L211.6 322.3999999999999C206 332.2 209.3 344.5999999999999 219.1 350.3C228.9 355.8999999999999 241.3 352.5999999999999 247 342.8L255.9 327.0999999999999zM177.2 109.1L157.6 75.1C152 65.3 139.5 62 129.7 67.6C119.9 73.2000000000001 116.6 85.7000000000001 122.2 95.5L136.8 120.7C153.2 125.8 166.6 121.9 177.2 109.1zM346.1 170.8H399.2000000000001C410.5000000000001 170.8 419.6 161.7 419.6 150.4C419.6 139.1 410.5 130.0000000000001 399.2000000000001 130.0000000000001H369.7000000000001L389.6 95.5000000000001C395.2000000000001 85.7000000000001 391.9000000000001 73.3000000000001 382.1 67.6000000000001C372.3 62.0000000000001 359.9000000000001 65.3000000000001 354.2000000000001 75.1000000000001C320.7000000000001 133.2000000000001 295.5000000000001 176.7000000000001 278.8000000000001 205.7000000000001C261.7000000000001 235.2000000000001 273.9000000000001 264.8000000000001 286.0000000000001 274.8000000000001C299.4000000000001 251.8000000000001 319.4000000000001 217.1000000000001 346.1000000000001 170.8000000000001zM256 440C119 440 8 329 8 192S119 -56 256 -56S504 55 504 192S393 440 256 440zM472 192C472 73.3 375.9 -24 256 -24C137.3 -24 40 72.1 40 192C40 310.7 136.1 408 256 408C374.7 408 472 311.9 472 192z" />
+    <glyph glyph-name="apper"
+      unicode="&#xF371;"
+      horiz-adv-x="640" d=" M42.1 208.9C64.3 208.9 71.1 206.1 75.6 194.3H76.4V217.2C76.4 228.5000000000001 71.6 232.6 58.5 232.6C47.2 232.6 44.1 230.1 43.4 219.8H4.8C5.1 233.7 6.3 238.9 10.6 244.2C17.9 253 29.5 256 56.7 256C89.7 256 103.8 251 110.6 237.1C112.6 232.8 114.6 221.5 114.6 213.4V137.1H76.3L77.6 156.2000000000001H76.6C71.3 140.6 63 135.8000000000001 41.1 135.8000000000001C10.8 135.8000000000001 0 145.9000000000001 0 173.1000000000001C0 198.3000000000001 12.3 208.9000000000001 42.1 208.9000000000001zM59.2 160.8C72.3 160.8 76.1 163.8 76.1 174.2C76.1 183.3 71.8 185.8 56.5 185.8C43.4 185.8 38.6 182.8 38.6 173.7C38.5 163.3 42.3 160.8 59.2 160.8zM137 255.7H175.3L173.8 235.1H174.6C183.7 252.2 190.5 256 212.1 256C226.5000000000001 256 236.8 253.0000000000001 243.6 246.9000000000001C253.4000000000001 238.3000000000001 256.4000000000001 226.5000000000001 256.4000000000001 198.8000000000001C256.4000000000001 168.8000000000001 253.4000000000001 155.7000000000001 244.3000000000001 145.9C237.5000000000001 138.6 227.9000000000001 135.8 211.1 135.8C190.7 135.8 181.9 141.3 177.3 157H176.5V86.7H137V255.7zM217.9 195C217.9 222.5 214.6 227.5 197.2 227.5C180.3 227.5 176.5 222.5 176.5 198.8C176.5 170.8 180 165.3 197.7 165.3C214.1 165.3 217.9 170.9 217.9 195zM275.8 255.7H314.1L312.6 235.1H313.4000000000001C322.5000000000001 252.2 329.3 256 350.9000000000001 256C365.3 256 375.6 253 382.4000000000001 246.9C392.2000000000001 238.3 395.2000000000001 226.5 395.2000000000001 198.8C395.2000000000001 168.8 392.2000000000001 155.7 383.1 145.9C376.3 138.6 366.7000000000001 135.8 349.8 135.8C329.4000000000001 135.8 320.6 141.3 316 157H315.2V86.7H275.7V255.7zM356.7000000000001 195C356.7000000000001 222.5 353.4000000000001 227.5 336.0000000000001 227.5C319.1000000000001 227.5 315.3000000000001 222.5 315.3000000000001 198.8C315.3000000000001 170.8 318.8000000000001 165.3 336.5000000000001 165.3C352.9000000000001 165.3 356.7000000000001 170.9 356.7000000000001 195zM410.5000000000001 198.8C410.5000000000001 224.2 413.8000000000001 236.6 422.8000000000001 244.6C431.6000000000001 252.7 445.0000000000001 255.9000000000001 467.9000000000001 255.9000000000001C510.7000000000001 255.9000000000001 523.6000000000001 243.1 523.6000000000001 200.2000000000001V189.1H448.3000000000002C448.0000000000001 187.1 448.0000000000001 185.1 448.0000000000001 184.3C448.0000000000001 167.4 452.5000000000001 162.4 468.1000000000001 162.4C482.0000000000001 162.4 486.0000000000001 165.4 486.0000000000001 176.3H523.5000000000001V174C523.5000000000001 164.2 521.0000000000001 155.1 516.7000000000002 149.3C509.4000000000001 139.5 497.1000000000001 135.7 472.4000000000001 135.7C444.9000000000002 135.7 430.8000000000002 139 421.8000000000002 148C413.3000000000002 156.5 410.5000000000001 169.3 410.5000000000001 198.8zM486.9000000000001 210.4C486.6000000000001 212.2 486.6000000000001 213.7 486.6000000000001 214.2C486.6000000000001 226.5000000000001 483.3000000000001 228.8 467.0000000000001 228.8C452.6000000000001 228.8 449.9000000000001 225.8 448.9000000000001 213.7L448.6 210.4H486.9zM542.5000000000001 255.7H580.8000000000001L579.0000000000001 235.8H579.7000000000002C586.5000000000001 250.7 594.1000000000001 256 609.4000000000002 256C620.2000000000002 256 628.5000000000002 252.7 632.8000000000002 246.7C638.1000000000001 239.4 639.6000000000001 232.3 639.6000000000001 212.7C639.6000000000001 211.2 639.6000000000001 207.7 639.8000000000002 203.4H604.8000000000002C605.1000000000001 205.2 605.1000000000001 206.7 605.1000000000001 207.4C605.1000000000001 222.8 603.1000000000001 226.8 594.8000000000002 226.8C588.5000000000002 226.8 584.0000000000002 223.5 581.7000000000002 217.5C580.7000000000002 214.5 580.7000000000002 213.1999999999999 580.7000000000002 205.1999999999999V137.1999999999999H542.4000000000002V255.7z" />
+    <glyph glyph-name="apple-pay"
+      unicode="&#xF415;"
+      horiz-adv-x="640" d=" M116.9 289.5C109.4 280.6 97.4 273.6 85.4 274.6C83.9 286.6 89.8 299.4 96.7 307.2C104.2 316.3 117.3 322.8 128 323.3C129.2 310.9 124.3 298.6 116.9 289.5M127.8 272.3C110.4 273.3 95.5 262.4 87.3 262.4C78.9 262.4 66.3 271.8 52.5 271.5C34.6 271.2 18 261.1 8.9 245C-9.9 212.7 4 165 22.2 138.7C31.1 125.7 41.7 111.4 55.7 111.9C69 112.4 74.2 120.5 90.2 120.5C106.3 120.5 111 111.9 125 112.1C139.5 112.4 148.6 125.1 157.5 138.1C167.6 152.9 171.8 167.2000000000001 172 168C171.7 168.3 144 178.9 143.7 210.9C143.4 237.7 165.6 250.4 166.6 251.2C154.1 269.8 134.6 271.8 127.8 272.3M228.2 308.5V113.6H258.5V180.2000000000001H300.4C338.7 180.2000000000001 365.5 206.5000000000001 365.5 244.5000000000001S339.1 308.5000000000001 301.4 308.5000000000001H228.2zM258.5 283H293.4C319.7 283 334.7 269 334.7 244.4S319.7 205.6 293.3 205.6H258.5V283zM420.7 112.1C439.7 112.1 457.3 121.7000000000001 465.3 137H465.9V113.6H493.9V210.6C493.9 238.7 471.4 256.9000000000001 436.8 256.9000000000001C404.7 256.9000000000001 380.9000000000001 238.5000000000001 380 213.3000000000001H407.3C409.6 225.3000000000001 420.7 233.2000000000001 435.9000000000001 233.2000000000001C454.4 233.2000000000001 464.8 224.6000000000001 464.8 208.7000000000001V197.9L427 195.6C391.9 193.5 372.9 179.1 372.9 154.1C373 128.9 392.6 112.1 420.7 112.1zM428.9 135.2000000000001C412.8 135.2000000000001 402.5 143.0000000000001 402.5 154.8000000000001C402.5 167.1000000000001 412.4 174.2000000000001 431.3 175.3000000000001L464.9 177.4000000000001V166.4000000000001C464.9 148.2000000000001 449.4000000000001 135.2000000000001 428.9000000000001 135.2000000000001zM531.4 60.6C560.9 60.6 574.8 71.9 586.9 106L640 255H609.2L573.6 139.9H573L537.4 255H505.8L557 113.1L554.2 104.5C549.6 89.9 542.1 84.2 528.7 84.2C526.3000000000001 84.2 521.7 84.5 519.8000000000001 84.7V61.3C521.6 60.9 529.1 60.6 531.4000000000001 60.6z" />
+    <glyph glyph-name="apple"
+      unicode="&#xF179;"
+      horiz-adv-x="376.5" d=" M314.7 179.3C314.5 216 331.1 243.7 364.7 264.1C345.9 291 317.5 305.8 280 308.7000000000001C244.5 311.5 205.7 288 191.5 288C176.5 288 142.1 307.7000000000001 115.1 307.7000000000001C59.3 306.8 0 263.2 0 174.5C0 148.3 4.8 121.2 14.4 93.3C27.2 56.6 73.4 -33.4 121.6 -31.9C146.8 -31.3 164.6 -14 197.4 -14C229.2 -14 245.7 -31.9 273.8 -31.9C322.4000000000001 -31.2 364.2000000000001 50.6 376.4 87.4C311.2 118.1 314.7 177.4 314.7 179.3000000000001zM258.1 343.5C285.4 375.9 282.9 405.4 282.1 416C258 414.6 230.1 399.6 214.2 381.1C196.7 361.3 186.4 336.8 188.6 309.2C214.7 307.2 238.5 320.6 258.1 343.5z" />
+    <glyph glyph-name="asymmetrik"
+      unicode="&#xF372;"
+      horiz-adv-x="576" d=" M517.5 138.8C556.3 178.8 575.6 218.8 576 254.9C576.8 320.4 516.6 373.1 406.6 389.9C277.9 409.6 118.1 374.4 0 307.5C52 334 110.6 355.7 170.7 365.7C245.2 386.2 323.7 391.1 392 380.5C544.5 356.7 588.8 253 490.8 148.8C480.6 138 468.8 127.7 455.8 118.2L304.9 344.6L114.7 59.1C49.1 88.5 38.2 149.3 95.6 210.3C116.4 232.5 143.9 252.2 175.1 268.4C195.1 280.6 214.8 291 237.1 299.1C172 278.8 114.4 246.2 75.5 206.2C47.8 177.6 34.1 149.1 33.8 123.3C33.3 88.1999999999999 57.2 58.1999999999999 102.2 40.3L67.7 -11.4H169.3L191.3 22.9999999999999C213.5 21.9999999999999 236.6 22.9999999999999 259.9 25.6999999999999L237.1 -11.4000000000001H372.6L340 41.7C358.6 47 376.9 53.2 394.5 60.4L440.4 -11.4H542L468.6 99C487.1 111.1 503.6 124.5 517.5 138.8zM329.9 58.3L304.9 98.9L272.2 45.6C248.8 42.1 225.5 40.5 203 41.2L304.9 200.5000000000001L383.6 77.5000000000001C366.4 70.1000000000001 348.3 63.6000000000001 329.9 58.3000000000001z" />
+    <glyph glyph-name="audible"
+      unicode="&#xF373;"
+      horiz-adv-x="640" d=" M640 248.1V194.1L320 -5.9L0 194V248L320 48L640 248.1zM445.5 176.1L492.6 205.5C455.4 261.3 391.9000000000001 298.1 319.9000000000001 298.1C247.9000000000001 298.1 184.4 261.4000000000001 147.3000000000001 205.7H147.6000000000001C150.1000000000001 208 152.7000000000001 210.2 155.3000000000001 212.4C245.0000000000001 286.8 374.7000000000001 270.5 445.5 176.1zM225.4 157.3C242.3 169.2 261.9 176 282.8 176C317.2 176 348 157.6 369.2000000000001 128.4L414.6 156.8C393.7000000000001 186.6999999999999 359 206.3 319.8 206.3C280.9000000000001 206.3 246.4 186.9 225.4 157.3zM103.6 286.9C235.4 391.2 421.8 363.3 521.1 224.8L521.8000000000001 223.8L570.6 254.2C517.1 335.9 424.8 389.9 319.9 389.9C216.4 389.9 123.3 336.4 69.4 254.3C79.3 264.8 92.1 277.8 103.6 286.9zM570.6 254.2z" />
+    <glyph glyph-name="autoprefixer"
+      unicode="&#xF41C;"
+      horiz-adv-x="640" d=" M318.4 432L157.4 -48H234.9L260.3 33.4H379.8L405 -48H482.5L318.4 432zM278.1 90.1L319.3 220.5H320.8L361.7 90.1H278.0999999999999zM640 43L630 74.4L462.1 90L481.5 33.5L640 43zM177.9 90L10 74.3L0 43L158.5 33.6L177.9 90z" />
+    <glyph glyph-name="avianex"
+      unicode="&#xF374;"
+      horiz-adv-x="512" d=" M453.1 416H141.1C102.2 416 64.9 384.8 57.8 346.3L1.2 37.7C-5.9 -0.8 19.9 -32 58.9 -32H370.9C409.8 -32 447.1 -0.8 454.2 37.7L510.9 346.2C517.9 384.8 492.1 416 453.1 416zM394.9000000000001 68.7L362.9000000000001 55.2L247.5000000000001 165.2C232.8000000000001 155.2 218.3000000000001 145.7 205.8 138.1L227.9 73.9L210 61.2L169.4 122.2L117 170.3L132.7 185.7L190.7 154.6C200 165.1 211.5 177.2 223.5 189.5L203 219.1L134.2 318.9L153 347.8L161.9 352.6L265 240.2L269.9 235.7C289.3 254.5 303.7 268.1 303.7 268.1C311.4 274.6 325.2 271 334.4 260.2C343.4 249.7 345 235.5 337.1 228.9C335.3 227.6 321.6 217.5 301.8 203.3L306.3 196L401.2 76.6L394.8999999999999 68.7z" />
+    <glyph glyph-name="aviato"
+      unicode="&#xF421;"
+      horiz-adv-x="640" d=" M107.2 164.5L88.2 206.3H36.1L17.1 164.5H0L62.2 295.9L124.4 164.5H107.2zM62.2 262.6L42.6 220.1H81.8L62.2 262.6zM174.9 160.2L112.7 291.6H129.8L174.9 195.6L220 291.6H237L174.9 160.2zM255.5 164.5V291.6H271V164.5H255.5zM464.6 280.1V164.5H447.3V280.1H406.1V291.6H505.7V280.1