diff --git a/gulpfile.js b/gulpfile.js
index 66841a7..82f93a8 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -81,8 +81,8 @@ gulp.task('css', function() {
'./src/styles/pure.css'
,'./src/styles/grids-responsive.css'
,'./src/styles/prism.css'
- ,'./src/styles/animate.css'
,'./src/styles/styles.css'
+ ,'./src/styles/macgyver.css'
,'./src/scripts/vendor/macgyver/*.css'
])
/*.pipe(sourcemaps.init())*/
diff --git a/src/index.html b/src/index.html
index 01ccd82..aa5b950 100644
--- a/src/index.html
+++ b/src/index.html
@@ -6,6 +6,8 @@
+
+
diff --git a/src/partials/advanced-query.html b/src/partials/advanced-query.html
index 498cc30..2b7550a 100644
--- a/src/partials/advanced-query.html
+++ b/src/partials/advanced-query.html
@@ -12,7 +12,7 @@
Device Query Form
-
+
@@ -22,7 +22,9 @@
-
+
-
+
-
+
diff --git a/src/partials/overview.html b/src/partials/overview.html
index 9e7bc7f..6adcd16 100644
--- a/src/partials/overview.html
+++ b/src/partials/overview.html
@@ -136,7 +136,15 @@
:{{property}}
-
{{ value }}
+
+
+
diff --git a/src/partials/start.html b/src/partials/start.html
index 936adb4..c52705c 100644
--- a/src/partials/start.html
+++ b/src/partials/start.html
@@ -2,7 +2,7 @@
- Zetta Browser
+ Zetta Browser
{{errMsg}}
diff --git a/src/scripts/vendor/macgyver/img/ui-bg_flat_0_aaaaaa_40x100.png b/src/scripts/vendor/macgyver/img/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 5b5dab2..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/img/ui-bg_glass_75_ffffff_1x400.png b/src/scripts/vendor/macgyver/img/ui-bg_glass_75_ffffff_1x400.png
deleted file mode 100644
index e65ca12..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-bg_glass_75_ffffff_1x400.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/img/ui-icons_222222_256x240.png b/src/scripts/vendor/macgyver/img/ui-icons_222222_256x240.png
deleted file mode 100644
index b273ff1..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-icons_222222_256x240.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/img/ui-icons_2e83ff_256x240.png b/src/scripts/vendor/macgyver/img/ui-icons_2e83ff_256x240.png
deleted file mode 100644
index 09d1cdc..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-icons_2e83ff_256x240.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/img/ui-icons_454545_256x240.png b/src/scripts/vendor/macgyver/img/ui-icons_454545_256x240.png
deleted file mode 100644
index 59bd45b..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-icons_454545_256x240.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/img/ui-icons_888888_256x240.png b/src/scripts/vendor/macgyver/img/ui-icons_888888_256x240.png
deleted file mode 100644
index 6d02426..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-icons_888888_256x240.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/img/ui-icons_cd0a0a_256x240.png b/src/scripts/vendor/macgyver/img/ui-icons_cd0a0a_256x240.png
deleted file mode 100644
index 2ab019b..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-icons_cd0a0a_256x240.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/img/ui-icons_f6cf3b_256x240.png b/src/scripts/vendor/macgyver/img/ui-icons_f6cf3b_256x240.png
deleted file mode 100644
index c986935..0000000
Binary files a/src/scripts/vendor/macgyver/img/ui-icons_f6cf3b_256x240.png and /dev/null differ
diff --git a/src/scripts/vendor/macgyver/macgyver.css b/src/scripts/vendor/macgyver/macgyver.css
deleted file mode 100644
index 39ed1d2..0000000
--- a/src/scripts/vendor/macgyver/macgyver.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.mac-date-time.ng-invalid-date,.mac-date-time.ng-invalid-time{background:#ffe2e2;border:solid 1px #dea9a9}.close,.close-modal{width:18px;height:18px;-webkit-border-radius:9px;border-radius:9px;display:block;background:#bdc0c7;position:relative;opacity:1;-ms-filter:none;filter:none;}.close:after,.close-modal:after{content:'';display:block;width:2px;height:10px;background:#fff;position:absolute;top:4px;left:8px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.close:before,.close-modal:before{content:'';display:block;width:2px;height:10px;background:#fff;position:absolute;top:4px;left:8px;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.close:hover,.close-modal:hover{background:#828590}.hide{display:none}.affix{position:fixed;}.affix-bottom{position:absolute}
-.mac-menu{position:absolute;top:0;left:0;min-width:200px;background:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,0.2);box-shadow:0 3px 6px rgba(0,0,0,0.2);border:1px solid #d1d3d8;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-height:325px;overflow-y:auto;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);visibility:hidden;-webkit-transition:opacity 0.1s ease-out, visibility 0.1s ease-out;-moz-transition:opacity 0.1s ease-out, visibility 0.1s ease-out;-o-transition:opacity 0.1s ease-out, visibility 0.1s ease-out;-ms-transition:opacity 0.1s ease-out, visibility 0.1s ease-out;transition:opacity 0.1s ease-out, visibility 0.1s ease-out;}.mac-menu.visible{visibility:visible;opacity:1;-ms-filter:none;filter:none}.mac-menu ul{list-style:none;margin:0;padding-left:0;}.mac-menu ul .mac-menu-item{display:block;padding:5px 10px;-webkit-transition:background 0.1s ease-out;-moz-transition:background 0.1s ease-out;-o-transition:background 0.1s ease-out;-ms-transition:background 0.1s ease-out;transition:background 0.1s ease-out;color:#000;cursor:pointer;}.mac-menu ul .mac-menu-item.active{background:#e0e8fb;-webkit-transition:0;-moz-transition:0;-o-transition:0;-ms-transition:0;transition:0;text-decoration:none}
-.mac-modal-overlay{background-color:rgba(245,246,250,0.75);position:fixed;top:0;left:0;right:0;bottom:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);overflow-y:auto;z-index:3;}.mac-modal-overlay.visible,.mac-modal-overlay.visible-add-active{opacity:1;-ms-filter:none;filter:none;}.mac-modal-overlay.visible .mac-modal,.mac-modal-overlay.visible-add-active .mac-modal{top:50%}.mac-modal-overlay.visible-add,.mac-modal-overlay.visible-remove{-webkit-transition:0.2s ease-out all;-moz-transition:0.2s ease-out all;-o-transition:0.2s ease-out all;-ms-transition:0.2s ease-out all;transition:0.2s ease-out all}.mac-modal-overlay.visible-remove-active{opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0)}.mac-modal-overlay .mac-modal{position:absolute;top:0;left:50%;width:500px;margin-left:-251px;background:#fff;border:1px solid #d1d3d8;-webkit-box-shadow:0 4px 10px rgba(0,0,0,0.15);box-shadow:0 4px 10px rgba(0,0,0,0.15);-webkit-transition:all 0.2s ease-out;-moz-transition:all 0.2s ease-out;-o-transition:all 0.2s ease-out;-ms-transition:all 0.2s ease-out;transition:all 0.2s ease-out;-webkit-border-radius:3px;border-radius:3px;-webkit-transform:rotateX(0) rotateY(0);-moz-transform:rotateX(0) rotateY(0);-o-transform:rotateX(0) rotateY(0);-ms-transform:rotateX(0) rotateY(0);transform:rotateX(0) rotateY(0);}.mac-modal-overlay .mac-modal:after{content:"";display:block;position:absolute;bottom:-20px;height:20px;width:1px}.mac-modal-overlay .mac-modal .mac-close-modal{position:absolute;top:-5px;right:-5px;width:18px;height:18px;-webkit-border-radius:9px;border-radius:9px;display:block;background:#bdc0c7;cursor:pointer;}.mac-modal-overlay .mac-modal .mac-close-modal:before,.mac-modal-overlay .mac-modal .mac-close-modal:after{content:'';display:block;width:2px;height:10px;background:#fff;position:absolute;top:4px;left:8px}.mac-modal-overlay .mac-modal .mac-close-modal:before{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-o-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.mac-modal-overlay .mac-modal .mac-close-modal:after{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mac-modal-overlay .mac-modal .mac-modal-content{padding:20px}
-.mac-popover{position:absolute;top:0;left:0;background:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,0.2);box-shadow:0 3px 6px rgba(0,0,0,0.2);border:1px solid #d1d3d8;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transform:scale3d(0,0,0);-moz-transform:scale3d(0,0,0);-o-transform:scale3d(0,0,0);-ms-transform:scale3d(0,0,0);transform:scale3d(0,0,0);opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-webkit-transform-origin:left top;-moz-transform-origin:left top;-o-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top;visibility:hidden;-webkit-border-radius:3px;border-radius:3px;z-index:2;}.mac-popover.fixed{position:fixed}.mac-popover.visible{opacity:1;-ms-filter:none;filter:none;visibility:visible;-webkit-transform:scale3d(1,1,1);-moz-transform:scale3d(1,1,1);-o-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:-webkit-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;-moz-transition:-moz-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;-o-transition:-o-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;-ms-transition:-ms-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;transition:transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out}.mac-popover.ng-leave{-webkit-transition:-webkit-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;-moz-transition:-moz-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;-o-transition:-o-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;-ms-transition:-ms-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;transition:transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;}.mac-popover.ng-leave.ng-leave-active{opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-webkit-transform:scale3d(0,0,0);-moz-transform:scale3d(0,0,0);-o-transform:scale3d(0,0,0);-ms-transform:scale3d(0,0,0);transform:scale3d(0,0,0);visibility:hidden}.mac-popover .tip{display:block;width:0;height:0;border-bottom:9px solid #d1d3d8;border-left:9px solid rgba(255,255,255,0);border-right:9px solid rgba(255,255,255,0);position:absolute;top:-9px;left:15px;}.mac-popover .tip:after{content:'';display:block;width:0;height:0;border-bottom:8px solid #fff;border-left:8px solid rgba(255,255,255,0);border-right:8px solid rgba(255,255,255,0);position:absolute;top:1px;left:-8px}.mac-popover.above{-webkit-transform-origin:left bottom;-moz-transform-origin:left bottom;-o-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;}.mac-popover.above .tip{top:auto;bottom:-9px;border-top:9px solid #d1d3d8;border-bottom:0;}.mac-popover.above .tip:after{top:auto;bottom:1px;border-top:8px solid #fff;border-bottom:0}.mac-popover.above.right{-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-o-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;}.mac-popover.above.right .tip{left:auto;right:15px}.mac-popover.below.right{-webkit-transform-origin:right top;-moz-transform-origin:right top;-o-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top;}.mac-popover.below.right .tip{left:auto;right:15px}.mac-popover.middle .tip{top:50%;margin-top:-9px;border-top:9px solid rgba(255,255,255,0);border-bottom:9px solid rgba(255,255,255,0);}.mac-popover.middle .tip:after{border-top:8px solid rgba(255,255,255,0);border-bottom:8px solid rgba(255,255,255,0);top:-8px}.mac-popover.middle.right{-webkit-transform-origin:left center;-moz-transform-origin:left center;-o-transform-origin:left center;-ms-transform-origin:left center;transform-origin:left center;}.mac-popover.middle.right .tip{border-left:0;border-right:9px solid #d1d3d8;left:-9px;}.mac-popover.middle.right .tip:after{border-left:0;border-right:8px solid #fff;left:1px}.mac-popover.middle.left{-webkit-transform-origin:right center;-moz-transform-origin:right center;-o-transform-origin:right center;-ms-transform-origin:right center;transform-origin:right center;}.mac-popover.middle.left .tip{border-right:0;border-left:9px solid #d1d3d8;right:-9px;left:auto;}.mac-popover.middle.left .tip:after{border-right:0;border-left:8px solid #fff;right:1px;left:auto}.mac-popover .popover-header{background:#eaecf1;display:none;}.mac-popover .popover-header .title{font-size:13px;font-weight:bold;line-height:33px;padding-left:10px;padding-top:1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;margin-right:40px}.mac-popover .popover-header .close{float:right;margin:7px 10px 0 0;display:none}.mac-popover .popover-content{max-height:415px;overflow-y:auto;overflow-x:hidden;position:relative}.mac-popover .popover-footer{display:none}.mac-popover.footer{padding-bottom:42px;}.mac-popover.footer .popover-footer{display:block;position:absolute;bottom:0;left:0;right:0;padding:10px;-webkit-box-shadow:0 -1px 5px rgba(0,0,0,0.15);box-shadow:0 -1px 5px rgba(0,0,0,0.15)}.mac-popover.header .popover-header{display:block}.mac-popover.header.below .tip:after{border-bottom:8px solid #eaecf1}.mac-popover.header.middle.left .tip:after{border-left:8px solid #eaecf1}.mac-popover.header.middle.right .tip:after{border-right:8px solid #eaecf1}
-.mac-spinner,.mac-cspinner{display:inline-block;position:relative;}.mac-spinner.block,.mac-cspinner.block{display:block;margin:0 auto}@-moz-keyframes fade{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:.02;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";filter:alpha(opacity=2)}}@-webkit-keyframes fade{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:.02;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";filter:alpha(opacity=2)}}@-o-keyframes fade{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:.02;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";filter:alpha(opacity=2)}}@keyframes fade{0%{opacity:1;-ms-filter:none;filter:none}100%{opacity:.02;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";filter:alpha(opacity=2)}}
-.mac-tag-autocomplete{position:relative;display:inline-block;border:1px solid #aaa;background:#fff;margin:0;padding:0;}.mac-tag-autocomplete .mac-tag-list{margin:0;padding-left:0;}.mac-tag-autocomplete .mac-tag-list .mac-tag{padding:3px 20px 3px 5px;margin:3px;position:relative;display:inline-block;list-style:none;font-size:13px;line-height:13px;-webkit-border-radius:3px;border-radius:3px;}.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-label{background:-webkit-linear-gradient(top, #eaf0ff, #dee8ff);background:-moz-linear-gradient(top, #eaf0ff, #dee8ff);background:-o-linear-gradient(top, #eaf0ff, #dee8ff);background:-ms-linear-gradient(top, #eaf0ff, #dee8ff);background:linear-gradient(to bottom, #eaf0ff, #dee8ff);border:1px solid #bfc9e1;text-shadow:none;color:#000;font-weight:normal;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05)}.mac-tag-autocomplete .mac-tag-list .mac-tag .mac-tag-close{position:absolute;right:6px;color:#9da6b7;cursor:pointer}.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag{white-space:nowrap;padding:0;}.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag .text-input{color:#666;background:transparent;padding:5px;margin:0;border:none !important;-webkit-box-shadow:none;box-shadow:none}.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag.fullwidth{width:100%;}.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag.fullwidth .text-input{width:90%}
-.mac-tooltip{background:rgba(47,48,53,0.75);text-align:center;color:#fff;padding:5px 7px;position:absolute;top:100px;left:100px;font-size:12px;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);visibility:hidden;-webkit-transition:opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;-moz-transition:opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;-o-transition:opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;-ms-transition:opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;transition:opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;margin-top:5px;-webkit-border-radius:3px;border-radius:3px;z-index:7;}.mac-tooltip.visible{visibility:visible;opacity:1;-ms-filter:none;filter:none;margin-top:0}.mac-tooltip:after{content:'';display:block;width:0;height:0;position:absolute}.mac-tooltip.top:after{border-top:6px solid rgba(47,48,53,0.75);border-left:6px solid transparent;border-right:6px solid transparent;bottom:-6px;left:50%;margin-left:-6px}.mac-tooltip.bottom:after{border-bottom:6px solid rgba(47,48,53,0.75);border-left:6px solid transparent;border-right:6px solid transparent;top:-6px;left:50%;margin-left:-6px}.mac-tooltip.left:after{border-left:6px solid rgba(47,48,53,0.75);border-top:6px solid transparent;border-bottom:6px solid transparent;right:-6px;top:50%;margin-top:-6px}.mac-tooltip.right:after{border-right:6px solid rgba(47,48,53,0.75);border-top:6px solid transparent;border-bottom:6px solid transparent;left:-6px;top:50%;margin-top:-6px}
\ No newline at end of file
diff --git a/src/scripts/vendor/macgyver/macgyver.js b/src/scripts/vendor/macgyver/macgyver.js
deleted file mode 100644
index 7057fc2..0000000
--- a/src/scripts/vendor/macgyver/macgyver.js
+++ /dev/null
@@ -1,3568 +0,0 @@
-/**
- * MacGyver v0.4.0
- * @link http://angular-macgyver.github.io/MacGyver
- * @license MIT
- */
-(function(window, angular, undefined) {
-var augmentWidthOrHeight, core_pnum, cssExpand, extendjQuery, getStyles, getWidthOrHeight, getWindow, isScope, isWindow, jqLiteExtend, modules, rnumnonpx;
-
-modules = ["Mac.Util"];
-
-try {
- angular.module("ngAnimate");
- modules.push("ngAnimate");
-} catch (_error) {}
-
-angular.module("Mac", modules);
-
-
-/*
-@chalk overview
-@name angular.element
-
-@description
-Angular comes with jqLite, a tiny, API-compatible subset of jQuery. However, its
-functionality is very limited and MacGyver extends jqLite to make sure MacGyver
-components work properly.
-
-Real jQuery will continue to take precedence over jqLite and all functions MacGyver extends.
-
-MacGyver adds the following methods:
-- [height()](http://api.jquery.com/height/) - Does not support set
-- [width()](http://api.jquery.com/width/) - Does not support set
-- [outerHeight()](http://api.jquery.com/outerHeight/) - Does not support set
-- [outerWidth()](http://api.jquery.com/outerWidth/) - Does not support set
-- [offset()](http://api.jquery.com/offset/)
-- [scrollTop()](http://api.jquery.com/scrollTop/)
- */
-
-cssExpand = ["Top", "Right", "Bottom", "Left"];
-
-core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
-
-rnumnonpx = new RegExp("^(" + core_pnum + ")(?!px)[a-z%]+$", "i");
-
-getStyles = function(element) {
- return window.getComputedStyle(element, null);
-};
-
-isWindow = function(obj) {
- return obj && obj.document && obj.location && obj.alert && obj.setInterval;
-};
-
-isScope = function(obj) {
- return obj && (obj.$evalAsync != null) && (obj.$watch != null);
-};
-
-getWindow = function(element) {
- if (isWindow(element)) {
- return element;
- } else {
- return element.nodeType === 9 && element.defaultView;
- }
-};
-
-augmentWidthOrHeight = function(element, name, extra, isBorderBox, styles) {
- var i, start, val, _i;
- if (extra === (isBorderBox ? "border" : "content")) {
- return 0;
- }
- val = 0;
- start = name === "Width" ? 1 : 0;
- for (i = _i = start; _i <= 3; i = _i += 2) {
- if (extra === "margin") {
- val += parseFloat(styles["" + extra + cssExpand[i]]);
- }
- if (isBorderBox) {
- if (extra === "content") {
- val -= parseFloat(styles["padding" + cssExpand[i]]);
- }
- if (extra !== "margin") {
- val -= parseFloat(styles["border" + cssExpand[i]]);
- }
- } else {
- val += parseFloat(styles["padding" + cssExpand[i]]);
- if (extra !== "padding") {
- val += parseFloat(styles["border" + cssExpand + "Width"]);
- }
- }
- }
- return val;
-};
-
-getWidthOrHeight = function(type, prefix, element) {
- return function(margin) {
- var defaultExtra, doc, extra, isBorderBox, name, styles, value, valueIsBorderBox;
- defaultExtra = (function() {
- switch (prefix) {
- case "inner":
- return "padding";
- case "outer":
- return "";
- default:
- return "content";
- }
- })();
- extra = defaultExtra || (margin === true ? "margin" : "border");
- if (isWindow(element)) {
- return element.document.documentElement["client" + type];
- }
- if (element.nodeType === 9) {
- doc = element.documentElement;
- return Math.max(element.body["scroll" + type], doc["scroll" + type], element.body["offset" + type], doc["offset" + type], doc["client" + type]);
- }
- valueIsBorderBox = true;
- styles = getStyles(element);
- name = type.toLowerCase();
- value = type === "Height" ? element.offsetHeight : element.offsetWidth;
- isBorderBox = element.style.boxSizing === "border-box";
- if (value <= 0 || value === null) {
- value = styles[name];
- if (value < 0 || value === null) {
- value = element.style[name];
- }
- if (rnumnonpx.test(value)) {
- return value;
- }
- valueIsBorderBox = isBorderBox;
- value = parseFloat(value) || 0;
- }
- return value + augmentWidthOrHeight(element, type, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles);
- };
-};
-
-jqLiteExtend = {
- height: function(element) {
- return getWidthOrHeight("Height", "", element)();
- },
- width: function(element) {
- return getWidthOrHeight("Width", "", element)();
- },
- outerHeight: function(element, margin) {
- return getWidthOrHeight("Height", "outer", element)(margin);
- },
- outerWidth: function(element, margin) {
- return getWidthOrHeight("Width", "outer", element)(margin);
- },
- offset: function(element) {
- var box, doc, docElem, win;
- box = {
- top: 0,
- left: 0
- };
- doc = element && element.ownerDocument;
- if (!doc) {
- return;
- }
- docElem = doc.documentElement;
- if (element.getBoundingClientRect != null) {
- box = element.getBoundingClientRect();
- }
- win = getWindow(doc);
- return {
- top: box.top + win.pageYOffset - docElem.clientTop,
- left: box.left + win.pageXOffset - docElem.clientLeft
- };
- },
- scrollTop: function(element, value) {
- var win;
- win = getWindow(element);
- if (value == null) {
- if (win) {
- return win["pageYOffset"];
- } else {
- return element["scrollTop"];
- }
- }
- if (win) {
- return win.scrollTo(window.pageYOffset, value);
- } else {
- return element["scrollTop"] = value;
- }
- },
- scrollLeft: function(element, value) {
- var win;
- win = getWindow(element);
- if (value == null) {
- if (win) {
- return win["pageXOffset"];
- } else {
- return element["scrollLeft"];
- }
- }
- if (win) {
- return win.scrollTo(window.pageXOffset, value);
- } else {
- return element["scrollLeft"] = value;
- }
- }
-};
-
-extendjQuery = function() {
- var jqLite;
- if ((window.jQuery != null) && (angular.element.prototype.offset != null)) {
- return;
- }
- jqLite = angular.element;
- return angular.forEach(jqLiteExtend, function(fn, name) {
- return jqLite.prototype[name] = function(arg1, arg2) {
- if (this.length) {
- return fn(this[0], arg1, arg2);
- }
- };
- });
-};
-
-extendjQuery();
-
-
-/*
-@chalk overview
-@name mac-affix
-
-@description
-Fix the component at a certain position
-
-@param {Expr} mac-affix-disabled To unpin element (default false)
-@param {Expr} mac-affix-top Top offset (default 0)
-@param {Expr} mac-affix-bottom Bottom offset (default 0)
-@param {Event} refresh-mac-affix To update the position of affixed element
- */
-angular.module("Mac").directive("macAffix", [
- "$document", "$window", function($document, $window) {
- return {
- link: function($scope, element, attrs) {
- var defaults, disabled, getPinnedOffset, lastAffix, offset, pinnedOffset, scrollEvent, setOffset, unpin, windowEl;
- defaults = {
- top: 0,
- bottom: 0,
- disabled: false,
- classes: "affix affix-top affix-bottom"
- };
- offset = {
- top: defaults.top,
- bottom: defaults.bottom
- };
- disabled = defaults.disabled;
- lastAffix = null;
- unpin = null;
- pinnedOffset = null;
- windowEl = angular.element($window);
-
- /*
- @name setOffset
- @description
- Update top or bottom offset. This function will make sure the value is
- an integer and use default value
- @param {String} key Offset key
- @param {String|Integer} value Update value
- @param {Bool} useDefault
- */
- setOffset = function(key, value, useDefault) {
- if (useDefault == null) {
- useDefault = false;
- }
- if (useDefault && (value == null)) {
- value = defaults[key];
- }
- if ((value != null) && !isNaN(+value)) {
- return offset[key] = +value;
- }
- };
- if (attrs.macAffixTop != null) {
- setOffset("top", $scope.$eval(attrs.macAffixTop), true);
- $scope.$watch(attrs.macAffixTop, function(value) {
- return setOffset("top", value);
- });
- }
- if (attrs.macAffixBottom != null) {
- setOffset("bottom", $scope.$eval(attrs.macAffixBottom), true);
- $scope.$watch(attrs.macAffixBottom, function(value) {
- return setOffset("bottom", value);
- });
- }
- getPinnedOffset = function() {
- var scrollHeight;
- if (pinnedOffset != null) {
- return pinnedOffset;
- }
- element.removeClass(defaults.classes).addClass("affix");
- scrollHeight = $document.height();
- pinnedOffset = scrollHeight - element.outerHeight() - offset.bottom;
- return pinnedOffset;
- };
- scrollEvent = function() {
- var affix, curOffset, elementHeight, position, scrollHeight, scrollTop;
- if (element[0].offsetHeight <= 0 && element[0].offsetWidth <= 0) {
- return;
- }
- position = element.offset();
- scrollTop = windowEl.scrollTop();
- scrollHeight = $document.height();
- elementHeight = element.outerHeight();
- affix = (unpin != null) && scrollTop <= unpin ? false : (offset.bottom != null) && scrollTop > scrollHeight - elementHeight - offset.bottom ? "bottom" : (offset.top != null) && scrollTop <= offset.top ? "top" : false;
- if (affix === lastAffix) {
- return;
- }
- if (unpin) {
- element.css("top", "");
- }
- lastAffix = affix;
- unpin = affix === "bottom" ? getPinnedOffset() : null;
- element.removeClass(defaults.classes).addClass("affix" + (affix ? "-" + affix : ""));
- if (affix === "bottom") {
- curOffset = element.offset();
- element.css("top", unpin - curOffset.top);
- }
- return true;
- };
- if (attrs.macAffixDisabled != null) {
- disabled = $scope.$eval(attrs.macAffixDisabled) || defaults.disabled;
- $scope.$watch(attrs.macAffixDisabled, function(value) {
- var action;
- if ((value == null) || value === disabled) {
- return;
- }
- disabled = value;
- action = value ? "unbind" : "bind";
- windowEl[action]("scroll", scrollEvent);
- if (disabled) {
- lastAffix = null;
- unpin = null;
- return element.css("top", "").removeClass(defaults.classes);
- } else {
- return scrollEvent();
- }
- });
- }
- if (!disabled) {
- windowEl.bind("scroll", scrollEvent);
- }
- $scope.$on("refresh-mac-affix", function() {
- var position;
- return position = element.offset();
- });
- return $scope.$on("$destroy", function() {
- return windowEl.unbind("scroll", scrollEvent);
- });
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Autocomplete
-
-@description
-A directive for providing suggestions while typing into the field
-
-Autocomplete allows for custom html templating in the dropdown and some properties are exposed on the local scope on each template instance, including:
-
-| Variable | Type | Details |
-|-----------|---------|-----------------------------------------------------------------------------|
-| `$index` | Number | iterator offset of the repeated element (0..length-1) |
-| `$first` | Boolean | true if the repeated element is first in the iterator. |
-| `$middle` | Boolean | true if the repeated element is between the first and last in the iterator. |
-| `$last` | Boolean | true if the repeated element is last in the iterator. |
-| `$even` | Boolean | true if the iterator position `$index` is even (otherwise false). |
-| `$odd` | Boolean | true if the iterator position `$index` is odd (otherwise false). |
-| `item` | Object | item object with `value` and `label` if label-key is set |
-
-To use custom templating
-
-```
-
- {{item.label}}
-
-```
-
-Template default to `{{item.label}}` if not defined
-
-@dependencies
-- mac-menu
-
-@param {String} ng-model Assignable angular expression to data-bind to (required)
-@param {String} mac-placeholder Placeholder text
-@param {String} mac-autocomplete-url Url to fetch autocomplete dropdown list data. URL may include GET params e.g. "/users?nocache=1"
-@param {Expression} mac-autocomplete-source Data to use.
-Source support multiple types:
-- Array: An array can be used for local data and there are two supported formats:
- - An array of strings: ["Item1", "Item2"]
- - An array of objects with mac-autocomplete-label key: [{name:"Item1"}, {name:"Item2"}]
-- String: Using a string as the source is the same as passing the variable into mac-autocomplete-url
-- Function: A callback when querying for data. The callback receive two arguments:
- - {String} Value currently in the text input
- - {Function} A response callback which expects a single argument, data to user. The data will be
- populated on the menu and the menu will adjust accordingly
-@param {Boolean} mac-autocomplete-disabled Boolean value if autocomplete should be disabled
-@param {Function} mac-autocomplete-on-select Function called when user select on an item
-- `selected` - {Object} The item selected
-@param {Function} mac-autocomplete-on-success function called on success ajax request
-- `data` - {Object} Data returned from the request
-- `status` - {Number} The status code of the response
-- `header` - {Object} Header of the response
-@param {Function} mac-autocomplete-on-error Function called on ajax request error
-- `data` - {Object} Data returned from the request
-- `status` - {Number} The status code of the response
-- `header` - {Object} Header of the response
-@param {String} mac-autocomplete-label The label to display to the users (default "name")
-@param {String} mac-autocomplete-query The query parameter on GET command (default "q")
-@param {Integer} mac-autocomplete-delay Delay on fetching autocomplete data after keyup (default 800)
-
-@param {Expr} mac-menu-class Classes for mac-menu used by mac-autocomplete. For more info, check [ngClass](http://docs.angularjs.org/api/ng/directive/ngClass)
- */
-angular.module("Mac").directive("macAutocomplete", [
- "$animate", "$compile", "$filter", "$http", "$parse", "$rootScope", "$timeout", "keys", function($animate, $compile, $filter, $http, $parse, $rootScope, $timeout, keys) {
- return {
- restrict: "EA",
- template: "",
- transclude: true,
- replace: true,
- require: "ngModel",
- link: function($scope, element, attrs, ctrl, transclude) {
- var $menuScope, appendMenu, autocompleteUrl, blurHandler, currentAutocomplete, delay, disabled, getData, inside, isMenuAppended, labelGetter, labelKey, menuEl, onError, onSelect, onSuccess, positionMenu, preventParser, queryData, queryKey, reset, source, timeoutId, updateItem;
- labelKey = attrs.macAutocompleteLabel || "name";
- labelGetter = $parse(labelKey);
- queryKey = attrs.macAutocompleteQuery || "q";
- delay = +(attrs.macAutocompleteDelay || 800);
- inside = attrs.macAutocompleteInside != null;
- autocompleteUrl = $parse(attrs.macAutocompleteUrl);
- onSelect = $parse(attrs.macAutocompleteOnSelect);
- onSuccess = $parse(attrs.macAutocompleteOnSuccess);
- onError = $parse(attrs.macAutocompleteOnError);
- source = $parse(attrs.macAutocompleteSource);
- disabled = $parse(attrs.macAutocompleteDisabled);
- currentAutocomplete = [];
- timeoutId = null;
- isMenuAppended = false;
- preventParser = false;
- $menuScope = $scope.$new();
- $menuScope.items = [];
- $menuScope.index = 0;
- $menuScope.select = function(index) {
- var label, selected;
- selected = currentAutocomplete[index];
- onSelect($scope, {
- selected: selected
- });
- label = $menuScope.items[index].label || "";
- preventParser = true;
- if (attrs.ngModel != null) {
- ctrl.$setViewValue(label);
- ctrl.$render();
- }
- return reset();
- };
- menuEl = angular.element(document.createElement("mac-menu"));
- menuEl.attr({
- "ng-class": attrs.macMenuClass || null,
- "mac-menu-items": "items",
- "mac-menu-select": "select(index)",
- "mac-menu-index": "index"
- });
- transclude($menuScope, function(clone) {
- return menuEl.append(clone);
- });
- $compile(menuEl)($menuScope);
- ctrl.$parsers.push(function(value) {
- if (value && !disabled($scope) && !preventParser) {
- if (timeoutId != null) {
- $timeout.cancel(timeoutId);
- }
- if (delay > 0) {
- timeoutId = $timeout(function() {
- return queryData(value);
- }, delay);
- } else {
- queryData(value);
- }
- } else {
- reset();
- }
- preventParser = false;
- return value;
- });
-
- /*
- @name blurHandler
- @description
- Create a blur handler function to make sure directive is unbinding
- the correct handler
- */
- blurHandler = function() {
- return $scope.$apply(function() {
- return reset();
- });
- };
-
- /*
- @function
- @name appendMenu
- @description
- Adding menu to DOM
- @param {Function} callback Callback after enter animation completes
- */
- appendMenu = function(callback) {
- if (!isMenuAppended) {
- element.bind("blur", blurHandler);
- menuEl.on('mousedown', function(event) {
- return event.preventDefault();
- });
- }
- isMenuAppended = true;
- if (inside) {
- return $animate.enter(menuEl, void 0, element, callback);
- } else {
- return $animate.enter(menuEl, angular.element(document.body), void 0, callback);
- }
- };
-
- /*
- @function
- @name reset
- @description
- Resetting autocomplete
- */
- reset = function() {
- $animate.leave(menuEl, function() {
- $menuScope.index = 0;
- $menuScope.items.length = 0;
- menuEl[0].style.top = "";
- menuEl[0].style.left = "";
- isMenuAppended = false;
- return element.unbind("blur", blurHandler);
- });
- };
-
- /*
- @function
- @name positionMenu
- @description
- Calculate the style include position and width for menu
- */
- positionMenu = function() {
- var offset, parentElement, parentStyles;
- parentElement = inside ? element[0] : document.body;
- parentStyles = window.getComputedStyle(parentElement);
- offset = element.offset();
- offset.left -= parseInt(parentStyles.marginLeft);
- offset.top += element.outerHeight() - parseInt(parentStyles.marginTop);
- offset.minWidth = element.outerWidth();
- return angular.forEach(offset, function(value, key) {
- if (!isNaN(+value) && angular.isNumber(+value)) {
- value = "" + value + "px";
- }
- return menuEl[0].style[key] = value;
- });
- };
-
- /*
- @function
- @name updateItem
- @description
- Update list of items getting passed to menu
- @param {Array} data Array of data
- */
- updateItem = function(data) {
- if ((data != null ? data.length : void 0) > 0) {
- currentAutocomplete = data;
- $menuScope.items = data.map(function(item) {
- if (angular.isObject(item)) {
- if (item.value == null) {
- item.value = labelGetter(item) || "";
- }
- if (item.label == null) {
- item.label = labelGetter(item) || "";
- }
- return item;
- } else {
- return {
- label: item,
- value: item
- };
- }
- });
- return appendMenu(positionMenu);
- } else {
- return reset();
- }
- };
-
- /*
- @function
- @name getData
- @description
- GET request to fetch data from server, update menu items and position
- menu
- @param {String} url URL to fetch data from
- */
- getData = function(url, query) {
- var options;
- options = {
- method: "GET",
- url: url,
- params: {}
- };
- options.params[queryKey] = query;
- return $http(options).success(function(data, status, headers, config) {
- var dataList;
- dataList = onSuccess($scope, {
- data: data,
- status: status,
- headers: headers
- });
- if (dataList == null) {
- dataList = data.data;
- }
- return updateItem(dataList);
- }).error(function(data, status, headers, config) {
- return onError($scope, {
- data: data,
- status: status,
- headers: headers
- });
- });
- };
-
- /*
- @function
- @name queryData
- @description
- Used for querying data
- @param {String} query Search query
- */
- queryData = function(query) {
- var sourceData, url;
- url = autocompleteUrl($scope);
- if (url) {
- return getData(url, query);
- } else {
- sourceData = source($scope);
- if (angular.isArray(sourceData)) {
- return updateItem($filter("filter")(sourceData, query));
- } else if (angular.isString(sourceData)) {
- return getData(sourceData, query);
- } else if (angular.isFunction(sourceData)) {
- return sourceData(query, updateItem);
- }
- }
- };
- element.bind("keydown", function(event) {
- if ($menuScope.items.length === 0) {
- return true;
- }
- switch (event.which) {
- case keys.DOWN:
- $scope.$apply(function() {
- $menuScope.index = ($menuScope.index + 1) % $menuScope.items.length;
- return event.preventDefault();
- });
- break;
- case keys.UP:
- $scope.$apply(function() {
- $menuScope.index = ($menuScope.index ? $menuScope.index : $menuScope.items.length) - 1;
- return event.preventDefault();
- });
- break;
- case keys.ENTER:
- $scope.$apply(function() {
- $menuScope.select($menuScope.index);
- return event.preventDefault();
- });
- break;
- case keys.ESCAPE:
- $scope.$apply(function() {
- reset();
- return event.preventDefault();
- });
- }
- return true;
- });
- $scope.$on("$destroy", function() {
- $menuScope.$destroy();
- return reset();
- });
-
- /*
- @event
- @name reset-mac-autocomplete
- @description
- Event to reset autocomplete
- */
- return $scope.$on("reset-mac-autocomplete", function() {
- return reset();
- });
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Canvas Spinner
-
-@description
-A directive for generating a canvas spinner
-This spinner requires much less CPU/GPU resources than CSS spinner
-
-@param {Integer} mac-cspinner-width Width of each bar (default 2)
-@param {Integer} mac-cspinner-height Height of each bar (default 5)
-@param {Integer} mac-cpsinner-border Border radius (default 1)
-@param {Integer} mac-cspinner-size Dimension of the whole spinner excluding padding (default 20)
-@param {Integer} mac-cspinner-radius Center radius (default 4)
-@param {Integer} mac-cspinner-bars Number of bars (default 10)
-@param {Integer} mac-cspinner-padding Padding around the spinner (default 3)
-@param {Integer} mac-cspinner-speed ms delay between each animation
-@param {String} mac-cspinner-color Color of each bar
-@param {Expr} mac-cspinner-spin Start or stop spinner
- */
-angular.module("Mac").directive("macCspinner", [
- "$timeout", "util", function($timeout, util) {
- return {
- restrict: "E",
- replace: "true",
- template: "",
- compile: function(element, attrs) {
- var canvas, canvasRadius, ctx, defaults, height, i, left, maxCanvasRadius, maxRadius, opacity, opts, prop, radius, ratio, rgb, rotation, showCtx, size, templateCanvas, top, width, _i, _j, _len, _ref, _ref1;
- if (!window.HTMLCanvasElement) {
- return console.log("Browser does not support canvas");
- }
- defaults = {
- width: 2,
- height: 5,
- border: 1,
- radius: 4,
- bars: 10,
- padding: 3,
- speed: 100,
- color: "#2f3035",
- size: 20
- };
- opts = util.extendAttributes("macCspinner", defaults, attrs);
- if (attrs.macCspinnerSize != null) {
- size = !isNaN(+attrs.macCspinnerSize) && +attrs.macCspinnerSize;
- if (size) {
- ratio = size / defaults.size;
- _ref = ["width", "height", "border", "radius"];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- prop = _ref[_i];
- opts[prop] = defaults[prop] * ratio;
- }
- }
- }
- width = opts.width;
- height = opts.height;
- radius = opts.border;
- maxRadius = opts.radius + height;
- maxCanvasRadius = Math.max(width, maxRadius);
- canvasRadius = Math.ceil(Math.max(maxCanvasRadius, util.pyth(maxRadius, width / 2)));
- canvasRadius += opts.padding;
- templateCanvas = angular.element("");
- ctx = templateCanvas[0].getContext("2d");
- rotation = util.radian(360 / opts.bars);
- ctx.translate(canvasRadius, canvasRadius);
- top = -maxRadius;
- left = -width / 2;
- rgb = util.hex2rgb(opts.color);
- for (i = _j = 0, _ref1 = opts.bars - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
- opacity = 1 - (0.8 / opts.bars) * i;
- ctx.fillStyle = "rgba(" + rgb.r + ", " + rgb.g + ", " + rgb.b + ", " + opacity + ")";
- ctx.beginPath();
- ctx.moveTo(left + radius, top);
- ctx.arc(left + width - radius, top + radius, radius, util.radian(-90), util.radian(0), false);
- ctx.arc(left + width - radius, top + height - radius, radius, util.radian(0), util.radian(90), false);
- ctx.arc(left + radius, top + height - radius, radius, util.radian(90), util.radian(180), false);
- ctx.arc(left + radius, top + radius, radius, util.radian(-180), util.radian(-90), false);
- ctx.closePath();
- ctx.fill();
- ctx.rotate(rotation);
- }
- canvas = angular.element("");
- canvas.attr({
- width: canvasRadius * 2,
- height: canvasRadius * 2
- });
- showCtx = canvas[0].getContext("2d");
- showCtx.translate(canvasRadius, canvasRadius);
- element.append(canvas);
- return function($scope, element, attrs) {
- var intervalID, spinning, start, stop;
- intervalID = null;
- spinning = false;
- stop = function() {
- spinning = false;
- if (intervalID != null) {
- return $timeout.cancel(intervalID);
- }
- };
- start = function() {
- var drawFn, rotate;
- if (spinning) {
- return;
- }
- spinning = true;
- rotate = util.radian(360 / opts.bars);
- return (drawFn = function(startCycle) {
- if (startCycle == null) {
- startCycle = false;
- }
- showCtx.clearRect(-canvasRadius, -canvasRadius, canvasRadius * 2, canvasRadius * 2);
- showCtx.rotate(rotate);
- showCtx.drawImage(templateCanvas[0], -canvasRadius, -canvasRadius);
- if (spinning) {
- if (!startCycle && element[0].offsetHeight <= 0 && element[0].offsetWidth <= 0) {
- return stop();
- }
- return intervalID = $timeout(drawFn, opts.speed, false);
- }
- })(true);
- };
- if (attrs.macCspinnerSpin != null) {
- $scope.$watch(attrs.macCspinnerSpin, function(value) {
- if (value && !spinning) {
- return start();
- } else {
- return stop();
- }
- });
- } else {
- start();
- }
- if (attrs.ngShow) {
- $scope.$watch(attrs.ngShow, function(value) {
- if (value) {
- return start();
- } else {
- return stop();
- }
- });
- } else if (attrs.ngHide) {
- $scope.$watch(attrs.ngHide, function(value) {
- if (value) {
- return stop();
- } else {
- return start();
- }
- });
- }
- return $scope.$on("$destroy", function() {
- return stop();
- });
- };
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Keydown events
-
-@description
-A directive for handling certain keys on keydown event
-Currently MacGyver supports enter, escape, space, left, up, right and down
-
-@param {Expression} mac-keydown-enter Expression to evaluate on hitting enter
-@param {Expression} mac-keydown-escape Expression to evaluate on hitting escape
-@param {Expression} mac-keydown-space Expression to evaluate on hitting space
-@param {Expression} mac-keydown-left Expression to evaluate on hitting left
-@param {Expression} mac-keydown-up Expression to evaluate on hitting up
-@param {Expression} mac-keydown-right Expression to evaluate on hitting right
-@param {Expression} mac-keydown-down Expression to evaluate on hitting down
- */
-var key, _fn, _i, _len, _ref;
-
-_ref = ["Enter", "Escape", "Space", "Left", "Up", "Right", "Down"];
-_fn = function(key) {
- return angular.module("Mac").directive("macKeydown" + key, [
- "$parse", "keys", function($parse, keys) {
- return {
- restrict: "A",
- link: function(scope, element, attributes) {
- var expression;
- expression = $parse(attributes["macKeydown" + key]);
- return element.bind("keydown", function($event) {
- if ($event.which === keys["" + (key.toUpperCase())]) {
- $event.preventDefault();
- return scope.$apply(function() {
- return expression(scope, {
- $event: $event
- });
- });
- }
- });
- }
- };
- }
- ]);
-};
-for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- key = _ref[_i];
- _fn(key);
-}
-
-
-/*
-@chalk overview
-@name Pause Typing
-
-@description
-macPauseTyping directive allow user to specify custom behavior after user stops typing for more than (delay) milliseconds
-
-@param {Expression} mac-pause-typing Expression to evaluate after delay
-@param {Expression} mac-pause-typing-delay Delay value to evaluate expression (default 800)
- */
-angular.module("Mac").directive("macPauseTyping", [
- "$parse", "$timeout", function($parse, $timeout) {
- return {
- restrict: "A",
- link: function(scope, element, attributes) {
- var delay, expression, keyupTimer;
- expression = $parse(attributes["macPauseTyping"]);
- delay = scope.$eval(attributes["macPauseTypingDelay"]) || 800;
- keyupTimer = null;
- return element.bind("keyup", function($event) {
- if (keyupTimer != null) {
- $timeout.cancel(keyupTimer);
- }
- return keyupTimer = $timeout(function() {
- return expression(scope, {
- $event: $event
- });
- }, delay);
- });
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Windows Resize
-
-@description
-Binding custom behavior on window resize event
-
-@param {Expression} mac-window-resize Expression to evaluate on window resize
- */
-angular.module("Mac").directive("macWindowResize", [
- "$parse", "$window", function($parse, $window) {
- return {
- restrict: "A",
- link: function($scope, element, attrs) {
- var handler;
- handler = function($event) {
- var callbackFn;
- callbackFn = $parse(attrs.macWindowResize);
- $scope.$apply(function() {
- return callbackFn($scope, {
- $event: $event
- });
- });
- return true;
- };
- angular.element($window).bind("resize", handler);
- return $scope.$on("destroy", function() {
- return angular.element($window).unbind("resize", handler);
- });
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name mac-focus-on-event
-
-@description
-Scroll window to the element and focus on the element
-
-@param {String} mac-focus-on-event Event to focus on element
-@param {Boolean} mac-focus-on-event-scroll Scroll to element location or not
- */
-angular.module("Mac").directive("macFocusOnEvent", [
- "$timeout", function($timeout) {
- return function(scope, element, attributes) {
- return scope.$on(attributes.macFocusOnEvent, function() {
- return $timeout(function() {
- var x, y;
- element.focus();
- if (attributes.macFocusOnEventScroll) {
- x = window.scrollX;
- y = window.scrollY;
- return window.scrollTo(x, y);
- }
- }, 0, false);
- });
- };
- }
-]);
-
-angular.module("Mac").factory("keys", function() {
- return {
- CANCEL: 3,
- HELP: 6,
- BACKSPACE: 8,
- TAB: 9,
- CLEAR: 12,
- ENTER: 13,
- RETURN: 13,
- SHIFT: 16,
- CONTROL: 17,
- ALT: 18,
- PAUSE: 19,
- CAPS_LOCK: 20,
- ESCAPE: 27,
- SPACE: 32,
- PAGE_UP: 33,
- PAGE_DOWN: 34,
- END: 35,
- HOME: 36,
- LEFT: 37,
- UP: 38,
- RIGHT: 39,
- DOWN: 40,
- PRINT_SCREEN: 44,
- INSERT: 45,
- DELETE: 46,
- ZERO: 48,
- ONE: 49,
- TWO: 50,
- THREE: 51,
- FOUR: 52,
- FIVE: 53,
- SIX: 54,
- SEVEN: 55,
- EIGHT: 56,
- NINE: 57,
- SEMICOLON: 59,
- EQUALS: 61,
- COMMAND: 91,
- A: 65,
- B: 66,
- C: 67,
- D: 68,
- E: 69,
- F: 70,
- G: 71,
- H: 72,
- I: 73,
- J: 74,
- K: 75,
- L: 76,
- M: 77,
- N: 78,
- O: 79,
- P: 80,
- Q: 81,
- R: 82,
- S: 83,
- T: 84,
- U: 85,
- V: 86,
- W: 87,
- X: 88,
- Y: 89,
- Z: 90,
- CONTEXT_MENU: 93,
- NUMPAD0: 96,
- NUMPAD1: 97,
- NUMPAD2: 98,
- NUMPAD3: 99,
- NUMPAD4: 100,
- NUMPAD5: 101,
- NUMPAD6: 102,
- NUMPAD7: 103,
- NUMPAD8: 104,
- NUMPAD9: 105,
- MULTIPLY: 106,
- ADD: 107,
- SEPARATOR: 108,
- SUBTRACT: 109,
- DECIMAL: 110,
- DIVIDE: 111,
- F1: 112,
- F2: 113,
- F3: 114,
- F4: 115,
- F5: 116,
- F6: 117,
- F7: 118,
- F8: 119,
- F9: 120,
- F10: 121,
- F11: 122,
- F12: 123,
- F13: 124,
- F14: 125,
- F15: 126,
- F16: 127,
- F17: 128,
- F18: 129,
- F19: 130,
- F20: 131,
- F21: 132,
- F22: 133,
- F23: 134,
- F24: 135,
- NUM_LOCK: 144,
- SCROLL_LOCK: 145,
- COMMA: 188,
- PERIOD: 190,
- SLASH: 191,
- BACK_QUOTE: 192,
- OPEN_BRACKET: 219,
- BACK_SLASH: 220,
- CLOSE_BRACKET: 221,
- QUOTE: 222,
- META: 224
- };
-});
-
-
-/*
-@chalk overview
-@name Menu
-
-@description
-A directive for creating a menu with multiple items
-
-Menu allows for custom html templating for each item.
-
-Since macMenu is using ngRepeat, some ngRepeat properties along with `item` are exposed on the local scope of each template instance, including:
-
-| Variable | Type | Details |
-|-----------|---------|-----------------------------------------------------------------------------|
-| `$index` | Number | iterator offset of the repeated element (0..length-1) |
-| `$first` | Boolean | true if the repeated element is first in the iterator. |
-| `$middle` | Boolean | true if the repeated element is between the first and last in the iterator. |
-| `$last` | Boolean | true if the repeated element is last in the iterator. |
-| `$even` | Boolean | true if the iterator position `$index` is even (otherwise false). |
-| `$odd` | Boolean | true if the iterator position `$index` is odd (otherwise false). |
-| `item` | Object | item object |
-
-To use custom templating
-```
-
- {{item.label}}
-
-```
-
-Template default to `{{item.label}}` if not defined
-
-@param {Expression} mac-menu-items List of items to display in the menu
- Each item should have a `label` key as display text
-@param {Function} mac-menu-select Callback on select
-- `index` - {Integer} Item index
-@param {Object} mac-menu-style Styles apply to the menu
-@param {Expression} mac-menu-index Index of selected item
- */
-angular.module("Mac").directive("macMenu", [
- function() {
- return {
- restrict: "EA",
- replace: true,
- template: "",
- transclude: true,
- controller: angular.noop,
- scope: {
- items: "=macMenuItems",
- style: "=macMenuStyle",
- select: "&macMenuSelect",
- pIndex: "=macMenuIndex"
- },
- link: function($scope, element, attrs, ctrls) {
- $scope.selectItem = function(index) {
- return $scope.select({
- index: index
- });
- };
- $scope.setIndex = function(index) {
- $scope.index = index;
- if (attrs.macMenuIndex != null) {
- return $scope.pIndex = parseInt(index);
- }
- };
- if (attrs.macMenuIndex != null) {
- $scope.$watch("pIndex", function(value) {
- return $scope.index = parseInt(value);
- });
- }
- return $scope.$watch("items.length", function(value) {
- if (!!value) {
- return attrs.$addClass("visible");
- } else {
- return attrs.$removeClass("visible");
- }
- });
- }
- };
- }
-]).directive("macMenuTransclude", [
- "$compile", function($compile) {
- return {
- link: function($scope, element, attrs, ctrls, transclude) {
- return transclude($scope, function(clone) {
- element.empty();
- if (clone.length === 0) {
- clone = $compile("{{item.label}}")($scope);
- }
- return element.append(clone);
- });
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name mac-modal (element)
-@description
-Element directive to define the modal dialog. Modal content is transcluded into a
-modal template
-
-@param {Boolean} mac-modal-keyboard Allow closing modal with keyboard (default false)
-@param {Boolean} mac-modal-overlay-close Allow closing modal when clicking on overlay (default false)
-@param {Boolean} mac-modal-resize Allow modal to resize on window resize event (default true)
-@param {Integer} mac-modal-topOffset Top offset when the modal is larger than window height (default 20)
-@param {Expr} mac-modal-open Callback when the modal is opened
-@param {Expr} mac-modal-before-show Callback before showing the modal
-@param {Expr} mac-modal-after-show Callback when modal is visible with CSS transitions completed
-@param {Expr} mac-modal-before-hide Callback before hiding the modal
-@param {Expr} mac-modal-after-hide Callback when modal is hidden from the user with CSS transitions completed
-@param {Boolean} mac-modal-position Calculate size and position with JS (default true)
- */
-angular.module("Mac").directive("macModal", [
- "$parse", "modal", "modalViews", "util", function($parse, modal, modalViews, util) {
- return {
- restrict: "E",
- template: modal.modalTemplate,
- replace: true,
- transclude: true,
- link: function($scope, element, attrs, controller, transclude) {
- var callback, key, opts, regId, registerModal, _i, _len, _ref;
- transclude($scope, function(clone) {
- return angular.element(element[0].getElementsByClassName("mac-modal-content-wrapper")).replaceWith(clone);
- });
- opts = util.extendAttributes("macModal", modalViews.defaults, attrs);
- regId = null;
- if (opts.overlayClose) {
- element.on("click", function($event) {
- if (angular.element($event.target).hasClass("mac-modal-overlay")) {
- return $scope.$apply(function() {
- return modal.hide();
- });
- }
- });
- }
- _ref = ["beforeShow", "afterShow", "beforeHide", "afterHide", "open"];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- callback = _ref[_i];
- key = "macModal" + (util.capitalize(callback));
- opts[callback] = $parse(attrs[key]) || angular.noop;
- }
- registerModal = function(id) {
- if ((id != null) && id) {
- regId = id;
- return modal.register(id, element, opts);
- }
- };
- if (attrs.id) {
- registerModal(attrs.id);
- } else {
- attrs.$observe("macModal", function(id) {
- return registerModal(id);
- });
- }
- return $scope.$on("$destroy", function() {
- if (regId) {
- return modal.unregister(regId);
- }
- });
- }
- };
- }
-]).directive("macModal", [
- "$parse", "modal", function($parse, modal) {
- return {
- restrict: "A",
- link: function($scope, element, attrs) {
- if (!attrs.macModal) {
- return;
- }
- element.bind("click", function() {
- return $scope.$apply(function() {
- var data;
- data = $parse(attrs.macModalData)($scope) || {};
- return modal.show(attrs.macModal, {
- data: data,
- scope: $scope
- });
- });
- });
- }
- };
- }
-]).directive("macModalClose", [
- "modal", function(modal) {
- return {
- restrict: "A",
- link: function($scope, element, attrs) {
- return element.bind("click", function() {
- return $scope.$apply(function() {
- return modal.hide();
- });
- });
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Placeholder
-
-@description
-Dynamically fill out the placeholder text of input
-
-@param {String} mac-placeholder Variable that contains the placeholder text
- */
-angular.module("Mac").directive("macPlaceholder", function() {
- return {
- restrict: "A",
- link: function($scope, element, attrs) {
- return $scope.$watch(attrs.macPlaceholder, function(value) {
- return attrs.$set("placeholder", value);
- });
- }
- };
-});
-
-
-/*
-@chalk
-@name mac-popover (attribute)
-@description
-Mac popover trigger directive. Without using mac-popover-child-popover, the last
-popover will be closed automatically
-
-@param {String} mac-popover ID of the popover to show
-@param {Boolean} mac-popover-fixed Determine if the popover is fixed
-@param {Boolean} mac-popover-child-popover If the popover is child of another popover (default false)
-@param {Integer} mac-popover-offset-x Extra x offset (default 0)
-@param {Integer} mac-popover-offset-y Extra y offset (default 0)
-@param {String} mac-popover-trigger Trigger option, click | hover | focus (default click)
-- click: Popover only opens when user click on trigger
-- hover: Popover shows when user hover on trigger
-- focus: Popover shows when focus on input element
-@param {String} mac-popover-exclude CSV of popover id that can't be shown at the same time
- */
-var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-
-angular.module("Mac").directive("macPopover", [
- "$timeout", "popover", "util", "popoverViews", function($timeout, popover, util, popoverViews) {
- return {
- restrict: "A",
- link: function(scope, element, attrs) {
- var clearDelays, closeDelayId, delayId, exclude, excludeList, hide, options, show;
- options = util.extendAttributes("macPopover", popoverViews.defaults, attrs);
- exclude = attrs.macPopoverExclude || "";
- excludeList = exclude ? exclude.split(",") : [];
- delayId = null;
- closeDelayId = null;
- clearDelays = function() {
- if (delayId != null) {
- $timeout.cancel(delayId);
- }
- if (closeDelayId != null) {
- return $timeout.cancel(closeDelayId);
- }
- };
- show = function(id, delay) {
- if (delay == null) {
- delay = 0;
- }
- clearDelays();
- delayId = $timeout(function() {
- var last, _ref;
- last = popover.last();
- if ((last != null) && (!excludeList.length || (_ref = last.id, __indexOf.call(excludeList, _ref) >= 0) || last.id === id)) {
- popover.hide();
- if (element[0] === last.element[0]) {
- return true;
- }
- }
- options.scope = scope;
- return popover.show(id, element, options);
- }, delay);
- return true;
- };
- hide = function(element, delay) {
- if (delay == null) {
- delay = 0;
- }
- clearDelays();
- return closeDelayId = $timeout(function() {
- return popover.hide(element);
- }, delay);
- };
- return attrs.$observe("macPopover", function(id) {
- var hideEvent, showEvent;
- if (!id) {
- return;
- }
- if (options.trigger === "click") {
- return element.bind("click", function() {
- return show(id, 0);
- });
- } else {
- showEvent = options.trigger === "focus" ? "focusin" : "mouseenter";
- hideEvent = options.trigger === "focus" ? "focusout" : "mouseleave";
- element.bind(showEvent, function() {
- return show(id, 400);
- });
- return element.bind(hideEvent, function() {
- return hide(element, 500);
- });
- }
- });
- }
- };
- }
-]).directive("macPopover", [
- "popover", "popoverViews", "util", function(popover, popoverViews, util) {
- return {
- restrict: "E",
- compile: function(element, attrs) {
- var opts;
- if (!attrs.id) {
- throw Error("macPopover: Missing id");
- }
- opts = util.extendAttributes("macPopover", popoverViews.popoverDefaults, attrs);
- angular.extend(opts, {
- template: element.html()
- });
- return function($scope, element, attrs) {
- return attrs.$observe("id", function(value) {
- popover.register(value, opts);
- return element.replaceWith(document.createComment("macPopover: " + attrs.id));
- });
- };
- }
- };
- }
-]).directive("macPopoverFillContent", [
- "$compile", function($compile) {
- return {
- restrict: "A",
- link: function($scope, element, attrs) {
- element.html($scope.macPopoverTemplate);
- return $compile(element.contents())($scope);
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name mac-scroll-spy
-
-@description
-Element to spy scroll event on
-
-@param {Integer} mac-scroll-spy-offset Top offset when calculating scroll position
- */
-angular.module("Mac").directive("macScrollSpy", [
- "$window", "scrollSpy", "scrollSpyDefaults", "util", function($window, scrollSpy, defaults, util) {
- return {
- link: function($scope, element, attrs) {
- var options, spyElement;
- options = util.extendAttributes("macScrollSpy", defaults, attrs);
- spyElement = element[0].tagName === "BODY" ? angular.element($window) : element;
- return spyElement.bind("scroll", function($event) {
- var anchors, i, maxScroll, scrollHeight, scrollTop, _i, _ref;
- scrollTop = spyElement.scrollTop() + options.offset;
- scrollHeight = this.scrollHeight || element[0].scrollHeight;
- maxScroll = scrollHeight - spyElement.height();
- if (!scrollSpy.registered.length) {
- return true;
- }
- if (scrollTop >= maxScroll) {
- return scrollSpy.setActive(scrollSpy.last());
- }
- for (i = _i = 0, _ref = scrollSpy.registered.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
- anchors = scrollSpy.registered;
- if (scrollSpy.active.id !== anchors[i].id && scrollTop >= anchors[i].top && (!anchors[i + 1] || scrollTop <= anchors[i + 1].top)) {
- $scope.$apply(function() {
- return scrollSpy.setActive(anchors[i]);
- });
- return true;
- }
- }
- });
- }
- };
- }
-]).directive("macScrollSpyAnchor", [
- "scrollSpy", function(scrollSpy) {
- return {
- link: function($scope, element, attrs) {
- var id, observeKey, registered, registering;
- id = attrs.id || attrs.macScrollSpyAnchor;
- registered = false;
- if (!id) {
- throw new Error("Missing scroll spy anchor id");
- }
- registering = function() {
- scrollSpy.register(id, element);
- if (!registered) {
- $scope.$on("$destroy", function() {
- return scrollSpy.unregister(id);
- });
- }
- return registered = true;
- };
- $scope.$on("refresh-scroll-spy", registering);
- if (/{{(.*)}}/.test(id)) {
- observeKey = attrs.id ? "id" : "macScrollSpyAnchor";
- return attrs.$observe(observeKey, function(value) {
- if ((value != null) && value) {
- id = value;
- return registering();
- }
- });
- } else {
- return registering();
- }
- }
- };
- }
-]).directive("macScrollSpyTarget", [
- "scrollSpy", function(scrollSpy) {
- return {
- link: function($scope, element, attrs) {
- var highlightClass, register, registered, target;
- target = attrs.macScrollSpyTarget;
- highlightClass = attrs.macScrollSpyTargetClass || "active";
- registered = false;
- if (!target) {
- throw new Error("Missing scroll spy target name");
- }
- register = function(id) {
- var callback;
- if (!id) {
- return;
- }
- callback = function(active) {
- var action;
- action = id === active.id ? "addClass" : "removeClass";
- return element[action](highlightClass);
- };
- if (scrollSpy.active != null) {
- callback(scrollSpy.active);
- }
- if (!registered) {
- scrollSpy.addListener(callback);
- return $scope.$on("$destroy", function() {
- return scrollSpy.removeListener(callback);
- });
- }
- };
- if (/{{(.*)}}/.test(target)) {
- return attrs.$observe("macScrollSpyTarget", function(value) {
- return register(value);
- });
- } else {
- return register(target);
- }
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Spinner
-
-@description
-A directive for generating spinner
-
-@param {Integer} mac-spinner-size The size of the spinner (default 16)
-@param {Integer} mac-spinner-z-index The z-index (default inherit)
-@param {String} mac-spinner-color Color of all the bars (default #2f3035)
- */
-angular.module("Mac").directive("macSpinner", [
- "util", function(util) {
- return {
- restrict: "E",
- replace: true,
- template: "",
- compile: function(element, attrs) {
- var animateCss, bar, degree, delay, i, prefixes, styl, transformCss, vendor, _i;
- prefixes = ["webkit", "Moz", "ms", "O"];
- vendor = function(el, name) {
- var prefix, _i, _len;
- name = util.capitalize(name);
- for (_i = 0, _len = prefixes.length; _i < _len; _i++) {
- prefix = prefixes[_i];
- if (el.style[prefix + name] != null) {
- return prefix + name;
- }
- }
- return name;
- };
- animateCss = vendor(element[0], "animation");
- transformCss = vendor(element[0], "transform");
- for (i = _i = 0; _i <= 9; i = ++_i) {
- delay = i * 0.1 - 1 + (!i);
- degree = i * 36;
- styl = {};
- bar = angular.element("");
- styl[animateCss] = "fade 1s linear infinite " + delay + "s";
- styl[transformCss] = "rotate(" + degree + "deg) translate(0, 130%)";
- bar.css(styl);
- element.append(bar);
- }
- return function($scope, element, attrs) {
- var bars, defaults, setSpinnerSize;
- defaults = {
- size: 16,
- zIndex: "inherit",
- color: "#2f3035"
- };
- bars = angular.element(element[0].getElementsByClassName("bar"));
- setSpinnerSize = function(size) {
- bars.css({
- height: size * 0.32 + "px",
- left: size * 0.445 + "px",
- top: size * 0.37 + "px",
- width: size * 0.13 + "px",
- borderRadius: size * 0.32 * 2 + "px",
- position: "absolute"
- });
- if (!isNaN(+size) && angular.isNumber(+size)) {
- size = "" + size + "px";
- }
- return element.css({
- height: size,
- width: size
- });
- };
- if (attrs.macSpinnerSize != null) {
- attrs.$observe("macSpinnerSize", function(value) {
- if ((value != null) && value) {
- return setSpinnerSize(value);
- }
- });
- } else {
- setSpinnerSize(defaults.size);
- }
- attrs.$observe("macSpinnerZIndex", function(value) {
- if ((value != null) && value) {
- return element.css("z-index", value);
- }
- });
- if (attrs.macSpinnerColor != null) {
- return attrs.$observe("macSpinnerColor", function(value) {
- if ((value != null) && value) {
- return bars.css("background", value);
- }
- });
- } else {
- return bars.css("background", defaults.color);
- }
- };
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Tag Autocomplete
-
-@description
-A directive for generating tag input with autocomplete support on text input.
-Tag autocomplete has priority 800
-
-@dependencies
-- mac-autocomplete
-- mac-menu
-
-@param {String} mac-tag-autocomplete-url Url to fetch autocomplete dropdown list data.
-mac-tag-autocomplete-url and mac-tag-autocomplete-source cannot be used together. Url
-will always take priority over mac-tag-autocomplete-source.
-@param {String} mac-tag-autocomplete-source Data to use.
-Source support multiple types:
-- Array: An array can be used for local data and there are two supported formats:
- - An array of strings: ["Item1", "Item2"]
- - An array of objects with mac-autocomplete-label key: [{name:"Item1"}, {name:"Item2"}]
-- String: Using a string as the source is the same as passing the variable into mac-autocomplete-url
-- Function: A callback when querying for data. The callback receive two arguments:
- - {String} Value currently in the text input
- - {Function} A response callback which expects a single argument, data to user. The data will be
- populated on the menu and the menu will adjust accordingly
-@param {String} mac-tag-autocomplete-value The value to be sent back upon selection (default "id")
-@param {String} mac-tag-autocomplete-label The label to display to the users (default "name")
-@param {Expr} mac-tag-autocomplete-model Model for autocomplete
-@param {Array} mac-tag-autocomplete-selected The list of elements selected by the user (required)
-@param {String} mac-tag-autocomplete-query The query parameter on GET command (defualt "q")
-@param {Integer} mac-tag-autocomplete-delay Time delayed on fetching autocomplete data after keyup (default 800)
-@param {String} mac-tag-autocomplete-placeholder Placeholder text of the text input (default "")
-@param {Boolean} mac-tag-autocomplete-disabled If autocomplete is enabled or disabled (default false)
-@param {Expr} mac-tag-autocomplete-on-enter When autocomplete is disabled, this function is called on enter, Should return either string, object or boolean. If false, item is not added
-- `item` - {String} User input
-@param {String} mac-tag-autocomplete-events A CSV list of events to attach functions to
-@param {Expr} mac-tag-autocomplete-on- Function to be called when specified event is fired
-- `event` - {Object} jQuery event
-- `value` - {String} Value in the input text
-
-@param {Event} mac-tag-autocomplete-clear-input $broadcast message; clears text input when received
- */
-var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-
-angular.module("Mac").directive("macTagAutocomplete", [
- "$parse", "$timeout", "keys", "util", function($parse, $timeout, keys, util) {
- return {
- restrict: "E",
- template: "",
- replace: true,
- priority: 800,
- scope: {
- url: "=macTagAutocompleteUrl",
- placeholder: "=macTagAutocompletePlaceholder",
- selected: "=macTagAutocompleteSelected",
- source: "=macTagAutocompleteSource",
- disabled: "=macTagAutocompleteDisabled",
- model: "=macTagAutocompleteModel",
- onEnter: "&macTagAutocompleteOnEnter",
- onKeydown: "&macTagAutocompleteOnKeydown"
- },
- compile: function(element, attrs) {
- var attrsObject, delay, labelGetter, labelKey, queryKey, textInput, useSource, valueGetter, valueKey;
- valueKey = attrs.macTagAutocompleteValue;
- if (valueKey == null) {
- valueKey = "id";
- }
- valueGetter = $parse(valueKey);
- labelKey = attrs.macTagAutocompleteLabel;
- if (labelKey == null) {
- labelKey = "name";
- }
- labelGetter = $parse(labelKey);
- queryKey = attrs.macTagAutocompleteQuery || "q";
- delay = +attrs.macTagAutocompleteDelay || 800;
- useSource = false;
- textInput = angular.element(element[0].getElementsByClassName("mac-autocomplete"));
- attrsObject = {
- "mac-autocomplete-label": labelKey,
- "mac-autocomplete-query": queryKey,
- "mac-autocomplete-delay": delay
- };
- if (attrs.macTagAutocompleteUrl != null) {
- attrsObject["mac-autocomplete-url"] = "url";
- } else if (useSource = attrs.macTagAutocompleteSource != null) {
- attrsObject["mac-autocomplete-source"] = "autocompleteSource";
- }
- textInput.attr(attrsObject);
- return function($scope, element, attrs) {
- var updateAutocompleteSource, watchFn;
- $scope.textInput = "";
- $scope.autocompleteSource = angular.isArray($scope.source) ? [] : $scope.source;
- if (attrs.macTagAutocompleteModel != null) {
- $scope.$watch("textInput", function(value) {
- return $scope.model = value;
- });
- $scope.$watch("model", function(value) {
- return $scope.textInput = value;
- });
- }
- $scope.focusTextInput = function() {
- var textInputDOM;
- textInputDOM = element[0].getElementsByClassName("mac-autocomplete");
- return textInputDOM[0].focus();
- };
- $scope.getTagLabel = function(tag) {
- if (labelKey) {
- return labelGetter(tag);
- } else {
- return tag;
- }
- };
- $timeout(function() {
- var capitalized, eventFn, events, name, _i, _len, _ref, _results;
- if ((events = attrs.macTagAutocompleteEvents)) {
- textInput = angular.element(element[0].getElementsByClassName("text-input"));
- _ref = events.split(",");
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- name = _ref[_i];
- name = util.trim(name);
- capitalized = util.capitalize(name);
- eventFn = attrs["macTagAutocompleteOn" + capitalized];
- if (!(eventFn && name !== "keydown")) {
- continue;
- }
- _results.push((function(name, eventFn) {
- return textInput.bind(name, function($event) {
- var expression;
- expression = $parse(eventFn);
- return $scope.$apply(function() {
- return expression($scope.$parent, {
- $event: $event,
- item: $scope.textInput
- });
- });
- });
- })(name, eventFn));
- }
- return _results;
- }
- }, 0, false);
- updateAutocompleteSource = function() {
- var difference, item, selectedValues, sourceValues, _ref;
- $scope.autocompletePlaceholder = ((_ref = $scope.selected) != null ? _ref.length : void 0) ? "" : $scope.placeholder;
- if (!(useSource && angular.isArray($scope.source))) {
- $scope.autocompleteSource = $scope.source;
- return;
- }
- sourceValues = (function() {
- var _i, _len, _ref1, _results;
- _ref1 = $scope.source || [];
- _results = [];
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- item = _ref1[_i];
- _results.push(valueGetter(item));
- }
- return _results;
- })();
- selectedValues = (function() {
- var _i, _len, _ref1, _results;
- _ref1 = $scope.selected || [];
- _results = [];
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- item = _ref1[_i];
- _results.push(valueGetter(item));
- }
- return _results;
- })();
- difference = (function() {
- var _i, _len, _results;
- _results = [];
- for (_i = 0, _len = sourceValues.length; _i < _len; _i++) {
- item = sourceValues[_i];
- if (__indexOf.call(selectedValues, item) < 0) {
- _results.push(item);
- }
- }
- return _results;
- })();
- return $scope.autocompleteSource = (function() {
- var _i, _len, _ref1, _ref2, _results;
- _ref1 = $scope.source || [];
- _results = [];
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- item = _ref1[_i];
- if (_ref2 = valueGetter(item), __indexOf.call(difference, _ref2) >= 0) {
- _results.push(item);
- }
- }
- return _results;
- })();
- };
- if (useSource) {
- watchFn = angular.isArray($scope.source) ? "$watchCollection" : "$watch";
- $scope[watchFn]("source", updateAutocompleteSource);
- }
- $scope.$watchCollection("selected", updateAutocompleteSource);
- $scope.onKeyDown = function($event) {
- var stroke, _base;
- stroke = $event.which || $event.keyCode;
- switch (stroke) {
- case keys.BACKSPACE:
- if (!$scope.textInput) {
- if (typeof (_base = $scope.selected).pop === "function") {
- _base.pop();
- }
- }
- break;
- case keys.ENTER:
- if ($scope.textInput.length > 0 && $scope.disabled) {
- $scope.onSelect($scope.textInput);
- }
- }
- if (attrs.macTagAutocompleteOnKeydown != null) {
- if (typeof $scope.onKeydown === "function") {
- $scope.onKeydown({
- $event: $event,
- value: $scope.textInput
- });
- }
- }
- return true;
- };
- $scope.onSuccess = function(data) {
- var existingValues, item;
- existingValues = (function() {
- var _i, _len, _ref, _results;
- _ref = $scope.selected || [];
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- item = _ref[_i];
- _results.push(valueGetter(item));
- }
- return _results;
- })();
- return (function() {
- var _i, _len, _ref, _ref1, _results;
- _ref = data.data;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- item = _ref[_i];
- if (_ref1 = valueGetter(item) || item, __indexOf.call(existingValues, _ref1) < 0) {
- _results.push(item);
- }
- }
- return _results;
- })();
- };
- $scope.onSelect = function(item) {
- if (attrs.macTagAutocompleteOnEnter != null) {
- item = $scope.onEnter({
- item: item
- });
- }
- if (item) {
- $scope.selected.push(item);
- }
- return $timeout(function() {
- return $scope.textInput = "";
- }, 0);
- };
- return $scope.$on("mac-tag-autocomplete-clear-input", function() {
- return $scope.textInput = "";
- });
- };
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Time
-@description
-A directive for creating a time input field. Time input can use any `ng-` attributes support by text input type.
-
-@param {String} ng-model Assignable angular expression to data-bind to
-Clearing model by setting it to null or '' will set model back to default value
-@param {String} name Property name of the form under which the control is published
-@param {String} required Adds `required` validation error key if the value is not entered.
-@param {String} ng-required Adds `required` attribute and `required` validation constraint to
- the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- `required` when you want to data-bind to the `required` attribute.
-@param {String} ng-pattern Sets `pattern` validation error key if the value does not match the
- RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
- patterns defined as scope expressions.
-@param {String} ng-change Angular expression to be executed when input changes due to user interaction with the input element.
-@param {String} ng-disabled Enable or disable time input
-
-@param {String} mac-time-default If model is undefined, use this as the starting value (default 12:00 PM)
- */
-angular.module("Mac").directive("macTime", [
- "$filter", "$timeout", "keys", "util", function($filter, $timeout, keys, util) {
- var defaults;
- defaults = {
- "default": "12:00 AM"
- };
- return {
- restrict: "E",
- require: "ngModel",
- replace: true,
- template: "",
- link: function($scope, element, attrs, ngModelCtrl) {
- var getSelection, incrementHour, incrementMinute, initializeTime, opts, selectHours, selectMeridian, selectMinutes, selectNextSection, selectPreviousSection, selectRange, setMeridian, time, timeValidator, toggleMeridian, updateInput, updateTime;
- opts = util.extendAttributes("macTime", defaults, attrs);
- time = null;
- if (!attrs.placeholder) {
- attrs.$set("placeholder", "--:--");
- }
- timeValidator = function(value) {
- if (!value || util.timeRegex.exec(value)) {
- ngModelCtrl.$setValidity("time", true);
- return value;
- } else {
- ngModelCtrl.$setValidity("time", false);
- return void 0;
- }
- };
- ngModelCtrl.$formatters.push(timeValidator);
- ngModelCtrl.$parsers.push(timeValidator);
- (initializeTime = function() {
- var currentDate;
- currentDate = new Date().toDateString();
- time = new Date(currentDate + " " + opts["default"]);
- if (isNaN(time.getTime())) {
- return time = new Date(currentDate + " " + defaults["default"]);
- }
- })();
- getSelection = function() {
- var start;
- start = element[0].selectionStart;
- switch (false) {
- case !((0 <= start && start < 3)):
- return "hour";
- case !((3 <= start && start < 6)):
- return "minute";
- case !((6 <= start && start < 9)):
- return "meridian";
- }
- };
- selectRange = function(start, end) {
- return $timeout(function() {
- return element[0].setSelectionRange(start, end);
- }, 0, false);
- };
- selectHours = function() {
- return selectRange(0, 2);
- };
- selectMinutes = function() {
- return selectRange(3, 5);
- };
- selectMeridian = function() {
- return selectRange(6, 8);
- };
- selectNextSection = function() {
- switch (getSelection()) {
- case "hour":
- return selectMinutes();
- case "minute":
- case "meridian":
- return selectMeridian();
- }
- };
- selectPreviousSection = function() {
- switch (getSelection()) {
- case "hour":
- case "minute":
- return selectHours();
- case "meridian":
- return selectMinutes();
- }
- };
- setMeridian = function(meridian) {
- var hours;
- hours = time.getHours();
- if (hours >= 12 && meridian === "AM") {
- hours -= 12;
- }
- if (hours < 12 && meridian === "PM") {
- hours += 12;
- }
- return time.setHours(hours);
- };
- toggleMeridian = function() {
- var hours;
- hours = time.getHours();
- return time.setHours((hours + 12) % 24);
- };
- incrementHour = function(change) {
- return time.setHours(time.getHours() + change);
- };
- incrementMinute = function(change) {
- return time.setMinutes(time.getMinutes() + change);
- };
- updateInput = function() {
- var displayTime;
- displayTime = $filter("date")(time.getTime(), "hh:mm a");
- if (displayTime !== ngModelCtrl.$viewValue) {
- ngModelCtrl.$setViewValue(displayTime);
- return ngModelCtrl.$render();
- }
- };
- updateTime = function() {
- var hours, meridian, minutes, timeMatch;
- if (timeMatch = util.timeRegex.exec(ngModelCtrl.$modelValue)) {
- hours = +timeMatch[1];
- minutes = +timeMatch[2];
- meridian = timeMatch[3];
- if (meridian === "PM" && hours !== 12) {
- hours += 12;
- }
- if (meridian === "AM" && hours === 12) {
- hours = 0;
- }
- return time.setHours(hours, minutes);
- }
- };
- element.on('blur', function(event) {
- return $scope.$apply(function() {
- return updateInput();
- });
- });
- element.on('click', function(event) {
- return $scope.$apply(function() {
- updateTime();
- updateInput();
- switch (getSelection()) {
- case "hour":
- return selectHours();
- case "minute":
- return selectMinutes();
- case "meridian":
- return selectMeridian();
- }
- });
- });
- element.on('keydown', function(event) {
- var key;
- key = event.which;
- if (key !== keys.UP && key !== keys.DOWN && key !== keys.LEFT && key !== keys.RIGHT && key !== keys.A && key !== keys.P) {
- return true;
- }
- event.preventDefault();
- return $scope.$apply(function() {
- var change, meridianSelected;
- switch (key) {
- case keys.UP:
- case keys.DOWN:
- change = key === keys.UP ? 1 : -1;
- switch (getSelection()) {
- case "hour":
- incrementHour(change);
- selectHours();
- break;
- case "minute":
- incrementMinute(change);
- selectMinutes();
- break;
- case "meridian":
- toggleMeridian();
- selectMeridian();
- }
- return updateInput();
- case keys.LEFT:
- case keys.RIGHT:
- switch (key) {
- case keys.LEFT:
- selectPreviousSection();
- break;
- case keys.RIGHT:
- selectNextSection();
- }
- return updateInput();
- case keys.A:
- case keys.P:
- meridianSelected = getSelection() === "meridian";
- switch (false) {
- case !(meridianSelected && key === keys.A):
- setMeridian("AM");
- break;
- case !(meridianSelected && key === keys.P):
- setMeridian("PM");
- }
- updateInput();
- return selectMeridian();
- }
- });
- });
- return element.on('keyup', function(event) {
- var key;
- key = event.which;
- if (!((keys.NUMPAD0 <= key && key <= keys.NUMPAD9) || (keys.ZERO <= key && key <= keys.NINE))) {
- event.preventDefault();
- }
- return $scope.$apply(function() {
- return updateTime();
- });
- });
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Tooltip
-
-@description
-Tooltip directive
-
-@param {String} mac-tooltip Text to show in tooltip
-@param {String} mac-tooltip-direction Direction of tooltip (default 'top')
-@param {String} mac-tooltip-trigger How tooltip is triggered (default 'hover')
-@param {Boolean} mac-tooltip-inside Should the tooltip be appended inside element (default false)
-@param {Expr} mac-tooltip-disabled Disable and enable tooltip
- */
-
-/*
-NOTE: This directive does not use $animate to append and remove DOM element or
- add and remove classes in order to optimize showing tooltips by eliminating
- the need for firing a $digest cycle.
- */
-angular.module("Mac").directive("macTooltip", [
- "$timeout", "util", function($timeout, util) {
- return {
- restrict: "A",
- link: function(scope, element, attrs) {
- var defaults, disabled, enabled, opts, removeTip, showTip, text, toggle, tooltip;
- tooltip = null;
- text = "";
- enabled = false;
- disabled = false;
- defaults = {
- direction: "top",
- trigger: "hover",
- inside: false
- };
- opts = util.extendAttributes("macTooltip", defaults, attrs);
- showTip = function() {
- var elementSize, offset, tip, tooltipSize;
- if (disabled || !text) {
- return true;
- }
- tip = opts.inside ? element : angular.element(document.body);
- removeTip(0);
- tooltip = angular.element("");
- tip.append(tooltip);
- offset = opts.inside ? {
- top: 0,
- left: 0
- } : element.offset();
- elementSize = {
- width: element.outerWidth(),
- height: element.outerHeight()
- };
- tooltipSize = {
- width: tooltip.outerWidth(),
- height: tooltip.outerHeight()
- };
- switch (opts.direction) {
- case "bottom":
- case "top":
- offset.left += elementSize.width / 2.0 - tooltipSize.width / 2.0;
- break;
- case "left":
- case "right":
- offset.top += elementSize.height / 2.0 - tooltipSize.height / 2.0;
- }
- switch (opts.direction) {
- case "bottom":
- offset.top += elementSize.height;
- break;
- case "top":
- offset.top -= tooltipSize.height;
- break;
- case "left":
- offset.left -= tooltipSize.width;
- break;
- case "right":
- offset.left += elementSize.width;
- }
- offset.top = Math.max(0, offset.top);
- offset.left = Math.max(0, offset.left);
- angular.forEach(offset, function(value, key) {
- if (!isNaN(+value) && angular.isNumber(+value)) {
- value = "" + value + "px";
- }
- return tooltip.css(key, value);
- });
- tooltip.addClass("visible");
- return true;
- };
- removeTip = function(delay) {
- if (delay == null) {
- delay = 100;
- }
- if (tooltip != null) {
- tooltip.removeClass("visible");
- $timeout(function() {
- if (tooltip != null) {
- tooltip.remove();
- }
- return tooltip = null;
- }, delay, false);
- }
- return true;
- };
- toggle = function() {
- if (tooltip != null) {
- return removeTip();
- } else {
- return showTip();
- }
- };
- attrs.$observe("macTooltip", function(value) {
- var _ref;
- if (value != null) {
- text = value;
- if (!enabled) {
- if ((_ref = opts.trigger) !== "hover" && _ref !== "click") {
- throw "Invalid trigger";
- }
- switch (opts.trigger) {
- case "click":
- element.bind("click", toggle);
- break;
- case "hover":
- element.bind("mouseenter", showTip);
- element.bind("mouseleave click", function() {
- return removeTip();
- });
- }
- return enabled = true;
- }
- }
- });
- if (attrs.macTooltipDisabled != null) {
- scope.$watch(attrs.macTooltipDisabled, function(value) {
- return disabled = value;
- });
- }
- return scope.$on("$destroy", function() {
- if (tooltip != null) {
- return removeTip(0);
- }
- });
- }
- };
- }
-]);
-
-angular.module("Mac").filter("boolean", function() {
- return function(boolean, trueString, falseString) {
- if (trueString == null) {
- trueString = "true";
- }
- if (falseString == null) {
- falseString = "false";
- }
- if (boolean) {
- return trueString;
- } else {
- return falseString;
- }
- };
-});
-
-angular.module("Mac").filter("true", function() {
- return function(boolean, trueString) {
- if (trueString == null) {
- trueString = "true";
- }
- if (boolean) {
- return trueString;
- } else {
- return "";
- }
- };
-});
-
-angular.module("Mac").filter("false", function() {
- return function(boolean, falseString) {
- if (falseString == null) {
- falseString = "false";
- }
- if (boolean) {
- return "";
- } else {
- return falseString;
- }
- };
-});
-
-
-/*
-@chalk overview
-@name List
-@description
-List filter. Use for converting arrays into a string
-
-@param {Array} list Array of items
-@param {String} separator String to separate each element of the array (default ,)
-@returns {String} Formatted string
- */
-angular.module("Mac").filter("list", [
- function() {
- return function(list, separator) {
- if (separator == null) {
- separator = ", ";
- }
- return list.join(separator);
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Pluralize
-@description
-Pluralizes the given string. It's a simple proxy to the pluralize function on util.
-
-@param {String} string Noun to pluralize
-@param {Integer} count The numer of objects
-@param {Boolean} includeCount To include the number in formatted string
-@returns {String} Formatted plural
- */
-angular.module("Mac").filter("pluralize", [
- "util", function(util) {
- return function(string, count, includeCount) {
- if (includeCount == null) {
- includeCount = true;
- }
- return util.pluralize(string, count, includeCount);
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Timestamp filter
-
-@description
-Takes in a unix timestamp and turns it into a human-readable relative time string, like "5
-minutes ago" or "just now".
-
-@param {Unix timestamp} time The time to format
-@returns {String} Formatted string
- */
-angular.module("Mac").filter("timestamp", [
- "util", function(util) {
- var _createTimestamp;
- _createTimestamp = function(count, noun) {
- noun = util.pluralize(noun, count);
- return "" + count + " " + noun + " ago";
- };
- return function(time) {
- var currentTime, days, hours, minutes, months, secondsAgo, weeks, years;
- time = +time;
- currentTime = Math.round(Date.now() / 1000);
- secondsAgo = currentTime - time;
- if (secondsAgo < 45) {
- return "just now";
- } else if (secondsAgo < 120) {
- return "about a minute ago";
- } else {
- years = Math.floor(secondsAgo / (365 * 24 * 60 * 60));
- if (years > 0) {
- return _createTimestamp(years, "year");
- }
- months = Math.floor(secondsAgo / (31 * 24 * 60 * 60));
- if (months > 0) {
- return _createTimestamp(months, "month");
- }
- weeks = Math.floor(secondsAgo / (7 * 24 * 60 * 60));
- if (weeks > 0) {
- return _createTimestamp(weeks, "week");
- }
- days = Math.floor(secondsAgo / (24 * 60 * 60));
- if (days > 0) {
- return _createTimestamp(days, "day");
- }
- hours = Math.floor(secondsAgo / (60 * 60));
- if (hours > 0) {
- return _createTimestamp(hours, "hour");
- }
- minutes = Math.floor(secondsAgo / 60);
- if (minutes > 0) {
- return _createTimestamp(minutes, "min");
- }
- return "" + secondsAgo + " seconds ago";
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Underscore string
-
-@description
-Proxy filter for calling underscore string function
-
-@param {String} string String to filter
-@param {String} fn Underscore function to call
-@param {Parameters} params Extra parameters to pass to Underscore string
-@returns {String} Formatted string
- */
-var __slice = [].slice;
-
-angular.module("Mac").filter("underscoreString", function() {
- return function() {
- var fn, params, string;
- string = arguments[0], fn = arguments[1], params = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
- params.unshift(string);
- return _.string[fn].apply(this, params);
- };
-});
-
-
-/*
-@chalk overview
-@name Modal Service
-
-@description
-There are multiple components used by modal.
-- A modal service is used to keep state of modal opened in the applications.
-- A modal element directive to define the modal dialog box
-- A modal attribute directive as a modal trigger
-
-@param {Function} show Show a modal based on the modal id
-- {String} id The id of the modal to open
-- {Object} triggerOptions Additional options to open modal
-
-@param {Function} resize Update the position and also the size of the modal
-- {Modal Object} modalObject The modal to reposition and resize (default opened modal)
-
-@param {Function} hide Hide currently opened modal
-- {Function} callback Callback after modal has been hidden
-
-@param {Function} bindingEvents Binding escape key or resize event
-- {String} action Either to bind or unbind events (default "bind")
-
-@param {Function} register Registering modal with the service
-- {String} id ID of the modal
-- {DOM element} element The modal element
-- {Object} options Additional options for the modal
-
-@param {Function} unregister Remove modal from modal service
-- {String} id ID of the modal to unregister
-
-@param {Function} clearWaiting Remove certain modal id from waiting list
-- {String} id ID of the modal
- */
-angular.module("Mac").service("modal", [
- "$rootScope", "$animate", "$templateCache", "$compile", "$http", "$controller", "modalViews", "keys", function($rootScope, $animate, $templateCache, $compile, $http, $controller, modalViews, keys) {
- return {
- registered: modalViews.registered,
- waiting: null,
- opened: null,
- modalTemplate: "",
- show: function(id, triggerOptions) {
- var modalObject, options, path, renderModal, showModal, showOptions, template;
- if (triggerOptions == null) {
- triggerOptions = {};
- }
- if ((this.registered[id] != null) && (this.opened != null)) {
- return this.hide();
- } else if (this.registered[id] != null) {
- modalObject = this.registered[id];
- options = modalObject.options;
- showOptions = {};
- angular.extend(showOptions, options, triggerOptions);
- showModal = (function(_this) {
- return function(element) {
- showOptions.beforeShow(element.scope());
- return $animate.removeClass(element, "hide", function() {
- return $animate.addClass(element, "visible", function() {
- _this.opened = {
- id: id,
- element: element,
- options: showOptions
- };
- _this.resize(_this.opened);
- _this.bindingEvents();
- showOptions.open(element.scope());
- showOptions.afterShow(element.scope());
- $rootScope.$broadcast("modalWasShown", id);
- return _this.clearWaiting();
- });
- });
- };
- })(this);
- if (showOptions.moduleMethod != null) {
- renderModal = (function(_this) {
- return function(template) {
- var element, viewScope, wrapper;
- if (isScope(showOptions.scope)) {
- viewScope = showOptions.scope;
- } else {
- viewScope = $rootScope.$new(true);
- if (angular.isObject(showOptions.scope)) {
- angular.extend(viewScope, showOptions.scope);
- }
- }
- angular.extend(showOptions.attributes, {
- id: id
- });
- element = angular.element(_this.modalTemplate).attr(showOptions.attributes);
- wrapper = angular.element(element[0].getElementsByClassName("mac-modal-content-wrapper"));
- wrapper.html(template);
- if (showOptions.overlayClose) {
- element.bind("click", function($event) {
- if (angular.element($event.target).hasClass("mac-modal-overlay")) {
- return viewScope.$apply(function() {
- return _this.hide();
- });
- }
- });
- }
- if (showOptions.controller) {
- $controller(showOptions.controller, {
- $scope: viewScope,
- $element: element,
- macModalOptions: showOptions
- });
- }
- $animate.enter(element, angular.element(document.body));
- $compile(element)(viewScope);
- return showModal(element);
- };
- })(this);
- if ((path = showOptions.templateUrl)) {
- template = $templateCache.get(path);
- if (template) {
- return renderModal(template);
- } else {
- return $http.get(path).then(function(resp) {
- $templateCache.put(path, resp.data);
- return renderModal(resp.data);
- }, function() {
- throw Error("Failed to load template: " + path);
- });
- }
- } else if ((template = showOptions.template)) {
- return renderModal(template);
- }
- } else if (modalObject.element != null) {
- return showModal(modalObject.element);
- }
- } else {
- return this.waiting = {
- id: id,
- options: triggerOptions
- };
- }
- },
- resize: function(modalObject) {
- var css, element, height, modal, options, width;
- if (modalObject == null) {
- modalObject = this.opened;
- }
- if (modalObject == null) {
- return;
- }
- element = modalObject.element;
- options = modalObject.options;
- if (!options.position) {
- return;
- }
- modal = angular.element(element[0].getElementsByClassName("mac-modal")).attr("style", "");
- height = modal.outerHeight();
- width = modal.outerWidth();
- css = angular.element(window).height() > height ? {
- marginTop: -height / 2
- } : {
- top: options.topOffset
- };
- css.marginLeft = -width / 2;
- return angular.forEach(css, function(value, key) {
- if (!isNaN(+value) && angular.isNumber(+value)) {
- value = "" + value + "px";
- }
- return modal.css(key, value);
- });
- },
- hide: function(callback) {
- var element, id, options, _ref;
- if (this.opened == null) {
- return;
- }
- _ref = this.opened, id = _ref.id, options = _ref.options, element = _ref.element;
- options.beforeHide(element.scope());
- return $animate.removeClass(element, "visible", (function(_this) {
- return function() {
- _this.bindingEvents("unbind");
- _this.opened = null;
- if (options.moduleMethod) {
- if (!isScope(options.scope)) {
- element.scope().$destroy();
- }
- $animate.leave(element);
- } else {
- $animate.addClass(element, "hide");
- }
- options.afterHide(element.scope());
- $rootScope.$broadcast("modalWasHidden", id);
- return callback && callback();
- };
- })(this));
- },
- bindingEvents: function(action) {
- var escapeKeyHandler, options, resizeHandler;
- if (action == null) {
- action = "bind";
- }
- if (!((action === "bind" || action === "unbind") && (this.opened != null))) {
- return;
- }
- escapeKeyHandler = (function(_this) {
- return function(event) {
- if (event.which === keys.ESCAPE) {
- return _this.hide();
- }
- };
- })(this);
- resizeHandler = (function(_this) {
- return function(event) {
- return _this.resize();
- };
- })(this);
- options = this.opened.options;
- if (options.keyboard) {
- angular.element(document)[action]("keydown", escapeKeyHandler);
- }
- if (options.resize) {
- return angular.element(window)[action]("resize", resizeHandler);
- }
- },
- register: function(id, element, options) {
- var modalOpts;
- if (this.registered[id] != null) {
- throw new Error("Modal " + id + " already registered");
- }
- modalOpts = {};
- angular.extend(modalOpts, modalViews.defaults, options);
- this.registered[id] = {
- id: id,
- element: element,
- options: modalOpts
- };
- if ((this.waiting != null) && this.waiting.id === id) {
- return this.show(id, this.waiting.options);
- }
- },
- unregister: function(id) {
- var _ref;
- if (this.registered[id] == null) {
- throw new Error("Modal " + id + " is not registered");
- }
- if (((_ref = this.opened) != null ? _ref.id : void 0) === id) {
- this.hide();
- }
- this.clearWaiting(id);
- return delete this.registered[id];
- },
- clearWaiting: function(id) {
- var _ref;
- if ((id != null) && ((_ref = this.waiting) != null ? _ref.id : void 0) !== id) {
- return;
- }
- return this.waiting = null;
- }
- };
- }
-]).provider("modalViews", function() {
- this.registered = {};
- this.defaults = {
- keyboard: false,
- overlayClose: false,
- resize: true,
- position: true,
- open: angular.noop,
- topOffset: 20,
- attributes: {},
- beforeShow: angular.noop,
- afterShow: angular.noop,
- beforeHide: angular.noop,
- afterHide: angular.noop
- };
- this.$get = function() {
- return this;
- };
- return this;
-}).config([
- "modalViewsProvider", function(modalViews) {
- return angular.module("Mac").modal = function(id, modalOptions) {
- var options;
- if (modalViews.registered[id] == null) {
- options = {};
- angular.extend(options, modalViews.defaults, modalOptions, {
- moduleMethod: true
- });
- return modalViews.registered[id] = {
- id: id,
- options: options
- };
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Popover Service
-
-@description
-A popover service to keep state of opened popover. Allowing user to hide certain
-or all popovers
-
-@param {Array} popoverList The popover that's currently being shown
-
-@param {Array} registered Object storing all the registered popover DOM elements
-
-@param {Function} last Get data of the last popover
-- Returns {Object} The last opened popover
-
-@param {Function} register Register a popover with an id and an element
-- {String} id Popover id
-- {DOM Element} element Popover element
-- Returns {Bool} If the id already existed
-
-@param {Function} unregister Remove id and element from registered list of popover
-- {String} id Popover id
-- Returns {Bool} If the id exist
-
-@param {Function} add Add a new popover to opened list
-- {String} id Popover id
-- {DOM Element} popover Popover DOM element
-- {DOM Element} element Trigger DOM element
-- {Object} options Additional options
-- Returns {Object} The new popover object
-
-@param {Function} pop Get and remove the last popover from list
-- Returns {Object} Last element from popoverList
-
-@param {Function} show Show and position a registered popover
-- {String} id Popover id
-- {DOM Element} element Element that trigger the popover
-- {Object} options Additional options for popover
-
-@param {Function} getById Get opened popover object by id
-- {String} id Popover id
-- Returns {Object} Opened popover object
-
-@param {Function} resize Update size and position of an opened popover
-- {Object|String} popoverObj Support multiple type input:
- - Object: One of the popover objects in popoverList
- - String: Popover ID
-
-@param {Function} hide Hide a certain popover. If no selector is provided, the
-last opened popover is hidden
-- {DOM Element|String} selector Support multiple type input:
- - DOM Element: Popover trigger element
- - String: Popover ID
-- {Function} callback Callback after popover is hidden
-
-@param {Function} hideAll Hide all popovers
- */
-angular.module("Mac").provider("popoverViews", function() {
- this.registered = {};
- this.defaults = {
- fixed: false,
- childPopover: false,
- offsetY: 0,
- offsetX: 0,
- trigger: "click"
- };
- this.popoverDefaults = {
- footer: false,
- header: false,
- title: "",
- direction: "above left"
- };
-
- /*
- @name template
- @description
- Popover template
- */
- this.template = "";
- this.$get = function() {
- return this;
- };
- return this;
-}).service("popover", [
- "$animate", "$compile", "$controller", "$http", "$rootScope", "$templateCache", "$timeout", "popoverViews", function($animate, $compile, $controller, $http, $rootScope, $templateCache, $timeout, popoverViews) {
- var service;
- service = {
- popoverList: [],
- registered: popoverViews.registered,
- last: function() {
- return this.popoverList[this.popoverList.length - 1];
- },
- register: function(id, options) {
- var exist;
- if (!(exist = this.registered[id] != null)) {
- this.registered[id] = options;
- }
- return !exist;
- },
- unregister: function(id) {
- var exist;
- if (exist = this.registered[id] != null) {
- delete this.registered[id];
- }
- return exist;
- },
- add: function(id, popover, element, options) {
- var newObject;
- newObject = {
- id: id,
- popover: popover,
- element: element,
- options: options
- };
- this.popoverList.push(newObject);
- return newObject;
- },
- pop: function() {
- return this.popoverList.pop();
- },
- show: function(id, element, options) {
- var addPopover, popoverOptions;
- if (options == null) {
- options = {};
- }
- popoverOptions = this.registered[id];
- if (!popoverOptions) {
- return false;
- }
- addPopover = function() {
- var path, showPopover, template;
- showPopover = function(template) {
- var popover, popoverObj, viewScope;
- if (isScope(options.scope)) {
- viewScope = options.scope.$new();
- } else {
- viewScope = $rootScope.$new(true);
- if (angular.isObject(options.scope)) {
- angular.extend(viewScope, options.scope);
- }
- }
- if (popoverOptions.refreshOn) {
- viewScope.$on(popoverOptions.refreshOn, function() {
- return service.resize(id);
- });
- }
- if (popoverOptions.controller) {
- $controller(popoverOptions.controller, {
- $scope: viewScope
- });
- }
- angular.extend(viewScope, {
- macPopoverClasses: {
- footer: popoverOptions.footer || false,
- header: popoverOptions.header || !!popoverOptions.title || false,
- fixed: popoverOptions.fixed || false
- },
- macPopoverTitle: popoverOptions.title || "",
- macPopoverTemplate: template
- });
- popover = $compile(popoverViews.template)(viewScope);
- popover.attr({
- id: id,
- direction: popoverOptions.direction || "below left"
- });
- popoverObj = service.add(id, popover, element, options);
- $animate.addClass(element, "active");
- $rootScope.$broadcast("popoverWasShown", id);
- return $animate.enter(popover, angular.element(document.body), null, function() {
- return service.resize(popoverObj);
- });
- };
- if ((template = popoverOptions.template)) {
- return showPopover(template);
- } else if ((path = popoverOptions.templateUrl)) {
- template = $templateCache.get(path);
- if (template) {
- return showPopover(template);
- } else {
- return $http.get(path).then(function(resp) {
- $templateCache.put(path, resp.data);
- return showPopover(resp.data);
- }, function() {
- throw new Error('Failed to load template: #{path}');
- });
- }
- }
- };
- if (service.popoverList.length && !!!options.childPopover) {
- service.hide(addPopover);
- } else {
- addPopover();
- }
- return true;
- },
- getById: function(id, element) {
- var item, sameTrigger, _i, _len, _ref;
- _ref = this.popoverList;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- item = _ref[_i];
- sameTrigger = (element == null) || item.element === element;
- if (item.id === id && sameTrigger) {
- return item;
- }
- }
- },
- resize: function(popoverObj) {
- var $window, action, current, currentPopover, diff, left, leftScroll, offset, options, position, relative, relativeElement, setOverflowPosition, top, topScroll, updateOffset;
- if (angular.isString(popoverObj)) {
- popoverObj = service.getById(popoverObj);
- }
- if (popoverObj == null) {
- return;
- }
- currentPopover = popoverObj.popover;
- relativeElement = popoverObj.element;
- options = popoverObj.options;
- $window = angular.element(window);
- offset = relativeElement.offset();
- if (options.fixed) {
- offset.top = relativeElement.position().top;
- }
- relative = {
- height: relativeElement.outerHeight(),
- width: relativeElement.outerWidth()
- };
- current = {
- height: currentPopover.outerHeight(),
- width: currentPopover.outerWidth()
- };
- top = 0;
- left = 0;
- position = (currentPopover.attr("direction") || "top left").trim();
- setOverflowPosition = function(offset) {
- var tip, tipOffset;
- if (offset == null) {
- offset = 0;
- }
- tip = angular.element(currentPopover[0].getElementsByClassName("tip"));
- top -= offset;
- tipOffset = +tip.css("margin-top").replace("px", "");
- return tip.css("margin-top", tipOffset + offset);
- };
- updateOffset = function() {
- switch (position) {
- case "above left":
- top = -(current.height + 10);
- return left = -25 + relative.width / 2;
- case "above right":
- top = -(current.height + 10);
- return left = 25 + relative.width / 2 - current.width;
- case "below left":
- top = relative.height + 10;
- return left = -25 + relative.width / 2;
- case "below right":
- top = relative.height + 10;
- return left = 25 + relative.width / 2 - current.width;
- case "middle right":
- top = relative.height / 2 - current.height / 2;
- return left = relative.width + 10;
- case "middle left":
- top = relative.height / 2 - current.height / 2;
- return left = -(current.width + 10);
- }
- };
- updateOffset();
- topScroll = options.fixed ? 0 : $window.scrollTop();
- leftScroll = options.fixed ? 0 : $window.scrollLeft();
- action = {};
- if (position.indexOf("middle") === -1) {
- if (offset.top + top - topScroll < 0) {
- action = {
- remove: "above",
- add: "below"
- };
- } else if (offset.top + top + current.height - topScroll > $window.height()) {
- action = {
- remove: "below",
- add: "above"
- };
- }
- } else {
- if ((diff = offset.top + top - topScroll) < 0) {
- setOverflowPosition(diff);
- } else if ((diff = offset.top + top + currentPopover.outerHeight() - topScroll - $window.height()) > 0) {
- setOverflowPosition(diff);
- }
- }
- if (action.remove && action.add) {
- position = position.replace(action.remove, action.add);
- }
- action = {};
- if (offset.left + left - leftScroll < 0) {
- action = {
- remove: "right",
- add: "left"
- };
- } else if (offset.left + left + currentPopover.outerWidth() - leftScroll > $window.width()) {
- action = {
- remove: "left",
- add: "right"
- };
- }
- if (action.remove && action.add) {
- position = position.replace(action.remove, action.add);
- }
- updateOffset();
- offset.top += top;
- offset.left += left;
- if (options.offsetX != null) {
- offset.left += options.offsetX;
- }
- if (options.offsetY != null) {
- offset.top += options.offsetY;
- }
- angular.forEach(offset, function(value, key) {
- if (!isNaN(+value)) {
- value = "" + value + "px";
- }
- return currentPopover.css(key, value);
- });
- return currentPopover.addClass("visible " + position);
- },
- hide: function(selector, callback) {
- var comparator, i, index, popoverObj, removeScope, _i, _ref;
- if (!this.popoverList.length) {
- return typeof callback === "function" ? callback() : void 0;
- }
- if (angular.isFunction(selector)) {
- callback = selector;
- selector = null;
- }
- if (selector != null) {
- comparator = angular.isString(selector) ? function(item) {
- return item.id === selector;
- } : angular.isElement(selector) ? function(item) {
- return item.element === selector;
- } : void 0;
- index = -1;
- for (i = _i = _ref = this.popoverList.length - 1; _i >= 0; i = _i += -1) {
- if (!(comparator(this.popoverList[i]))) {
- continue;
- }
- popoverObj = this.popoverList[i];
- index = i;
- break;
- }
- if (index > -1) {
- this.popoverList.splice(index, 1);
- }
- } else {
- popoverObj = this.pop();
- }
- if (popoverObj == null) {
- return;
- }
- $rootScope.$broadcast("popoverBeforeHide", popoverObj.id);
- removeScope = popoverObj.popover.scope();
- return $animate.leave(popoverObj.popover, function() {
- $animate.removeClass(popoverObj.element, "active");
- $rootScope.$broadcast("popoverWasHidden", popoverObj.id);
- removeScope.$destroy();
- return typeof callback === "function" ? callback() : void 0;
- });
- },
- hideAll: function() {
- while (this.popoverList.length) {
- this.hide();
- }
- }
- };
- return service;
- }
-]).config([
- "popoverViewsProvider", function(popoverViews) {
- return angular.module("Mac").popover = function(name, options) {
- var opts;
- if (popoverViews.registered[name] == null) {
- opts = {};
- angular.extend(opts, popoverViews.popoverDefaults, options, {
- id: name
- });
- return popoverViews.registered[name] = opts;
- }
- };
- }
-]);
-
-
-/*
-@chalk overview
-@name Scroll Spy Service
-
-@description
-There are multiple components used by scrollspy
-- Scrollspy service is used to keep track of all and active anchors
-- Multiple directives including:
-- mac-scroll-spy - Element to spy scroll event
-- mac-scroll-spy-anchor - Section in element spying on
-- mac-scroll-spy-target - Element to highlight, most likely a nav item
-
-Scrollspy defaults:
-offset - 0
-
-@param {Function} register Register an anchor with the service
-- {String} id ID of the anchor
-- {DOM Element} element Element to spy on
-
-@param {Function} unregister Remove anchor from service
-- {String} id ID of the anchor
-
-@param {Function} setActive Set active anchor and fire all listeners
-- {Object} anchor Anchor object
-
-@param {Function} addListener Add listener when active is set
-- {Function} fn Callback function
-
-@param {Function} removeListener Remove listener
-- {Function} fn Callback function
- */
-angular.module("Mac").service("scrollSpy", [
- function() {
- return {
- registered: [],
- active: {},
- listeners: [],
- register: function(id, element) {
- var anchor, i, registered, top, _i, _len, _ref;
- registered = false;
- top = element.offset().top;
- _ref = this.registered;
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
- anchor = _ref[i];
- if (!(anchor.id === id)) {
- continue;
- }
- this.registered[i] = {
- id: id,
- element: element,
- top: top
- };
- registered = true;
- break;
- }
- if (!registered) {
- this.registered.push({
- id: id,
- element: element,
- top: top
- });
- }
- return this.registered.sort(function(a, b) {
- if (a.top > b.top) {
- return 1;
- } else if (a.top < b.top) {
- return -1;
- }
- return 0;
- });
- },
- unregister: function(id) {
- var anchor, i, _i, _len, _ref, _ref1, _results;
- _ref = this.registered;
- _results = [];
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
- anchor = _ref[i];
- if (!(anchor.id === id)) {
- continue;
- }
- [].splice.apply(this.registered, [i, i - i + 1].concat(_ref1 = [])), _ref1;
- break;
- }
- return _results;
- },
- last: function() {
- return this.registered[this.registered.length - 1];
- },
- setActive: function(anchor) {
- var listener, _i, _len, _ref, _results;
- this.active = anchor;
- _ref = this.listeners;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- listener = _ref[_i];
- _results.push(listener(anchor));
- }
- return _results;
- },
- addListener: function(fn) {
- return this.listeners.push(fn);
- },
- removeListener: function(fn) {
- var index, _ref;
- index = this.listeners.indexOf(fn);
- if (index !== -1) {
- return ([].splice.apply(this.listeners, [index, index - index + 1].concat(_ref = [])), _ref);
- }
- }
- };
- }
-]).constant("scrollSpyDefaults", {
- offset: 0
-});
-
-var __hasProp = {}.hasOwnProperty;
-
-angular.module("Mac.Util", []).factory("util", [
- "$filter", function($filter) {
- return {
- _inflectionConstants: {
- uncountables: ["sheep", "fish", "moose", "series", "species", "money", "rice", "information", "info", "equipment", "min"],
- irregulars: {
- child: "children",
- man: "men",
- woman: "women",
- person: "people",
- ox: "oxen",
- goose: "geese"
- },
- pluralizers: [[/(quiz)$/i, "$1zes"], [/([m|l])ouse$/i, "$1ice"], [/(matr|vert|ind)(ix|ex)$/i, "$1ices"], [/(x|ch|ss|sh)$/i, "$1es"], [/([^aeiouy]|qu)y$/i, "$1ies"], [/(?:([^f])fe|([lr])f)$/i, "$1$2ves"], [/sis$/i, "ses"], [/([ti])um$/i, "$1a"], [/(buffal|tomat)o$/i, "$1oes"], [/(bu)s$/i, "$1ses"], [/(alias|status)$/i, "$1es"], [/(octop|vir)us$/i, "$1i"], [/(ax|test)is$/i, "$1es"], [/x$/i, "xes"], [/s$/i, "s"], [/$/, "s"]]
- },
-
- /*
- @name pluralize
- @description
- Pluralize string based on the count
-
- @param {String} string String to pluralize (default "")
- @param {Integer} count Object counts
- @param {Boolean} includeCount Include the number or not (default false)
-
- @returns {String} Pluralized string based on the count
- */
- pluralize: function(string, count, includeCount) {
- var irregulars, isUppercase, lowercaseWord, pluralizedString, pluralizedWord, pluralizer, pluralizers, uncountables, word, _i, _len, _ref;
- if (string == null) {
- string = "";
- }
- if (includeCount == null) {
- includeCount = false;
- }
- if (!angular.isString(string) || this.trim(string).length === 0) {
- return string;
- }
- if (includeCount && isNaN(+count)) {
- return "";
- }
- if (count == null) {
- count = 2;
- }
- _ref = this._inflectionConstants, pluralizers = _ref.pluralizers, uncountables = _ref.uncountables, irregulars = _ref.irregulars;
- word = string.split(/\s/).pop();
- isUppercase = word.toUpperCase() === word;
- lowercaseWord = word.toLowerCase();
- pluralizedWord = count === 1 || uncountables.indexOf(lowercaseWord) >= 0 ? word : null;
- if (pluralizedWord == null) {
- if (irregulars[lowercaseWord] != null) {
- pluralizedWord = irregulars[lowercaseWord];
- }
- }
- if (pluralizedWord == null) {
- for (_i = 0, _len = pluralizers.length; _i < _len; _i++) {
- pluralizer = pluralizers[_i];
- if (!(pluralizer[0].test(lowercaseWord))) {
- continue;
- }
- pluralizedWord = word.replace(pluralizer[0], pluralizer[1]);
- break;
- }
- }
- pluralizedWord || (pluralizedWord = word);
- if (isUppercase) {
- pluralizedWord = pluralizedWord.toUpperCase();
- }
- pluralizedString = string.slice(0, -word.length) + pluralizedWord;
- if (includeCount) {
- return "" + ($filter("number")(count)) + " " + pluralizedString;
- } else {
- return pluralizedString;
- }
- },
- trim: function(string) {
- var str;
- str = String(string) || "";
- if (String.prototype.trim != null) {
- return str.trim();
- } else {
- return str.replace(/^\s+|\s+$/gm, "");
- }
- },
- capitalize: function(string) {
- var str;
- str = String(string) || "";
- return str.charAt(0).toUpperCase() + str.substring(1);
- },
- uncapitalize: function(string) {
- var str;
- str = String(string) || "";
- return str.charAt(0).toLowerCase() + str.substring(1);
- },
- toCamelCase: function(string) {
- if (string == null) {
- string = "";
- }
- return this.trim(string).replace(/[-_\s]+(.)?/g, function(match, c) {
- return c.toUpperCase();
- });
- },
- toSnakeCase: function(string) {
- if (string == null) {
- string = "";
- }
- return this.trim(string).replace(/([a-z\d])([A-Z]+)/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase();
- },
- convertKeysToCamelCase: function(object) {
- var key, result, value;
- result = {};
- for (key in object) {
- if (!__hasProp.call(object, key)) continue;
- value = object[key];
- key = this.toCamelCase(key);
- if (typeof value === "object" && (value != null ? value.constructor : void 0) !== Array) {
- value = this.convertKeysToCamelCase(value);
- }
- result[key] = value;
- }
- return result;
- },
- convertKeysToSnakeCase: function(object) {
- var key, result, value;
- result = {};
- for (key in object) {
- if (!__hasProp.call(object, key)) continue;
- value = object[key];
- key = this.toSnakeCase(key);
- if (typeof value === "object" && (value != null ? value.constructor : void 0) !== Array) {
- value = this.convertKeysToSnakeCase(value);
- }
- result[key] = value;
- }
- return result;
- },
- pyth: function(a, b) {
- return Math.sqrt(a * a + b * b);
- },
- degrees: function(radian) {
- return (radian * 180) / Math.PI;
- },
- radian: function(degrees) {
- return (degrees * Math.PI) / 180;
- },
- hex2rgb: function(hex) {
- var color, rgb, value;
- if (hex.indexOf('#') === 0) {
- hex = hex.substring(1);
- }
- hex = hex.toLowerCase();
- rgb = {};
- if (hex.length === 3) {
- rgb.r = hex.charAt(0) + hex.charAt(0);
- rgb.g = hex.charAt(1) + hex.charAt(1);
- rgb.b = hex.charAt(2) + hex.charAt(2);
- } else {
- rgb.r = hex.substring(0, 2);
- rgb.g = hex.substring(2, 4);
- rgb.b = hex.substring(4);
- }
- for (color in rgb) {
- value = rgb[color];
- rgb[color] = parseInt(value, 16);
- }
- return rgb;
- },
- timeRegex: /^(0?[1-9]|1[0-2]):([0-5][0-9])[\s]([AP]M)$/,
- _urlRegex: /(?:(http[s]?):\/\/)?(?:(www|[\d\w\-]+)\.)?([\d\w\-]+)\.([A-Za-z]{2,6})(:[\d]*)?([:\/?#\[\]@!$&'()*+,;=\w\d-._~%\\]*)?/i,
- _emailRegex: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/,
- validateUrl: function(url) {
- var match;
- match = this._urlRegex.exec(url);
- if (match != null) {
- match = {
- url: match[0],
- protocol: match[1] || "http",
- subdomain: match[2],
- name: match[3],
- domain: match[4],
- port: match[5],
- path: match[6] || "/"
- };
- match["url"] = match.url;
- }
- return match;
- },
- validateEmail: function(email) {
- return this._emailRegex.test(email);
- },
- getQueryString: function(url, name) {
- var regex, regexS, results;
- if (name == null) {
- name = "";
- }
- name = name.replace(/[[]/, "\[").replace(/[]]/, "\]");
- regexS = "[\?&]" + name + "=([^]*)";
- regex = new RegExp(regexS);
- results = regex.exec(url);
- if (results != null) {
- return results[1];
- } else {
- return "";
- }
- },
- parseUrlPath: function(fullPath) {
- var path, pathComponents, queries, queryString, queryStrings, urlComponents, values, verb, _i, _len, _ref;
- urlComponents = fullPath.split("?");
- pathComponents = urlComponents[0].split("/");
- path = pathComponents.slice(0, pathComponents.length - 1).join("/");
- verb = pathComponents[pathComponents.length - 1];
- queries = {};
- if (urlComponents.length > 1) {
- queryStrings = urlComponents[urlComponents.length - 1];
- _ref = queryStrings.split("&");
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- queryString = _ref[_i];
- values = queryString.split("=");
- queries[values[0]] = values[1] != null ? values[1] : "";
- }
- }
- return {
- fullPath: fullPath,
- path: path,
- pathComponents: pathComponents,
- verb: verb,
- queries: queries
- };
- },
- extendAttributes: function(prefix, defaults, attributes) {
- var altKey, key, macKey, output, value, _ref, _ref1;
- if (prefix == null) {
- prefix = "";
- }
- output = {};
- for (key in defaults) {
- if (!__hasProp.call(defaults, key)) continue;
- value = defaults[key];
- altKey = prefix ? this.capitalize(key) : key;
- macKey = "" + prefix + altKey;
- output[key] = attributes[macKey] != null ? attributes[macKey] || true : value;
- if ((_ref = output[key]) === "true" || _ref === "false") {
- output[key] = output[key] === "true";
- } else if (((_ref1 = output[key]) != null ? _ref1.length : void 0) > 0 && !isNaN(+output[key])) {
- output[key] = +output[key];
- }
- }
- return output;
- }
- };
- }
-]);
-
-})(window, window.angular);
\ No newline at end of file
diff --git a/src/scripts/vendor/macgyver/macgyver.min.js b/src/scripts/vendor/macgyver/macgyver.min.js
deleted file mode 100644
index cc45f51..0000000
--- a/src/scripts/vendor/macgyver/macgyver.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n;m=["Mac.Util"];try{b.module("ngAnimate"),m.push("ngAnimate")}catch(o){}b.module("Mac",m),e=["Top","Right","Bottom","Left"],d=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,n=new RegExp("^("+d+")(?!px)[a-z%]+$","i"),g=function(b){return a.getComputedStyle(b,null)},k=function(a){return a&&a.document&&a.location&&a.alert&&a.setInterval},j=function(a){return a&&null!=a.$evalAsync&&null!=a.$watch},i=function(a){return k(a)?a:9===a.nodeType&&a.defaultView},c=function(a,b,c,d,f){var g,h,i,j;if(c===(d?"border":"content"))return 0;for(i=0,h="Width"===b?1:0,g=j=h;3>=j;g=j+=2)"margin"===c&&(i+=parseFloat(f[""+c+e[g]])),d?("content"===c&&(i-=parseFloat(f["padding"+e[g]])),"margin"!==c&&(i-=parseFloat(f["border"+e[g]]))):(i+=parseFloat(f["padding"+e[g]]),"padding"!==c&&(i+=parseFloat(f["border"+e+"Width"])));return i},h=function(a,b,d){return function(e){var f,h,i,j,l,m,o,p;if(f=function(){switch(b){case"inner":return"padding";case"outer":return"";default:return"content"}}(),i=f||(e===!0?"margin":"border"),k(d))return d.document.documentElement["client"+a];if(9===d.nodeType)return h=d.documentElement,Math.max(d.body["scroll"+a],h["scroll"+a],d.body["offset"+a],h["offset"+a],h["client"+a]);if(p=!0,m=g(d),l=a.toLowerCase(),o="Height"===a?d.offsetHeight:d.offsetWidth,j="border-box"===d.style.boxSizing,0>=o||null===o){if(o=m[l],(0>o||null===o)&&(o=d.style[l]),n.test(o))return o;p=j,o=parseFloat(o)||0}return o+c(d,a,i||(j?"border":"content"),p,m)}},l={height:function(a){return h("Height","",a)()},width:function(a){return h("Width","",a)()},outerHeight:function(a,b){return h("Height","outer",a)(b)},outerWidth:function(a,b){return h("Width","outer",a)(b)},offset:function(a){var b,c,d,e;return b={top:0,left:0},(c=a&&a.ownerDocument)?(d=c.documentElement,null!=a.getBoundingClientRect&&(b=a.getBoundingClientRect()),e=i(c),{top:b.top+e.pageYOffset-d.clientTop,left:b.left+e.pageXOffset-d.clientLeft}):void 0},scrollTop:function(b,c){var d;return d=i(b),null==c?d?d.pageYOffset:b.scrollTop:d?d.scrollTo(a.pageYOffset,c):b.scrollTop=c},scrollLeft:function(b,c){var d;return d=i(b),null==c?d?d.pageXOffset:b.scrollLeft:d?d.scrollTo(a.pageXOffset,c):b.scrollLeft=c}},f=function(){var c;if(null==a.jQuery||null==b.element.prototype.offset)return c=b.element,b.forEach(l,function(a,b){return c.prototype[b]=function(b,c){return this.length?a(this[0],b,c):void 0}})},f(),b.module("Mac").directive("macAffix",["$document","$window",function(a,c){return{link:function(d,e,f){var g,h,i,j,k,l,m,n,o,p;return g={top:0,bottom:0,disabled:!1,classes:"affix affix-top affix-bottom"},k={top:g.top,bottom:g.bottom},h=g.disabled,j=null,o=null,l=null,p=b.element(c),n=function(a,b,c){return null==c&&(c=!1),c&&null==b&&(b=g[a]),null==b||isNaN(+b)?void 0:k[a]=+b},null!=f.macAffixTop&&(n("top",d.$eval(f.macAffixTop),!0),d.$watch(f.macAffixTop,function(a){return n("top",a)})),null!=f.macAffixBottom&&(n("bottom",d.$eval(f.macAffixBottom),!0),d.$watch(f.macAffixBottom,function(a){return n("bottom",a)})),i=function(){var b;return null!=l?l:(e.removeClass(g.classes).addClass("affix"),b=a.height(),l=b-e.outerHeight()-k.bottom)},m=function(){var b,c,d,f,h,l;if(!(e[0].offsetHeight<=0&&e[0].offsetWidth<=0)&&(f=e.offset(),l=p.scrollTop(),h=a.height(),d=e.outerHeight(),b=null!=o&&o>=l?!1:null!=k.bottom&&l>h-d-k.bottom?"bottom":null!=k.top&&l<=k.top?"top":!1,b!==j))return o&&e.css("top",""),j=b,o="bottom"===b?i():null,e.removeClass(g.classes).addClass("affix"+(b?"-"+b:"")),"bottom"===b&&(c=e.offset(),e.css("top",o-c.top)),!0},null!=f.macAffixDisabled&&(h=d.$eval(f.macAffixDisabled)||g.disabled,d.$watch(f.macAffixDisabled,function(a){var b;if(null!=a&&a!==h)return h=a,b=a?"unbind":"bind",p[b]("scroll",m),h?(j=null,o=null,e.css("top","").removeClass(g.classes)):m()})),h||p.bind("scroll",m),d.$on("refresh-mac-affix",function(){var a;return a=e.offset()}),d.$on("$destroy",function(){return p.unbind("scroll",m)})}}}]),b.module("Mac").directive("macAutocomplete",["$animate","$compile","$filter","$http","$parse","$rootScope","$timeout","keys",function(c,d,e,f,g,h,i,j){return{restrict:"EA",template:'',transclude:!0,replace:!0,require:"ngModel",link:function(h,k,l,m,n){var o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L;return z=l.macAutocompleteLabel||"name",y=g(z),H=l.macAutocompleteQuery||"q",t=+(l.macAutocompleteDelay||800),w=null!=l.macAutocompleteInside,q=g(l.macAutocompleteUrl),C=g(l.macAutocompleteOnSelect),D=g(l.macAutocompleteOnSuccess),B=g(l.macAutocompleteOnError),J=g(l.macAutocompleteSource),u=g(l.macAutocompleteDisabled),s=[],K=null,x=!1,F=!1,o=h.$new(),o.items=[],o.index=0,o.select=function(a){var b,c;return c=s[a],C(h,{selected:c}),b=o.items[a].label||"",F=!0,null!=l.ngModel&&(m.$setViewValue(b),m.$render()),I()},A=b.element(document.createElement("mac-menu")),A.attr({"ng-class":l.macMenuClass||null,"mac-menu-items":"items","mac-menu-select":"select(index)","mac-menu-index":"index"}),n(o,function(a){return A.append(a)}),d(A)(o),m.$parsers.push(function(a){return!a||u(h)||F?I():(null!=K&&i.cancel(K),t>0?K=i(function(){return G(a)},t):G(a)),F=!1,a}),r=function(){return h.$apply(function(){return I()})},p=function(a){return x||(k.bind("blur",r),A.on("mousedown",function(a){return a.preventDefault()})),x=!0,w?c.enter(A,void 0,k,a):c.enter(A,b.element(document.body),void 0,a)},I=function(){c.leave(A,function(){return o.index=0,o.items.length=0,A[0].style.top="",A[0].style.left="",x=!1,k.unbind("blur",r)})},E=function(){var c,d,e;return d=w?k[0]:document.body,e=a.getComputedStyle(d),c=k.offset(),c.left-=parseInt(e.marginLeft),c.top+=k.outerHeight()-parseInt(e.marginTop),c.minWidth=k.outerWidth(),b.forEach(c,function(a,c){return!isNaN(+a)&&b.isNumber(+a)&&(a=""+a+"px"),A[0].style[c]=a})},L=function(a){return(null!=a?a.length:void 0)>0?(s=a,o.items=a.map(function(a){return b.isObject(a)?(null==a.value&&(a.value=y(a)||""),null==a.label&&(a.label=y(a)||""),a):{label:a,value:a}}),p(E)):I()},v=function(a,b){var c;return c={method:"GET",url:a,params:{}},c.params[H]=b,f(c).success(function(a,b,c){var d;return d=D(h,{data:a,status:b,headers:c}),null==d&&(d=a.data),L(d)}).error(function(a,b,c){return B(h,{data:a,status:b,headers:c})})},G=function(a){var c,d;return d=q(h),d?v(d,a):(c=J(h),b.isArray(c)?L(e("filter")(c,a)):b.isString(c)?v(c,a):b.isFunction(c)?c(a,L):void 0)},k.bind("keydown",function(a){if(0===o.items.length)return!0;switch(a.which){case j.DOWN:h.$apply(function(){return o.index=(o.index+1)%o.items.length,a.preventDefault()});break;case j.UP:h.$apply(function(){return o.index=(o.index?o.index:o.items.length)-1,a.preventDefault()});break;case j.ENTER:h.$apply(function(){return o.select(o.index),a.preventDefault()});break;case j.ESCAPE:h.$apply(function(){return I(),a.preventDefault()})}return!0}),h.$on("$destroy",function(){return o.$destroy(),I()}),h.$on("reset-mac-autocomplete",function(){return I()})}}}]),b.module("Mac").directive("macCspinner",["$timeout","util",function(c,d){return{restrict:"E",replace:"true",template:'',compile:function(e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F;if(!a.HTMLCanvasElement)return console.log("Browser does not support canvas");if(j={width:2,height:5,border:1,radius:4,bars:10,padding:3,speed:100,color:"#2f3035",size:20},q=d.extendAttributes("macCspinner",j,f),null!=f.macCspinnerSize&&(x=!isNaN(+f.macCspinnerSize)&&+f.macCspinnerSize))for(t=x/j.size,E=["width","height","border","radius"],B=0,D=E.length;D>B;B++)r=E[B],q[r]=j[r]*t;for(A=q.width,k=q.height,s=q.border,o=q.radius+k,n=Math.max(A,o),h=Math.ceil(Math.max(n,d.pyth(o,A/2))),h+=q.padding,y=b.element(""),i=y[0].getContext("2d"),v=d.radian(360/q.bars),i.translate(h,h),z=-o,m=-A/2,u=d.hex2rgb(q.color),l=C=0,F=q.bars-1;F>=0?F>=C:C>=F;l=F>=0?++C:--C)p=1-.8/q.bars*l,i.fillStyle="rgba("+u.r+", "+u.g+", "+u.b+", "+p+")",i.beginPath(),i.moveTo(m+s,z),i.arc(m+A-s,z+s,s,d.radian(-90),d.radian(0),!1),i.arc(m+A-s,z+k-s,s,d.radian(0),d.radian(90),!1),i.arc(m+s,z+k-s,s,d.radian(90),d.radian(180),!1),i.arc(m+s,z+s,s,d.radian(-180),d.radian(-90),!1),i.closePath(),i.fill(),i.rotate(v);return g=b.element(""),g.attr({width:2*h,height:2*h}),w=g[0].getContext("2d"),w.translate(h,h),e.append(g),function(a,b,e){var f,g,i,j;return f=null,g=!1,j=function(){return g=!1,null!=f?c.cancel(f):void 0},i=function(){var a,e;if(!g)return g=!0,e=d.radian(360/q.bars),(a=function(d){return null==d&&(d=!1),w.clearRect(-h,-h,2*h,2*h),w.rotate(e),w.drawImage(y[0],-h,-h),g?!d&&b[0].offsetHeight<=0&&b[0].offsetWidth<=0?j():f=c(a,q.speed,!1):void 0})(!0)},null!=e.macCspinnerSpin?a.$watch(e.macCspinnerSpin,function(a){return a&&!g?i():j()}):i(),e.ngShow?a.$watch(e.ngShow,function(a){return a?i():j()}):e.ngHide&&a.$watch(e.ngHide,function(a){return a?j():i()}),a.$on("$destroy",function(){return j()})}}}}]);var p,q,r,s,t;for(t=["Enter","Escape","Space","Left","Up","Right","Down"],q=function(a){return b.module("Mac").directive("macKeydown"+a,["$parse","keys",function(b,c){return{restrict:"A",link:function(d,e,f){var g;return g=b(f["macKeydown"+a]),e.bind("keydown",function(b){return b.which===c[""+a.toUpperCase()]?(b.preventDefault(),d.$apply(function(){return g(d,{$event:b})})):void 0})}}}])},r=0,s=t.length;s>r;r++)p=t[r],q(p);b.module("Mac").directive("macPauseTyping",["$parse","$timeout",function(a,b){return{restrict:"A",link:function(c,d,e){var f,g,h;return g=a(e.macPauseTyping),f=c.$eval(e.macPauseTypingDelay)||800,h=null,d.bind("keyup",function(a){return null!=h&&b.cancel(h),h=b(function(){return g(c,{$event:a})},f)})}}}]),b.module("Mac").directive("macWindowResize",["$parse","$window",function(a,c){return{restrict:"A",link:function(d,e,f){var g;return g=function(b){var c;return c=a(f.macWindowResize),d.$apply(function(){return c(d,{$event:b})}),!0},b.element(c).bind("resize",g),d.$on("destroy",function(){return b.element(c).unbind("resize",g)})}}}]),b.module("Mac").directive("macFocusOnEvent",["$timeout",function(b){return function(c,d,e){return c.$on(e.macFocusOnEvent,function(){return b(function(){var b,c;return d.focus(),e.macFocusOnEventScroll?(b=a.scrollX,c=a.scrollY,a.scrollTo(b,c)):void 0},0,!1)})}}]),b.module("Mac").factory("keys",function(){return{CANCEL:3,HELP:6,BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,RETURN:13,SHIFT:16,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,SEMICOLON:59,EQUALS:61,COMMAND:91,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUMPAD0:96,NUMPAD1:97,NUMPAD2:98,NUMPAD3:99,NUMPAD4:100,NUMPAD5:101,NUMPAD6:102,NUMPAD7:103,NUMPAD8:104,NUMPAD9:105,MULTIPLY:106,ADD:107,SEPARATOR:108,SUBTRACT:109,DECIMAL:110,DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,F16:127,F17:128,F18:129,F19:130,F20:131,F21:132,F22:133,F23:134,F24:135,NUM_LOCK:144,SCROLL_LOCK:145,COMMA:188,PERIOD:190,SLASH:191,BACK_QUOTE:192,OPEN_BRACKET:219,BACK_SLASH:220,CLOSE_BRACKET:221,QUOTE:222,META:224}}),b.module("Mac").directive("macMenu",[function(){return{restrict:"EA",replace:!0,template:'',transclude:!0,controller:b.noop,scope:{items:"=macMenuItems",style:"=macMenuStyle",select:"&macMenuSelect",pIndex:"=macMenuIndex"},link:function(a,b,c){return a.selectItem=function(b){return a.select({index:b})},a.setIndex=function(b){return a.index=b,null!=c.macMenuIndex?a.pIndex=parseInt(b):void 0},null!=c.macMenuIndex&&a.$watch("pIndex",function(b){return a.index=parseInt(b)}),a.$watch("items.length",function(a){return a?c.$addClass("visible"):c.$removeClass("visible")})}}}]).directive("macMenuTransclude",["$compile",function(a){return{link:function(b,c,d,e,f){return f(b,function(d){return c.empty(),0===d.length&&(d=a("{{item.label}}")(b)),c.append(d)})}}}]),b.module("Mac").directive("macModal",["$parse","modal","modalViews","util",function(a,c,d,e){return{restrict:"E",template:c.modalTemplate,replace:!0,transclude:!0,link:function(f,g,h,i,j){var k,l,m,n,o,p,q,r;for(j(f,function(a){return b.element(g[0].getElementsByClassName("mac-modal-content-wrapper")).replaceWith(a)}),m=e.extendAttributes("macModal",d.defaults,h),n=null,m.overlayClose&&g.on("click",function(a){return b.element(a.target).hasClass("mac-modal-overlay")?f.$apply(function(){return c.hide()}):void 0}),r=["beforeShow","afterShow","beforeHide","afterHide","open"],p=0,q=r.length;q>p;p++)k=r[p],l="macModal"+e.capitalize(k),m[k]=a(h[l])||b.noop;return o=function(a){return null!=a&&a?(n=a,c.register(a,g,m)):void 0},h.id?o(h.id):h.$observe("macModal",function(a){return o(a)}),f.$on("$destroy",function(){return n?c.unregister(n):void 0})}}}]).directive("macModal",["$parse","modal",function(a,b){return{restrict:"A",link:function(c,d,e){e.macModal&&d.bind("click",function(){return c.$apply(function(){var d;return d=a(e.macModalData)(c)||{},b.show(e.macModal,{data:d,scope:c})})})}}}]).directive("macModalClose",["modal",function(a){return{restrict:"A",link:function(b,c){return c.bind("click",function(){return b.$apply(function(){return a.hide()})})}}}]),b.module("Mac").directive("macPlaceholder",function(){return{restrict:"A",link:function(a,b,c){return a.$watch(c.macPlaceholder,function(a){return c.$set("placeholder",a)})}}});var u=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b.module("Mac").directive("macPopover",["$timeout","popover","util","popoverViews",function(a,b,c,d){return{restrict:"A",link:function(e,f,g){var h,i,j,k,l,m,n,o;return n=c.extendAttributes("macPopover",d.defaults,g),k=g.macPopoverExclude||"",l=k?k.split(","):[],j=null,i=null,h=function(){return null!=j&&a.cancel(j),null!=i?a.cancel(i):void 0},o=function(c,d){return null==d&&(d=0),h(),j=a(function(){var a,d;return a=b.last(),null!=a&&(!l.length||(d=a.id,u.call(l,d)>=0)||a.id===c)&&(b.hide(),f[0]===a.element[0])?!0:(n.scope=e,b.show(c,f,n))},d),!0},m=function(c,d){return null==d&&(d=0),h(),i=a(function(){return b.hide(c)},d)},g.$observe("macPopover",function(a){var b,c;if(a)return"click"===n.trigger?f.bind("click",function(){return o(a,0)}):(c="focus"===n.trigger?"focusin":"mouseenter",b="focus"===n.trigger?"focusout":"mouseleave",f.bind(c,function(){return o(a,400)}),f.bind(b,function(){return m(f,500)}))})}}}]).directive("macPopover",["popover","popoverViews","util",function(a,c,d){return{restrict:"E",compile:function(e,f){var g;if(!f.id)throw Error("macPopover: Missing id");return g=d.extendAttributes("macPopover",c.popoverDefaults,f),b.extend(g,{template:e.html()}),function(b,c,d){return d.$observe("id",function(b){return a.register(b,g),c.replaceWith(document.createComment("macPopover: "+d.id))})}}}}]).directive("macPopoverFillContent",["$compile",function(a){return{restrict:"A",link:function(b,c){return c.html(b.macPopoverTemplate),a(c.contents())(b)}}}]),b.module("Mac").directive("macScrollSpy",["$window","scrollSpy","scrollSpyDefaults","util",function(a,c,d,e){return{link:function(f,g,h){var i,j;return i=e.extendAttributes("macScrollSpy",d,h),j="BODY"===g[0].tagName?b.element(a):g,j.bind("scroll",function(){var a,b,d,e,h,k,l;if(h=j.scrollTop()+i.offset,e=this.scrollHeight||g[0].scrollHeight,d=e-j.height(),!c.registered.length)return!0;if(h>=d)return c.setActive(c.last());for(b=k=0,l=c.registered.length-1;l>=0?l>=k:k>=l;b=l>=0?++k:--k)if(a=c.registered,c.active.id!==a[b].id&&h>=a[b].top&&(!a[b+1]||h<=a[b+1].top))return f.$apply(function(){return c.setActive(a[b])}),!0})}}}]).directive("macScrollSpyAnchor",["scrollSpy",function(a){return{link:function(b,c,d){var e,f,g,h;if(e=d.id||d.macScrollSpyAnchor,g=!1,!e)throw new Error("Missing scroll spy anchor id");return h=function(){return a.register(e,c),g||b.$on("$destroy",function(){return a.unregister(e)}),g=!0},b.$on("refresh-scroll-spy",h),/{{(.*)}}/.test(e)?(f=d.id?"id":"macScrollSpyAnchor",d.$observe(f,function(a){return null!=a&&a?(e=a,h()):void 0})):h()}}}]).directive("macScrollSpyTarget",["scrollSpy",function(a){return{link:function(b,c,d){var e,f,g,h;if(h=d.macScrollSpyTarget,e=d.macScrollSpyTargetClass||"active",g=!1,!h)throw new Error("Missing scroll spy target name");return f=function(d){var f;if(d)return f=function(a){var b;return b=d===a.id?"addClass":"removeClass",c[b](e)},null!=a.active&&f(a.active),g?void 0:(a.addListener(f),b.$on("$destroy",function(){return a.removeListener(f)}))},/{{(.*)}}/.test(h)?d.$observe("macScrollSpyTarget",function(a){return f(a)}):f(h)}}}]),b.module("Mac").directive("macSpinner",["util",function(a){return{restrict:"E",replace:!0,template:'',compile:function(c){var d,e,f,g,h,i,j,k,l,m;for(i=["webkit","Moz","ms","O"],l=function(b,c){var d,e,f;for(c=a.capitalize(c),e=0,f=i.length;f>e;e++)if(d=i[e],null!=b.style[d+c])return d+c;return c},d=l(c[0],"animation"),k=l(c[0],"transform"),h=m=0;9>=m;h=++m)g=.1*h-1+!h,f=36*h,j={},e=b.element(''),j[d]="fade 1s linear infinite "+g+"s",j[k]="rotate("+f+"deg) translate(0, 130%)",e.css(j),c.append(e);return function(a,c,d){var e,f,g;return f={size:16,zIndex:"inherit",color:"#2f3035"},e=b.element(c[0].getElementsByClassName("bar")),g=function(a){return e.css({height:.32*a+"px",left:.445*a+"px",top:.37*a+"px",width:.13*a+"px",borderRadius:.32*a*2+"px",position:"absolute"}),!isNaN(+a)&&b.isNumber(+a)&&(a=""+a+"px"),c.css({height:a,width:a})},null!=d.macSpinnerSize?d.$observe("macSpinnerSize",function(a){return null!=a&&a?g(a):void 0}):g(f.size),d.$observe("macSpinnerZIndex",function(a){return null!=a&&a?c.css("z-index",a):void 0}),null!=d.macSpinnerColor?d.$observe("macSpinnerColor",function(a){return null!=a&&a?e.css("background",a):void 0}):e.css("background",f.color)}}}}]);var u=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b.module("Mac").directive("macTagAutocomplete",["$parse","$timeout","keys","util",function(a,c,d,e){return{restrict:"E",template:'',replace:!0,priority:800,scope:{url:"=macTagAutocompleteUrl",placeholder:"=macTagAutocompletePlaceholder",selected:"=macTagAutocompleteSelected",source:"=macTagAutocompleteSource",disabled:"=macTagAutocompleteDisabled",model:"=macTagAutocompleteModel",onEnter:"&macTagAutocompleteOnEnter",onKeydown:"&macTagAutocompleteOnKeydown"},compile:function(f,g){var h,i,j,k,l,m,n,o,p;return p=g.macTagAutocompleteValue,null==p&&(p="id"),o=a(p),k=g.macTagAutocompleteLabel,null==k&&(k="name"),j=a(k),l=g.macTagAutocompleteQuery||"q",i=+g.macTagAutocompleteDelay||800,n=!1,m=b.element(f[0].getElementsByClassName("mac-autocomplete")),h={"mac-autocomplete-label":k,"mac-autocomplete-query":l,"mac-autocomplete-delay":i},null!=g.macTagAutocompleteUrl?h["mac-autocomplete-url"]="url":(n=null!=g.macTagAutocompleteSource)&&(h["mac-autocomplete-source"]="autocompleteSource"),m.attr(h),function(f,g,h){var i,l;return f.textInput="",f.autocompleteSource=b.isArray(f.source)?[]:f.source,null!=h.macTagAutocompleteModel&&(f.$watch("textInput",function(a){return f.model=a}),f.$watch("model",function(a){return f.textInput=a})),f.focusTextInput=function(){var a;return a=g[0].getElementsByClassName("mac-autocomplete"),a[0].focus()},f.getTagLabel=function(a){return k?j(a):a},c(function(){var c,d,i,j,k,l,n,o;if(i=h.macTagAutocompleteEvents){for(m=b.element(g[0].getElementsByClassName("text-input")),n=i.split(","),o=[],k=0,l=n.length;l>k;k++)j=n[k],j=e.trim(j),c=e.capitalize(j),d=h["macTagAutocompleteOn"+c],d&&"keydown"!==j&&o.push(function(b,c){return m.bind(b,function(b){var d;return d=a(c),f.$apply(function(){return d(f.$parent,{$event:b,item:f.textInput})})})}(j,d));return o}},0,!1),i=function(){var a,c,d,e,g;return f.autocompletePlaceholder=(null!=(g=f.selected)?g.length:void 0)?"":f.placeholder,n&&b.isArray(f.source)?(e=function(){var a,b,d,e;for(d=f.source||[],e=[],a=0,b=d.length;b>a;a++)c=d[a],e.push(o(c));return e}(),d=function(){var a,b,d,e;for(d=f.selected||[],e=[],a=0,b=d.length;b>a;a++)c=d[a],e.push(o(c));return e}(),a=function(){var a,b,f;for(f=[],a=0,b=e.length;b>a;a++)c=e[a],u.call(d,c)<0&&f.push(c);return f}(),f.autocompleteSource=function(){var b,d,e,g,h;for(e=f.source||[],h=[],b=0,d=e.length;d>b;b++)c=e[b],g=o(c),u.call(a,g)>=0&&h.push(c);return h}()):void(f.autocompleteSource=f.source)},n&&(l=b.isArray(f.source)?"$watchCollection":"$watch",f[l]("source",i)),f.$watchCollection("selected",i),f.onKeyDown=function(a){var b,c;switch(b=a.which||a.keyCode){case d.BACKSPACE:f.textInput||"function"==typeof(c=f.selected).pop&&c.pop();break;case d.ENTER:f.textInput.length>0&&f.disabled&&f.onSelect(f.textInput)}return null!=h.macTagAutocompleteOnKeydown&&"function"==typeof f.onKeydown&&f.onKeydown({$event:a,value:f.textInput}),!0},f.onSuccess=function(a){var b,c;return b=function(){var a,b,d,e;for(d=f.selected||[],e=[],a=0,b=d.length;b>a;a++)c=d[a],e.push(o(c));return e}(),function(){var d,e,f,g,h;for(f=a.data,h=[],d=0,e=f.length;e>d;d++)c=f[d],g=o(c)||c,u.call(b,g)<0&&h.push(c);return h}()},f.onSelect=function(a){return null!=h.macTagAutocompleteOnEnter&&(a=f.onEnter({item:a})),a&&f.selected.push(a),c(function(){return f.textInput=""},0)},f.$on("mac-tag-autocomplete-clear-input",function(){return f.textInput=""})}}}}]),b.module("Mac").directive("macTime",["$filter","$timeout","keys","util",function(a,b,c,d){var e;return e={"default":"12:00 AM"},{restrict:"E",require:"ngModel",replace:!0,template:'',link:function(f,g,h,i){var j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;return n=d.extendAttributes("macTime",e,h),v=null,h.placeholder||h.$set("placeholder","--:--"),w=function(a){return!a||d.timeRegex.exec(a)?(i.$setValidity("time",!0),a):void i.$setValidity("time",!1)},i.$formatters.push(w),i.$parsers.push(w),(m=function(){var a;return a=(new Date).toDateString(),v=new Date(a+" "+n["default"]),isNaN(v.getTime())?v=new Date(a+" "+e["default"]):void 0})(),j=function(){var a;switch(a=g[0].selectionStart,!1){case!(a>=0&&3>a):return"hour";case!(a>=3&&6>a):return"minute";case!(a>=6&&9>a):return"meridian"}},t=function(a,c){return b(function(){return g[0].setSelectionRange(a,c)},0,!1)},o=function(){return t(0,2)},q=function(){return t(3,5)},p=function(){return t(6,8)},r=function(){switch(j()){case"hour":return q();case"minute":case"meridian":return p()}},s=function(){switch(j()){case"hour":case"minute":return o();case"meridian":return q()}},u=function(a){var b;return b=v.getHours(),b>=12&&"AM"===a&&(b-=12),12>b&&"PM"===a&&(b+=12),v.setHours(b)},x=function(){var a;return a=v.getHours(),v.setHours((a+12)%24)},k=function(a){return v.setHours(v.getHours()+a)},l=function(a){return v.setMinutes(v.getMinutes()+a)},y=function(){var b;return b=a("date")(v.getTime(),"hh:mm a"),b!==i.$viewValue?(i.$setViewValue(b),i.$render()):void 0},z=function(){var a,b,c,e;return(e=d.timeRegex.exec(i.$modelValue))?(a=+e[1],c=+e[2],b=e[3],"PM"===b&&12!==a&&(a+=12),"AM"===b&&12===a&&(a=0),v.setHours(a,c)):void 0},g.on("blur",function(){return f.$apply(function(){return y()})}),g.on("click",function(){return f.$apply(function(){switch(z(),y(),j()){case"hour":return o();case"minute":return q();case"meridian":return p()}})}),g.on("keydown",function(a){var b;return b=a.which,b!==c.UP&&b!==c.DOWN&&b!==c.LEFT&&b!==c.RIGHT&&b!==c.A&&b!==c.P?!0:(a.preventDefault(),f.$apply(function(){var a,d;switch(b){case c.UP:case c.DOWN:switch(a=b===c.UP?1:-1,j()){case"hour":k(a),o();break;case"minute":l(a),q();break;case"meridian":x(),p()}return y();case c.LEFT:case c.RIGHT:switch(b){case c.LEFT:s();break;case c.RIGHT:r()}return y();case c.A:case c.P:switch(d="meridian"===j(),!1){case!(d&&b===c.A):u("AM");break;case!(d&&b===c.P):u("PM")}return y(),p()}}))}),g.on("keyup",function(a){var b;return b=a.which,c.NUMPAD0<=b&&b<=c.NUMPAD9||c.ZERO<=b&&b<=c.NINE||a.preventDefault(),f.$apply(function(){return z()})})}}}]),b.module("Mac").directive("macTooltip",["$timeout","util",function(a,c){return{restrict:"A",link:function(d,e,f){var g,h,i,j,k,l,m,n,o;return o=null,m="",i=!1,h=!1,g={direction:"top",trigger:"hover",inside:!1},j=c.extendAttributes("macTooltip",g,f),l=function(){var a,c,d,f;if(h||!m)return!0;switch(d=j.inside?e:b.element(document.body),k(0),o=b.element('"),d.append(o),c=j.inside?{top:0,left:0}:e.offset(),a={width:e.outerWidth(),height:e.outerHeight()},f={width:o.outerWidth(),height:o.outerHeight()},j.direction){case"bottom":case"top":c.left+=a.width/2-f.width/2;break;case"left":case"right":c.top+=a.height/2-f.height/2}switch(j.direction){case"bottom":c.top+=a.height;break;case"top":c.top-=f.height;break;case"left":c.left-=f.width;break;case"right":c.left+=a.width}return c.top=Math.max(0,c.top),c.left=Math.max(0,c.left),b.forEach(c,function(a,c){return!isNaN(+a)&&b.isNumber(+a)&&(a=""+a+"px"),o.css(c,a)}),o.addClass("visible"),!0},k=function(b){return null==b&&(b=100),null!=o&&(o.removeClass("visible"),a(function(){return null!=o&&o.remove(),o=null},b,!1)),!0},n=function(){return null!=o?k():l()},f.$observe("macTooltip",function(a){var b;if(null!=a&&(m=a,!i)){if("hover"!==(b=j.trigger)&&"click"!==b)throw"Invalid trigger";switch(j.trigger){case"click":e.bind("click",n);break;case"hover":e.bind("mouseenter",l),e.bind("mouseleave click",function(){return k()})}return i=!0}}),null!=f.macTooltipDisabled&&d.$watch(f.macTooltipDisabled,function(a){return h=a}),d.$on("$destroy",function(){return null!=o?k(0):void 0})}}}]),b.module("Mac").filter("boolean",function(){return function(a,b,c){return null==b&&(b="true"),null==c&&(c="false"),a?b:c}}),b.module("Mac").filter("true",function(){return function(a,b){return null==b&&(b="true"),a?b:""}}),b.module("Mac").filter("false",function(){return function(a,b){return null==b&&(b="false"),a?"":b}}),b.module("Mac").filter("list",[function(){return function(a,b){return null==b&&(b=", "),a.join(b)}}]),b.module("Mac").filter("pluralize",["util",function(a){return function(b,c,d){return null==d&&(d=!0),a.pluralize(b,c,d)}}]),b.module("Mac").filter("timestamp",["util",function(a){var b;return b=function(b,c){return c=a.pluralize(c,b),""+b+" "+c+" ago"},function(a){var c,d,e,f,g,h,i,j;return a=+a,c=Math.round(Date.now()/1e3),h=c-a,45>h?"just now":120>h?"about a minute ago":(j=Math.floor(h/31536e3),j>0?b(j,"year"):(g=Math.floor(h/2678400),g>0?b(g,"month"):(i=Math.floor(h/604800),i>0?b(i,"week"):(d=Math.floor(h/86400),d>0?b(d,"day"):(e=Math.floor(h/3600),e>0?b(e,"hour"):(f=Math.floor(h/60),f>0?b(f,"min"):""+h+" seconds ago"))))))}}]);var v=[].slice;b.module("Mac").filter("underscoreString",function(){return function(){var a,b,c;return c=arguments[0],a=arguments[1],b=3<=arguments.length?v.call(arguments,2):[],b.unshift(c),_.string[a].apply(this,b)}}),b.module("Mac").service("modal",["$rootScope","$animate","$templateCache","$compile","$http","$controller","modalViews","keys",function(c,d,e,f,g,h,i,k){return{registered:i.registered,waiting:null,opened:null,modalTemplate:'',show:function(a,i){var k,l,m,n,o,p,q;if(null==i&&(i={}),null!=this.registered[a]&&null!=this.opened)return this.hide();if(null==this.registered[a])return this.waiting={id:a,options:i};if(k=this.registered[a],l=k.options,p={},b.extend(p,l,i),o=function(b){return function(e){return p.beforeShow(e.scope()),d.removeClass(e,"hide",function(){return d.addClass(e,"visible",function(){return b.opened={id:a,element:e,options:p},b.resize(b.opened),b.bindingEvents(),p.open(e.scope()),p.afterShow(e.scope()),c.$broadcast("modalWasShown",a),b.clearWaiting()})})}}(this),null!=p.moduleMethod){if(n=function(e){return function(g){var i,k,l;return j(p.scope)?k=p.scope:(k=c.$new(!0),b.isObject(p.scope)&&b.extend(k,p.scope)),b.extend(p.attributes,{id:a}),i=b.element(e.modalTemplate).attr(p.attributes),l=b.element(i[0].getElementsByClassName("mac-modal-content-wrapper")),l.html(g),p.overlayClose&&i.bind("click",function(a){return b.element(a.target).hasClass("mac-modal-overlay")?k.$apply(function(){return e.hide()}):void 0}),p.controller&&h(p.controller,{$scope:k,$element:i,macModalOptions:p}),d.enter(i,b.element(document.body)),f(i)(k),o(i)}}(this),m=p.templateUrl)return q=e.get(m),q?n(q):g.get(m).then(function(a){return e.put(m,a.data),n(a.data)},function(){throw Error("Failed to load template: "+m)});if(q=p.template)return n(q)}else if(null!=k.element)return o(k.element)},resize:function(c){var d,e,f,g,h,i;return null==c&&(c=this.opened),null!=c&&(e=c.element,h=c.options,h.position)?(g=b.element(e[0].getElementsByClassName("mac-modal")).attr("style",""),f=g.outerHeight(),i=g.outerWidth(),d=b.element(a).height()>f?{marginTop:-f/2}:{top:h.topOffset},d.marginLeft=-i/2,b.forEach(d,function(a,c){return!isNaN(+a)&&b.isNumber(+a)&&(a=""+a+"px"),g.css(c,a)})):void 0},hide:function(a){var b,e,f,g;if(null!=this.opened)return g=this.opened,e=g.id,f=g.options,b=g.element,f.beforeHide(b.scope()),d.removeClass(b,"visible",function(g){return function(){return g.bindingEvents("unbind"),g.opened=null,f.moduleMethod?(j(f.scope)||b.scope().$destroy(),d.leave(b)):d.addClass(b,"hide"),f.afterHide(b.scope()),c.$broadcast("modalWasHidden",e),a&&a()}}(this))},bindingEvents:function(c){var d,e,f;return null==c&&(c="bind"),"bind"!==c&&"unbind"!==c||null==this.opened?void 0:(d=function(a){return function(b){return b.which===k.ESCAPE?a.hide():void 0}}(this),f=function(a){return function(){return a.resize()}}(this),e=this.opened.options,e.keyboard&&b.element(document)[c]("keydown",d),e.resize?b.element(a)[c]("resize",f):void 0)},register:function(a,c,d){var e;if(null!=this.registered[a])throw new Error("Modal "+a+" already registered");return e={},b.extend(e,i.defaults,d),this.registered[a]={id:a,element:c,options:e},null!=this.waiting&&this.waiting.id===a?this.show(a,this.waiting.options):void 0},unregister:function(a){var b;if(null==this.registered[a])throw new Error("Modal "+a+" is not registered");return(null!=(b=this.opened)?b.id:void 0)===a&&this.hide(),this.clearWaiting(a),delete this.registered[a]},clearWaiting:function(a){var b;if(null==a||(null!=(b=this.waiting)?b.id:void 0)===a)return this.waiting=null}}}]).provider("modalViews",function(){return this.registered={},this.defaults={keyboard:!1,overlayClose:!1,resize:!0,position:!0,open:b.noop,topOffset:20,attributes:{},beforeShow:b.noop,afterShow:b.noop,beforeHide:b.noop,afterHide:b.noop},this.$get=function(){return this},this}).config(["modalViewsProvider",function(a){return b.module("Mac").modal=function(c,d){var e;
-return null==a.registered[c]?(e={},b.extend(e,a.defaults,d,{moduleMethod:!0}),a.registered[c]={id:c,options:e}):void 0}}]),b.module("Mac").provider("popoverViews",function(){return this.registered={},this.defaults={fixed:!1,childPopover:!1,offsetY:0,offsetX:0,trigger:"click"},this.popoverDefaults={footer:!1,header:!1,title:"",direction:"above left"},this.template='',this.$get=function(){return this},this}).service("popover",["$animate","$compile","$controller","$http","$rootScope","$templateCache","$timeout","popoverViews",function(c,d,e,f,g,h,i,k){var l;return l={popoverList:[],registered:k.registered,last:function(){return this.popoverList[this.popoverList.length-1]},register:function(a,b){var c;return(c=null!=this.registered[a])||(this.registered[a]=b),!c},unregister:function(a){var b;return(b=null!=this.registered[a])&&delete this.registered[a],b},add:function(a,b,c,d){var e;return e={id:a,popover:b,element:c,options:d},this.popoverList.push(e),e},pop:function(){return this.popoverList.pop()},show:function(a,i,m){var n,o;return null==m&&(m={}),(o=this.registered[a])?(n=function(){var n,p,q;return p=function(f){var h,n,p;return j(m.scope)?p=m.scope.$new():(p=g.$new(!0),b.isObject(m.scope)&&b.extend(p,m.scope)),o.refreshOn&&p.$on(o.refreshOn,function(){return l.resize(a)}),o.controller&&e(o.controller,{$scope:p}),b.extend(p,{macPopoverClasses:{footer:o.footer||!1,header:o.header||!!o.title||!1,fixed:o.fixed||!1},macPopoverTitle:o.title||"",macPopoverTemplate:f}),h=d(k.template)(p),h.attr({id:a,direction:o.direction||"below left"}),n=l.add(a,h,i,m),c.addClass(i,"active"),g.$broadcast("popoverWasShown",a),c.enter(h,b.element(document.body),null,function(){return l.resize(n)})},(q=o.template)?p(q):(n=o.templateUrl)?(q=h.get(n),q?p(q):f.get(n).then(function(a){return h.put(n,a.data),p(a.data)},function(){throw new Error("Failed to load template: #{path}")})):void 0},l.popoverList.length&&!m.childPopover?l.hide(n):n(),!0):!1},getById:function(a,b){var c,d,e,f,g;for(g=this.popoverList,e=0,f=g.length;f>e;e++)if(c=g[e],d=null==b||c.element===b,c.id===a&&d)return c},resize:function(c){var d,e,f,g,h,i,j,k,m,n,o,p,q,r,s,t;return b.isString(c)&&(c=l.getById(c)),null!=c?(g=c.popover,p=c.element,m=c.options,d=b.element(a),k=p.offset(),m.fixed&&(k.top=p.position().top),o={height:p.outerHeight(),width:p.outerWidth()},f={height:g.outerHeight(),width:g.outerWidth()},r=0,i=0,n=(g.attr("direction")||"top left").trim(),q=function(a){var c,d;return null==a&&(a=0),c=b.element(g[0].getElementsByClassName("tip")),r-=a,d=+c.css("margin-top").replace("px",""),c.css("margin-top",d+a)},t=function(){switch(n){case"above left":return r=-(f.height+10),i=-25+o.width/2;case"above right":return r=-(f.height+10),i=25+o.width/2-f.width;case"below left":return r=o.height+10,i=-25+o.width/2;case"below right":return r=o.height+10,i=25+o.width/2-f.width;case"middle right":return r=o.height/2-f.height/2,i=o.width+10;case"middle left":return r=o.height/2-f.height/2,i=-(f.width+10)}},t(),s=m.fixed?0:d.scrollTop(),j=m.fixed?0:d.scrollLeft(),e={},-1===n.indexOf("middle")?k.top+r-s<0?e={remove:"above",add:"below"}:k.top+r+f.height-s>d.height()&&(e={remove:"below",add:"above"}):(h=k.top+r-s)<0?q(h):(h=k.top+r+g.outerHeight()-s-d.height())>0&&q(h),e.remove&&e.add&&(n=n.replace(e.remove,e.add)),e={},k.left+i-j<0?e={remove:"right",add:"left"}:k.left+i+g.outerWidth()-j>d.width()&&(e={remove:"left",add:"right"}),e.remove&&e.add&&(n=n.replace(e.remove,e.add)),t(),k.top+=r,k.left+=i,null!=m.offsetX&&(k.left+=m.offsetX),null!=m.offsetY&&(k.top+=m.offsetY),b.forEach(k,function(a,b){return isNaN(+a)||(a=""+a+"px"),g.css(b,a)}),g.addClass("visible "+n)):void 0},hide:function(a,d){var e,f,h,i,j,k,l;if(!this.popoverList.length)return"function"==typeof d?d():void 0;if(b.isFunction(a)&&(d=a,a=null),null!=a){for(e=b.isString(a)?function(b){return b.id===a}:b.isElement(a)?function(b){return b.element===a}:void 0,h=-1,f=k=l=this.popoverList.length-1;k>=0;f=k+=-1)if(e(this.popoverList[f])){i=this.popoverList[f],h=f;break}h>-1&&this.popoverList.splice(h,1)}else i=this.pop();return null!=i?(g.$broadcast("popoverBeforeHide",i.id),j=i.popover.scope(),c.leave(i.popover,function(){return c.removeClass(i.element,"active"),g.$broadcast("popoverWasHidden",i.id),j.$destroy(),"function"==typeof d?d():void 0})):void 0},hideAll:function(){for(;this.popoverList.length;)this.hide()}}}]).config(["popoverViewsProvider",function(a){return b.module("Mac").popover=function(c,d){var e;return null==a.registered[c]?(e={},b.extend(e,a.popoverDefaults,d,{id:c}),a.registered[c]=e):void 0}}]),b.module("Mac").service("scrollSpy",[function(){return{registered:[],active:{},listeners:[],register:function(a,b){var c,d,e,f,g,h,i;for(e=!1,f=b.offset().top,i=this.registered,d=g=0,h=i.length;h>g;d=++g)if(c=i[d],c.id===a){this.registered[d]={id:a,element:b,top:f},e=!0;break}return e||this.registered.push({id:a,element:b,top:f}),this.registered.sort(function(a,b){return a.top>b.top?1:a.topd;c=++d)if(b=f[c],b.id===a){[].splice.apply(this.registered,[c,c-c+1].concat(g=[])),g;break}return h},last:function(){return this.registered[this.registered.length-1]},setActive:function(a){var b,c,d,e,f;for(this.active=a,e=this.listeners,f=[],c=0,d=e.length;d>c;c++)b=e[c],f.push(b(a));return f},addListener:function(a){return this.listeners.push(a)},removeListener:function(a){var b,c;return b=this.listeners.indexOf(a),-1!==b?([].splice.apply(this.listeners,[b,b-b+1].concat(c=[])),c):void 0}}}]).constant("scrollSpyDefaults",{offset:0});var w={}.hasOwnProperty;b.module("Mac.Util",[]).factory("util",["$filter",function(a){return{_inflectionConstants:{uncountables:["sheep","fish","moose","series","species","money","rice","information","info","equipment","min"],irregulars:{child:"children",man:"men",woman:"women",person:"people",ox:"oxen",goose:"geese"},pluralizers:[[/(quiz)$/i,"$1zes"],[/([m|l])ouse$/i,"$1ice"],[/(matr|vert|ind)(ix|ex)$/i,"$1ices"],[/(x|ch|ss|sh)$/i,"$1es"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/(?:([^f])fe|([lr])f)$/i,"$1$2ves"],[/sis$/i,"ses"],[/([ti])um$/i,"$1a"],[/(buffal|tomat)o$/i,"$1oes"],[/(bu)s$/i,"$1ses"],[/(alias|status)$/i,"$1es"],[/(octop|vir)us$/i,"$1i"],[/(ax|test)is$/i,"$1es"],[/x$/i,"xes"],[/s$/i,"s"],[/$/,"s"]]},pluralize:function(c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q;if(null==c&&(c=""),null==e&&(e=!1),!b.isString(c)||0===this.trim(c).length)return c;if(e&&isNaN(+d))return"";if(null==d&&(d=2),q=this._inflectionConstants,l=q.pluralizers,m=q.uncountables,f=q.irregulars,n=c.split(/\s/).pop(),g=n.toUpperCase()===n,h=n.toLowerCase(),j=1===d||m.indexOf(h)>=0?n:null,null==j&&null!=f[h]&&(j=f[h]),null==j)for(o=0,p=l.length;p>o;o++)if(k=l[o],k[0].test(h)){j=n.replace(k[0],k[1]);break}return j||(j=n),g&&(j=j.toUpperCase()),i=c.slice(0,-n.length)+j,e?""+a("number")(d)+" "+i:i},trim:function(a){var b;return b=String(a)||"",null!=String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/gm,"")},capitalize:function(a){var b;return b=String(a)||"",b.charAt(0).toUpperCase()+b.substring(1)},uncapitalize:function(a){var b;return b=String(a)||"",b.charAt(0).toLowerCase()+b.substring(1)},toCamelCase:function(a){return null==a&&(a=""),this.trim(a).replace(/[-_\s]+(.)?/g,function(a,b){return b.toUpperCase()})},toSnakeCase:function(a){return null==a&&(a=""),this.trim(a).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/[-\s]+/g,"_").toLowerCase()},convertKeysToCamelCase:function(a){var b,c,d;c={};for(b in a)w.call(a,b)&&(d=a[b],b=this.toCamelCase(b),"object"==typeof d&&(null!=d?d.constructor:void 0)!==Array&&(d=this.convertKeysToCamelCase(d)),c[b]=d);return c},convertKeysToSnakeCase:function(a){var b,c,d;c={};for(b in a)w.call(a,b)&&(d=a[b],b=this.toSnakeCase(b),"object"==typeof d&&(null!=d?d.constructor:void 0)!==Array&&(d=this.convertKeysToSnakeCase(d)),c[b]=d);return c},pyth:function(a,b){return Math.sqrt(a*a+b*b)},degrees:function(a){return 180*a/Math.PI},radian:function(a){return a*Math.PI/180},hex2rgb:function(a){var b,c,d;0===a.indexOf("#")&&(a=a.substring(1)),a=a.toLowerCase(),c={},3===a.length?(c.r=a.charAt(0)+a.charAt(0),c.g=a.charAt(1)+a.charAt(1),c.b=a.charAt(2)+a.charAt(2)):(c.r=a.substring(0,2),c.g=a.substring(2,4),c.b=a.substring(4));for(b in c)d=c[b],c[b]=parseInt(d,16);return c},timeRegex:/^(0?[1-9]|1[0-2]):([0-5][0-9])[\s]([AP]M)$/,_urlRegex:/(?:(http[s]?):\/\/)?(?:(www|[\d\w\-]+)\.)?([\d\w\-]+)\.([A-Za-z]{2,6})(:[\d]*)?([:\/?#\[\]@!$&'()*+,;=\w\d-._~%\\]*)?/i,_emailRegex:/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/,validateUrl:function(a){var b;return b=this._urlRegex.exec(a),null!=b&&(b={url:b[0],protocol:b[1]||"http",subdomain:b[2],name:b[3],domain:b[4],port:b[5],path:b[6]||"/"},b.url=b.url),b},validateEmail:function(a){return this._emailRegex.test(a)},getQueryString:function(a,b){var c,d,e;return null==b&&(b=""),b=b.replace(/[[]/,"[").replace(/[]]/,"]"),d="[?&]"+b+"=([^]*)",c=new RegExp(d),e=c.exec(a),null!=e?e[1]:""},parseUrlPath:function(a){var b,c,d,e,f,g,h,i,j,k,l;if(g=a.split("?"),c=g[0].split("/"),b=c.slice(0,c.length-1).join("/"),i=c[c.length-1],d={},g.length>1)for(f=g[g.length-1],l=f.split("&"),j=0,k=l.length;k>j;j++)e=l[j],h=e.split("="),d[h[0]]=null!=h[1]?h[1]:"";return{fullPath:a,path:b,pathComponents:c,verb:i,queries:d}},extendAttributes:function(a,b,c){var d,e,f,g,h,i,j;null==a&&(a=""),g={};for(e in b)w.call(b,e)&&(h=b[e],d=a?this.capitalize(e):e,f=""+a+d,g[e]=null!=c[f]?c[f]||!0:h,"true"===(i=g[e])||"false"===i?g[e]="true"===g[e]:(null!=(j=g[e])?j.length:void 0)>0&&!isNaN(+g[e])&&(g[e]=+g[e]));return g}}}])}(window,window.angular);
\ No newline at end of file
diff --git a/src/styles/macgyver.css b/src/styles/macgyver.css
new file mode 100644
index 0000000..2aca701
--- /dev/null
+++ b/src/styles/macgyver.css
@@ -0,0 +1,721 @@
+.mac-date-time.ng-invalid-date,.mac-date-time.ng-invalid-time {
+ background: #ffe2e2;
+ border: solid 1px #dea9a9;
+}
+
+.close,.close-modal {
+ width: 18px;
+ height: 18px;
+ -webkit-border-radius: 9px;
+ border-radius: 9px;
+ display: block;
+ background: #bdc0c7;
+ position: relative;
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+}
+
+.close:after,.close-modal:after {
+ content: '';
+ display: block;
+ width: 2px;
+ height: 10px;
+ background: #fff;
+ position: absolute;
+ top: 4px;
+ left: 8px;
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.close:before,.close-modal:before {
+ content: '';
+ display: block;
+ width: 2px;
+ height: 10px;
+ background: #fff;
+ position: absolute;
+ top: 4px;
+ left: 8px;
+ -webkit-transform: rotate(-45deg);
+ -moz-transform: rotate(-45deg);
+ -o-transform: rotate(-45deg);
+ -ms-transform: rotate(-45deg);
+ transform: rotate(-45deg);
+}
+
+.close:hover,.close-modal:hover {
+ background: #828590;
+}
+
+.hide {
+ display: none;
+}
+
+.affix {
+ position: fixed;
+}
+
+.affix-bottom {
+ position: absolute;
+}
+
+.mac-menu {
+ position: absolute;
+ top: 0;
+ left: 0;
+ min-width: 200px;
+ background: #fff;
+ -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.2);
+ box-shadow: 0 3px 6px rgba(0,0,0,0.2);
+ border: 1px solid #d1d3d8;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ max-height: 325px;
+ overflow-y: auto;
+ opacity: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ visibility: hidden;
+ -webkit-transition: opacity 0.1s ease-out, visibility 0.1s ease-out;
+ -moz-transition: opacity 0.1s ease-out, visibility 0.1s ease-out;
+ -o-transition: opacity 0.1s ease-out, visibility 0.1s ease-out;
+ -ms-transition: opacity 0.1s ease-out, visibility 0.1s ease-out;
+ transition: opacity 0.1s ease-out, visibility 0.1s ease-out;
+}
+
+.mac-menu.visible {
+ visibility: visible;
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+}
+
+.mac-menu ul {
+ list-style: none;
+ margin: 0;
+ padding-left: 0;
+}
+
+.mac-menu ul .mac-menu-item {
+ display: block;
+ padding: 5px 10px;
+ -webkit-transition: background 0.1s ease-out;
+ -moz-transition: background 0.1s ease-out;
+ -o-transition: background 0.1s ease-out;
+ -ms-transition: background 0.1s ease-out;
+ transition: background 0.1s ease-out;
+ color: #000;
+ cursor: pointer;
+}
+
+.mac-menu ul .mac-menu-item.active {
+ background: #e0e8fb;
+ -webkit-transition: 0;
+ -moz-transition: 0;
+ -o-transition: 0;
+ -ms-transition: 0;
+ transition: 0;
+ text-decoration: none;
+}
+
+.mac-modal-overlay {
+ background-color: rgba(245,246,250,0.75);
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ opacity: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ overflow-y: auto;
+ z-index: 3;
+}
+
+.mac-modal-overlay.visible,.mac-modal-overlay.visible-add-active {
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+}
+
+.mac-modal-overlay.visible .mac-modal,.mac-modal-overlay.visible-add-active .mac-modal {
+ top: 50%;
+}
+
+.mac-modal-overlay.visible-add,.mac-modal-overlay.visible-remove {
+ -webkit-transition: 0.2s ease-out all;
+ -moz-transition: 0.2s ease-out all;
+ -o-transition: 0.2s ease-out all;
+ -ms-transition: 0.2s ease-out all;
+ transition: 0.2s ease-out all;
+}
+
+.mac-modal-overlay.visible-remove-active {
+ opacity: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+}
+
+.mac-modal-overlay .mac-modal {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ width: 500px;
+ margin-left: -251px;
+ background: #fff;
+ border: 1px solid #d1d3d8;
+ -webkit-box-shadow: 0 4px 10px rgba(0,0,0,0.15);
+ box-shadow: 0 4px 10px rgba(0,0,0,0.15);
+ -webkit-transition: all 0.2s ease-out;
+ -moz-transition: all 0.2s ease-out;
+ -o-transition: all 0.2s ease-out;
+ -ms-transition: all 0.2s ease-out;
+ transition: all 0.2s ease-out;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transform: rotateX(0) rotateY(0);
+ -moz-transform: rotateX(0) rotateY(0);
+ -o-transform: rotateX(0) rotateY(0);
+ -ms-transform: rotateX(0) rotateY(0);
+ transform: rotateX(0) rotateY(0);
+}
+
+.mac-modal-overlay .mac-modal:after {
+ content: "";
+ display: block;
+ position: absolute;
+ bottom: -20px;
+ height: 20px;
+ width: 1px;
+}
+
+.mac-modal-overlay .mac-modal .mac-close-modal {
+ position: absolute;
+ top: -5px;
+ right: -5px;
+ width: 18px;
+ height: 18px;
+ -webkit-border-radius: 9px;
+ border-radius: 9px;
+ display: block;
+ background: #bdc0c7;
+ cursor: pointer;
+}
+
+.mac-modal-overlay .mac-modal .mac-close-modal:before,.mac-modal-overlay .mac-modal .mac-close-modal:after {
+ content: '';
+ display: block;
+ width: 2px;
+ height: 10px;
+ background: #fff;
+ position: absolute;
+ top: 4px;
+ left: 8px;
+}
+
+.mac-modal-overlay .mac-modal .mac-close-modal:before {
+ -webkit-transform: rotate(-45deg);
+ -moz-transform: rotate(-45deg);
+ -o-transform: rotate(-45deg);
+ -ms-transform: rotate(-45deg);
+ transform: rotate(-45deg);
+}
+
+.mac-modal-overlay .mac-modal .mac-close-modal:after {
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.mac-modal-overlay .mac-modal .mac-modal-content {
+ padding: 20px;
+}
+
+.mac-popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ background: #fff;
+ -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.2);
+ box-shadow: 0 3px 6px rgba(0,0,0,0.2);
+ border: 1px solid #d1d3d8;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transform: scale3d(0,0,0);
+ -moz-transform: scale3d(0,0,0);
+ -o-transform: scale3d(0,0,0);
+ -ms-transform: scale3d(0,0,0);
+ transform: scale3d(0,0,0);
+ opacity: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ -webkit-transform-origin: left top;
+ -moz-transform-origin: left top;
+ -o-transform-origin: left top;
+ -ms-transform-origin: left top;
+ transform-origin: left top;
+ visibility: hidden;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ z-index: 2;
+}
+
+.mac-popover.fixed {
+ position: fixed;
+}
+
+.mac-popover.visible {
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+ visibility: visible;
+ -webkit-transform: scale3d(1,1,1);
+ -moz-transform: scale3d(1,1,1);
+ -o-transform: scale3d(1,1,1);
+ -ms-transform: scale3d(1,1,1);
+ transform: scale3d(1,1,1);
+ -webkit-transition: -webkit-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ -moz-transition: -moz-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ -o-transition: -o-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ -ms-transition: -ms-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ transition: transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+}
+
+.mac-popover.ng-leave {
+ -webkit-transition: -webkit-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ -moz-transition: -moz-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ -o-transition: -o-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ -ms-transition: -ms-transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+ transition: transform 0.1s ease-out, opacity 0.1s ease-in, visibility 0.1s ease-out;
+}
+
+.mac-popover.ng-leave.ng-leave-active {
+ opacity: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ -webkit-transform: scale3d(0,0,0);
+ -moz-transform: scale3d(0,0,0);
+ -o-transform: scale3d(0,0,0);
+ -ms-transform: scale3d(0,0,0);
+ transform: scale3d(0,0,0);
+ visibility: hidden;
+}
+
+.mac-popover .tip {
+ display: block;
+ width: 0;
+ height: 0;
+ border-bottom: 9px solid #d1d3d8;
+ border-left: 9px solid rgba(255,255,255,0);
+ border-right: 9px solid rgba(255,255,255,0);
+ position: absolute;
+ top: -9px;
+ left: 15px;
+}
+
+.mac-popover .tip:after {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ border-bottom: 8px solid #fff;
+ border-left: 8px solid rgba(255,255,255,0);
+ border-right: 8px solid rgba(255,255,255,0);
+ position: absolute;
+ top: 1px;
+ left: -8px;
+}
+
+.mac-popover.above {
+ -webkit-transform-origin: left bottom;
+ -moz-transform-origin: left bottom;
+ -o-transform-origin: left bottom;
+ -ms-transform-origin: left bottom;
+ transform-origin: left bottom;
+}
+
+.mac-popover.above .tip {
+ top: auto;
+ bottom: -9px;
+ border-top: 9px solid #d1d3d8;
+ border-bottom: 0;
+}
+
+.mac-popover.above .tip:after {
+ top: auto;
+ bottom: 1px;
+ border-top: 8px solid #fff;
+ border-bottom: 0;
+}
+
+.mac-popover.above.right {
+ -webkit-transform-origin: right bottom;
+ -moz-transform-origin: right bottom;
+ -o-transform-origin: right bottom;
+ -ms-transform-origin: right bottom;
+ transform-origin: right bottom;
+}
+
+.mac-popover.above.right .tip {
+ left: auto;
+ right: 15px;
+}
+
+.mac-popover.below.right {
+ -webkit-transform-origin: right top;
+ -moz-transform-origin: right top;
+ -o-transform-origin: right top;
+ -ms-transform-origin: right top;
+ transform-origin: right top;
+}
+
+.mac-popover.below.right .tip {
+ left: auto;
+ right: 15px;
+}
+
+.mac-popover.middle .tip {
+ top: 50%;
+ margin-top: -9px;
+ border-top: 9px solid rgba(255,255,255,0);
+ border-bottom: 9px solid rgba(255,255,255,0);
+}
+
+.mac-popover.middle .tip:after {
+ border-top: 8px solid rgba(255,255,255,0);
+ border-bottom: 8px solid rgba(255,255,255,0);
+ top: -8px;
+}
+
+.mac-popover.middle.right {
+ -webkit-transform-origin: left center;
+ -moz-transform-origin: left center;
+ -o-transform-origin: left center;
+ -ms-transform-origin: left center;
+ transform-origin: left center;
+}
+
+.mac-popover.middle.right .tip {
+ border-left: 0;
+ border-right: 9px solid #d1d3d8;
+ left: -9px;
+}
+
+.mac-popover.middle.right .tip:after {
+ border-left: 0;
+ border-right: 8px solid #fff;
+ left: 1px;
+}
+
+.mac-popover.middle.left {
+ -webkit-transform-origin: right center;
+ -moz-transform-origin: right center;
+ -o-transform-origin: right center;
+ -ms-transform-origin: right center;
+ transform-origin: right center;
+}
+
+.mac-popover.middle.left .tip {
+ border-right: 0;
+ border-left: 9px solid #d1d3d8;
+ right: -9px;
+ left: auto;
+}
+
+.mac-popover.middle.left .tip:after {
+ border-right: 0;
+ border-left: 8px solid #fff;
+ right: 1px;
+ left: auto;
+}
+
+.mac-popover .popover-header {
+ background: #eaecf1;
+ display: none;
+}
+
+.mac-popover .popover-header .title {
+ font-size: 13px;
+ font-weight: bold;
+ line-height: 33px;
+ padding-left: 10px;
+ padding-top: 1px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: nowrap;
+ overflow: hidden;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis;
+ margin-right: 40px;
+}
+
+.mac-popover .popover-header .close {
+ float: right;
+ margin: 7px 10px 0 0;
+ display: none;
+}
+
+.mac-popover .popover-content {
+ max-height: 415px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ position: relative;
+}
+
+.mac-popover .popover-footer {
+ display: none;
+}
+
+.mac-popover.footer {
+ padding-bottom: 42px;
+}
+
+.mac-popover.footer .popover-footer {
+ display: block;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding: 10px;
+ -webkit-box-shadow: 0 -1px 5px rgba(0,0,0,0.15);
+ box-shadow: 0 -1px 5px rgba(0,0,0,0.15);
+}
+
+.mac-popover.header .popover-header {
+ display: block;
+}
+
+.mac-popover.header.below .tip:after {
+ border-bottom: 8px solid #eaecf1;
+}
+
+.mac-popover.header.middle.left .tip:after {
+ border-left: 8px solid #eaecf1;
+}
+
+.mac-popover.header.middle.right .tip:after {
+ border-right: 8px solid #eaecf1;
+}
+
+.mac-spinner,.mac-cspinner {
+ display: inline-block;
+ position: relative;
+}
+
+.mac-spinner.block,.mac-cspinner.block {
+ display: block;
+ margin: 0 auto;
+}
+
+@-moz-keyframes fade {
+ 0% {
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+ }
+
+ 100% {
+ opacity: .02;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";
+ filter: alpha(opacity=2);
+ }
+}
+
+@-webkit-keyframes fade {
+ 0% {
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+ }
+
+ 100% {
+ opacity: .02;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";
+ filter: alpha(opacity=2);
+ }
+}
+
+@-o-keyframes fade {
+ 0% {
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+ }
+
+ 100% {
+ opacity: .02;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";
+ filter: alpha(opacity=2);
+ }
+}
+
+@keyframes fade {
+ 0% {
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+ }
+
+ 100% {
+ opacity: .02;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=2)";
+ filter: alpha(opacity=2);
+ }
+}
+
+.mac-tag-autocomplete {
+ position: relative;
+ display: inline-block;
+ border: 1px solid #aaa;
+ background: #fff;
+ margin: 0;
+ padding: 0;
+}
+
+.mac-tag-autocomplete .mac-tag-list {
+ margin: 0;
+ padding-left: 0;
+}
+
+.mac-tag-autocomplete .mac-tag-list .mac-tag {
+ padding: 3px 20px 3px 5px;
+ margin: 3px;
+ position: relative;
+ display: inline-block;
+ list-style: none;
+ font-size: 13px;
+ line-height: 13px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-label {
+ background: -webkit-linear-gradient(top, #eaf0ff, #dee8ff);
+ background: -moz-linear-gradient(top, #eaf0ff, #dee8ff);
+ background: -o-linear-gradient(top, #eaf0ff, #dee8ff);
+ background: -ms-linear-gradient(top, #eaf0ff, #dee8ff);
+ background: linear-gradient(to bottom, #eaf0ff, #dee8ff);
+ border: 1px solid #bfc9e1;
+ text-shadow: none;
+ color: #000;
+ font-weight: normal;
+ -webkit-box-shadow: 0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);
+ box-shadow: 0 0 2px #fff inset,0 1px 0 rgba(0,0,0,0.05);
+}
+
+.mac-tag-autocomplete .mac-tag-list .mac-tag .mac-tag-close {
+ position: absolute;
+ right: 6px;
+ color: #9da6b7;
+ cursor: pointer;
+}
+
+.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag {
+ white-space: nowrap;
+ padding: 0;
+}
+
+.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag .text-input {
+ color: #666;
+ background: transparent;
+ padding: 5px;
+ margin: 0;
+ border: none !important;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag.fullwidth {
+ width: 100%;
+}
+
+.mac-tag-autocomplete .mac-tag-list .mac-tag.mac-input-tag.fullwidth .text-input {
+ width: 90%;
+}
+
+.mac-tooltip {
+ background: rgba(47,48,53,0.75);
+ text-align: center;
+ color: #fff;
+ padding: 5px 7px;
+ position: absolute;
+ top: 100px;
+ left: 100px;
+ font-size: 12px;
+ opacity: 0;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ visibility: hidden;
+ -webkit-transition: opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;
+ -moz-transition: opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;
+ -o-transition: opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;
+ -ms-transition: opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;
+ transition: opacity 0.1s ease-out, visibility 0.1s ease-out, margin 0.1s ease-out;
+ margin-top: 5px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ z-index: 7;
+}
+
+.mac-tooltip.visible {
+ visibility: visible;
+ opacity: 1;
+ -ms-filter: none;
+ filter: none;
+ margin-top: 0;
+}
+
+.mac-tooltip:after {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ position: absolute;
+}
+
+.mac-tooltip.top:after {
+ border-top: 6px solid rgba(47,48,53,0.75);
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ bottom: -6px;
+ left: 50%;
+ margin-left: -6px;
+}
+
+.mac-tooltip.bottom:after {
+ border-bottom: 6px solid rgba(47,48,53,0.75);
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ top: -6px;
+ left: 50%;
+ margin-left: -6px;
+}
+
+.mac-tooltip.left:after {
+ border-left: 6px solid rgba(47,48,53,0.75);
+ border-top: 6px solid transparent;
+ border-bottom: 6px solid transparent;
+ right: -6px;
+ top: 50%;
+ margin-top: -6px;
+}
+
+.mac-tooltip.right:after {
+ border-right: 6px solid rgba(47,48,53,0.75);
+ border-top: 6px solid transparent;
+ border-bottom: 6px solid transparent;
+ left: -6px;
+ top: 50%;
+ margin-top: -6px;
+}
\ No newline at end of file
diff --git a/src/styles/overview.less b/src/styles/overview.less
index b6f8f91..a45a0d9 100644
--- a/src/styles/overview.less
+++ b/src/styles/overview.less
@@ -145,11 +145,19 @@ h1 {
&.properties {
border-top: none;
- .name, .value {
+ border-bottom: 1px solid transparent;
+ .name, .val {
font-size: .8rem;
- color: @gray_50;
padding: .25rem 0;
}
+ .val input {
+ padding: 0; margin: 0;
+ border: none;
+ color: inherit;
+ }
+ color: @gray_40;
+ &:hover {color: @gray_60;}
+
}
.spacer {
@@ -273,11 +281,18 @@ select {
.pure-button {
border-radius: 0 !important;
padding: .3rem .5rem;
- box-shadow: 0px .1rem 0 @apigee-grey;
- color: @apigee-grey;
- &:hover {color: #000;}
+ border-bottom: 2px solid @gray_20;
+ color: @gray_70;
+
margin: 0 .5rem 0 0;
.body-font();
+ transition: all .2s ease;
+ .shadow(1);
+
+ &:hover:not([disabled]) {
+ background-color: @yellow;
+ .shadow(4);
+ }
}
@@ -369,7 +384,8 @@ select {
}
button.icon {
- color: @yellow;
+ color: mix(@yellow, @dark, 90%);
+ &:hover {color: @yellow;}
border: none;
background-color: transparent;
@@ -383,14 +399,14 @@ select {
.query {
margin-top: 1rem;
-
+
.search_icon, .dropdown{
text-align: center;
padding-top: .5rem;
}
.query_set {
- border-top: 1px solid @light-gray-bg;
+ border-top: 1px solid @gray_20;
padding: 1rem 0;
.reveal();
}
@@ -400,16 +416,18 @@ select {
margin-left: 1rem;
}
.search_icon {
- background-image: linear-gradient(90deg, @light-gray-bg 2px, transparent 2px);
+ border-left: 1px solid @gray_20;
}
.input {padding: 0rem 0 .5rem 0;}
.search_icon, .input, .dropdown{
- border-top: 2px solid @light-gray-bg;
- border-bottom: 2px solid @light-gray-bg;
+ border-top: 1px solid @gray_20;
+ border-bottom: 1px solid @gray_20;
height: 2.5rem;
- box-shadow: 0 .1rem 0 #59595b;
+ //box-shadow: 0 .1rem 0 #59595b;
.border-box();
+
}
+ .dropdown{ border-right: 1px solid @gray_20; }
.input {
overflow: hidden;
input{
@@ -418,14 +436,7 @@ select {
box-shadow: none;
}
}
- .submit {
- background-image: linear-gradient(@light-gray-bg 2px, transparent 2px),
- linear-gradient(to top, #59595b 2px, @light-gray-bg 2px, @light-gray-bg 4px,transparent 4px);
- height: (2.5 * 16) + 2px;
-
- background-size: 20px 100%;
- background-repeat: no-repeat;
- }
+
.clear {padding: .5rem;}
@@ -464,6 +475,7 @@ select {
padding: .25rem;
}
+&:hover input {background-color: #fff;}
}
diff --git a/src/styles/source-sans.less b/src/styles/source-sans.less
new file mode 100644
index 0000000..a5e9873
--- /dev/null
+++ b/src/styles/source-sans.less
@@ -0,0 +1,38 @@
+//100, 300, 400(normal), 700(bold)
+
+@font-face {
+ font-family: 'source-sans-pro';
+ src: url('../fonts/source-sans-pro/EOT/SourceSansPro-ExtraLight.eot?') format('embedded-opentype'),
+ url('../fonts/source-sans-pro/TTF/SourceSansPro-ExtraLight.ttf') format('woff'),
+ url('../fonts/source-sans-pro/EOT/OTF/SourceSansPro-ExtraLight.ttf') format('truetype');
+ font-weight: 100;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'source-sans-pro';
+ src: url('../fonts/source-sans-pro/EOT/SourceSansPro-Light.eot?') format('embedded-opentype'),
+ url('../fonts/source-sans-pro/TTF/SourceSansPro-Light.ttf') format('woff'),
+ url('../fonts/source-sans-pro/EOT/OTF/SourceSansPro-Light.ttf') format('truetype');
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'source-sans-pro';
+ src: url('../fonts/source-sans-pro/EOT/SourceSansPro-Regular.eot?') format('embedded-opentype'),
+ url('../fonts/source-sans-pro/TTF/SourceSansPro-Regular.ttf') format('woff'),
+ url('../fonts/source-sans-pro/EOT/OTF/SourceSansPro-Regular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'source-sans-pro';
+ src: url('../fonts/source-sans-pro/EOT/SourceSansPro-Bold.eot?') format('embedded-opentype'),
+ url('../fonts/source-sans-pro/TTF/SourceSansPro-Bold.ttf') format('woff'),
+ url('../fonts/source-sans-pro/EOT/OTF/SourceSansPro-Bold.ttf') format('truetype');
+ font-weight: bold;
+ font-style: normal;
+}
+
diff --git a/src/styles/styles.css b/src/styles/styles.css
index 1f9afca..c6ed554 100644
--- a/src/styles/styles.css
+++ b/src/styles/styles.css
@@ -15,24 +15,6 @@
font-weight: 700;
font-style: normal;
}
-@font-face {
- font-family: "jaf-facitweb";
- src: url(data:font/opentype;base64,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);
- font-style: normal;
- font-weight: 300;
-}
-@font-face {
- font-family: "jaf-facitweb";
- src: url(data:font/opentype;base64,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);
- font-style: normal;
- font-weight: 400;
-}
-@font-face {
- font-family: "jaf-facitweb";
- src: url(data:font/opentype;base64,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);
- font-style: normal;
- font-weight: 700;
-}
@font-face {
font-family: 'SSPika';
src: url('../fonts/ss-pika.eot?') format('embedded-opentype'), url('../fonts/ss-pika.woff') format('woff'), url('../fonts/ss-pika.ttf') format('truetype');
@@ -187,7 +169,7 @@
}
body {
background-color: #ededed;
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
}
.wf-loading h1,
.wf-loading h2,
@@ -221,7 +203,7 @@ select,
textarea,
.pure-g [class*="pure-u"] {
/* Set your content font stack here: */
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
}
html h1,
button h1,
@@ -267,7 +249,7 @@ input code,
select code,
textarea code,
.pure-g [class*="pure-u"] code {
- font-family: "fira-mono", courier, monospace;
+ font-family: "Source Code Pro", courier, monospace;
}
html .icon,
button .icon,
@@ -316,7 +298,7 @@ body {
margin: 0;
}
code {
- font-family: "fira-mono", courier, monospace;
+ font-family: "Source Code Pro", courier, monospace;
}
.page {
/* baseline grid */
@@ -358,11 +340,6 @@ h5 strong,
h6 strong {
color: #ff4300;
}
-h1 {
- font: normal 2em/3rem;
- margin: 1rem 0;
- line-height: 2rem;
-}
h2 {
font: normal 1.75em/2rem;
margin: .7rem 0;
@@ -397,6 +374,14 @@ section.main {
margin: 0 auto !important;
}
}
+h1 {
+ font: normal 2em/3rem;
+ margin: 1rem 0;
+ line-height: 2rem;
+}
+h1.front_door {
+ padding-bottom: 1rem;
+}
h1 .back {
display: inline-block;
position: relative;
@@ -434,6 +419,9 @@ h1 .back:hover {
width: 5rem;
}
}
+.mac-tooltip {
+ line-height: 1rem;
+}
/*
.pure-button {
@@ -596,7 +584,7 @@ nav ul li {
height: 1.5rem;
line-height: 1.5rem;
font-size: 1rem;
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
height: 2.5rem;
color: #ededed;
}
@@ -636,7 +624,7 @@ nav .zetta-logo {
.install input {
width: 100%;
font-size: 1.2rem;
- font-family: "fira-mono", courier, monospace;
+ font-family: "Source Code Pro", courier, monospace;
border: none;
background-color: transparent;
}
@@ -656,7 +644,7 @@ nav .zetta-logo {
overflow: hidden;
}
#cta p {
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
font-size: .8em;
height: 2rem;
margin: 1rem 0 0 0;
@@ -892,7 +880,10 @@ header nav,
}
}
.page_content a {
- color: #b27b31;
+ color: #e29636;
+}
+.page_content a:hover {
+ color: #faa438;
}
.page_content header {
margin-top: 2.5rem;
@@ -900,6 +891,7 @@ header nav,
padding: 0 0 1rem 0;
padding-left: 1rem;
padding-right: 1rem;
+ transition: box-shadow 0.2s ease;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.13), 0px 0px 2px rgba(0, 0, 0, 0.13);
}
.page_content header h1 {
@@ -920,6 +912,9 @@ header nav,
margin: 0 auto !important;
}
}
+.page_content header:hover {
+ box-shadow: 0px 5px 8px rgba(0, 0, 0, 0.1), 0px 0px 5px rgba(0, 0, 0, 0.1);
+}
#wampum {
background-color: #fff;
border-bottom: #59595b;
@@ -974,20 +969,20 @@ footer a {
line-height: 1rem;
margin: 0;
padding: 2rem 0 1rem 0;
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif !important;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif !important;
}
.device-meta h2 span {
- font-weight: 100;
+ font-weight: 200;
}
.device-group h2 {
font-size: 1rem;
line-height: 1rem;
margin: 0;
padding: 2rem 0 1rem 0;
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif !important;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif !important;
}
.device-group h2 span {
- font-weight: 100;
+ font-weight: 200;
}
.device-group .device_count {
font-size: .8rem;
@@ -1005,7 +1000,7 @@ footer a {
}
}
.device-group h2 .active_query {
- font-family: "fira-mono", courier, monospace;
+ font-family: "Source Code Pro", courier, monospace;
background-color: white;
padding: .25rem .5rem;
margin-left: .5rem;
@@ -1127,7 +1122,7 @@ h1 .back:hover {
.devices .row .name,
.devices .row .value {
padding: 1rem 0;
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
@@ -1150,13 +1145,23 @@ h1 .back:hover {
}
.devices .row.properties {
border-top: none;
+ border-bottom: 1px solid transparent;
+ color: rgba(0, 0, 0, 0.4);
}
.devices .row.properties .name,
-.devices .row.properties .value {
+.devices .row.properties .val {
font-size: .8rem;
- color: rgba(0, 0, 0, 0.5);
padding: .25rem 0;
}
+.devices .row.properties .val input {
+ padding: 0;
+ margin: 0;
+ border: none;
+ color: inherit;
+}
+.devices .row.properties:hover {
+ color: rgba(0, 0, 0, 0.6);
+}
@media screen and (min-width: 48.1em) {
.devices .row .spacer {
display: none;
@@ -1250,7 +1255,7 @@ h1 .back:hover {
}
}
input {
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
padding: .4rem;
}
input[type="color"] {
@@ -1287,13 +1292,16 @@ select {
.pure-button {
border-radius: 0 !important;
padding: .3rem .5rem;
- box-shadow: 0px 0.1rem 0 #59595b;
- color: #59595b;
+ border-bottom: 2px solid rgba(0, 0, 0, 0.2);
+ color: rgba(0, 0, 0, 0.7);
margin: 0 .5rem 0 0;
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
+ transition: all .2s ease;
+ box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.14), 0px 0px 1px rgba(0, 0, 0, 0.14);
}
-.pure-button:hover {
- color: #000;
+.pure-button:hover:not([disabled]) {
+ background-color: #faa438;
+ box-shadow: 0px 5px 8px rgba(0, 0, 0, 0.1), 0px 0px 5px rgba(0, 0, 0, 0.1);
}
.device-meta {
width: 100%;
@@ -1319,11 +1327,11 @@ select {
line-height: 1rem;
margin: 0;
padding: 2rem 0 1rem 0;
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif !important;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif !important;
text-transform: uppercase;
}
.device-meta h2.name span {
- font-weight: 100;
+ font-weight: 200;
}
.device-meta .content {
background-color: #fff;
@@ -1413,10 +1421,13 @@ select {
padding-top: .75rem;
}
button.icon {
- color: #faa438;
+ color: #e29636;
border: none;
background-color: transparent;
}
+button.icon:hover {
+ color: #faa438;
+}
button.icon:disabled {
color: #ededed;
}
@@ -1432,7 +1443,7 @@ button.icon:disabled:hover {
padding-top: .5rem;
}
.query .query_set {
- border-top: 1px solid #ededed;
+ border-top: 1px solid rgba(0, 0, 0, 0.2);
padding: 1rem 0;
}
.query .query_set.ng-enter {
@@ -1449,7 +1460,7 @@ button.icon:disabled:hover {
margin-left: 1rem;
}
.query .search_icon {
- background-image: linear-gradient(90deg, #ededed 2px, transparent 2px);
+ border-left: 1px solid rgba(0, 0, 0, 0.2);
}
.query .input {
padding: 0rem 0 .5rem 0;
@@ -1457,14 +1468,16 @@ button.icon:disabled:hover {
.query .search_icon,
.query .input,
.query .dropdown {
- border-top: 2px solid #ededed;
- border-bottom: 2px solid #ededed;
+ border-top: 1px solid rgba(0, 0, 0, 0.2);
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
height: 2.5rem;
- box-shadow: 0 .1rem 0 #59595b;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
+.query .dropdown {
+ border-right: 1px solid rgba(0, 0, 0, 0.2);
+}
.query .input {
overflow: hidden;
}
@@ -1473,12 +1486,6 @@ button.icon:disabled:hover {
border: none;
box-shadow: none;
}
-.query .submit {
- background-image: linear-gradient(#ededed 2px, transparent 2px), linear-gradient(to top, #59595b 2px, #ededed 2px, #ededed 4px, transparent 4px);
- height: 42px;
- background-size: 20px 100%;
- background-repeat: no-repeat;
-}
.query .clear {
padding: .5rem;
}
@@ -1517,9 +1524,12 @@ button.icon:disabled:hover {
}
.server_endpoint input {
font-size: .8rem;
- font-family: "fira-mono", courier, monospace;
+ font-family: "Source Code Pro", courier, monospace;
padding: .25rem;
}
+.server_endpoint:hover input {
+ background-color: #fff;
+}
/* Device Show */
.focus {
background-color: #fff;
@@ -1624,7 +1634,7 @@ button.icon:disabled:hover {
color: rgba(0, 0, 0, 0.4);
}
.state_log ul li strong {
- font-family: "fira-mono", courier, monospace !important;
+ font-family: "Source Code Pro", courier, monospace !important;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
diff --git a/src/styles/styles.less b/src/styles/styles.less
index 0f8f14d..2f93212 100644
--- a/src/styles/styles.less
+++ b/src/styles/styles.less
@@ -5,7 +5,7 @@
***/
@import 'fira.less';
-@import 'facit.less';
+//@import 'facit.less';
@import 'ss-pika.less';
@import 'apigee-colors.less';
@import 'breakpoints.less';
@@ -33,7 +33,7 @@ body {
html, button, input, select, textarea,
.pure-g [class *= "pure-u"] {
/* Set your content font stack here: */
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
h1, h2, h3, h4, h5, h6 { .heading-fonts(); }
@@ -93,10 +93,7 @@ h1, h2, h3, h4, h5, h6 {
}
}
-h1 {
- font: normal 2em/3rem; margin: 1rem 0;
- line-height: 2rem;
-}
+
h2 { font: normal 1.75em/2rem; margin: .7rem 0; }
h3 { font: normal 1.4em/2rem; margin: .4rem 0; }
h4 { font: normal 1.2em/2rem; margin: .5rem 0; }
@@ -108,6 +105,13 @@ section.main{
}
h1 {
+ font: normal 2em/3rem; margin: 1rem 0;
+ line-height: 2rem;
+
+ &.front_door {
+ padding-bottom: 1rem;
+ }
+
.back {
display : inline-block;
position: relative;
@@ -146,6 +150,9 @@ h1 {
}
}
+
+.mac-tooltip {line-height: 1rem;}
+
/*
.pure-button {
@@ -556,7 +563,10 @@ header nav, #wampum {
.page_content {
- a {color: mix(@yellow, @dark, 70%);}
+ a {
+ color: mix(@yellow, @dark, 90%);
+ &:hover {color: @yellow;}
+ }
header {
margin-top: 2.5rem;
@@ -569,7 +579,9 @@ header nav, #wampum {
.centered();
}
+ transition: box-shadow .2s ease;
.shadow(2);
+ &:hover {.shadow(4);}
}
}
@@ -779,10 +791,10 @@ table.number_control {
}
.mono(){
- font-family: "fira-mono",courier, monospace;
+ font-family: "Source Code Pro",courier, monospace;
}
.body-font(){
- font-family: "jaf-facitweb", Helvetica, Arial, sans-serif;
+ font-family: "Source Sans Pro", Helvetica, Arial, sans-serif;
}
.menu() {
margin: 0; padding: 0;
@@ -819,7 +831,7 @@ table.number_control {
.serverHeading(){
font-size: 1rem; line-height: 1rem; margin: 0; padding: 2rem 0 1rem 0;
.body-font() !important;
- span {font-weight: 100;}
+ span {font-weight: 200;}
}
.border-top(@color, @width: 2px){
diff --git a/src/styles/test.css b/src/styles/test.css
index 4ce78e7..9b6b7ac 100644
--- a/src/styles/test.css
+++ b/src/styles/test.css
@@ -38,16 +38,44 @@ body {
.unit {
padding: 1rem;
margin: 1rem;
- width: 3rem;
- height: 3rem;
+ width: 2rem;
+ height: 5rem;
display: inline-block;
background-color: white;
+ text-align: center;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
border-radius: 3px;
box-shadow: none;
transition: box-shadow 0.2s ease;
}
+.unit:nth-child(1) {
+ box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.24), 0px 0px 1px rgba(0, 0, 0, 0.23);
+}
+.unit:nth-child(2) {
+ box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.23), 0px 0px 2px rgba(0, 0, 0, 0.21);
+}
+.unit:nth-child(3) {
+ box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.22), 0px 0px 3px rgba(0, 0, 0, 0.19);
+}
+.unit:nth-child(4) {
+ box-shadow: 0px 5px 8px rgba(0, 0, 0, 0.2), 0px 0px 5px rgba(0, 0, 0, 0.15);
+}
+.unit:nth-child(5) {
+ box-shadow: 0px 6px 10px rgba(0, 0, 0, 0.19), 0px 0px 6px rgba(0, 0, 0, 0.13);
+}
+.unit:nth-child(6) {
+ box-shadow: 0px 7px 12px rgba(0, 0, 0, 0.18), 0px 0px 7px rgba(0, 0, 0, 0.11);
+}
+.unit:nth-child(7) {
+ box-shadow: 0px 11px 18px rgba(0, 0, 0, 0.14), 0px 0px 11px rgba(0, 0, 0, 0.05);
+}
+.unit:nth-child(8) {
+ box-shadow: 0px 10px 16px rgba(0, 0, 0, 0.15), 0px 0px 10px rgba(0, 0, 0, 0.05);
+}
+.unit:nth-child(9) {
+ box-shadow: 0px 11px 18px rgba(0, 0, 0, 0.14), 0px 0px 11px rgba(0, 0, 0, 0.05);
+}
.unit:hover {
- box-shadow: 0px 13px 20px rgba(0, 0, 0, 0.12), 0px 0px 13px rgba(0, 0, 0, 0.12);
+ box-shadow: 0px 13px 20px rgba(0, 0, 0, 0.12), 0px 0px 13px rgba(0, 0, 0, 0.05);
}
diff --git a/src/styles/test.less b/src/styles/test.less
index d71b8b2..3241d98 100644
--- a/src/styles/test.less
+++ b/src/styles/test.less
@@ -12,26 +12,21 @@ body {
@h1: unit(@height, px);
@h: round(pow(@h1,1.1));
box-shadow: 0px @h @h1 * 2 fade(black, max(unit(25 - unit(@h), %), 5%)),
- 0px 0px @h fade(black, max(unit(25 - unit(@h), %), 5%));
+ 0px 0px @h fade(black, max(unit(25 - unit(@h*2), %), 5%));
}
/* Create a Parametric mixin and add a guard operation */
-.loop(@index) when(@index > 0) {
- .shadow_@{index} {
- .shadow(@index);
- }
- .loop(@index - 1);
-}
.unit {
padding: 1rem;
margin: 1rem;
- width: 3rem;
- height: 3rem;
+ width: 2rem;
+ height: 5rem;
display: inline-block;
background-color: white;
+ text-align: center;
border-top: 1px solid @gray_10;
border-bottom: 1px solid @gray_40;
@@ -39,6 +34,17 @@ body {
box-shadow: none;
transition: box-shadow .2s ease;
+
+ &:nth-child(1) { .shadow(1); }
+ &:nth-child(2) { .shadow(2); }
+ &:nth-child(3) { .shadow(3); }
+ &:nth-child(4) { .shadow(4); }
+ &:nth-child(5) { .shadow(5); }
+ &:nth-child(6) { .shadow(6); }
+ &:nth-child(7) { .shadow(9); }
+ &:nth-child(8) { .shadow(8); }
+ &:nth-child(9) { .shadow(9); }
+
&:hover {.shadow(10);}
}
diff --git a/src/test.html b/src/test.html
index c214875..af79549 100644
--- a/src/test.html
+++ b/src/test.html
@@ -9,41 +9,15 @@
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
- Content
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+