From 338824a50934a179ff0965db79e22ba14de253e9 Mon Sep 17 00:00:00 2001 From: rulingcom Date: Thu, 12 Mar 2015 18:03:36 +0800 Subject: [PATCH 01/10] addes bootstrap back --- .../images/google-message-background.jpg | Bin 0 -> 112390 bytes app/assets/images/sign-in-with-google.png | Bin 6899 -> 0 bytes .../assets/images/announcement-default.jpg | Bin 1502 -> 14882 bytes .../assets/stylesheets/bootstrap/_alerts.scss | 67 ++ .../assets/stylesheets/bootstrap/_badges.scss | 55 + .../stylesheets/bootstrap/_breadcrumbs.scss | 26 + .../stylesheets/bootstrap/_button-groups.scss | 226 +++++ .../stylesheets/bootstrap/_buttons.scss | 159 +++ .../stylesheets/bootstrap/_carousel.scss | 232 +++++ .../assets/stylesheets/bootstrap/_close.scss | 35 + .../assets/stylesheets/bootstrap/_code.scss | 63 ++ .../bootstrap/_component-animations.scss | 29 + .../stylesheets/bootstrap/_dropdowns.scss | 213 ++++ .../assets/stylesheets/bootstrap/_forms.scss | 436 ++++++++ .../stylesheets/bootstrap/_glyphicons.scss | 233 +++++ .../assets/stylesheets/bootstrap/_grid.scss | 84 ++ .../stylesheets/bootstrap/_input-groups.scss | 162 +++ .../stylesheets/bootstrap/_jumbotron.scss | 44 + .../assets/stylesheets/bootstrap/_labels.scss | 64 ++ .../stylesheets/bootstrap/_list-group.scss | 110 ++ .../assets/stylesheets/bootstrap/_media.scss | 56 ++ .../assets/stylesheets/bootstrap/_mixins.scss | 947 ++++++++++++++++++ .../assets/stylesheets/bootstrap/_modals.scss | 139 +++ .../assets/stylesheets/bootstrap/_navbar.scss | 620 ++++++++++++ .../assets/stylesheets/bootstrap/_navs.scss | 242 +++++ .../stylesheets/bootstrap/_normalize.scss | 423 ++++++++ .../assets/stylesheets/bootstrap/_pager.scss | 55 + .../stylesheets/bootstrap/_pagination.scss | 79 ++ .../assets/stylesheets/bootstrap/_panels.scss | 241 +++++ .../stylesheets/bootstrap/_popovers.scss | 133 +++ .../assets/stylesheets/bootstrap/_print.scss | 101 ++ .../stylesheets/bootstrap/_progress-bars.scss | 80 ++ .../bootstrap/_responsive-utilities.scss | 74 ++ .../stylesheets/bootstrap/_scaffolding.scss | 134 +++ .../assets/stylesheets/bootstrap/_tables.scss | 233 +++++ .../assets/stylesheets/bootstrap/_theme.scss | 247 +++++ .../stylesheets/bootstrap/_thumbnails.scss | 38 + .../stylesheets/bootstrap/_tooltip.scss | 95 ++ .../assets/stylesheets/bootstrap/_type.scss | 284 ++++++ .../stylesheets/bootstrap/_utilities.scss | 56 ++ .../stylesheets/bootstrap/_variables.scss | 833 +++++++++++++++ .../assets/stylesheets/bootstrap/_wells.scss | 29 + .../stylesheets/bootstrap/bootstrap.scss | 49 + .../stylesheets/template/base/_global.scss | 3 + .../template/base/_orbitbar-override.scss | 3 + .../template/base/_pagination.scss | 3 + .../stylesheets/template/base/_unity.scss | 3 + .../assets/stylesheets/template/init.scss | 4 + .../stylesheets/template/layout/content.scss | 3 + .../stylesheets/template/layout/footer.scss | 3 + .../stylesheets/template/layout/header.scss | 3 + .../stylesheets/template/layout/slide.scss | 3 + .../template/modules/ad_banner.scss | 216 ++-- .../template/modules/announcement.scss | 767 +++++++------- .../template/modules/archives.scss | 2 +- .../stylesheets/template/modules/faq.scss | 3 + .../stylesheets/template/modules/gallery.scss | 3 + .../stylesheets/template/modules/member.scss | 3 + .../stylesheets/template/modules/menu.scss | 3 + .../template/modules/personal_plugin.scss | 3 + .../template/modules/web_resource.scss | 3 + .../assets/stylesheets/template/template.scss | 11 +- .../template/widget/breadcrumb.scss | 3 + .../stylesheets/template/widget/sitemenu.scss | 106 +- .../announcement/_annc_widget1.html.erb | 6 +- .../announcement/_annc_widget12.html.erb | 12 +- .../announcement/_annc_widget2.html.erb | 4 +- .../announcement/_annc_widget3.html.erb | 4 +- .../announcement/_annc_widget4.html.erb | 8 +- .../modules/announcement/annc_index3.html.erb | 2 +- .../modules/announcement/info.json | 12 +- .../orbit_bootstrap/partial/_head.html.erb | 8 +- 72 files changed, 8051 insertions(+), 582 deletions(-) create mode 100644 app/assets/images/google-message-background.jpg delete mode 100644 app/assets/images/sign-in-with-google.png create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_alerts.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_mixins.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_modals.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navbar.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navs.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_normalize.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pager.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pagination.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_panels.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_popovers.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_print.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_progress-bars.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_responsive-utilities.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_scaffolding.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tables.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_theme.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_thumbnails.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tooltip.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_type.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_utilities.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_variables.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss diff --git a/app/assets/images/google-message-background.jpg b/app/assets/images/google-message-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efb11cec5fac4095d914e67365e987a5df8a4e5b GIT binary patch literal 112390 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 Q4hll1JEW;^rf*ODAL$?h>Hq)$ literal 0 HcmV?d00001 diff --git a/app/assets/images/sign-in-with-google.png b/app/assets/images/sign-in-with-google.png deleted file mode 100644 index b20d3783e4ac1c7cc4fe3d7eff8e3a1683234830..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6899 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 O&{Ee^tGH($_WuC2Ind_- diff --git a/app/templates/orbit_bootstrap/assets/images/announcement-default.jpg b/app/templates/orbit_bootstrap/assets/images/announcement-default.jpg index 3307828f8736722e5e441aa9791d58fd8d1a22af..b6b82f03c1e1cb15541b947547670fbfa53ec142 100644 GIT binary patch literal 14882 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 bPy5NhPX>N6@RNa`4E$u^-(%qX{=okM!PVIQ delta 925 zcmZ2fa*sQ?Gr-TCmrII^fq{Y7)59eQNT+}>2NRI|-@wESq$EpRBT9nv(@M${i&7aJ zQ}UBi6+Ckj(^G>|6H_V+Po~;1FfglShD4M^`1)8S=jZArg4F0$yK&KTol zXm0B4>}Kg~Zs2Ta=xX9|*Td=;G?)WNM(K095VkYvq!kT$-DjSK{ens{|C$ zOUX>Jg6eg|rFZfqCIgrS=C~9oDHN9krKVY>;I_a5m)^;8%ue;p++MN_3`~BWE{-7; zx8B^jnRUoPwzhvF_^ulO>*+j#0P&Jy%j$K6&Px z__UL~XTSXZtA6Tv7dvA_LL;kKM1ms&kN~j+8bDkiiv=Rl$cmw)9!1SHeXW18x3jk2 zZgo=Rao&CAY0=rVVE4J}!&ViUuD6^2 z{PRwQGl7Nmsn)a4Ch0E@(Q;LG5_GB1&f0S^V+pG~w>Qh|v&US!jxLfb*&8R_@^8r> z;pTVK-j=PNxU_KjwJ8hVgs9&-`m&_!(@M?8S9-gz?EPjZ)Xd+q)bru8{?l)ZcJBDN zeoJ$7rF_r5)XhQ49({U=;Wy7lYX7W>bLYIZbZ&^&)b9r)^y}+W8qEWC-st)qU*@d3 z=IPDedSwqDxA&LcTyD5DY0lZSt<&o79Q|0aMfUJpb*o!4{jAA*ZDgjYEn7C*muq3h z!wYA;c-+dZo-W(D%*txlQMSg0*Si|GetF}|s*PvgS=-AR{aMYl@4-PPZk-JWnizlt vh^4>);sRM5U@nkgf=FOj@_PB{ZU$zCcbq<#vKH370%aCYS3j3^P6 p, + > ul { + margin-bottom: 0; + } + > p + p { + margin-top: 5px; + } +} + +// Dismissable alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable { + padding-right: ($alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); +} +.alert-info { + @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); +} +.alert-warning { + @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); +} +.alert-danger { + @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss new file mode 100644 index 0000000..4014a80 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss @@ -0,0 +1,55 @@ +// +// Badges +// -------------------------------------------------- + + +// Base classes +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: $font-size-small; + font-weight: $badge-font-weight; + color: $badge-color; + line-height: $badge-line-height; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: $badge-bg; + border-radius: $badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + .btn-xs & { + top: 0; + padding: 1px 5px; + } +} + +// Hover state, but only for links +a.badge { + &:hover, + &:focus { + color: $badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } +} + +// Account for counters in navs +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: $badge-active-color; + background-color: $badge-active-bg; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss new file mode 100644 index 0000000..3641e33 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss @@ -0,0 +1,26 @@ +// +// Breadcrumbs +// -------------------------------------------------- + + +.breadcrumb { + padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; + margin-bottom: $line-height-computed; + list-style: none; + background-color: $breadcrumb-bg; + border-radius: $border-radius-base; + + > li { + display: inline-block; + + + li:before { + content: "#{$breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: $breadcrumb-color; + } + } + + > .active { + color: $breadcrumb-active-color; + } +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss new file mode 100644 index 0000000..066b4d7 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss @@ -0,0 +1,226 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + &:focus { + // Remove focus outline when dropdown JS adds it after closing the menu + outline: none; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + @include clearfix(); + + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + @include border-right-radius(0); + } +} +// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + @include border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child { + > .btn:last-child, + > .dropdown-toggle { + @include border-right-radius(0); + } +} +.btn-group > .btn-group:last-child > .btn:first-child { + @include border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { @extend .btn-xs; } +.btn-group-sm > .btn { @extend .btn-sm; } +.btn-group-lg > .btn { @extend .btn-lg; } + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + @include box-shadow(none); + } +} + + +// Reposition the caret +.btn .caret { + margin-left: 0; +} +// Carets in other button sizes +.btn-lg .caret { + border-width: $caret-width-large $caret-width-large 0; + border-bottom-width: 0; +} +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 $caret-width-large $caret-width-large; +} + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + @include clearfix(); + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + border-top-right-radius: $border-radius-base; + @include border-bottom-radius(0); + } + &:last-child:not(:first-child) { + border-bottom-left-radius: $border-radius-base; + @include border-top-radius(0); + } +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + @include border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + @include border-top-radius(0); +} + + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } +} + + +// Checkbox and radio options +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss new file mode 100644 index 0000000..28110b6 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss @@ -0,0 +1,159 @@ +// +// Buttons +// -------------------------------------------------- + + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: $btn-font-weight; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base); + @include user-select(none); + + &, + &:active, + &.active { + &:focus { + @include tab-focus(); + } + } + + &:hover, + &:focus { + color: $btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: not-allowed; + pointer-events: none; // Future-proof disabling of clicks + @include opacity(.65); + @include box-shadow(none); + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); +} +.btn-primary { + @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border); +} +// Success appears as green +.btn-success { + @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); +} +// Info appears as blue-green +.btn-info { + @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); +} +// Warning appears as orange +.btn-warning { + @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); +} + + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: $link-color; + font-weight: normal; + cursor: pointer; + border-radius: 0; + + &, + &:active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + @include box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: $link-hover-color; + text-decoration: underline; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: $btn-link-disabled-color; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small); +} +.btn-xs { + @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $border-radius-small); +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss new file mode 100644 index 0000000..d8f2364 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss @@ -0,0 +1,232 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + @include transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + @include img-responsive(); + line-height: 1; + } + } + + > .active, + > .next, + > .prev { display: block; } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: $carousel-control-width; + @include opacity($carousel-control-opacity); + font-size: $carousel-control-font-size; + color: $carousel-control-color; + text-align: center; + text-shadow: $carousel-text-shadow; + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: none; + color: $carousel-control-color; + text-decoration: none; + @include opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; + } + + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid $carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: $carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: $carousel-caption-color; + text-align: center; + text-shadow: $carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + + +// Scale up controls for tablets and up +@media screen and (min-width: $screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss new file mode 100644 index 0000000..62ce30f --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss @@ -0,0 +1,35 @@ +// +// Close icons +// -------------------------------------------------- + + +.close { + float: right; + font-size: ($font-size-base * 1.5); + font-weight: $close-font-weight; + line-height: 1; + color: $close-color; + text-shadow: $close-text-shadow; + @include opacity(.2); + + &:hover, + &:focus { + color: $close-color; + text-decoration: none; + cursor: pointer; + @include opacity(.5); + } + + // [converter] extracted button& to button.close +} + +// Additional properties for button version +// iOS requires the button element instead of an anchor tag. +// If you want the anchor version, it requires `href="#"`. +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss new file mode 100644 index 0000000..8953616 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss @@ -0,0 +1,63 @@ +// +// Code (inline and block) +// -------------------------------------------------- + + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: $font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: $code-color; + background-color: $code-bg; + white-space: nowrap; + border-radius: $border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: $kbd-color; + background-color: $kbd-bg; + border-radius: $border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); +} + +// Blocks of code +pre { + display: block; + padding: (($line-height-computed - 1) / 2); + margin: 0 0 ($line-height-computed / 2); + font-size: ($font-size-base - 1); // 14px to 13px + line-height: $line-height-base; + word-break: break-all; + word-wrap: break-word; + color: $pre-color; + background-color: $pre-bg; + border: 1px solid $pre-border-color; + border-radius: $border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: $pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss new file mode 100644 index 0000000..86632fd --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss @@ -0,0 +1,29 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. + +.fade { + opacity: 0; + @include transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + &.in { + display: block; + } +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + @include transition(height .35s ease); +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss new file mode 100644 index 0000000..526be5b --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss @@ -0,0 +1,213 @@ +// +// Dropdown menus +// -------------------------------------------------- + + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: $caret-width-base solid; + border-right: $caret-width-base solid transparent; + border-left: $caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: $zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: $font-size-base; + background-color: $dropdown-bg; + border: 1px solid $dropdown-fallback-border; // IE8 fallback + border: 1px solid $dropdown-border; + border-radius: $border-radius-base; + @include box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + @include nav-divider($dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: $line-height-base; + color: $dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: $dropdown-link-hover-color; + background-color: $dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: $dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: $dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: $dropdown-link-disabled-color; + } +} +// Nuke hover/focus effects +.dropdown-menu > .disabled > a { + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + @include reset-filter(); + cursor: not-allowed; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: $font-size-small; + line-height: $line-height-base; + color: $dropdown-header-color; +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: ($zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: $caret-width-base solid; + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; + } +} + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: $grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + right: 0; left: auto; + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + left: 0; right: auto; + } + } +} + diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss new file mode 100644 index 0000000..2628238 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss @@ -0,0 +1,436 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: $line-height-computed; + font-size: ($font-size-base * 1.5); + line-height: inherit; + color: $legend-color; + border: 0; + border-bottom: 1px solid $legend-border-color; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + @include box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; /* IE8-9 */ + line-height: normal; +} + +// Set the height of file controls to match text inputs +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + @include tab-focus(); +} + +// Adjust output element +output { + display: block; + padding-top: ($padding-base-vertical + 1); + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// textarea +// input[type="text"] +// input[type="password"] +// input[type="datetime"] +// input[type="datetime-local"] +// input[type="date"] +// input[type="month"] +// input[type="time"] +// input[type="week"] +// input[type="number"] +// input[type="email"] +// input[type="url"] +// input[type="search"] +// input[type="tel"] +// input[type="color"] + +.form-control { + display: block; + width: 100%; + height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: $padding-base-vertical $padding-base-horizontal; + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; + background-color: $input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid $input-border; + border-radius: $input-border-radius; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s); + + // Customize the `:focus` state to imitate native WebKit styles. + @include form-control-focus(); + + // Placeholder + @include placeholder(); + + // Disabled and read-only inputs + // + // HTML5 says that controls under a fieldset > legend:first-child won't be + // disabled if the fieldset is disabled. Due to implementation difficulty, we + // don't honor that edge case; we style them as disabled anyway. + &[disabled], + &[readonly], + fieldset[disabled] & { + cursor: not-allowed; + background-color: $input-bg-disabled; + opacity: 1; // iOS fix for unreadable disabled content + } + + // [converter] extracted textarea& to textarea.form-control +} + +// Reset height for `textarea`s +textarea.form-control { + height: auto; +} + + +// Search inputs in iOS +// +// This overrides the extra rounded corners on search inputs in iOS so that our +// `.form-control` class can properly style them. Note that this cannot simply +// be added to `.form-control` as it's not specific enough. For details, see +// https://github.com/twbs/bootstrap/issues/11586. + +input[type="search"] { + -webkit-appearance: none; +} + + +// Special styles for iOS date input +// +// In Mobile Safari, date inputs require a pixel line-height that matches the +// given height of the input. + +input[type="date"] { + line-height: $input-height-base; +} + + +// Form groups +// +// Designed to help with the organization and spacing of vertical forms. For +// horizontal forms, use the predefined grid classes. + +.form-group { + margin-bottom: 15px; +} + + +// Checkboxes and radios +// +// Indent the labels to position radios/checkboxes as hanging controls. + +.radio, +.checkbox { + display: block; + min-height: $line-height-computed; // clear the floating input if there is no label text + margin-top: 10px; + margin-bottom: 10px; + padding-left: 20px; + label { + display: inline; + font-weight: normal; + cursor: pointer; + } +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing +} + +// Radios and checkboxes on same line +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; // space out consecutive inline controls +} + +// Apply same disabled cursor tweak as for inputs +// +// Note: Neither radios nor checkboxes can be readonly. +input[type="radio"], +input[type="checkbox"], +.radio, +.radio-inline, +.checkbox, +.checkbox-inline { + &[disabled], + fieldset[disabled] & { + cursor: not-allowed; + } +} + + +// Form control sizing +// +// Build on `.form-control` with modifier classes to decrease or increase the +// height and font-size of form controls. + +@include input-size('.input-sm', $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small); + +@include input-size('.input-lg', $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large); + + +// Form control feedback states +// +// Apply contextual and semantic states to individual form controls. + +.has-feedback { + // Enable absolute positioning + position: relative; + + // Ensure icons don't overlap text + .form-control { + padding-right: ($input-height-base * 1.25); + } + + // Feedback icon (requires .glyphicon classes) + .form-control-feedback { + position: absolute; + top: ($line-height-computed + 5); // Height of the `label` and its margin + right: 0; + display: block; + width: $input-height-base; + height: $input-height-base; + line-height: $input-height-base; + text-align: center; + } +} + +// Feedback states +.has-success { + @include form-control-validation($state-success-text, $state-success-text, $state-success-bg); +} +.has-warning { + @include form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg); +} +.has-error { + @include form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg); +} + + +// Static form control text +// +// Apply class to a `p` element to make any string of text align with labels in +// a horizontal form layout. + +.form-control-static { + margin-bottom: 0; // Remove default margin from `p` +} + + +// Help text +// +// Apply to any element you wish to create light text for placement immediately +// below a form control. Use for general help, formatting, or instructional text. + +.help-block { + display: block; // account for any element using help-block + margin-top: 5px; + margin-bottom: 10px; + color: lighten($text-color, 25%); // lighten the text some for contrast +} + + + +// Inline forms +// +// Make forms appear inline(-block) by adding the `.form-inline` class. Inline +// forms begin stacked on extra small (mobile) devices and then go inline when +// viewports reach <768px. +// +// Requires wrapping inputs and labels with `.form-group` for proper display of +// default HTML form controls and our custom form controls (e.g., input groups). +// +// Heads up! This is mixin-ed into `.navbar-form` in navbars.less. + +.form-inline { + + // Kick in the inline + @media (min-width: $screen-sm-min) { + // Inline-block all the things for "inline" + .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + + // In navbar-form, allow folks to *not* use `.form-group` + .form-control { + display: inline-block; + width: auto; // Prevent labels from stacking above inputs in `.form-group` + vertical-align: middle; + } + // Input groups need that 100% width though + .input-group > .form-control { + width: 100%; + } + + .control-label { + margin-bottom: 0; + vertical-align: middle; + } + + // Remove default margin on radios/checkboxes that were used for stacking, and + // then undo the floating of radios and checkboxes to match (which also avoids + // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969). + .radio, + .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + padding-left: 0; + vertical-align: middle; + } + .radio input[type="radio"], + .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } + + // Validation states + // + // Reposition the icon because it's now within a grid column and columns have + // `position: relative;` on them. Also accounts for the grid gutter padding. + .has-feedback .form-control-feedback { + top: 0; + } + } +} + + +// Horizontal forms +// +// Horizontal forms are built on grid classes and allow you to create forms with +// labels on the left and inputs on the right. + +.form-horizontal { + + // Consistent vertical alignment of labels, radios, and checkboxes + .control-label, + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: ($padding-base-vertical + 1); // Default padding plus a border + } + // Account for padding we're adding to ensure the alignment and of help text + // and other content below items + .radio, + .checkbox { + min-height: ($line-height-computed + ($padding-base-vertical + 1)); + } + + // Make form groups behave like rows + .form-group { + @include make-row(); + } + + .form-control-static { + padding-top: ($padding-base-vertical + 1); + } + + // Only right align form labels here when the columns stop stacking + @media (min-width: $screen-sm-min) { + .control-label { + text-align: right; + } + } + + // Validation states + // + // Reposition the icon because it's now within a grid column and columns have + // `position: relative;` on them. Also accounts for the grid gutter padding. + .has-feedback .form-control-feedback { + top: 0; + right: ($grid-gutter-width / 2); + } +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss new file mode 100644 index 0000000..c508835 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss @@ -0,0 +1,233 @@ +// +// Glyphicons for Bootstrap +// +// Since icons are fonts, they can be placed anywhere text is placed and are +// thus automatically sized to match the surrounding child. To use, create an +// inline element with the appropriate classes, like so: +// +// Star + +// Import the fonts +@font-face { + font-family: 'Glyphicons Halflings'; + src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'), '#{$icon-font-path}#{$icon-font-name}.eot')); + src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot?#iefix'), '#{$icon-font-path}#{$icon-font-name}.eot?#iefix')) format('embedded-opentype'), + url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff'), '#{$icon-font-path}#{$icon-font-name}.woff')) format('woff'), + url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.ttf'), '#{$icon-font-path}#{$icon-font-name}.ttf')) format('truetype'), + url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}'), '#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}')) format('svg'); +} + +// Catchall baseclass +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +// Individual icons +.glyphicon-asterisk { &:before { content: "\2a"; } } +.glyphicon-plus { &:before { content: "\2b"; } } +.glyphicon-euro { &:before { content: "\20ac"; } } +.glyphicon-minus { &:before { content: "\2212"; } } +.glyphicon-cloud { &:before { content: "\2601"; } } +.glyphicon-envelope { &:before { content: "\2709"; } } +.glyphicon-pencil { &:before { content: "\270f"; } } +.glyphicon-glass { &:before { content: "\e001"; } } +.glyphicon-music { &:before { content: "\e002"; } } +.glyphicon-search { &:before { content: "\e003"; } } +.glyphicon-heart { &:before { content: "\e005"; } } +.glyphicon-star { &:before { content: "\e006"; } } +.glyphicon-star-empty { &:before { content: "\e007"; } } +.glyphicon-user { &:before { content: "\e008"; } } +.glyphicon-film { &:before { content: "\e009"; } } +.glyphicon-th-large { &:before { content: "\e010"; } } +.glyphicon-th { &:before { content: "\e011"; } } +.glyphicon-th-list { &:before { content: "\e012"; } } +.glyphicon-ok { &:before { content: "\e013"; } } +.glyphicon-remove { &:before { content: "\e014"; } } +.glyphicon-zoom-in { &:before { content: "\e015"; } } +.glyphicon-zoom-out { &:before { content: "\e016"; } } +.glyphicon-off { &:before { content: "\e017"; } } +.glyphicon-signal { &:before { content: "\e018"; } } +.glyphicon-cog { &:before { content: "\e019"; } } +.glyphicon-trash { &:before { content: "\e020"; } } +.glyphicon-home { &:before { content: "\e021"; } } +.glyphicon-file { &:before { content: "\e022"; } } +.glyphicon-time { &:before { content: "\e023"; } } +.glyphicon-road { &:before { content: "\e024"; } } +.glyphicon-download-alt { &:before { content: "\e025"; } } +.glyphicon-download { &:before { content: "\e026"; } } +.glyphicon-upload { &:before { content: "\e027"; } } +.glyphicon-inbox { &:before { content: "\e028"; } } +.glyphicon-play-circle { &:before { content: "\e029"; } } +.glyphicon-repeat { &:before { content: "\e030"; } } +.glyphicon-refresh { &:before { content: "\e031"; } } +.glyphicon-list-alt { &:before { content: "\e032"; } } +.glyphicon-lock { &:before { content: "\e033"; } } +.glyphicon-flag { &:before { content: "\e034"; } } +.glyphicon-headphones { &:before { content: "\e035"; } } +.glyphicon-volume-off { &:before { content: "\e036"; } } +.glyphicon-volume-down { &:before { content: "\e037"; } } +.glyphicon-volume-up { &:before { content: "\e038"; } } +.glyphicon-qrcode { &:before { content: "\e039"; } } +.glyphicon-barcode { &:before { content: "\e040"; } } +.glyphicon-tag { &:before { content: "\e041"; } } +.glyphicon-tags { &:before { content: "\e042"; } } +.glyphicon-book { &:before { content: "\e043"; } } +.glyphicon-bookmark { &:before { content: "\e044"; } } +.glyphicon-print { &:before { content: "\e045"; } } +.glyphicon-camera { &:before { content: "\e046"; } } +.glyphicon-font { &:before { content: "\e047"; } } +.glyphicon-bold { &:before { content: "\e048"; } } +.glyphicon-italic { &:before { content: "\e049"; } } +.glyphicon-text-height { &:before { content: "\e050"; } } +.glyphicon-text-width { &:before { content: "\e051"; } } +.glyphicon-align-left { &:before { content: "\e052"; } } +.glyphicon-align-center { &:before { content: "\e053"; } } +.glyphicon-align-right { &:before { content: "\e054"; } } +.glyphicon-align-justify { &:before { content: "\e055"; } } +.glyphicon-list { &:before { content: "\e056"; } } +.glyphicon-indent-left { &:before { content: "\e057"; } } +.glyphicon-indent-right { &:before { content: "\e058"; } } +.glyphicon-facetime-video { &:before { content: "\e059"; } } +.glyphicon-picture { &:before { content: "\e060"; } } +.glyphicon-map-marker { &:before { content: "\e062"; } } +.glyphicon-adjust { &:before { content: "\e063"; } } +.glyphicon-tint { &:before { content: "\e064"; } } +.glyphicon-edit { &:before { content: "\e065"; } } +.glyphicon-share { &:before { content: "\e066"; } } +.glyphicon-check { &:before { content: "\e067"; } } +.glyphicon-move { &:before { content: "\e068"; } } +.glyphicon-step-backward { &:before { content: "\e069"; } } +.glyphicon-fast-backward { &:before { content: "\e070"; } } +.glyphicon-backward { &:before { content: "\e071"; } } +.glyphicon-play { &:before { content: "\e072"; } } +.glyphicon-pause { &:before { content: "\e073"; } } +.glyphicon-stop { &:before { content: "\e074"; } } +.glyphicon-forward { &:before { content: "\e075"; } } +.glyphicon-fast-forward { &:before { content: "\e076"; } } +.glyphicon-step-forward { &:before { content: "\e077"; } } +.glyphicon-eject { &:before { content: "\e078"; } } +.glyphicon-chevron-left { &:before { content: "\e079"; } } +.glyphicon-chevron-right { &:before { content: "\e080"; } } +.glyphicon-plus-sign { &:before { content: "\e081"; } } +.glyphicon-minus-sign { &:before { content: "\e082"; } } +.glyphicon-remove-sign { &:before { content: "\e083"; } } +.glyphicon-ok-sign { &:before { content: "\e084"; } } +.glyphicon-question-sign { &:before { content: "\e085"; } } +.glyphicon-info-sign { &:before { content: "\e086"; } } +.glyphicon-screenshot { &:before { content: "\e087"; } } +.glyphicon-remove-circle { &:before { content: "\e088"; } } +.glyphicon-ok-circle { &:before { content: "\e089"; } } +.glyphicon-ban-circle { &:before { content: "\e090"; } } +.glyphicon-arrow-left { &:before { content: "\e091"; } } +.glyphicon-arrow-right { &:before { content: "\e092"; } } +.glyphicon-arrow-up { &:before { content: "\e093"; } } +.glyphicon-arrow-down { &:before { content: "\e094"; } } +.glyphicon-share-alt { &:before { content: "\e095"; } } +.glyphicon-resize-full { &:before { content: "\e096"; } } +.glyphicon-resize-small { &:before { content: "\e097"; } } +.glyphicon-exclamation-sign { &:before { content: "\e101"; } } +.glyphicon-gift { &:before { content: "\e102"; } } +.glyphicon-leaf { &:before { content: "\e103"; } } +.glyphicon-fire { &:before { content: "\e104"; } } +.glyphicon-eye-open { &:before { content: "\e105"; } } +.glyphicon-eye-close { &:before { content: "\e106"; } } +.glyphicon-warning-sign { &:before { content: "\e107"; } } +.glyphicon-plane { &:before { content: "\e108"; } } +.glyphicon-calendar { &:before { content: "\e109"; } } +.glyphicon-random { &:before { content: "\e110"; } } +.glyphicon-comment { &:before { content: "\e111"; } } +.glyphicon-magnet { &:before { content: "\e112"; } } +.glyphicon-chevron-up { &:before { content: "\e113"; } } +.glyphicon-chevron-down { &:before { content: "\e114"; } } +.glyphicon-retweet { &:before { content: "\e115"; } } +.glyphicon-shopping-cart { &:before { content: "\e116"; } } +.glyphicon-folder-close { &:before { content: "\e117"; } } +.glyphicon-folder-open { &:before { content: "\e118"; } } +.glyphicon-resize-vertical { &:before { content: "\e119"; } } +.glyphicon-resize-horizontal { &:before { content: "\e120"; } } +.glyphicon-hdd { &:before { content: "\e121"; } } +.glyphicon-bullhorn { &:before { content: "\e122"; } } +.glyphicon-bell { &:before { content: "\e123"; } } +.glyphicon-certificate { &:before { content: "\e124"; } } +.glyphicon-thumbs-up { &:before { content: "\e125"; } } +.glyphicon-thumbs-down { &:before { content: "\e126"; } } +.glyphicon-hand-right { &:before { content: "\e127"; } } +.glyphicon-hand-left { &:before { content: "\e128"; } } +.glyphicon-hand-up { &:before { content: "\e129"; } } +.glyphicon-hand-down { &:before { content: "\e130"; } } +.glyphicon-circle-arrow-right { &:before { content: "\e131"; } } +.glyphicon-circle-arrow-left { &:before { content: "\e132"; } } +.glyphicon-circle-arrow-up { &:before { content: "\e133"; } } +.glyphicon-circle-arrow-down { &:before { content: "\e134"; } } +.glyphicon-globe { &:before { content: "\e135"; } } +.glyphicon-wrench { &:before { content: "\e136"; } } +.glyphicon-tasks { &:before { content: "\e137"; } } +.glyphicon-filter { &:before { content: "\e138"; } } +.glyphicon-briefcase { &:before { content: "\e139"; } } +.glyphicon-fullscreen { &:before { content: "\e140"; } } +.glyphicon-dashboard { &:before { content: "\e141"; } } +.glyphicon-paperclip { &:before { content: "\e142"; } } +.glyphicon-heart-empty { &:before { content: "\e143"; } } +.glyphicon-link { &:before { content: "\e144"; } } +.glyphicon-phone { &:before { content: "\e145"; } } +.glyphicon-pushpin { &:before { content: "\e146"; } } +.glyphicon-usd { &:before { content: "\e148"; } } +.glyphicon-gbp { &:before { content: "\e149"; } } +.glyphicon-sort { &:before { content: "\e150"; } } +.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } } +.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } } +.glyphicon-sort-by-order { &:before { content: "\e153"; } } +.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } } +.glyphicon-sort-by-attributes { &:before { content: "\e155"; } } +.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } } +.glyphicon-unchecked { &:before { content: "\e157"; } } +.glyphicon-expand { &:before { content: "\e158"; } } +.glyphicon-collapse-down { &:before { content: "\e159"; } } +.glyphicon-collapse-up { &:before { content: "\e160"; } } +.glyphicon-log-in { &:before { content: "\e161"; } } +.glyphicon-flash { &:before { content: "\e162"; } } +.glyphicon-log-out { &:before { content: "\e163"; } } +.glyphicon-new-window { &:before { content: "\e164"; } } +.glyphicon-record { &:before { content: "\e165"; } } +.glyphicon-save { &:before { content: "\e166"; } } +.glyphicon-open { &:before { content: "\e167"; } } +.glyphicon-saved { &:before { content: "\e168"; } } +.glyphicon-import { &:before { content: "\e169"; } } +.glyphicon-export { &:before { content: "\e170"; } } +.glyphicon-send { &:before { content: "\e171"; } } +.glyphicon-floppy-disk { &:before { content: "\e172"; } } +.glyphicon-floppy-saved { &:before { content: "\e173"; } } +.glyphicon-floppy-remove { &:before { content: "\e174"; } } +.glyphicon-floppy-save { &:before { content: "\e175"; } } +.glyphicon-floppy-open { &:before { content: "\e176"; } } +.glyphicon-credit-card { &:before { content: "\e177"; } } +.glyphicon-transfer { &:before { content: "\e178"; } } +.glyphicon-cutlery { &:before { content: "\e179"; } } +.glyphicon-header { &:before { content: "\e180"; } } +.glyphicon-compressed { &:before { content: "\e181"; } } +.glyphicon-earphone { &:before { content: "\e182"; } } +.glyphicon-phone-alt { &:before { content: "\e183"; } } +.glyphicon-tower { &:before { content: "\e184"; } } +.glyphicon-stats { &:before { content: "\e185"; } } +.glyphicon-sd-video { &:before { content: "\e186"; } } +.glyphicon-hd-video { &:before { content: "\e187"; } } +.glyphicon-subtitles { &:before { content: "\e188"; } } +.glyphicon-sound-stereo { &:before { content: "\e189"; } } +.glyphicon-sound-dolby { &:before { content: "\e190"; } } +.glyphicon-sound-5-1 { &:before { content: "\e191"; } } +.glyphicon-sound-6-1 { &:before { content: "\e192"; } } +.glyphicon-sound-7-1 { &:before { content: "\e193"; } } +.glyphicon-copyright-mark { &:before { content: "\e194"; } } +.glyphicon-registration-mark { &:before { content: "\e195"; } } +.glyphicon-cloud-download { &:before { content: "\e197"; } } +.glyphicon-cloud-upload { &:before { content: "\e198"; } } +.glyphicon-tree-conifer { &:before { content: "\e199"; } } +.glyphicon-tree-deciduous { &:before { content: "\e200"; } } diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss new file mode 100644 index 0000000..f71f8b9 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss @@ -0,0 +1,84 @@ +// +// Grid system +// -------------------------------------------------- + + +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +.container { + @include container-fixed(); + + @media (min-width: $screen-sm-min) { + width: $container-sm; + } + @media (min-width: $screen-md-min) { + width: $container-md; + } + @media (min-width: $screen-lg-min) { + width: $container-lg; + } +} + + +// Fluid container +// +// Utilizes the mixin meant for fixed width containers, but without any defined +// width for fluid, full width layouts. + +.container-fluid { + @include container-fixed(); +} + + +// Row +// +// Rows contain and clear the floats of your columns. + +.row { + @include make-row(); +} + + +// Columns +// +// Common styles for small and large grid columns + +@include make-grid-columns(); + + +// Extra small grid +// +// Columns, offsets, pushes, and pulls for extra small devices like +// smartphones. + +@include make-grid(xs); + + +// Small grid +// +// Columns, offsets, pushes, and pulls for the small device range, from phones +// to tablets. + +@media (min-width: $screen-sm-min) { + @include make-grid(sm); +} + + +// Medium grid +// +// Columns, offsets, pushes, and pulls for the desktop device range. + +@media (min-width: $screen-md-min) { + @include make-grid(md); +} + + +// Large grid +// +// Columns, offsets, pushes, and pulls for the large desktop device range. + +@media (min-width: $screen-lg-min) { + @include make-grid(lg); +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss new file mode 100644 index 0000000..6c26c1d --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss @@ -0,0 +1,162 @@ +// +// Input groups +// -------------------------------------------------- + +// Base styles +// ------------------------- +.input-group { + position: relative; // For dropdowns + display: table; + border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table + + // Undo padding and float of grid classes + &[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; + } + + .form-control { + // Ensure that the input is always above the *appended* addon button for + // proper border colors. + position: relative; + z-index: 2; + + // IE9 fubars the placeholder attribute in text inputs and the arrows on + // select elements in input groups. To fix it, we float the input. Details: + // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 + float: left; + + width: 100%; + margin-bottom: 0; + } +} + +// Sizing options +// +// Remix the default form control sizing classes into new ones for easier +// manipulation. + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { @extend .input-lg; } +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { @extend .input-sm; } + + +// Display as table-cell +// ------------------------- +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; + + &:not(:first-child):not(:last-child) { + border-radius: 0; + } +} +// Addon and addon wrapper for buttons +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; // Match the inputs +} + +// Text input groups +// ------------------------- +.input-group-addon { + padding: $padding-base-vertical $padding-base-horizontal; + font-size: $font-size-base; + font-weight: normal; + line-height: 1; + color: $input-color; + text-align: center; + background-color: $input-group-addon-bg; + border: 1px solid $input-group-addon-border-color; + border-radius: $border-radius-base; + + // Sizing + &.input-sm { + padding: $padding-small-vertical $padding-small-horizontal; + font-size: $font-size-small; + border-radius: $border-radius-small; + } + &.input-lg { + padding: $padding-large-vertical $padding-large-horizontal; + font-size: $font-size-large; + border-radius: $border-radius-large; + } + + // Nuke default margins from checkboxes and radios to vertically center within. + input[type="radio"], + input[type="checkbox"] { + margin-top: 0; + } +} + +// Reset rounded corners +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + @include border-right-radius(0); +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + @include border-left-radius(0); +} +.input-group-addon:last-child { + border-left: 0; +} + +// Button input groups +// ------------------------- +.input-group-btn { + position: relative; + // Jankily prevent input button groups from wrapping with `white-space` and + // `font-size` in combination with `inline-block` on buttons. + font-size: 0; + white-space: nowrap; + + // Negative margin for spacing, position for bringing hovered/focused/actived + // element above the siblings. + > .btn { + position: relative; + + .btn { + margin-left: -1px; + } + // Bring the "active" button to the front + &:hover, + &:focus, + &:active { + z-index: 2; + } + } + + // Negative margin to only have a 1px border between the two + &:first-child { + > .btn, + > .btn-group { + margin-right: -1px; + } + } + &:last-child { + > .btn, + > .btn-group { + margin-left: -1px; + } + } +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss new file mode 100644 index 0000000..4e401e7 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss @@ -0,0 +1,44 @@ +// +// Jumbotron +// -------------------------------------------------- + + +.jumbotron { + padding: $jumbotron-padding; + margin-bottom: $jumbotron-padding; + color: $jumbotron-color; + background-color: $jumbotron-bg; + + h1, + .h1 { + color: $jumbotron-heading-color; + } + p { + margin-bottom: ($jumbotron-padding / 2); + font-size: $jumbotron-font-size; + font-weight: 200; + } + + .container & { + border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container + } + + .container { + max-width: 100%; + } + + @media screen and (min-width: $screen-sm-min) { + padding-top: ($jumbotron-padding * 1.6); + padding-bottom: ($jumbotron-padding * 1.6); + + .container & { + padding-left: ($jumbotron-padding * 2); + padding-right: ($jumbotron-padding * 2); + } + + h1, + .h1 { + font-size: ($font-size-base * 4.5); + } + } +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss new file mode 100644 index 0000000..8353eb1 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss @@ -0,0 +1,64 @@ +// +// Labels +// -------------------------------------------------- + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: $label-color; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; + + // Add hover effects, but only for links + &[href] { + &:hover, + &:focus { + color: $label-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Empty labels collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for labels in buttons + .btn & { + position: relative; + top: -1px; + } +} + +// Colors +// Contextual variations (linked labels get darker on :hover) + +.label-default { + @include label-variant($label-default-bg); +} + +.label-primary { + @include label-variant($label-primary-bg); +} + +.label-success { + @include label-variant($label-success-bg); +} + +.label-info { + @include label-variant($label-info-bg); +} + +.label-warning { + @include label-variant($label-warning-bg); +} + +.label-danger { + @include label-variant($label-danger-bg); +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss new file mode 100644 index 0000000..b608991 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss @@ -0,0 +1,110 @@ +// +// List groups +// -------------------------------------------------- + + +// Base class +// +// Easily usable on
    ,
      , or
      . + +.list-group { + // No need to set list-style: none; since .list-group-item is block level + margin-bottom: 20px; + padding-left: 0; // reset padding because ul and ol +} + + +// Individual list items +// +// Use on `li`s or `div`s within the `.list-group` parent. + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + // Place the border on the list items and negative margin up for better styling + margin-bottom: -1px; + background-color: $list-group-bg; + border: 1px solid $list-group-border; + + // Round the first and last items + &:first-child { + @include border-top-radius($list-group-border-radius); + } + &:last-child { + margin-bottom: 0; + @include border-bottom-radius($list-group-border-radius); + } + + // Align badges within list items + > .badge { + float: right; + } + > .badge + .badge { + margin-right: 5px; + } +} + + +// Linked list items +// +// Use anchor elements instead of `li`s or `div`s to create linked list items. +// Includes an extra `.active` modifier class for showing selected items. + +a.list-group-item { + color: $list-group-link-color; + + .list-group-item-heading { + color: $list-group-link-heading-color; + } + + // Hover state + &:hover, + &:focus { + text-decoration: none; + background-color: $list-group-hover-bg; + } + + // Active class on item itself, not parent + &.active, + &.active:hover, + &.active:focus { + z-index: 2; // Place active items above their siblings for proper border styling + color: $list-group-active-color; + background-color: $list-group-active-bg; + border-color: $list-group-active-border; + + // Force color to inherit for custom content + .list-group-item-heading { + color: inherit; + } + .list-group-item-text { + color: $list-group-active-text-color; + } + } +} + + +// Contextual variants +// +// Add modifier classes to change text and background color on individual items. +// Organizationally, this must come after the `:hover` states. + +@include list-group-item-variant(success, $state-success-bg, $state-success-text); +@include list-group-item-variant(info, $state-info-bg, $state-info-text); +@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text); +@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text); + + +// Custom content options +// +// Extra classes for creating well-formatted content within `.list-group-item`s. + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss new file mode 100644 index 0000000..5ad22cd --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss @@ -0,0 +1,56 @@ +// Media objects +// Source: http://stubbornella.org/content/?p=497 +// -------------------------------------------------- + + +// Common styles +// ------------------------- + +// Clear the floats +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +// Proper spacing between instances of .media +.media, +.media .media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} + +// For images and videos, set to block +.media-object { + display: block; +} + +// Reset margins on headings for tighter default spacing +.media-heading { + margin: 0 0 5px; +} + + +// Media image alignment +// ------------------------- + +.media { + > .pull-left { + margin-right: 10px; + } + > .pull-right { + margin-left: 10px; + } +} + + +// Media list variation +// ------------------------- + +// Undo default ul/ol styles +.media-list { + padding-left: 0; + list-style: none; +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_mixins.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_mixins.scss new file mode 100644 index 0000000..74ccf9f --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_mixins.scss @@ -0,0 +1,947 @@ +// +// Mixins +// -------------------------------------------------- + + +// Utilities +// ------------------------- + +// Clearfix +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ +// +// For modern browsers +// 1. The space content is one way to avoid an Opera bug when the +// contenteditable attribute is included anywhere else in the document. +// Otherwise it causes space to appear at the top and bottom of elements +// that are clearfixed. +// 2. The use of `table` rather than `block` is only necessary if using +// `:before` to contain the top-margins of child elements. +@mixin clearfix() { + &:before, + &:after { + content: " "; // 1 + display: table; // 2 + } + &:after { + clear: both; + } +} + +// WebKit-style focus +@mixin tab-focus() { + // Default + outline: thin dotted; + // WebKit + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +// Center-align a block level element +@mixin center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} + +// Sizing shortcuts +@mixin size($width, $height) { + width: $width; + height: $height; +} +@mixin square($size) { + @include size($size, $size); +} + +// Placeholder text +@mixin placeholder($color: $input-color-placeholder) { + &::-moz-placeholder { color: $color; // Firefox + opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526 + &:-ms-input-placeholder { color: $color; } // Internet Explorer 10+ + &::-webkit-input-placeholder { color: $color; } // Safari and Chrome +} + +// Text overflow +// Requires inline-block or block for proper styling +@mixin text-overflow() { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +// CSS image replacement +// +// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for +// mixins being reused as classes with the same name, this doesn't hold up. As +// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note +// that we cannot chain the mixins together in Less, so they are repeated. +// +// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 + +// Deprecated as of v3.0.1 (will be removed in v4) +@mixin hide-text() { + font: #{0/0} a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +// New mixin to use as of v3.0.1 +@mixin text-hide() { + @include hide-text(); +} + + + +// CSS3 PROPERTIES +// -------------------------------------------------- + +// Single side border-radius +@mixin border-top-radius($radius) { + border-top-right-radius: $radius; + border-top-left-radius: $radius; +} +@mixin border-right-radius($radius) { + border-bottom-right-radius: $radius; + border-top-right-radius: $radius; +} +@mixin border-bottom-radius($radius) { + border-bottom-right-radius: $radius; + border-bottom-left-radius: $radius; +} +@mixin border-left-radius($radius) { + border-bottom-left-radius: $radius; + border-top-left-radius: $radius; +} + +// Drop shadows +// +// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's +// supported browsers that have box shadow capabilities now support the +// standard `box-shadow` property. +@mixin box-shadow($shadow...) { + -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1 + box-shadow: $shadow; +} + +// Transitions +@mixin transition($transition...) { + -webkit-transition: $transition; + transition: $transition; +} +@mixin transition-property($transition-property...) { + -webkit-transition-property: $transition-property; + transition-property: $transition-property; +} +@mixin transition-delay($transition-delay) { + -webkit-transition-delay: $transition-delay; + transition-delay: $transition-delay; +} +@mixin transition-duration($transition-duration...) { + -webkit-transition-duration: $transition-duration; + transition-duration: $transition-duration; +} +@mixin transition-transform($transition...) { + -webkit-transition: -webkit-transform $transition; + -moz-transition: -moz-transform $transition; + -o-transition: -o-transform $transition; + transition: transform $transition; +} + +// Transformations +@mixin rotate($degrees) { + -webkit-transform: rotate($degrees); + -ms-transform: rotate($degrees); // IE9 only + transform: rotate($degrees); +} +@mixin scale($scale-args...) { + -webkit-transform: scale($scale-args); + -ms-transform: scale($scale-args); // IE9 only + transform: scale($scale-args); +} +@mixin translate($x, $y) { + -webkit-transform: translate($x, $y); + -ms-transform: translate($x, $y); // IE9 only + transform: translate($x, $y); +} +@mixin skew($x, $y) { + -webkit-transform: skew($x, $y); + -ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ + transform: skew($x, $y); +} +@mixin translate3d($x, $y, $z) { + -webkit-transform: translate3d($x, $y, $z); + transform: translate3d($x, $y, $z); +} + +@mixin rotateX($degrees) { + -webkit-transform: rotateX($degrees); + -ms-transform: rotateX($degrees); // IE9 only + transform: rotateX($degrees); +} +@mixin rotateY($degrees) { + -webkit-transform: rotateY($degrees); + -ms-transform: rotateY($degrees); // IE9 only + transform: rotateY($degrees); +} +@mixin perspective($perspective) { + -webkit-perspective: $perspective; + -moz-perspective: $perspective; + perspective: $perspective; +} +@mixin perspective-origin($perspective) { + -webkit-perspective-origin: $perspective; + -moz-perspective-origin: $perspective; + perspective-origin: $perspective; +} +@mixin transform-origin($origin) { + -webkit-transform-origin: $origin; + -moz-transform-origin: $origin; + -ms-transform-origin: $origin; // IE9 only + transform-origin: $origin; +} + +// Animations +@mixin animation($animation) { + -webkit-animation: $animation; + animation: $animation; +} +@mixin animation-name($name) { + -webkit-animation-name: $name; + animation-name: $name; +} +@mixin animation-duration($duration) { + -webkit-animation-duration: $duration; + animation-duration: $duration; +} +@mixin animation-timing-function($timing-function) { + -webkit-animation-timing-function: $timing-function; + animation-timing-function: $timing-function; +} +@mixin animation-delay($delay) { + -webkit-animation-delay: $delay; + animation-delay: $delay; +} +@mixin animation-iteration-count($iteration-count) { + -webkit-animation-iteration-count: $iteration-count; + animation-iteration-count: $iteration-count; +} +@mixin animation-direction($direction) { + -webkit-animation-direction: $direction; + animation-direction: $direction; +} + +// Backface visibility +// Prevent browsers from flickering when using CSS 3D transforms. +// Default value is `visible`, but can be changed to `hidden` +@mixin backface-visibility($visibility){ + -webkit-backface-visibility: $visibility; + -moz-backface-visibility: $visibility; + backface-visibility: $visibility; +} + +// Box sizing +@mixin box-sizing($boxmodel) { + -webkit-box-sizing: $boxmodel; + -moz-box-sizing: $boxmodel; + box-sizing: $boxmodel; +} + +// User select +// For selecting text on the page +@mixin user-select($select) { + -webkit-user-select: $select; + -moz-user-select: $select; + -ms-user-select: $select; // IE10+ + user-select: $select; +} + +// Resize anything +@mixin resizable($direction) { + resize: $direction; // Options: horizontal, vertical, both + overflow: auto; // Safari fix +} + +// CSS3 Content Columns +@mixin content-columns($column-count, $column-gap: $grid-gutter-width) { + -webkit-column-count: $column-count; + -moz-column-count: $column-count; + column-count: $column-count; + -webkit-column-gap: $column-gap; + -moz-column-gap: $column-gap; + column-gap: $column-gap; +} + +// Optional hyphenation +@mixin hyphens($mode: auto) { + word-wrap: break-word; + -webkit-hyphens: $mode; + -moz-hyphens: $mode; + -ms-hyphens: $mode; // IE10+ + -o-hyphens: $mode; + hyphens: $mode; +} + +// Opacity +@mixin opacity($opacity) { + opacity: $opacity; + // IE8 filter + $opacity-ie: ($opacity * 100); + filter: #{alpha(opacity=$opacity-ie)}; +} + + + +// GRADIENTS +// -------------------------------------------------- + + + +// Horizontal gradient, from left to right +// +// Creates two color stops, start and end, by specifying a color and position for each color stop. +// Color stops are not available in IE9 and below. +@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) { + background-image: -webkit-linear-gradient(left, color-stop($start-color $start-percent), color-stop($end-color $end-percent)); // Safari 5.1-6, Chrome 10+ + background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down +} + +// Vertical gradient, from top to bottom +// +// Creates two color stops, start and end, by specifying a color and position for each color stop. +// Color stops are not available in IE9 and below. +@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) { + background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+ + background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down +} + +@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) { + background-repeat: repeat-x; + background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+ + background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ +} +@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { + background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color); + background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback +} +@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { + background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color); + background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color); + background-repeat: no-repeat; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback +} +@mixin gradient-radial($inner-color: #555, $outer-color: #333) { + background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color); + background-image: radial-gradient(circle, $inner-color, $outer-color); + background-repeat: no-repeat; +} +@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) { + background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); + background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); +} + +// Reset filters for IE +// +// When you need to remove a gradient background, do not forget to use this to reset +// the IE filter for IE9 and below. +@mixin reset-filter() { + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} + + + +// Retina images +// +// Short retina mixin for setting background-image and -size + +@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { + background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-1x}"), "#{$file-1x}")); + + @media + only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and ( min--moz-device-pixel-ratio: 2), + only screen and ( -o-min-device-pixel-ratio: 2/1), + only screen and ( min-device-pixel-ratio: 2), + only screen and ( min-resolution: 192dpi), + only screen and ( min-resolution: 2dppx) { + background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-2x}"), "#{$file-2x}")); + background-size: $width-1x $height-1x; + } +} + + +// Responsive image +// +// Keep images from scaling beyond the width of their parents. + +@mixin img-responsive($display: block) { + display: $display; + max-width: 100%; // Part 1: Set a maximum relative to the parent + height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching +} + + +// COMPONENT MIXINS +// -------------------------------------------------- + +// Horizontal dividers +// ------------------------- +// Dividers (basically an hr) within dropdowns and nav lists +@mixin nav-divider($color: #e5e5e5) { + height: 1px; + margin: (($line-height-computed / 2) - 1) 0; + overflow: hidden; + background-color: $color; +} + +// Panels +// ------------------------- +@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) { + border-color: $border; + + & > .panel-heading { + color: $heading-text-color; + background-color: $heading-bg-color; + border-color: $heading-border; + + + .panel-collapse .panel-body { + border-top-color: $border; + } + } + & > .panel-footer { + + .panel-collapse .panel-body { + border-bottom-color: $border; + } + } +} + +// Alerts +// ------------------------- +@mixin alert-variant($background, $border, $text-color) { + background-color: $background; + border-color: $border; + color: $text-color; + + hr { + border-top-color: darken($border, 5%); + } + .alert-link { + color: darken($text-color, 10%); + } +} + +// Tables +// ------------------------- +@mixin table-row-variant($state, $background) { + // Exact selectors below required to override `.table-striped` and prevent + // inheritance to nested tables. + .table > thead > tr, + .table > tbody > tr, + .table > tfoot > tr { + > td.#{$state}, + > th.#{$state}, + &.#{$state} > td, + &.#{$state} > th { + background-color: $background; + } + } + + // Hover states for `.table-hover` + // Note: this is not available for cells or rows within `thead` or `tfoot`. + .table-hover > tbody > tr { + > td.#{$state}:hover, + > th.#{$state}:hover, + &.#{$state}:hover > td, + &.#{$state}:hover > th { + background-color: darken($background, 5%); + } + } +} + +// List Groups +// ------------------------- +@mixin list-group-item-variant($state, $background, $color) { + .list-group-item-#{$state} { + color: $color; + background-color: $background; + + // [converter] extracted a& to a.list-group-item-#{$state} + } + + a.list-group-item-#{$state} { + color: $color; + + .list-group-item-heading { color: inherit; } + + &:hover, + &:focus { + color: $color; + background-color: darken($background, 5%); + } + &.active, + &.active:hover, + &.active:focus { + color: #fff; + background-color: $color; + border-color: $color; + } + } +} + +// Button variants +// ------------------------- +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons +@mixin button-variant($color, $background, $border) { + color: $color; + background-color: $background; + border-color: $border; + + &:hover, + &:focus, + &:active, + &.active { + color: $color; + background-color: darken($background, 8%); + border-color: darken($border, 12%); + } + .open & { &.dropdown-toggle { + color: $color; + background-color: darken($background, 8%); + border-color: darken($border, 12%); + } } + &:active, + &.active { + background-image: none; + } + .open & { &.dropdown-toggle { + background-image: none; + } } + &.disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &:active, + &.active { + background-color: $background; + border-color: $border; + } + } + + .badge { + color: $background; + background-color: $color; + } +} + +// Button sizes +// ------------------------- +@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) { + padding: $padding-vertical $padding-horizontal; + font-size: $font-size; + line-height: $line-height; + border-radius: $border-radius; +} + +// Pagination +// ------------------------- +@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) { + > li { + > a, + > span { + padding: $padding-vertical $padding-horizontal; + font-size: $font-size; + } + &:first-child { + > a, + > span { + @include border-left-radius($border-radius); + } + } + &:last-child { + > a, + > span { + @include border-right-radius($border-radius); + } + } + } +} + +// Labels +// ------------------------- +@mixin label-variant($color) { + background-color: $color; + &[href] { + &:hover, + &:focus { + background-color: darken($color, 10%); + } + } +} + +// Contextual backgrounds +// ------------------------- +// [converter] $parent hack +@mixin bg-variant($parent, $color) { + #{$parent} { + background-color: $color; + } + a#{$parent}:hover { + background-color: darken($color, 10%); + } +} + +// Typography +// ------------------------- +// [converter] $parent hack +@mixin text-emphasis-variant($parent, $color) { + #{$parent} { + color: $color; + } + a#{$parent}:hover { + color: darken($color, 10%); + } +} + +// Navbar vertical align +// ------------------------- +// Vertically center elements in the navbar. +// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. +@mixin navbar-vertical-align($element-height) { + margin-top: (($navbar-height - $element-height) / 2); + margin-bottom: (($navbar-height - $element-height) / 2); +} + +// Progress bars +// ------------------------- +@mixin progress-bar-variant($color) { + background-color: $color; + .progress-striped & { + @include gradient-striped(); + } +} + +// Responsive utilities +// ------------------------- +// More easily include all the states for responsive-utilities.less. +// [converter] $parent hack +@mixin responsive-visibility($parent) { + #{$parent} { + display: block !important; + } + table#{$parent} { display: table; } + tr#{$parent} { display: table-row !important; } + th#{$parent}, + td#{$parent} { display: table-cell !important; } +} + +// [converter] $parent hack +@mixin responsive-invisibility($parent) { + #{$parent} { + display: none !important; + } +} + + +// Grid System +// ----------- + +// Centered container element +@mixin container-fixed() { + margin-right: auto; + margin-left: auto; + padding-left: ($grid-gutter-width / 2); + padding-right: ($grid-gutter-width / 2); + @include clearfix(); +} + +// Creates a wrapper for a series of columns +@mixin make-row($gutter: $grid-gutter-width) { + margin-left: ($gutter / -2); + margin-right: ($gutter / -2); + @include clearfix(); +} + +// Generate the extra small columns +@mixin make-xs-column($columns, $gutter: $grid-gutter-width) { + position: relative; + float: left; + width: percentage(($columns / $grid-columns)); + min-height: 1px; + padding-left: ($gutter / 2); + padding-right: ($gutter / 2); +} +@mixin make-xs-column-offset($columns) { + @media (min-width: $screen-xs-min) { + margin-left: percentage(($columns / $grid-columns)); + } +} +@mixin make-xs-column-push($columns) { + @media (min-width: $screen-xs-min) { + left: percentage(($columns / $grid-columns)); + } +} +@mixin make-xs-column-pull($columns) { + @media (min-width: $screen-xs-min) { + right: percentage(($columns / $grid-columns)); + } +} + + +// Generate the small columns +@mixin make-sm-column($columns, $gutter: $grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: ($gutter / 2); + padding-right: ($gutter / 2); + + @media (min-width: $screen-sm-min) { + float: left; + width: percentage(($columns / $grid-columns)); + } +} +@mixin make-sm-column-offset($columns) { + @media (min-width: $screen-sm-min) { + margin-left: percentage(($columns / $grid-columns)); + } +} +@mixin make-sm-column-push($columns) { + @media (min-width: $screen-sm-min) { + left: percentage(($columns / $grid-columns)); + } +} +@mixin make-sm-column-pull($columns) { + @media (min-width: $screen-sm-min) { + right: percentage(($columns / $grid-columns)); + } +} + + +// Generate the medium columns +@mixin make-md-column($columns, $gutter: $grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: ($gutter / 2); + padding-right: ($gutter / 2); + + @media (min-width: $screen-md-min) { + float: left; + width: percentage(($columns / $grid-columns)); + } +} +@mixin make-md-column-offset($columns) { + @media (min-width: $screen-md-min) { + margin-left: percentage(($columns / $grid-columns)); + } +} +@mixin make-md-column-push($columns) { + @media (min-width: $screen-md-min) { + left: percentage(($columns / $grid-columns)); + } +} +@mixin make-md-column-pull($columns) { + @media (min-width: $screen-md-min) { + right: percentage(($columns / $grid-columns)); + } +} + + +// Generate the large columns +@mixin make-lg-column($columns, $gutter: $grid-gutter-width) { + position: relative; + min-height: 1px; + padding-left: ($gutter / 2); + padding-right: ($gutter / 2); + + @media (min-width: $screen-lg-min) { + float: left; + width: percentage(($columns / $grid-columns)); + } +} +@mixin make-lg-column-offset($columns) { + @media (min-width: $screen-lg-min) { + margin-left: percentage(($columns / $grid-columns)); + } +} +@mixin make-lg-column-push($columns) { + @media (min-width: $screen-lg-min) { + left: percentage(($columns / $grid-columns)); + } +} +@mixin make-lg-column-pull($columns) { + @media (min-width: $screen-lg-min) { + right: percentage(($columns / $grid-columns)); + } +} + + +// Framework grid generation +// +// Used only by Bootstrap to generate the correct number of grid classes given +// any value of `$grid-columns`. + +// [converter] This is defined recursively in LESS, but Sass supports real loops +@mixin make-grid-columns() { + $list: ''; + $i: 1; + $list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}"; + @for $i from (1 + 1) through $grid-columns { + $list: "#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}"; + } + #{$list} { + position: relative; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: ($grid-gutter-width / 2); + padding-right: ($grid-gutter-width / 2); + } +} + + +// [converter] This is defined recursively in LESS, but Sass supports real loops +@mixin float-grid-columns($class) { + $list: ''; + $i: 1; + $list: ".col-#{$class}-#{$i}"; + @for $i from (1 + 1) through $grid-columns { + $list: "#{$list}, .col-#{$class}-#{$i}"; + } + #{$list} { + float: left; + } +} + + +@mixin calc-grid-column($index, $class, $type) { + @if ($type == width) and ($index > 0) { + .col-#{$class}-#{$index} { + width: percentage(($index / $grid-columns)); + } + } + @if ($type == push) { + .col-#{$class}-push-#{$index} { + left: percentage(($index / $grid-columns)); + } + } + @if ($type == pull) { + .col-#{$class}-pull-#{$index} { + right: percentage(($index / $grid-columns)); + } + } + @if ($type == offset) { + .col-#{$class}-offset-#{$index} { + margin-left: percentage(($index / $grid-columns)); + } + } +} + +// [converter] This is defined recursively in LESS, but Sass supports real loops +@mixin loop-grid-columns($columns, $class, $type) { + @for $i from 0 through $columns { + @include calc-grid-column($i, $class, $type); + } +} + + +// Create grid for specific class +@mixin make-grid($class) { + @include float-grid-columns($class); + @include loop-grid-columns($grid-columns, $class, width); + @include loop-grid-columns($grid-columns, $class, pull); + @include loop-grid-columns($grid-columns, $class, push); + @include loop-grid-columns($grid-columns, $class, offset); +} + +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) { + // Color the label and help text + .help-block, + .control-label, + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + color: $text-color; + } + // Set the border and box shadow on specific inputs to match + .form-control { + border-color: $border-color; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work + &:focus { + border-color: darken($border-color, 10%); + $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%); + @include box-shadow($shadow); + } + } + // Set validation states also for addons + .input-group-addon { + color: $text-color; + border-color: $border-color; + background-color: $background-color; + } + // Optional feedback icon + .form-control-feedback { + color: $text-color; + } +} + +// Form control focus state +// +// Generate a customized focus state and for any input with the specified color, +// which defaults to the `$input-focus-border` variable. +// +// We highly encourage you to not customize the default value, but instead use +// this to tweak colors on an as-needed basis. This aesthetic change is based on +// WebKit's default styles, but applicable to a wider range of browsers. Its +// usability and accessibility should be taken into account with any change. +// +// Example usage: change the default blue border and shadow to white for better +// contrast against a dark gray background. + +@mixin form-control-focus($color: $input-border-focus) { + $color-rgba: rgba(red($color), green($color), blue($color), .6); + &:focus { + border-color: $color; + outline: 0; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba); + } +} + +// Form control sizing +// +// Relative text size, padding, and border-radii changes for form controls. For +// horizontal sizing, wrap controls in the predefined grid classes. `` background color +$input-bg: #fff !default; +//** `` background color +$input-bg-disabled: $gray-lighter !default; + +//** Text color for ``s +$input-color: $gray !default; +//** `` border color +$input-border: #ccc !default; +//** `` border radius +$input-border-radius: $border-radius-base !default; +//** Border color for inputs on focus +$input-border-focus: #66afe9 !default; + +//** Placeholder text color +$input-color-placeholder: $gray-light !default; + +//** Default `.form-control` height +$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default; +//** Large `.form-control` height +$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default; +//** Small `.form-control` height +$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default; + +$legend-color: $gray-dark !default; +$legend-border-color: #e5e5e5 !default; + +//** Background color for textual input addons +$input-group-addon-bg: $gray-lighter !default; +//** Border color for textual input addons +$input-group-addon-border-color: $input-border !default; + + +//== Dropdowns +// +//## Dropdown menu container and contents. + +//** Background for the dropdown menu. +$dropdown-bg: #fff !default; +//** Dropdown menu `border-color`. +$dropdown-border: rgba(0,0,0,.15) !default; +//** Dropdown menu `border-color` **for IE8**. +$dropdown-fallback-border: #ccc !default; +//** Divider color for between dropdown items. +$dropdown-divider-bg: #e5e5e5 !default; + +//** Dropdown link text color. +$dropdown-link-color: $gray-dark !default; +//** Hover color for dropdown links. +$dropdown-link-hover-color: darken($gray-dark, 5%) !default; +//** Hover background for dropdown links. +$dropdown-link-hover-bg: #f5f5f5 !default; + +//** Active dropdown menu item text color. +$dropdown-link-active-color: $component-active-color !default; +//** Active dropdown menu item background color. +$dropdown-link-active-bg: $component-active-bg !default; + +//** Disabled dropdown menu item background color. +$dropdown-link-disabled-color: $gray-light !default; + +//** Text color for headers within dropdown menus. +$dropdown-header-color: $gray-light !default; + +// Note: Deprecated $dropdown-caret-color as of v3.1.0 +$dropdown-caret-color: #000 !default; + + +//-- Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. +// +// Note: These variables are not generated into the Customizer. + +$zindex-navbar: 1000 !default; +$zindex-dropdown: 1000 !default; +$zindex-popover: 1010 !default; +$zindex-tooltip: 1030 !default; +$zindex-navbar-fixed: 1030 !default; +$zindex-modal-background: 1040 !default; +$zindex-modal: 1050 !default; + + +//== Media queries breakpoints +// +//## Define the breakpoints at which your layout will change, adapting to different screen sizes. + +// Extra small screen / phone +// Note: Deprecated $screen-xs and $screen-phone as of v3.0.1 +$screen-xs: 480px !default; +$screen-xs-min: $screen-xs !default; +$screen-phone: $screen-xs-min !default; + +// Small screen / tablet +// Note: Deprecated $screen-sm and $screen-tablet as of v3.0.1 +$screen-sm: 768px !default; +$screen-sm-min: $screen-sm !default; +$screen-tablet: $screen-sm-min !default; + +// Medium screen / desktop +// Note: Deprecated $screen-md and $screen-desktop as of v3.0.1 +$screen-md: 992px !default; +$screen-md-min: $screen-md !default; +$screen-desktop: $screen-md-min !default; + +// Large screen / wide desktop +// Note: Deprecated $screen-lg and $screen-lg-desktop as of v3.0.1 +$screen-lg: 1200px !default; +$screen-lg-min: $screen-lg !default; +$screen-lg-desktop: $screen-lg-min !default; + +// So media queries don't overlap when required, provide a maximum +$screen-xs-max: ($screen-sm-min - 1) !default; +$screen-sm-max: ($screen-md-min - 1) !default; +$screen-md-max: ($screen-lg-min - 1) !default; + + +//== Grid system +// +//## Define your custom responsive grid. + +//** Number of columns in the grid. +$grid-columns: 12 !default; +//** Padding between columns. Gets divided in half for the left and right. +$grid-gutter-width: 30px !default; +// Navbar collapse +//** Point at which the navbar becomes uncollapsed. +$grid-float-breakpoint: $screen-sm-min !default; +//** Point at which the navbar begins collapsing. +$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; + + +//== Container sizes +// +//## Define the maximum width of `.container` for different screen sizes. + +// Small screen / tablet +$container-tablet: ((720px + $grid-gutter-width)) !default; +//** For `$screen-sm-min` and up. +$container-sm: $container-tablet !default; + +// Medium screen / desktop +$container-desktop: ((940px + $grid-gutter-width)) !default; +//** For `$screen-md-min` and up. +$container-md: $container-desktop !default; + +// Large screen / wide desktop +$container-large-desktop: ((1140px + $grid-gutter-width)) !default; +//** For `$screen-lg-min` and up. +$container-lg: $container-large-desktop !default; + + +//== Navbar +// +//## + +// Basics of a navbar +$navbar-height: 50px !default; +$navbar-margin-bottom: $line-height-computed !default; +$navbar-border-radius: $border-radius-base !default; +$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default; +$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default; +$navbar-collapse-max-height: 340px !default; + +$navbar-default-color: #777 !default; +$navbar-default-bg: #f8f8f8 !default; +$navbar-default-border: darken($navbar-default-bg, 6.5%) !default; + +// Navbar links +$navbar-default-link-color: #777 !default; +$navbar-default-link-hover-color: #333 !default; +$navbar-default-link-hover-bg: transparent !default; +$navbar-default-link-active-color: #555 !default; +$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default; +$navbar-default-link-disabled-color: #ccc !default; +$navbar-default-link-disabled-bg: transparent !default; + +// Navbar brand label +$navbar-default-brand-color: $navbar-default-link-color !default; +$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default; +$navbar-default-brand-hover-bg: transparent !default; + +// Navbar toggle +$navbar-default-toggle-hover-bg: #ddd !default; +$navbar-default-toggle-icon-bar-bg: #888 !default; +$navbar-default-toggle-border-color: #ddd !default; + + +// Inverted navbar +// Reset inverted navbar basics +$navbar-inverse-color: $gray-light !default; +$navbar-inverse-bg: #222 !default; +$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default; + +// Inverted navbar links +$navbar-inverse-link-color: $gray-light !default; +$navbar-inverse-link-hover-color: #fff !default; +$navbar-inverse-link-hover-bg: transparent !default; +$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default; +$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default; +$navbar-inverse-link-disabled-color: #444 !default; +$navbar-inverse-link-disabled-bg: transparent !default; + +// Inverted navbar brand label +$navbar-inverse-brand-color: $navbar-inverse-link-color !default; +$navbar-inverse-brand-hover-color: #fff !default; +$navbar-inverse-brand-hover-bg: transparent !default; + +// Inverted navbar toggle +$navbar-inverse-toggle-hover-bg: #333 !default; +$navbar-inverse-toggle-icon-bar-bg: #fff !default; +$navbar-inverse-toggle-border-color: #333 !default; + + +//== Navs +// +//## + +//=== Shared nav styles +$nav-link-padding: 10px 15px !default; +$nav-link-hover-bg: $gray-lighter !default; + +$nav-disabled-link-color: $gray-light !default; +$nav-disabled-link-hover-color: $gray-light !default; + +$nav-open-link-hover-color: #fff !default; + +//== Tabs +$nav-tabs-border-color: #ddd !default; + +$nav-tabs-link-hover-border-color: $gray-lighter !default; + +$nav-tabs-active-link-hover-bg: $body-bg !default; +$nav-tabs-active-link-hover-color: $gray !default; +$nav-tabs-active-link-hover-border-color: #ddd !default; + +$nav-tabs-justified-link-border-color: #ddd !default; +$nav-tabs-justified-active-link-border-color: $body-bg !default; + +//== Pills +$nav-pills-border-radius: $border-radius-base !default; +$nav-pills-active-link-hover-bg: $component-active-bg !default; +$nav-pills-active-link-hover-color: $component-active-color !default; + + +//== Pagination +// +//## + +$pagination-color: $link-color !default; +$pagination-bg: #fff !default; +$pagination-border: #ddd !default; + +$pagination-hover-color: $link-hover-color !default; +$pagination-hover-bg: $gray-lighter !default; +$pagination-hover-border: #ddd !default; + +$pagination-active-color: #fff !default; +$pagination-active-bg: $brand-primary !default; +$pagination-active-border: $brand-primary !default; + +$pagination-disabled-color: $gray-light !default; +$pagination-disabled-bg: #fff !default; +$pagination-disabled-border: #ddd !default; + + +//== Pager +// +//## + +$pager-bg: $pagination-bg !default; +$pager-border: $pagination-border !default; +$pager-border-radius: 15px !default; + +$pager-hover-bg: $pagination-hover-bg !default; + +$pager-active-bg: $pagination-active-bg !default; +$pager-active-color: $pagination-active-color !default; + +$pager-disabled-color: $pagination-disabled-color !default; + + +//== Jumbotron +// +//## + +$jumbotron-padding: 30px !default; +$jumbotron-color: inherit !default; +$jumbotron-bg: $gray-lighter !default; +$jumbotron-heading-color: inherit !default; +$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default; + + +//== Form states and alerts +// +//## Define colors for form feedback states and, by default, alerts. + +$state-success-text: #3c763d !default; +$state-success-bg: #dff0d8 !default; +$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default; + +$state-info-text: #31708f !default; +$state-info-bg: #d9edf7 !default; +$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default; + +$state-warning-text: #8a6d3b !default; +$state-warning-bg: #fcf8e3 !default; +$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default; + +$state-danger-text: #a94442 !default; +$state-danger-bg: #f2dede !default; +$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default; + + +//== Tooltips +// +//## + +//** Tooltip max width +$tooltip-max-width: 200px !default; +//** Tooltip text color +$tooltip-color: #fff !default; +//** Tooltip background color +$tooltip-bg: #000 !default; +$tooltip-opacity: .9 !default; + +//** Tooltip arrow width +$tooltip-arrow-width: 5px !default; +//** Tooltip arrow color +$tooltip-arrow-color: $tooltip-bg !default; + + +//== Popovers +// +//## + +//** Popover body background color +$popover-bg: #fff !default; +//** Popover maximum width +$popover-max-width: 276px !default; +//** Popover border color +$popover-border-color: rgba(0,0,0,.2) !default; +//** Popover fallback border color +$popover-fallback-border-color: #ccc !default; + +//** Popover title background color +$popover-title-bg: darken($popover-bg, 3%) !default; + +//** Popover arrow width +$popover-arrow-width: 10px !default; +//** Popover arrow color +$popover-arrow-color: #fff !default; + +//** Popover outer arrow width +$popover-arrow-outer-width: ($popover-arrow-width + 1) !default; +//** Popover outer arrow color +$popover-arrow-outer-color: fadein($popover-border-color, 5%) !default; +//** Popover outer arrow fallback color +$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default; + + +//== Labels +// +//## + +//** Default label background color +$label-default-bg: $gray-light !default; +//** Primary label background color +$label-primary-bg: $brand-primary !default; +//** Success label background color +$label-success-bg: $brand-success !default; +//** Info label background color +$label-info-bg: $brand-info !default; +//** Warning label background color +$label-warning-bg: $brand-warning !default; +//** Danger label background color +$label-danger-bg: $brand-danger !default; + +//** Default label text color +$label-color: #fff !default; +//** Default text color of a linked label +$label-link-hover-color: #fff !default; + + +//== Modals +// +//## + +//** Padding applied to the modal body +$modal-inner-padding: 20px !default; + +//** Padding applied to the modal title +$modal-title-padding: 15px !default; +//** Modal title line-height +$modal-title-line-height: $line-height-base !default; + +//** Background color of modal content area +$modal-content-bg: #fff !default; +//** Modal content border color +$modal-content-border-color: rgba(0,0,0,.2) !default; +//** Modal content border color **for IE8** +$modal-content-fallback-border-color: #999 !default; + +//** Modal backdrop background color +$modal-backdrop-bg: #000 !default; +//** Modal backdrop opacity +$modal-backdrop-opacity: .5 !default; +//** Modal header border color +$modal-header-border-color: #e5e5e5 !default; +//** Modal footer border color +$modal-footer-border-color: $modal-header-border-color !default; + +$modal-lg: 900px !default; +$modal-md: 600px !default; +$modal-sm: 300px !default; + + +//== Alerts +// +//## Define alert colors, border radius, and padding. + +$alert-padding: 15px !default; +$alert-border-radius: $border-radius-base !default; +$alert-link-font-weight: bold !default; + +$alert-success-bg: $state-success-bg !default; +$alert-success-text: $state-success-text !default; +$alert-success-border: $state-success-border !default; + +$alert-info-bg: $state-info-bg !default; +$alert-info-text: $state-info-text !default; +$alert-info-border: $state-info-border !default; + +$alert-warning-bg: $state-warning-bg !default; +$alert-warning-text: $state-warning-text !default; +$alert-warning-border: $state-warning-border !default; + +$alert-danger-bg: $state-danger-bg !default; +$alert-danger-text: $state-danger-text !default; +$alert-danger-border: $state-danger-border !default; + + +//== Progress bars +// +//## + +//** Background color of the whole progress component +$progress-bg: #f5f5f5 !default; +//** Progress bar text color +$progress-bar-color: #fff !default; + +//** Default progress bar color +$progress-bar-bg: $brand-primary !default; +//** Success progress bar color +$progress-bar-success-bg: $brand-success !default; +//** Warning progress bar color +$progress-bar-warning-bg: $brand-warning !default; +//** Danger progress bar color +$progress-bar-danger-bg: $brand-danger !default; +//** Info progress bar color +$progress-bar-info-bg: $brand-info !default; + + +//== List group +// +//## + +//** Background color on `.list-group-item` +$list-group-bg: #fff !default; +//** `.list-group-item` border color +$list-group-border: #ddd !default; +//** List group border radius +$list-group-border-radius: $border-radius-base !default; + +//** Background color of single list elements on hover +$list-group-hover-bg: #f5f5f5 !default; +//** Text color of active list elements +$list-group-active-color: $component-active-color !default; +//** Background color of active list elements +$list-group-active-bg: $component-active-bg !default; +//** Border color of active list elements +$list-group-active-border: $list-group-active-bg !default; +$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default; + +$list-group-link-color: #555 !default; +$list-group-link-heading-color: #333 !default; + + +//== Panels +// +//## + +$panel-bg: #fff !default; +$panel-body-padding: 15px !default; +$panel-border-radius: $border-radius-base !default; + +//** Border color for elements within panels +$panel-inner-border: #ddd !default; +$panel-footer-bg: #f5f5f5 !default; + +$panel-default-text: $gray-dark !default; +$panel-default-border: #ddd !default; +$panel-default-heading-bg: #f5f5f5 !default; + +$panel-primary-text: #fff !default; +$panel-primary-border: $brand-primary !default; +$panel-primary-heading-bg: $brand-primary !default; + +$panel-success-text: $state-success-text !default; +$panel-success-border: $state-success-border !default; +$panel-success-heading-bg: $state-success-bg !default; + +$panel-info-text: $state-info-text !default; +$panel-info-border: $state-info-border !default; +$panel-info-heading-bg: $state-info-bg !default; + +$panel-warning-text: $state-warning-text !default; +$panel-warning-border: $state-warning-border !default; +$panel-warning-heading-bg: $state-warning-bg !default; + +$panel-danger-text: $state-danger-text !default; +$panel-danger-border: $state-danger-border !default; +$panel-danger-heading-bg: $state-danger-bg !default; + + +//== Thumbnails +// +//## + +//** Padding around the thumbnail image +$thumbnail-padding: 4px !default; +//** Thumbnail background color +$thumbnail-bg: $body-bg !default; +//** Thumbnail border color +$thumbnail-border: #ddd !default; +//** Thumbnail border radius +$thumbnail-border-radius: $border-radius-base !default; + +//** Custom text color for thumbnail captions +$thumbnail-caption-color: $text-color !default; +//** Padding around the thumbnail caption +$thumbnail-caption-padding: 9px !default; + + +//== Wells +// +//## + +$well-bg: #f5f5f5 !default; +$well-border: darken($well-bg, 7%) !default; + + +//== Badges +// +//## + +$badge-color: #fff !default; +//** Linked badge text color on hover +$badge-link-hover-color: #fff !default; +$badge-bg: $gray-light !default; + +//** Badge text color in active nav link +$badge-active-color: $link-color !default; +//** Badge background color in active nav link +$badge-active-bg: #fff !default; + +$badge-font-weight: bold !default; +$badge-line-height: 1 !default; +$badge-border-radius: 10px !default; + + +//== Breadcrumbs +// +//## + +$breadcrumb-padding-vertical: 8px !default; +$breadcrumb-padding-horizontal: 15px !default; +//** Breadcrumb background color +$breadcrumb-bg: #f5f5f5 !default; +//** Breadcrumb text color +$breadcrumb-color: #ccc !default; +//** Text color of current page in the breadcrumb +$breadcrumb-active-color: $gray-light !default; +//** Textual separator for between breadcrumb elements +$breadcrumb-separator: "/" !default; + + +//== Carousel +// +//## + +$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default; + +$carousel-control-color: #fff !default; +$carousel-control-width: 15% !default; +$carousel-control-opacity: .5 !default; +$carousel-control-font-size: 20px !default; + +$carousel-indicator-active-bg: #fff !default; +$carousel-indicator-border-color: #fff !default; + +$carousel-caption-color: #fff !default; + + +//== Close +// +//## + +$close-font-weight: bold !default; +$close-color: #000 !default; +$close-text-shadow: 0 1px 0 #fff !default; + + +//== Code +// +//## + +$code-color: #c7254e !default; +$code-bg: #f9f2f4 !default; + +$kbd-color: #fff !default; +$kbd-bg: #333 !default; + +$pre-bg: #f5f5f5 !default; +$pre-color: $gray-dark !default; +$pre-border-color: #ccc !default; +$pre-scrollable-max-height: 340px !default; + + +//== Type +// +//## + +//** Text muted color +$text-muted: $gray-light !default; +//** Abbreviations and acronyms border color +$abbr-border-color: $gray-light !default; +//** Headings small color +$headings-small-color: $gray-light !default; +//** Blockquote small color +$blockquote-small-color: $gray-light !default; +//** Blockquote font size +$blockquote-font-size: ($font-size-base * 1.25) !default; +//** Blockquote border color +$blockquote-border-color: $gray-lighter !default; +//** Page header border color +$page-header-border-color: $gray-lighter !default; + + +//== Miscellaneous +// +//## + +//** Horizontal line color. +$hr-border: $gray-lighter !default; + +//** Horizontal offset for forms and lists. +$component-offset-horizontal: 180px !default; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss new file mode 100644 index 0000000..b865711 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss @@ -0,0 +1,29 @@ +// +// Wells +// -------------------------------------------------- + + +// Base class +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: $well-bg; + border: 1px solid $well-border; + border-radius: $border-radius-base; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); + blockquote { + border-color: #ddd; + border-color: rgba(0,0,0,.15); + } +} + +// Sizes +.well-lg { + padding: 24px; + border-radius: $border-radius-large; +} +.well-sm { + padding: 9px; + border-radius: $border-radius-small; +} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss new file mode 100644 index 0000000..cb5147d --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss @@ -0,0 +1,49 @@ +// Core variables and mixins +@import "variables"; +@import "mixins"; + +// Reset +@import "normalize"; +@import "print"; + +// Core CSS +@import "scaffolding"; +@import "type"; +@import "code"; +@import "grid"; +@import "tables"; +@import "forms"; +@import "buttons"; + +// Components +@import "component-animations"; +@import "glyphicons"; +@import "dropdowns"; +@import "button-groups"; +@import "input-groups"; +@import "navs"; +@import "navbar"; +@import "breadcrumbs"; +@import "pagination"; +@import "pager"; +@import "labels"; +@import "badges"; +@import "jumbotron"; +@import "thumbnails"; +@import "alerts"; +@import "progress-bars"; +@import "media"; +@import "list-group"; +@import "panels"; +@import "wells"; +@import "close"; + +// Components w/ JavaScript +@import "modals"; +@import "tooltip"; +@import "popovers"; +@import "carousel"; + +// Utility classes +@import "utilities"; +@import "responsive-utilities"; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss index 19a568a..1e6c724 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + html { font-size: 100%; } diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss index 67f2955..e44933e 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + $theme-white: #fff; $orbit-bg-color: #333; $orbit-bg-hover-color: #0095CF; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss index b4660e4..664ba7c 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .pagination { li { a { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss index 2ee41c6..a2e00e7 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + // Title .unity-title { margin: 0.5em 0; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss new file mode 100644 index 0000000..46f5337 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss @@ -0,0 +1,4 @@ +@import "bootstrap/mixins"; +@import "bootstrap/variables"; +@import "base/mixins"; +@import "base/variables"; \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss index e344ca4..5822c17 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .layout-content { min-height: 600px; margin-bottom: 2em; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss index 193f7d4..926e922 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .layout-footer { padding: 2em 0; color: #999999; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss index 7c70d3a..d4329e1 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .layout-header { position: relative; margin-bottom: 0; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss index 54c3aaa..2c0fc17 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .layout-slide { position: relative; margin-bottom: 2rem; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss index 0ffcda1..aae0d55 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss @@ -1,15 +1,21 @@ -@charset 'utf-8'; +@charset "utf-8"; +@import "../init"; + // // Widget // + // Widget // ## gerenral styles .w-ad-banner { position: relative; + .cursor { cursor: pointer; } } + + // Widget 1 .ad-banner-widget-1 { .w-ad-banner__wrap { @@ -23,124 +29,138 @@ height: auto; } .w-ad-banner__caption { - z-index: 200; - padding: .5em 1em; - color: $theme-white; background: $theme-color-main; + color: $theme-white; + z-index: 200; + padding: 0.5em 1em; + h2 { font-family: $main-font; font-size: $w-caption-font-size; - margin: .5em 0; + margin: 0.5em 0; } + p { font-family: $main-font; font-size: $w-caption-desc; } + } .w-ad-banner__pager { + @include list-reset(); position: absolute; - z-index: 120; + right: 1em; top: 1em; - right: 1em; - @include list-reset(); + z-index: 100; + li { display: inline-block; } + a { - display: inline-block; - width: .8em; - height: .8em; - margin-right: .25em; - opacity: .5; - border-radius: 50%; background: $theme-color-main; + display: inline-block; + margin-right: 0.25em; + width: 0.8em; + height: 0.8em; + border-radius: 50%; + opacity: 0.5; } - .active-slide a { + + .active-slide a{ opacity: 1; } } } -// Widget 2 -.ad-banner-widget-2 { - .w-ad-banner__wrap { - width: 100%; - } - .w-ad-banner__slide { - width: 100%; - } - .w-ad-banner__image { - width: 100%; - height: auto; - } - .youtube, - .cycle-youtube { - width: 100%; - height: 100%; - } - object, - embed { - width: 100%; - height: 100%; - } - .w-ad-banner__pager { - position: absolute; - z-index: 102; - right: 1em; - bottom: 1em; - @include list-reset(); - li { - display: inline-block; - } - a { - display: inline-block; - width: .8em; - height: .8em; - margin-right: .25em; - opacity: .5; - border-radius: 50%; - background: $theme-color-main; - } - .active-slide a { - opacity: 1; - } - } -} -// Widget 3 -.ad-banner-widget-3 { - .w-ad-banner__wrap { - width: 100%; - } - .w-ad-banner__slide { - width: 100%; - } - .w-ad-banner__image { - width: 100%; - height: auto; - } - .w-ad-banner__pager { - position: absolute; - z-index: 120; - right: 1em; - bottom: 1em; - @include list-reset(); - li { - display: inline-block; - } - a { - display: inline-block; - width: .8em; - height: .8em; - margin-right: .25em; - opacity: .5; - border-radius: 50%; - background: $theme-color-main; - } - .active-slide a { - opacity: 1; - } - } -} -.cycle-slide-active { - z-index: 101 !important; -} +// Widget 2 +.ad-banner-widget-2 { + .w-ad-banner__wrap { + width: 100%; + } + .w-ad-banner__slide { + width: 100%; + } + .w-ad-banner__image { + width: 100%; + height: auto; + } + .youtube { + } + .youtube, .cycle-youtube { + width: 100%; + height: 100%; + } + object, embed{ + width: 100%; + height: 100%; + } + .w-ad-banner__pager { + @include list-reset(); + position: absolute; + right: 1em; + bottom: 1em; + z-index: 102; + + li { + display: inline-block; + } + + a { + background: $theme-color-main; + display: inline-block; + margin-right: 0.25em; + width: 0.8em; + height: 0.8em; + border-radius: 50%; + opacity: 0.5; + } + + .active-slide a{ + opacity: 1; + } + } +} + + +// Widget 3 +.ad-banner-widget-3 { + .w-ad-banner__wrap { + width: 100%; + } + .w-ad-banner__slide { + width: 100%; + } + .w-ad-banner__image { + width: 100%; + height: auto; + } + .w-ad-banner__pager { + @include list-reset(); + position: absolute; + right: 1em; + bottom: 1em; + z-index: 100; + + li { + display: inline-block; + } + + a { + background: $theme-color-main; + display: inline-block; + margin-right: 0.25em; + width: 0.8em; + height: 0.8em; + border-radius: 50%; + opacity: 0.5; + } + .active-slide a{ + opacity: 1; + } + } +} + +.cycle-slide-active{ + z-index: 101 !important; +} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss index 75e1c19..5999260 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss @@ -1,352 +1,374 @@ -@charset 'utf-8'; +@charset "utf-8"; +@import "../init"; + // // Widget // + // Announcement widget // ## Gerneral styles for widgets .w-annc { - .w-annc__widget-title { - @extend .unity-title; - } - .w-annc__list { - margin: 0; - padding: 0; - list-style: none; - } - .w-annc__item { - margin-bottom: 30px; - } - .label { - font-size: .75rem; - font-weight: normal; - } - .w-annc__meta { - .w-annc__status-wrap, .w-annc__postdate-wrap, .w-annc__category-wrap { - font-size: .8125em; - font-weight: normal; - display: inline-block; - margin-right: .2em; - color: $theme-gray; + .w-annc__widget-title { + @extend .unity-title; } - i { - color: $theme-gray; + .w-annc__list { + margin: 0; + padding: 0; + list-style: none; } - } - .status-top { - background: $theme-color-second; - } - .status-hot { - background: $theme-color-third; - } - .w-annc__subtitle { - font-size: .8125em; - color: $theme-gray; - } - .w-annc__entry-title { - margin-bottom: 10px; - } - .w-annc__title { - font-family: $sub-font; - font-size: .8125rem; - text-decoration: none; - color: $theme-color-main; - &:hover { - color: darken($theme-color-main, 10%); + .w-annc__item { + margin-bottom: 30px; + } + .label { + font-size: 0.75rem; + font-weight: normal; + } + .w-annc__meta { + .w-annc__status-wrap, + .w-annc__postdate-wrap, + .w-annc__category-wrap { + display: inline-block; + margin-right: 0.2em; + font-size: 0.8125em; + color: $theme-gray; + font-weight: normal; + } + i { + color: $theme-gray; + } + } + .status-top { + background: $theme-color-second; + } + .status-hot { + background: $theme-color-third; + } + .w-annc__subtitle { + font-size: 0.8125em; + color: $theme-gray; + } + .w-annc__entry-title { + margin-bottom: 10px; + } + .w-annc__title { + font-family: $sub-font; + color: $theme-color-main; + text-decoration: none; + font-size: 0.8125rem; + &:hover { + color: darken($theme-color-main, 10%); + } } - } } + // Widget-1 .widget-announcement-1 { - .w-annc__img-wrap { - height: 200px; - margin: 0 0 1em 0; - } - .w-annc__title { - font-family: $main-font; - font-size: 1.2rem; - line-height: 1.3; - } + .w-annc__img-wrap { + height: 200px; + margin: 0 0 1em 0; + } + .w-annc__title { + font-family: $main-font; + line-height: 1.3; + font-size: 1.2rem; + } } + // Widget-2 .widget-announcement-2 { - .w-annc__img-wrap { - height: 200px; - margin: 0 0 1em 0; - } - .w-annc__title { - font-family: $main-font; - font-size: 1.2rem; - line-height: 1.3; - } + .w-annc__img-wrap { + height: 200px; + margin: 0 0 1em 0; + } + .w-annc__title { + font-family: $main-font; + line-height: 1.3; + font-size: 1.2rem; + } } + // Widget-3 .widget-announcement-3 { - .w-annc__img-wrap { - height: 200px; - margin: 0 0 1em; - } - .w-annc__title { - font-family: $main-font; - font-size: 1.2rem; - line-height: 1.3; - } + .w-annc__img-wrap { + height: 200px; + margin: 0 0 1em 0; + } + .w-annc__title { + font-family: $main-font; + line-height: 1.3; + font-size: 1.2rem; + } } + // Widget-4 .widget-announcement-4 { - .w-annc__title { - font-family: $main-font; - font-size: 1.2rem; - line-height: 1.3; - } - .w-annc__list > .w-annc__item:nth-child(3n+1) { - clear: both; - } - .w-annc__img-wrap { - height: 200px; - margin: 0 0 1em; - } + .w-annc__title { + font-family: $main-font; + line-height: 1.3; + font-size: 1.2rem; + } + .w-annc__list > .w-annc__item:nth-child(3n+1) { + clear: both; + } + .w-annc__img-wrap { + height: 200px; + margin: 0 0 1em 0; + } } + // Widget-5 .widget-announcement-5 { - .w-annc__title { - font-family: $main-font; - font-size: 1.2rem; - line-height: 1.3; - } - .w-annc__item { - margin-bottom: 1em; - padding-bottom: 1em; - border-bottom: 1px dashed lighten($theme-gray, 65%); - } + .w-annc__title { + font-family: $main-font; + line-height: 1.3; + font-size: 1.2rem; + } + .w-annc__item { + border-bottom: 1px dashed lighten($theme-gray, 65%); + padding-bottom: 1em; + margin-bottom: 1em; + } } + // Widget-6 .widget-announcement-6 { - .w-annc__item { - margin-bottom: .8em; - padding-bottom: .8em; - border-bottom: 1px dashed lighten($theme-gray, 65%); - } - .w-annc__entry-title { - margin: 0; - } - .w-annc__category-wrap, - .w-annc__status, - .w-annc__title, - .w-annc__postdate-wrap { - font-size: .8125rem; - } - .w-annc__status { - display: inline-block; - } + .w-annc__item { + margin-bottom: 0.8em; + padding-bottom: 0.8em; + border-bottom: 1px dashed lighten($theme-gray, 65%); + } + .w-annc__entry-title { + margin: 0; + } + .w-annc__category-wrap, + .w-annc__status, + .w-annc__title, + .w-annc__postdate-wrap { + font-size: 0.8125rem; + } + .w-annc__status { + display: inline-block; + } } + // Widget-7 .widget-announcement-7 { - .w-annc__item { - margin-bottom: .8em; - padding-bottom: .8em; - border-bottom: 1px dashed lighten($theme-gray, 65%); - } - .w-annc__entry-title { - margin: 0; - } - .w-annc__category-wrap, - .w-annc__status, - .w-annc__title, - .w-annc__postdate-wrap { - font-size: .75rem; - } - .w-annc__status { - display: inline-block; - } + .w-annc__item { + margin-bottom: 0.8em; + padding-bottom: 0.8em; + border-bottom: 1px dashed lighten($theme-gray, 65%); + } + .w-annc__entry-title { + margin: 0; + } + .w-annc__category-wrap, + .w-annc__status, + .w-annc__title, + .w-annc__postdate-wrap { + font-size: 0.75rem; + } + .w-annc__status { + display: inline-block; + } } + // Widget-8 // ## Table .widget-announcement-8 { - .w-annc__th { - font-size: .8125em; - color: $theme-white; - border: 0; - background: $theme-color-main; - } - .w-annc__status { - font-size: .75rem; - display: inline-block; - } - td { - font-size: .8125em; - } - a:hover { - text-decoration: none; - } + .w-annc__th { + color: #fff; + background: $theme-color-main; + font-size: 0.8125em; + border: none; + } + .w-annc__status { + display: inline-block; + font-size: 0.75rem; + } + td { + font-size: 0.8125em; + } + a:hover { + text-decoration: none; + } } + // Widget-9 // ## Table .widget-announcement-9 { - .w-annc__th { - font-size: .8125em; - color: $theme-white; - border: 0; - background: $theme-color-main; - } - .w-annc__status { - font-size: .75rem; - display: inline-block; - } - td { - font-size: .8125em; - } - a:hover { - text-decoration: none; - } + .w-annc__th { + color: #fff; + background: $theme-color-main; + font-size: 0.8125em; + border: none; + } + .w-annc__status { + display: inline-block; + font-size: 0.75rem; + } + td { + font-size: 0.8125em; + } + a:hover { + text-decoration: none; + } } + // Widget-10 .widget-announcement-10 { - .w-annc__item { - margin-bottom: .8em; - padding-bottom: .8em; - border-bottom: 1px dashed lighten($theme-gray, 65%); - } - .w-annc__entry-title { - margin: 0; - } - .w-annc__postdate-wrap { - font-size: .8125em; - } - .w-annc__status { - font-size: .75rem; - display: inline-block; - } + .w-annc__item { + margin-bottom: 0.8em; + padding-bottom: 0.8em; + border-bottom: 1px dashed lighten($theme-gray, 65%); + } + .w-annc__entry-title { + margin: 0; + } + .w-annc__postdate-wrap { + font-size: 0.8125em; + } + .w-annc__status { + display: inline-block; + font-size: 0.75rem; + } } + // Widget-11 // ## Table .widget-announcement-11 { - .w-annc__th { - font-size: .8125em; - color: $theme-white; - border: 0; - background: $theme-color-main; - } - .w-annc__status { - font-size: .75rem; - display: inline-block; - } - td { - font-size: .8125em; - } - a:hover { - text-decoration: none; - } + .w-annc__th { + color: #fff; + background: $theme-color-main; + font-size: 0.8125em; + border: none; + } + .w-annc__status { + display: inline-block; + font-size: 0.75rem; + } + td { + font-size: 0.8125em; + } + a:hover { + text-decoration: none; + } } + // Widget-12 .widget-announcement-12 { - .w-annc__list { - padding: 0 15px; - } - .w-annc__img-wrap { - height: 300px; - margin-bottom: 15px; - @media (min-width: $screen-md) { - height: 200px; - margin-bottom: 0; + .w-annc__list { + padding: 0 15px; } - } - .w-annc__item { - margin-bottom: .8em; - padding-bottom: .8em; - border-bottom: 1px dashed lighten($theme-gray, 65%); - } - .w-annc__entry-title { - margin: 0 0 10px 0; - @media (min-width: $screen-md) { - margin-bottom: 0; + .w-annc__img-wrap { + height: 300px; + margin-bottom: 15px; + @media (min-width: $screen-md) { + height: 200px; + margin-bottom: 0; + } + } + .w-annc__item { + margin-bottom: 0.8em; + padding-bottom: 0.8em; + border-bottom: 1px dashed lighten($theme-gray, 65%); + } + .w-annc__entry-title { + margin: 0 0 10px 0; + @media (min-width: $screen-md) { + margin-bottom: 0; + } + } + .w-annc__postdate-wrap { + font-size: 0.8125em; + } + .w-annc__status { + display: inline-block; + } + .w-annc__postdate { + font-size: 0.8125rem; } - } - .w-annc__postdate-wrap { - font-size: .8125em; - } - .w-annc__status { - display: inline-block; - } - .w-annc__postdate { - font-size: .8125rem; - } } + // Announcement index // ## General style for index pages .i-annc { - .i-annc__page-title { - @extend .unity-title; - } - .i-annc__list { - margin: 0; - padding: 0; - list-style: none; - } - .status-top { - background: $theme-color-second; - } - .status-hot { - background: $theme-color-third; - } - .w-annc__widget-title { - @extend .unity-title; - } - .i-annc__item { - margin-bottom: 30px; - } - .i-annc__img { - width: 100%; - max-width: 100%; - height: auto; - } - .label { - font-size: .75rem; - font-weight: normal; - } - .i-annc__meta { - .i-annc__status-wrap, .i-annc__postdate-wrap, .i-annc__category-wrap { - font-size: .8125em; - font-weight: normal; - display: inline-block; - margin-right: .2em; - color: $theme-gray; + .i-annc__page-title { + @extend .unity-title; } - i { - color: $theme-gray; + .i-annc__list { + margin: 0; + padding: 0; + list-style: none; } - } - .i-annc__subtitle { - font-size: .8125em; - color: $theme-gray; - } - .i-annc__entry-title { - margin-bottom: 10px; - } - .i-annc__title { - font-family: $sub-font; - font-size: .8125rem; - text-decoration: none; - color: $theme-color-main; - &:hover { - color: darken($theme-color-main, 10%); + .status-top { + background: $theme-color-second; + } + .status-hot { + background: $theme-color-third; + } + .w-annc__widget-title { + @extend .unity-title; + } + .i-annc__item { + margin-bottom: 30px; + } + .i-annc__img { + width: 100%; + max-width: 100%; + height: auto; + } + .label { + font-size: 0.75rem; + font-weight: normal; + } + .i-annc__meta { + .i-annc__status-wrap, + .i-annc__postdate-wrap, + .i-annc__category-wrap { + display: inline-block; + margin-right: 0.2em; + font-size: 0.8125em; + color: $theme-gray; + font-weight: normal; + } + i { + color: $theme-gray; + } + } + .i-annc__subtitle { + font-size: 0.8125em; + color: $theme-gray; + } + .i-annc__entry-title { + margin-bottom: 10px; + } + .i-annc__title { + font-family: $sub-font; + color: $theme-color-main; + text-decoration: none; + font-size: 0.8125rem; + &:hover { + color: darken($theme-color-main, 10%); + } } - } } + // Index-1 .index-announcement-1 { - .i-annc__th { - font-size: .8125em; - color: $theme-white; - border: 0; - background: $theme-color-main; - } - td { - font-size: .8125rem; - } - .i-annc__title:hover { - text-decoration: none; - } + .i-annc__th { + color: #fff; + background: $theme-color-main; + font-size: 0.8125em; + border: none; + } + td { + font-size: 0.8125rem; + } + .i-annc__title:hover { + text-decoration: none; + } } + // Index-2 .index-announcement-2, .index-announcement-3 { @@ -359,115 +381,74 @@ line-height: 1.3; } } + // Announcement show .s-annc { - .s-annc__show-title { - @extend .unity-title; - } - .s-annc__meta-wrap { - border-bottom: 1px solid $theme-gray-light; - @include clearfix; - .s-annc__meta--item { - font-size: .875rem; - float: left; - margin-right: 1em; - margin-bottom: .6em; - i { - color: darken($theme-gray-light, 10%); - } + .s-annc__show-title { + @extend .unity-title; } - .s-annc__tag-wrap { - position: relative; - float: none; - clear: both; - margin-right: 0; - padding-left: 1.6em; - i { - position: absolute; - top: 7px; - left: 0; - } + .s-annc__meta-wrap { + border-bottom: 1px solid $theme-gray-light; + @include clearfix; + .s-annc__meta--item { + font-size: 0.875rem; + margin-right: 1em; + margin-bottom: 0.6em; + float: left; + i { + color: darken($theme-gray-light, 10%); + } + } + .s-annc__tag-wrap { + position: relative; + margin-right: 0; + padding-left: 1.6em; + clear: both; + float: none; + i { + position: absolute; + top: 7px; + left: 0; + } + } + .s-annc__tag-wrap { + .s-annc__tag { + font-weight: normal; + } + } } - .s-annc__tag-wrap { - .s-annc__tag { - font-weight: normal; - } + .s-annc__post-wrap { + @include clearfix; + margin-bottom: 2em; } - } - .s-annc__post-wrap { - margin-bottom: 2em; - @include clearfix; - } - .s-annc__related-wrap { - padding-top: 1em; - border-top: 1px dotted $theme-gray-light; - } - .s-annc__related-file { - margin-bottom: 15px; - } - .s-annc__related-file, - .s-annc__related-link { - padding-bottom: 6px; - padding-left: 1.6em; - i { - float: left; - margin: 8px 0 0 -1.6em; - color: darken($theme-gray-light, 10%); + .s-annc__related-wrap { + padding-top: 1em; + border-top: 1px dotted $theme-gray-light; } - } - .s-annc__related-link-list, - .s-annc__related-file-list { - display: inline-block; - } - .s-annc__flie-title { - overflow: hidden; - max-width: 9.375rem; - white-space: nowrap; - text-overflow: ellipsis; - } -} -// -// Widget -// -// Admission widget -// ## Gerneral styles for widgets -// Widget-8 -// ## Table -.widget-admission-1 { - .w-adm__th { - font-size: .8125em; - color: $theme-white; - border: 0; - background: $theme-color-main; - } - .w-adm__status { - font-size: .75rem; - display: inline-block; - } - td { - font-size: .8125em; - } - a:hover { - text-decoration: none; - } -} -// ## Table -.widget-admission-1 { - .w-adm__th { - font-size: .8125em; - color: $theme-white; - border: 0; - background: $theme-color-main; - } - .w-adm__status { - font-size: .75rem; - display: inline-block; - } - td { - font-size: .8125em; - } - a:hover { - text-decoration: none; - } -} + .s-annc__related-file { + margin-bottom: 15px; + } + .s-annc__related-file, + .s-annc__related-link { + padding-bottom: 6px; + padding-left: 1.6em; + i { + margin: 8px 0 0 -1.6em; + float: left; + color: darken($theme-gray-light, 10%); + } + a { + } + } + .s-annc__related-link-list, + .s-annc__related-file-list { + display: inline-block; + } + .s-annc__flie-title { + max-width: 9.375rem; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss index f4604d4..70975f2 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss @@ -1,5 +1,5 @@ @charset "utf-8"; - +@import "../init"; // // Widget // diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss index a461207..9fa6c12 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + // Faqs MODULES .widget-faqs { &.widget1 { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss index c70ded9..173eafe 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + // Gallery MODULES .widget-gallery { .widget-title { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss index d834296..cc978b3 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + // Member index page .index-member { .index-title { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss index e72d08f..55beca3 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .modules-menu { font-family: $sub-font; max-height: none; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss index 635d222..34982e5 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .plugin-show-table th{ text-align: right; min-width: 80px; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss index 1eb82c7..6f840a4 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + // Link MODULES .widget-link { // 在 layout-content 下的樣式 diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss index 446566c..7135a76 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss @@ -1,18 +1,17 @@ // Base -@import "bootstrap/mixins"; -@import "bootstrap/variables"; -@import "base/mixins"; -@import "base/variables"; + @import "base/unity"; @import "base/pagination"; @import "base/orbitbar-override"; @import "base/global"; + // Layout @import "layout/header"; @import "layout/slide"; @import "layout/content"; @import "layout/footer"; -// // Modules + +// Modules @import "modules/menu"; @import "modules/ad_banner"; @import "modules/announcement"; @@ -22,7 +21,7 @@ @import "modules/archives"; @import "modules/member"; @import "modules/personal_plugin"; + // Widget @import "widget/breadcrumb"; @import "widget/sitemenu"; - diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss index eb4a2fc..6807c17 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss @@ -1,3 +1,6 @@ +@charset "utf-8"; +@import "../init"; + .widget-breadcrumb { &.widget1 { li { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss index 3cbae28..3fc08d7 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss @@ -1,53 +1,55 @@ -.sitemenu-wrap { - padding: 10px 0; - @include clearfix; - .sitemenu__title { - display: none; - } - .sitemenu__list { - margin: 0; - padding: 0; - list-style: none; - } - .sitemenu__item.level-1 { - font-size: 0.8125rem; - position: relative; - float: left; - margin-right: 1%; - margin-bottom: 12px; - padding: 8px .8em; - padding-bottom: 8px; - color: $theme-white; - border-radius: .2em; - background: $theme-color-second; - &:hover { - background: darken($theme-color-second, 10%); - } - } - .sitemenu__link.level-1 { - margin-right: .25rem; - color: $theme-white; - } - .sitemenu___dropdown-toggle { - font-size: 0.75rem; - padding: 2px .3125rem; - cursor: pointer; - } - // sitemenu dropdown - .sitemenu__list.dropdown-menu { - min-width: 100%; - margin-top: 4px; - border: none; - border-radius: .2em; - background: $theme-color-main; - } - .sitemenu__link.level-2 { - color: $theme-white; - font-size: 0.8125rem; - padding: 4px 0.625rem; - &:hover { - background: lighten($theme-color-second, 5%); - } - } -} +@charset "utf-8"; +@import "../init"; +.sitemenu-wrap { + padding: 10px 0; + @include clearfix; + .sitemenu__title { + display: none; + } + .sitemenu__list { + margin: 0; + padding: 0; + list-style: none; + } + .sitemenu__item.level-1 { + font-size: 0.8125rem; + position: relative; + float: left; + margin-right: 1%; + margin-bottom: 12px; + padding: 8px .8em; + padding-bottom: 8px; + color: #fff; + border-radius: .2em; + background: $theme-color-second; + &:hover { + background: darken($theme-color-second, 10%); + } + } + .sitemenu__link.level-1 { + margin-right: .25rem; + color: #fff; + } + .sitemenu___dropdown-toggle { + font-size: 0.75rem; + padding: 2px .3125rem; + cursor: pointer; + } + // sitemenu dropdown + .sitemenu__list.dropdown-menu { + min-width: 100%; + margin-top: 4px; + border: none; + border-radius: .2em; + background: $theme-color-main; + } + .sitemenu__link.level-2 { + color: #fff; + font-size: 0.8125rem; + padding: 4px 0.625rem; + &:hover { + background: lighten($theme-color-second, 5%); + } + } +} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget1.html.erb b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget1.html.erb index d509065..74e741c 100644 --- a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget1.html.erb +++ b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget1.html.erb @@ -1,11 +1,11 @@ -
      +

      {{widget-title}}

      • -
        - {{img_description}} +
        + {{img_description}}
        diff --git a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget12.html.erb b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget12.html.erb index b14158b..07bdcc2 100644 --- a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget12.html.erb +++ b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget12.html.erb @@ -1,21 +1,21 @@ -
        +

        {{widget-title}}

        - {{main_picture_description}} + {{main_picture_description}}
        -
          +
          • -
            -

            +
            +

            {{status}} {{title}}

            -

            • -
              - {{img_description}} +
              + {{img_description}}
              diff --git a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget3.html.erb b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget3.html.erb index 9d773f1..580a093 100644 --- a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget3.html.erb +++ b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget3.html.erb @@ -23,8 +23,8 @@

              {{subtitle}}

              -
              - {{img_description}} +
              + {{img_description}}
            diff --git a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget4.html.erb b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget4.html.erb index af6b742..5c6baee 100644 --- a/app/templates/orbit_bootstrap/modules/announcement/_annc_widget4.html.erb +++ b/app/templates/orbit_bootstrap/modules/announcement/_annc_widget4.html.erb @@ -1,11 +1,11 @@ -
            +

            {{widget-title}}

            -
              -
            • +
                +
              • - {{img_description}} + {{img_description}}
                diff --git a/app/templates/orbit_bootstrap/modules/announcement/annc_index3.html.erb b/app/templates/orbit_bootstrap/modules/announcement/annc_index3.html.erb index ac3d9be..44dd8d9 100644 --- a/app/templates/orbit_bootstrap/modules/announcement/annc_index3.html.erb +++ b/app/templates/orbit_bootstrap/modules/announcement/annc_index3.html.erb @@ -27,4 +27,4 @@
            -{{pagination_goes_here}} +{{pagination_goes_here}} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/modules/announcement/info.json b/app/templates/orbit_bootstrap/modules/announcement/info.json index 50ce44c..688368a 100644 --- a/app/templates/orbit_bootstrap/modules/announcement/info.json +++ b/app/templates/orbit_bootstrap/modules/announcement/info.json @@ -11,7 +11,7 @@ { "filename" : "annc_index2", "name" : { - "zh_tw" : "2. 右圖左文 ( 模組標題, 圖片, 狀態, 日期, 類別, 標題, 副標題 )", + "zh_tw" : "2. 左圖右文 ( 模組標題, 圖片, 狀態, 日期, 類別, 標題, 副標題 )", "en" : "2. Balanced Image + Text(Right) (widget-title, image, status, postdate, category, title, subtitle)" }, "thumbnail" : "annc_index2_thumbs.png" @@ -19,7 +19,7 @@ { "filename" : "annc_index3", "name" : { - "zh_tw" : "3. 右文左圖 ( 模組標題, 狀態, 日期, 類別, 標題, 副標題, 圖片 )", + "zh_tw" : "3. 右圖左文 ( 模組標題, 狀態, 日期, 類別, 標題, 副標題, 圖片 )", "en" : "3. Balanced Image + Text(left) (widget-title, status, postdate, category, title, subtitle, image)" }, "thumbnail" : "annc_index3_thumbs.png" @@ -121,14 +121,6 @@ "en" : "12. 1 Image + Title List (widget-title, status, title, postdate)" }, "thumbnail" : "annc_widget12_thumbs.png" - }, - { - "filename" : "admission_widget1", - "name" : { - "zh_tw" : "招生模組: 1. 標準表格列表 ( 模組標題, 類別, 標題, 檔案下載, 超連結 )", - "en" : "Admission: 1. Standard Table List (widget-title, category, title, attatchment, link)" - }, - "thumbnail" : "admission_widget1_thumbs.png" } ] } \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/partial/_head.html.erb b/app/templates/orbit_bootstrap/partial/_head.html.erb index 259e6ab..11d6eb4 100644 --- a/app/templates/orbit_bootstrap/partial/_head.html.erb +++ b/app/templates/orbit_bootstrap/partial/_head.html.erb @@ -3,11 +3,11 @@ <%= favicon_link_tag (current_site.favicon.blank? ? 'favicon.ico' : current_site.favicon.url) %> <%= render_site_title %> - <%= stylesheet_link_tag "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css"%> - <%= stylesheet_link_tag "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/css/bootstrap.min.css"%> + <%= stylesheet_link_tag "//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css"%> + <%= stylesheet_link_tag "//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/css/bootstrap.min.css"%> <%= stylesheet_link_tag "template/template"%> - <%= javascript_include_tag "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"%> - <%= javascript_include_tag "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/js/bootstrap.min.js"%> + <%= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"%> + <%= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/js/bootstrap.min.js"%> <%= javascript_include_tag "plugin/modernizr"%> <%= javascript_include_tag "plugin/jquery-bullseye-min"%> <%= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/jquery.cycle2/20140415/jquery.cycle2.min.js"%> From f52919e4b65fdb843adc02824792f9dff34ba991 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 19 Mar 2015 14:24:40 +0800 Subject: [PATCH 02/10] group added --- app/controllers/admin/groups_controller.rb | 47 +++++ app/models/group.rb | 16 ++ app/models/group_category.rb | 8 + app/models/member_profile.rb | 7 + app/models/user.rb | 1 + .../admin/groups/_create_group_form.html.erb | 164 ++++++++++++++++++ app/views/admin/groups/_group.html.erb | 31 ++++ .../admin/groups/_group_categories.html.erb | 5 + app/views/admin/groups/categories.html.erb | 84 ++++++++- app/views/admin/groups/index.html.erb | 18 +- app/views/admin/groups/new.html.erb | 5 + app/views/admin/members/_side_bar.html.erb | 1 + app/views/orbit_bar/index.html.erb | 2 +- config/routes.rb | 1 + 14 files changed, 387 insertions(+), 3 deletions(-) create mode 100644 app/models/group.rb create mode 100644 app/models/group_category.rb create mode 100644 app/views/admin/groups/_create_group_form.html.erb create mode 100644 app/views/admin/groups/_group.html.erb create mode 100644 app/views/admin/groups/_group_categories.html.erb create mode 100644 app/views/admin/groups/new.html.erb diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index e838d5e..b35a517 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -1,9 +1,56 @@ class Admin::GroupsController < OrbitMemberController def index + @groups = Group.all end def categories + @categories = GroupCategory.all + end + + def create_category + gc = GroupCategory.new(category_params) + gc.save + @categories = GroupCategory.all + render :partial => "group_categories" + end + + def create + group = Group.new(group_params) + group.save + redirect_to admin_groups_path + end + + def new + @group = Group.new + @categories = GroupCategory.all.collect{|gc| [gc.title,gc.id]} + @members = [] + MemberProfile.all.each do |mp| + user = mp.user rescue nil + if !user.nil? && user.id.to_s != current_user.id.to_s && user.user_name != "rulingcom" + avatar = (mp.avatar.thumb.url == "thumb_person.png" ? "/assets/thumb_person.png" : mp.avatar.thumb.url rescue "/assets/thumb_person.png") + @members << { + "id" => user.id.to_s, + "user_name" => (user.user_name rescue ""), + "avatar" => avatar, + "name" => (mp.name_translations rescue {"en" => "","zh_tw" => ""}) + } + end + end + end + + private + + def category_params + params.require(:category).permit! + end + + def group_params + p = params.require(:group).permit! + p["user_ids"] << current_user.id.to_s + p["admins"] = [] + p["admins"] << current_user.id.to_s + p end end \ No newline at end of file diff --git a/app/models/group.rb b/app/models/group.rb new file mode 100644 index 0000000..a8ef047 --- /dev/null +++ b/app/models/group.rb @@ -0,0 +1,16 @@ +class Group + include Mongoid::Document + include Mongoid::Timestamps + include Slug + + field :title, as: :slug_title, type: String, localize: true + field :description, localize: true + field :admins, type: Array, default: [] + field :privacy, default: "closed" + mount_uploader :image, ImageUploader + + belongs_to :group_category + has_and_belongs_to_many :users + + +end \ No newline at end of file diff --git a/app/models/group_category.rb b/app/models/group_category.rb new file mode 100644 index 0000000..5a3e7a5 --- /dev/null +++ b/app/models/group_category.rb @@ -0,0 +1,8 @@ +class GroupCategory + include Mongoid::Document + include Mongoid::Timestamps + + field :title, localize: true + + has_many :groups +end \ No newline at end of file diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb index 1e3680b..324f19b 100644 --- a/app/models/member_profile.rb +++ b/app/models/member_profile.rb @@ -52,6 +52,13 @@ class MemberProfile end end + def name_translations + { + "en" => "#{self.first_name_translations["en"]} #{self.last_name_translations["zh_tw"]}", + "zh_tw" => "#{self.last_name_translations["zh_tw"]} #{self.first_name_translations["zh_tw"]}" + } + end + def disable_role=(var) var[:id].each do |id,val| if (val=="true") diff --git a/app/models/user.rb b/app/models/user.rb index f11c615..fc44c65 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -20,6 +20,7 @@ class User belongs_to :workgroup has_many :authorizations belongs_to :member_profile + has_and_belongs_to_many :groups has_one :facebook, :autosave => true, :dependent => :destroy has_one :google, :autosave => true, :dependent => :destroy # has_one :desktop, :dependent => :destroy diff --git a/app/views/admin/groups/_create_group_form.html.erb b/app/views/admin/groups/_create_group_form.html.erb new file mode 100644 index 0000000..a649d73 --- /dev/null +++ b/app/views/admin/groups/_create_group_form.html.erb @@ -0,0 +1,164 @@ +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/fileupload" %> + <%= stylesheet_link_tag "lib/main-list" %> + <%= stylesheet_link_tag "select2/select2" %> + +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/bootstrap-fileupload" %> + <%= javascript_include_tag "lib/file-type" %> + <%= javascript_include_tag "lib/module-area" %> + <%= javascript_include_tag "select2/select2.min" %> +<% end %> + +
            + + + + +
            + + +
            + + +
            + +
            + <%= f.select :group_category_id, @categories %> +
            +
            + +
            + +
            +
            +
            + <% if @group.image.file %> + <%= image_tag @group.image %> + <% else %> + + <% end %> +
            +
            + + <%= t(:select_image) %> + <%= t(:change) %> + <%= f.file_field :image %> + + <%= t(:cancel) %> +
            + +
            +
            +
            +
            + +
            + +
            + Open + Closed +
            +
            +
            + +
            + +
            +
            + +
            +
            + + + + + +
            + + <% @site_in_use_locales.each_with_index do |locale, i| %> + +
            "> + + +
            + +
            + <%= f.fields_for :title_translations do |f| %> + <%= f.text_field locale, class: "input-block-level", placeholder: t(:title), value: (@group.title_translations[locale] rescue nil) %> + <% end %> +
            +
            + + +
            + +
            +
            + <%= f.fields_for :description_translations do |f| %> + <%= f.text_area locale, rows: 2, class: "input-block-level", value: (@group.description_translations[locale] rescue nil) %> + <% end %> +
            +
            +
            +
            + <% end %> +
            +
            + + +
            + <%= f.submit t('submit'), class: 'btn btn-primary' %> + <%= link_to t('cancel'), admin_groups_path, :class=>"btn" %> +
            + + + + diff --git a/app/views/admin/groups/_group.html.erb b/app/views/admin/groups/_group.html.erb new file mode 100644 index 0000000..b9c37b6 --- /dev/null +++ b/app/views/admin/groups/_group.html.erb @@ -0,0 +1,31 @@ +<% current_user_is_group_admin = group.admins.include?(current_user.id.to_s) ? true : false %> +
          • +
            + +

            ">

            +
            + <%= link_to(content_tag(:i, nil, :class => 'icon-edit'),"#",:class=>"edit" ) if current_user_is_group_admin %> +
            + <%= image_tag(group.image) %> +
            +
            +

            <%= link_to group.title, "#" %>

            + <% + author = "" + group.admins.each_with_index do |admin,i| + user = User.find(admin) rescue nil + if !user.nil? + author = author + (user.member_profile.name == "" ? user.user_name : user.member_profile.name rescue "") + author = author + ", " if i != group.admins.count - 1 + end + end + %> +
            Admin : <%= author %>
            +
            +
              +
            • + <%= group.description %> +
            • +
            +
            +
          • \ No newline at end of file diff --git a/app/views/admin/groups/_group_categories.html.erb b/app/views/admin/groups/_group_categories.html.erb new file mode 100644 index 0000000..b9d103d --- /dev/null +++ b/app/views/admin/groups/_group_categories.html.erb @@ -0,0 +1,5 @@ +<% @categories.each do |cat| %> +
            + <%= cat.title_translations["en"] %> / <%= cat.title_translations["zh_tw"] %> +
            +<% end %> \ No newline at end of file diff --git a/app/views/admin/groups/categories.html.erb b/app/views/admin/groups/categories.html.erb index 1eab51a..ce368ad 100644 --- a/app/views/admin/groups/categories.html.erb +++ b/app/views/admin/groups/categories.html.erb @@ -1 +1,83 @@ -this is category. \ No newline at end of file +
            + <%= render :partial => "group_categories" %> +
            ++ + + + \ No newline at end of file diff --git a/app/views/admin/groups/index.html.erb b/app/views/admin/groups/index.html.erb index ebc19ee..b14c207 100644 --- a/app/views/admin/groups/index.html.erb +++ b/app/views/admin/groups/index.html.erb @@ -1 +1,17 @@ -this is my group page \ No newline at end of file +<% content_for :page_specific_css do -%> + + <%= stylesheet_link_tag "lib/wrap-nav" %> + <%= stylesheet_link_tag "lib/main-list" %> + <%= stylesheet_link_tag "lib/filter" %> + <%= stylesheet_link_tag "lib/member" %> + +<% end -%> +<% content_for :page_specific_javascript do -%> + <%= javascript_include_tag "lib/jquery.lite.image.resize.js" %> + <%= javascript_include_tag "lib/member/list-view.js" %> +<% end -%> +
            +
              + <%= render :partial=>"group",:collection=> @groups %> +
            +
            \ No newline at end of file diff --git a/app/views/admin/groups/new.html.erb b/app/views/admin/groups/new.html.erb new file mode 100644 index 0000000..6f87f09 --- /dev/null +++ b/app/views/admin/groups/new.html.erb @@ -0,0 +1,5 @@ +<%= form_for @group, :url => admin_groups_path, :html => { :multipart => true , :class=>"form-horizontal main-forms"} do |f| %> +
            + <%= render :partial => "create_group_form", locals: {f: f} %> +
            +<% end %> \ No newline at end of file diff --git a/app/views/admin/members/_side_bar.html.erb b/app/views/admin/members/_side_bar.html.erb index 32a197b..a45cf1e 100644 --- a/app/views/admin/members/_side_bar.html.erb +++ b/app/views/admin/members/_side_bar.html.erb @@ -52,6 +52,7 @@ <%= content_tag :ul, :class => ("nav nav-list ") do -%> <%= content_tag :li, link_to((content_tag(:span, "My Groups")), admin_groups_path), :class => active_for_action('groups', 'index') %> <%= content_tag :li, link_to((content_tag(:span, "Categories")), admin_groups_categories_path), :class => active_for_action('groups','categories') %> + <%= content_tag :li, link_to((content_tag(:span, "Create New Group")), new_admin_group_path), :class => active_for_action('groups','new') %> <% end -%>
        diff --git a/app/views/orbit_bar/index.html.erb b/app/views/orbit_bar/index.html.erb index 4337bfb..e22cca3 100644 --- a/app/views/orbit_bar/index.html.erb +++ b/app/views/orbit_bar/index.html.erb @@ -61,7 +61,7 @@
      • - + <%= t(:member_) %>
      • diff --git a/config/routes.rb b/config/routes.rb index 11b6b5a..48cbcff 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -122,6 +122,7 @@ Orbit::Application.routes.draw do # GROUPS START HERE get "groups/categories" => 'groups#categories' + post "groups/create_category" => 'groups#create_category' resources :groups do From e1c8d611956119fbaff36058a82ed9a8f650138b Mon Sep 17 00:00:00 2001 From: rulingcom Date: Mon, 23 Mar 2015 17:39:58 +0800 Subject: [PATCH 03/10] sdk precompile fixed --- .../orbit_bootstrap/assets/javascripts/app.js | 189 +++--- .../assets/stylesheets/bootstrap/_alerts.scss | 67 -- .../assets/stylesheets/bootstrap/_badges.scss | 55 -- .../stylesheets/bootstrap/_breadcrumbs.scss | 26 - .../stylesheets/bootstrap/_button-groups.scss | 226 ------- .../stylesheets/bootstrap/_buttons.scss | 159 ----- .../stylesheets/bootstrap/_carousel.scss | 232 ------- .../assets/stylesheets/bootstrap/_close.scss | 35 - .../assets/stylesheets/bootstrap/_code.scss | 63 -- .../bootstrap/_component-animations.scss | 29 - .../stylesheets/bootstrap/_dropdowns.scss | 213 ------ .../assets/stylesheets/bootstrap/_forms.scss | 436 ------------ .../stylesheets/bootstrap/_glyphicons.scss | 233 ------- .../assets/stylesheets/bootstrap/_grid.scss | 84 --- .../stylesheets/bootstrap/_input-groups.scss | 162 ----- .../stylesheets/bootstrap/_jumbotron.scss | 44 -- .../assets/stylesheets/bootstrap/_labels.scss | 64 -- .../stylesheets/bootstrap/_list-group.scss | 110 ---- .../assets/stylesheets/bootstrap/_media.scss | 56 -- .../assets/stylesheets/bootstrap/_modals.scss | 139 ---- .../assets/stylesheets/bootstrap/_navbar.scss | 620 ------------------ .../assets/stylesheets/bootstrap/_navs.scss | 242 ------- .../stylesheets/bootstrap/_normalize.scss | 423 ------------ .../assets/stylesheets/bootstrap/_pager.scss | 55 -- .../stylesheets/bootstrap/_pagination.scss | 79 --- .../assets/stylesheets/bootstrap/_panels.scss | 241 ------- .../stylesheets/bootstrap/_popovers.scss | 133 ---- .../assets/stylesheets/bootstrap/_print.scss | 101 --- .../stylesheets/bootstrap/_progress-bars.scss | 80 --- .../bootstrap/_responsive-utilities.scss | 74 --- .../stylesheets/bootstrap/_scaffolding.scss | 134 ---- .../assets/stylesheets/bootstrap/_tables.scss | 233 ------- .../assets/stylesheets/bootstrap/_theme.scss | 247 ------- .../stylesheets/bootstrap/_thumbnails.scss | 38 -- .../stylesheets/bootstrap/_tooltip.scss | 95 --- .../assets/stylesheets/bootstrap/_type.scss | 284 -------- .../stylesheets/bootstrap/_utilities.scss | 56 -- .../assets/stylesheets/bootstrap/_wells.scss | 29 - .../stylesheets/bootstrap/bootstrap.scss | 49 -- .../stylesheets/template/base/_global.scss | 3 +- .../stylesheets/template/base/_mixins.scss | 1 + .../template/base/_orbitbar-override.scss | 3 +- .../template/base/_pagination.scss | 3 +- .../stylesheets/template/base/_unity.scss | 3 +- .../assets/stylesheets/template/init.scss | 2 +- .../assets/stylesheets/template/initial.scss | 6 + .../stylesheets/template/layout/content.scss | 2 +- .../stylesheets/template/layout/footer.scss | 2 +- .../stylesheets/template/layout/header.scss | 2 +- .../stylesheets/template/layout/slide.scss | 2 +- .../template/modules/ad_banner.scss | 6 +- .../template/modules/announcement.scss | 2 +- .../template/modules/archives.scss | 2 +- .../stylesheets/template/modules/faq.scss | 2 +- .../stylesheets/template/modules/gallery.scss | 2 +- .../stylesheets/template/modules/member.scss | 2 +- .../stylesheets/template/modules/menu.scss | 2 +- .../template/modules/personal_plugin.scss | 1 - .../template/modules/web_resource.scss | 2 +- .../assets/stylesheets/template/template.scss | 2 - .../template/widget/breadcrumb.scss | 2 +- .../stylesheets/template/widget/sitemenu.scss | 2 +- .../orbit_bootstrap/home/footer.html.erb | 2 +- .../orbit_bootstrap/home/index.html.erb | 2 +- .../orbit_bootstrap/home/page.html.erb | 10 +- config/initializers/template.rb | 12 +- 66 files changed, 149 insertions(+), 5768 deletions(-) delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_alerts.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_modals.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navbar.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navs.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_normalize.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pager.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pagination.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_panels.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_popovers.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_print.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_progress-bars.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_responsive-utilities.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_scaffolding.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tables.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_theme.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_thumbnails.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tooltip.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_type.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_utilities.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss delete mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss create mode 100644 app/templates/orbit_bootstrap/assets/stylesheets/template/initial.scss diff --git a/app/templates/orbit_bootstrap/assets/javascripts/app.js b/app/templates/orbit_bootstrap/assets/javascripts/app.js index f806c79..139e974 100644 --- a/app/templates/orbit_bootstrap/assets/javascripts/app.js +++ b/app/templates/orbit_bootstrap/assets/javascripts/app.js @@ -1,108 +1,131 @@ -(function($) { +(function( $ ) { "use strict" function init() { - var doc = document; + var doc = document, + lang = doc.documentElement.lang; var orbit = { - // Cross browser add class function - addClass: function(el, className) { - if (el.classList) { - el.classList.add(className); - } else { - el.className += ' ' + className; - } - }, - // Cross browser has class function - hasClass: function(el, cls) { - return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1; - }, - // Add class name to the menu item when its children items are more than eight - addMegaDropdownClass: function(el, len) { - for (var i = 0; i < el.length; i++) { - if (el[i].children.length > len) { - orbit.addClass(el[i].parentNode, 'mega-dropdown'); + + helpers : { + // Cross-browser class manipulation + addClass: function( el, className ) { + if ( el.classList ) { + el.classList.add( className ); + } else { + el.className += " " + className; + } + }, + hasClass: function( el, cls ) { + return ( " " + el.className + " " ).indexOf( " " + cls + " " ) > -1; } - } - }, - // Append caret to menu item if it has dropdown - addCaret: function() { - var list = doc.querySelectorAll('.page_menu.level_2'); - for (var i = 0, len = list.length; i < len; i++) { - var node = doc.createElement('span'); - node.className = 'caret'; - list[i].parentNode.appendChild(node); - } - }, - // Add link and cursor class name on element that has data-link attribute - addLinkOnADBanner: function(els) { - $.each(els, function(i) { - if ($(this).data('link') !== "" && !$(this).hasClass('youtube')) { - $(this).on('click', function() { - var target = $(this).data('target'), - link = $(this).data('link'); - if (target === '_blank') { - window.open(link, target); - } else { - window.location.href = link; + }, + + plugins : { + // RWD image resize script + bullEye: function() { + $( ".bullseye" ).bullseye({ + fadeEffect: false + }); + } + }, + + nav : { + // Add class name to the menu item when its child items are more than 8 items + addMegaDropdownClass: function( els, len, className ) { + var els = doc.querySelectorAll( els ), + elsLen = els.length, + i = -1; + + if( elsLen > 1 ) { + for ( i = 0; i < elsLen; i++ ) { + if ( els[ i ].children.length > len ) { + this.helpers.addClass( els[ i ].parentNode, className || "mega-dropdown" ); + } } - }).addClass('cursor'); + } + }, + // Append caret to menu item if it has dropdown + addCaret: function() { + var els = doc.querySelectorAll( ".page_menu.level_2" ), + len = els.length, + i = -1; + + for ( i = 0; i < len; i++ ) { + var node = doc.createElement( "span" ); + node.className = "caret"; + els[ i ].parentNode.appendChild( node ); + } } - }); - }, - // Announcement text truncation - truncation: function(el, len) { - for (var i = 0; i < el.length; i++) { - if (el[i].firstChild !== null) { - if (el[i].firstChild.length > len) { - var newStr = el[i].firstChild.nodeValue, - newStr = newStr.substring(0, len) + '...' - el - .eq(i) - .text(newStr); + }, + + announcement: { + // Announcement text truncation + truncateAnnouncement: function( els, maxLen ) { + var els = doc.querySelectorAll( els ), + newTitle = ""; + i = -1, + elsLen = els.length; + + for( i = 0; i < elsLen; i ++ ) { + if ( els[ i ].firstChild !== null ) { + if( els[ i ].firstChild.length > maxLen ) { + newTitle = els[ i ].firstChild.textContent; + els[ i ].textContent = newTitle.substring( 0, maxLen ) + "..."; + } + } + } + } + }, + + // Add link and cursor class name on element that has data-link attribute + addLinkOnADBanner: function( els ) { + $.each( els, function() { + if ( $( this ).data( "link" ) !== "" && !$( this ).hasClass( "youtube" ) ) { + $( this ).on( "click", function() { + var target = $( this ).data( "target" ), + link = $( this ).data( "link" ); + if ( target === "_blank" ) { + window.open( link, target ); + } else { + window.location.href = link; + } + }).addClass( "cursor" ); + } + }); + }, + + // Sitemenu dropdown + sitemenuDropdown: function( els ) { + var els = doc.querySelectorAll(".sitemenu__list.level-2"), + len = els.length, + i = -1; + for ( i = 0; i < len; i++ ) { + if ( els[ i ].children.length ) { + var caret = doc.createElement( "span" ); + caret.className = "sitemenu___dropdown-toggle fa fa-caret-down"; + caret.setAttribute( "data-toggle", "dropdown" ); + + els[ i ].parentNode.insertBefore( caret, els[ i ] ); + this.helpers.addClass( els[ i ], "dropdown-menu" ); } } } - }, - // Sitemenu dropdown - sitemenuDropdown: function() { - var el = doc.querySelectorAll('.sitemenu__list.level-2'); - for (var i = 0, len = el.length; i < len; i++) { - if (el[i].hasChildNodes()) { - var caret = doc.createElement('span'); - caret.className = 'sitemenu___dropdown-toggle fa fa-caret-down'; - caret.setAttribute('data-toggle', 'dropdown'); - - el[i].parentNode.insertBefore(caret, el[i]); - orbit.addClass(el[i], 'dropdown-menu'); - } - } - } - } - - var plugin = { - // RWD image resize script - bullEye: function() { - $(".bullseye").bullseye({ - fadeEffect: false - }); - } } // Specific functions that will be running on homepage - if (doc.body.getAttribute('data-module') === 'home') { + if ( doc.body.getAttribute( "data-module" ) === "home" ) { } // Functions that will be running on every page orbit.sitemenuDropdown(); - plugin.bullEye(); + orbit.plugins.bullEye(); } - - $(document).ready(function($) { + $( document ).ready(function() { init(); }); -}(jQuery)); +}( jQuery )); diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_alerts.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_alerts.scss deleted file mode 100644 index 4685ac3..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_alerts.scss +++ /dev/null @@ -1,67 +0,0 @@ -// -// Alerts -// -------------------------------------------------- - - -// Base styles -// ------------------------- - -.alert { - padding: $alert-padding; - margin-bottom: $line-height-computed; - border: 1px solid transparent; - border-radius: $alert-border-radius; - - // Headings for larger alerts - h4 { - margin-top: 0; - // Specified for the h4 to prevent conflicts of changing $headings-color - color: inherit; - } - // Provide class for links that match alerts - .alert-link { - font-weight: $alert-link-font-weight; - } - - // Improve alignment and spacing of inner content - > p, - > ul { - margin-bottom: 0; - } - > p + p { - margin-top: 5px; - } -} - -// Dismissable alerts -// -// Expand the right padding and account for the close button's positioning. - -.alert-dismissable { - padding-right: ($alert-padding + 20); - - // Adjust close link position - .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; - } -} - -// Alternate styles -// -// Generate contextual modifier classes for colorizing the alert. - -.alert-success { - @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); -} -.alert-info { - @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); -} -.alert-warning { - @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); -} -.alert-danger { - @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss deleted file mode 100644 index 4014a80..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_badges.scss +++ /dev/null @@ -1,55 +0,0 @@ -// -// Badges -// -------------------------------------------------- - - -// Base classes -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: $font-size-small; - font-weight: $badge-font-weight; - color: $badge-color; - line-height: $badge-line-height; - vertical-align: baseline; - white-space: nowrap; - text-align: center; - background-color: $badge-bg; - border-radius: $badge-border-radius; - - // Empty badges collapse automatically (not available in IE8) - &:empty { - display: none; - } - - // Quick fix for badges in buttons - .btn & { - position: relative; - top: -1px; - } - .btn-xs & { - top: 0; - padding: 1px 5px; - } -} - -// Hover state, but only for links -a.badge { - &:hover, - &:focus { - color: $badge-link-hover-color; - text-decoration: none; - cursor: pointer; - } -} - -// Account for counters in navs -a.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: $badge-active-color; - background-color: $badge-active-bg; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss deleted file mode 100644 index 3641e33..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_breadcrumbs.scss +++ /dev/null @@ -1,26 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; - margin-bottom: $line-height-computed; - list-style: none; - background-color: $breadcrumb-bg; - border-radius: $border-radius-base; - - > li { - display: inline-block; - - + li:before { - content: "#{$breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space - padding: 0 5px; - color: $breadcrumb-color; - } - } - - > .active { - color: $breadcrumb-active-color; - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss deleted file mode 100644 index 066b4d7..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_button-groups.scss +++ /dev/null @@ -1,226 +0,0 @@ -// -// Button groups -// -------------------------------------------------- - -// Make the div behave like a button -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; // match .btn alignment given font-size hack above - > .btn { - position: relative; - float: left; - // Bring the "active" button to the front - &:hover, - &:focus, - &:active, - &.active { - z-index: 2; - } - &:focus { - // Remove focus outline when dropdown JS adds it after closing the menu - outline: none; - } - } -} - -// Prevent double borders when buttons are next to each other -.btn-group { - .btn + .btn, - .btn + .btn-group, - .btn-group + .btn, - .btn-group + .btn-group { - margin-left: -1px; - } -} - -// Optional: Group multiple button groups together for a toolbar -.btn-toolbar { - margin-left: -5px; // Offset the first child's margin - @include clearfix(); - - .btn-group, - .input-group { - float: left; - } - > .btn, - > .btn-group, - > .input-group { - margin-left: 5px; - } -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match -.btn-group > .btn:first-child { - margin-left: 0; - &:not(:last-child):not(.dropdown-toggle) { - @include border-right-radius(0); - } -} -// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - @include border-left-radius(0); -} - -// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child { - > .btn:last-child, - > .dropdown-toggle { - @include border-right-radius(0); - } -} -.btn-group > .btn-group:last-child > .btn:first-child { - @include border-left-radius(0); -} - -// On active and open, don't show outline -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - - -// Sizing -// -// Remix the default button sizing classes into new ones for easier manipulation. - -.btn-group-xs > .btn { @extend .btn-xs; } -.btn-group-sm > .btn { @extend .btn-sm; } -.btn-group-lg > .btn { @extend .btn-lg; } - - -// Split button dropdowns -// ---------------------- - -// Give the line between buttons some depth -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} - -// The clickable button for toggling the menu -// Remove the gradient and set the same inset shadow as the :active state -.btn-group.open .dropdown-toggle { - @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - - // Show no shadow for `.btn-link` since it has no other button styles. - &.btn-link { - @include box-shadow(none); - } -} - - -// Reposition the caret -.btn .caret { - margin-left: 0; -} -// Carets in other button sizes -.btn-lg .caret { - border-width: $caret-width-large $caret-width-large 0; - border-bottom-width: 0; -} -// Upside down carets for .dropup -.dropup .btn-lg .caret { - border-width: 0 $caret-width-large $caret-width-large; -} - - -// Vertical button groups -// ---------------------- - -.btn-group-vertical { - > .btn, - > .btn-group, - > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; - } - - // Clear floats so dropdown menus can be properly placed - > .btn-group { - @include clearfix(); - > .btn { - float: none; - } - } - - > .btn + .btn, - > .btn + .btn-group, - > .btn-group + .btn, - > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; - } -} - -.btn-group-vertical > .btn { - &:not(:first-child):not(:last-child) { - border-radius: 0; - } - &:first-child:not(:last-child) { - border-top-right-radius: $border-radius-base; - @include border-bottom-radius(0); - } - &:last-child:not(:first-child) { - border-bottom-left-radius: $border-radius-base; - @include border-top-radius(0); - } -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) { - > .btn:last-child, - > .dropdown-toggle { - @include border-bottom-radius(0); - } -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - @include border-top-radius(0); -} - - - -// Justified button groups -// ---------------------- - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; - > .btn, - > .btn-group { - float: none; - display: table-cell; - width: 1%; - } - > .btn-group .btn { - width: 100%; - } -} - - -// Checkbox and radio options -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss deleted file mode 100644 index 28110b6..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_buttons.scss +++ /dev/null @@ -1,159 +0,0 @@ -// -// Buttons -// -------------------------------------------------- - - -// Base styles -// -------------------------------------------------- - -.btn { - display: inline-block; - margin-bottom: 0; // For input.btn - font-weight: $btn-font-weight; - text-align: center; - vertical-align: middle; - cursor: pointer; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid transparent; - white-space: nowrap; - @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base); - @include user-select(none); - - &, - &:active, - &.active { - &:focus { - @include tab-focus(); - } - } - - &:hover, - &:focus { - color: $btn-default-color; - text-decoration: none; - } - - &:active, - &.active { - outline: 0; - background-image: none; - @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } - - &.disabled, - &[disabled], - fieldset[disabled] & { - cursor: not-allowed; - pointer-events: none; // Future-proof disabling of clicks - @include opacity(.65); - @include box-shadow(none); - } -} - - -// Alternate buttons -// -------------------------------------------------- - -.btn-default { - @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); -} -.btn-primary { - @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border); -} -// Success appears as green -.btn-success { - @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); -} -// Info appears as blue-green -.btn-info { - @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); -} -// Warning appears as orange -.btn-warning { - @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); -} -// Danger and error appear as red -.btn-danger { - @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); -} - - -// Link buttons -// ------------------------- - -// Make a button look and behave like a link -.btn-link { - color: $link-color; - font-weight: normal; - cursor: pointer; - border-radius: 0; - - &, - &:active, - &[disabled], - fieldset[disabled] & { - background-color: transparent; - @include box-shadow(none); - } - &, - &:hover, - &:focus, - &:active { - border-color: transparent; - } - &:hover, - &:focus { - color: $link-hover-color; - text-decoration: underline; - background-color: transparent; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: $btn-link-disabled-color; - text-decoration: none; - } - } -} - - -// Button Sizes -// -------------------------------------------------- - -.btn-lg { - // line-height: ensure even-numbered height of button next to large input - @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large); -} -.btn-sm { - // line-height: ensure proper height of button next to small input - @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small); -} -.btn-xs { - @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $border-radius-small); -} - - -// Block button -// -------------------------------------------------- - -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss deleted file mode 100644 index d8f2364..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_carousel.scss +++ /dev/null @@ -1,232 +0,0 @@ -// -// Carousel -// -------------------------------------------------- - - -// Wrapper for the slide container and indicators -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; - - > .item { - display: none; - position: relative; - @include transition(.6s ease-in-out left); - - // Account for jankitude on images - > img, - > a > img { - @include img-responsive(); - line-height: 1; - } - } - - > .active, - > .next, - > .prev { display: block; } - - > .active { - left: 0; - } - - > .next, - > .prev { - position: absolute; - top: 0; - width: 100%; - } - - > .next { - left: 100%; - } - > .prev { - left: -100%; - } - > .next.left, - > .prev.right { - left: 0; - } - - > .active.left { - left: -100%; - } - > .active.right { - left: 100%; - } - -} - -// Left/right controls for nav -// --------------------------- - -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: $carousel-control-width; - @include opacity($carousel-control-opacity); - font-size: $carousel-control-font-size; - color: $carousel-control-color; - text-align: center; - text-shadow: $carousel-text-shadow; - // We can't have this transition here because WebKit cancels the carousel - // animation if you trip this while in the middle of another animation. - - // Set gradients for backgrounds - &.left { - @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001)); - } - &.right { - left: auto; - right: 0; - @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5)); - } - - // Hover/focus state - &:hover, - &:focus { - outline: none; - color: $carousel-control-color; - text-decoration: none; - @include opacity(.9); - } - - // Toggles - .icon-prev, - .icon-next, - .glyphicon-chevron-left, - .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - } - .icon-prev, - .glyphicon-chevron-left { - left: 50%; - } - .icon-next, - .glyphicon-chevron-right { - right: 50%; - } - .icon-prev, - .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - font-family: serif; - } - - .icon-prev { - &:before { - content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) - } - } - .icon-next { - &:before { - content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) - } - } -} - -// Optional indicator pips -// -// Add an unordered list with the following class and add a list item for each -// slide your carousel holds. - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; - - li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid $carousel-indicator-border-color; - border-radius: 10px; - cursor: pointer; - - // IE8-9 hack for event handling - // - // Internet Explorer 8-9 does not support clicks on elements without a set - // `background-color`. We cannot use `filter` since that's not viewed as a - // background color by the browser. Thus, a hack is needed. - // - // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we - // set alpha transparency for the best results possible. - background-color: #000 \9; // IE8 - background-color: rgba(0,0,0,0); // IE9 - } - .active { - margin: 0; - width: 12px; - height: 12px; - background-color: $carousel-indicator-active-bg; - } -} - -// Optional captions -// ----------------------------- -// Hidden by default for smaller viewports -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: $carousel-caption-color; - text-align: center; - text-shadow: $carousel-text-shadow; - & .btn { - text-shadow: none; // No shadow for button elements in carousel-caption - } -} - - -// Scale up controls for tablets and up -@media screen and (min-width: $screen-sm-min) { - - // Scale up the controls a smidge - .carousel-control { - .glyphicon-chevron-left, - .glyphicon-chevron-right, - .icon-prev, - .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - margin-left: -15px; - font-size: 30px; - } - } - - // Show and left align the captions - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - - // Move up the indicators - .carousel-indicators { - bottom: 20px; - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss deleted file mode 100644 index 62ce30f..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_close.scss +++ /dev/null @@ -1,35 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: ($font-size-base * 1.5); - font-weight: $close-font-weight; - line-height: 1; - color: $close-color; - text-shadow: $close-text-shadow; - @include opacity(.2); - - &:hover, - &:focus { - color: $close-color; - text-decoration: none; - cursor: pointer; - @include opacity(.5); - } - - // [converter] extracted button& to button.close -} - -// Additional properties for button version -// iOS requires the button element instead of an anchor tag. -// If you want the anchor version, it requires `href="#"`. -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss deleted file mode 100644 index 8953616..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_code.scss +++ /dev/null @@ -1,63 +0,0 @@ -// -// Code (inline and block) -// -------------------------------------------------- - - -// Inline and block code styles -code, -kbd, -pre, -samp { - font-family: $font-family-monospace; -} - -// Inline code -code { - padding: 2px 4px; - font-size: 90%; - color: $code-color; - background-color: $code-bg; - white-space: nowrap; - border-radius: $border-radius-base; -} - -// User input typically entered via keyboard -kbd { - padding: 2px 4px; - font-size: 90%; - color: $kbd-color; - background-color: $kbd-bg; - border-radius: $border-radius-small; - box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); -} - -// Blocks of code -pre { - display: block; - padding: (($line-height-computed - 1) / 2); - margin: 0 0 ($line-height-computed / 2); - font-size: ($font-size-base - 1); // 14px to 13px - line-height: $line-height-base; - word-break: break-all; - word-wrap: break-word; - color: $pre-color; - background-color: $pre-bg; - border: 1px solid $pre-border-color; - border-radius: $border-radius-base; - - // Account for some code outputs that place code tags in pre tags - code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; - } -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: $pre-scrollable-max-height; - overflow-y: scroll; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss deleted file mode 100644 index 86632fd..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_component-animations.scss +++ /dev/null @@ -1,29 +0,0 @@ -// -// Component animations -// -------------------------------------------------- - -// Heads up! -// -// We don't use the `.opacity()` mixin here since it causes a bug with text -// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. - -.fade { - opacity: 0; - @include transition(opacity .15s linear); - &.in { - opacity: 1; - } -} - -.collapse { - display: none; - &.in { - display: block; - } -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - @include transition(height .35s ease); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss deleted file mode 100644 index 526be5b..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_dropdowns.scss +++ /dev/null @@ -1,213 +0,0 @@ -// -// Dropdown menus -// -------------------------------------------------- - - -// Dropdown arrow/caret -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: $caret-width-base solid; - border-right: $caret-width-base solid transparent; - border-left: $caret-width-base solid transparent; -} - -// The dropdown wrapper (div) -.dropdown { - position: relative; -} - -// Prevent the focus on the dropdown toggle when closing dropdowns -.dropdown-toggle:focus { - outline: 0; -} - -// The dropdown menu (ul) -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: $zindex-dropdown; - display: none; // none by default, but block on "open" of the menu - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; // override default ul - list-style: none; - font-size: $font-size-base; - background-color: $dropdown-bg; - border: 1px solid $dropdown-fallback-border; // IE8 fallback - border: 1px solid $dropdown-border; - border-radius: $border-radius-base; - @include box-shadow(0 6px 12px rgba(0,0,0,.175)); - background-clip: padding-box; - - // Aligns the dropdown menu to right - // - // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` - &.pull-right { - right: 0; - left: auto; - } - - // Dividers (basically an hr) within the dropdown - .divider { - @include nav-divider($dropdown-divider-bg); - } - - // Links within the dropdown menu - > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: $line-height-base; - color: $dropdown-link-color; - white-space: nowrap; // prevent links from randomly breaking onto new lines - } -} - -// Hover/Focus state -.dropdown-menu > li > a { - &:hover, - &:focus { - text-decoration: none; - color: $dropdown-link-hover-color; - background-color: $dropdown-link-hover-bg; - } -} - -// Active state -.dropdown-menu > .active > a { - &, - &:hover, - &:focus { - color: $dropdown-link-active-color; - text-decoration: none; - outline: 0; - background-color: $dropdown-link-active-bg; - } -} - -// Disabled state -// -// Gray out text and ensure the hover/focus state remains gray - -.dropdown-menu > .disabled > a { - &, - &:hover, - &:focus { - color: $dropdown-link-disabled-color; - } -} -// Nuke hover/focus effects -.dropdown-menu > .disabled > a { - &:hover, - &:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - @include reset-filter(); - cursor: not-allowed; - } -} - -// Open state for the dropdown -.open { - // Show the menu - > .dropdown-menu { - display: block; - } - - // Remove the outline when :focus is triggered - > a { - outline: 0; - } -} - -// Menu positioning -// -// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown -// menu with the parent. -.dropdown-menu-right { - left: auto; // Reset the default from `.dropdown-menu` - right: 0; -} -// With v3, we enabled auto-flipping if you have a dropdown within a right -// aligned nav component. To enable the undoing of that, we provide an override -// to restore the default dropdown menu alignment. -// -// This is only for left-aligning a dropdown menu within a `.navbar-right` or -// `.pull-right` nav component. -.dropdown-menu-left { - left: 0; - right: auto; -} - -// Dropdown section headers -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: $font-size-small; - line-height: $line-height-base; - color: $dropdown-header-color; -} - -// Backdrop to catch body clicks on mobile, etc. -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: ($zindex-dropdown - 10); -} - -// Right aligned dropdowns -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// -// Just add .dropup after the standard .dropdown class and you're set, bro. -// TODO: abstract this so that the navbar fixed styles are not placed here? - -.dropup, -.navbar-fixed-bottom .dropdown { - // Reverse the caret - .caret { - border-top: 0; - border-bottom: $caret-width-base solid; - content: ""; - } - // Different positioning for bottom up menu - .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; - } -} - - -// Component alignment -// -// Reiterate per navbar.less and the modified component alignment there. - -@media (min-width: $grid-float-breakpoint) { - .navbar-right { - .dropdown-menu { - right: 0; left: auto; - } - // Necessary for overrides of the default right aligned menu. - // Will remove come v4 in all likelihood. - .dropdown-menu-left { - left: 0; right: auto; - } - } -} - diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss deleted file mode 100644 index 2628238..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_forms.scss +++ /dev/null @@ -1,436 +0,0 @@ -// -// Forms -// -------------------------------------------------- - - -// Normalize non-controls -// -// Restyle and baseline non-control form elements. - -fieldset { - padding: 0; - margin: 0; - border: 0; - // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets, - // so we reset that to ensure it behaves more like a standard block element. - // See https://github.com/twbs/bootstrap/issues/12359. - min-width: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: $line-height-computed; - font-size: ($font-size-base * 1.5); - line-height: inherit; - color: $legend-color; - border: 0; - border-bottom: 1px solid $legend-border-color; -} - -label { - display: inline-block; - margin-bottom: 5px; - font-weight: bold; -} - - -// Normalize form controls -// -// While most of our form styles require extra classes, some basic normalization -// is required to ensure optimum display with or without those classes to better -// address browser inconsistencies. - -// Override content-box in Normalize (* isn't specific enough) -input[type="search"] { - @include box-sizing(border-box); -} - -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; /* IE8-9 */ - line-height: normal; -} - -// Set the height of file controls to match text inputs -input[type="file"] { - display: block; -} - -// Make range inputs behave like textual form controls -input[type="range"] { - display: block; - width: 100%; -} - -// Make multiple select elements height not fixed -select[multiple], -select[size] { - height: auto; -} - -// Focus for file, radio, and checkbox -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - @include tab-focus(); -} - -// Adjust output element -output { - display: block; - padding-top: ($padding-base-vertical + 1); - font-size: $font-size-base; - line-height: $line-height-base; - color: $input-color; -} - - -// Common form controls -// -// Shared size and type resets for form controls. Apply `.form-control` to any -// of the following form controls: -// -// select -// textarea -// input[type="text"] -// input[type="password"] -// input[type="datetime"] -// input[type="datetime-local"] -// input[type="date"] -// input[type="month"] -// input[type="time"] -// input[type="week"] -// input[type="number"] -// input[type="email"] -// input[type="url"] -// input[type="search"] -// input[type="tel"] -// input[type="color"] - -.form-control { - display: block; - width: 100%; - height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - padding: $padding-base-vertical $padding-base-horizontal; - font-size: $font-size-base; - line-height: $line-height-base; - color: $input-color; - background-color: $input-bg; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid $input-border; - border-radius: $input-border-radius; - @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s); - - // Customize the `:focus` state to imitate native WebKit styles. - @include form-control-focus(); - - // Placeholder - @include placeholder(); - - // Disabled and read-only inputs - // - // HTML5 says that controls under a fieldset > legend:first-child won't be - // disabled if the fieldset is disabled. Due to implementation difficulty, we - // don't honor that edge case; we style them as disabled anyway. - &[disabled], - &[readonly], - fieldset[disabled] & { - cursor: not-allowed; - background-color: $input-bg-disabled; - opacity: 1; // iOS fix for unreadable disabled content - } - - // [converter] extracted textarea& to textarea.form-control -} - -// Reset height for `textarea`s -textarea.form-control { - height: auto; -} - - -// Search inputs in iOS -// -// This overrides the extra rounded corners on search inputs in iOS so that our -// `.form-control` class can properly style them. Note that this cannot simply -// be added to `.form-control` as it's not specific enough. For details, see -// https://github.com/twbs/bootstrap/issues/11586. - -input[type="search"] { - -webkit-appearance: none; -} - - -// Special styles for iOS date input -// -// In Mobile Safari, date inputs require a pixel line-height that matches the -// given height of the input. - -input[type="date"] { - line-height: $input-height-base; -} - - -// Form groups -// -// Designed to help with the organization and spacing of vertical forms. For -// horizontal forms, use the predefined grid classes. - -.form-group { - margin-bottom: 15px; -} - - -// Checkboxes and radios -// -// Indent the labels to position radios/checkboxes as hanging controls. - -.radio, -.checkbox { - display: block; - min-height: $line-height-computed; // clear the floating input if there is no label text - margin-top: 10px; - margin-bottom: 10px; - padding-left: 20px; - label { - display: inline; - font-weight: normal; - cursor: pointer; - } -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing -} - -// Radios and checkboxes on same line -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; // space out consecutive inline controls -} - -// Apply same disabled cursor tweak as for inputs -// -// Note: Neither radios nor checkboxes can be readonly. -input[type="radio"], -input[type="checkbox"], -.radio, -.radio-inline, -.checkbox, -.checkbox-inline { - &[disabled], - fieldset[disabled] & { - cursor: not-allowed; - } -} - - -// Form control sizing -// -// Build on `.form-control` with modifier classes to decrease or increase the -// height and font-size of form controls. - -@include input-size('.input-sm', $input-height-small, $padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small); - -@include input-size('.input-lg', $input-height-large, $padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large); - - -// Form control feedback states -// -// Apply contextual and semantic states to individual form controls. - -.has-feedback { - // Enable absolute positioning - position: relative; - - // Ensure icons don't overlap text - .form-control { - padding-right: ($input-height-base * 1.25); - } - - // Feedback icon (requires .glyphicon classes) - .form-control-feedback { - position: absolute; - top: ($line-height-computed + 5); // Height of the `label` and its margin - right: 0; - display: block; - width: $input-height-base; - height: $input-height-base; - line-height: $input-height-base; - text-align: center; - } -} - -// Feedback states -.has-success { - @include form-control-validation($state-success-text, $state-success-text, $state-success-bg); -} -.has-warning { - @include form-control-validation($state-warning-text, $state-warning-text, $state-warning-bg); -} -.has-error { - @include form-control-validation($state-danger-text, $state-danger-text, $state-danger-bg); -} - - -// Static form control text -// -// Apply class to a `p` element to make any string of text align with labels in -// a horizontal form layout. - -.form-control-static { - margin-bottom: 0; // Remove default margin from `p` -} - - -// Help text -// -// Apply to any element you wish to create light text for placement immediately -// below a form control. Use for general help, formatting, or instructional text. - -.help-block { - display: block; // account for any element using help-block - margin-top: 5px; - margin-bottom: 10px; - color: lighten($text-color, 25%); // lighten the text some for contrast -} - - - -// Inline forms -// -// Make forms appear inline(-block) by adding the `.form-inline` class. Inline -// forms begin stacked on extra small (mobile) devices and then go inline when -// viewports reach <768px. -// -// Requires wrapping inputs and labels with `.form-group` for proper display of -// default HTML form controls and our custom form controls (e.g., input groups). -// -// Heads up! This is mixin-ed into `.navbar-form` in navbars.less. - -.form-inline { - - // Kick in the inline - @media (min-width: $screen-sm-min) { - // Inline-block all the things for "inline" - .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - - // In navbar-form, allow folks to *not* use `.form-group` - .form-control { - display: inline-block; - width: auto; // Prevent labels from stacking above inputs in `.form-group` - vertical-align: middle; - } - // Input groups need that 100% width though - .input-group > .form-control { - width: 100%; - } - - .control-label { - margin-bottom: 0; - vertical-align: middle; - } - - // Remove default margin on radios/checkboxes that were used for stacking, and - // then undo the floating of radios and checkboxes to match (which also avoids - // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969). - .radio, - .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - padding-left: 0; - vertical-align: middle; - } - .radio input[type="radio"], - .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } - - // Validation states - // - // Reposition the icon because it's now within a grid column and columns have - // `position: relative;` on them. Also accounts for the grid gutter padding. - .has-feedback .form-control-feedback { - top: 0; - } - } -} - - -// Horizontal forms -// -// Horizontal forms are built on grid classes and allow you to create forms with -// labels on the left and inputs on the right. - -.form-horizontal { - - // Consistent vertical alignment of labels, radios, and checkboxes - .control-label, - .radio, - .checkbox, - .radio-inline, - .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: ($padding-base-vertical + 1); // Default padding plus a border - } - // Account for padding we're adding to ensure the alignment and of help text - // and other content below items - .radio, - .checkbox { - min-height: ($line-height-computed + ($padding-base-vertical + 1)); - } - - // Make form groups behave like rows - .form-group { - @include make-row(); - } - - .form-control-static { - padding-top: ($padding-base-vertical + 1); - } - - // Only right align form labels here when the columns stop stacking - @media (min-width: $screen-sm-min) { - .control-label { - text-align: right; - } - } - - // Validation states - // - // Reposition the icon because it's now within a grid column and columns have - // `position: relative;` on them. Also accounts for the grid gutter padding. - .has-feedback .form-control-feedback { - top: 0; - right: ($grid-gutter-width / 2); - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss deleted file mode 100644 index c508835..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_glyphicons.scss +++ /dev/null @@ -1,233 +0,0 @@ -// -// Glyphicons for Bootstrap -// -// Since icons are fonts, they can be placed anywhere text is placed and are -// thus automatically sized to match the surrounding child. To use, create an -// inline element with the appropriate classes, like so: -// -// Star - -// Import the fonts -@font-face { - font-family: 'Glyphicons Halflings'; - src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'), '#{$icon-font-path}#{$icon-font-name}.eot')); - src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot?#iefix'), '#{$icon-font-path}#{$icon-font-name}.eot?#iefix')) format('embedded-opentype'), - url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff'), '#{$icon-font-path}#{$icon-font-name}.woff')) format('woff'), - url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.ttf'), '#{$icon-font-path}#{$icon-font-name}.ttf')) format('truetype'), - url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}'), '#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}')) format('svg'); -} - -// Catchall baseclass -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -// Individual icons -.glyphicon-asterisk { &:before { content: "\2a"; } } -.glyphicon-plus { &:before { content: "\2b"; } } -.glyphicon-euro { &:before { content: "\20ac"; } } -.glyphicon-minus { &:before { content: "\2212"; } } -.glyphicon-cloud { &:before { content: "\2601"; } } -.glyphicon-envelope { &:before { content: "\2709"; } } -.glyphicon-pencil { &:before { content: "\270f"; } } -.glyphicon-glass { &:before { content: "\e001"; } } -.glyphicon-music { &:before { content: "\e002"; } } -.glyphicon-search { &:before { content: "\e003"; } } -.glyphicon-heart { &:before { content: "\e005"; } } -.glyphicon-star { &:before { content: "\e006"; } } -.glyphicon-star-empty { &:before { content: "\e007"; } } -.glyphicon-user { &:before { content: "\e008"; } } -.glyphicon-film { &:before { content: "\e009"; } } -.glyphicon-th-large { &:before { content: "\e010"; } } -.glyphicon-th { &:before { content: "\e011"; } } -.glyphicon-th-list { &:before { content: "\e012"; } } -.glyphicon-ok { &:before { content: "\e013"; } } -.glyphicon-remove { &:before { content: "\e014"; } } -.glyphicon-zoom-in { &:before { content: "\e015"; } } -.glyphicon-zoom-out { &:before { content: "\e016"; } } -.glyphicon-off { &:before { content: "\e017"; } } -.glyphicon-signal { &:before { content: "\e018"; } } -.glyphicon-cog { &:before { content: "\e019"; } } -.glyphicon-trash { &:before { content: "\e020"; } } -.glyphicon-home { &:before { content: "\e021"; } } -.glyphicon-file { &:before { content: "\e022"; } } -.glyphicon-time { &:before { content: "\e023"; } } -.glyphicon-road { &:before { content: "\e024"; } } -.glyphicon-download-alt { &:before { content: "\e025"; } } -.glyphicon-download { &:before { content: "\e026"; } } -.glyphicon-upload { &:before { content: "\e027"; } } -.glyphicon-inbox { &:before { content: "\e028"; } } -.glyphicon-play-circle { &:before { content: "\e029"; } } -.glyphicon-repeat { &:before { content: "\e030"; } } -.glyphicon-refresh { &:before { content: "\e031"; } } -.glyphicon-list-alt { &:before { content: "\e032"; } } -.glyphicon-lock { &:before { content: "\e033"; } } -.glyphicon-flag { &:before { content: "\e034"; } } -.glyphicon-headphones { &:before { content: "\e035"; } } -.glyphicon-volume-off { &:before { content: "\e036"; } } -.glyphicon-volume-down { &:before { content: "\e037"; } } -.glyphicon-volume-up { &:before { content: "\e038"; } } -.glyphicon-qrcode { &:before { content: "\e039"; } } -.glyphicon-barcode { &:before { content: "\e040"; } } -.glyphicon-tag { &:before { content: "\e041"; } } -.glyphicon-tags { &:before { content: "\e042"; } } -.glyphicon-book { &:before { content: "\e043"; } } -.glyphicon-bookmark { &:before { content: "\e044"; } } -.glyphicon-print { &:before { content: "\e045"; } } -.glyphicon-camera { &:before { content: "\e046"; } } -.glyphicon-font { &:before { content: "\e047"; } } -.glyphicon-bold { &:before { content: "\e048"; } } -.glyphicon-italic { &:before { content: "\e049"; } } -.glyphicon-text-height { &:before { content: "\e050"; } } -.glyphicon-text-width { &:before { content: "\e051"; } } -.glyphicon-align-left { &:before { content: "\e052"; } } -.glyphicon-align-center { &:before { content: "\e053"; } } -.glyphicon-align-right { &:before { content: "\e054"; } } -.glyphicon-align-justify { &:before { content: "\e055"; } } -.glyphicon-list { &:before { content: "\e056"; } } -.glyphicon-indent-left { &:before { content: "\e057"; } } -.glyphicon-indent-right { &:before { content: "\e058"; } } -.glyphicon-facetime-video { &:before { content: "\e059"; } } -.glyphicon-picture { &:before { content: "\e060"; } } -.glyphicon-map-marker { &:before { content: "\e062"; } } -.glyphicon-adjust { &:before { content: "\e063"; } } -.glyphicon-tint { &:before { content: "\e064"; } } -.glyphicon-edit { &:before { content: "\e065"; } } -.glyphicon-share { &:before { content: "\e066"; } } -.glyphicon-check { &:before { content: "\e067"; } } -.glyphicon-move { &:before { content: "\e068"; } } -.glyphicon-step-backward { &:before { content: "\e069"; } } -.glyphicon-fast-backward { &:before { content: "\e070"; } } -.glyphicon-backward { &:before { content: "\e071"; } } -.glyphicon-play { &:before { content: "\e072"; } } -.glyphicon-pause { &:before { content: "\e073"; } } -.glyphicon-stop { &:before { content: "\e074"; } } -.glyphicon-forward { &:before { content: "\e075"; } } -.glyphicon-fast-forward { &:before { content: "\e076"; } } -.glyphicon-step-forward { &:before { content: "\e077"; } } -.glyphicon-eject { &:before { content: "\e078"; } } -.glyphicon-chevron-left { &:before { content: "\e079"; } } -.glyphicon-chevron-right { &:before { content: "\e080"; } } -.glyphicon-plus-sign { &:before { content: "\e081"; } } -.glyphicon-minus-sign { &:before { content: "\e082"; } } -.glyphicon-remove-sign { &:before { content: "\e083"; } } -.glyphicon-ok-sign { &:before { content: "\e084"; } } -.glyphicon-question-sign { &:before { content: "\e085"; } } -.glyphicon-info-sign { &:before { content: "\e086"; } } -.glyphicon-screenshot { &:before { content: "\e087"; } } -.glyphicon-remove-circle { &:before { content: "\e088"; } } -.glyphicon-ok-circle { &:before { content: "\e089"; } } -.glyphicon-ban-circle { &:before { content: "\e090"; } } -.glyphicon-arrow-left { &:before { content: "\e091"; } } -.glyphicon-arrow-right { &:before { content: "\e092"; } } -.glyphicon-arrow-up { &:before { content: "\e093"; } } -.glyphicon-arrow-down { &:before { content: "\e094"; } } -.glyphicon-share-alt { &:before { content: "\e095"; } } -.glyphicon-resize-full { &:before { content: "\e096"; } } -.glyphicon-resize-small { &:before { content: "\e097"; } } -.glyphicon-exclamation-sign { &:before { content: "\e101"; } } -.glyphicon-gift { &:before { content: "\e102"; } } -.glyphicon-leaf { &:before { content: "\e103"; } } -.glyphicon-fire { &:before { content: "\e104"; } } -.glyphicon-eye-open { &:before { content: "\e105"; } } -.glyphicon-eye-close { &:before { content: "\e106"; } } -.glyphicon-warning-sign { &:before { content: "\e107"; } } -.glyphicon-plane { &:before { content: "\e108"; } } -.glyphicon-calendar { &:before { content: "\e109"; } } -.glyphicon-random { &:before { content: "\e110"; } } -.glyphicon-comment { &:before { content: "\e111"; } } -.glyphicon-magnet { &:before { content: "\e112"; } } -.glyphicon-chevron-up { &:before { content: "\e113"; } } -.glyphicon-chevron-down { &:before { content: "\e114"; } } -.glyphicon-retweet { &:before { content: "\e115"; } } -.glyphicon-shopping-cart { &:before { content: "\e116"; } } -.glyphicon-folder-close { &:before { content: "\e117"; } } -.glyphicon-folder-open { &:before { content: "\e118"; } } -.glyphicon-resize-vertical { &:before { content: "\e119"; } } -.glyphicon-resize-horizontal { &:before { content: "\e120"; } } -.glyphicon-hdd { &:before { content: "\e121"; } } -.glyphicon-bullhorn { &:before { content: "\e122"; } } -.glyphicon-bell { &:before { content: "\e123"; } } -.glyphicon-certificate { &:before { content: "\e124"; } } -.glyphicon-thumbs-up { &:before { content: "\e125"; } } -.glyphicon-thumbs-down { &:before { content: "\e126"; } } -.glyphicon-hand-right { &:before { content: "\e127"; } } -.glyphicon-hand-left { &:before { content: "\e128"; } } -.glyphicon-hand-up { &:before { content: "\e129"; } } -.glyphicon-hand-down { &:before { content: "\e130"; } } -.glyphicon-circle-arrow-right { &:before { content: "\e131"; } } -.glyphicon-circle-arrow-left { &:before { content: "\e132"; } } -.glyphicon-circle-arrow-up { &:before { content: "\e133"; } } -.glyphicon-circle-arrow-down { &:before { content: "\e134"; } } -.glyphicon-globe { &:before { content: "\e135"; } } -.glyphicon-wrench { &:before { content: "\e136"; } } -.glyphicon-tasks { &:before { content: "\e137"; } } -.glyphicon-filter { &:before { content: "\e138"; } } -.glyphicon-briefcase { &:before { content: "\e139"; } } -.glyphicon-fullscreen { &:before { content: "\e140"; } } -.glyphicon-dashboard { &:before { content: "\e141"; } } -.glyphicon-paperclip { &:before { content: "\e142"; } } -.glyphicon-heart-empty { &:before { content: "\e143"; } } -.glyphicon-link { &:before { content: "\e144"; } } -.glyphicon-phone { &:before { content: "\e145"; } } -.glyphicon-pushpin { &:before { content: "\e146"; } } -.glyphicon-usd { &:before { content: "\e148"; } } -.glyphicon-gbp { &:before { content: "\e149"; } } -.glyphicon-sort { &:before { content: "\e150"; } } -.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } } -.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } } -.glyphicon-sort-by-order { &:before { content: "\e153"; } } -.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } } -.glyphicon-sort-by-attributes { &:before { content: "\e155"; } } -.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } } -.glyphicon-unchecked { &:before { content: "\e157"; } } -.glyphicon-expand { &:before { content: "\e158"; } } -.glyphicon-collapse-down { &:before { content: "\e159"; } } -.glyphicon-collapse-up { &:before { content: "\e160"; } } -.glyphicon-log-in { &:before { content: "\e161"; } } -.glyphicon-flash { &:before { content: "\e162"; } } -.glyphicon-log-out { &:before { content: "\e163"; } } -.glyphicon-new-window { &:before { content: "\e164"; } } -.glyphicon-record { &:before { content: "\e165"; } } -.glyphicon-save { &:before { content: "\e166"; } } -.glyphicon-open { &:before { content: "\e167"; } } -.glyphicon-saved { &:before { content: "\e168"; } } -.glyphicon-import { &:before { content: "\e169"; } } -.glyphicon-export { &:before { content: "\e170"; } } -.glyphicon-send { &:before { content: "\e171"; } } -.glyphicon-floppy-disk { &:before { content: "\e172"; } } -.glyphicon-floppy-saved { &:before { content: "\e173"; } } -.glyphicon-floppy-remove { &:before { content: "\e174"; } } -.glyphicon-floppy-save { &:before { content: "\e175"; } } -.glyphicon-floppy-open { &:before { content: "\e176"; } } -.glyphicon-credit-card { &:before { content: "\e177"; } } -.glyphicon-transfer { &:before { content: "\e178"; } } -.glyphicon-cutlery { &:before { content: "\e179"; } } -.glyphicon-header { &:before { content: "\e180"; } } -.glyphicon-compressed { &:before { content: "\e181"; } } -.glyphicon-earphone { &:before { content: "\e182"; } } -.glyphicon-phone-alt { &:before { content: "\e183"; } } -.glyphicon-tower { &:before { content: "\e184"; } } -.glyphicon-stats { &:before { content: "\e185"; } } -.glyphicon-sd-video { &:before { content: "\e186"; } } -.glyphicon-hd-video { &:before { content: "\e187"; } } -.glyphicon-subtitles { &:before { content: "\e188"; } } -.glyphicon-sound-stereo { &:before { content: "\e189"; } } -.glyphicon-sound-dolby { &:before { content: "\e190"; } } -.glyphicon-sound-5-1 { &:before { content: "\e191"; } } -.glyphicon-sound-6-1 { &:before { content: "\e192"; } } -.glyphicon-sound-7-1 { &:before { content: "\e193"; } } -.glyphicon-copyright-mark { &:before { content: "\e194"; } } -.glyphicon-registration-mark { &:before { content: "\e195"; } } -.glyphicon-cloud-download { &:before { content: "\e197"; } } -.glyphicon-cloud-upload { &:before { content: "\e198"; } } -.glyphicon-tree-conifer { &:before { content: "\e199"; } } -.glyphicon-tree-deciduous { &:before { content: "\e200"; } } diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss deleted file mode 100644 index f71f8b9..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_grid.scss +++ /dev/null @@ -1,84 +0,0 @@ -// -// Grid system -// -------------------------------------------------- - - -// Container widths -// -// Set the container width, and override it for fixed navbars in media queries. - -.container { - @include container-fixed(); - - @media (min-width: $screen-sm-min) { - width: $container-sm; - } - @media (min-width: $screen-md-min) { - width: $container-md; - } - @media (min-width: $screen-lg-min) { - width: $container-lg; - } -} - - -// Fluid container -// -// Utilizes the mixin meant for fixed width containers, but without any defined -// width for fluid, full width layouts. - -.container-fluid { - @include container-fixed(); -} - - -// Row -// -// Rows contain and clear the floats of your columns. - -.row { - @include make-row(); -} - - -// Columns -// -// Common styles for small and large grid columns - -@include make-grid-columns(); - - -// Extra small grid -// -// Columns, offsets, pushes, and pulls for extra small devices like -// smartphones. - -@include make-grid(xs); - - -// Small grid -// -// Columns, offsets, pushes, and pulls for the small device range, from phones -// to tablets. - -@media (min-width: $screen-sm-min) { - @include make-grid(sm); -} - - -// Medium grid -// -// Columns, offsets, pushes, and pulls for the desktop device range. - -@media (min-width: $screen-md-min) { - @include make-grid(md); -} - - -// Large grid -// -// Columns, offsets, pushes, and pulls for the large desktop device range. - -@media (min-width: $screen-lg-min) { - @include make-grid(lg); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss deleted file mode 100644 index 6c26c1d..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_input-groups.scss +++ /dev/null @@ -1,162 +0,0 @@ -// -// Input groups -// -------------------------------------------------- - -// Base styles -// ------------------------- -.input-group { - position: relative; // For dropdowns - display: table; - border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table - - // Undo padding and float of grid classes - &[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; - } - - .form-control { - // Ensure that the input is always above the *appended* addon button for - // proper border colors. - position: relative; - z-index: 2; - - // IE9 fubars the placeholder attribute in text inputs and the arrows on - // select elements in input groups. To fix it, we float the input. Details: - // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 - float: left; - - width: 100%; - margin-bottom: 0; - } -} - -// Sizing options -// -// Remix the default form control sizing classes into new ones for easier -// manipulation. - -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { @extend .input-lg; } -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { @extend .input-sm; } - - -// Display as table-cell -// ------------------------- -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; - - &:not(:first-child):not(:last-child) { - border-radius: 0; - } -} -// Addon and addon wrapper for buttons -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; // Match the inputs -} - -// Text input groups -// ------------------------- -.input-group-addon { - padding: $padding-base-vertical $padding-base-horizontal; - font-size: $font-size-base; - font-weight: normal; - line-height: 1; - color: $input-color; - text-align: center; - background-color: $input-group-addon-bg; - border: 1px solid $input-group-addon-border-color; - border-radius: $border-radius-base; - - // Sizing - &.input-sm { - padding: $padding-small-vertical $padding-small-horizontal; - font-size: $font-size-small; - border-radius: $border-radius-small; - } - &.input-lg { - padding: $padding-large-vertical $padding-large-horizontal; - font-size: $font-size-large; - border-radius: $border-radius-large; - } - - // Nuke default margins from checkboxes and radios to vertically center within. - input[type="radio"], - input[type="checkbox"] { - margin-top: 0; - } -} - -// Reset rounded corners -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - @include border-right-radius(0); -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - @include border-left-radius(0); -} -.input-group-addon:last-child { - border-left: 0; -} - -// Button input groups -// ------------------------- -.input-group-btn { - position: relative; - // Jankily prevent input button groups from wrapping with `white-space` and - // `font-size` in combination with `inline-block` on buttons. - font-size: 0; - white-space: nowrap; - - // Negative margin for spacing, position for bringing hovered/focused/actived - // element above the siblings. - > .btn { - position: relative; - + .btn { - margin-left: -1px; - } - // Bring the "active" button to the front - &:hover, - &:focus, - &:active { - z-index: 2; - } - } - - // Negative margin to only have a 1px border between the two - &:first-child { - > .btn, - > .btn-group { - margin-right: -1px; - } - } - &:last-child { - > .btn, - > .btn-group { - margin-left: -1px; - } - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss deleted file mode 100644 index 4e401e7..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_jumbotron.scss +++ /dev/null @@ -1,44 +0,0 @@ -// -// Jumbotron -// -------------------------------------------------- - - -.jumbotron { - padding: $jumbotron-padding; - margin-bottom: $jumbotron-padding; - color: $jumbotron-color; - background-color: $jumbotron-bg; - - h1, - .h1 { - color: $jumbotron-heading-color; - } - p { - margin-bottom: ($jumbotron-padding / 2); - font-size: $jumbotron-font-size; - font-weight: 200; - } - - .container & { - border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container - } - - .container { - max-width: 100%; - } - - @media screen and (min-width: $screen-sm-min) { - padding-top: ($jumbotron-padding * 1.6); - padding-bottom: ($jumbotron-padding * 1.6); - - .container & { - padding-left: ($jumbotron-padding * 2); - padding-right: ($jumbotron-padding * 2); - } - - h1, - .h1 { - font-size: ($font-size-base * 4.5); - } - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss deleted file mode 100644 index 8353eb1..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_labels.scss +++ /dev/null @@ -1,64 +0,0 @@ -// -// Labels -// -------------------------------------------------- - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: $label-color; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; - - // Add hover effects, but only for links - &[href] { - &:hover, - &:focus { - color: $label-link-hover-color; - text-decoration: none; - cursor: pointer; - } - } - - // Empty labels collapse automatically (not available in IE8) - &:empty { - display: none; - } - - // Quick fix for labels in buttons - .btn & { - position: relative; - top: -1px; - } -} - -// Colors -// Contextual variations (linked labels get darker on :hover) - -.label-default { - @include label-variant($label-default-bg); -} - -.label-primary { - @include label-variant($label-primary-bg); -} - -.label-success { - @include label-variant($label-success-bg); -} - -.label-info { - @include label-variant($label-info-bg); -} - -.label-warning { - @include label-variant($label-warning-bg); -} - -.label-danger { - @include label-variant($label-danger-bg); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss deleted file mode 100644 index b608991..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_list-group.scss +++ /dev/null @@ -1,110 +0,0 @@ -// -// List groups -// -------------------------------------------------- - - -// Base class -// -// Easily usable on
          ,
            , or
            . - -.list-group { - // No need to set list-style: none; since .list-group-item is block level - margin-bottom: 20px; - padding-left: 0; // reset padding because ul and ol -} - - -// Individual list items -// -// Use on `li`s or `div`s within the `.list-group` parent. - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - // Place the border on the list items and negative margin up for better styling - margin-bottom: -1px; - background-color: $list-group-bg; - border: 1px solid $list-group-border; - - // Round the first and last items - &:first-child { - @include border-top-radius($list-group-border-radius); - } - &:last-child { - margin-bottom: 0; - @include border-bottom-radius($list-group-border-radius); - } - - // Align badges within list items - > .badge { - float: right; - } - > .badge + .badge { - margin-right: 5px; - } -} - - -// Linked list items -// -// Use anchor elements instead of `li`s or `div`s to create linked list items. -// Includes an extra `.active` modifier class for showing selected items. - -a.list-group-item { - color: $list-group-link-color; - - .list-group-item-heading { - color: $list-group-link-heading-color; - } - - // Hover state - &:hover, - &:focus { - text-decoration: none; - background-color: $list-group-hover-bg; - } - - // Active class on item itself, not parent - &.active, - &.active:hover, - &.active:focus { - z-index: 2; // Place active items above their siblings for proper border styling - color: $list-group-active-color; - background-color: $list-group-active-bg; - border-color: $list-group-active-border; - - // Force color to inherit for custom content - .list-group-item-heading { - color: inherit; - } - .list-group-item-text { - color: $list-group-active-text-color; - } - } -} - - -// Contextual variants -// -// Add modifier classes to change text and background color on individual items. -// Organizationally, this must come after the `:hover` states. - -@include list-group-item-variant(success, $state-success-bg, $state-success-text); -@include list-group-item-variant(info, $state-info-bg, $state-info-text); -@include list-group-item-variant(warning, $state-warning-bg, $state-warning-text); -@include list-group-item-variant(danger, $state-danger-bg, $state-danger-text); - - -// Custom content options -// -// Extra classes for creating well-formatted content within `.list-group-item`s. - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss deleted file mode 100644 index 5ad22cd..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_media.scss +++ /dev/null @@ -1,56 +0,0 @@ -// Media objects -// Source: http://stubbornella.org/content/?p=497 -// -------------------------------------------------- - - -// Common styles -// ------------------------- - -// Clear the floats -.media, -.media-body { - overflow: hidden; - zoom: 1; -} - -// Proper spacing between instances of .media -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} - -// For images and videos, set to block -.media-object { - display: block; -} - -// Reset margins on headings for tighter default spacing -.media-heading { - margin: 0 0 5px; -} - - -// Media image alignment -// ------------------------- - -.media { - > .pull-left { - margin-right: 10px; - } - > .pull-right { - margin-left: 10px; - } -} - - -// Media list variation -// ------------------------- - -// Undo default ul/ol styles -.media-list { - padding-left: 0; - list-style: none; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_modals.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_modals.scss deleted file mode 100644 index 931092c..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_modals.scss +++ /dev/null @@ -1,139 +0,0 @@ -// -// Modals -// -------------------------------------------------- - -// .modal-open - body class for killing the scroll -// .modal - container to scroll within -// .modal-dialog - positioning shell for the actual modal -// .modal-content - actual modal w/ bg and corners and shit - -// Kill the scroll on the body -.modal-open { - overflow: hidden; -} - -// Container that the modal scrolls within -.modal { - display: none; - overflow: auto; - overflow-y: scroll; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: $zindex-modal; - -webkit-overflow-scrolling: touch; - - // Prevent Chrome on Windows from adding a focus outline. For details, see - // https://github.com/twbs/bootstrap/pull/10951. - outline: 0; - - // When fading in the modal, animate it to slide down - &.fade .modal-dialog { - @include translate(0, -25%); - @include transition-transform(0.3s ease-out); - } - &.in .modal-dialog { @include translate(0, 0)} -} - -// Shell div to position the modal with bottom padding -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} - -// Actual modal -.modal-content { - position: relative; - background-color: $modal-content-bg; - border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc) - border: 1px solid $modal-content-border-color; - border-radius: $border-radius-large; - @include box-shadow(0 3px 9px rgba(0,0,0,.5)); - background-clip: padding-box; - // Remove focus outline from opened modal - outline: none; -} - -// Modal background -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: $zindex-modal-background; - background-color: $modal-backdrop-bg; - // Fade for backdrop - &.fade { @include opacity(0); } - &.in { @include opacity($modal-backdrop-opacity); } -} - -// Modal header -// Top section of the modal w/ title and dismiss -.modal-header { - padding: $modal-title-padding; - border-bottom: 1px solid $modal-header-border-color; - min-height: ($modal-title-padding + $modal-title-line-height); -} -// Close icon -.modal-header .close { - margin-top: -2px; -} - -// Title text within header -.modal-title { - margin: 0; - line-height: $modal-title-line-height; -} - -// Modal body -// Where all modal content resides (sibling of .modal-header and .modal-footer) -.modal-body { - position: relative; - padding: $modal-inner-padding; -} - -// Footer (for actions) -.modal-footer { - margin-top: 15px; - padding: ($modal-inner-padding - 1) $modal-inner-padding $modal-inner-padding; - text-align: right; // right align buttons - border-top: 1px solid $modal-footer-border-color; - @include clearfix(); // clear it in case folks use .pull-* classes on buttons - - // Properly space out buttons - .btn + .btn { - margin-left: 5px; - margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs - } - // but override that for button groups - .btn-group .btn + .btn { - margin-left: -1px; - } - // and override it for block buttons as well - .btn-block + .btn-block { - margin-left: 0; - } -} - -// Scale up the modal -@media (min-width: $screen-sm-min) { - // Automatically set modal's width for larger viewports - .modal-dialog { - width: $modal-md; - margin: 30px auto; - } - .modal-content { - @include box-shadow(0 5px 15px rgba(0,0,0,.5)); - } - - // Modal sizes - .modal-sm { width: $modal-sm; } -} - -@media (min-width: $screen-md-min) { - .modal-lg { width: $modal-lg; } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navbar.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navbar.scss deleted file mode 100644 index 8ad9437..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navbar.scss +++ /dev/null @@ -1,620 +0,0 @@ -// -// Navbars -// -------------------------------------------------- - - -// Wrapper and base class -// -// Provide a static navbar from which we expand to create full-width, fixed, and -// other navbar variations. - -.navbar { - position: relative; - min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) - margin-bottom: $navbar-margin-bottom; - border: 1px solid transparent; - - // Prevent floats from breaking the navbar - @include clearfix(); - - @media (min-width: $grid-float-breakpoint) { - border-radius: $navbar-border-radius; - } -} - - -// Navbar heading -// -// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy -// styling of responsive aspects. - -.navbar-header { - @include clearfix(); - - @media (min-width: $grid-float-breakpoint) { - float: left; - } -} - - -// Navbar collapse (body) -// -// Group your navbar content into this for easy collapsing and expanding across -// various device sizes. By default, this content is collapsed when <768px, but -// will expand past that for a horizontal display. -// -// To start (on mobile devices) the navbar links, forms, and buttons are stacked -// vertically and include a `max-height` to overflow in case you have too much -// content for the user's viewport. - -.navbar-collapse { - max-height: $navbar-collapse-max-height; - overflow-x: visible; - padding-right: $navbar-padding-horizontal; - padding-left: $navbar-padding-horizontal; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255,255,255,.1); - @include clearfix(); - -webkit-overflow-scrolling: touch; - - &.in { - overflow-y: auto; - } - - @media (min-width: $grid-float-breakpoint) { - width: auto; - border-top: 0; - box-shadow: none; - - &.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; // Override default setting - overflow: visible !important; - } - - &.in { - overflow-y: visible; - } - - // Undo the collapse side padding for navbars with containers to ensure - // alignment of right-aligned contents. - .navbar-fixed-top &, - .navbar-static-top &, - .navbar-fixed-bottom & { - padding-left: 0; - padding-right: 0; - } - } -} - - -// Both navbar header and collapse -// -// When a container is present, change the behavior of the header and collapse. - -.container, -.container-fluid { - > .navbar-header, - > .navbar-collapse { - margin-right: -$navbar-padding-horizontal; - margin-left: -$navbar-padding-horizontal; - - @media (min-width: $grid-float-breakpoint) { - margin-right: 0; - margin-left: 0; - } - } -} - - -// -// Navbar alignment options -// -// Display the navbar across the entirety of the page or fixed it to the top or -// bottom of the page. - -// Static top (unfixed, but 100% wide) navbar -.navbar-static-top { - z-index: $zindex-navbar; - border-width: 0 0 1px; - - @media (min-width: $grid-float-breakpoint) { - border-radius: 0; - } -} - -// Fix the top/bottom navbars when screen real estate supports it -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: $zindex-navbar-fixed; - - // Undo the rounded corners - @media (min-width: $grid-float-breakpoint) { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; // override .navbar defaults - border-width: 1px 0 0; -} - - -// Brand/project name - -.navbar-brand { - float: left; - padding: $navbar-padding-vertical $navbar-padding-horizontal; - font-size: $font-size-large; - line-height: $line-height-computed; - height: $navbar-height; - - &:hover, - &:focus { - text-decoration: none; - } - - @media (min-width: $grid-float-breakpoint) { - .navbar > .container &, - .navbar > .container-fluid & { - margin-left: -$navbar-padding-horizontal; - } - } -} - - -// Navbar toggle -// -// Custom button for toggling the `.navbar-collapse`, powered by the collapse -// JavaScript plugin. - -.navbar-toggle { - position: relative; - float: right; - margin-right: $navbar-padding-horizontal; - padding: 9px 10px; - @include navbar-vertical-align(34px); - background-color: transparent; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid transparent; - border-radius: $border-radius-base; - - // We remove the `outline` here, but later compensate by attaching `:hover` - // styles to `:focus`. - &:focus { - outline: none; - } - - // Bars - .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; - } - .icon-bar + .icon-bar { - margin-top: 4px; - } - - @media (min-width: $grid-float-breakpoint) { - display: none; - } -} - - -// Navbar nav links -// -// Builds on top of the `.nav` components with its own modifier class to make -// the nav the full height of the horizontal nav (above 768px). - -.navbar-nav { - margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal); - - > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: $line-height-computed; - } - - @media (max-width: $grid-float-breakpoint-max) { - // Dropdowns get custom display when collapsed - .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - > li > a, - .dropdown-header { - padding: 5px 15px 5px 25px; - } - > li > a { - line-height: $line-height-computed; - &:hover, - &:focus { - background-image: none; - } - } - } - } - - // Uncollapse the nav - @media (min-width: $grid-float-breakpoint) { - float: left; - margin: 0; - - > li { - float: left; - > a { - padding-top: $navbar-padding-vertical; - padding-bottom: $navbar-padding-vertical; - } - } - - &.navbar-right:last-child { - margin-right: -$navbar-padding-horizontal; - } - } -} - - -// Component alignment -// -// Repurpose the pull utilities as their own navbar utilities to avoid specificity -// issues with parents and chaining. Only do this when the navbar is uncollapsed -// though so that navbar contents properly stack and align in mobile. - -@media (min-width: $grid-float-breakpoint) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } -} - - -// Navbar form -// -// Extension of the `.form-inline` with some extra flavor for optimum display in -// our navbars. - -.navbar-form { - margin-left: -$navbar-padding-horizontal; - margin-right: -$navbar-padding-horizontal; - padding: 10px $navbar-padding-horizontal; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - @include box-shadow($shadow); - - // Mixin behavior for optimum display - @extend .form-inline; - - .form-group { - @media (max-width: $grid-float-breakpoint-max) { - margin-bottom: 5px; - } - } - - // Vertically center in expanded, horizontal navbar - @include navbar-vertical-align($input-height-base); - - // Undo 100% width for pull classes - @media (min-width: $grid-float-breakpoint) { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - @include box-shadow(none); - - // Outdent the form if last child to line up with content down the page - &.navbar-right:last-child { - margin-right: -$navbar-padding-horizontal; - } - } -} - - -// Dropdown menus - -// Menu position and menu carets -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - @include border-top-radius(0); -} -// Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - @include border-bottom-radius(0); -} - - -// Buttons in navbars -// -// Vertically center a button within a navbar (when *not* in a form). - -.navbar-btn { - @include navbar-vertical-align($input-height-base); - - &.btn-sm { - @include navbar-vertical-align($input-height-small); - } - &.btn-xs { - @include navbar-vertical-align(22); - } -} - - -// Text in navbars -// -// Add a class to make any element properly align itself vertically within the navbars. - -.navbar-text { - @include navbar-vertical-align($line-height-computed); - - @media (min-width: $grid-float-breakpoint) { - float: left; - margin-left: $navbar-padding-horizontal; - margin-right: $navbar-padding-horizontal; - - // Outdent the form if last child to line up with content down the page - &.navbar-right:last-child { - margin-right: 0; - } - } -} - -// Alternate navbars -// -------------------------------------------------- - -// Default navbar -.navbar-default { - background-color: $navbar-default-bg; - border-color: $navbar-default-border; - - .navbar-brand { - color: $navbar-default-brand-color; - &:hover, - &:focus { - color: $navbar-default-brand-hover-color; - background-color: $navbar-default-brand-hover-bg; - } - } - - .navbar-text { - color: $navbar-default-color; - } - - .navbar-nav { - > li > a { - color: $navbar-default-link-color; - - &:hover, - &:focus { - color: $navbar-default-link-hover-color; - background-color: $navbar-default-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: $navbar-default-link-active-color; - background-color: $navbar-default-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: $navbar-default-link-disabled-color; - background-color: $navbar-default-link-disabled-bg; - } - } - } - - .navbar-toggle { - border-color: $navbar-default-toggle-border-color; - &:hover, - &:focus { - background-color: $navbar-default-toggle-hover-bg; - } - .icon-bar { - background-color: $navbar-default-toggle-icon-bar-bg; - } - } - - .navbar-collapse, - .navbar-form { - border-color: $navbar-default-border; - } - - // Dropdown menu items - .navbar-nav { - // Remove background color from open dropdown - > .open > a { - &, - &:hover, - &:focus { - background-color: $navbar-default-link-active-bg; - color: $navbar-default-link-active-color; - } - } - - @media (max-width: $grid-float-breakpoint-max) { - // Dropdowns get custom display when collapsed - .open .dropdown-menu { - > li > a { - color: $navbar-default-link-color; - &:hover, - &:focus { - color: $navbar-default-link-hover-color; - background-color: $navbar-default-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: $navbar-default-link-active-color; - background-color: $navbar-default-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: $navbar-default-link-disabled-color; - background-color: $navbar-default-link-disabled-bg; - } - } - } - } - } - - - // Links in navbars - // - // Add a class to ensure links outside the navbar nav are colored correctly. - - .navbar-link { - color: $navbar-default-link-color; - &:hover { - color: $navbar-default-link-hover-color; - } - } - -} - -// Inverse navbar - -.navbar-inverse { - background-color: $navbar-inverse-bg; - border-color: $navbar-inverse-border; - - .navbar-brand { - color: $navbar-inverse-brand-color; - &:hover, - &:focus { - color: $navbar-inverse-brand-hover-color; - background-color: $navbar-inverse-brand-hover-bg; - } - } - - .navbar-text { - color: $navbar-inverse-color; - } - - .navbar-nav { - > li > a { - color: $navbar-inverse-link-color; - - &:hover, - &:focus { - color: $navbar-inverse-link-hover-color; - background-color: $navbar-inverse-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: $navbar-inverse-link-active-color; - background-color: $navbar-inverse-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: $navbar-inverse-link-disabled-color; - background-color: $navbar-inverse-link-disabled-bg; - } - } - } - - // Darken the responsive nav toggle - .navbar-toggle { - border-color: $navbar-inverse-toggle-border-color; - &:hover, - &:focus { - background-color: $navbar-inverse-toggle-hover-bg; - } - .icon-bar { - background-color: $navbar-inverse-toggle-icon-bar-bg; - } - } - - .navbar-collapse, - .navbar-form { - border-color: darken($navbar-inverse-bg, 7%); - } - - // Dropdowns - .navbar-nav { - > .open > a { - &, - &:hover, - &:focus { - background-color: $navbar-inverse-link-active-bg; - color: $navbar-inverse-link-active-color; - } - } - - @media (max-width: $grid-float-breakpoint-max) { - // Dropdowns get custom display - .open .dropdown-menu { - > .dropdown-header { - border-color: $navbar-inverse-border; - } - .divider { - background-color: $navbar-inverse-border; - } - > li > a { - color: $navbar-inverse-link-color; - &:hover, - &:focus { - color: $navbar-inverse-link-hover-color; - background-color: $navbar-inverse-link-hover-bg; - } - } - > .active > a { - &, - &:hover, - &:focus { - color: $navbar-inverse-link-active-color; - background-color: $navbar-inverse-link-active-bg; - } - } - > .disabled > a { - &, - &:hover, - &:focus { - color: $navbar-inverse-link-disabled-color; - background-color: $navbar-inverse-link-disabled-bg; - } - } - } - } - } - - .navbar-link { - color: $navbar-inverse-link-color; - &:hover { - color: $navbar-inverse-link-hover-color; - } - } - -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navs.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navs.scss deleted file mode 100644 index c690072..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_navs.scss +++ /dev/null @@ -1,242 +0,0 @@ -// -// Navs -// -------------------------------------------------- - - -// Base class -// -------------------------------------------------- - -.nav { - margin-bottom: 0; - padding-left: 0; // Override default ul/ol - list-style: none; - @include clearfix(); - - > li { - position: relative; - display: block; - - > a { - position: relative; - display: block; - padding: $nav-link-padding; - &:hover, - &:focus { - text-decoration: none; - background-color: $nav-link-hover-bg; - } - } - - // Disabled state sets text to gray and nukes hover/tab effects - &.disabled > a { - color: $nav-disabled-link-color; - - &:hover, - &:focus { - color: $nav-disabled-link-hover-color; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; - } - } - } - - // Open dropdowns - .open > a { - &, - &:hover, - &:focus { - background-color: $nav-link-hover-bg; - border-color: $link-color; - } - } - - // Nav dividers (deprecated with v3.0.1) - // - // This should have been removed in v3 with the dropping of `.nav-list`, but - // we missed it. We don't currently support this anywhere, but in the interest - // of maintaining backward compatibility in case you use it, it's deprecated. - .nav-divider { - @include nav-divider(); - } - - // Prevent IE8 from misplacing imgs - // - // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 - > li > a > img { - max-width: none; - } -} - - -// Tabs -// ------------------------- - -// Give the tabs something to sit on -.nav-tabs { - border-bottom: 1px solid $nav-tabs-border-color; - > li { - float: left; - // Make the list-items overlay the bottom border - margin-bottom: -1px; - - // Actual tabs (as links) - > a { - margin-right: 2px; - line-height: $line-height-base; - border: 1px solid transparent; - border-radius: $border-radius-base $border-radius-base 0 0; - &:hover { - border-color: $nav-tabs-link-hover-border-color $nav-tabs-link-hover-border-color $nav-tabs-border-color; - } - } - - // Active state, and its :hover to override normal :hover - &.active > a { - &, - &:hover, - &:focus { - color: $nav-tabs-active-link-hover-color; - background-color: $nav-tabs-active-link-hover-bg; - border: 1px solid $nav-tabs-active-link-hover-border-color; - border-bottom-color: transparent; - cursor: default; - } - } - } - // pulling this in mainly for less shorthand - &.nav-justified { - @extend .nav-justified; - @extend .nav-tabs-justified; - } -} - - -// Pills -// ------------------------- -.nav-pills { - > li { - float: left; - - // Links rendered as pills - > a { - border-radius: $nav-pills-border-radius; - } - + li { - margin-left: 2px; - } - - // Active state - &.active > a { - &, - &:hover, - &:focus { - color: $nav-pills-active-link-hover-color; - background-color: $nav-pills-active-link-hover-bg; - } - } - } -} - - -// Stacked pills -.nav-stacked { - > li { - float: none; - + li { - margin-top: 2px; - margin-left: 0; // no need for this gap between nav items - } - } -} - - -// Nav variations -// -------------------------------------------------- - -// Justified nav links -// ------------------------- - -.nav-justified { - width: 100%; - - > li { - float: none; - > a { - text-align: center; - margin-bottom: 5px; - } - } - - > .dropdown .dropdown-menu { - top: auto; - left: auto; - } - - @media (min-width: $screen-sm-min) { - > li { - display: table-cell; - width: 1%; - > a { - margin-bottom: 0; - } - } - } -} - -// Move borders to anchors instead of bottom of list -// -// Mixin for adding on top the shared `.nav-justified` styles for our tabs -.nav-tabs-justified { - border-bottom: 0; - - > li > a { - // Override margin from .nav-tabs - margin-right: 0; - border-radius: $border-radius-base; - } - - > .active > a, - > .active > a:hover, - > .active > a:focus { - border: 1px solid $nav-tabs-justified-link-border-color; - } - - @media (min-width: $screen-sm-min) { - > li > a { - border-bottom: 1px solid $nav-tabs-justified-link-border-color; - border-radius: $border-radius-base $border-radius-base 0 0; - } - > .active > a, - > .active > a:hover, - > .active > a:focus { - border-bottom-color: $nav-tabs-justified-active-link-border-color; - } - } -} - - -// Tabbable tabs -// ------------------------- - -// Hide tabbable panes to start, show them when `.active` -.tab-content { - > .tab-pane { - display: none; - } - > .active { - display: block; - } -} - - -// Dropdowns -// ------------------------- - -// Specific dropdowns -.nav-tabs .dropdown-menu { - // make dropdown border overlap tab border - margin-top: -1px; - // Remove the top rounded corners here since there is a hard edge above the menu - @include border-top-radius(0); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_normalize.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_normalize.scss deleted file mode 100644 index 024e257..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_normalize.scss +++ /dev/null @@ -1,423 +0,0 @@ -/*! normalize.css v3.0.0 | MIT License | git.io/normalize */ - -// -// 1. Set default font family to sans-serif. -// 2. Prevent iOS text size adjust after orientation change, without disabling -// user zoom. -// - -html { - font-family: sans-serif; // 1 - -ms-text-size-adjust: 100%; // 2 - -webkit-text-size-adjust: 100%; // 2 -} - -// -// Remove default margin. -// - -body { - margin: 0; -} - -// HTML5 display definitions -// ========================================================================== - -// -// Correct `block` display not defined in IE 8/9. -// - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -// -// 1. Correct `inline-block` display not defined in IE 8/9. -// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. -// - -audio, -canvas, -progress, -video { - display: inline-block; // 1 - vertical-align: baseline; // 2 -} - -// -// Prevent modern browsers from displaying `audio` without controls. -// Remove excess height in iOS 5 devices. -// - -audio:not([controls]) { - display: none; - height: 0; -} - -// -// Address `[hidden]` styling not present in IE 8/9. -// Hide the `template` element in IE, Safari, and Firefox < 22. -// - -[hidden], -template { - display: none; -} - -// Links -// ========================================================================== - -// -// Remove the gray background color from active links in IE 10. -// - -a { - background: transparent; -} - -// -// Improve readability when focused and also mouse hovered in all browsers. -// - -a:active, -a:hover { - outline: 0; -} - -// Text-level semantics -// ========================================================================== - -// -// Address styling not present in IE 8/9, Safari 5, and Chrome. -// - -abbr[title] { - border-bottom: 1px dotted; -} - -// -// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. -// - -b, -strong { - font-weight: bold; -} - -// -// Address styling not present in Safari 5 and Chrome. -// - -dfn { - font-style: italic; -} - -// -// Address variable `h1` font-size and margin within `section` and `article` -// contexts in Firefox 4+, Safari 5, and Chrome. -// - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -// -// Address styling not present in IE 8/9. -// - -mark { - background: #ff0; - color: #000; -} - -// -// Address inconsistent and variable font size in all browsers. -// - -small { - font-size: 80%; -} - -// -// Prevent `sub` and `sup` affecting `line-height` in all browsers. -// - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -// Embedded content -// ========================================================================== - -// -// Remove border when inside `a` element in IE 8/9. -// - -img { - border: 0; -} - -// -// Correct overflow displayed oddly in IE 9. -// - -svg:not(:root) { - overflow: hidden; -} - -// Grouping content -// ========================================================================== - -// -// Address margin not present in IE 8/9 and Safari 5. -// - -figure { - margin: 1em 40px; -} - -// -// Address differences between Firefox and other browsers. -// - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -// -// Contain overflow in all browsers. -// - -pre { - overflow: auto; -} - -// -// Address odd `em`-unit font size rendering in all browsers. -// - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -// Forms -// ========================================================================== - -// -// Known limitation: by default, Chrome and Safari on OS X allow very limited -// styling of `select`, unless a `border` property is set. -// - -// -// 1. Correct color not being inherited. -// Known issue: affects color of disabled elements. -// 2. Correct font properties not being inherited. -// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. -// - -button, -input, -optgroup, -select, -textarea { - color: inherit; // 1 - font: inherit; // 2 - margin: 0; // 3 -} - -// -// Address `overflow` set to `hidden` in IE 8/9/10. -// - -button { - overflow: visible; -} - -// -// Address inconsistent `text-transform` inheritance for `button` and `select`. -// All other form control elements do not inherit `text-transform` values. -// Correct `button` style inheritance in Firefox, IE 8+, and Opera -// Correct `select` style inheritance in Firefox. -// - -button, -select { - text-transform: none; -} - -// -// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` -// and `video` controls. -// 2. Correct inability to style clickable `input` types in iOS. -// 3. Improve usability and consistency of cursor style between image-type -// `input` and others. -// - -button, -html input[type="button"], // 1 -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; // 2 - cursor: pointer; // 3 -} - -// -// Re-set default cursor for disabled elements. -// - -button[disabled], -html input[disabled] { - cursor: default; -} - -// -// Remove inner padding and border in Firefox 4+. -// - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -// -// Address Firefox 4+ setting `line-height` on `input` using `!important` in -// the UA stylesheet. -// - -input { - line-height: normal; -} - -// -// It's recommended that you don't attempt to style these elements. -// Firefox's implementation doesn't respect box-sizing, padding, or width. -// -// 1. Address box sizing set to `content-box` in IE 8/9/10. -// 2. Remove excess padding in IE 8/9/10. -// - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; // 1 - padding: 0; // 2 -} - -// -// Fix the cursor style for Chrome's increment/decrement buttons. For certain -// `font-size` values of the `input`, it causes the cursor style of the -// decrement button to change from `default` to `text`. -// - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -// -// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. -// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome -// (include `-moz` to future-proof). -// - -input[type="search"] { - -webkit-appearance: textfield; // 1 - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; // 2 - box-sizing: content-box; -} - -// -// Remove inner padding and search cancel button in Safari and Chrome on OS X. -// Safari (but not Chrome) clips the cancel button when the search input has -// padding (and `textfield` appearance). -// - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -// -// Define consistent border, margin, and padding. -// - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -// -// 1. Correct `color` not being inherited in IE 8/9. -// 2. Remove padding so people aren't caught out if they zero out fieldsets. -// - -legend { - border: 0; // 1 - padding: 0; // 2 -} - -// -// Remove default vertical scrollbar in IE 8/9. -// - -textarea { - overflow: auto; -} - -// -// Don't inherit the `font-weight` (applied by a rule above). -// NOTE: the default cannot safely be changed in Chrome and Safari on OS X. -// - -optgroup { - font-weight: bold; -} - -// Tables -// ========================================================================== - -// -// Remove most spacing between table cells. -// - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pager.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pager.scss deleted file mode 100644 index 6531fe6..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pager.scss +++ /dev/null @@ -1,55 +0,0 @@ -// -// Pager pagination -// -------------------------------------------------- - - -.pager { - padding-left: 0; - margin: $line-height-computed 0; - list-style: none; - text-align: center; - @include clearfix(); - li { - display: inline; - > a, - > span { - display: inline-block; - padding: 5px 14px; - background-color: $pager-bg; - border: 1px solid $pager-border; - border-radius: $pager-border-radius; - } - - > a:hover, - > a:focus { - text-decoration: none; - background-color: $pager-hover-bg; - } - } - - .next { - > a, - > span { - float: right; - } - } - - .previous { - > a, - > span { - float: left; - } - } - - .disabled { - > a, - > a:hover, - > a:focus, - > span { - color: $pager-disabled-color; - background-color: $pager-bg; - cursor: not-allowed; - } - } - -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pagination.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pagination.scss deleted file mode 100644 index 7b70c88..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_pagination.scss +++ /dev/null @@ -1,79 +0,0 @@ -// -// Pagination (multiple pages) -// -------------------------------------------------- -.pagination { - display: inline-block; - padding-left: 0; - margin: $line-height-computed/2 0; - // border-radius: $border-radius-base; - - > li { - display: inline; // Remove list-style and block-level defaults - > a { - position: relative; - float: left; // Collapse white-space - padding: $padding-base-vertical $padding-base-horizontal; - line-height: $line-height-base; - text-decoration: none; - color: $pagination-color; - background-color: $pagination-bg; - border: 1px solid $pagination-border; - margin: 0 0.5em; - } - &:first-child { - > a { - margin-left: 0; - } - } - } - - > li > a, - > li > span { - &:hover, - &:focus { - color: $pagination-hover-color; - background-color: $pagination-hover-bg; - border-color: $pagination-hover-border; - } - } - - > .active > a, - > .active > span { - &, - &:hover, - &:focus { - z-index: 2; - color: $pagination-active-color; - background-color: $pagination-active-bg; - border-color: $pagination-active-border; - cursor: default; - } - } - - > .disabled { - > span, - > span:hover, - > span:focus, - > a, - > a:hover, - > a:focus { - color: $pagination-disabled-color; - background-color: $pagination-disabled-bg; - border-color: $pagination-disabled-border; - cursor: not-allowed; - } - } -} - -// Sizing -// -------------------------------------------------- - -// Large -.pagination-lg { - @include pagination-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large); -} - -// Small -.pagination-sm { - @include pagination-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_panels.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_panels.scss deleted file mode 100644 index 0ab9925..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_panels.scss +++ /dev/null @@ -1,241 +0,0 @@ -// -// Panels -// -------------------------------------------------- - - -// Base class -.panel { - margin-bottom: $line-height-computed; - background-color: $panel-bg; - border: 1px solid transparent; - border-radius: $panel-border-radius; - @include box-shadow(0 1px 1px rgba(0,0,0,.05)); -} - -// Panel contents -.panel-body { - padding: $panel-body-padding; - @include clearfix(); -} - -// Optional heading -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - @include border-top-radius(($panel-border-radius - 1)); - - > .dropdown .dropdown-toggle { - color: inherit; - } -} - -// Within heading, strip any `h*` tag of its default margins for spacing. -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: ceil(($font-size-base * 1.125)); - color: inherit; - - > a { - color: inherit; - } -} - -// Optional footer (stays gray in every modifier class) -.panel-footer { - padding: 10px 15px; - background-color: $panel-footer-bg; - border-top: 1px solid $panel-inner-border; - @include border-bottom-radius(($panel-border-radius - 1)); -} - - -// List groups in panels -// -// By default, space out list group content from panel headings to account for -// any kind of custom content between the two. - -.panel { - > .list-group { - margin-bottom: 0; - - .list-group-item { - border-width: 1px 0; - border-radius: 0; - } - - // Add border top radius for first one - &:first-child { - .list-group-item:first-child { - border-top: 0; - @include border-top-radius(($panel-border-radius - 1)); - } - } - // Add border bottom radius for last one - &:last-child { - .list-group-item:last-child { - border-bottom: 0; - @include border-bottom-radius(($panel-border-radius - 1)); - } - } - } -} -// Collapse space between when there's no additional content. -.panel-heading + .list-group { - .list-group-item:first-child { - border-top-width: 0; - } -} - - -// Tables in panels -// -// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and -// watch it go full width. - -.panel { - > .table, - > .table-responsive > .table { - margin-bottom: 0; - } - // Add border top radius for first one - > .table:first-child, - > .table-responsive:first-child > .table:first-child { - @include border-top-radius(($panel-border-radius - 1)); - - > thead:first-child, - > tbody:first-child { - > tr:first-child { - td:first-child, - th:first-child { - border-top-left-radius: ($panel-border-radius - 1); - } - td:last-child, - th:last-child { - border-top-right-radius: ($panel-border-radius - 1); - } - } - } - } - // Add border bottom radius for last one - > .table:last-child, - > .table-responsive:last-child > .table:last-child { - @include border-bottom-radius(($panel-border-radius - 1)); - - > tbody:last-child, - > tfoot:last-child { - > tr:last-child { - td:first-child, - th:first-child { - border-bottom-left-radius: ($panel-border-radius - 1); - } - td:last-child, - th:last-child { - border-bottom-right-radius: ($panel-border-radius - 1); - } - } - } - } - > .panel-body + .table, - > .panel-body + .table-responsive { - border-top: 1px solid $table-border-color; - } - > .table > tbody:first-child > tr:first-child th, - > .table > tbody:first-child > tr:first-child td { - border-top: 0; - } - > .table-bordered, - > .table-responsive > .table-bordered { - border: 0; - > thead, - > tbody, - > tfoot { - > tr { - > th:first-child, - > td:first-child { - border-left: 0; - } - > th:last-child, - > td:last-child { - border-right: 0; - } - } - } - > thead, - > tbody { - > tr:first-child { - > td, - > th { - border-bottom: 0; - } - } - } - > tbody, - > tfoot { - > tr:last-child { - > td, - > th { - border-bottom: 0; - } - } - } - } - > .table-responsive { - border: 0; - margin-bottom: 0; - } -} - - -// Collapsable panels (aka, accordion) -// -// Wrap a series of panels in `.panel-group` to turn them into an accordion with -// the help of our collapse JavaScript plugin. - -.panel-group { - margin-bottom: $line-height-computed; - - // Tighten up margin so it's only between panels - .panel { - margin-bottom: 0; - border-radius: $panel-border-radius; - overflow: hidden; // crop contents when collapsed - + .panel { - margin-top: 5px; - } - } - - .panel-heading { - border-bottom: 0; - + .panel-collapse .panel-body { - border-top: 1px solid $panel-inner-border; - } - } - .panel-footer { - border-top: 0; - + .panel-collapse .panel-body { - border-bottom: 1px solid $panel-inner-border; - } - } -} - - -// Contextual variations -.panel-default { - @include panel-variant($panel-default-border, $panel-default-text, $panel-default-heading-bg, $panel-default-border); -} -.panel-primary { - @include panel-variant($panel-primary-border, $panel-primary-text, $panel-primary-heading-bg, $panel-primary-border); -} -.panel-success { - @include panel-variant($panel-success-border, $panel-success-text, $panel-success-heading-bg, $panel-success-border); -} -.panel-info { - @include panel-variant($panel-info-border, $panel-info-text, $panel-info-heading-bg, $panel-info-border); -} -.panel-warning { - @include panel-variant($panel-warning-border, $panel-warning-text, $panel-warning-heading-bg, $panel-warning-border); -} -.panel-danger { - @include panel-variant($panel-danger-border, $panel-danger-text, $panel-danger-heading-bg, $panel-danger-border); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_popovers.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_popovers.scss deleted file mode 100644 index 6d6bed5..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_popovers.scss +++ /dev/null @@ -1,133 +0,0 @@ -// -// Popovers -// -------------------------------------------------- - - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: $zindex-popover; - display: none; - max-width: $popover-max-width; - padding: 1px; - text-align: left; // Reset given new insertion method - background-color: $popover-bg; - background-clip: padding-box; - border: 1px solid $popover-fallback-border-color; - border: 1px solid $popover-border-color; - border-radius: $border-radius-large; - @include box-shadow(0 5px 10px rgba(0,0,0,.2)); - - // Overrides for proper insertion - white-space: normal; - - // Offset the popover to account for the popover arrow - &.top { margin-top: -$popover-arrow-width; } - &.right { margin-left: $popover-arrow-width; } - &.bottom { margin-top: $popover-arrow-width; } - &.left { margin-left: -$popover-arrow-width; } -} - -.popover-title { - margin: 0; // reset heading margin - padding: 8px 14px; - font-size: $font-size-base; - font-weight: normal; - line-height: 18px; - background-color: $popover-title-bg; - border-bottom: 1px solid darken($popover-title-bg, 5%); - border-radius: 5px 5px 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -// Arrows -// -// .arrow is outer, .arrow:after is inner - -.popover > .arrow { - &, - &:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - } -} -.popover > .arrow { - border-width: $popover-arrow-outer-width; -} -.popover > .arrow:after { - border-width: $popover-arrow-width; - content: ""; -} - -.popover { - &.top > .arrow { - left: 50%; - margin-left: -$popover-arrow-outer-width; - border-bottom-width: 0; - border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback - border-top-color: $popover-arrow-outer-color; - bottom: -$popover-arrow-outer-width; - &:after { - content: " "; - bottom: 1px; - margin-left: -$popover-arrow-width; - border-bottom-width: 0; - border-top-color: $popover-arrow-color; - } - } - &.right > .arrow { - top: 50%; - left: -$popover-arrow-outer-width; - margin-top: -$popover-arrow-outer-width; - border-left-width: 0; - border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback - border-right-color: $popover-arrow-outer-color; - &:after { - content: " "; - left: 1px; - bottom: -$popover-arrow-width; - border-left-width: 0; - border-right-color: $popover-arrow-color; - } - } - &.bottom > .arrow { - left: 50%; - margin-left: -$popover-arrow-outer-width; - border-top-width: 0; - border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback - border-bottom-color: $popover-arrow-outer-color; - top: -$popover-arrow-outer-width; - &:after { - content: " "; - top: 1px; - margin-left: -$popover-arrow-width; - border-top-width: 0; - border-bottom-color: $popover-arrow-color; - } - } - - &.left > .arrow { - top: 50%; - right: -$popover-arrow-outer-width; - margin-top: -$popover-arrow-outer-width; - border-right-width: 0; - border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback - border-left-color: $popover-arrow-outer-color; - &:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: $popover-arrow-color; - bottom: -$popover-arrow-width; - } - } - -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_print.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_print.scss deleted file mode 100644 index 3655d03..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_print.scss +++ /dev/null @@ -1,101 +0,0 @@ -// -// Basic print styles -// -------------------------------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css - -@media print { - - * { - text-shadow: none !important; - color: #000 !important; // Black prints faster: h5bp.com/s - background: transparent !important; - box-shadow: none !important; - } - - a, - a:visited { - text-decoration: underline; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - // Don't show links for images, or javascript/internal links - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - - thead { - display: table-header-group; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } - - // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245 - // Once fixed, we can just straight up remove this. - select { - background: #fff !important; - } - - // Bootstrap components - .navbar { - display: none; - } - .table { - td, - th { - background-color: #fff !important; - } - } - .btn, - .dropup > .btn { - > .caret { - border-top-color: #000 !important; - } - } - .label { - border: 1px solid #000; - } - - .table { - border-collapse: collapse !important; - } - .table-bordered { - th, - td { - border: 1px solid #ddd !important; - } - } - -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_progress-bars.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_progress-bars.scss deleted file mode 100644 index 7302b72..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_progress-bars.scss +++ /dev/null @@ -1,80 +0,0 @@ -// -// Progress bars -// -------------------------------------------------- - - -// Bar animations -// ------------------------- - -// WebKit -@-webkit-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Spec and IE10+ -@keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - - - -// Bar itself -// ------------------------- - -// Outer container -.progress { - overflow: hidden; - height: $line-height-computed; - margin-bottom: $line-height-computed; - background-color: $progress-bg; - border-radius: $border-radius-base; - @include box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); -} - -// Bar of progress -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: $font-size-small; - line-height: $line-height-computed; - color: $progress-bar-color; - text-align: center; - background-color: $progress-bar-bg; - @include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); - @include transition(width .6s ease); -} - -// Striped bars -.progress-striped .progress-bar { - @include gradient-striped(); - background-size: 40px 40px; -} - -// Call animation for the active one -.progress.active .progress-bar { - @include animation(progress-bar-stripes 2s linear infinite); -} - - - -// Variations -// ------------------------- - -.progress-bar-success { - @include progress-bar-variant($progress-bar-success-bg); -} - -.progress-bar-info { - @include progress-bar-variant($progress-bar-info-bg); -} - -.progress-bar-warning { - @include progress-bar-variant($progress-bar-warning-bg); -} - -.progress-bar-danger { - @include progress-bar-variant($progress-bar-danger-bg); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_responsive-utilities.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_responsive-utilities.scss deleted file mode 100644 index cd9348c..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_responsive-utilities.scss +++ /dev/null @@ -1,74 +0,0 @@ -// -// Responsive: Utility classes -// -------------------------------------------------- - - -// IE10 in Windows (Phone) 8 -// -// Support for responsive views via media queries is kind of borked in IE10, for -// Surface/desktop in split view and for Windows Phone 8. This particular fix -// must be accompanied by a snippet of JavaScript to sniff the user agent and -// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at -// our Getting Started page for more information on this bug. -// -// For more information, see the following: -// -// Issue: https://github.com/twbs/bootstrap/issues/10497 -// Docs: http://getbootstrap.com/getting-started/#browsers -// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ - -@-ms-viewport { - width: device-width; -} - - -// Visibility utilities - -@include responsive-invisibility('.visible-xs, .visible-sm, .visible-md, .visible-lg'); - -@media (max-width: $screen-xs-max) { - @include responsive-visibility('.visible-xs'); -} - -@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { - @include responsive-visibility('.visible-sm'); -} - -@media (min-width: $screen-md-min) and (max-width: $screen-md-max) { - @include responsive-visibility('.visible-md'); -} - -@media (min-width: $screen-lg-min) { - @include responsive-visibility('.visible-lg'); -} - -@media (max-width: $screen-xs-max) { - @include responsive-invisibility('.hidden-xs'); -} - -@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { - @include responsive-invisibility('.hidden-sm'); -} - -@media (min-width: $screen-md-min) and (max-width: $screen-md-max) { - @include responsive-invisibility('.hidden-md'); -} - -@media (min-width: $screen-lg-min) { - @include responsive-invisibility('.hidden-lg'); -} - - -// Print utilities -// -// Media queries are placed on the inside to be mixin-friendly. - -@include responsive-invisibility('.visible-print'); - -@media print { - @include responsive-visibility('.visible-print'); -} - -@media print { - @include responsive-invisibility('.hidden-print'); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_scaffolding.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_scaffolding.scss deleted file mode 100644 index cf02029..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_scaffolding.scss +++ /dev/null @@ -1,134 +0,0 @@ -// -// Scaffolding -// -------------------------------------------------- - - -// Reset the box-sizing -// -// Heads up! This reset may cause conflicts with some third-party widgets. -// For recommendations on resolving such conflicts, see -// http://getbootstrap.com/getting-started/#third-box-sizing -* { - @include box-sizing(border-box); -} -*:before, -*:after { - @include box-sizing(border-box); -} - - -// Body reset - -html { - font-size: 62.5%; - -webkit-tap-highlight-color: rgba(0,0,0,0); -} - -body { - font-family: $font-family-base; - font-size: $font-size-base; - line-height: $line-height-base; - color: $text-color; - background-color: $body-bg; -} - -// Reset fonts for relevant elements -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - - -// Links - -a { - color: $link-color; - text-decoration: none; - - &:hover, - &:focus { - color: $link-hover-color; - text-decoration: underline; - } - - &:focus { - @include tab-focus(); - } -} - - -// Figures -// -// We reset this here because previously Normalize had no `figure` margins. This -// ensures we don't break anyone's use of the element. - -figure { - margin: 0; -} - - -// Images - -img { - vertical-align: middle; -} - -// Responsive images (ensure images don't scale beyond their parents) -.img-responsive { - @include img-responsive(); -} - -// Rounded corners -.img-rounded { - border-radius: $border-radius-large; -} - -// Image thumbnails -// -// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`. -.img-thumbnail { - padding: $thumbnail-padding; - line-height: $line-height-base; - background-color: $thumbnail-bg; - border: 1px solid $thumbnail-border; - border-radius: $thumbnail-border-radius; - @include transition(all .2s ease-in-out); - - // Keep them at most 100% wide - @include img-responsive(inline-block); -} - -// Perfect circle -.img-circle { - border-radius: 50%; // set radius in percents -} - - -// Horizontal rules - -hr { - margin-top: $line-height-computed; - margin-bottom: $line-height-computed; - border: 0; - border-top: 1px solid $hr-border; -} - - -// Only display content to screen readers -// -// See: http://a11yproject.com/posts/how-to-hide-content/ - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0,0,0,0); - border: 0; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tables.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tables.scss deleted file mode 100644 index 1ddfb7a..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tables.scss +++ /dev/null @@ -1,233 +0,0 @@ -// -// Tables -// -------------------------------------------------- - - -table { - max-width: 100%; - background-color: $table-bg; -} -th { - text-align: left; -} - - -// Baseline styles - -.table { - width: 100%; - margin-bottom: $line-height-computed; - // Cells - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - padding: $table-cell-padding; - line-height: $line-height-base; - vertical-align: top; - border-top: 1px solid $table-border-color; - } - } - } - // Bottom align for column headings - > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid $table-border-color; - } - // Remove top border from thead by default - > caption + thead, - > colgroup + thead, - > thead:first-child { - > tr:first-child { - > th, - > td { - border-top: 0; - } - } - } - // Account for multiple tbody instances - > tbody + tbody { - border-top: 2px solid $table-border-color; - } - - // Nesting - .table { - background-color: $body-bg; - } -} - - -// Condensed table w/ half padding - -.table-condensed { - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - padding: $table-condensed-cell-padding; - } - } - } -} - - -// Bordered version -// -// Add borders all around the table and between all the columns. - -.table-bordered { - border: 1px solid $table-border-color; - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - border: 1px solid $table-border-color; - } - } - } - > thead > tr { - > th, - > td { - border-bottom-width: 2px; - } - } -} - - -// Zebra-striping -// -// Default zebra-stripe styles (alternating gray and transparent backgrounds) - -.table-striped { - > tbody > tr:nth-child(odd) { - > td, - > th { - background-color: $table-bg-accent; - } - } -} - - -// Hover effect -// -// Placed here since it has to come after the potential zebra striping - -.table-hover { - > tbody > tr:hover { - > td, - > th { - background-color: $table-bg-hover; - } - } -} - - -// Table cell sizing -// -// Reset default table behavior - -table col[class*="col-"] { - position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) - float: none; - display: table-column; -} -table { - td, - th { - &[class*="col-"] { - position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623) - float: none; - display: table-cell; - } - } -} - - -// Table backgrounds -// -// Exact selectors below required to override `.table-striped` and prevent -// inheritance to nested tables. - -// Generate the contextual variants -@include table-row-variant('active', $table-bg-active); -@include table-row-variant('success', $state-success-bg); -@include table-row-variant('info', $state-info-bg); -@include table-row-variant('warning', $state-warning-bg); -@include table-row-variant('danger', $state-danger-bg); - - -// Responsive tables -// -// Wrap your tables in `.table-responsive` and we'll make them mobile friendly -// by enabling horizontal scrolling. Only applies <768px. Everything above that -// will display normally. - -@media (max-width: $screen-xs-max) { - .table-responsive { - width: 100%; - margin-bottom: ($line-height-computed * 0.75); - overflow-y: hidden; - overflow-x: scroll; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid $table-border-color; - -webkit-overflow-scrolling: touch; - - // Tighten up spacing - > .table { - margin-bottom: 0; - - // Ensure the content doesn't wrap - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - white-space: nowrap; - } - } - } - } - - // Special overrides for the bordered tables - > .table-bordered { - border: 0; - - // Nuke the appropriate borders so that the parent can handle them - > thead, - > tbody, - > tfoot { - > tr { - > th:first-child, - > td:first-child { - border-left: 0; - } - > th:last-child, - > td:last-child { - border-right: 0; - } - } - } - - // Only nuke the last row's bottom-border in `tbody` and `tfoot` since - // chances are there will be only one `tr` in a `thead` and that would - // remove the border altogether. - > tbody, - > tfoot { - > tr:last-child { - > th, - > td { - border-bottom: 0; - } - } - } - - } - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_theme.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_theme.scss deleted file mode 100644 index d8f7bc2..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_theme.scss +++ /dev/null @@ -1,247 +0,0 @@ - -// -// Load core variables and mixins -// -------------------------------------------------- - -@import "variables"; -@import "mixins"; - - - -// -// Buttons -// -------------------------------------------------- - -// Common styles -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - $shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); - @include box-shadow($shadow); - - // Reset the shadow - &:active, - &.active { - @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } -} - -// Mixin for generating new styles -@mixin btn-styles($btn-color: #555) { - @include gradient-vertical($start-color: $btn-color, $end-color: darken($btn-color, 12%)); - @include reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners - background-repeat: repeat-x; - border-color: darken($btn-color, 14%); - - &:hover, - &:focus { - background-color: darken($btn-color, 12%); - background-position: 0 -15px; - } - - &:active, - &.active { - background-color: darken($btn-color, 12%); - border-color: darken($btn-color, 14%); - } -} - -// Common styles -.btn { - // Remove the gradient for the pressed/active state - &:active, - &.active { - background-image: none; - } -} - -// Apply the mixin to the buttons -.btn-default { @include btn-styles($btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } -.btn-primary { @include btn-styles($btn-primary-bg); } -.btn-success { @include btn-styles($btn-success-bg); } -.btn-info { @include btn-styles($btn-info-bg); } -.btn-warning { @include btn-styles($btn-warning-bg); } -.btn-danger { @include btn-styles($btn-danger-bg); } - - - -// -// Images -// -------------------------------------------------- - -.thumbnail, -.img-thumbnail { - @include box-shadow(0 1px 2px rgba(0,0,0,.075)); -} - - - -// -// Dropdowns -// -------------------------------------------------- - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - @include gradient-vertical($start-color: $dropdown-link-hover-bg, $end-color: darken($dropdown-link-hover-bg, 5%)); - background-color: darken($dropdown-link-hover-bg, 5%); -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - @include gradient-vertical($start-color: $dropdown-link-active-bg, $end-color: darken($dropdown-link-active-bg, 5%)); - background-color: darken($dropdown-link-active-bg, 5%); -} - - - -// -// Navbar -// -------------------------------------------------- - -// Default navbar -.navbar-default { - @include gradient-vertical($start-color: lighten($navbar-default-bg, 10%), $end-color: $navbar-default-bg); - @include reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered - border-radius: $navbar-border-radius; - $shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); - @include box-shadow($shadow); - - .navbar-nav > .active > a { - @include gradient-vertical($start-color: darken($navbar-default-bg, 5%), $end-color: darken($navbar-default-bg, 2%)); - @include box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); - } -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255,255,255,.25); -} - -// Inverted navbar -.navbar-inverse { - @include gradient-vertical($start-color: lighten($navbar-inverse-bg, 10%), $end-color: $navbar-inverse-bg); - @include reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered - - .navbar-nav > .active > a { - @include gradient-vertical($start-color: $navbar-inverse-bg, $end-color: lighten($navbar-inverse-bg, 2.5%)); - @include box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); - } - - .navbar-brand, - .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - } -} - -// Undo rounded corners in static and fixed navbars -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} - - - -// -// Alerts -// -------------------------------------------------- - -// Common styles -.alert { - text-shadow: 0 1px 0 rgba(255,255,255,.2); - $shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); - @include box-shadow($shadow); -} - -// Mixin for generating new styles -@mixin alert-styles($color) { - @include gradient-vertical($start-color: $color, $end-color: darken($color, 7.5%)); - border-color: darken($color, 15%); -} - -// Apply the mixin to the alerts -.alert-success { @include alert-styles($alert-success-bg); } -.alert-info { @include alert-styles($alert-info-bg); } -.alert-warning { @include alert-styles($alert-warning-bg); } -.alert-danger { @include alert-styles($alert-danger-bg); } - - - -// -// Progress bars -// -------------------------------------------------- - -// Give the progress background some depth -.progress { - @include gradient-vertical($start-color: darken($progress-bg, 4%), $end-color: $progress-bg) -} - -// Mixin for generating new styles -@mixin progress-bar-styles($color) { - @include gradient-vertical($start-color: $color, $end-color: darken($color, 10%)); -} - -// Apply the mixin to the progress bars -.progress-bar { @include progress-bar-styles($progress-bar-bg); } -.progress-bar-success { @include progress-bar-styles($progress-bar-success-bg); } -.progress-bar-info { @include progress-bar-styles($progress-bar-info-bg); } -.progress-bar-warning { @include progress-bar-styles($progress-bar-warning-bg); } -.progress-bar-danger { @include progress-bar-styles($progress-bar-danger-bg); } - - - -// -// List groups -// -------------------------------------------------- - -.list-group { - border-radius: $border-radius-base; - @include box-shadow(0 1px 2px rgba(0,0,0,.075)); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 darken($list-group-active-bg, 10%); - @include gradient-vertical($start-color: $list-group-active-bg, $end-color: darken($list-group-active-bg, 7.5%)); - border-color: darken($list-group-active-border, 7.5%); -} - - - -// -// Panels -// -------------------------------------------------- - -// Common styles -.panel { - @include box-shadow(0 1px 2px rgba(0,0,0,.05)); -} - -// Mixin for generating new styles -@mixin panel-heading-styles($color) { - @include gradient-vertical($start-color: $color, $end-color: darken($color, 5%)); -} - -// Apply the mixin to the panel headings only -.panel-default > .panel-heading { @include panel-heading-styles($panel-default-heading-bg); } -.panel-primary > .panel-heading { @include panel-heading-styles($panel-primary-heading-bg); } -.panel-success > .panel-heading { @include panel-heading-styles($panel-success-heading-bg); } -.panel-info > .panel-heading { @include panel-heading-styles($panel-info-heading-bg); } -.panel-warning > .panel-heading { @include panel-heading-styles($panel-warning-heading-bg); } -.panel-danger > .panel-heading { @include panel-heading-styles($panel-danger-heading-bg); } - - - -// -// Wells -// -------------------------------------------------- - -.well { - @include gradient-vertical($start-color: darken($well-bg, 5%), $end-color: $well-bg); - border-color: darken($well-bg, 10%); - $shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); - @include box-shadow($shadow); -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_thumbnails.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_thumbnails.scss deleted file mode 100644 index 3d5ed86..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_thumbnails.scss +++ /dev/null @@ -1,38 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Mixin and adjust the regular image class -.thumbnail { - display: block; - padding: $thumbnail-padding; - margin-bottom: $line-height-computed; - line-height: $line-height-base; - background-color: $thumbnail-bg; - border: 1px solid $thumbnail-border; - border-radius: $thumbnail-border-radius; - @include transition(all .2s ease-in-out); - - > img, - a > img { - @include img-responsive(); - margin-left: auto; - margin-right: auto; - } - - // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active - - // Image captions - .caption { - padding: $thumbnail-caption-padding; - color: $thumbnail-caption-color; - } -} - -// Add a hover state for linked versions only -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: $link-color; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tooltip.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tooltip.scss deleted file mode 100644 index dec674c..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_tooltip.scss +++ /dev/null @@ -1,95 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: $zindex-tooltip; - display: block; - visibility: visible; - font-size: $font-size-small; - line-height: 1.4; - @include opacity(0); - - &.in { @include opacity($tooltip-opacity); } - &.top { margin-top: -3px; padding: $tooltip-arrow-width 0; } - &.right { margin-left: 3px; padding: 0 $tooltip-arrow-width; } - &.bottom { margin-top: 3px; padding: $tooltip-arrow-width 0; } - &.left { margin-left: -3px; padding: 0 $tooltip-arrow-width; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: $tooltip-max-width; - padding: 3px 8px; - color: $tooltip-color; - text-align: center; - text-decoration: none; - background-color: $tooltip-bg; - border-radius: $border-radius-base; -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -$tooltip-arrow-width; - border-width: $tooltip-arrow-width $tooltip-arrow-width 0; - border-top-color: $tooltip-arrow-color; - } - &.top-left .tooltip-arrow { - bottom: 0; - left: $tooltip-arrow-width; - border-width: $tooltip-arrow-width $tooltip-arrow-width 0; - border-top-color: $tooltip-arrow-color; - } - &.top-right .tooltip-arrow { - bottom: 0; - right: $tooltip-arrow-width; - border-width: $tooltip-arrow-width $tooltip-arrow-width 0; - border-top-color: $tooltip-arrow-color; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -$tooltip-arrow-width; - border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0; - border-right-color: $tooltip-arrow-color; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -$tooltip-arrow-width; - border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width; - border-left-color: $tooltip-arrow-color; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -$tooltip-arrow-width; - border-width: 0 $tooltip-arrow-width $tooltip-arrow-width; - border-bottom-color: $tooltip-arrow-color; - } - &.bottom-left .tooltip-arrow { - top: 0; - left: $tooltip-arrow-width; - border-width: 0 $tooltip-arrow-width $tooltip-arrow-width; - border-bottom-color: $tooltip-arrow-color; - } - &.bottom-right .tooltip-arrow { - top: 0; - right: $tooltip-arrow-width; - border-width: 0 $tooltip-arrow-width $tooltip-arrow-width; - border-bottom-color: $tooltip-arrow-color; - } -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_type.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_type.scss deleted file mode 100644 index 7fee043..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_type.scss +++ /dev/null @@ -1,284 +0,0 @@ -// -// Typography -// -------------------------------------------------- - - -// Headings -// ------------------------- - -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5, .h6 { - font-family: $headings-font-family; - font-weight: $headings-font-weight; - line-height: $headings-line-height; - color: $headings-color; - - small, - .small { - font-weight: normal; - line-height: 1; - color: $headings-small-color; - } -} - -h1, .h1, -h2, .h2, -h3, .h3 { - margin-top: $line-height-computed; - margin-bottom: ($line-height-computed / 2); - - small, - .small { - font-size: 65%; - } -} -h4, .h4, -h5, .h5, -h6, .h6 { - margin-top: ($line-height-computed / 2); - margin-bottom: ($line-height-computed / 2); - - small, - .small { - font-size: 75%; - } -} - -h1, .h1 { font-size: $font-size-h1; } -h2, .h2 { font-size: $font-size-h2; } -h3, .h3 { font-size: $font-size-h3; } -h4, .h4 { font-size: $font-size-h4; } -h5, .h5 { font-size: $font-size-h5; } -h6, .h6 { font-size: $font-size-h6; } - - -// Body text -// ------------------------- - -p { - margin: 0 0 ($line-height-computed / 2); -} - -.lead { - margin-bottom: $line-height-computed; - font-size: floor(($font-size-base * 1.15)); - font-weight: 200; - line-height: 1.4; - - @media (min-width: $screen-sm-min) { - font-size: ($font-size-base * 1.5); - } -} - - -// Emphasis & misc -// ------------------------- - -// Ex: 14px base font * 85% = about 12px -small, -.small { font-size: 85%; } - -// Undo browser default styling -cite { font-style: normal; } - -// Alignment -.text-left { text-align: left; } -.text-right { text-align: right; } -.text-center { text-align: center; } -.text-justify { text-align: justify; } - -// Contextual colors -.text-muted { - color: $text-muted; -} - -@include text-emphasis-variant('.text-primary', $brand-primary); - -@include text-emphasis-variant('.text-success', $state-success-text); - -@include text-emphasis-variant('.text-info', $state-info-text); - -@include text-emphasis-variant('.text-warning', $state-warning-text); - -@include text-emphasis-variant('.text-danger', $state-danger-text); - -// Contextual backgrounds -// For now we'll leave these alongside the text classes until v4 when we can -// safely shift things around (per SemVer rules). -.bg-primary { - // Given the contrast here, this is the only class to have its color inverted - // automatically. - color: #fff; -} -@include bg-variant('.bg-primary', $brand-primary); - -@include bg-variant('.bg-success', $state-success-bg); - -@include bg-variant('.bg-info', $state-info-bg); - -@include bg-variant('.bg-warning', $state-warning-bg); - -@include bg-variant('.bg-danger', $state-danger-bg); - - -// Page header -// ------------------------- - -.page-header { - padding-bottom: (($line-height-computed / 2) - 1); - margin: ($line-height-computed * 2) 0 $line-height-computed; - border-bottom: 1px solid $page-header-border-color; -} - - -// Lists -// -------------------------------------------------- - -// Unordered and Ordered lists -ul, -ol { - margin-top: 0; - margin-bottom: ($line-height-computed / 2); - ul, - ol { - margin-bottom: 0; - } -} - -// List options - -// Unstyled keeps list items block level, just removes default browser padding and list-style -.list-unstyled { - padding-left: 0; - list-style: none; -} - -// Inline turns list items into inline-block -.list-inline { - @extend .list-unstyled; - margin-left: -5px; - - > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; - } -} - -// Description Lists -dl { - margin-top: 0; // Remove browser default - margin-bottom: $line-height-computed; -} -dt, -dd { - line-height: $line-height-base; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; // Undo browser default -} - -// Horizontal description lists -// -// Defaults to being stacked without any of the below styles applied, until the -// grid breakpoint is reached (default of ~768px). - -@media (min-width: $grid-float-breakpoint) { - .dl-horizontal { - dt { - float: left; - width: ($component-offset-horizontal - 20); - clear: left; - text-align: right; - @include text-overflow(); - } - dd { - margin-left: $component-offset-horizontal; - @include clearfix(); // Clear the floated `dt` if an empty `dd` is present - } - } -} - -// MISC -// ---- - -// Abbreviations and acronyms -abbr[title], -// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257 -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted $abbr-border-color; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} - -// Blockquotes -blockquote { - padding: ($line-height-computed / 2) $line-height-computed; - margin: 0 0 $line-height-computed; - font-size: $blockquote-font-size; - border-left: 5px solid $blockquote-border-color; - - p, - ul, - ol { - &:last-child { - margin-bottom: 0; - } - } - - // Note: Deprecated small and .small as of v3.1.0 - // Context: https://github.com/twbs/bootstrap/issues/11660 - footer, - small, - .small { - display: block; - font-size: 80%; // back to default font-size - line-height: $line-height-base; - color: $blockquote-small-color; - - &:before { - content: '\2014 \00A0'; // em dash, nbsp - } - } -} - -// Opposite alignment of blockquote -// -// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0. -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid $blockquote-border-color; - border-left: 0; - text-align: right; - - // Account for citation - footer, - small, - .small { - &:before { content: ''; } - &:after { - content: '\00A0 \2014'; // nbsp, em dash - } - } -} - -// Quotes -blockquote:before, -blockquote:after { - content: ""; -} - -// Addresses -address { - margin-bottom: $line-height-computed; - font-style: normal; - line-height: $line-height-base; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_utilities.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_utilities.scss deleted file mode 100644 index 85cb62e..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_utilities.scss +++ /dev/null @@ -1,56 +0,0 @@ -// -// Utility classes -// -------------------------------------------------- - - -// Floats -// ------------------------- - -.clearfix { - @include clearfix(); -} -.center-block { - @include center-block(); -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} - - -// Toggling content -// ------------------------- - -// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - @include text-hide(); -} - - -// Hide from screenreaders and browsers -// -// Credit: HTML5 Boilerplate - -.hidden { - display: none !important; - visibility: hidden !important; -} - - -// For Affix plugin -// ------------------------- - -.affix { - position: fixed; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss deleted file mode 100644 index b865711..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/_wells.scss +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: $well-bg; - border: 1px solid $well-border; - border-radius: $border-radius-base; - @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-lg { - padding: 24px; - border-radius: $border-radius-large; -} -.well-sm { - padding: 9px; - border-radius: $border-radius-small; -} diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss b/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss deleted file mode 100644 index cb5147d..0000000 --- a/app/templates/orbit_bootstrap/assets/stylesheets/bootstrap/bootstrap.scss +++ /dev/null @@ -1,49 +0,0 @@ -// Core variables and mixins -@import "variables"; -@import "mixins"; - -// Reset -@import "normalize"; -@import "print"; - -// Core CSS -@import "scaffolding"; -@import "type"; -@import "code"; -@import "grid"; -@import "tables"; -@import "forms"; -@import "buttons"; - -// Components -@import "component-animations"; -@import "glyphicons"; -@import "dropdowns"; -@import "button-groups"; -@import "input-groups"; -@import "navs"; -@import "navbar"; -@import "breadcrumbs"; -@import "pagination"; -@import "pager"; -@import "labels"; -@import "badges"; -@import "jumbotron"; -@import "thumbnails"; -@import "alerts"; -@import "progress-bars"; -@import "media"; -@import "list-group"; -@import "panels"; -@import "wells"; -@import "close"; - -// Components w/ JavaScript -@import "modals"; -@import "tooltip"; -@import "popovers"; -@import "carousel"; - -// Utility classes -@import "utilities"; -@import "responsive-utilities"; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss index 1e6c724..3e6534b 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_global.scss @@ -1,5 +1,6 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; +@import "variables"; html { font-size: 100%; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_mixins.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_mixins.scss index 1322e93..65324cf 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_mixins.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_mixins.scss @@ -1,4 +1,5 @@ // Set Triangle +@import "variables"; @mixin arrow($direction, $width, $height, $color) { width: 0px; height: 0px; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss index e44933e..14900e1 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_orbitbar-override.scss @@ -1,6 +1,5 @@ @charset "utf-8"; -@import "../init"; - +@import "variables"; $theme-white: #fff; $orbit-bg-color: #333; $orbit-bg-hover-color: #0095CF; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss index 664ba7c..b1595ef 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_pagination.scss @@ -1,6 +1,5 @@ @charset "utf-8"; -@import "../init"; - +@import "variables"; .pagination { li { a { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss index a2e00e7..5bee26f 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/base/_unity.scss @@ -1,6 +1,5 @@ @charset "utf-8"; -@import "../init"; - +@import "variables"; // Title .unity-title { margin: 0.5em 0; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss index 46f5337..ba687b7 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/init.scss @@ -1,4 +1,4 @@ @import "bootstrap/mixins"; @import "bootstrap/variables"; @import "base/mixins"; -@import "base/variables"; \ No newline at end of file +@import "base/variables"; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/initial.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/initial.scss new file mode 100644 index 0000000..694cb99 --- /dev/null +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/initial.scss @@ -0,0 +1,6 @@ +@import url("http://fonts.googleapis.com/css?family=Droid+Sans:400,700"); +@import "bootstrap/mixins"; +@import "bootstrap/variables"; +@import "base/mixins"; +@import "base/variables"; +@import "base/unity"; \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss index 5822c17..73a3a3d 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/content.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; .layout-content { min-height: 600px; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss index 926e922..01324d0 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/footer.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; .layout-footer { padding: 2em 0; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss index d4329e1..8e022f4 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/header.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; .layout-header { position: relative; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss index 2c0fc17..26d2dac 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/layout/slide.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; .layout-slide { position: relative; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss index aae0d55..9bef0ac 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/ad_banner.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; // // Widget @@ -51,7 +51,7 @@ position: absolute; right: 1em; top: 1em; - z-index: 100; + z-index: 200; li { display: inline-block; @@ -140,7 +140,7 @@ position: absolute; right: 1em; bottom: 1em; - z-index: 100; + z-index: 200; li { display: inline-block; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss index 5999260..a5918d0 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/announcement.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; // // Widget diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss index 70975f2..6090cc8 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/archives.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; // // Widget // diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss index 9fa6c12..c37b142 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/faq.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; // Faqs MODULES .widget-faqs { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss index 173eafe..0719259 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/gallery.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; // Gallery MODULES .widget-gallery { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss index cc978b3..9d084b3 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/member.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; // Member index page .index-member { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss index 55beca3..ea4c4ec 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/menu.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; .modules-menu { font-family: $sub-font; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss index 34982e5..21cfaa3 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/personal_plugin.scss @@ -1,5 +1,4 @@ @charset "utf-8"; -@import "../init"; .plugin-show-table th{ text-align: right; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss index 6f840a4..9b55084 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/modules/web_resource.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; // Link MODULES .widget-link { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss index 7135a76..006f71d 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/template.scss @@ -1,6 +1,4 @@ // Base - -@import "base/unity"; @import "base/pagination"; @import "base/orbitbar-override"; @import "base/global"; diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss index 6807c17..cb80c3d 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/breadcrumb.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; .widget-breadcrumb { &.widget1 { diff --git a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss index 3fc08d7..95aeaa6 100644 --- a/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss +++ b/app/templates/orbit_bootstrap/assets/stylesheets/template/widget/sitemenu.scss @@ -1,5 +1,5 @@ @charset "utf-8"; -@import "../init"; +@import "../initial"; .sitemenu-wrap { padding: 10px 0; diff --git a/app/templates/orbit_bootstrap/home/footer.html.erb b/app/templates/orbit_bootstrap/home/footer.html.erb index 110eb8f..02ea45b 100644 --- a/app/templates/orbit_bootstrap/home/footer.html.erb +++ b/app/templates/orbit_bootstrap/home/footer.html.erb @@ -1,6 +1,6 @@
            \ No newline at end of file diff --git a/app/templates/orbit_bootstrap/home/index.html.erb b/app/templates/orbit_bootstrap/home/index.html.erb index 086ef7f..5146865 100644 --- a/app/templates/orbit_bootstrap/home/index.html.erb +++ b/app/templates/orbit_bootstrap/home/index.html.erb @@ -6,7 +6,7 @@ <%= render_orbit_bar %> <%= render_header %> -
            +
            diff --git a/app/templates/orbit_bootstrap/home/page.html.erb b/app/templates/orbit_bootstrap/home/page.html.erb index 3ebedc4..e12c1d8 100644 --- a/app/templates/orbit_bootstrap/home/page.html.erb +++ b/app/templates/orbit_bootstrap/home/page.html.erb @@ -6,18 +6,20 @@ <%= render_orbit_bar %> <%= render_header %> -
            +
            - + +
            -
            +
            <%= yield %>
            -
            +
            +
            <%= render_footer %> diff --git a/config/initializers/template.rb b/config/initializers/template.rb index f69d679..d396760 100644 --- a/config/initializers/template.rb +++ b/config/initializers/template.rb @@ -12,9 +12,9 @@ Dir.glob("#{Rails.root}/app/templates/#{template}").each do |path| Rails.application.config.assets.paths << "#{path}/widgets" end -Dir.glob("#{Rails.root}/app/templates/mobile/orbit_mobile").each do |path| - Rails.application.config.assets.paths << "#{path}/assets/stylesheets" - Rails.application.config.assets.paths << "#{path}/assets/javascripts" - Rails.application.config.assets.paths << "#{path}/assets/images" - Rails.application.config.assets.paths << "#{path}/assets/fonts" -end \ No newline at end of file +# Dir.glob("#{Rails.root}/app/templates/mobile/orbit_mobile").each do |path| +# Rails.application.config.assets.paths << "#{path}/assets/stylesheets" +# Rails.application.config.assets.paths << "#{path}/assets/javascripts" +# Rails.application.config.assets.paths << "#{path}/assets/images" +# Rails.application.config.assets.paths << "#{path}/assets/fonts" +# end \ No newline at end of file From b290d3653ff3558e9bd47330e1850c8833ff29c8 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 25 Mar 2015 15:46:11 +0800 Subject: [PATCH 04/10] groups commit --- Gemfile | 11 +- app/assets/stylesheets/group_page.css | 249 ++++++++++++++++++ app/controllers/admin/groups_controller.rb | 39 ++- app/models/group.rb | 6 +- app/models/group_post.rb | 14 + app/views/admin/groups/_group.html.erb | 17 +- ...oup_form.html.erb => _group_form.html.erb} | 0 app/views/admin/groups/_post.html.erb | 36 +++ app/views/admin/groups/_post_form.html.erb | 81 ++++++ app/views/admin/groups/newpost.html.erb | 5 + app/views/admin/groups/public_groups.html.erb | 15 ++ app/views/admin/groups/show.html.erb | 75 ++++++ app/views/admin/groups/showpost.html.erb | 1 + app/views/admin/members/_side_bar.html.erb | 26 +- app/views/layouts/member.html.erb | 8 +- config/routes.rb | 7 +- 16 files changed, 566 insertions(+), 24 deletions(-) create mode 100644 app/assets/stylesheets/group_page.css create mode 100644 app/models/group_post.rb rename app/views/admin/groups/{_create_group_form.html.erb => _group_form.html.erb} (100%) create mode 100644 app/views/admin/groups/_post.html.erb create mode 100644 app/views/admin/groups/_post_form.html.erb create mode 100644 app/views/admin/groups/newpost.html.erb create mode 100644 app/views/admin/groups/public_groups.html.erb create mode 100644 app/views/admin/groups/show.html.erb create mode 100644 app/views/admin/groups/showpost.html.erb diff --git a/Gemfile b/Gemfile index 4c5c99a..8acd07d 100644 --- a/Gemfile +++ b/Gemfile @@ -84,8 +84,11 @@ end #ask gem 'gotcha' -#desktop -gem 'angularjs-rails', '~> 1.2.20' -gem 'angular-ui-bootstrap-rails', '~> 0.11.0' -gem 'jquery_mousewheel_rails', '~> 3.1.11.3' +#caching +gem 'mongoid-observers' + +#desktop +# gem 'angularjs-rails', '~> 1.2.20' +# gem 'angular-ui-bootstrap-rails', '~> 0.11.0' +# gem 'jquery_mousewheel_rails', '~> 3.1.11.3' diff --git a/app/assets/stylesheets/group_page.css b/app/assets/stylesheets/group_page.css new file mode 100644 index 0000000..358927f --- /dev/null +++ b/app/assets/stylesheets/group_page.css @@ -0,0 +1,249 @@ +@charset "utf-8"; +body { + background: #f3f3f3; +} + +#main-wrap { + padding-top: 0; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + +.group-page {} + +.group-page-banner-image-wrap { + position: relative; + max-height: 280px; + overflow: hidden; +} + +.group-page-view-switch { + position: absolute; + right: 2rem; + top: 2rem; +} + +.group-page-banner-image { + max-width: 100%; + width: 100%; + height: auto; +} + +.group-page-bar { + overflow: hidden; + background: #171717; + padding: 20px 2rem; + text-align: center; +} + +.group-page-title { + padding: 6px 0; + color: #fff; + margin-bottom: 12px; +} + +.group-page-setion { + padding: 30px 2rem; + overflow: hidden; + max-width: 1350px; + margin: auto; +} + +.gorup-page-info-wrap { + display: block; + font-size: .9rem; + float: right; + padding: 5px .5rem; + border: 2px solid #cdcdcd; + cursor: pointer; +} + +.group-page-description-wrap { + clear: both; +} + +.gorup-page-info-wrap { + text-align: right; + margin-bottom: 10px; +} + +.group-page-status-wrap { + float: right; + font-size: 0.75rem; + color: #fff; + background: #1d9e20; + padding: 2px .4rem; + border-radius: .2rem; + margin-bottom: 10px; +} +.group-page-status-wrap.close-eye{ + background: #c71932; + margin-left: 5px; +} + +.group-page-description-wrap { + padding: 16px 1.2rem 16px; + margin-bottom: 15px; + box-shadow: inset 0 0 8px #aaa; + border-radius: .2rem; +} + +.group-page-description { + clear: both; + text-align: justify; +} + +.group-page-post { + clear: both; + text-align: center; + overflow: hidden; + margin-bottom: 40px; + background: #fff; + padding: 28px 1.5rem; + border-radius: .2rem; + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .2); +} + +.group-page-post-link{ + text-decoration: none; + color: #000; +} + +.group-page-post:hover { + box-shadow: 0 1px 25px 0 rgba(0, 0, 0, .2); +} + +.group-page-post-link:hover { + color: #000; + text-decoration: none; +} + +.group-page-post-image-wrap { + display: inline-block; + margin-bottom: 12px; +} + +.group-page-post-image { + max-width: 100%; + width: 100%; + margin-top: 12px; + /*border-radius: 50%;*/ + height: auto; +} + +.group-page-post-content { + margin-bottom: .5rem; +} + +.group-page-post-title { + font-weight: normal; + font-size: 1.5rem; + line-height: 1; + margin-bottom: 12px; +} + +.group-page-post-meta-wrap { + color: #aaa; +} + +.group-page-post-author, +.group-page-post-postdate { + margin-right: .5rem; +} +/* scroll view */ +.group-page.scroll { + padding-top: 7rem; +} +.group-page.scroll .group-page-banner-image-wrap { + height: 70px; + overflow: hidden; + position: fixed; + top: 0; +} + +.group-page.scroll .group-page-title { + margin-bottom: 0; +} + +.group-page.scroll .group-page-title { + font-size: 18px; +} + +.group-page.scroll .group-page-new-post { + margin-top: 6px; +} + +.group-page.scroll .group-page-new-post { + display: inline-block; + vertical-align: top; +} + +.group-page.scroll .group-page-view-switch { + position: static; + display: inline-block; + margin: 6px .5rem 0 0; +} + +.group-page.scroll .btn { + padding: 2px 5px; +} + +.group-page li a { + text-decoration: none; +} + +.group-page .group-page-feed-view .active { + color: #fff; +} +/* 600px */ + +@media screen and (min-width: 37.5rem) { + .group-page-post { + text-align: left; + margin-bottom: 15px; + } + .group-page-post-image-wrap { + float: left; + width: 12%; + margin-right: 4%; + min-width: 100px; + } + .group-page-post-content-wrap { + float: left; + width: 72%; + } + .group-page.scroll .group-page-view-switch { + margin: 6px .5rem 0 0; + } + .group-page.scroll .group-page-bar { + padding: 0 5rem 0 2rem; + position: fixed; + top: 70px; + width: 100%; + } +} +/* 760px */ + +@media screen and (min-width: 47.5rem) { + .group-page-post-content-wrap { + width: 80%; + } + .group-page-bar { + text-align: left; + } + .group-page-title { + float: left; + margin: 0; + padding: 0; + } + .group-page-new-post { + float: right; + } + .group-page-view-switch { + float: right; + } +} diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index b35a517..c0b9381 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -1,13 +1,44 @@ class Admin::GroupsController < OrbitMemberController def index - @groups = Group.all + @groups = current_user.groups + end + + def public_groups + @groups = Group.open end def categories @categories = GroupCategory.all end + def newpost + @no_breadcrumb = true + uid = params[:group_id].split("-").last + @group = Group.find_by(:uid => uid) + @grouppost = GroupPost.new + end + + def createpost + uid = params[:group_id].split("-").last + group = Group.find_by(:uid => uid) + gp = GroupPost.new(post_params) + gp.group = group + gp.save + redirect_to admin_group_path(group) + end + + def showpost + + end + + def show + @no_breadcrumb = true + @no_filter = true + uid = params[:id].split("-").last + @group = Group.find_by(:uid => uid) + end + def create_category gc = GroupCategory.new(category_params) gc.save @@ -45,6 +76,12 @@ class Admin::GroupsController < OrbitMemberController params.require(:category).permit! end + def post_params + p = params.require(:group_post).permit! + p["author"] = current_user.id + p + end + def group_params p = params.require(:group).permit! p["user_ids"] << current_user.id.to_s diff --git a/app/models/group.rb b/app/models/group.rb index a8ef047..426f0ad 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -11,6 +11,10 @@ class Group belongs_to :group_category has_and_belongs_to_many :users - + has_many :group_posts + + scope :closed, ->{ where(privacy: "closed") } + scope :open, ->{ where(privacy: "open") } + end \ No newline at end of file diff --git a/app/models/group_post.rb b/app/models/group_post.rb new file mode 100644 index 0000000..4177b46 --- /dev/null +++ b/app/models/group_post.rb @@ -0,0 +1,14 @@ +class GroupPost + include Mongoid::Document + include Mongoid::Timestamps + include Slug + + field :title, as: :slug_title, type: String + field :content + field :read_by, type: Array, default: [] + field :author, type: BSON::ObjectId + mount_uploader :image, ImageUploader + + belongs_to :group + +end \ No newline at end of file diff --git a/app/views/admin/groups/_group.html.erb b/app/views/admin/groups/_group.html.erb index b9c37b6..6c63166 100644 --- a/app/views/admin/groups/_group.html.erb +++ b/app/views/admin/groups/_group.html.erb @@ -1,15 +1,22 @@ -<% current_user_is_group_admin = group.admins.include?(current_user.id.to_s) ? true : false %> +<% + current_user_is_group_admin = group.admins.include?(current_user.id.to_s) ? true : false + if !current_user_is_group_admin + current_user_is_group_member = group.users.include?(current_user) ? true : false + else + current_user_is_group_member = true + end +%>
          1. -

            ">

            +

            ">

            <%= link_to(content_tag(:i, nil, :class => 'icon-edit'),"#",:class=>"edit" ) if current_user_is_group_admin %>
            <%= image_tag(group.image) %>
            -

            <%= link_to group.title, "#" %>

            +

            <%= link_to group.title, admin_group_path(group) %>

            <% author = "" group.admins.each_with_index do |admin,i| @@ -23,6 +30,10 @@
            Admin : <%= author %>

              +
            • + Privacy : + "><%= group.privacy %> +
            • <%= group.description %>
            • diff --git a/app/views/admin/groups/_create_group_form.html.erb b/app/views/admin/groups/_group_form.html.erb similarity index 100% rename from app/views/admin/groups/_create_group_form.html.erb rename to app/views/admin/groups/_group_form.html.erb diff --git a/app/views/admin/groups/_post.html.erb b/app/views/admin/groups/_post.html.erb new file mode 100644 index 0000000..3dd2f2f --- /dev/null +++ b/app/views/admin/groups/_post.html.erb @@ -0,0 +1,36 @@ + +
              +
              + <% if !post.image.nil? %> + <%= post.title %> + <% else %> + Post image + <% end %> +
              +
              +

              + <%= post.title %> +

              +
              + <% content = strip_tags post.content %> + <%= content[0..250] %> + <%= "..." if content.length > 350 %> +
              + +
              +
              +
              \ No newline at end of file diff --git a/app/views/admin/groups/_post_form.html.erb b/app/views/admin/groups/_post_form.html.erb new file mode 100644 index 0000000..ef73c89 --- /dev/null +++ b/app/views/admin/groups/_post_form.html.erb @@ -0,0 +1,81 @@ +<% content_for :page_specific_css do %> + <%= stylesheet_link_tag "lib/main-forms" %> + <%= stylesheet_link_tag "lib/fileupload" %> + <%= stylesheet_link_tag "lib/main-list" %> +<% end %> +<% content_for :page_specific_javascript do %> + <%= javascript_include_tag "lib/bootstrap-fileupload" %> + <%= javascript_include_tag "lib/file-type" %> + <%= javascript_include_tag "lib/module-area" %> +<% end %> +
              + + + + +
              + + +
              + +
              + +
              +
              +
              + <% if @grouppost.image.file %> + <%= image_tag @grouppost.image %> + <% else %> + + <% end %> +
              +
              + + <%= t(:select_image) %> + <%= t(:change) %> + <%= f.file_field :image %> + + <%= t(:cancel) %> +
              + +
              +
              +
              +
              +
              +
              + + + +
              + + +
              + +
              + <%= f.text_field :title, class: "input-block-level", placeholder: t(:title), value: (@grouppost.title rescue nil) %> +
              +
              + + +
              + +
              +
              + <%= f.cktext_area :content, rows: 2, class: "input-block-level", value: (@grouppost.content rescue nil) %> +
              +
              +
              + +
              +
              + + +
              + <%= f.submit t('submit'), class: 'btn btn-primary' %> + <%= link_to t('cancel'), admin_groups_path, :class=>"btn" %> +
              \ No newline at end of file diff --git a/app/views/admin/groups/newpost.html.erb b/app/views/admin/groups/newpost.html.erb new file mode 100644 index 0000000..ec91e4f --- /dev/null +++ b/app/views/admin/groups/newpost.html.erb @@ -0,0 +1,5 @@ +<%= form_for @grouppost, :url => admin_group_createpost_path(@group), :html => { :multipart => true , :class=>"form-horizontal main-forms"} do |f| %> +
              + <%= render :partial => "post_form", locals: {f: f} %> +
              +<% end %> \ No newline at end of file diff --git a/app/views/admin/groups/public_groups.html.erb b/app/views/admin/groups/public_groups.html.erb new file mode 100644 index 0000000..216ea65 --- /dev/null +++ b/app/views/admin/groups/public_groups.html.erb @@ -0,0 +1,15 @@ +<% content_for :page_specific_css do -%> + <%= stylesheet_link_tag "lib/wrap-nav" %> + <%= stylesheet_link_tag "lib/main-list" %> + <%= stylesheet_link_tag "lib/filter" %> + <%= stylesheet_link_tag "lib/member" %> +<% end -%> +<% content_for :page_specific_javascript do -%> + <%= javascript_include_tag "lib/jquery.lite.image.resize.js" %> + <%= javascript_include_tag "lib/member/list-view.js" %> +<% end -%> +
              +
                + <%= render :partial=>"group",:collection=> @groups %> +
              +
              \ No newline at end of file diff --git a/app/views/admin/groups/show.html.erb b/app/views/admin/groups/show.html.erb new file mode 100644 index 0000000..1853d04 --- /dev/null +++ b/app/views/admin/groups/show.html.erb @@ -0,0 +1,75 @@ +<% content_for :page_specific_css do -%> + <%= stylesheet_link_tag "group_page" %> +<% end -%> + +
              +
              + <%= @group.title %> +
                +
              • +
              • +
              +
              +
              +

              <%= @group.title %>

              + New Post +
              + +
              +
              + + Info + + +
              + <%= render :partial => "post", :collection => @group.group_posts.desc(:created_at) %> +
              +
              + + diff --git a/app/views/admin/groups/showpost.html.erb b/app/views/admin/groups/showpost.html.erb new file mode 100644 index 0000000..5adc4b3 --- /dev/null +++ b/app/views/admin/groups/showpost.html.erb @@ -0,0 +1 @@ +this is post for <%= params[:id] %> \ No newline at end of file diff --git a/app/views/admin/members/_side_bar.html.erb b/app/views/admin/members/_side_bar.html.erb index a45cf1e..97539fc 100644 --- a/app/views/admin/members/_side_bar.html.erb +++ b/app/views/admin/members/_side_bar.html.erb @@ -9,6 +9,9 @@ <%= content_tag :li, :class => active_for_controllers('members','roles','member_infos') do -%> <%= link_to( ( content_tag(:span, content_tag(:i, nil, :class => 'icons-user'))), admin_members_path) %> <% end -%> + <%= content_tag :li, :class => active_for_controllers('groups') do -%> + <%= link_to( ( content_tag(:span, content_tag(:i, nil, :class => 'icons-layout'))), admin_groups_path) %> + <% end -%> <% if (current_user.is_admin? rescue false) %> <%= content_tag :li, :class => active_for_controllers('plugins') do -%> <%= link_to( ( content_tag(:span, content_tag(:i, nil, :class => 'icons-graduation'))),admin_personal_plugins_path) %> @@ -16,10 +19,8 @@ <%= content_tag :li, :class => active_for_controllers('plugins') do -%> <%= link_to( ( content_tag(:span, content_tag(:i, nil, :class => 'icons-pie'))), '#') %> <% end -%> - <%= content_tag :li, :class => active_for_controllers('groups') do -%> - <%= link_to( ( content_tag(:span, content_tag(:i, nil, :class => 'icons-layout'))), admin_groups_path) %> - <% end -%> - <% end -%> + <% end -%> + <% end -%>
            @@ -36,6 +37,15 @@ <%= content_tag :li, link_to((content_tag(:span, t(:unapproved_members) + " (" + User.unapproved.count.to_s + ")")), admin_members_unapproved_members_path), :class => active_for_action('members', 'unapproved_members') if (current_user.is_admin? rescue nil) %> <% end -%>
          2. + -
            diff --git a/app/views/layouts/member.html.erb b/app/views/layouts/member.html.erb index 36097d4..5a065b9 100644 --- a/app/views/layouts/member.html.erb +++ b/app/views/layouts/member.html.erb @@ -15,8 +15,12 @@ <%= render_orbit_bar unless @no_orbit_bar %> <%= render :partial => 'admin/members/side_bar' unless @no_side_bar %>
            + <% unless @no_filter && @no_breadcrumb %>
            -
            + <% unless @no_filter %> +
            + <% end %> + <% unless @no_breadcrumb %> + <% end %> <%= yield :right_nav %>
            + <% end %> <%= yield %> <%= javascript_include_tag "lib/pageslide.js" %>
            diff --git a/config/routes.rb b/config/routes.rb index 48cbcff..0a197dd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -123,9 +123,12 @@ Orbit::Application.routes.draw do # GROUPS START HERE get "groups/categories" => 'groups#categories' post "groups/create_category" => 'groups#create_category' + get "groups/public" => 'groups#public_groups' + get "posts/:id" => 'groups#showpost' - resources :groups do - + resources :groups do + get "newpost" => 'groups#newpost' + post "createpost" => 'groups#createpost' end From 4b770b7fd17b20f8c6fda2141221026dd6f0e75b Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 25 Mar 2015 15:50:58 +0800 Subject: [PATCH 05/10] group create fix --- app/views/admin/groups/new.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/groups/new.html.erb b/app/views/admin/groups/new.html.erb index 6f87f09..e0e867f 100644 --- a/app/views/admin/groups/new.html.erb +++ b/app/views/admin/groups/new.html.erb @@ -1,5 +1,5 @@ <%= form_for @group, :url => admin_groups_path, :html => { :multipart => true , :class=>"form-horizontal main-forms"} do |f| %>
            - <%= render :partial => "create_group_form", locals: {f: f} %> + <%= render :partial => "group_form", locals: {f: f} %>
            <% end %> \ No newline at end of file From 32623599118fb2c6b543dc4e161e47dc32bc434f Mon Sep 17 00:00:00 2001 From: manson Date: Mon, 23 Mar 2015 15:46:14 +0800 Subject: [PATCH 06/10] update impression and add cache for page sub-parts, main-menu --- app/controllers/pages_controller.rb | 17 ++- app/helpers/application_helper.rb | 185 ++++++++++++++-------------- app/helpers/orbit_backend_helper.rb | 18 ++- app/models/orbit_observer.rb | 26 ++++ app/models/page.rb | 9 ++ app/models/sub_part.rb | 7 ++ config/application.rb | 2 + lib/orbit_model/impression.rb | 2 +- 8 files changed, 165 insertions(+), 101 deletions(-) create mode 100644 app/models/orbit_observer.rb diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 7bda6bf..498d82b 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -27,7 +27,10 @@ class PagesController < ApplicationController def home @manifest = @key page = Page.first - impressionist(page) + Thread.new do + impressionist(page) + page.inc(view_count: 1) + end OrbitHelper.set_params params,current_user OrbitHelper.set_site_locale locale render :html => render_final_page("home",page,true).html_safe @@ -110,7 +113,10 @@ class PagesController < ApplicationController layout = true end - impressionist(page) + Thread.new do + impressionist(page) + page.inc(view_count: 1) + end render :html => render_final_page("#{module_app}/#{params[:target_action]}",page,layout).html_safe else render :file => "#{Rails.root}/public/404.html", :layout => false, :status => :not_found @@ -301,11 +307,11 @@ class PagesController < ApplicationController def render_final_page(original_view=get_view,page,layout) final_html_for_render = "" + if layout parts = $mobile.blank? ? (page.page_parts rescue []) : (page.mobile_page_parts rescue []) @part_partials = {} - parts.each do |part| subparts = part.sub_parts.asc(:created_at) partials = [] @@ -326,7 +332,10 @@ class PagesController < ApplicationController if @editmode partials << "
            " + render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type,subpart.id.to_s) + "
            " else - partials << render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type,subpart.id.to_s) + widget_html = Rails.cache.fetch("subpart_#{subpart.module}_#{subpart.id.to_s}_"+I18n.locale.to_s) do + render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type,subpart.id.to_s) + end + partials << widget_html end elsif subpart.kind == "text" if @editmode diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7d1f857..8764b2f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -76,94 +76,98 @@ module ApplicationHelper end def render_menu - # json_file = File.read(File.join(Rails.root, 'public', "menu.json")) - # @items = JSON.parse(json_file) - if $mobile.blank? - @pages = Page.root.sorted_published_child_pages - else - @pages = Page.root.sorted_published_child_pages_for_mobile - end + menu_html = Rails.cache.fetch(['main_menu',request.original_fullpath, I18n.locale], race_condition_ttl: 2.seconds) do + # json_file = File.read(File.join(Rails.root, 'public', "menu.json")) + # @items = JSON.parse(json_file) + if $mobile.blank? + @pages = Page.root.sorted_published_child_pages + else + @pages = Page.root.sorted_published_child_pages_for_mobile + end - def create_json(pages) - item = {} - pages.each do |page| - if page.child_page.size > 0 - if page.page_type == "page" - if $mobile.blank? - item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "children"=>create_json(page.sorted_published_child_pages), "target" => "_self"} - else - item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "children"=>create_json(page.sorted_published_child_pages_for_mobile), "target" => "_self"} + def create_json(pages) + item = {} + pages.each do |page| + if page.child_page.size > 0 + if page.page_type == "page" + if $mobile.blank? + item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "children"=>create_json(page.sorted_published_child_pages), "target" => "_self"} + else + item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "children"=>create_json(page.sorted_published_child_pages_for_mobile), "target" => "_self"} + end + elsif page.page_type == "link" + target = get_target(page.external_url) + if $mobile.blank? + item["#{page.name}"] = {"url"=> page.external_url, "children"=>create_json(page.sorted_published_child_pages), "target" => target} + else + item["#{page.name}"] = {"url"=> page.external_url, "children"=>create_json(page.sorted_published_child_pages_for_mobile), "target" => target} + end end - elsif page.page_type == "link" - target = get_target(page.external_url) - if $mobile.blank? - item["#{page.name}"] = {"url"=> page.external_url, "children"=>create_json(page.sorted_published_child_pages), "target" => target} - else - item["#{page.name}"] = {"url"=> page.external_url, "children"=>create_json(page.sorted_published_child_pages_for_mobile), "target" => target} + else + if page.page_type == "page" + item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "target" => "_self"} + elsif page.page_type == "link" + item["#{page.name}"] = {"url"=> page.external_url, "target" => get_target(page.external_url)} end end - else - if page.page_type == "page" - item["#{page.name}"] = {"url"=> "/#{locale.to_s}" + page.url, "target" => "_self"} - elsif page.page_type == "link" - item["#{page.name}"] = {"url"=> page.external_url, "target" => get_target(page.external_url)} + end + item + end + @items = create_json(@pages) + menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", "/home/menu.html.erb")) + doc = Nokogiri::HTML(menu_file, nil, "UTF-8") + menu_file.close + + temp = [] + @menus = [] + @menus_items = [] + + temp << doc.css("*[data-menu-level='0']") + temp << doc.css("*[data-menu-level='1']") + temp << doc.css("*[data-menu-level='2']") + + + temp[0] = temp[0].to_s.gsub(temp[1].to_s,"{{level}}") + temp[1] = temp[1].to_s.gsub(temp[2].to_s,"{{level}}") + temp[2] = temp[2].to_s + + + temp.each_with_index do |menu,i| + t = Nokogiri::HTML(menu, nil, "UTF-8") + a = t.css("*[data-menu-link='true']") + a[0]["href"] = "href_here" + a[0]["target"] = "target_here" + li = t.css("*[data-menu-level='#{i}'] > *") + @menus_items << li.to_html + ul = t.css("*[data-menu-level='#{i}']") + ul[0].inner_html = "{{here}}" + @menus << ul[0].to_html + end + + def create_menu(items,level) + html = "" + items.each do |key,item| + li = @menus_items[level].gsub("href_here",(item["url"] || "")) + li = li.gsub("{{link_name}}",(key || "")) + li = li.gsub("target_here",(item["target"] || "")) + li = request.original_fullpath == item['url'] ? li.gsub("{{active}}","active") : li.gsub("{{active}}","") + + if item["children"] && !item["children"].empty? + li = li.gsub("{{level}}",create_menu(item["children"],level + 1)) + else + li = li.gsub("{{level}}","") end + html = html + li end + html = @menus[level].gsub("{{here}}",html) + html = html.gsub("{{class_level}}",level.to_s) + html end - item - end - @items = create_json(@pages) - menu_file = File.open(File.join(Rails.root, 'app', 'templates', "#{@key}", "/home/menu.html.erb")) - doc = Nokogiri::HTML(menu_file, nil, "UTF-8") - menu_file.close - - temp = [] - @menus = [] - @menus_items = [] - - temp << doc.css("*[data-menu-level='0']") - temp << doc.css("*[data-menu-level='1']") - temp << doc.css("*[data-menu-level='2']") - - - temp[0] = temp[0].to_s.gsub(temp[1].to_s,"{{level}}") - temp[1] = temp[1].to_s.gsub(temp[2].to_s,"{{level}}") - temp[2] = temp[2].to_s - - - temp.each_with_index do |menu,i| - t = Nokogiri::HTML(menu, nil, "UTF-8") - a = t.css("*[data-menu-link='true']") - a[0]["href"] = "href_here" - a[0]["target"] = "target_here" - li = t.css("*[data-menu-level='#{i}'] > *") - @menus_items << li.to_html - ul = t.css("*[data-menu-level='#{i}']") - ul[0].inner_html = "{{here}}" - @menus << ul[0].to_html + h = create_menu(@items,0) + h.html_safe end - def create_menu(items,level) - html = "" - items.each do |key,item| - li = @menus_items[level].gsub("href_here",(item["url"] || "")) - li = li.gsub("{{link_name}}",(key || "")) - li = li.gsub("target_here",(item["target"] || "")) - li = request.original_fullpath == item['url'] ? li.gsub("{{active}}","active") : li.gsub("{{active}}","") - - if item["children"] && !item["children"].empty? - li = li.gsub("{{level}}",create_menu(item["children"],level + 1)) - else - li = li.gsub("{{level}}","") - end - html = html + li - end - html = @menus[level].gsub("{{here}}",html) - html = html.gsub("{{class_level}}",level.to_s) - html - end - h = create_menu(@items,0) - h.html_safe + menu_html end def render_view @@ -269,17 +273,18 @@ module ApplicationHelper doc.to_html.html_safe else unless data['impressionist'].blank? - impression = data['impressionist'].impressions.create - impression.user_id = request.session['user_id'] - impression.controller_name = params[:target_controller] - impression.action_name = params[:target_action] - impression.ip_address = request.remote_ip - impression.session_hash = request.session.id - impression.request_hash = @impressionist_hash - impression.referrer = request.referrer - impression.save - data['impressionist'].view_count = data['impressionist'].impressions.count - data['impressionist'].save + Thread.new do + impression = data['impressionist'].impressions.create + impression.user_id = request.session['user_id'] + impression.controller_name = params[:target_controller] + impression.action_name = params[:target_action] + impression.ip_address = request.remote_ip + impression.session_hash = request.session.id + impression.request_hash = @impressionist_hash + impression.referrer = request.referrer + impression.save + data['impressionist'].inc(view_count: 1) + end end wrap_elements = doc.css("*[data-list][data-level='0']") if wrap_elements.count == 0 diff --git a/app/helpers/orbit_backend_helper.rb b/app/helpers/orbit_backend_helper.rb index 438e48f..f666f00 100644 --- a/app/helpers/orbit_backend_helper.rb +++ b/app/helpers/orbit_backend_helper.rb @@ -102,23 +102,29 @@ module OrbitBackendHelper end def display_visitors(options={}) - Impression.where(options).distinct(:request_hash).count + Impression.where(options).count end def display_visitors_today - display_visitors(created_at: {'$gte' => Time.now.beginning_of_day, '$lte' => Time.now}) + display_visitors(created_at: {'$gte' => Time.now.beginning_of_day}) end def display_visitors_this_week - display_visitors(created_at: {'$gte' => Time.now-7.days, '$lte' => Time.now}) + display_visitors(created_at: {'$gte' => Time.now.beginning_of_week}) end def display_visitors_this_month - display_visitors(created_at: {'$gte' => Time.now-30.days, '$lte' => Time.now}) + visitors_this_month = Rails.cache.fetch("visitors_this_month", expires_in: 1.day) do + display_visitors(created_at: {'$gte' => Time.now.beginning_of_month}) + end + visitors_this_month end def display_visitors_this_year - display_visitors(created_at: {'$gte' => Time.now-365.days, '$lte' => Time.now}) + visitors_this_year = Rails.cache.fetch("visitors_this_year", expires_in: 1.day) do + display_visitors(created_at: {'$gte' => Time.now.beginning_of_year}) + end + visitors_this_year end def get_month_traffic @@ -231,4 +237,4 @@ module Orbit::FormBuilder def datetime_picker(method, options = {}) @template.datetime_picker(@object_name, method, objectify_options(options)) end -end \ No newline at end of file +end diff --git a/app/models/orbit_observer.rb b/app/models/orbit_observer.rb new file mode 100644 index 0000000..e1996a6 --- /dev/null +++ b/app/models/orbit_observer.rb @@ -0,0 +1,26 @@ +class OrbitObserver < Mongoid::Observer + # observe OrbitApp.get_models + observe :tag, :category + + def after_save(document) + clear_cache(document) + end + + def after_destroy(document) + clear_cache(document) + end + + def clear_cache(document) + # model_module_hash = OrbitApp.get_model_module_hash + case document.class.to_s + when 'Tag' + document.module_app.each do |module_app| + Rails.cache.delete_matched( /#{ module_app.key }/ ) + end + when 'Category' + Rails.cache.delete_matched( /#{ document.module_app.key }/ ) + else + # Rails.cache.delete_matched( /#{model_module_hash[document.class.to_s]}/ ) + end + end +end \ No newline at end of file diff --git a/app/models/page.rb b/app/models/page.rb index 539b2a7..aeea7fe 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -31,6 +31,15 @@ class Page belongs_to :parent_page, :class_name => 'Page', :inverse_of => :child_page before_create :assign_page_number + + after_save :clear_cache + after_destroy :clear_cache + + def clear_cache + I18n.available_locales.each do |locale| + Rails.cache.delete_matched( /main_menu/ ) + end + end def assign_page_number parent_page = self.parent_page diff --git a/app/models/sub_part.rb b/app/models/sub_part.rb index fb2c1e4..c2dd336 100644 --- a/app/models/sub_part.rb +++ b/app/models/sub_part.rb @@ -16,4 +16,11 @@ class SubPart belongs_to :page_part belongs_to :mobile_page_part + + after_save :clear_cache + after_destroy :clear_cache + + def clear_cache + Rails.cache.delete_matched( /#{self.id.to_s}/ ) + end end \ No newline at end of file diff --git a/config/application.rb b/config/application.rb index 126131f..ef1fd0f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -37,5 +37,7 @@ module Orbit # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] # config.i18n.default_locale = :de + + config.mongoid.observers = :orbit_observer end end diff --git a/lib/orbit_model/impression.rb b/lib/orbit_model/impression.rb index e95393d..3de4ce2 100644 --- a/lib/orbit_model/impression.rb +++ b/lib/orbit_model/impression.rb @@ -4,7 +4,7 @@ module OrbitModel include Impressionist::Impressionable base.extend ClassMethods - base.is_impressionable :counter_cache => true, :column_name => :view_count, :unique => :request_hash + base.is_impressionable :counter_cache => false base.field :view_count, :type => Integer, :default => 0 end From 8b2281ca17085783962be767f82ea613d6310ae2 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 25 Mar 2015 20:56:50 +0800 Subject: [PATCH 07/10] now the caching initialized with engine Conflicts: Gemfile --- Gemfile | 2 +- app/models/module_app.rb | 2 ++ app/models/orbit_observer.rb | 8 ++++---- downloaded_extensions.rb.lock | 7 +++++++ lib/orbit_app/module/registration.rb | 11 ++++++++++- lib/orbit_app/register_module.rb | 18 ++++++++++++++++++ 6 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 downloaded_extensions.rb.lock diff --git a/Gemfile b/Gemfile index 8acd07d..6e81166 100644 --- a/Gemfile +++ b/Gemfile @@ -84,7 +84,7 @@ end #ask gem 'gotcha' -#caching +#caching observers gem 'mongoid-observers' #desktop diff --git a/app/models/module_app.rb b/app/models/module_app.rb index efee743..40d8ac0 100644 --- a/app/models/module_app.rb +++ b/app/models/module_app.rb @@ -15,6 +15,7 @@ class ModuleApp field :desktop_enabled, type: Boolean, default: false field :widget_settings field :store_permission_granted, type: Boolean, default: false + field :cache_models, type: Array, default: [] has_many :categories, dependent: :destroy, :autosave => true has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true @@ -34,6 +35,7 @@ class ModuleApp self[:widget_methods] = reg.get_widget_methods self[:widget_settings] = reg.get_widget_settings self[:desktop_enabled] = reg.is_desktop_enabled + self[:cache_models] = reg.get_models_to_cache end def sub_managers diff --git a/app/models/orbit_observer.rb b/app/models/orbit_observer.rb index e1996a6..5bf400e 100644 --- a/app/models/orbit_observer.rb +++ b/app/models/orbit_observer.rb @@ -1,6 +1,6 @@ class OrbitObserver < Mongoid::Observer - # observe OrbitApp.get_models - observe :tag, :category + models_to_cache = OrbitApp.get_models_for_caching + observe models_to_cache.keys def after_save(document) clear_cache(document) @@ -11,7 +11,7 @@ class OrbitObserver < Mongoid::Observer end def clear_cache(document) - # model_module_hash = OrbitApp.get_model_module_hash + model_module_hash = OrbitApp.get_model_hash_for_caching case document.class.to_s when 'Tag' document.module_app.each do |module_app| @@ -20,7 +20,7 @@ class OrbitObserver < Mongoid::Observer when 'Category' Rails.cache.delete_matched( /#{ document.module_app.key }/ ) else - # Rails.cache.delete_matched( /#{model_module_hash[document.class.to_s]}/ ) + Rails.cache.delete_matched( /#{model_module_hash[document.name.underscore.to_sym]}/ ) end end end \ No newline at end of file diff --git a/downloaded_extensions.rb.lock b/downloaded_extensions.rb.lock new file mode 100644 index 0000000..83f331d --- /dev/null +++ b/downloaded_extensions.rb.lock @@ -0,0 +1,7 @@ +GEM + specs: + +PLATFORMS + ruby + +DEPENDENCIES diff --git a/lib/orbit_app/module/registration.rb b/lib/orbit_app/module/registration.rb index 25f6f1b..ae8b9fd 100644 --- a/lib/orbit_app/module/registration.rb +++ b/lib/orbit_app/module/registration.rb @@ -40,7 +40,7 @@ module OrbitApp end class RegisteredModule - attr_reader :name,:key,:base_path, :module_label,:widget_methods,:authorizable_models,:is_authorizable, :data_count, :widget_settings, :icon_class_no_sidebar,:desktop_enabled + attr_reader :name,:key,:base_path, :module_label,:widget_methods,:authorizable_models,:is_authorizable, :data_count, :widget_settings, :icon_class_no_sidebar,:desktop_enabled, :models_to_cache def initialize(name,&block) @name = name @@ -48,6 +48,7 @@ module OrbitApp @side_bar = nil @module_label = @name @widget_methods = [] + @models_to_cache = [] @widget_settings = {} @is_taggable = false @authorizable_models = [] @@ -93,6 +94,14 @@ module OrbitApp @widget_settings = settings.first end + def models_to_cache(models) + @models_to_cache = models + end + + def get_models_to_cache + @models_to_cache + end + def get_widget_settings @widget_settings end diff --git a/lib/orbit_app/register_module.rb b/lib/orbit_app/register_module.rb index 7c62298..f536173 100644 --- a/lib/orbit_app/register_module.rb +++ b/lib/orbit_app/register_module.rb @@ -21,6 +21,24 @@ module OrbitApp end end + def get_models_for_caching + @models_for_caching = {} + ModuleApp.all.each do |ma| + # models.concat(ma.cache_models) + ma.cache_models.each do |cm| + @models_for_caching[cm] = ma.key + end + end + @models_for_caching[:tag] = "Tag" + @models_for_caching[:category] = "Category" + puts @models_for_caching.to_s + return @models_for_caching + end + + def get_model_hash_for_caching + @models_for_caching + end + def check_module_permissions store_token = Site.first.store_token rescue nil module_apps = ModuleApp.all From 27222ab6cd7482ee93c26cfa8e5991937e536b5f Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 25 Mar 2015 22:08:30 +0800 Subject: [PATCH 08/10] small fix for cache --- app/models/orbit_observer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/orbit_observer.rb b/app/models/orbit_observer.rb index 5bf400e..92e1279 100644 --- a/app/models/orbit_observer.rb +++ b/app/models/orbit_observer.rb @@ -20,7 +20,7 @@ class OrbitObserver < Mongoid::Observer when 'Category' Rails.cache.delete_matched( /#{ document.module_app.key }/ ) else - Rails.cache.delete_matched( /#{model_module_hash[document.name.underscore.to_sym]}/ ) + Rails.cache.delete_matched( /#{model_module_hash[document.class.name.underscore.to_sym]}/ ) end end end \ No newline at end of file From 6d06790159682864ed6d6558ac6daf265acb259b Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Thu, 26 Mar 2015 21:52:21 +0800 Subject: [PATCH 09/10] added expire time to cache. --- app/controllers/pages_controller.rb | 2 +- lib/orbit_app/register_module.rb | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 498d82b..b379f9b 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -332,7 +332,7 @@ class PagesController < ApplicationController if @editmode partials << "
            " + render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type,subpart.id.to_s) + "
            " else - widget_html = Rails.cache.fetch("subpart_#{subpart.module}_#{subpart.id.to_s}_"+I18n.locale.to_s) do + widget_html = Rails.cache.fetch("subpart_#{subpart.module}_#{subpart.id.to_s}_"+I18n.locale.to_s,{ race_condition_ttl: 2, expires_in: 5.minutes}) do render_widget_for_frontend(subpart.module,subpart.widget_method,subpart.widget_type,subpart.id.to_s) end partials << widget_html diff --git a/lib/orbit_app/register_module.rb b/lib/orbit_app/register_module.rb index f536173..2342a36 100644 --- a/lib/orbit_app/register_module.rb +++ b/lib/orbit_app/register_module.rb @@ -31,7 +31,6 @@ module OrbitApp end @models_for_caching[:tag] = "Tag" @models_for_caching[:category] = "Category" - puts @models_for_caching.to_s return @models_for_caching end From 90eba5141e840f37be8b191d75428b79543b5beb Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Mon, 30 Mar 2015 15:19:01 +0800 Subject: [PATCH 10/10] removed lock file --- downloaded_extensions.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 downloaded_extensions.rb diff --git a/downloaded_extensions.rb b/downloaded_extensions.rb deleted file mode 100644 index e69de29..0000000