From dd16ec4adbdaee3c15dd06f69739a6887ae8b5ce Mon Sep 17 00:00:00 2001 From: Deepu T Philip Date: Wed, 1 Oct 2014 23:25:07 +0530 Subject: [PATCH 1/6] Initial Commit of CleanPlace --- .em/config.json | 16 + .meteor/.finished-upgraders | 6 + .meteor/.gitignore | 1 + .meteor/.id | 7 + .meteor/cordova-plugins | 1 + .meteor/packages | 23 + .meteor/release | 1 + .meteor/versions | 94 + both/app.js | 4 + both/collections/activities.js | 8 + both/collections/images.js | 15 + both/collections/organizations.js | 8 + both/collections/tasks.js | 8 + both/methods/activities.js | 13 + both/methods/create_organization.js | 13 + both/methods/users.js | 13 + both/router/routes.js | 18 + client/app.html | 14 + client/app.js | 40 + client/app.less | 9 + client/collections/activities.js | 6 + client/collections/images.js | 6 + client/collections/organizations.js | 6 + client/collections/tasks.js | 6 + client/controllers/home.js | 12 + client/lib/activity_map.js | 236 ++ client/lib/bootstrap/bootstrap.less | 57 + .../material/less/alerts.import.less | 18 + .../material/less/animations.import.less | 44 + .../material/less/buttons.import.less | 107 + .../material/less/checkboxes.import.less | 186 + .../bootstrap/material/less/icons.import.less | 5 + .../material/less/inputs.import.less | 218 ++ .../bootstrap/material/less/lists.import.less | 84 + .../material/less/material-wfont.import.less | 3 + .../material/less/material.import.less | 112 + .../material/less/mixins.import.less | 84 + .../material/less/navbar.import.less | 205 ++ .../less/plugin-nouislider.import.less | 98 + .../less/plugin-snackbarjs.import.less | 42 + .../material/less/popups.import.less | 27 + .../material/less/prefixer.import.less | 371 ++ .../material/less/progress.import.less | 12 + .../material/less/radios.import.less | 97 + .../material/less/ripples.import.less | 43 + .../material/less/shadows.import.less | 31 + .../bootstrap/material/less/tabs.import.less | 26 + .../material/less/variables.import.less | 103 + .../material/less/welljumbo.import.less | 66 + .../bootstrap/material/scripts/material.js | 80 + .../lib/bootstrap/material/scripts/ripples.js | 125 + client/lib/bootstrap/variables.import.less | 21 + client/lib/google_location_service.js | 60 + client/lib/icons.css | 1499 ++++++++ client/lib/material-wfont.css | 3229 +++++++++++++++++ client/lib/ripples.css | 42 + client/lib/snackbarsjs/snackbar.js | 137 + client/lib/snackbarsjs/snackbar.less | 38 + client/methods/activities.js | 13 + client/methods/create_organization.js | 13 + client/methods/users.js | 13 + .../create_activity/create_activity.html | 94 + .../views/create_activity/create_activity.js | 149 + .../create_activity/create_activity.less | 14 + .../create_organization.html | 55 + .../create_organization.js | 94 + .../create_organization.less | 3 + client/views/feed/feed.html | 35 + client/views/feed/feed.js | 97 + client/views/feed/feed.less | 3 + .../forgot_password/forgot_password.html | 26 + .../views/forgot_password/forgot_password.js | 35 + .../forgot_password/forgot_password.less | 3 + client/views/home/home.html | 7 + client/views/home/home.js | 39 + client/views/home/home.less | 8 + .../layouts/master_layout/master_layout.css | 3 + .../layouts/master_layout/master_layout.html | 46 + .../layouts/master_layout/master_layout.js | 40 + .../list_organizations.html | 5 + .../list_organizations/list_organizations.js | 35 + .../list_organizations.less | 3 + client/views/list_users/list_users.html | 22 + client/views/list_users/list_users.js | 56 + client/views/list_users/list_users.less | 3 + client/views/map_view/map_view.html | 38 + client/views/map_view/map_view.js | 248 ++ client/views/map_view/map_view.less | 29 + client/views/shared/loading/loading.css | 3 + client/views/shared/loading/loading.html | 5 + client/views/shared/loading/loading.js | 35 + client/views/shared/not_found/not_found.css | 3 + client/views/shared/not_found/not_found.html | 5 + client/views/shared/not_found/not_found.js | 35 + client/views/sign_in/sign_in.html | 48 + client/views/sign_in/sign_in.js | 29 + client/views/sign_in/sign_in.less | 3 + client/views/sign_up/sign_up.html | 83 + client/views/sign_up/sign_up.js | 35 + client/views/sign_up/sign_up.less | 3 + client/views/user_profile/user_profile.html | 5 + client/views/user_profile/user_profile.js | 35 + client/views/user_profile/user_profile.less | 3 + config/development/env.sh | 0 config/development/settings.json | 0 packages/bootstrap3-less | 1 + public/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes public/fonts/glyphicons-halflings-regular.svg | 229 ++ public/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes public/icons/LICENSE.txt | 27 + public/icons/fonts/Material-Design.eot | Bin 0 -> 86192 bytes public/icons/fonts/Material-Design.svg | 515 +++ public/icons/fonts/Material-Design.ttf | Bin 0 -> 85996 bytes public/icons/fonts/Material-Design.woff | Bin 0 -> 56944 bytes server/app.js | 12 + server/collections/activities.js | 34 + server/collections/images.js | 43 + server/collections/organizations.js | 34 + server/collections/tasks.js | 34 + server/methods/activities.js | 65 + server/methods/organization.js | 27 + server/methods/users.js | 22 + server/publish/activities.js | 15 + server/publish/images.js | 8 + 125 files changed, 10479 insertions(+) create mode 100644 .em/config.json create mode 100644 .meteor/.finished-upgraders create mode 100644 .meteor/.gitignore create mode 100644 .meteor/.id create mode 100644 .meteor/cordova-plugins create mode 100644 .meteor/packages create mode 100644 .meteor/release create mode 100644 .meteor/versions create mode 100644 both/app.js create mode 100644 both/collections/activities.js create mode 100644 both/collections/images.js create mode 100644 both/collections/organizations.js create mode 100644 both/collections/tasks.js create mode 100644 both/methods/activities.js create mode 100644 both/methods/create_organization.js create mode 100644 both/methods/users.js create mode 100644 both/router/routes.js create mode 100644 client/app.html create mode 100644 client/app.js create mode 100644 client/app.less create mode 100644 client/collections/activities.js create mode 100644 client/collections/images.js create mode 100644 client/collections/organizations.js create mode 100644 client/collections/tasks.js create mode 100644 client/controllers/home.js create mode 100644 client/lib/activity_map.js create mode 100644 client/lib/bootstrap/bootstrap.less create mode 100644 client/lib/bootstrap/material/less/alerts.import.less create mode 100644 client/lib/bootstrap/material/less/animations.import.less create mode 100644 client/lib/bootstrap/material/less/buttons.import.less create mode 100644 client/lib/bootstrap/material/less/checkboxes.import.less create mode 100644 client/lib/bootstrap/material/less/icons.import.less create mode 100644 client/lib/bootstrap/material/less/inputs.import.less create mode 100644 client/lib/bootstrap/material/less/lists.import.less create mode 100644 client/lib/bootstrap/material/less/material-wfont.import.less create mode 100644 client/lib/bootstrap/material/less/material.import.less create mode 100644 client/lib/bootstrap/material/less/mixins.import.less create mode 100644 client/lib/bootstrap/material/less/navbar.import.less create mode 100644 client/lib/bootstrap/material/less/plugin-nouislider.import.less create mode 100644 client/lib/bootstrap/material/less/plugin-snackbarjs.import.less create mode 100644 client/lib/bootstrap/material/less/popups.import.less create mode 100644 client/lib/bootstrap/material/less/prefixer.import.less create mode 100644 client/lib/bootstrap/material/less/progress.import.less create mode 100644 client/lib/bootstrap/material/less/radios.import.less create mode 100644 client/lib/bootstrap/material/less/ripples.import.less create mode 100644 client/lib/bootstrap/material/less/shadows.import.less create mode 100644 client/lib/bootstrap/material/less/tabs.import.less create mode 100644 client/lib/bootstrap/material/less/variables.import.less create mode 100644 client/lib/bootstrap/material/less/welljumbo.import.less create mode 100644 client/lib/bootstrap/material/scripts/material.js create mode 100644 client/lib/bootstrap/material/scripts/ripples.js create mode 100644 client/lib/bootstrap/variables.import.less create mode 100644 client/lib/google_location_service.js create mode 100644 client/lib/icons.css create mode 100644 client/lib/material-wfont.css create mode 100644 client/lib/ripples.css create mode 100644 client/lib/snackbarsjs/snackbar.js create mode 100644 client/lib/snackbarsjs/snackbar.less create mode 100644 client/methods/activities.js create mode 100644 client/methods/create_organization.js create mode 100644 client/methods/users.js create mode 100644 client/views/create_activity/create_activity.html create mode 100644 client/views/create_activity/create_activity.js create mode 100644 client/views/create_activity/create_activity.less create mode 100644 client/views/create_organization/create_organization.html create mode 100644 client/views/create_organization/create_organization.js create mode 100644 client/views/create_organization/create_organization.less create mode 100644 client/views/feed/feed.html create mode 100644 client/views/feed/feed.js create mode 100644 client/views/feed/feed.less create mode 100644 client/views/forgot_password/forgot_password.html create mode 100644 client/views/forgot_password/forgot_password.js create mode 100644 client/views/forgot_password/forgot_password.less create mode 100644 client/views/home/home.html create mode 100644 client/views/home/home.js create mode 100644 client/views/home/home.less create mode 100644 client/views/layouts/master_layout/master_layout.css create mode 100644 client/views/layouts/master_layout/master_layout.html create mode 100644 client/views/layouts/master_layout/master_layout.js create mode 100644 client/views/list_organizations/list_organizations.html create mode 100644 client/views/list_organizations/list_organizations.js create mode 100644 client/views/list_organizations/list_organizations.less create mode 100644 client/views/list_users/list_users.html create mode 100644 client/views/list_users/list_users.js create mode 100644 client/views/list_users/list_users.less create mode 100644 client/views/map_view/map_view.html create mode 100644 client/views/map_view/map_view.js create mode 100644 client/views/map_view/map_view.less create mode 100644 client/views/shared/loading/loading.css create mode 100644 client/views/shared/loading/loading.html create mode 100644 client/views/shared/loading/loading.js create mode 100644 client/views/shared/not_found/not_found.css create mode 100644 client/views/shared/not_found/not_found.html create mode 100644 client/views/shared/not_found/not_found.js create mode 100644 client/views/sign_in/sign_in.html create mode 100644 client/views/sign_in/sign_in.js create mode 100644 client/views/sign_in/sign_in.less create mode 100644 client/views/sign_up/sign_up.html create mode 100644 client/views/sign_up/sign_up.js create mode 100644 client/views/sign_up/sign_up.less create mode 100644 client/views/user_profile/user_profile.html create mode 100644 client/views/user_profile/user_profile.js create mode 100644 client/views/user_profile/user_profile.less create mode 100644 config/development/env.sh create mode 100644 config/development/settings.json create mode 120000 packages/bootstrap3-less create mode 100644 public/fonts/glyphicons-halflings-regular.eot create mode 100644 public/fonts/glyphicons-halflings-regular.svg create mode 100644 public/fonts/glyphicons-halflings-regular.ttf create mode 100644 public/fonts/glyphicons-halflings-regular.woff create mode 100644 public/icons/LICENSE.txt create mode 100644 public/icons/fonts/Material-Design.eot create mode 100644 public/icons/fonts/Material-Design.svg create mode 100644 public/icons/fonts/Material-Design.ttf create mode 100644 public/icons/fonts/Material-Design.woff create mode 100644 server/app.js create mode 100644 server/collections/activities.js create mode 100644 server/collections/images.js create mode 100644 server/collections/organizations.js create mode 100644 server/collections/tasks.js create mode 100644 server/methods/activities.js create mode 100644 server/methods/organization.js create mode 100644 server/methods/users.js create mode 100644 server/publish/activities.js create mode 100644 server/publish/images.js diff --git a/.em/config.json b/.em/config.json new file mode 100644 index 0000000..0cfa335 --- /dev/null +++ b/.em/config.json @@ -0,0 +1,16 @@ +{ + "view": { + "html": { + "create": true, + "extension": ".html" + }, + "css": { + "create": true, + "extension": ".less" + }, + "js": { + "create": true, + "extension": ".js" + } + } +} diff --git a/.meteor/.finished-upgraders b/.meteor/.finished-upgraders new file mode 100644 index 0000000..ee0ed5a --- /dev/null +++ b/.meteor/.finished-upgraders @@ -0,0 +1,6 @@ +# This file contains information which helps Meteor properly upgrade your +# app when you run 'meteor update'. You should check it into version control +# with your project. + +notices-for-0.9.0 +notices-for-0.9.1 diff --git a/.meteor/.gitignore b/.meteor/.gitignore new file mode 100644 index 0000000..4083037 --- /dev/null +++ b/.meteor/.gitignore @@ -0,0 +1 @@ +local diff --git a/.meteor/.id b/.meteor/.id new file mode 100644 index 0000000..e56ad70 --- /dev/null +++ b/.meteor/.id @@ -0,0 +1,7 @@ +# This file contains a token that is unique to your project. +# Check it into your repository along with the rest of this directory. +# It can be used for purposes such as: +# - ensuring you don't accidentally deploy one app on top of another +# - providing package authors with aggregated statistics + +po6sgz17te2ds1t1cdz6 diff --git a/.meteor/cordova-plugins b/.meteor/cordova-plugins new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.meteor/cordova-plugins @@ -0,0 +1 @@ + diff --git a/.meteor/packages b/.meteor/packages new file mode 100644 index 0000000..15a50a6 --- /dev/null +++ b/.meteor/packages @@ -0,0 +1,23 @@ +# Meteor packages used by this project, one per line. +# +# 'meteor add' and 'meteor remove' will edit this file for you, +# but you can also edit it by hand. + +meteor-platform +iron:router +simison:bootstrap3-less +accounts-base +accounts-password +ian:accounts-ui-bootstrap-3 +jquery +less +reactive-dict +#lawshe:full-page +joshowens:accounts-entry +jeremy:selectize +tsega:bootstrap3-datetimepicker +mrt:moment +cfs:standard-packages +cfs:filesystem +random + diff --git a/.meteor/release b/.meteor/release new file mode 100644 index 0000000..01887b6 --- /dev/null +++ b/.meteor/release @@ -0,0 +1 @@ +METEOR@0.9.3.1 diff --git a/.meteor/versions b/.meteor/versions new file mode 100644 index 0000000..f359133 --- /dev/null +++ b/.meteor/versions @@ -0,0 +1,94 @@ +accounts-base@1.1.1 +accounts-password@1.0.2 +anti:i18n@0.4.3 +application-configuration@1.0.2 +autoupdate@1.1.1 +base64@1.0.0 +binary-heap@1.0.0 +blaze-tools@1.0.0 +blaze@2.0.1 +boilerplate-generator@1.0.0 +callback-hook@1.0.0 +cfs:access-point@0.0.0 +cfs:base-package@0.0.0 +cfs:collection-filters@0.0.0 +cfs:collection@0.0.0 +cfs:data-man@0.0.0 +cfs:file@0.0.0 +cfs:filesystem@0.0.0 +cfs:http-methods@0.0.24 +cfs:http-publish@0.0.0 +cfs:power-queue@0.0.1 +cfs:reactive-list@0.0.0 +cfs:reactive-property@0.0.0 +cfs:standard-packages@0.0.2 +cfs:storage-adapter@0.0.0 +cfs:tempstore@0.0.2 +cfs:upload-http@0.0.2 +cfs:worker@0.0.0 +check@1.0.1 +coffeescript@1.0.3 +ctl-helper@1.0.3 +ctl@1.0.1 +ddp@1.0.9 +deps@1.0.4 +ejson@1.0.3 +email@1.0.3 +fastclick@1.0.0 +follower-livedata@1.0.1 +geojson-utils@1.0.0 +handlebars@1.0.0 +html-tools@1.0.1 +htmljs@1.0.1 +http@1.0.6 +ian:accounts-ui-bootstrap-3@1.1.9 +id-map@1.0.0 +iron:core@0.3.4 +iron:dynamic-template@0.4.1 +iron:layout@0.4.1 +iron:router@0.9.4 +jeremy:selectize@0.1.3 +joshowens:accounts-entry@0.9.0 +joshowens:simple-form@0.1.8 +jquery@1.0.0 +json@1.0.0 +less@1.0.9 +livedata@1.0.10 +localstorage@1.0.0 +logging@1.0.3 +meteor-platform@1.1.1 +meteor@1.1.1 +minifiers@1.1.0 +minimongo@1.0.3 +mobile-status-bar@1.0.0 +mongo-livedata@1.0.5 +mongo@1.0.6 +mrt:accounts-t9n@0.0.13 +mrt:moment@2.8.1 +mrt:underscore-string-latest@2.3.3 +npm-bcrypt@0.7.7 +observe-sequence@1.0.2 +ordered-dict@1.0.0 +raix:eventemitter@0.0.1 +random@1.0.0 +reactive-dict@1.0.3 +reactive-var@1.0.2 +reload@1.1.0 +retry@1.0.0 +routepolicy@1.0.1 +service-configuration@1.0.1 +session@1.0.2 +sha@1.0.0 +simison:bootstrap3-less@0.3.0 +spacebars-compiler@1.0.2 +spacebars@1.0.2 +srp@1.0.0 +stylus@1.0.4 +templating@1.0.7 +tracker@1.0.2 +tsega:bootstrap3-datetimepicker@0.4.0 +ui@1.0.3 +underscore@1.0.0 +url@1.0.0 +webapp-hashing@1.0.0 +webapp@1.1.2 diff --git a/both/app.js b/both/app.js new file mode 100644 index 0000000..11e2359 --- /dev/null +++ b/both/app.js @@ -0,0 +1,4 @@ +/*****************************************************************************/ +/* App: The Global Application Namespace */ +/*****************************************************************************/ +App = {}; diff --git a/both/collections/activities.js b/both/collections/activities.js new file mode 100644 index 0000000..c5d914c --- /dev/null +++ b/both/collections/activities.js @@ -0,0 +1,8 @@ +Activities = new Meteor.Collection('activities'); + +/* + * Add query methods like this: + * Activities.findPublic = function () { + * return Activities.find({is_public: true}); + * } + */ diff --git a/both/collections/images.js b/both/collections/images.js new file mode 100644 index 0000000..e6ed67d --- /dev/null +++ b/both/collections/images.js @@ -0,0 +1,15 @@ +Images = new FS.Collection("images", { + stores: [new FS.Store.FileSystem("images", {})], + filter: { + allow: { + contentTypes: ['image/*'] //allow only images in this FS.Collection + } + } +}); + +/* + * Add query methods like this: + * Images.findPublic = function () { + * return Images.find({is_public: true}); + * } + */ diff --git a/both/collections/organizations.js b/both/collections/organizations.js new file mode 100644 index 0000000..a38cf98 --- /dev/null +++ b/both/collections/organizations.js @@ -0,0 +1,8 @@ +Organizations = new Meteor.Collection('organizations'); + +/* + * Add query methods like this: + * Organizations.findPublic = function () { + * return Organizations.find({is_public: true}); + * } + */ diff --git a/both/collections/tasks.js b/both/collections/tasks.js new file mode 100644 index 0000000..7cd7e4e --- /dev/null +++ b/both/collections/tasks.js @@ -0,0 +1,8 @@ +Tasks = new Meteor.Collection('tasks'); + +/* + * Add query methods like this: + * Tasks.findPublic = function () { + * return Tasks.find({is_public: true}); + * } + */ diff --git a/both/methods/activities.js b/both/methods/activities.js new file mode 100644 index 0000000..48deffe --- /dev/null +++ b/both/methods/activities.js @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* Activities Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/activities/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ +}); diff --git a/both/methods/create_organization.js b/both/methods/create_organization.js new file mode 100644 index 0000000..d28be86 --- /dev/null +++ b/both/methods/create_organization.js @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* CreateOrganization Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/create_organization/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ +}); diff --git a/both/methods/users.js b/both/methods/users.js new file mode 100644 index 0000000..c38d40f --- /dev/null +++ b/both/methods/users.js @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* Users Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/users/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ +}); diff --git a/both/router/routes.js b/both/router/routes.js new file mode 100644 index 0000000..9cd06a0 --- /dev/null +++ b/both/router/routes.js @@ -0,0 +1,18 @@ +/*****************************************************************************/ +/* Client and Server Routes */ +/*****************************************************************************/ +Router.configure({ + layoutTemplate: 'MasterLayout', + loadingTemplate: 'Loading', + notFoundTemplate: 'NotFound', + templateNameConverter: 'upperCamelCase', + routeControllerNameConverter: 'upperCamelCase' +}); + +Router.map(function () { + /* + Example: + this.route('home', {path: '/'}); + */ + this.route('home', {path: '/'}); +}); diff --git a/client/app.html b/client/app.html new file mode 100644 index 0000000..551697d --- /dev/null +++ b/client/app.html @@ -0,0 +1,14 @@ + + Clean Place + + + + + + + + + + + + diff --git a/client/app.js b/client/app.js new file mode 100644 index 0000000..a97858b --- /dev/null +++ b/client/app.js @@ -0,0 +1,40 @@ +/*****************************************************************************/ +/* Client App Namespace */ +/*****************************************************************************/ +_.extend(App, { +}); + +App.helpers = { + format_time : function(x){ + return (new moment(x * 1000)).format("dddd, MMMM Do YYYY, h:mm:ss A") + } +}; + +_.each(App.helpers, function (helper, key) { + Handlebars.registerHelper(key, helper); +}); + +Meteor.startup(function(){ + App.LocationService = new GoogleLocationService(['(regions)']) + + AccountsEntry.config({ + // logo: 'logo.png' // if set displays logo above sign-in options + // privacyUrl: '/privacy-policy' // if set adds link to privacy policy and 'you agree to ...' on sign-up page + // termsUrl: '/terms-of-use' // if set adds link to terms 'you agree to ...' on sign-up page + homeRoute: '/', // mandatory - path to redirect to after sign-out + dashboardRoute: '/', // mandatory - path to redirect to after successful sign-in + profileRoute: '/', + passwordSignupFields: 'EMAIL_ONLY', + showSignupCode: false, + showOtherLoginServices: true, // Set to false to hide oauth login buttons on the signin/signup pages. Useful if you are using something like accounts-meld or want to oauth for api access + extraSignUpFields: [{ // Add extra signup fields on the signup page + field: "name", // The database property you want to store the data in + name: "", // An initial value for the field, if you want one + label: "Full Name", // The html lable for the field + placeholder: "", // A placeholder for the field + type: "text", // The type of field you want + required: true // Adds html 5 required property if true + }] + }); + +}) \ No newline at end of file diff --git a/client/app.less b/client/app.less new file mode 100644 index 0000000..2ca2054 --- /dev/null +++ b/client/app.less @@ -0,0 +1,9 @@ +/*****************************************************************************/ +/* Global CSS Styles */ +/*****************************************************************************/ + +html, body { + height: 100%; + width: 100%; + overflow: hidden; +} \ No newline at end of file diff --git a/client/collections/activities.js b/client/collections/activities.js new file mode 100644 index 0000000..49120ac --- /dev/null +++ b/client/collections/activities.js @@ -0,0 +1,6 @@ +/* + * Add query methods like this: + * Activities.findPublic = function () { + * return Activities.find({is_public: true}); + * } + */ diff --git a/client/collections/images.js b/client/collections/images.js new file mode 100644 index 0000000..7d14850 --- /dev/null +++ b/client/collections/images.js @@ -0,0 +1,6 @@ +/* + * Add query methods like this: + * Images.findPublic = function () { + * return Images.find({is_public: true}); + * } + */ \ No newline at end of file diff --git a/client/collections/organizations.js b/client/collections/organizations.js new file mode 100644 index 0000000..f5c5728 --- /dev/null +++ b/client/collections/organizations.js @@ -0,0 +1,6 @@ +/* + * Add query methods like this: + * Organizations.findPublic = function () { + * return Organizations.find({is_public: true}); + * } + */ diff --git a/client/collections/tasks.js b/client/collections/tasks.js new file mode 100644 index 0000000..2bb25e2 --- /dev/null +++ b/client/collections/tasks.js @@ -0,0 +1,6 @@ +/* + * Add query methods like this: + * Tasks.findPublic = function () { + * return Tasks.find({is_public: true}); + * } + */ diff --git a/client/controllers/home.js b/client/controllers/home.js new file mode 100644 index 0000000..15dcf8c --- /dev/null +++ b/client/controllers/home.js @@ -0,0 +1,12 @@ +HomeController = RouteController.extend({ + waitOn: function () { + return [Meteor.subscribe('images')] + }, + + data: function () { + }, + + action: function () { + this.render(); + } +}); diff --git a/client/lib/activity_map.js b/client/lib/activity_map.js new file mode 100644 index 0000000..3fb7784 --- /dev/null +++ b/client/lib/activity_map.js @@ -0,0 +1,236 @@ +ActivityMap = function(id, options, center) { + var self = this + + var center = center || new google.maps.LatLng(12.971599, 77.594563); + + var options = options || { + zoom: 13, + center: center, + disableDefaultUI: true, + panControl: true, + zoomControl: true, + scaleControl: false, // fixed to BOTTOM_RIGHT + streetViewControl: true + } + + self.state = new ReactiveDict() + + self.map = new google.maps.Map(document.getElementById(id), options); + self.location_service = new GoogleLocationService(['(regions)']); + + self.markers = {}; + self.temp_marker = new google.maps.Marker({ + map: self.map, + position : self.map.getCenter() + }); + self.temp_marker.setVisible(false) + self.temp_marker.infowindow = new google.maps.InfoWindow(); + + self.temp_marker.title = "Yet Another Activity" + + + google.maps.event.addListener(self.map, 'bounds_changed', function(){ + var bounds = self.map.getBounds(); + var center = bounds.getCenter(); + + self.location_service.reverse_geocode_first(center, + function(result){ + if(!self.temp_marker.place){ + self.temp_marker.place = result + } + var city = _.filter(result.address_components, function(x){ + return x.types[0] == 'administrative_area_level_1' + })[0] + if(city){ + self.state.set("current_city", city['long_name']) + } + } + ); + }) + + + +} + +ActivityMap.prototype = { + + get_user_location : function(callback){ + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function (position) { + var coords = new google.maps.LatLng(position.coords.latitude, + position.coords.longitude); + callback(coords) + }); + } + }, + + get_city : function(place){ + + var city = "N/A" + var result = _.filter(place.address_components, function(x){ + return x.types[0] == 'administrative_area_level_1' + })[0] + + if(result) + city = city['long_name'] + + return city + }, + + add_marker : function(id, lat, lng){ + var self = this + var position = new google.maps.LatLng(lng, lat) + + self.markers[id] = new google.maps.Marker({ + position: position, + map: self.map + }); + }, + + remove_marker : function(id){ + var self = this + self.markers[id].setMap(null) + delete self.markers[id] + }, + + hide_marker : function(id){ + var self = this + self.markers[id].setVisible(false) + }, + + show_marker : function(id){ + var self = this + self.markers[id].setVisible(true) + }, + + hide_all_markers : function(){ + var self = this + _.each(_.keys(self.markers), function(id){ + self.hide_marker(id) + }) + }, + + show_all_markers : function(){ + var self = this + _.each(_.keys(self.markers), function(id){ + self.show_marker(id) + }) + }, + + enable_write_mode : function(){ + var self = this; + + self.temp_marker.fids = [] + + self.hide_all_markers() + + if(!self.write_handler){ + + self.write_handler = google.maps.event.addListener(self.map, 'click', + function(event) { + + self.location_service.reverse_geocode_first(event.latLng, + function(place){ + place.name = place.formatted_address.split(",")[0] + self.temp_marker.place = place + self.state.set("temp_address", place.formatted_address) + self.set_temp_marker(place) + } + ); + } + ) + } + + }, + + + enable_read_mode : function(){ + var self = this; + + google.maps.event.removeListener(self.write_handler); + self.write_handler = null + self.temp_marker.setVisible(false) + self.temp_marker.infowindow.close() + self.show_all_markers(); + + }, + + set_mode : function(mode){ + var self = this + self['enable_' + mode + 'mode'](); + + }, + + add_control : function(id, control_position){ + + var self = this + + var control_position = control_position || google.maps.ControlPosition.TOP_RIGHT + + var controlDiv = document.getElementById(id); + controlDiv.index = 1; + self.map.controls[control_position].push(controlDiv); + + }, + + get_address : function(place){ + + var address = ''; + if (place.address_components) { + address = [ + (place.address_components[0] && place.address_components[0].short_name || ''), + (place.address_components[1] && place.address_components[1].short_name || ''), + (place.address_components[2] && place.address_components[2].short_name || '') + ].join(' '); + } + + return address + + }, + + set_temp_marker : function(place){ + + var self = this; + + var marker = self.temp_marker; + + marker.place = place; + + // marker.infowindow.close(); + marker.setVisible(false); + + self.map.setCenter(place.geometry.location); + self.map.setZoom(17); // Why 17? Because it looks good. + + self.center_map(); + + marker.setPosition(place.geometry.location); + marker.setVisible(true); + + var address = self.get_address(place) + + marker.infowindow.setContent(('
' + marker.title + + '
' + address + '
Click on the map to place marker
')); + marker.infowindow.open(self.map, marker); + + }, + + center_map : function(){ + + var self = this + + var b = self.map.getBounds() + var c = b.getCenter() + var ne = b.getNorthEast() + + var diff = ne.lng() - c.lng() + + var center = new google.maps.LatLng(c.lat(), (c.lng() + (0.33 * diff))) + + self.map.setCenter(center) + } + + + + +} \ No newline at end of file diff --git a/client/lib/bootstrap/bootstrap.less b/client/lib/bootstrap/bootstrap.less new file mode 100644 index 0000000..7a73786 --- /dev/null +++ b/client/lib/bootstrap/bootstrap.less @@ -0,0 +1,57 @@ +@import "variables.import.less"; +// because of the order less handles it's imports this variable needs to be redefined +@bootstrap3-less-root: "/packages/bootstrap3-less"; + +// Import Bootstrap +// --------------------------------------- +// (This is the full set of package files, include only what you need) + +// Reset +@import "@{bootstrap3-less-root}/lib/less/normalize.import.less"; +@import "@{bootstrap3-less-root}/lib/less/print.import.less"; + +// Core CSS +@import "@{bootstrap3-less-root}/lib/less/scaffolding.import.less"; +@import "@{bootstrap3-less-root}/lib/less/type.import.less"; +@import "@{bootstrap3-less-root}/lib/less/code.import.less"; +@import "@{bootstrap3-less-root}/lib/less/grid.import.less"; +@import "@{bootstrap3-less-root}/lib/less/tables.import.less"; +@import "@{bootstrap3-less-root}/lib/less/forms.import.less"; +@import "@{bootstrap3-less-root}/lib/less/buttons.import.less"; + +// Components +@import "@{bootstrap3-less-root}/lib/less/component-animations.import.less"; +@import "@{bootstrap3-less-root}/lib/less/glyphicons.import.less"; +@import "@{bootstrap3-less-root}/lib/less/dropdowns.import.less"; +@import "@{bootstrap3-less-root}/lib/less/button-groups.import.less"; +@import "@{bootstrap3-less-root}/lib/less/input-groups.import.less"; +@import "@{bootstrap3-less-root}/lib/less/navs.import.less"; +@import "@{bootstrap3-less-root}/lib/less/navbar.import.less"; +@import "@{bootstrap3-less-root}/lib/less/breadcrumbs.import.less"; +@import "@{bootstrap3-less-root}/lib/less/pagination.import.less"; +@import "@{bootstrap3-less-root}/lib/less/pager.import.less"; +@import "@{bootstrap3-less-root}/lib/less/labels.import.less"; +@import "@{bootstrap3-less-root}/lib/less/badges.import.less"; +@import "@{bootstrap3-less-root}/lib/less/jumbotron.import.less"; +@import "@{bootstrap3-less-root}/lib/less/thumbnails.import.less"; +@import "@{bootstrap3-less-root}/lib/less/alerts.import.less"; +@import "@{bootstrap3-less-root}/lib/less/progress-bars.import.less"; +@import "@{bootstrap3-less-root}/lib/less/media.import.less"; +@import "@{bootstrap3-less-root}/lib/less/list-group.import.less"; +@import "@{bootstrap3-less-root}/lib/less/panels.import.less"; +@import "@{bootstrap3-less-root}/lib/less/wells.import.less"; +@import "@{bootstrap3-less-root}/lib/less/close.import.less"; + +// Components w/ JavaScript +@import "@{bootstrap3-less-root}/lib/less/modals.import.less"; +@import "@{bootstrap3-less-root}/lib/less/tooltip.import.less"; +@import "@{bootstrap3-less-root}/lib/less/popovers.import.less"; +@import "@{bootstrap3-less-root}/lib/less/carousel.import.less"; + +// Utility classes +@import "@{bootstrap3-less-root}/lib/less/utilities.import.less"; +@import "@{bootstrap3-less-root}/lib/less/responsive-utilities.import.less"; + +// @import "material/less/material.import.less"; +// @import "material/less/ripples.import.less"; + diff --git a/client/lib/bootstrap/material/less/alerts.import.less b/client/lib/bootstrap/material/less/alerts.import.less new file mode 100644 index 0000000..97b8347 --- /dev/null +++ b/client/lib/bootstrap/material/less/alerts.import.less @@ -0,0 +1,18 @@ +// main: material.less + +.alert { + border: 0px; + border-radius: 0; + a, .alert-link { + color: #FFFFFF; + } + .variations(~"", background-color, #FFFFFF); + &-info, &-danger, &-warning, &-success { + color: #FFFFFF; + } + &-default { + a, .alert-link { + color: #000000; + } + } +} diff --git a/client/lib/bootstrap/material/less/animations.import.less b/client/lib/bootstrap/material/less/animations.import.less new file mode 100644 index 0000000..3bed5ec --- /dev/null +++ b/client/lib/bootstrap/material/less/animations.import.less @@ -0,0 +1,44 @@ +// main: material.less + +@-webkit-keyframes input-highlight { + 0% { + left: 20%; + width: 20%; + } + 99% { + width: 0; + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} +@-moz-keyframes input-highlight { + 0% { + left: 20%; + width: 20%; + } + 99% { + width: 0; + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes input-highlight { + 0% { + left: 20%; + width: 20%; + } + 99% { + width: 0; + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} diff --git a/client/lib/bootstrap/material/less/buttons.import.less b/client/lib/bootstrap/material/less/buttons.import.less new file mode 100644 index 0000000..19f2dbd --- /dev/null +++ b/client/lib/bootstrap/material/less/buttons.import.less @@ -0,0 +1,107 @@ +// main: material.less + +.btn-shadow() { + .shadow-z-2(); + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + &:active:not(.btn-link) { + .shadow-z-3(); + } +} + +.btn { + position: relative; + padding: 8px 30px; + border: 0; + margin: 10px 1px; + + cursor: pointer; + border-radius: 4px; + text-transform: uppercase; + text-decoration: none; + color: @darkbg-text; + + &:hover { + color: @darkbg-text; + } + &:hover:not(.btn-link) { + .shadow-z-2-hover(); + } + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + &:active:not(.btn-link) { + .shadow-z-3(); + } + outline: none !important; + + .variations(~":not(.btn-link)", background-color, @btn-default); + +} +// This is needed to style buttons which has not a variation suffix (they must stiled as btn-default) +.btn-link, .btn:not([class^="btn btn-"]), .btn-default { + color: @lightbg-text; + &:hover { + color: @lightbg-text; + } +} +.btn:not([class^="btn btn-"]), .btn-default { + &:hover { + background-color: rgba(255,255,255,0.5); + } +} + +.btn-raised { + .btn-shadow(); +} + +.open > .dropdown-toggle.btn { + .variations(~"", background-color, @btn-default); +} +.btn-flat { + box-shadow: none !important; + &.btn-default:hover { + background: none; + } +} + +.btn-group, .btn-group-vertical { + position: relative; + border-radius: 4px; + margin: 10px 1px; + + .btn-shadow(); + &.open .dropdown-toggle { + box-shadow: none; + } + &.btn-group-raised { + .btn-shadow(); + } + .btn, .btn:active, .btn-group { + box-shadow: none !important; + margin: 0; + } + .btn:active .caret { margin-left: -1px; } +} +.btn-group-flat { + box-shadow: none !important; +} + +// Floating Action Button (FAB) + +.btn-fab { + margin: 0; + padding: 15px; + font-size: 26px; + width: 56px; + height: 56px; + &, &:hover { + .variations(~"", background-color, transparent); + } + &, .ripple-wrapper { + border-radius: 100%; + } + &.btn-mini { + width: 40px; + height: 40px; + padding: 13px; + font-size: 15px; + } +} diff --git a/client/lib/bootstrap/material/less/checkboxes.import.less b/client/lib/bootstrap/material/less/checkboxes.import.less new file mode 100644 index 0000000..ca5fc8a --- /dev/null +++ b/client/lib/bootstrap/material/less/checkboxes.import.less @@ -0,0 +1,186 @@ +// main: material.less + +.form-horizontal .checkbox { + padding-top: 15px; +} +.checkbox { + transform: rotate(0deg); + label { + cursor: pointer; + padding-left: 45px; + position: relative; + span { + display: block; + position: absolute; + left: 0px; + transition-duration: 0.2s; + } + .check:after { + display: block; + position: absolute; + content: ""; + background-color: @lightbg-text; + left: -5px; + top: -15px; + height: 50px; + width: 50px; + border-radius: 100%; + z-index: 1; + opacity: 0; + margin: 0; + } + .check:before { + display: block; + content: ""; + border: 2px solid @lightbg-text; + height: 20px; + width: 20px; + .transition-delay(0.2s); + } + } + + // Variations + .variations(~" .check", color, @success); + + // Hide native checkbox + input[type=checkbox] { display: none; } + + input[type=checkbox] ~ .check:before { + position: absolute; + top: 2px; + left: 11px; + width: 18px; + height: 18px; + border: solid 2px; + border-color: #5a5a5a; + .animation(uncheck 300ms ease-out forwards); + } + + input[type=checkbox]:checked ~ .check:before { + .animation(check 300ms ease-out forwards); + } + + // Ripple effect on click + input[type=checkbox]:not(:checked) ~ .check:after { + .animation(rippleOff 500ms); + } + input[type=checkbox]:checked ~ .check:after { + .animation(rippleOn 500ms); + } + + // Style for disabled inputs + input[type=checkbox][disabled]:not(:checked) ~ .check:before { + opacity: 0.5; + } + input[type=checkbox][disabled] ~ .check:after { + background-color: @lightbg-text; + transform: rotate(-45deg); + } + + .variations(~" input[type=checkbox]:checked ~ .check:after", background-color, @success); +} + + +@-webkit-keyframes uncheck { + 0% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + transform: rotate(45deg); + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 100% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} + +.keyframe-check() { + 100% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-left: transparent; + border-top-color: transparent; + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + transform: rotate(45deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 0% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} +@-webkit-keyframes check {.keyframe-check()} +@-moz-keyframes check {.keyframe-check()} +@-ms-keyframes check {.keyframe-check()} +@-o-keyframes check {.keyframe-check()} +@keyframes check {.keyframe-check()} + +.ripple() { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +}; + +// @-webkit-keyframes rippleOn {.ripple()} +// @-moz-keyframes rippleOn {.ripple()} +// @-ms-keyframes rippleOn {.ripple()} +// @-o-keyframes rippleOn {.ripple()} +// @keyframes rippleOn {.ripple()} + +// @-webkit-keyframes rippleOff {.ripple()} +// @-moz-keyframes rippleOff {.ripple()} +// @-ms-keyframes rippleOn {.ripple()} +// @-o-keyframes rippleOff {.ripple()} +// @keyframes rippleOff {.ripple()} diff --git a/client/lib/bootstrap/material/less/icons.import.less b/client/lib/bootstrap/material/less/icons.import.less new file mode 100644 index 0000000..9a473de --- /dev/null +++ b/client/lib/bootstrap/material/less/icons.import.less @@ -0,0 +1,5 @@ +// main: material.less + +.icon { + .variations(~"", color, @lightbg-text); +} diff --git a/client/lib/bootstrap/material/less/inputs.import.less b/client/lib/bootstrap/material/less/inputs.import.less new file mode 100644 index 0000000..3514967 --- /dev/null +++ b/client/lib/bootstrap/material/less/inputs.import.less @@ -0,0 +1,218 @@ +// main: material.less + +fieldset[disabled] .form-control, .form-control-wrapper .form-control, .form-control { + &, &:focus, &.focus { + &:not(textarea):not(select) { + height: 28px; + } + padding: 0; + float: none; + border: 0; + box-shadow: none; + border-radius: 0; + background: transparent; + border-bottom: 1px solid #757575; + &:disabled { + border-style: dashed; + } + } +} +select.form-control { + height: 23px; +} +select[multiple].form-control { + &, &:focus, &.focus { + height: 85px; + } +} + +.form-control-wrapper { + position: relative; + + .form-control:focus, .form-control.focus { + outline: none; + } + + .floating-label { + color: #7E7E7E; + font-size: 14px; + position: absolute; + pointer-events: none; + left: 0px; + top: 5px; + transition: 0.2s ease all; + opacity: 0; + } + .form-control:not(.empty) ~ .floating-label { + top: -10px; + font-size: 10px; + opacity: 1; + } + .form-control:focus:invalid ~ .floating-label, .form-control.focus:invalid ~ .floating-label { + color: @input-danger; + } + .form-control:focus ~ .material-input:after, .form-control.focus ~ .material-input:after { + background-color: @input-default; + } + .form-control:focus:invalid ~ .material-input, .form-control.focus:invalid ~ .material-input { + &:before, &:after { + background-color: @input-danger; + } + } + .form-control.empty ~ .floating-label { + opacity: 1; + } + .material-input:before { + position: absolute; + content: ""; + width: 100%; + left: 0; + height: 2px; + background-color: @input-default; + bottom: -1px; + transform: scaleX(0); + transition: transform 0s; + } + .form-control:focus ~ .material-input:before, .form-control.focus ~ .material-input:before { + transform: scaleX(1); + transition: transform 0.2s ease-out; + } + .material-input:after { + content: ""; + position: absolute; + height: 18px; + width: 100px; + margin-top: -1px; + top: 7px; + left: 0; + pointer-events: none; + opacity: 0.9; + transform-origin: left; + } + .input-lg ~ .material-input:after { + height: 26px; + } + textarea { resize: none; } + textarea ~ .form-control-highlight { + margin-top: -11px; + } + + /* active state */ + .form-control:focus ~ .material-input:after, .form-control.focus ~ .material-input:after { + -webkit-animation: input-highlight 0.3s ease; + animation: input-highlight 0.3s ease; + -webkit-animation-fill-mode: forwards; + animation-fill-mode: forwards; + opacity: 0; + } + + select ~ .material-input:after { + display: none; + } + +} + +.form-group { + &.has-warning { + .material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after { + background: @input-warning; + } + .control-label, input.form-control:not(.empty) ~ .floating-label { + color: @input-warning; + } + } + &.has-error { + .material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after { + background: @input-danger; + } + .control-label, input.form-control:not(.empty) ~ .floating-label { + color: @input-danger; + } + } + &.has-success { + .material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after { + background: @input-success; + } + .control-label, input.form-control:not(.empty) ~ .floating-label { + color: @input-success; + } + } + &.has-info { + .material-input:before, input.form-control:focus ~ .material-input:after, input.form-control.focus ~ .material-input:after { + background: @input-info; + } + .control-label, input.form-control:not(.empty) ~ .floating-label { + color: @input-info; + } + } + .variations(~" .material-input:before", background-color, @indigo); + .variations(~" input.form-control:focus ~ .material-input:after", background-color, @indigo); + .variations(~" input.form-control.focus ~ .material-input:after", background-color, @indigo); + .variations(~" .control-label", color, @lightbg-text); + .variations(~" input.form-control:not(.empty) ~ .floating-label", color, @indigo); + +} + +.input-group { + .form-control-wrapper { + .form-control { + float: none; + } + margin-right: 5px; + margin-left: 5px; + bottom: -10px; + } + .input-group-addon { + border: 0; + } + .input-group-btn .btn { + border-radius: 4px; + } +} + +select.form-control { + border: 0; + box-shadow: none; + border-bottom: 1px solid #757575; + border-radius: 0; + &:focus, &.focus { + box-shadow: none; + border-color: #757575; + } +} + + +.keyframe-input-highlight() { + 0% { + left: 20%; + transform: scaleX(20%); + } + 99% { + transform: scaleX(0); + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@-webkit-keyframes input-highlight {.keyframe-input-highlight()} +@-moz-keyframes input-highlight {.keyframe-input-highlight()} +@-ms-keyframes input-highlight {.keyframe-input-highlight()} +@-o-keyframes input-highlight {.keyframe-input-highlight()} +@keyframes input-highlight {.keyframe-input-highlight()} + + +// Input files (kinda hack) +.form-control-wrapper input[type=file] { + opacity: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; +} diff --git a/client/lib/bootstrap/material/less/lists.import.less b/client/lib/bootstrap/material/less/lists.import.less new file mode 100644 index 0000000..e0554bf --- /dev/null +++ b/client/lib/bootstrap/material/less/lists.import.less @@ -0,0 +1,84 @@ +// main: material.less +.list-group { + border-radius: 0; + .list-group-item { + background-color: transparent; + overflow: hidden; + border: 0; + border-radius: 0; + padding: 0 16px; + .row-picture, .row-action-primary { + float: left; + display: inline-block; + padding-right: 16px; + img, i, label { + display: block; + width: 56px; + height: 56px; + } + img { + background: rgba(0,0,0,0.1); + padding: 1px; + &.circle { + border-radius: 100%; + } + } + i { + background: rgba(0,0,0,0.25); + border-radius: 100%; + text-align: center; + line-height: 56px; + font-size: 20px; + color: white; + } + label { + margin-left: 7px; + margin-right: -7px; + margin-top: 5px; + margin-bottom: -5px; + } + } + .row-content { + display: inline-block; + width: ~"calc(100% - 92px)"; + min-height: 66px; + .action-secondary { + position: absolute; + right: 16px; + top: 16px; + i { + font-size: 20px; + color: rgba(0,0,0,0.25); + cursor: pointer; + } + } + .action-secondary ~ * { + max-width: ~"calc(100% - 30px)"; + } + .least-content { + position: absolute; + right: 16px; + top: 0px; + color: rgba(0,0,0,0.54); + font-size: 14px; + } + } + .list-group-item-heading { + color: rgba(0, 0, 0, 0.77); + font-size: 20px; + line-height: 29px; + } + } + .list-group-separator { + clear: both; + overflow: hidden; + margin-top: 10px; + margin-bottom: 10px; + &:before { + content: ""; + width: ~"calc(100% - 90px)"; + border-bottom: 1px solid rgba(0,0,0,0.1); + float: right; + } + } +} diff --git a/client/lib/bootstrap/material/less/material-wfont.import.less b/client/lib/bootstrap/material/less/material-wfont.import.less new file mode 100644 index 0000000..8109c00 --- /dev/null +++ b/client/lib/bootstrap/material/less/material-wfont.import.less @@ -0,0 +1,3 @@ +// out: ../css-compiled/material-wfont.css +@import url(//fonts.googleapis.com/css?family=Roboto+Condensed:300italic,400italic,700italic,400,700,300|Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic); +@import "material.import.less"; diff --git a/client/lib/bootstrap/material/less/material.import.less b/client/lib/bootstrap/material/less/material.import.less new file mode 100644 index 0000000..9578178 --- /dev/null +++ b/client/lib/bootstrap/material/less/material.import.less @@ -0,0 +1,112 @@ +// out: ../css-compiled/material.css +// Material Theme 0.0.1 +// ----------------------------------------------------- + +@import "variables.import.less"; +@import "mixins.import.less"; +@import "prefixer.import.less"; +@import "animations.import.less"; +@import "shadows.import.less"; + +body { + background-color: #EEEEEE; + &.inverse { + background: #333333; + &, .form-control { + color: @darkbg-text; + } + } +} + +body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +// Well and Jumbotrons +@import "welljumbo.import.less"; + +// Buttons +@import "buttons.import.less"; + +// Checkboxes +@import "checkboxes.import.less"; + +// Radios +@import "radios.import.less"; + +// Text inputs +@import "inputs.import.less"; + +legend { + border-bottom: 0; +} + +.modal-content { + .shadow-z-2(); + border-radius: 0; + border: 0; + .modal-header { + border-bottom: 0; + } + .modal-footer { + border-top: 0; + .btn+.btn { + margin-bottom: 10px; + } + } +} + +// Lists +@import "lists.import.less"; + +// Navbar +@import "navbar.import.less"; + +.dropdown-menu { + border: 0; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); + .divider { + background-color: rgba(229, 229, 229, 0.12); + } + li { + overflow: hidden; + position: relative; + a:hover { + background-color: transparent; + } + } +} + +// Alerts +@import "alerts.import.less"; + +// Progress bar +@import "progress.import.less"; + +// Typography +.text-warning { + color: @btn-warning; +} +.text-primary { + color: @btn-primary; +} +.text-danger { + color: @btn-danger; +} +.text-success { + color: @btn-success; +} +.text-info { + color: @btn-info; +} + +@import "tabs.import.less"; + +@import "popups.import.less"; + +@import "icons.import.less"; + + +// External plugins +@import "plugin-snackbarjs.import.less"; +@import "plugin-nouislider.import.less"; diff --git a/client/lib/bootstrap/material/less/mixins.import.less b/client/lib/bootstrap/material/less/mixins.import.less new file mode 100644 index 0000000..a6466eb --- /dev/null +++ b/client/lib/bootstrap/material/less/mixins.import.less @@ -0,0 +1,84 @@ +// main: material.less + +// usage: .variations(~" .check", color, transparent); +.variations(@extra, @property, @default) { + // Bootstrap shades + &@{extra}, &-default@{extra} { + @{property}: @default; + } + &-primary@{extra} { + @{property}: @primary; + } + &-success@{extra} { + @{property}: @success; + } + &-info@{extra} { + @{property}: @info; + } + &-warning@{extra} { + @{property}: @warning; + } + &-danger@{extra} { + @{property}: @danger; + } + // Material shades + &-material-red@{extra} { + @{property}: @red; + } + &-material-pink@{extra} { + @{property}: @pink; + } + &-material-purple@{extra} { + @{property}: @purple; + } + &-material-deeppurple@{extra} { + @{property}: @deeppurple; + } + &-material-indigo@{extra} { + @{property}: @indigo; + } + &-material-lightblue@{extra} { + @{property}: @lightblue; + } + &-material-cyan@{extra} { + @{property}: @cyan; + } + &-material-teal@{extra} { + @{property}: @teal; + } + &-material-lightgreen@{extra} { + @{property}: @lightgreen; + } + &-material-lime@{extra} { + @{property}: @lime; + } + &-material-lightyellow@{extra} { + @{property}: @lightyellow; + } + &-material-orange@{extra} { + @{property}: @orange; + } + &-material-deeporange@{extra} { + @{property}: @deeporange; + } + &-material-grey@{extra} { + @{property}: @grey; + } + &-material-bluegrey@{extra} { + @{property}: @bluegrey; + } + &-material-brown@{extra} { + @{property}: @brown; + } + &-material-lightgrey@{extra} { + @{property}: @lightgrey; + } + &-material-black@{extra} { + @{property}: @black; + } + &-material-white@{extra} { + @{property}: @white; + } +} + +@all-variations: ~"-default, -primary, -info, -success, -warning, -danger"; diff --git a/client/lib/bootstrap/material/less/navbar.import.less b/client/lib/bootstrap/material/less/navbar.import.less new file mode 100644 index 0000000..70c7ba4 --- /dev/null +++ b/client/lib/bootstrap/material/less/navbar.import.less @@ -0,0 +1,205 @@ +// main: material.less + +.navbar { + background-color: @navbar-default-bg; + border: 0; + border-radius: 0; + + .navbar-brand { + position: relative; + height: 60px; + line-height: 30px; + color: @navbar-brand-color; + &:hover, + &:focus { + color: @navbar-brand-color; + background-color: transparent; + } + } + + .navbar-text { + color: @navbar-color; + } + + .navbar-nav { + > li > a { + color: @navbar-link-color; + padding-top: 20px; + padding-bottom: 20px; + + &:hover, + &:focus { + color: @navbar-link-hover-color; + background-color: @navbar-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-link-active-color; + background-color: @navbar-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-link-disabled-color; + background-color: @navbar-link-disabled-bg; + } + } + } + + // Darken the responsive nav toggle + .navbar-toggle { + border-color: @navbar-toggle-border-color; + &:hover, + &:focus { + background-color: @navbar-toggle-hover-bg; + } + .icon-bar { + background-color: @navbar-toggle-icon-bar-bg; + } + } + + .navbar-collapse, + .navbar-form { + border-color: rgba(0,0,0,0.1); + } + + // Dropdowns + .navbar-nav { + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-link-active-bg; + color: @navbar-link-active-color; + } + } + + @media (max-width: 767px) { + // Dropdowns get custom display + .open .dropdown-menu { + > .dropdown-header { + border: 0; + color: darken(@navbar-link-color, 17%) + } + .divider { + background-color: @navbar-border; + } + > li > a { + color: @navbar-link-color; + &:hover, + &:focus { + color: @navbar-link-hover-color; + background-color: @navbar-link-hover-bg; + } + } + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-link-active-color; + background-color: @navbar-link-active-bg; + } + } + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-link-disabled-color; + background-color: @navbar-link-disabled-bg; + } + } + } + } + } + + .navbar-link { + color: @navbar-link-color; + &:hover { + color: @navbar-link-hover-color; + } + } + + .btn-link { + color: @navbar-link-color; + &:hover, + &:focus { + color: @navbar-link-hover-color; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @navbar-link-disabled-color; + } + } + } + + .navbar-form { + .form-control-wrapper .form-control, .form-control { + border-color: @navbar-border; + color: @navbar-border; + } + .form-control-wrapper { + .material-input:before, input:focus ~ .material-input:after { + background-color: @navbar-border; + } + } + ::-webkit-input-placeholder { color: @navbar-border; } + :-moz-placeholder { color: @navbar-border; }; + ::-moz-placeholder { color: @navbar-border; }; + :-ms-input-placeholder { color: @navbar-border; }; + } + + .variations(~"", background-color, @primary); + &-inverse { + background-color: @indigo; + } + &-material-white { + background-color: #FFF; + .navbar-brand, .navbar-brand:hover, .navbar-brand:focus { + color: @lightbg-text; + } + .navbar-nav { + & > li > a { + color: @lightbg-text; + + &:hover, + &:focus { + color: @lightbg-text; + background-color: @navbar-link-hover-bg; + } + } + & > .active > a { + &, + &:hover, + &:focus { + color: @lightbg-text; + background-color: @navbar-link-active-bg; + } + } + & > .disabled > a { + &, + &:hover, + &:focus { + color: @lightbg-text; + background-color: @navbar-link-disabled-bg; + } + } + + & > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-link-active-bg; + color: @lightbg-text; + } + } + + } + } +} diff --git a/client/lib/bootstrap/material/less/plugin-nouislider.import.less b/client/lib/bootstrap/material/less/plugin-nouislider.import.less new file mode 100644 index 0000000..1b168ad --- /dev/null +++ b/client/lib/bootstrap/material/less/plugin-nouislider.import.less @@ -0,0 +1,98 @@ +// main: material.less +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -webkit-user-select: none; + -ms-touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-base { + width: 100%; + height: 100%; + position: relative; +} +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} +.noUi-handle { + position: relative; + z-index: 1; + box-sizing: border-box; + -webkit-box-sizing: border-box; +} +.noUi-stacking .noUi-handle { + z-index: 10; +} +.noUi-stacking + .noUi-origin { + *z-index: -1; +} +.noUi-state-tap .noUi-origin { + -webkit-transition: left 0.3s, top 0.3s; + transition: left 0.3s, top 0.3s; +} +.noUi-state-drag * { + cursor: inherit !important; +} +.noUi-horizontal { + height: 10px; +} +.noUi-horizontal .noUi-handle { + box-sizing: border-box; + width: 12px; + height: 12px; + left: -10px; + top: -5px; +} +.noUi-horizontal.noUi-extended { + padding: 0 15px; +} +.noUi-horizontal.noUi-extended .noUi-origin { + right: -15px; +} +.noUi-background { + height: 2px; + margin: 20px 0; +} +.noUi-origin { + border-radius: 0; + height: 2px; + background: #c8c8c8; + &[style^="left: 0"] .noUi-handle { + background-color: #fff; + border: 2px solid #c8c8c8; + &:active { + border-width: 1px; + } + } +} +.noUi-target { + border-radius: 2px; +} +.noUi-handle { + border-radius: 100%; + cursor: default; + transition: all 0.2s ease-out; + border: 1px solid; +} +.noUi-horizontal .noUi-handle:active { + transform: scale(2.5); +} +[disabled].noUi-slider{ + opacity: 0.5; +} +[disabled] .noUi-handle { + cursor: not-allowed; +} + +.slider { + .variations(~" .noUi-handle", background-color, @primary); + .variations(~" .noUi-handle", border-color, @primary); + .variations(~"", background-color, @primary); +} diff --git a/client/lib/bootstrap/material/less/plugin-snackbarjs.import.less b/client/lib/bootstrap/material/less/plugin-snackbarjs.import.less new file mode 100644 index 0000000..243582a --- /dev/null +++ b/client/lib/bootstrap/material/less/plugin-snackbarjs.import.less @@ -0,0 +1,42 @@ +// main: material.less + +// Support for SnackbarJS plugin +// https://github.com/FezVrasta/snackbarjs + +.snackbar { + // Style + background-color: #323232; + color: @darkbg-text; + font-size: 14px; + border-radius: 2px; + .shadow-z-1; + + // Animation + height: 0; + -moz-transition: -moz-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + -moz-transform: translateY(200%); + -webkit-transform: translateY(200%); + transform: translateY(200%); +} + +.snackbar.snackbar-opened { + // Style + padding: 14px 15px; + margin-bottom: 20px; + + // Animation + height: auto; + -moz-transition: -moz-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s; + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s; + -moz-transform: none; + -webkit-transform: none; + transform: none; +} + +// Variations +.snackbar.toast { + border-radius: 200px; +} diff --git a/client/lib/bootstrap/material/less/popups.import.less b/client/lib/bootstrap/material/less/popups.import.less new file mode 100644 index 0000000..433aae4 --- /dev/null +++ b/client/lib/bootstrap/material/less/popups.import.less @@ -0,0 +1,27 @@ +// main: material.less + +.popover, .tooltip-inner { + background: #323232; + color: #FFF; + border-radius: 2px; + +} + +.tooltip, .tooltip.in { + opacity: 1; +} + +.popover, .tooltip { + &.left .arrow:after, &.left .tooltip-arrow { + border-left-color: #323232; + } + &.right .arrow:after, &.right .tooltip-arrow { + border-right-color: #323232; + } + &.top .arrow:after, &.top .tooltip-arrow { + border-top-color: #323232; + } + &.bottom .arrow:after, &.bottom .tooltip-arrow { + border-bottom-color: #323232; + } +} diff --git a/client/lib/bootstrap/material/less/prefixer.import.less b/client/lib/bootstrap/material/less/prefixer.import.less new file mode 100644 index 0000000..39b3a94 --- /dev/null +++ b/client/lib/bootstrap/material/less/prefixer.import.less @@ -0,0 +1,371 @@ +// main: material + +//--------------------------------------------------- +// LESS Prefixer +//--------------------------------------------------- +// +// All of the CSS3 fun, none of the prefixes! +// +// As a rule, you can use the CSS properties you +// would expect just by adding a '.': +// +// box-shadow => .box-shadow(@args) +// +// Also, when shorthand is available, arguments are +// not parameterized. Learn CSS, not LESS Prefixer. +// +// ------------------------------------------------- +// TABLE OF CONTENTS +// (*) denotes a syntax-sugar helper +// ------------------------------------------------- +// +// .animation(@args) +// .animation-delay(@delay) +// .animation-direction(@direction) +// .animation-duration(@duration) +// .animation-fill-mode(@mode) +// .animation-iteration-count(@count) +// .animation-name(@name) +// .animation-play-state(@state) +// .animation-timing-function(@function) +// .background-size(@args) +// .border-radius(@args) +// .box-shadow(@args) +// .inner-shadow(@args) * +// .box-sizing(@args) +// .border-box() * +// .content-box() * +// .columns(@args) +// .column-count(@count) +// .column-gap(@gap) +// .column-rule(@args) +// .column-width(@width) +// .gradient(@default,@start,@stop) * +// .linear-gradient-top(@default,@color1,@stop1,@color2,@stop2,[@color3,@stop3,@color4,@stop4])* +// .linear-gradient-left(@default,@color1,@stop1,@color2,@stop2,[@color3,@stop3,@color4,@stop4])* +// .opacity(@factor) +// .transform(@args) +// .transform-origin(@args) +// .transform-style(@style) +// .rotate(@deg) +// .scale(@factor) +// .translate(@x,@y) +// .translate3d(@x,@y,@z) +// .translateHardware(@x,@y) * +// .text-shadow(@args) +// .transition(@args) +// .transition-delay(@delay) +// .transition-duration(@duration) +// .transition-property(@property) +// .transition-timing-function(@function) +// +// +// +// Credit to LESS Elements for the motivation and +// to CSS3Please.com for implementation. +// +// Copyright (c) 2012 Joel Sutherland +// MIT Licensed: +// http://www.opensource.org/licenses/mit-license.php +// +//--------------------------------------------------- + + +// Animation + +.animation(@args) { + -webkit-animation: @args; + -moz-animation: @args; + -ms-animation: @args; + -o-animation: @args; + animation: @args; +} +.animation-delay(@delay) { + -webkit-animation-delay: @delay; + -moz-animation-delay: @delay; + -ms-animation-delay: @delay; + -o-animation-delay: @delay; + animation-delay: @delay; +} +.animation-direction(@direction) { + -webkit-animation-direction: @direction; + -moz-animation-direction: @direction; + -ms-animation-direction: @direction; + -o-animation-direction: @direction; +} +.animation-duration(@duration) { + -webkit-animation-duration: @duration; + -moz-animation-duration: @duration; + -ms-animation-duration: @duration; + -o-animation-duration: @duration; +} +.animation-fill-mode(@mode) { + -webkit-animation-fill-mode: @mode; + -moz-animation-fill-mode: @mode; + -ms-animation-fill-mode: @mode; + -o-animation-fill-mode: @mode; + animation-fill-mode: @mode; +} +.animation-iteration-count(@count) { + -webkit-animation-iteration-count: @count; + -moz-animation-iteration-count: @count; + -ms-animation-iteration-count: @count; + -o-animation-iteration-count: @count; + animation-iteration-count: @count; +} +.animation-name(@name) { + -webkit-animation-name: @name; + -moz-animation-name: @name; + -ms-animation-name: @name; + -o-animation-name: @name; + animation-name: @name; +} +.animation-play-state(@state) { + -webkit-animation-play-state: @state; + -moz-animation-play-state: @state; + -ms-animation-play-state: @state; + -o-animation-play-state: @state; + animation-play-state: @state; +} +.animation-timing-function(@function) { + -webkit-animation-timing-function: @function; + -moz-animation-timing-function: @function; + -ms-animation-timing-function: @function; + -o-animation-timing-function: @function; + animation-timing-function: @function; +} + + +// Background Size + +.background-size(@args) { + -webkit-background-size: @args; + background-size: @args; +} + + +// Border Radius + +.border-radius(@args) { + -webkit-border-radius: @args; + border-radius: @args; + + background-clip: padding-box; +} + + +// Box Shadows + +.box-shadow(@args) { + -webkit-box-shadow: @args; + box-shadow: @args; +} +.inner-shadow(@args) { + .box-shadow(inset @args); +} + + +// Box Sizing + +.box-sizing(@args) { + -webkit-box-sizing: @args; + -moz-box-sizing: @args; + box-sizing: @args; +} +.border-box(){ + .box-sizing(border-box); +} +.content-box(){ + .box-sizing(content-box); +} + + +// Columns + +.columns(@args) { + -webkit-columns: @args; + -moz-columns: @args; + columns: @args; +} +.column-count(@count) { + -webkit-column-count: @count; + -moz-column-count: @count; + column-count: @count; +} +.column-gap(@gap) { + -webkit-column-gap: @gap; + -moz-column-gap: @gap; + column-gap: @gap; +} +.column-width(@width) { + -webkit-column-width: @width; + -moz-column-width: @width; + column-width: @width; +} +.column-rule(@args) { + -webkit-column-rule: @args; + -moz-column-rule: @args; + column-rule: @args; +} + + +// Gradients + +.gradient(@default: #F5F5F5, @start: #EEE, @stop: #FFF) { + .linear-gradient-top(@default,@start,0%,@stop,100%); +} +.linear-gradient-top(@default,@color1,@stop1,@color2,@stop2) { + background-color: @default; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(@stop1, @color1), color-stop(@stop2 @color2)); + background-image: -webkit-linear-gradient(top, @color1 @stop1, @color2 @stop2); + background-image: -moz-linear-gradient(top, @color1 @stop1, @color2 @stop2); + background-image: -ms-linear-gradient(top, @color1 @stop1, @color2 @stop2); + background-image: -o-linear-gradient(top, @color1 @stop1, @color2 @stop2); + background-image: linear-gradient(top, @color1 @stop1, @color2 @stop2); +} +.linear-gradient-top(@default,@color1,@stop1,@color2,@stop2,@color3,@stop3) { + background-color: @default; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(@stop1, @color1), color-stop(@stop2 @color2), color-stop(@stop3 @color3)); + background-image: -webkit-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: -moz-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: -ms-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: -o-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3); +} +.linear-gradient-top(@default,@color1,@stop1,@color2,@stop2,@color3,@stop3,@color4,@stop4) { + background-color: @default; + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(@stop1, @color1), color-stop(@stop2 @color2), color-stop(@stop3 @color3), color-stop(@stop4 @color4)); + background-image: -webkit-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: -moz-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: -ms-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: -o-linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: linear-gradient(top, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); +} +.linear-gradient-left(@default,@color1,@stop1,@color2,@stop2) { + background-color: @default; + background-image: -webkit-gradient(linear, left top, left top, color-stop(@stop1, @color1), color-stop(@stop2 @color2)); + background-image: -webkit-linear-gradient(left, @color1 @stop1, @color2 @stop2); + background-image: -moz-linear-gradient(left, @color1 @stop1, @color2 @stop2); + background-image: -ms-linear-gradient(left, @color1 @stop1, @color2 @stop2); + background-image: -o-linear-gradient(left, @color1 @stop1, @color2 @stop2); + background-image: linear-gradient(left, @color1 @stop1, @color2 @stop2); +} +.linear-gradient-left(@default,@color1,@stop1,@color2,@stop2,@color3,@stop3) { + background-color: @default; + background-image: -webkit-gradient(linear, left top, left top, color-stop(@stop1, @color1), color-stop(@stop2 @color2), color-stop(@stop3 @color3)); + background-image: -webkit-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: -moz-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: -ms-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: -o-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3); + background-image: linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3); +} +.linear-gradient-left(@default,@color1,@stop1,@color2,@stop2,@color3,@stop3,@color4,@stop4) { + background-color: @default; + background-image: -webkit-gradient(linear, left top, left top, color-stop(@stop1, @color1), color-stop(@stop2 @color2), color-stop(@stop3 @color3), color-stop(@stop4 @color4)); + background-image: -webkit-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: -moz-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: -ms-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: -o-linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); + background-image: linear-gradient(left, @color1 @stop1, @color2 @stop2, @color3 @stop3, @color4 @stop4); +} + + +// Opacity + +.opacity(@factor) { + @iefactor: @factor*100; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=@{iefactor})"; + filter: ~"alpha(opacity=(@{iefactor}))"; + opacity: @factor; +} + + +// Text Shadow + +.text-shadow(@args) { + text-shadow: @args; +} + + +// Transforms + +.transform(@args) { + -webkit-transform: @args; + -moz-transform: @args; + -ms-transform: @args; + -o-transform: @args; + transform: @args; +} +.transform-origin(@args) { + -webkit-transform-origin: @args; + -moz-transform-origin: @args; + -ms-transform-origin: @args; + -o-transform-origin: @args; + transform-origin: @args; +} +.transform-style(@style) { + -webkit-transform-style: @style; + -moz-transform-style: @style; + -ms-transform-style: @style; + -o-transform-style: @style; + transform-style: @style; +} +.rotate(@deg:45deg){ + .transform(rotate(@deg)); +} +.scale(@factor:.5){ + .transform(scale(@factor)); +} +.translate(@x,@y){ + .transform(translate(@x,@y)); +} +.translate3d(@x,@y,@z) { + .transform(translate3d(@x,@y,@z)); +} +.translateHardware(@x,@y) { + .translate(@x,@y); + -webkit-transform: translate3d(@x,@y,0); + -moz-transform: translate3d(@x,@y,0); + -o-transform: translate3d(@x,@y,0); + -ms-transform: translate3d(@x,@y,0); + transform: translate3d(@x,@y,0); +} + + +// Transitions + +.transition(@args:200ms) { + -webkit-transition: @args; + -moz-transition: @args; + -o-transition: @args; + -ms-transition: @args; + transition: @args; +} +.transition-delay(@delay:0) { + -webkit-transition-delay: @delay; + -moz-transition-delay: @delay; + -o-transition-delay: @delay; + -ms-transition-delay: @delay; + transition-delay: @delay; +} +.transition-duration(@duration:200ms) { + -webkit-transition-duration: @duration; + -moz-transition-duration: @duration; + -o-transition-duration: @duration; + -ms-transition-duration: @duration; + transition-duration: @duration; +} +.transition-property(@property:all) { + -webkit-transition-property: @property; + -moz-transition-property: @property; + -o-transition-property: @property; + -ms-transition-property: @property; + transition-property: @property; +} +.transition-timing-function(@function:ease) { + -webkit-transition-timing-function: @function; + -moz-transition-timing-function: @function; + -o-transition-timing-function: @function; + -ms-transition-timing-function: @function; + transition-timing-function: @function; +} diff --git a/client/lib/bootstrap/material/less/progress.import.less b/client/lib/bootstrap/material/less/progress.import.less new file mode 100644 index 0000000..d2f9e1c --- /dev/null +++ b/client/lib/bootstrap/material/less/progress.import.less @@ -0,0 +1,12 @@ +// main: material.less + +.progress { + height: 4px; + border-radius: 0; + box-shadow: none; + background: #c8c8c8; + .progress-bar { + box-shadow: none; + .variations(~"", background-color, @primary); + } +} diff --git a/client/lib/bootstrap/material/less/radios.import.less b/client/lib/bootstrap/material/less/radios.import.less new file mode 100644 index 0000000..806a291 --- /dev/null +++ b/client/lib/bootstrap/material/less/radios.import.less @@ -0,0 +1,97 @@ +// main: material.less + +.form-horizontal .radio { + margin-bottom: 10px; +} +.radio { + label { + cursor: pointer; + padding-left: 45px; + position: relative; + span { + display: block; + position: absolute; + left: 10px; + top: 2px; + transition-duration: 0.2s; + } + .circle { + border: 2px solid @lightbg-text; + height: 15px; + width: 15px; + border-radius: 100%; + } + .check { + height: 15px; + width: 15px; + border-radius: 100%; + background-color: @radio-default; + transform: scale(0); + } + .check:after { + display: block; + position: absolute; + content: ""; + background-color: @lightbg-text; + left: -18px; + top: -18px; + height: 50px; + width: 50px; + border-radius: 100%; + z-index: 1; + opacity: 0; + margin: 0; + transform: scale(1.5); + } + input[type=radio]:not(:checked) ~ .check:after { + .animation(rippleOff 500ms); + } + input[type=radio]:checked ~ .check:after { + .animation(rippleOn 500ms); + } + + } + .variations(~" input[type=radio]:checked ~ .check", background-color, @radio-default); + .variations(~" input[type=radio]:checked ~ .circle", border-color, @radio-default); + + input[type=radio][disabled] ~ .check, + input[type=radio][disabled] ~ .circle { + opacity: 0.5; + } + + input[type=radio] { display: none; } + input[type=radio]:checked ~ .check { + transform: scale(0.55); + } + input[type=radio][disabled] ~ .circle { + border-color: @lightbg-text; + } + input[type=radio][disabled] ~ .check { + background-color: @lightbg-text; + } + +} + +.ripple() { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} + +// @-webkit-keyframes rippleOn {.ripple()} +// @-moz-keyframes rippleOn {.ripple()} +// @-ms-keyframes rippleOn {.ripple()} +// @-o-keyframes rippleOn {.ripple()} +// @keyframes rippleOn {.ripple()} + +// @-webkit-keyframes rippleOff {.ripple()} +// @-moz-keyframes rippleOff {.ripple()} +// @-ms-keyframes rippleOn {.ripple()} +// @-o-keyframes rippleOff {.ripple()} +// @keyframes rippleOff {.ripple()} diff --git a/client/lib/bootstrap/material/less/ripples.import.less b/client/lib/bootstrap/material/less/ripples.import.less new file mode 100644 index 0000000..0f39a55 --- /dev/null +++ b/client/lib/bootstrap/material/less/ripples.import.less @@ -0,0 +1,43 @@ +// out: ../css-compiled/ripples.css + +.withripple { + position: relative; +} +.ripple-wrapper { + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 2px; +} +.ripple { + position: absolute; + width: 20px; + height: 20px; + margin-left: -10px; + margin-top: -10px; + border-radius: 100%; + background-color: rgba(0,0,0,0.05); + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -webkit-transform-origin: 50%; + -ms-transform-origin: 50%; + transform-origin: 50%; + opacity: 0; +} +.ripple.ripple-on { + -webkit-transition: opacity 0.15s ease-in 0s, -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + -ms-transition: opacity 0.15s ease-in 0s, -ms-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + -moz-transition: opacity 0.15s ease-in 0s, -moz-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + opacity: 1 !important; +} +.ripple.ripple-out { + -webkit-transition: opacity 0.1s linear 0s !important; + transition: opacity 0.1s linear 0s !important; + opacity: 0 !important; +} diff --git a/client/lib/bootstrap/material/less/shadows.import.less b/client/lib/bootstrap/material/less/shadows.import.less new file mode 100644 index 0000000..5506d29 --- /dev/null +++ b/client/lib/bootstrap/material/less/shadows.import.less @@ -0,0 +1,31 @@ +// main: material.less + + +.shadow-z-1 { + box-shadow: 0 1px 3px rgba(0,0,0, .12), + 0 1px 2px rgba(0,0,0, .24) ; +} + +.shadow-z-2 { + box-shadow: 0 3px 6px rgba(0,0,0, .16), + 0 3px 6px rgba(0,0,0, .23) ; +} +.shadow-z-2-hover { + box-shadow: 0 3px 6px rgba(0,0,0, .20), + 0 3px 6px rgba(0,0,0, .28) ; +} + +.shadow-z-3 { + box-shadow: 0 10px 20px rgba(0,0,0, .19), + 0 6px 6px rgba(0,0,0, .23) ; +} + +.shadow-z-4 { + box-shadow: 0 14px 28px rgba(0,0,0, .25), + 0 10px 10px rgba(0,0,0, .22) ; +} + +.shadow-z-5 { + box-shadow: 0 19px 38px rgba(0,0,0, .30), + 0 15px 12px rgba(0,0,0, .22) ; +} diff --git a/client/lib/bootstrap/material/less/tabs.import.less b/client/lib/bootstrap/material/less/tabs.import.less new file mode 100644 index 0000000..bfe2096 --- /dev/null +++ b/client/lib/bootstrap/material/less/tabs.import.less @@ -0,0 +1,26 @@ +// main: material.less + +.nav-tabs { + background: @navbar-default-bg; + > li { + > a { + color: #FFFFFF; + border: 0; + margin: 0; + &:hover { + background: transparent; + border: 0; + } + } + &.active > a, &.active > a:hover, &.open > a, &.open > a:hover { + background: transparent !important; + border: 0 !important; + color: #FFFFFF !important; + font-weight: 500; + } + &.disabled > a, &.disabled > a:hover { + color: rgba(255,255,255,0.5); + } + } + +} diff --git a/client/lib/bootstrap/material/less/variables.import.less b/client/lib/bootstrap/material/less/variables.import.less new file mode 100644 index 0000000..80089e6 --- /dev/null +++ b/client/lib/bootstrap/material/less/variables.import.less @@ -0,0 +1,103 @@ +// main: material.less + + + +// Material colors palette +@red: #F44336; +@pink: #E91E63; +@purple: #9C27B0; +@deeppurple: #673AB7; +@indigo: #3F51B5; +@lightblue: #03A9F4; +@cyan: #00BCD4; +@teal: #009688; +@lightgreen: #8BC34A; +@lime: #CDDC39; +@lightyellow: #FFEB3B; +@orange: #FF9800; +@deeporange: #FF5722; +@grey: #9E9E9E; +@bluegrey: #607D8B; +@brown: #795548; +@lightgrey: #ECECEC; +@white : #FFF; +@black : #000; + +// Bootstrap shades +@primary: #4285F4; +@success: #0F9D58; +@info: @lightblue; +@warning: @deeporange; +@danger: @red; + +// Typography elements for Material +@darkbg-text: rgba(255,255,255,0.84); +@lightbg-text: rgba(0,0,0,0.84); +@icon-color: rgba(0,0,0,0.5); + + +// Bootstrap variables +@btn-default: transparent; +@btn-default-text: @lightbg-text; + +@btn-primary: @primary; +@btn-primary-text: @darkbg-text; + +@btn-success: @success; +@btn-success-text: @darkbg-text; + +@btn-info: @info; +@btn-info-text: @darkbg-text; + +@btn-warning: @warning; +@btn-warning-text: @darkbg-text; + +@btn-danger: @danger; +@btn-danger-text: @darkbg-text; + +@input-unchecked: rgba(137, 137, 137, 0.3); +@input-checked: rgba(15, 157, 88, 0.3); + +@radio-default: @lightbg-text; +@radio-primary: @primary; +@radio-success: @success; +@radio-info: @info; +@radio-warning: @warning; +@radio-danger: @danger; + +@input-danger: @danger; +@input-default: #5264AE; +@input-warning: @warning; +@input-success: @success; +@input-info: @info; + +@navbar-danger-bg: @danger; +@navbar-inverse-bg: #5264AE; +@navbar-warning-bg: @warning; +@navbar-success-bg: @success; +@navbar-info-bg: @info; +@navbar-default-bg: @primary; +@navbar-color: @darkbg-text; +@navbar-link-color: @darkbg-text; +@navbar-link-hover-color: @darkbg-text; +@navbar-link-hover-bg: transparent; +@navbar-link-active-color: @darkbg-text; +@navbar-link-active-bg: rgba(0,0,0,0.05); +@navbar-link-disabled-color: #E5E5E5; +@navbar-link-disabled-bg: transparent; +@navbar-brand-color: @darkbg-text; +@navbar-toggle-border-color: @darkbg-text; +@navbar-toggle-hover-bg: transparent; +@navbar-toggle-icon-bar-bg: @darkbg-text; +@navbar-border: @darkbg-text; + +@alert-success: @success; +@alert-info: @info; +@alert-warning: @warning; +@alert-danger: @danger; + +@progress-success: @success; +@progress-info: @info; +@progress-warning: @warning; +@progress-danger: @danger; + diff --git a/client/lib/bootstrap/material/less/welljumbo.import.less b/client/lib/bootstrap/material/less/welljumbo.import.less new file mode 100644 index 0000000..c114fde --- /dev/null +++ b/client/lib/bootstrap/material/less/welljumbo.import.less @@ -0,0 +1,66 @@ +// main: material.less +body, .container, .container-fluid { + + .well, .well:not([class^="well well-material-"]) { + &, .form-control { + color: @lightbg-text; + } + .floating-label { + color: #7e7e7e; + } + .form-control { + border-bottom-color: #7e7e7e; + &::-webkit-input-placeholder { + color: #7e7e7e; + } + &::-moz-placeholder { + color: #7e7e7e; + opacity: 1; + } + &:-ms-input-placeholder { + color: #7e7e7e; + } + } + .option, .create { + color: @lightbg-text; + } + } + + [class^="well well-material-"] { + &, .form-control, .floating-label { + color: @darkbg-text; + } + .form-control { + border-bottom-color: @darkbg-text; + &::-webkit-input-placeholder { + color: @darkbg-text; + } + &::-moz-placeholder { + color: @darkbg-text; + opacity: 1; + } + &:-ms-input-placeholder { + color: @darkbg-text; + } + } + // Rule to fix selectize plugin + .option, .create { + color: @lightbg-text; + } + } + + .well, .jumbotron { + + background-color: #fff; + padding: 19px; + margin-bottom: 20px; + .shadow-z-2(); + border-radius: 2px; + border: 0; + p { + font-weight: 300; + } + + .variations(~"", background-color, #FFF); + } +} diff --git a/client/lib/bootstrap/material/scripts/material.js b/client/lib/bootstrap/material/scripts/material.js new file mode 100644 index 0000000..aed81c8 --- /dev/null +++ b/client/lib/bootstrap/material/scripts/material.js @@ -0,0 +1,80 @@ +/* globals ripples */ + +$(function (){ + + ripples.init(".btn:not(.btn-link), .navbar a, .nav-tabs a, .withripple"); + + var initInputs = function() { + // Add fake-checkbox to material checkboxes + $(".checkbox > label > input").not(".bs-material").addClass("bs-material").after(""); + + // Add fake-radio to material radios + $(".radio > label > input").not(".bs-material").addClass("bs-material").after(""); + + // Add elements for material inputs + $("input.form-control, textarea.form-control, select.form-control").not(".bs-material").each( function() { + if ($(this).is(".bs-material")) { return; } + $(this).wrap("
"); + $(this).after(""); + if ($(this).hasClass("floating-label")) { + var placeholder = $(this).attr("placeholder"); + $(this).attr("placeholder", null).removeClass("floating-label"); + $(this).after("
" + placeholder + "
"); + } + if ($(this).is(":empty") || $(this).val() === null || $(this).val() == "undefined" || $(this).val() === "") { + $(this).addClass("empty"); + } + + if ($(this).parent().next().is("[type=file]")) { + $(this).parent().addClass("fileinput"); + var $input = $(this).parent().next().detach(); + $(this).after($input); + } + }); + + }; + initInputs(); + + // Support for "arrive.js" to dynamically detect creation of elements + // include it before this script to take advantage of this feature + // https://github.com/uzairfarooq/arrive/ + if (document.arrive) { + document.arrive("input, textarea, select", function() { + initInputs(); + }); + } + + $(document).on("keyup change", ".form-control", function() { + var self = $(this); + setTimeout(function() { + if (self.val() === "") { + self.addClass("empty"); + } else { + self.removeClass("empty"); + } + }, 1); + }); + $(document) + .on("focus", ".form-control-wrapper.fileinput", function() { + $(this).find("input").addClass("focus"); + }) + .on("blur", ".form-control-wrapper.fileinput", function() { + $(this).find("input").removeClass("focus"); + }) + .on("change", ".form-control-wrapper.fileinput [type=file]", function() { + var value = ""; + $.each($(this)[0].files, function(i, file) { + console.log(file); + value += file.name + ", "; + }); + value = value.substring(0, value.length - 2); + if (value) { + $(this).prev().removeClass("empty"); + } else { + $(this).prev().addClass("empty"); + } + $(this).prev().val(value); + }); + + ripples.initInputs = initInputs; +}); diff --git a/client/lib/bootstrap/material/scripts/ripples.js b/client/lib/bootstrap/material/scripts/ripples.js new file mode 100644 index 0000000..ae32ce4 --- /dev/null +++ b/client/lib/bootstrap/material/scripts/ripples.js @@ -0,0 +1,125 @@ +/* Copyright 2014+, Federico Zivolo, LICENSE at https://github.com/FezVrasta/bootstrap-material-design/blob/master/LICENSE.md */ +/* globals CustomEvent, navigator */ +ripples = { + init : function(withRipple) { + "use strict"; + + // Cross browser matches function + function matchesSelector(dom_element, selector) { + var matches = dom_element.matches || dom_element.matchesSelector || dom_element.webkitMatchesSelector || dom_element.mozMatchesSelector || dom_element.msMatchesSelector || dom_element.oMatchesSelector; + return matches.call(dom_element, selector); + } + + // animations time + var rippleOutTime = 100, + rippleStartTime = 500; + + // Helper to bind events on dynamically created elements + var bind = function(event, selector, callback) { + document.addEventListener(event, function(e) { + var target = (typeof e.detail !== "number") ? e.detail : e.target; + + if (matchesSelector(target, selector)) { + callback(e, target); + } + }); + }; + + var rippleStart = function(e, target) { + + // Init variables + var $rippleWrapper = (matchesSelector(target, ".ripple-wrapper")) ? target : target.parentNode, + $el = $rippleWrapper.parentNode, + $ripple = document.createElement("div"), + elPos = $el.getBoundingClientRect(), + mousePos = {x: e.clientX - elPos.left, y: e.clientY - elPos.top}, + scale = "transform:scale(" + Math.round($rippleWrapper.offsetWidth / 5) + ")", + rippleEnd = new CustomEvent("rippleEnd", {detail: $ripple}), + refreshElementStyle; + + // Set ripple class + $ripple.className = "ripple"; + + // Move ripple to the mouse position + $ripple.setAttribute("style", "left:" + mousePos.x + "px; top:" + mousePos.y + "px;"); + + // Insert new ripple into ripple wrapper + $rippleWrapper.appendChild($ripple); + + // Make sure the ripple has the class applied (ugly hack but it works) + refreshElementStyle = window.getComputedStyle($ripple).opacity; + + // Let other funtions know that this element is animating + $ripple.dataset.animating = 1; + + // Set scale value to ripple and animate it + $ripple.className = "ripple ripple-on"; + $ripple.setAttribute("style", $ripple.getAttribute("style") + ["-ms-" + scale,"-moz-" + scale,"-webkit-" + scale,scale].join(";")); + + // Dirty fix for Firefox... seems like absolute elements inside tags do not trigger the "click" event + if (/firefox|crios|(^(?!.*chrome).*safari)|ip(ad|hone|od)/i.test(navigator.userAgent)) { + $el.click(); + } + + // This function is called when the animation is finished + setTimeout(function() { + + // Let know to other functions that this element has finished the animation + $ripple.dataset.animating = 0; + document.dispatchEvent(rippleEnd); + + }, rippleStartTime); + + }; + + var rippleOut = function($ripple) { + // Clear previous animation + $ripple.className = "ripple ripple-on ripple-out"; + + // Let ripple fade out (with CSS) + setTimeout(function() { + $ripple.remove(); + }, rippleOutTime); + }; + + // Helper, need to know if mouse is up or down + var mouseDown = false; + document.body.onmousedown = function() { + mouseDown = true; + }; + document.body.onmouseup = function() { + mouseDown = false; + }; + + // Append ripple wrapper if not exists already + var rippleInit = function(e, target) { + + if (target.getElementsByClassName("ripple-wrapper").length === 0) { + target.className += " withripple"; + var $rippleWrapper = document.createElement("div"); + $rippleWrapper.className = "ripple-wrapper"; + target.appendChild($rippleWrapper); + rippleStart(e, $rippleWrapper); + } + + }; + + // Events handler + // init RippleJS and start ripple effect on mousedown + bind("mousedown", withRipple, rippleInit); + + // start ripple effect on mousedown + bind("mousedown", ".ripple-wrapper, .ripple-wrapper .ripple", rippleStart); + // if animation ends and user is not holding mouse then destroy the ripple + bind("rippleEnd", ".ripple-wrapper, .ripple-wrapper .ripple", function(e, $ripple) { + rippleOut($ripple); + }); + // Destroy ripple when mouse is not holded anymore if the ripple still exists + bind("mouseup", ".ripple-wrapper, .ripple-wrapper .ripple", function(e, $ripple) { + if ($ripple.dataset.animating != 1) { + rippleOut($ripple); + } + }); + + } +}; diff --git a/client/lib/bootstrap/variables.import.less b/client/lib/bootstrap/variables.import.less new file mode 100644 index 0000000..fd5b95f --- /dev/null +++ b/client/lib/bootstrap/variables.import.less @@ -0,0 +1,21 @@ +// defines where the package is +@bootstrap3-less-root: "/packages/bootstrap3-less"; + +// Import Bootstrap Config Defaults +// --------------------------------------- +// (you need these first, to get the default setup for bootstrap) + + +@import "@{bootstrap3-less-root}/lib/less/variables.import.less"; +@import "@{bootstrap3-less-root}/lib/less/mixins.import.less"; + +// Application Overrides (config) +// --------------------------------------- +// (Here you can override any variables defined in the default set above) + +@icon-font-path: "/fonts/"; // this is reqired or else the fonts won't work + +.btn { + border-radius: 0px !important; +} +@navbar-border-radius : 0px; \ No newline at end of file diff --git a/client/lib/google_location_service.js b/client/lib/google_location_service.js new file mode 100644 index 0000000..a17cd42 --- /dev/null +++ b/client/lib/google_location_service.js @@ -0,0 +1,60 @@ +GoogleLocationService = function(types) { + this._autocomplete = new google.maps.places.AutocompleteService(); + this._geocoder = new google.maps.Geocoder(); + this.types = types +} + +GoogleLocationService.prototype = { + find : function(query, callback){ + this._autocomplete.getPredictions({ + input : query, + types : this.types + }, + function(results, status){ + if(status == google.maps.GeocoderStatus.OK){ + callback(results) + } + } + ) + }, + + geocode : function(address, callback){ + + this._geocoder.geocode({"address": address}, + function(results, status) { + if (status == google.maps.GeocoderStatus.OK) { + callback(results) + } + } + ); + + }, + + geocode_first : function(address, callback){ + this.geocode(address, function(results){ + callback(results[0]) + }) + }, + + + + reverse_geocode : function(address, callback){ + + this._geocoder.geocode({"latLng": address}, + function(results, status) { + if (status == google.maps.GeocoderStatus.OK) { + callback(results) + } + } + ); + + }, + + reverse_geocode_first : function(address, callback){ + this.reverse_geocode(address, function(results){ + callback(results[0]) + }) + } + + +} \ No newline at end of file diff --git a/client/lib/icons.css b/client/lib/icons.css new file mode 100644 index 0000000..345381f --- /dev/null +++ b/client/lib/icons.css @@ -0,0 +1,1499 @@ +@font-face { + font-family: 'Material-Design'; + src:url('/icons/fonts/Material-Design.eot'); + src:url('/icons/fonts/Material-Design.eot') format('embedded-opentype'), + url('/icons/fonts/Material-Design.woff') format('woff'), + url('/icons/fonts/Material-Design.ttf') format('truetype'), + url('/icons/fonts/Material-Design.svg') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="icon-material-"], [class*=" icon-material-"] { + font-family: 'Material-Design'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-material-access-alarms:before { + content: "\e600"; +} +.icon-material-accessibility:before { + content: "\e601"; +} +.icon-material-access-time:before { + content: "\e602"; +} +.icon-material-account-box:before { + content: "\e603"; +} +.icon-material-account-circle:before { + content: "\e604"; +} +.icon-material-adb:before { + content: "\e605"; +} +.icon-material-add:before { + content: "\e606"; +} +.icon-material-add-alarm:before { + content: "\e607"; +} +.icon-material-add-box:before { + content: "\e608"; +} +.icon-material-add-circle:before { + content: "\e609"; +} +.icon-material-add-circle-outline:before { + content: "\e60a"; +} +.icon-material-airplanemode-off:before { + content: "\e60b"; +} +.icon-material-airplanemode-on:before { + content: "\e60c"; +} +.icon-material-android:before { + content: "\e60d"; +} +.icon-material-apps:before { + content: "\e60e"; +} +.icon-material-archive:before { + content: "\e60f"; +} +.icon-material-arrow-back:before { + content: "\e610"; +} +.icon-material-arrow-drop-down:before { + content: "\e611"; +} +.icon-material-arrow-drop-down-circle:before { + content: "\e612"; +} +.icon-material-arrow-drop-up:before { + content: "\e613"; +} +.icon-material-arrow-forward:before { + content: "\e614"; +} +.icon-material-attachment:before { + content: "\e615"; +} +.icon-material-auto-fix:before { + content: "\e616"; +} +.icon-material-backspace:before { + content: "\e617"; +} +.icon-material-backup:before { + content: "\e618"; +} +.icon-material-beenhere:before { + content: "\e619"; +} +.icon-material-block:before { + content: "\e61a"; +} +.icon-material-bluetooth2:before { + content: "\e61b"; +} +.icon-material-bluetooth:before { + content: "\e61c"; +} +.icon-material-bluetooth-audio:before { + content: "\e61d"; +} +.icon-material-bluetooth-connected2:before { + content: "\e61e"; +} +.icon-material-bluetooth-connected:before { + content: "\e61f"; +} +.icon-material-bluetooth-disabled:before { + content: "\e620"; +} +.icon-material-bluetooth-searching:before { + content: "\e621"; +} +.icon-material-book:before { + content: "\e622"; +} +.icon-material-bookmark:before { + content: "\e623"; +} +.icon-material-bookmark-outline:before { + content: "\e624"; +} +.icon-material-brightness-auto:before { + content: "\e625"; +} +.icon-material-brightness-high:before { + content: "\e626"; +} +.icon-material-brightness-low:before { + content: "\e627"; +} +.icon-material-brightness-medium:before { + content: "\e628"; +} +.icon-material-bug-report:before { + content: "\e629"; +} +.icon-material-cake:before { + content: "\e62a"; +} +.icon-material-call:before { + content: "\e62b"; +} +.icon-material-call-end:before { + content: "\e62c"; + font-size: 60%; +} +.icon-material-call-made:before { + content: "\e62d"; +} +.icon-material-call-merge:before { + content: "\e62e"; +} +.icon-material-call-missed:before { + content: "\e62f"; +} +.icon-material-call-received:before { + content: "\e630"; +} +.icon-material-call-split:before { + content: "\e631"; +} +.icon-material-camera:before { + content: "\e632"; +} +.icon-material-camera-alt:before { + content: "\e633"; +} +.icon-material-camera-roll:before { + content: "\e634"; +} +.icon-material-cancel:before { + content: "\e635"; +} +.icon-material-cast:before { + content: "\e636"; +} +.icon-material-cast-connected:before { + content: "\e637"; +} +.icon-material-chat:before { + content: "\e638"; +} +.icon-material-check:before { + content: "\e639"; +} +.icon-material-check-box:before { + content: "\e63a"; +} +.icon-material-check-box-blank:before { + content: "\e63b"; +} +.icon-material-check-box-outline:before { + content: "\e63c"; +} +.icon-material-check-box-outline-blank:before { + content: "\e63d"; +} +.icon-material-check-circle:before { + content: "\e63e"; +} +.icon-material-check-circle-blank:before { + content: "\e63f"; +} +.icon-material-check-circle-outline:before { + content: "\e640"; +} +.icon-material-check-circle-outline-blank:before { + content: "\e641"; +} +.icon-material-chevron-left:before { + content: "\e642"; +} +.icon-material-chevron-right:before { + content: "\e643"; +} +.icon-material-chromecast:before { + content: "\e644"; +} +.icon-material-circles:before { + content: "\e645"; +} +.icon-material-circles-add:before { + content: "\e646"; +} +.icon-material-circles-extended:before { + content: "\e647"; +} +.icon-material-clear:before { + content: "\e648"; +} +.icon-material-close:before { + content: "\e649"; +} +.icon-material-closed-caption:before { + content: "\e64a"; +} +.icon-material-cloud:before { + content: "\e64b"; +} +.icon-material-cloud-circle:before { + content: "\e64c"; +} +.icon-material-cloud-done:before { + content: "\e64d"; +} +.icon-material-cloud-download:before { + content: "\e64e"; +} +.icon-material-cloud-off:before { + content: "\e64f"; +} +.icon-material-cloud-queue:before { + content: "\e650"; +} +.icon-material-cloud-upload:before { + content: "\e651"; +} +.icon-material-comment:before { + content: "\e652"; +} +.icon-material-communities:before { + content: "\e653"; +} +.icon-material-content-copy:before { + content: "\e654"; +} +.icon-material-content-cut:before { + content: "\e655"; +} +.icon-material-content-paste:before { + content: "\e656"; +} +.icon-material-create:before { + content: "\e657"; +} +.icon-material-credit-card:before { + content: "\e658"; +} +.icon-material-crop:before { + content: "\e659"; +} +.icon-material-crop-free:before { + content: "\e65a"; +} +.icon-material-crop-landscape:before { + content: "\e65b"; +} +.icon-material-crop-portrait:before { + content: "\e65c"; +} +.icon-material-crop-square:before { + content: "\e65d"; +} +.icon-material-data-usage:before { + content: "\e65e"; +} +.icon-material-delete:before { + content: "\e65f"; +} +.icon-material-developer-mode:before { + content: "\e660"; +} +.icon-material-dialpad:before { + content: "\e661"; +} +.icon-material-directions:before { + content: "\e662"; +} +.icon-material-directions-bike:before { + content: "\e663"; +} +.icon-material-directions-bus:before { + content: "\e664"; +} +.icon-material-directions-car:before { + content: "\e665"; +} +.icon-material-directions-subway:before { + content: "\e666"; +} +.icon-material-directions-train:before { + content: "\e667"; +} +.icon-material-directions-transit:before { + content: "\e668"; +} +.icon-material-directionswalk:before { + content: "\e669"; +} +.icon-material-disc-full:before { + content: "\e66a"; +} +.icon-material-dock:before { + content: "\e66b"; +} +.icon-material-domain:before { + content: "\e66c"; +} +.icon-material-done:before { + content: "\e66d"; +} +.icon-material-done-all:before { + content: "\e66e"; +} +.icon-material-do-not-disturb:before { + content: "\e66f"; +} +.icon-material-drafts:before { + content: "\e670"; +} +.icon-material-drawer:before { + content: "\e671"; +} +.icon-material-drive:before { + content: "\e672"; +} +.icon-material-drive-document:before { + content: "\e673"; +} +.icon-material-drive-drawing:before { + content: "\e674"; +} +.icon-material-drive-eta:before { + content: "\e675"; +} +.icon-material-drive-file:before { + content: "\e676"; +} +.icon-material-drive-form:before { + content: "\e677"; +} +.icon-material-drive-fusiontable:before { + content: "\e678"; +} +.icon-material-drive-image:before { + content: "\e679"; +} +.icon-material-drive-ms-excel:before { + content: "\e67a"; +} +.icon-material-drive-ms-powerpoint:before { + content: "\e67b"; +} +.icon-material-drive-ms-word:before { + content: "\e67c"; +} +.icon-material-drive-pdf:before { + content: "\e67d"; +} +.icon-material-drive-presentation:before { + content: "\e67e"; +} +.icon-material-drive-script:before { + content: "\e67f"; +} +.icon-material-drive-site:before { + content: "\e680"; +} +.icon-material-drive-spreadsheet:before { + content: "\e681"; +} +.icon-material-drive-video:before { + content: "\e682"; +} +.icon-material-earth:before { + content: "\e683"; +} +.icon-material-email2:before { + content: "\e684"; +} +.icon-material-email:before { + content: "\e685"; +} +.icon-material-error:before { + content: "\e686"; +} +.icon-material-event2:before { + content: "\e687"; +} +.icon-material-event:before { + content: "\e688"; +} +.icon-material-exit-to-app:before { + content: "\e689"; +} +.icon-material-expand-less:before { + content: "\e68a"; +} +.icon-material-expand-more:before { + content: "\e68b"; +} +.icon-material-explore:before { + content: "\e68c"; +} +.icon-material-extension:before { + content: "\e68d"; +} +.icon-material-fast-forward:before { + content: "\e68e"; +} +.icon-material-fast-rewind:before { + content: "\e68f"; +} +.icon-material-favorite:before { + content: "\e690"; +} +.icon-material-favorite-outline:before { + content: "\e691"; +} +.icon-material-file-download:before { + content: "\e692"; +} +.icon-material-file-upload:before { + content: "\e693"; +} +.icon-material-filter:before { + content: "\e694"; +} +.icon-material-flag:before { + content: "\e695"; +} +.icon-material-flash-auto:before { + content: "\e696"; +} +.icon-material-flash-off:before { + content: "\e697"; +} +.icon-material-flash-on:before { + content: "\e698"; +} +.icon-material-flights:before { + content: "\e699"; +} +.icon-material-flip-to-back:before { + content: "\e69a"; +} +.icon-material-flip-to-front:before { + content: "\e69b"; +} +.icon-material-folder:before { + content: "\e69c"; +} +.icon-material-folder-mydrive:before { + content: "\e69d"; +} +.icon-material-folder-shared:before { + content: "\e69e"; +} +.icon-material-forum:before { + content: "\e69f"; +} +.icon-material-forward:before { + content: "\e6a0"; +} +.icon-material-fullscreen:before { + content: "\e6a1"; +} +.icon-material-fullscreen-exit:before { + content: "\e6a2"; +} +.icon-material-gamepad:before { + content: "\e6a3"; +} +.icon-material-games:before { + content: "\e6a4"; +} +.icon-material-gesture:before { + content: "\e6a5"; +} +.icon-material-glass:before { + content: "\e6a6"; +} +.icon-material-gmail2:before { + content: "\e6a7"; +} +.icon-material-gmail:before { + content: "\e6a8"; +} +.icon-material-google:before { + content: "\e6a9"; +} +.icon-material-google-plus:before { + content: "\e6aa"; +} +.icon-material-gps-fixed:before { + content: "\e6ab"; +} +.icon-material-gps-not-fixed:before { + content: "\e6ac"; +} +.icon-material-gps-off:before { + content: "\e6ad"; +} +.icon-material-group:before { + content: "\e6ae"; +} +.icon-material-group-add:before { + content: "\e6af"; +} +.icon-material-hangout2:before { + content: "\e6b0"; +} +.icon-material-hangout:before { + content: "\e6b1"; +} +.icon-material-hangout-video:before { + content: "\e6b2"; +} +.icon-material-hangout-video-off:before { + content: "\e6b3"; +} +.icon-material-headset:before { + content: "\e6b4"; +} +.icon-material-headset-mic:before { + content: "\e6b5"; +} +.icon-material-help:before { + content: "\e6b6"; +} +.icon-material-high-quality:before { + content: "\e6b7"; +} +.icon-material-history:before { + content: "\e6b8"; +} +.icon-material-home:before { + content: "\e6b9"; +} +.icon-material-hotel:before { + content: "\e6ba"; +} +.icon-material-https:before { + content: "\e6bb"; +} +.icon-material-image:before { + content: "\e6bc"; +} +.icon-material-import-export:before { + content: "\e6bd"; +} +.icon-material-inbox:before { + content: "\e6be"; +} +.icon-material-info:before { + content: "\e6bf"; +} +.icon-material-info-outline:before { + content: "\e6c0"; +} +.icon-material-invert-colors:before { + content: "\e6c1"; +} +.icon-material-keep2:before { + content: "\e6c2"; +} +.icon-material-keep:before { + content: "\e6c3"; +} +.icon-material-keyboard:before { + content: "\e6c4"; +} +.icon-material-keyboard-alt:before { + content: "\e6c5"; +} +.icon-material-keyboard-arrow-down:before { + content: "\e6c6"; +} +.icon-material-keyboard-arrow-left:before { + content: "\e6c7"; +} +.icon-material-keyboard-arrow-right:before { + content: "\e6c8"; +} +.icon-material-keyboard-arrow-up:before { + content: "\e6c9"; +} +.icon-material-keyboard-backspace:before { + content: "\e6ca"; +} +.icon-material-keyboard-capslock:before { + content: "\e6cb"; +} +.icon-material-keyboard-control:before { + content: "\e6cc"; + font-size: 36%; +} +.icon-material-keyboard-hide:before { + content: "\e6cd"; +} +.icon-material-keyboard-return:before { + content: "\e6ce"; +} +.icon-material-keyboard-tab:before { + content: "\e6cf"; +} +.icon-material-keyboard-voice:before { + content: "\e6d0"; +} +.icon-material-label:before { + content: "\e6d1"; +} +.icon-material-label-outline:before { + content: "\e6d2"; +} +.icon-material-landscape:before { + content: "\e6d3"; +} +.icon-material-language:before { + content: "\e6d4"; +} +.icon-material-laptop:before { + content: "\e6d5"; +} +.icon-material-launch:before { + content: "\e6d6"; +} +.icon-material-link:before { + content: "\e6d7"; +} +.icon-material-list:before { + content: "\e6d8"; +} +.icon-material-live-help:before { + content: "\e6d9"; +} +.icon-material-location:before { + content: "\e6da"; +} +.icon-material-location-city:before { + content: "\e6db"; +} +.icon-material-location-disabled:before { + content: "\e6dc"; +} +.icon-material-location-searching:before { + content: "\e6dd"; +} +.icon-material-lock:before { + content: "\e6de"; +} +.icon-material-lock-open:before { + content: "\e6df"; +} +.icon-material-lock-outline:before { + content: "\e6e0"; +} +.icon-material-loop:before { + content: "\e6e1"; +} +.icon-material-mail:before { + content: "\e6e2"; +} +.icon-material-map:before { + content: "\e6e3"; +} +.icon-material-markunread:before { + content: "\e6e4"; +} +.icon-material-memory:before { + content: "\e6e5"; +} +.icon-material-menu:before { + content: "\e6e6"; +} +.icon-material-message:before { + content: "\e6e7"; +} +.icon-material-messenger:before { + content: "\e6e8"; +} +.icon-material-mic:before { + content: "\e6e9"; +} +.icon-material-mic-none:before { + content: "\e6ea"; +} +.icon-material-mic-off:before { + content: "\e6eb"; +} +.icon-material-mms:before { + content: "\e6ec"; +} +.icon-material-mood:before { + content: "\e6ed"; +} +.icon-material-more:before { + content: "\e6ee"; +} +.icon-material-more-horiz:before { + content: "\e6ef"; + font-size: 25%; +} +.icon-material-more-vert:before { + content: "\e6f0"; +} +.icon-material-mouse:before { + content: "\e6f1"; +} +.icon-material-movie:before { + content: "\e6f2"; +} +.icon-material-nest-protect:before { + content: "\e6f3"; +} +.icon-material-nest-thermostat:before { + content: "\e6f4"; +} +.icon-material-network-cell:before { + content: "\e6f5"; +} +.icon-material-network-wifi:before { + content: "\e6f6"; +} +.icon-material-news:before { + content: "\e6f7"; +} +.icon-material-nfc:before { + content: "\e6f8"; +} +.icon-material-notifications:before { + content: "\e6f9"; +} +.icon-material-notifications-none:before { + content: "\e6fa"; +} +.icon-material-notifications-off:before { + content: "\e6fb"; +} +.icon-material-notifications-on:before { + content: "\e6fc"; +} +.icon-material-notifications-paused:before { + content: "\e6fd"; +} +.icon-material-pages:before { + content: "\e6fe"; +} +.icon-material-palette:before { + content: "\e6ff"; +} +.icon-material-panorama:before { + content: "\e700"; +} +.icon-material-party-mode:before { + content: "\e701"; +} +.icon-material-pause:before { + content: "\e702"; +} +.icon-material-pause-circle-fill:before { + content: "\e703"; +} +.icon-material-pause-circle-outline:before { + content: "\e704"; +} +.icon-material-people:before { + content: "\e705"; +} +.icon-material-person:before { + content: "\e706"; +} +.icon-material-person-add:before { + content: "\e707"; +} +.icon-material-person-location:before { + content: "\e708"; +} +.icon-material-person-outline:before { + content: "\e709"; +} +.icon-material-phone2:before { + content: "\e70a"; +} +.icon-material-phone:before { + content: "\e70b"; +} +.icon-material-phone-bluetooth-speaker:before { + content: "\e70c"; +} +.icon-material-phone-forwarded:before { + content: "\e70d"; +} +.icon-material-phone-in-talk:before { + content: "\e70e"; +} +.icon-material-phone-locked:before { + content: "\e70f"; +} +.icon-material-phone-missed:before { + content: "\e710"; +} +.icon-material-phone-paused:before { + content: "\e711"; +} +.icon-material-photo:before { + content: "\e712"; +} +.icon-material-photo-album:before { + content: "\e713"; +} +.icon-material-photo-library:before { + content: "\e714"; +} +.icon-material-place:before { + content: "\e715"; +} +.icon-material-play-arrow:before { + content: "\e716"; +} +.icon-material-play-circle-fill:before { + content: "\e717"; +} +.icon-material-play-circle-outline:before { + content: "\e718"; +} +.icon-material-play-download:before { + content: "\e719"; +} +.icon-material-play-install:before { + content: "\e71a"; +} +.icon-material-plus-one:before { + content: "\e71b"; +} +.icon-material-poll:before { + content: "\e71c"; +} +.icon-material-polymer:before { + content: "\e71d"; +} +.icon-material-portrait:before { + content: "\e71e"; +} +.icon-material-post-blogger:before { + content: "\e71f"; +} +.icon-material-post-facebook:before { + content: "\e720"; +} +.icon-material-post-gplus:before { + content: "\e721"; +} +.icon-material-post-instagram:before { + content: "\e722"; +} +.icon-material-post-linkedin:before { + content: "\e723"; +} +.icon-material-post-pinterest:before { + content: "\e724"; +} +.icon-material-post-tumblr:before { + content: "\e725"; +} +.icon-material-post-twitter:before { + content: "\e726"; +} +.icon-material-print:before { + content: "\e727"; +} +.icon-material-public:before { + content: "\e728"; +} +.icon-material-queue:before { + content: "\e729"; +} +.icon-material-radio-button-off:before { + content: "\e72a"; +} +.icon-material-radio-button-on:before { + content: "\e72b"; +} +.icon-material-receipt:before { + content: "\e72c"; +} +.icon-material-refresh:before { + content: "\e72d"; +} +.icon-material-reminder:before { + content: "\e72e"; +} +.icon-material-remove:before { + content: "\e72f"; + font-size: 16%; +} +.icon-material-remove-circle:before { + content: "\e730"; +} +.icon-material-remove-circle-outline:before { + content: "\e731"; +} +.icon-material-replay:before { + content: "\e732"; +} +.icon-material-reply:before { + content: "\e733"; +} +.icon-material-reply-all:before { + content: "\e734"; +} +.icon-material-report:before { + content: "\e735"; +} +.icon-material-ring-volume:before { + content: "\e736"; +} +.icon-material-rotate-left:before { + content: "\e737"; +} +.icon-material-rotate-right:before { + content: "\e738"; +} +.icon-material-satellite:before { + content: "\e739"; +} +.icon-material-save:before { + content: "\e73a"; +} +.icon-material-schedule:before { + content: "\e73b"; +} +.icon-material-school:before { + content: "\e73c"; +} +.icon-material-screen-lock-landscape:before { + content: "\e73d"; +} +.icon-material-screen-lock-portrait:before { + content: "\e73e"; +} +.icon-material-screen-lock-rotation:before { + content: "\e73f"; +} +.icon-material-screen-rotation:before { + content: "\e740"; +} +.icon-material-sd-card:before { + content: "\e741"; +} +.icon-material-sd-storage:before { + content: "\e742"; +} +.icon-material-search:before { + content: "\e743"; +} +.icon-material-select-all:before { + content: "\e744"; +} +.icon-material-send:before { + content: "\e745"; +} +.icon-material-settings:before { + content: "\e746"; +} +.icon-material-settings-applications:before { + content: "\e747"; +} +.icon-material-settings-bluetooth:before { + content: "\e748"; +} +.icon-material-settings-cell:before { + content: "\e749"; +} +.icon-material-settings-phone:before { + content: "\e74a"; +} +.icon-material-settings-power:before { + content: "\e74b"; +} +.icon-material-settings-voice:before { + content: "\e74c"; +} +.icon-material-share:before { + content: "\e74d"; +} +.icon-material-share-alt:before { + content: "\e74e"; +} +.icon-material-shopping-basket:before { + content: "\e74f"; +} +.icon-material-shopping-cart:before { + content: "\e750"; +} +.icon-material-shuffle:before { + content: "\e751"; +} +.icon-material-signal-cellular-1-bar:before { + content: "\e752"; +} +.icon-material-signal-cellular-2-bar:before { + content: "\e753"; +} +.icon-material-signal-cellular-3-bar:before { + content: "\e754"; +} +.icon-material-signal-cellular-4-bar:before { + content: "\e755"; +} +.icon-material-signal-wifi-1-bar:before { + content: "\e756"; +} +.icon-material-signal-wifi-2-bar:before { + content: "\e757"; +} +.icon-material-signal-wifi-3-bar:before { + content: "\e758"; +} +.icon-material-signal-wifi-4-bar:before { + content: "\e759"; +} +.icon-material-sim-card-alert:before { + content: "\e75a"; +} +.icon-material-skip-next:before { + content: "\e75b"; +} +.icon-material-skip-previous:before { + content: "\e75c"; +} +.icon-material-slideshow:before { + content: "\e75d"; +} +.icon-material-sms:before { + content: "\e75e"; +} +.icon-material-sms-failed:before { + content: "\e75f"; +} +.icon-material-sort:before { + content: "\e760"; +} +.icon-material-speaker:before { + content: "\e761"; +} +.icon-material-star:before { + content: "\e762"; +} +.icon-material-star-half:before { + content: "\e763"; +} +.icon-material-star-outline:before { + content: "\e764"; +} +.icon-material-star-rate:before { + content: "\e765"; +} +.icon-material-stop:before { + content: "\e766"; +} +.icon-material-storage:before { + content: "\e767"; +} +.icon-material-store:before { + content: "\e768"; +} +.icon-material-swap-driving-apps:before { + content: "\e769"; +} +.icon-material-swap-horiz:before { + content: "\e76a"; +} +.icon-material-swap-vert:before { + content: "\e76b"; +} +.icon-material-swap-vert-circle:before { + content: "\e76c"; +} +.icon-material-switch-camera:before { + content: "\e76d"; +} +.icon-material-switch-video:before { + content: "\e76e"; +} +.icon-material-sync:before { + content: "\e76f"; +} +.icon-material-sync-disabled:before { + content: "\e770"; +} +.icon-material-sync-green:before { + content: "\e771"; +} +.icon-material-sync-problem:before { + content: "\e772"; +} +.icon-material-sync-problem-red:before { + content: "\e773"; +} +.icon-material-system-update:before { + content: "\e774"; +} +.icon-material-tab:before { + content: "\e775"; +} +.icon-material-tablet:before { + content: "\e776"; +} +.icon-material-tab-unselected:before { + content: "\e777"; +} +.icon-material-tag-faces:before { + content: "\e778"; +} +.icon-material-tap-and-play:before { + content: "\e779"; +} +.icon-material-terrain:before { + content: "\e77a"; +} +.icon-material-text-format:before { + content: "\e77b"; +} +.icon-material-textsms:before { + content: "\e77c"; +} +.icon-material-theaters:before { + content: "\e77d"; +} +.icon-material-thumb-down:before { + content: "\e77e"; +} +.icon-material-thumb-up:before { + content: "\e77f"; +} +.icon-material-timelapse:before { + content: "\e780"; +} +.icon-material-timer:before { + content: "\e781"; +} +.icon-material-time-to-leave:before { + content: "\e782"; +} +.icon-material-today:before { + content: "\e783"; +} +.icon-material-traffic4:before { + content: "\e784"; +} +.icon-material-translate:before { + content: "\e785"; +} +.icon-material-tv:before { + content: "\e786"; +} +.icon-material-undo:before { + content: "\e787"; +} +.icon-material-unfold-less:before { + content: "\e788"; +} +.icon-material-unfold-more:before { + content: "\e789"; +} +.icon-material-unknown-1:before { + content: "\e78a"; +} +.icon-material-unknown-2:before { + content: "\e78b"; +} +.icon-material-unknown-3:before { + content: "\e78c"; +} +.icon-material-unknown-4:before { + content: "\e78d"; +} +.icon-material-unknown-5:before { + content: "\e78e"; +} +.icon-material-unknown-6:before { + content: "\e78f"; +} +.icon-material-unknown-7:before { + content: "\e790"; +} +.icon-material-usb2:before { + content: "\e791"; +} +.icon-material-usb:before { + content: "\e792"; +} +.icon-material-vibration:before { + content: "\e793"; +} +.icon-material-videocam:before { + content: "\e794"; +} +.icon-material-videocam-off:before { + content: "\e795"; +} +.icon-material-video-youtube:before { + content: "\e796"; +} +.icon-material-view-array:before { + content: "\e797"; +} +.icon-material-view-column:before { + content: "\e798"; +} +.icon-material-view-headline:before { + content: "\e799"; +} +.icon-material-view-list:before { + content: "\e79a"; +} +.icon-material-view-module:before { + content: "\e79b"; +} +.icon-material-view-quilt:before { + content: "\e79c"; +} +.icon-material-view-stream:before { + content: "\e79d"; +} +.icon-material-visibility:before { + content: "\e79e"; +} +.icon-material-visibility-off:before { + content: "\e79f"; +} +.icon-material-voice:before { + content: "\e7a0"; +} +.icon-material-voicemail:before { + content: "\e7a1"; +} +.icon-material-volume-down:before { + content: "\e7a2"; +} +.icon-material-volume-mute:before { + content: "\e7a3"; +} +.icon-material-volume-off:before { + content: "\e7a4"; +} +.icon-material-volume-up:before { + content: "\e7a5"; +} +.icon-material-vpn:before { + content: "\e7a6"; +} +.icon-material-warning:before { + content: "\e7a7"; +} +.icon-material-watch2:before { + content: "\e7a8"; +} +.icon-material-wb-auto:before { + content: "\e7a9"; +} +.icon-material-wb-cloudy:before { + content: "\e7aa"; +} +.icon-material-wb-incandescent:before { + content: "\e7ab"; +} +.icon-material-wb-irradescent:before { + content: "\e7ac"; +} +.icon-material-wb-sunny2:before { + content: "\e7ad"; +} +.icon-material-web2:before { + content: "\e7ae"; +} +.icon-material-whatshot:before { + content: "\e7af"; +} +.icon-material-wifi-tethering2:before { + content: "\e7b0"; +} +.icon-material-wifi-tethering3:before { + content: "\e7b1"; +} +.icon-material-work2:before { + content: "\e7b2"; +} +.icon-material-call2:before { + content: "\e7b3"; +} +.icon-material-call-end2:before { + content: "\e7b4"; +} +.icon-material-call-made2:before { + content: "\e7b5"; +} +.icon-material-call-merge2:before { + content: "\e7b6"; +} +.icon-material-call-missed2:before { + content: "\e7b7"; +} +.icon-material-call-received2:before { + content: "\e7b8"; +} +.icon-material-call-split2:before { + content: "\e7b9"; +} +.icon-material-chat2:before { + content: "\e7ba"; +} +.icon-material-comment2:before { + content: "\e7bb"; +} +.icon-material-dialpad2:before { + content: "\e7bc"; +} +.icon-material-email3:before { + content: "\e7bd"; +} +.icon-material-forum2:before { + content: "\e7be"; +} +.icon-material-gmail3:before { + content: "\e7bf"; +} +.icon-material-hangout3:before { + content: "\e7c0"; +} +.icon-material-hangout-video2:before { + content: "\e7c1"; +} +.icon-material-hangout-video-off2:before { + content: "\e7c2"; +} +.icon-material-import-export2:before { + content: "\e7c3"; +} +.icon-material-live-help2:before { + content: "\e7c4"; +} +.icon-material-message2:before { + content: "\e7c5"; +} +.icon-material-messenger2:before { + content: "\e7c6"; +} +.icon-material-phone3:before { + content: "\e7c7"; +} +.icon-material-ring-volume2:before { + content: "\e7c8"; +} +.icon-material-textsms2:before { + content: "\e7c9"; +} +.icon-material-voicemail2:before { + content: "\e7ca"; +} +.icon-material-closed-caption2:before { + content: "\e7cb"; +} +.icon-material-fast-forward2:before { + content: "\e7cc"; +} +.icon-material-fast-rewind2:before { + content: "\e7cd"; +} +.icon-material-games2:before { + content: "\e7ce"; +} +.icon-material-high-quality2:before { + content: "\e7cf"; +} +.icon-material-loop2:before { + content: "\e7d0"; +} +.icon-material-mic2:before { + content: "\e7d1"; +} +.icon-material-mic-none2:before { + content: "\e7d2"; +} +.icon-material-mic-off2:before { + content: "\e7d3"; +} +.icon-material-movie2:before { + content: "\e7d4"; +} +.icon-material-news2:before { + content: "\e7d5"; +} +.icon-material-pause2:before { + content: "\e7d6"; +} +.icon-material-pause-circle-fill2:before { + content: "\e7d7"; +} +.icon-material-pause-circle-outline2:before { + content: "\e7d8"; +} +.icon-material-play-arrow2:before { + content: "\e7d9"; +} +.icon-material-play-circle-fill2:before { + content: "\e7da"; +} +.icon-material-play-circle-outline2:before { + content: "\e7db"; +} +.icon-material-queue2:before { + content: "\e7dc"; +} +.icon-material-replay2:before { + content: "\e7dd"; +} +.icon-material-shuffle2:before { + content: "\e7de"; +} +.icon-material-skip-next2:before { + content: "\e7df"; +} +.icon-material-skip-previous2:before { + content: "\e7e0"; +} +.icon-material-stop2:before { + content: "\e7e1"; +} +.icon-material-videocam2:before { + content: "\e7e2"; +} +.icon-material-videocam-off2:before { + content: "\e7e3"; +} +.icon-material-video-youtube2:before { + content: "\e7e4"; +} +.icon-material-volume-down2:before { + content: "\e7e5"; +} +.icon-material-volume-mute2:before { + content: "\e7e6"; +} +.icon-material-volume-off2:before { + content: "\e7e7"; +} +.icon-material-volume-up2:before { + content: "\e7e8"; +} +.icon-material-web22:before { + content: "\e7e9"; +} diff --git a/client/lib/material-wfont.css b/client/lib/material-wfont.css new file mode 100644 index 0000000..40be961 --- /dev/null +++ b/client/lib/material-wfont.css @@ -0,0 +1,3229 @@ +/* Generated by less 1.7.5 */ +@import url(//fonts.googleapis.com/css?family=Roboto+Condensed:300italic,400italic,700italic,400,700,300|Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic); +@-webkit-keyframes input-highlight { + 0% { + left: 20%; + width: 20%; + } + 99% { + width: 0; + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes input-highlight { + 0% { + left: 20%; + width: 20%; + } + 99% { + width: 0; + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} +.shadow-z-1 { + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} +.shadow-z-2 { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} +.shadow-z-2-hover { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.28); +} +.shadow-z-3 { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} +.shadow-z-4 { + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} +.shadow-z-5 { + box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22); +} +body { + background-color: #EEEEEE; +} +body.inverse { + background: #333333; +} +body.inverse, +body.inverse .form-control { + color: rgba(255, 255, 255, 0.84); +} +body, +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; +} +body .well, +.container .well, +.container-fluid .well, +body .well:not([class^="well well-material-"]), +.container .well:not([class^="well well-material-"]), +.container-fluid .well:not([class^="well well-material-"]), +body .well .form-control, +.container .well .form-control, +.container-fluid .well .form-control, +body .well:not([class^="well well-material-"]) .form-control, +.container .well:not([class^="well well-material-"]) .form-control, +.container-fluid .well:not([class^="well well-material-"]) .form-control { + color: rgba(0, 0, 0, 0.84); +} +body .well .floating-label, +.container .well .floating-label, +.container-fluid .well .floating-label, +body .well:not([class^="well well-material-"]) .floating-label, +.container .well:not([class^="well well-material-"]) .floating-label, +.container-fluid .well:not([class^="well well-material-"]) .floating-label { + color: #7e7e7e; +} +body .well .form-control, +.container .well .form-control, +.container-fluid .well .form-control, +body .well:not([class^="well well-material-"]) .form-control, +.container .well:not([class^="well well-material-"]) .form-control, +.container-fluid .well:not([class^="well well-material-"]) .form-control { + border-bottom-color: #7e7e7e; +} +body .well .form-control::-webkit-input-placeholder, +.container .well .form-control::-webkit-input-placeholder, +.container-fluid .well .form-control::-webkit-input-placeholder, +body .well:not([class^="well well-material-"]) .form-control::-webkit-input-placeholder, +.container .well:not([class^="well well-material-"]) .form-control::-webkit-input-placeholder, +.container-fluid .well:not([class^="well well-material-"]) .form-control::-webkit-input-placeholder { + color: #7e7e7e; +} +body .well .form-control::-moz-placeholder, +.container .well .form-control::-moz-placeholder, +.container-fluid .well .form-control::-moz-placeholder, +body .well:not([class^="well well-material-"]) .form-control::-moz-placeholder, +.container .well:not([class^="well well-material-"]) .form-control::-moz-placeholder, +.container-fluid .well:not([class^="well well-material-"]) .form-control::-moz-placeholder { + color: #7e7e7e; + opacity: 1; +} +body .well .form-control:-ms-input-placeholder, +.container .well .form-control:-ms-input-placeholder, +.container-fluid .well .form-control:-ms-input-placeholder, +body .well:not([class^="well well-material-"]) .form-control:-ms-input-placeholder, +.container .well:not([class^="well well-material-"]) .form-control:-ms-input-placeholder, +.container-fluid .well:not([class^="well well-material-"]) .form-control:-ms-input-placeholder { + color: #7e7e7e; +} +body .well .option, +.container .well .option, +.container-fluid .well .option, +body .well:not([class^="well well-material-"]) .option, +.container .well:not([class^="well well-material-"]) .option, +.container-fluid .well:not([class^="well well-material-"]) .option, +body .well .create, +.container .well .create, +.container-fluid .well .create, +body .well:not([class^="well well-material-"]) .create, +.container .well:not([class^="well well-material-"]) .create, +.container-fluid .well:not([class^="well well-material-"]) .create { + color: rgba(0, 0, 0, 0.84); +} +body [class^="well well-material-"], +.container [class^="well well-material-"], +.container-fluid [class^="well well-material-"], +body [class^="well well-material-"] .form-control, +.container [class^="well well-material-"] .form-control, +.container-fluid [class^="well well-material-"] .form-control, +body [class^="well well-material-"] .floating-label, +.container [class^="well well-material-"] .floating-label, +.container-fluid [class^="well well-material-"] .floating-label { + color: rgba(255, 255, 255, 0.84); +} +body [class^="well well-material-"] .form-control, +.container [class^="well well-material-"] .form-control, +.container-fluid [class^="well well-material-"] .form-control { + border-bottom-color: rgba(255, 255, 255, 0.84); +} +body [class^="well well-material-"] .form-control::-webkit-input-placeholder, +.container [class^="well well-material-"] .form-control::-webkit-input-placeholder, +.container-fluid [class^="well well-material-"] .form-control::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} +body [class^="well well-material-"] .form-control::-moz-placeholder, +.container [class^="well well-material-"] .form-control::-moz-placeholder, +.container-fluid [class^="well well-material-"] .form-control::-moz-placeholder { + color: rgba(255, 255, 255, 0.84); + opacity: 1; +} +body [class^="well well-material-"] .form-control:-ms-input-placeholder, +.container [class^="well well-material-"] .form-control:-ms-input-placeholder, +.container-fluid [class^="well well-material-"] .form-control:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} +body [class^="well well-material-"] .option, +.container [class^="well well-material-"] .option, +.container-fluid [class^="well well-material-"] .option, +body [class^="well well-material-"] .create, +.container [class^="well well-material-"] .create, +.container-fluid [class^="well well-material-"] .create { + color: rgba(0, 0, 0, 0.84); +} +body .well, +.container .well, +.container-fluid .well, +body .jumbotron, +.container .jumbotron, +.container-fluid .jumbotron { + background-color: #fff; + padding: 19px; + margin-bottom: 20px; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + border-radius: 2px; + border: 0; +} +body .well p, +.container .well p, +.container-fluid .well p, +body .jumbotron p, +.container .jumbotron p, +.container-fluid .jumbotron p { + font-weight: 300; +} +body .well, +.container .well, +.container-fluid .well, +body .jumbotron, +.container .jumbotron, +.container-fluid .jumbotron, +body .well-default, +.container .well-default, +.container-fluid .well-default, +body .jumbotron-default, +.container .jumbotron-default, +.container-fluid .jumbotron-default { + background-color: #ffffff; +} +body .well-primary, +.container .well-primary, +.container-fluid .well-primary, +body .jumbotron-primary, +.container .jumbotron-primary, +.container-fluid .jumbotron-primary { + background-color: #4285f4; +} +body .well-success, +.container .well-success, +.container-fluid .well-success, +body .jumbotron-success, +.container .jumbotron-success, +.container-fluid .jumbotron-success { + background-color: #0f9d58; +} +body .well-info, +.container .well-info, +.container-fluid .well-info, +body .jumbotron-info, +.container .jumbotron-info, +.container-fluid .jumbotron-info { + background-color: #03a9f4; +} +body .well-warning, +.container .well-warning, +.container-fluid .well-warning, +body .jumbotron-warning, +.container .jumbotron-warning, +.container-fluid .jumbotron-warning { + background-color: #ff5722; +} +body .well-danger, +.container .well-danger, +.container-fluid .well-danger, +body .jumbotron-danger, +.container .jumbotron-danger, +.container-fluid .jumbotron-danger { + background-color: #f44336; +} +body .well-material-red, +.container .well-material-red, +.container-fluid .well-material-red, +body .jumbotron-material-red, +.container .jumbotron-material-red, +.container-fluid .jumbotron-material-red { + background-color: #f44336; +} +body .well-material-pink, +.container .well-material-pink, +.container-fluid .well-material-pink, +body .jumbotron-material-pink, +.container .jumbotron-material-pink, +.container-fluid .jumbotron-material-pink { + background-color: #e91e63; +} +body .well-material-purple, +.container .well-material-purple, +.container-fluid .well-material-purple, +body .jumbotron-material-purple, +.container .jumbotron-material-purple, +.container-fluid .jumbotron-material-purple { + background-color: #9c27b0; +} +body .well-material-deeppurple, +.container .well-material-deeppurple, +.container-fluid .well-material-deeppurple, +body .jumbotron-material-deeppurple, +.container .jumbotron-material-deeppurple, +.container-fluid .jumbotron-material-deeppurple { + background-color: #673ab7; +} +body .well-material-indigo, +.container .well-material-indigo, +.container-fluid .well-material-indigo, +body .jumbotron-material-indigo, +.container .jumbotron-material-indigo, +.container-fluid .jumbotron-material-indigo { + background-color: #3f51b5; +} +body .well-material-lightblue, +.container .well-material-lightblue, +.container-fluid .well-material-lightblue, +body .jumbotron-material-lightblue, +.container .jumbotron-material-lightblue, +.container-fluid .jumbotron-material-lightblue { + background-color: #03a9f4; +} +body .well-material-cyan, +.container .well-material-cyan, +.container-fluid .well-material-cyan, +body .jumbotron-material-cyan, +.container .jumbotron-material-cyan, +.container-fluid .jumbotron-material-cyan { + background-color: #00bcd4; +} +body .well-material-teal, +.container .well-material-teal, +.container-fluid .well-material-teal, +body .jumbotron-material-teal, +.container .jumbotron-material-teal, +.container-fluid .jumbotron-material-teal { + background-color: #009688; +} +body .well-material-lightgreen, +.container .well-material-lightgreen, +.container-fluid .well-material-lightgreen, +body .jumbotron-material-lightgreen, +.container .jumbotron-material-lightgreen, +.container-fluid .jumbotron-material-lightgreen { + background-color: #8bc34a; +} +body .well-material-lime, +.container .well-material-lime, +.container-fluid .well-material-lime, +body .jumbotron-material-lime, +.container .jumbotron-material-lime, +.container-fluid .jumbotron-material-lime { + background-color: #cddc39; +} +body .well-material-lightyellow, +.container .well-material-lightyellow, +.container-fluid .well-material-lightyellow, +body .jumbotron-material-lightyellow, +.container .jumbotron-material-lightyellow, +.container-fluid .jumbotron-material-lightyellow { + background-color: #ffeb3b; +} +body .well-material-orange, +.container .well-material-orange, +.container-fluid .well-material-orange, +body .jumbotron-material-orange, +.container .jumbotron-material-orange, +.container-fluid .jumbotron-material-orange { + background-color: #ff9800; +} +body .well-material-deeporange, +.container .well-material-deeporange, +.container-fluid .well-material-deeporange, +body .jumbotron-material-deeporange, +.container .jumbotron-material-deeporange, +.container-fluid .jumbotron-material-deeporange { + background-color: #ff5722; +} +body .well-material-grey, +.container .well-material-grey, +.container-fluid .well-material-grey, +body .jumbotron-material-grey, +.container .jumbotron-material-grey, +.container-fluid .jumbotron-material-grey { + background-color: #9e9e9e; +} +body .well-material-bluegrey, +.container .well-material-bluegrey, +.container-fluid .well-material-bluegrey, +body .jumbotron-material-bluegrey, +.container .jumbotron-material-bluegrey, +.container-fluid .jumbotron-material-bluegrey { + background-color: #607d8b; +} +body .well-material-brown, +.container .well-material-brown, +.container-fluid .well-material-brown, +body .jumbotron-material-brown, +.container .jumbotron-material-brown, +.container-fluid .jumbotron-material-brown { + background-color: #795548; +} +body .well-material-lightgrey, +.container .well-material-lightgrey, +.container-fluid .well-material-lightgrey, +body .jumbotron-material-lightgrey, +.container .jumbotron-material-lightgrey, +.container-fluid .jumbotron-material-lightgrey { + background-color: #ececec; +} +.btn { + position: relative; + padding: 8px 30px; + border: 0; + margin: 10px 1px; + cursor: pointer; + border-radius: 4px; + text-transform: uppercase; + text-decoration: none; + color: rgba(255, 255, 255, 0.84); + -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + outline: none !important; +} +.btn:hover { + color: rgba(255, 255, 255, 0.84); +} +.btn:hover:not(.btn-link) { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2), 0 3px 6px rgba(0, 0, 0, 0.28); +} +.btn:active:not(.btn-link) { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} +.btn:not(.btn-link), +.btn-default:not(.btn-link) { + background-color: transparent; +} +.btn-primary:not(.btn-link) { + background-color: #4285f4; +} +.btn-success:not(.btn-link) { + background-color: #0f9d58; +} +.btn-info:not(.btn-link) { + background-color: #03a9f4; +} +.btn-warning:not(.btn-link) { + background-color: #ff5722; +} +.btn-danger:not(.btn-link) { + background-color: #f44336; +} +.btn-material-red:not(.btn-link) { + background-color: #f44336; +} +.btn-material-pink:not(.btn-link) { + background-color: #e91e63; +} +.btn-material-purple:not(.btn-link) { + background-color: #9c27b0; +} +.btn-material-deeppurple:not(.btn-link) { + background-color: #673ab7; +} +.btn-material-indigo:not(.btn-link) { + background-color: #3f51b5; +} +.btn-material-lightblue:not(.btn-link) { + background-color: #03a9f4; +} +.btn-material-cyan:not(.btn-link) { + background-color: #00bcd4; +} +.btn-material-teal:not(.btn-link) { + background-color: #009688; +} +.btn-material-lightgreen:not(.btn-link) { + background-color: #8bc34a; +} +.btn-material-lime:not(.btn-link) { + background-color: #cddc39; +} +.btn-material-lightyellow:not(.btn-link) { + background-color: #ffeb3b; +} +.btn-material-orange:not(.btn-link) { + background-color: #ff9800; +} +.btn-material-deeporange:not(.btn-link) { + background-color: #ff5722; +} +.btn-material-grey:not(.btn-link) { + background-color: #9e9e9e; +} +.btn-material-bluegrey:not(.btn-link) { + background-color: #607d8b; +} +.btn-material-brown:not(.btn-link) { + background-color: #795548; +} +.btn-material-lightgrey:not(.btn-link) { + background-color: #ececec; +} +.btn-link, +.btn:not([class^="btn btn-"]), +.btn-default { + color: rgba(0, 0, 0, 0.84); +} +.btn-link:hover, +.btn:not([class^="btn btn-"]):hover, +.btn-default:hover { + color: rgba(0, 0, 0, 0.84); +} +.btn:not([class^="btn btn-"]):hover, +.btn-default:hover { + background-color: rgba(255, 255, 255, 0.5); +} +.btn-raised { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-raised:active:not(.btn-link) { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} +.open > .dropdown-toggle.btn, +.open > .dropdown-toggle.btn-default { + background-color: transparent; +} +.open > .dropdown-toggle.btn-primary { + background-color: #4285f4; +} +.open > .dropdown-toggle.btn-success { + background-color: #0f9d58; +} +.open > .dropdown-toggle.btn-info { + background-color: #03a9f4; +} +.open > .dropdown-toggle.btn-warning { + background-color: #ff5722; +} +.open > .dropdown-toggle.btn-danger { + background-color: #f44336; +} +.open > .dropdown-toggle.btn-material-red { + background-color: #f44336; +} +.open > .dropdown-toggle.btn-material-pink { + background-color: #e91e63; +} +.open > .dropdown-toggle.btn-material-purple { + background-color: #9c27b0; +} +.open > .dropdown-toggle.btn-material-deeppurple { + background-color: #673ab7; +} +.open > .dropdown-toggle.btn-material-indigo { + background-color: #3f51b5; +} +.open > .dropdown-toggle.btn-material-lightblue { + background-color: #03a9f4; +} +.open > .dropdown-toggle.btn-material-cyan { + background-color: #00bcd4; +} +.open > .dropdown-toggle.btn-material-teal { + background-color: #009688; +} +.open > .dropdown-toggle.btn-material-lightgreen { + background-color: #8bc34a; +} +.open > .dropdown-toggle.btn-material-lime { + background-color: #cddc39; +} +.open > .dropdown-toggle.btn-material-lightyellow { + background-color: #ffeb3b; +} +.open > .dropdown-toggle.btn-material-orange { + background-color: #ff9800; +} +.open > .dropdown-toggle.btn-material-deeporange { + background-color: #ff5722; +} +.open > .dropdown-toggle.btn-material-grey { + background-color: #9e9e9e; +} +.open > .dropdown-toggle.btn-material-bluegrey { + background-color: #607d8b; +} +.open > .dropdown-toggle.btn-material-brown { + background-color: #795548; +} +.open > .dropdown-toggle.btn-material-lightgrey { + background-color: #ececec; +} +.btn-flat { + box-shadow: none !important; +} +.btn-flat.btn-default:hover { + background: none; +} +.btn-group, +.btn-group-vertical { + position: relative; + border-radius: 4px; + margin: 10px 1px; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-group:active:not(.btn-link), +.btn-group-vertical:active:not(.btn-link) { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} +.btn-group.open .dropdown-toggle, +.btn-group-vertical.open .dropdown-toggle { + box-shadow: none; +} +.btn-group.btn-group-raised, +.btn-group-vertical.btn-group-raised { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); +} +.btn-group.btn-group-raised:active:not(.btn-link), +.btn-group-vertical.btn-group-raised:active:not(.btn-link) { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} +.btn-group .btn, +.btn-group-vertical .btn, +.btn-group .btn:active, +.btn-group-vertical .btn:active, +.btn-group .btn-group, +.btn-group-vertical .btn-group { + box-shadow: none !important; + margin: 0; +} +.btn-group .btn:active .caret, +.btn-group-vertical .btn:active .caret { + margin-left: -1px; +} +.btn-group-flat { + box-shadow: none !important; +} +.btn-fab { + margin: 0; + padding: 15px; + font-size: 26px; + width: 56px; + height: 56px; +} +.btn-fab, +.btn-fab:hover, +.btn-fab-default, +.btn-fab:hover-default { + background-color: transparent; +} +.btn-fab-primary, +.btn-fab:hover-primary { + background-color: #4285f4; +} +.btn-fab-success, +.btn-fab:hover-success { + background-color: #0f9d58; +} +.btn-fab-info, +.btn-fab:hover-info { + background-color: #03a9f4; +} +.btn-fab-warning, +.btn-fab:hover-warning { + background-color: #ff5722; +} +.btn-fab-danger, +.btn-fab:hover-danger { + background-color: #f44336; +} +.btn-fab-material-red, +.btn-fab:hover-material-red { + background-color: #f44336; +} +.btn-fab-material-pink, +.btn-fab:hover-material-pink { + background-color: #e91e63; +} +.btn-fab-material-purple, +.btn-fab:hover-material-purple { + background-color: #9c27b0; +} +.btn-fab-material-deeppurple, +.btn-fab:hover-material-deeppurple { + background-color: #673ab7; +} +.btn-fab-material-indigo, +.btn-fab:hover-material-indigo { + background-color: #3f51b5; +} +.btn-fab-material-lightblue, +.btn-fab:hover-material-lightblue { + background-color: #03a9f4; +} +.btn-fab-material-cyan, +.btn-fab:hover-material-cyan { + background-color: #00bcd4; +} +.btn-fab-material-teal, +.btn-fab:hover-material-teal { + background-color: #009688; +} +.btn-fab-material-lightgreen, +.btn-fab:hover-material-lightgreen { + background-color: #8bc34a; +} +.btn-fab-material-lime, +.btn-fab:hover-material-lime { + background-color: #cddc39; +} +.btn-fab-material-lightyellow, +.btn-fab:hover-material-lightyellow { + background-color: #ffeb3b; +} +.btn-fab-material-orange, +.btn-fab:hover-material-orange { + background-color: #ff9800; +} +.btn-fab-material-deeporange, +.btn-fab:hover-material-deeporange { + background-color: #ff5722; +} +.btn-fab-material-grey, +.btn-fab:hover-material-grey { + background-color: #9e9e9e; +} +.btn-fab-material-bluegrey, +.btn-fab:hover-material-bluegrey { + background-color: #607d8b; +} +.btn-fab-material-brown, +.btn-fab:hover-material-brown { + background-color: #795548; +} +.btn-fab-material-lightgrey, +.btn-fab:hover-material-lightgrey { + background-color: #ececec; +} +.btn-fab, +.btn-fab .ripple-wrapper { + border-radius: 100%; +} +.btn-fab.btn-mini { + width: 40px; + height: 40px; + padding: 13px; + font-size: 15px; +} +.form-horizontal .checkbox { + padding-top: 15px; +} +.checkbox { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); +} +.checkbox label { + cursor: pointer; + padding-left: 45px; + position: relative; +} +.checkbox label span { + display: block; + position: absolute; + left: 0px; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; +} +.checkbox label .check:after { + display: block; + position: absolute; + content: ""; + background-color: rgba(0, 0, 0, 0.84); + left: -5px; + top: -15px; + height: 50px; + width: 50px; + border-radius: 100%; + z-index: 1; + opacity: 0; + margin: 0; +} +.checkbox label .check:before { + display: block; + content: ""; + border: 2px solid rgba(0, 0, 0, 0.84); + height: 20px; + width: 20px; + -webkit-transition-delay: 0.2s; + transition-delay: 0.2s; +} +.checkbox .check, +.checkbox-default .check { + color: #0f9d58; +} +.checkbox-primary .check { + color: #4285f4; +} +.checkbox-success .check { + color: #0f9d58; +} +.checkbox-info .check { + color: #03a9f4; +} +.checkbox-warning .check { + color: #ff5722; +} +.checkbox-danger .check { + color: #f44336; +} +.checkbox-material-red .check { + color: #f44336; +} +.checkbox-material-pink .check { + color: #e91e63; +} +.checkbox-material-purple .check { + color: #9c27b0; +} +.checkbox-material-deeppurple .check { + color: #673ab7; +} +.checkbox-material-indigo .check { + color: #3f51b5; +} +.checkbox-material-lightblue .check { + color: #03a9f4; +} +.checkbox-material-cyan .check { + color: #00bcd4; +} +.checkbox-material-teal .check { + color: #009688; +} +.checkbox-material-lightgreen .check { + color: #8bc34a; +} +.checkbox-material-lime .check { + color: #cddc39; +} +.checkbox-material-lightyellow .check { + color: #ffeb3b; +} +.checkbox-material-orange .check { + color: #ff9800; +} +.checkbox-material-deeporange .check { + color: #ff5722; +} +.checkbox-material-grey .check { + color: #9e9e9e; +} +.checkbox-material-bluegrey .check { + color: #607d8b; +} +.checkbox-material-brown .check { + color: #795548; +} +.checkbox-material-lightgrey .check { + color: #ececec; +} +.checkbox input[type=checkbox] { + opacity: 0; +} +.checkbox input[type=checkbox] ~ .check:before { + position: absolute; + top: 2px; + left: 11px; + width: 18px; + height: 18px; + border: solid 2px; + border-color: #5a5a5a; + -webkit-animation: uncheck 300ms ease-out forwards; + -ms-animation: uncheck 300ms ease-out forwards; + animation: uncheck 300ms ease-out forwards; +} +.checkbox input[type=checkbox]:focus ~ .check:after { + opacity: 0.2; +} +.checkbox input[type=checkbox]:checked ~ .check:before { + -webkit-animation: check 300ms ease-out forwards; + -ms-animation: check 300ms ease-out forwards; + animation: check 300ms ease-out forwards; +} +.checkbox input[type=checkbox]:not(:checked) ~ .check:after { + -webkit-animation: rippleOff 500ms; + -ms-animation: rippleOff 500ms; + animation: rippleOff 500ms; +} +.checkbox input[type=checkbox]:checked ~ .check:after { + -webkit-animation: rippleOn 500ms; + -ms-animation: rippleOn 500ms; + animation: rippleOn 500ms; +} +.checkbox input[type=checkbox][disabled]:not(:checked) ~ .check:before { + opacity: 0.5; +} +.checkbox input[type=checkbox][disabled] ~ .check:after { + background-color: rgba(0, 0, 0, 0.84); + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} +.checkbox input[type=checkbox]:checked ~ .check:after, +.checkbox-default input[type=checkbox]:checked ~ .check:after { + background-color: #0f9d58; +} +.checkbox-primary input[type=checkbox]:checked ~ .check:after { + background-color: #4285f4; +} +.checkbox-success input[type=checkbox]:checked ~ .check:after { + background-color: #0f9d58; +} +.checkbox-info input[type=checkbox]:checked ~ .check:after { + background-color: #03a9f4; +} +.checkbox-warning input[type=checkbox]:checked ~ .check:after { + background-color: #ff5722; +} +.checkbox-danger input[type=checkbox]:checked ~ .check:after { + background-color: #f44336; +} +.checkbox-material-red input[type=checkbox]:checked ~ .check:after { + background-color: #f44336; +} +.checkbox-material-pink input[type=checkbox]:checked ~ .check:after { + background-color: #e91e63; +} +.checkbox-material-purple input[type=checkbox]:checked ~ .check:after { + background-color: #9c27b0; +} +.checkbox-material-deeppurple input[type=checkbox]:checked ~ .check:after { + background-color: #673ab7; +} +.checkbox-material-indigo input[type=checkbox]:checked ~ .check:after { + background-color: #3f51b5; +} +.checkbox-material-lightblue input[type=checkbox]:checked ~ .check:after { + background-color: #03a9f4; +} +.checkbox-material-cyan input[type=checkbox]:checked ~ .check:after { + background-color: #00bcd4; +} +.checkbox-material-teal input[type=checkbox]:checked ~ .check:after { + background-color: #009688; +} +.checkbox-material-lightgreen input[type=checkbox]:checked ~ .check:after { + background-color: #8bc34a; +} +.checkbox-material-lime input[type=checkbox]:checked ~ .check:after { + background-color: #cddc39; +} +.checkbox-material-lightyellow input[type=checkbox]:checked ~ .check:after { + background-color: #ffeb3b; +} +.checkbox-material-orange input[type=checkbox]:checked ~ .check:after { + background-color: #ff9800; +} +.checkbox-material-deeporange input[type=checkbox]:checked ~ .check:after { + background-color: #ff5722; +} +.checkbox-material-grey input[type=checkbox]:checked ~ .check:after { + background-color: #9e9e9e; +} +.checkbox-material-bluegrey input[type=checkbox]:checked ~ .check:after { + background-color: #607d8b; +} +.checkbox-material-brown input[type=checkbox]:checked ~ .check:after { + background-color: #795548; +} +.checkbox-material-lightgrey input[type=checkbox]:checked ~ .check:after { + background-color: #ececec; +} +@-webkit-keyframes uncheck { + 0% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 100% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} +@-webkit-keyframes check { + 100% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-left: transparent; + border-top-color: transparent; + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 0% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} +@-ms-keyframes check { + 100% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-left: transparent; + border-top-color: transparent; + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + transform: rotate(45deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 0% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} +@keyframes check { + 100% { + top: -3px; + left: 17px; + width: 10px; + height: 21px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-color: #0f9d58; + border-left-color: transparent; + border-top-color: transparent; + } + 51% { + border-left: transparent; + border-top-color: transparent; + } + 50% { + top: 14px; + left: 17px; + width: 4px; + height: 4px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } + 0% { + top: 1px; + left: 12px; + width: 18px; + height: 18px; + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + border-color: #5a5a5a; + border-left-color: #5a5a5a; + border-top-color: #5a5a5a; + } +} +@-webkit-keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@-ms-keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@-webkit-keyframes rippleOff { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@-ms-keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@keyframes rippleOff { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +.form-horizontal .radio { + margin-bottom: 10px; +} +.radio label { + cursor: pointer; + padding-left: 45px; + position: relative; +} +.radio label span { + display: block; + position: absolute; + left: 10px; + top: 2px; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; +} +.radio label .circle { + border: 2px solid rgba(0, 0, 0, 0.84); + height: 15px; + width: 15px; + border-radius: 100%; +} +.radio label .check { + height: 15px; + width: 15px; + border-radius: 100%; + background-color: rgba(0, 0, 0, 0.84); + -webkit-transform: scale(0); + transform: scale(0); +} +.radio label .check:after { + display: block; + position: absolute; + content: ""; + background-color: rgba(0, 0, 0, 0.84); + left: -18px; + top: -18px; + height: 50px; + width: 50px; + border-radius: 100%; + z-index: 1; + opacity: 0; + margin: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); +} +.radio label input[type=radio]:not(:checked) ~ .check:after { + -webkit-animation: rippleOff 500ms; + -ms-animation: rippleOff 500ms; + animation: rippleOff 500ms; +} +.radio label input[type=radio]:checked ~ .check:after { + -webkit-animation: rippleOn 500ms; + -ms-animation: rippleOn 500ms; + animation: rippleOn 500ms; +} +.radio input[type=radio]:checked ~ .check, +.radio-default input[type=radio]:checked ~ .check { + background-color: rgba(0, 0, 0, 0.84); +} +.radio-primary input[type=radio]:checked ~ .check { + background-color: #4285f4; +} +.radio-success input[type=radio]:checked ~ .check { + background-color: #0f9d58; +} +.radio-info input[type=radio]:checked ~ .check { + background-color: #03a9f4; +} +.radio-warning input[type=radio]:checked ~ .check { + background-color: #ff5722; +} +.radio-danger input[type=radio]:checked ~ .check { + background-color: #f44336; +} +.radio-material-red input[type=radio]:checked ~ .check { + background-color: #f44336; +} +.radio-material-pink input[type=radio]:checked ~ .check { + background-color: #e91e63; +} +.radio-material-purple input[type=radio]:checked ~ .check { + background-color: #9c27b0; +} +.radio-material-deeppurple input[type=radio]:checked ~ .check { + background-color: #673ab7; +} +.radio-material-indigo input[type=radio]:checked ~ .check { + background-color: #3f51b5; +} +.radio-material-lightblue input[type=radio]:checked ~ .check { + background-color: #03a9f4; +} +.radio-material-cyan input[type=radio]:checked ~ .check { + background-color: #00bcd4; +} +.radio-material-teal input[type=radio]:checked ~ .check { + background-color: #009688; +} +.radio-material-lightgreen input[type=radio]:checked ~ .check { + background-color: #8bc34a; +} +.radio-material-lime input[type=radio]:checked ~ .check { + background-color: #cddc39; +} +.radio-material-lightyellow input[type=radio]:checked ~ .check { + background-color: #ffeb3b; +} +.radio-material-orange input[type=radio]:checked ~ .check { + background-color: #ff9800; +} +.radio-material-deeporange input[type=radio]:checked ~ .check { + background-color: #ff5722; +} +.radio-material-grey input[type=radio]:checked ~ .check { + background-color: #9e9e9e; +} +.radio-material-bluegrey input[type=radio]:checked ~ .check { + background-color: #607d8b; +} +.radio-material-brown input[type=radio]:checked ~ .check { + background-color: #795548; +} +.radio-material-lightgrey input[type=radio]:checked ~ .check { + background-color: #ececec; +} +.radio input[type=radio]:checked ~ .circle, +.radio-default input[type=radio]:checked ~ .circle { + border-color: rgba(0, 0, 0, 0.84); +} +.radio-primary input[type=radio]:checked ~ .circle { + border-color: #4285f4; +} +.radio-success input[type=radio]:checked ~ .circle { + border-color: #0f9d58; +} +.radio-info input[type=radio]:checked ~ .circle { + border-color: #03a9f4; +} +.radio-warning input[type=radio]:checked ~ .circle { + border-color: #ff5722; +} +.radio-danger input[type=radio]:checked ~ .circle { + border-color: #f44336; +} +.radio-material-red input[type=radio]:checked ~ .circle { + border-color: #f44336; +} +.radio-material-pink input[type=radio]:checked ~ .circle { + border-color: #e91e63; +} +.radio-material-purple input[type=radio]:checked ~ .circle { + border-color: #9c27b0; +} +.radio-material-deeppurple input[type=radio]:checked ~ .circle { + border-color: #673ab7; +} +.radio-material-indigo input[type=radio]:checked ~ .circle { + border-color: #3f51b5; +} +.radio-material-lightblue input[type=radio]:checked ~ .circle { + border-color: #03a9f4; +} +.radio-material-cyan input[type=radio]:checked ~ .circle { + border-color: #00bcd4; +} +.radio-material-teal input[type=radio]:checked ~ .circle { + border-color: #009688; +} +.radio-material-lightgreen input[type=radio]:checked ~ .circle { + border-color: #8bc34a; +} +.radio-material-lime input[type=radio]:checked ~ .circle { + border-color: #cddc39; +} +.radio-material-lightyellow input[type=radio]:checked ~ .circle { + border-color: #ffeb3b; +} +.radio-material-orange input[type=radio]:checked ~ .circle { + border-color: #ff9800; +} +.radio-material-deeporange input[type=radio]:checked ~ .circle { + border-color: #ff5722; +} +.radio-material-grey input[type=radio]:checked ~ .circle { + border-color: #9e9e9e; +} +.radio-material-bluegrey input[type=radio]:checked ~ .circle { + border-color: #607d8b; +} +.radio-material-brown input[type=radio]:checked ~ .circle { + border-color: #795548; +} +.radio-material-lightgrey input[type=radio]:checked ~ .circle { + border-color: #ececec; +} +.radio input[type=radio][disabled] ~ .check, +.radio input[type=radio][disabled] ~ .circle { + opacity: 0.5; +} +.radio input[type=radio] { + display: none; +} +.radio input[type=radio]:checked ~ .check { + -webkit-transform: scale(0.55); + transform: scale(0.55); +} +.radio input[type=radio][disabled] ~ .circle { + border-color: rgba(0, 0, 0, 0.84); +} +.radio input[type=radio][disabled] ~ .check { + background-color: rgba(0, 0, 0, 0.84); +} +@-webkit-keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@-ms-keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@-webkit-keyframes rippleOff { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@-ms-keyframes rippleOn { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +@keyframes rippleOff { + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } + 0% { + opacity: 0; + } + 50% { + opacity: 0.2; + } + 100% { + opacity: 0; + } +} +fieldset[disabled] .form-control, +.form-control-wrapper .form-control, +.form-control, +fieldset[disabled] .form-control:focus, +.form-control-wrapper .form-control:focus, +.form-control:focus, +fieldset[disabled] .form-control.focus, +.form-control-wrapper .form-control.focus, +.form-control.focus { + padding: 0; + float: none; + border: 0; + box-shadow: none; + border-radius: 0; + background: transparent; + border-bottom: 1px solid #757575; +} +fieldset[disabled] .form-control:not(textarea):not(select), +.form-control-wrapper .form-control:not(textarea):not(select), +.form-control:not(textarea):not(select), +fieldset[disabled] .form-control:focus:not(textarea):not(select), +.form-control-wrapper .form-control:focus:not(textarea):not(select), +.form-control:focus:not(textarea):not(select), +fieldset[disabled] .form-control.focus:not(textarea):not(select), +.form-control-wrapper .form-control.focus:not(textarea):not(select), +.form-control.focus:not(textarea):not(select) { + height: 28px; +} +fieldset[disabled] .form-control:disabled, +.form-control-wrapper .form-control:disabled, +.form-control:disabled, +fieldset[disabled] .form-control:focus:disabled, +.form-control-wrapper .form-control:focus:disabled, +.form-control:focus:disabled, +fieldset[disabled] .form-control.focus:disabled, +.form-control-wrapper .form-control.focus:disabled, +.form-control.focus:disabled { + border-style: dashed; +} +select.form-control { + height: 23px; +} +select[multiple].form-control, +select[multiple].form-control:focus, +select[multiple].form-control.focus { + height: 85px; +} +.form-control-wrapper { + position: relative; + /* active state */ +} +.form-control-wrapper .form-control:focus, +.form-control-wrapper .form-control.focus { + outline: none; +} +.form-control-wrapper .floating-label { + color: #7E7E7E; + font-size: 14px; + position: absolute; + pointer-events: none; + left: 0px; + top: 5px; + -webkit-transition: 0.2s ease all; + transition: 0.2s ease all; + opacity: 0; +} +.form-control-wrapper .form-control:not(.empty) ~ .floating-label { + top: -10px; + font-size: 10px; + opacity: 1; +} +.form-control-wrapper .form-control:focus:invalid ~ .floating-label, +.form-control-wrapper .form-control.focus:invalid ~ .floating-label { + color: #f44336; +} +.form-control-wrapper .form-control:focus ~ .material-input:after, +.form-control-wrapper .form-control.focus ~ .material-input:after { + background-color: #5264ae; +} +.form-control-wrapper .form-control:focus:invalid ~ .material-input:before, +.form-control-wrapper .form-control.focus:invalid ~ .material-input:before, +.form-control-wrapper .form-control:focus:invalid ~ .material-input:after, +.form-control-wrapper .form-control.focus:invalid ~ .material-input:after { + background-color: #f44336; +} +.form-control-wrapper .form-control.empty ~ .floating-label { + opacity: 1; +} +.form-control-wrapper .material-input:before { + position: absolute; + content: ""; + width: 100%; + left: 0; + height: 2px; + background-color: #5264ae; + bottom: -1px; + -webkit-transform: scaleX(0); + transform: scaleX(0); + -webkit-transition: -webkit-transform 0s; + transition: transform 0s; +} +.form-control-wrapper .form-control:focus ~ .material-input:before, +.form-control-wrapper .form-control.focus ~ .material-input:before { + -webkit-transform: scaleX(1); + transform: scaleX(1); + -webkit-transition: -webkit-transform 0.2s ease-out; + transition: transform 0.2s ease-out; +} +.form-control-wrapper .material-input:after { + content: ""; + position: absolute; + height: 18px; + width: 100px; + margin-top: -1px; + top: 7px; + left: 0; + pointer-events: none; + opacity: 0.9; + -webkit-transform-origin: left; + transform-origin: left; +} +.form-control-wrapper .input-lg ~ .material-input:after { + height: 26px; +} +.form-control-wrapper textarea { + resize: none; +} +.form-control-wrapper textarea ~ .form-control-highlight { + margin-top: -11px; +} +.form-control-wrapper .form-control:focus ~ .material-input:after, +.form-control-wrapper .form-control.focus ~ .material-input:after { + -webkit-animation: input-highlight 0.3s ease; + animation: input-highlight 0.3s ease; + -webkit-animation-fill-mode: forwards; + animation-fill-mode: forwards; + opacity: 0; +} +.form-control-wrapper select ~ .material-input:after { + display: none; +} +.form-group.has-warning .material-input:before, +.form-group.has-warning input.form-control:focus ~ .material-input:after, +.form-group.has-warning input.form-control.focus ~ .material-input:after { + background: #ff5722; +} +.form-group.has-warning .control-label, +.form-group.has-warning input.form-control:not(.empty) ~ .floating-label { + color: #ff5722; +} +.form-group.has-error .material-input:before, +.form-group.has-error input.form-control:focus ~ .material-input:after, +.form-group.has-error input.form-control.focus ~ .material-input:after { + background: #f44336; +} +.form-group.has-error .control-label, +.form-group.has-error input.form-control:not(.empty) ~ .floating-label { + color: #f44336; +} +.form-group.has-success .material-input:before, +.form-group.has-success input.form-control:focus ~ .material-input:after, +.form-group.has-success input.form-control.focus ~ .material-input:after { + background: #0f9d58; +} +.form-group.has-success .control-label, +.form-group.has-success input.form-control:not(.empty) ~ .floating-label { + color: #0f9d58; +} +.form-group.has-info .material-input:before, +.form-group.has-info input.form-control:focus ~ .material-input:after, +.form-group.has-info input.form-control.focus ~ .material-input:after { + background: #03a9f4; +} +.form-group.has-info .control-label, +.form-group.has-info input.form-control:not(.empty) ~ .floating-label { + color: #03a9f4; +} +.form-group .material-input:before, +.form-group-default .material-input:before { + background-color: #3f51b5; +} +.form-group-primary .material-input:before { + background-color: #4285f4; +} +.form-group-success .material-input:before { + background-color: #0f9d58; +} +.form-group-info .material-input:before { + background-color: #03a9f4; +} +.form-group-warning .material-input:before { + background-color: #ff5722; +} +.form-group-danger .material-input:before { + background-color: #f44336; +} +.form-group-material-red .material-input:before { + background-color: #f44336; +} +.form-group-material-pink .material-input:before { + background-color: #e91e63; +} +.form-group-material-purple .material-input:before { + background-color: #9c27b0; +} +.form-group-material-deeppurple .material-input:before { + background-color: #673ab7; +} +.form-group-material-indigo .material-input:before { + background-color: #3f51b5; +} +.form-group-material-lightblue .material-input:before { + background-color: #03a9f4; +} +.form-group-material-cyan .material-input:before { + background-color: #00bcd4; +} +.form-group-material-teal .material-input:before { + background-color: #009688; +} +.form-group-material-lightgreen .material-input:before { + background-color: #8bc34a; +} +.form-group-material-lime .material-input:before { + background-color: #cddc39; +} +.form-group-material-lightyellow .material-input:before { + background-color: #ffeb3b; +} +.form-group-material-orange .material-input:before { + background-color: #ff9800; +} +.form-group-material-deeporange .material-input:before { + background-color: #ff5722; +} +.form-group-material-grey .material-input:before { + background-color: #9e9e9e; +} +.form-group-material-bluegrey .material-input:before { + background-color: #607d8b; +} +.form-group-material-brown .material-input:before { + background-color: #795548; +} +.form-group-material-lightgrey .material-input:before { + background-color: #ececec; +} +.form-group input.form-control:focus ~ .material-input:after, +.form-group-default input.form-control:focus ~ .material-input:after { + background-color: #3f51b5; +} +.form-group-primary input.form-control:focus ~ .material-input:after { + background-color: #4285f4; +} +.form-group-success input.form-control:focus ~ .material-input:after { + background-color: #0f9d58; +} +.form-group-info input.form-control:focus ~ .material-input:after { + background-color: #03a9f4; +} +.form-group-warning input.form-control:focus ~ .material-input:after { + background-color: #ff5722; +} +.form-group-danger input.form-control:focus ~ .material-input:after { + background-color: #f44336; +} +.form-group-material-red input.form-control:focus ~ .material-input:after { + background-color: #f44336; +} +.form-group-material-pink input.form-control:focus ~ .material-input:after { + background-color: #e91e63; +} +.form-group-material-purple input.form-control:focus ~ .material-input:after { + background-color: #9c27b0; +} +.form-group-material-deeppurple input.form-control:focus ~ .material-input:after { + background-color: #673ab7; +} +.form-group-material-indigo input.form-control:focus ~ .material-input:after { + background-color: #3f51b5; +} +.form-group-material-lightblue input.form-control:focus ~ .material-input:after { + background-color: #03a9f4; +} +.form-group-material-cyan input.form-control:focus ~ .material-input:after { + background-color: #00bcd4; +} +.form-group-material-teal input.form-control:focus ~ .material-input:after { + background-color: #009688; +} +.form-group-material-lightgreen input.form-control:focus ~ .material-input:after { + background-color: #8bc34a; +} +.form-group-material-lime input.form-control:focus ~ .material-input:after { + background-color: #cddc39; +} +.form-group-material-lightyellow input.form-control:focus ~ .material-input:after { + background-color: #ffeb3b; +} +.form-group-material-orange input.form-control:focus ~ .material-input:after { + background-color: #ff9800; +} +.form-group-material-deeporange input.form-control:focus ~ .material-input:after { + background-color: #ff5722; +} +.form-group-material-grey input.form-control:focus ~ .material-input:after { + background-color: #9e9e9e; +} +.form-group-material-bluegrey input.form-control:focus ~ .material-input:after { + background-color: #607d8b; +} +.form-group-material-brown input.form-control:focus ~ .material-input:after { + background-color: #795548; +} +.form-group-material-lightgrey input.form-control:focus ~ .material-input:after { + background-color: #ececec; +} +.form-group input.form-control.focus ~ .material-input:after, +.form-group-default input.form-control.focus ~ .material-input:after { + background-color: #3f51b5; +} +.form-group-primary input.form-control.focus ~ .material-input:after { + background-color: #4285f4; +} +.form-group-success input.form-control.focus ~ .material-input:after { + background-color: #0f9d58; +} +.form-group-info input.form-control.focus ~ .material-input:after { + background-color: #03a9f4; +} +.form-group-warning input.form-control.focus ~ .material-input:after { + background-color: #ff5722; +} +.form-group-danger input.form-control.focus ~ .material-input:after { + background-color: #f44336; +} +.form-group-material-red input.form-control.focus ~ .material-input:after { + background-color: #f44336; +} +.form-group-material-pink input.form-control.focus ~ .material-input:after { + background-color: #e91e63; +} +.form-group-material-purple input.form-control.focus ~ .material-input:after { + background-color: #9c27b0; +} +.form-group-material-deeppurple input.form-control.focus ~ .material-input:after { + background-color: #673ab7; +} +.form-group-material-indigo input.form-control.focus ~ .material-input:after { + background-color: #3f51b5; +} +.form-group-material-lightblue input.form-control.focus ~ .material-input:after { + background-color: #03a9f4; +} +.form-group-material-cyan input.form-control.focus ~ .material-input:after { + background-color: #00bcd4; +} +.form-group-material-teal input.form-control.focus ~ .material-input:after { + background-color: #009688; +} +.form-group-material-lightgreen input.form-control.focus ~ .material-input:after { + background-color: #8bc34a; +} +.form-group-material-lime input.form-control.focus ~ .material-input:after { + background-color: #cddc39; +} +.form-group-material-lightyellow input.form-control.focus ~ .material-input:after { + background-color: #ffeb3b; +} +.form-group-material-orange input.form-control.focus ~ .material-input:after { + background-color: #ff9800; +} +.form-group-material-deeporange input.form-control.focus ~ .material-input:after { + background-color: #ff5722; +} +.form-group-material-grey input.form-control.focus ~ .material-input:after { + background-color: #9e9e9e; +} +.form-group-material-bluegrey input.form-control.focus ~ .material-input:after { + background-color: #607d8b; +} +.form-group-material-brown input.form-control.focus ~ .material-input:after { + background-color: #795548; +} +.form-group-material-lightgrey input.form-control.focus ~ .material-input:after { + background-color: #ececec; +} +.form-group .control-label, +.form-group-default .control-label { + color: rgba(0, 0, 0, 0.84); +} +.form-group-primary .control-label { + color: #4285f4; +} +.form-group-success .control-label { + color: #0f9d58; +} +.form-group-info .control-label { + color: #03a9f4; +} +.form-group-warning .control-label { + color: #ff5722; +} +.form-group-danger .control-label { + color: #f44336; +} +.form-group-material-red .control-label { + color: #f44336; +} +.form-group-material-pink .control-label { + color: #e91e63; +} +.form-group-material-purple .control-label { + color: #9c27b0; +} +.form-group-material-deeppurple .control-label { + color: #673ab7; +} +.form-group-material-indigo .control-label { + color: #3f51b5; +} +.form-group-material-lightblue .control-label { + color: #03a9f4; +} +.form-group-material-cyan .control-label { + color: #00bcd4; +} +.form-group-material-teal .control-label { + color: #009688; +} +.form-group-material-lightgreen .control-label { + color: #8bc34a; +} +.form-group-material-lime .control-label { + color: #cddc39; +} +.form-group-material-lightyellow .control-label { + color: #ffeb3b; +} +.form-group-material-orange .control-label { + color: #ff9800; +} +.form-group-material-deeporange .control-label { + color: #ff5722; +} +.form-group-material-grey .control-label { + color: #9e9e9e; +} +.form-group-material-bluegrey .control-label { + color: #607d8b; +} +.form-group-material-brown .control-label { + color: #795548; +} +.form-group-material-lightgrey .control-label { + color: #ececec; +} +.form-group input.form-control:not(.empty) ~ .floating-label, +.form-group-default input.form-control:not(.empty) ~ .floating-label { + color: #3f51b5; +} +.form-group-primary input.form-control:not(.empty) ~ .floating-label { + color: #4285f4; +} +.form-group-success input.form-control:not(.empty) ~ .floating-label { + color: #0f9d58; +} +.form-group-info input.form-control:not(.empty) ~ .floating-label { + color: #03a9f4; +} +.form-group-warning input.form-control:not(.empty) ~ .floating-label { + color: #ff5722; +} +.form-group-danger input.form-control:not(.empty) ~ .floating-label { + color: #f44336; +} +.form-group-material-red input.form-control:not(.empty) ~ .floating-label { + color: #f44336; +} +.form-group-material-pink input.form-control:not(.empty) ~ .floating-label { + color: #e91e63; +} +.form-group-material-purple input.form-control:not(.empty) ~ .floating-label { + color: #9c27b0; +} +.form-group-material-deeppurple input.form-control:not(.empty) ~ .floating-label { + color: #673ab7; +} +.form-group-material-indigo input.form-control:not(.empty) ~ .floating-label { + color: #3f51b5; +} +.form-group-material-lightblue input.form-control:not(.empty) ~ .floating-label { + color: #03a9f4; +} +.form-group-material-cyan input.form-control:not(.empty) ~ .floating-label { + color: #00bcd4; +} +.form-group-material-teal input.form-control:not(.empty) ~ .floating-label { + color: #009688; +} +.form-group-material-lightgreen input.form-control:not(.empty) ~ .floating-label { + color: #8bc34a; +} +.form-group-material-lime input.form-control:not(.empty) ~ .floating-label { + color: #cddc39; +} +.form-group-material-lightyellow input.form-control:not(.empty) ~ .floating-label { + color: #ffeb3b; +} +.form-group-material-orange input.form-control:not(.empty) ~ .floating-label { + color: #ff9800; +} +.form-group-material-deeporange input.form-control:not(.empty) ~ .floating-label { + color: #ff5722; +} +.form-group-material-grey input.form-control:not(.empty) ~ .floating-label { + color: #9e9e9e; +} +.form-group-material-bluegrey input.form-control:not(.empty) ~ .floating-label { + color: #607d8b; +} +.form-group-material-brown input.form-control:not(.empty) ~ .floating-label { + color: #795548; +} +.form-group-material-lightgrey input.form-control:not(.empty) ~ .floating-label { + color: #ececec; +} +.input-group .form-control-wrapper { + margin-right: 5px; + margin-left: 5px; + bottom: -10px; +} +.input-group .form-control-wrapper .form-control { + float: none; +} +.input-group .input-group-addon { + border: 0; +} +.input-group .input-group-btn .btn { + border-radius: 4px; +} +select.form-control { + border: 0; + box-shadow: none; + border-bottom: 1px solid #757575; + border-radius: 0; +} +select.form-control:focus, +select.form-control.focus { + box-shadow: none; + border-color: #757575; +} +@keyframes input-highlight { + 0% { + left: 20%; + -webkit-transform: scaleX(20%); + transform: scaleX(20%); + } + 99% { + -webkit-transform: scaleX(0); + transform: scaleX(0); + left: 0; + opacity: 1; + } + 100% { + opacity: 0; + } +} +.form-control-wrapper input[type=file] { + opacity: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; +} +legend { + border-bottom: 0; +} +.modal-content { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + border-radius: 0; + border: 0; +} +.modal-content .modal-header { + border-bottom: 0; +} +.modal-content .modal-footer { + border-top: 0; +} +.modal-content .modal-footer .btn + .btn { + margin-bottom: 10px; +} +.list-group { + border-radius: 0; +} +.list-group .list-group-item { + background-color: transparent; + overflow: hidden; + border: 0; + border-radius: 0; + padding: 0 16px; +} +.list-group .list-group-item .row-picture, +.list-group .list-group-item .row-action-primary { + float: left; + display: inline-block; + padding-right: 16px; +} +.list-group .list-group-item .row-picture img, +.list-group .list-group-item .row-action-primary img, +.list-group .list-group-item .row-picture i, +.list-group .list-group-item .row-action-primary i, +.list-group .list-group-item .row-picture label, +.list-group .list-group-item .row-action-primary label { + display: block; + width: 56px; + height: 56px; +} +.list-group .list-group-item .row-picture img, +.list-group .list-group-item .row-action-primary img { + background: rgba(0, 0, 0, 0.1); + padding: 1px; +} +.list-group .list-group-item .row-picture img.circle, +.list-group .list-group-item .row-action-primary img.circle { + border-radius: 100%; +} +.list-group .list-group-item .row-picture i, +.list-group .list-group-item .row-action-primary i { + background: rgba(0, 0, 0, 0.25); + border-radius: 100%; + text-align: center; + line-height: 56px; + font-size: 20px; + color: white; +} +.list-group .list-group-item .row-picture label, +.list-group .list-group-item .row-action-primary label { + margin-left: 7px; + margin-right: -7px; + margin-top: 5px; + margin-bottom: -5px; +} +.list-group .list-group-item .row-content { + display: inline-block; + width: calc(100% - 92px); + min-height: 66px; +} +.list-group .list-group-item .row-content .action-secondary { + position: absolute; + right: 16px; + top: 16px; +} +.list-group .list-group-item .row-content .action-secondary i { + font-size: 20px; + color: rgba(0, 0, 0, 0.25); + cursor: pointer; +} +.list-group .list-group-item .row-content .action-secondary ~ * { + max-width: calc(100% - 30px); +} +.list-group .list-group-item .row-content .least-content { + position: absolute; + right: 16px; + top: 0px; + color: rgba(0, 0, 0, 0.54); + font-size: 14px; +} +.list-group .list-group-item .list-group-item-heading { + color: rgba(0, 0, 0, 0.77); + font-size: 20px; + line-height: 29px; +} +.list-group .list-group-separator { + clear: both; + overflow: hidden; + margin-top: 10px; + margin-bottom: 10px; +} +.list-group .list-group-separator:before { + content: ""; + width: calc(100% - 90px); + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + float: right; +} +.navbar { + background-color: #4285f4; + border: 0; + border-radius: 0; +} +.navbar .navbar-brand { + position: relative; + height: 60px; + line-height: 30px; + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-brand:hover, +.navbar .navbar-brand:focus { + color: rgba(255, 255, 255, 0.84); + background-color: transparent; +} +.navbar .navbar-text { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-nav > li > a { + color: rgba(255, 255, 255, 0.84); + padding-top: 20px; + padding-bottom: 20px; +} +.navbar .navbar-nav > li > a:hover, +.navbar .navbar-nav > li > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: transparent; +} +.navbar .navbar-nav > .active > a, +.navbar .navbar-nav > .active > a:hover, +.navbar .navbar-nav > .active > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: rgba(0, 0, 0, 0.05); +} +.navbar .navbar-nav > .disabled > a, +.navbar .navbar-nav > .disabled > a:hover, +.navbar .navbar-nav > .disabled > a:focus { + color: #e5e5e5; + background-color: transparent; +} +.navbar .navbar-toggle { + border-color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-toggle:hover, +.navbar .navbar-toggle:focus { + background-color: transparent; +} +.navbar .navbar-toggle .icon-bar { + background-color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-collapse, +.navbar .navbar-form { + border-color: rgba(0, 0, 0, 0.1); +} +.navbar .navbar-nav > .open > a, +.navbar .navbar-nav > .open > a:hover, +.navbar .navbar-nav > .open > a:focus { + background-color: rgba(0, 0, 0, 0.05); + color: rgba(255, 255, 255, 0.84); +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .dropdown-header { + border: 0; + color: rgba(212, 212, 212, 0.84); + } + .navbar .navbar-nav .open .dropdown-menu .divider { + background-color: rgba(255, 255, 255, 0.84); + } + .navbar .navbar-nav .open .dropdown-menu > li > a { + color: rgba(255, 255, 255, 0.84); + } + .navbar .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar .navbar-nav .open .dropdown-menu > li > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: transparent; + } + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: rgba(255, 255, 255, 0.84); + background-color: rgba(0, 0, 0, 0.05); + } + .navbar .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #e5e5e5; + background-color: transparent; + } +} +.navbar .navbar-link { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-link:hover { + color: rgba(255, 255, 255, 0.84); +} +.navbar .btn-link { + color: rgba(255, 255, 255, 0.84); +} +.navbar .btn-link:hover, +.navbar .btn-link:focus { + color: rgba(255, 255, 255, 0.84); +} +.navbar .btn-link[disabled]:hover, +fieldset[disabled] .navbar .btn-link:hover, +.navbar .btn-link[disabled]:focus, +fieldset[disabled] .navbar .btn-link:focus { + color: #e5e5e5; +} +.navbar .navbar-form { + margin-top: 16px; +} +.navbar .navbar-form .form-control-wrapper .form-control, +.navbar .navbar-form .form-control { + border-color: rgba(255, 255, 255, 0.84); + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form .form-control-wrapper .material-input:before, +.navbar .navbar-form .form-control-wrapper input:focus ~ .material-input:after { + background-color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form ::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form :-moz-placeholder { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form ::-moz-placeholder { + color: rgba(255, 255, 255, 0.84); +} +.navbar .navbar-form :-ms-input-placeholder { + color: rgba(255, 255, 255, 0.84); +} +.navbar, +.navbar-default { + background-color: #4285f4; +} +.navbar-primary { + background-color: #4285f4; +} +.navbar-success { + background-color: #0f9d58; +} +.navbar-info { + background-color: #03a9f4; +} +.navbar-warning { + background-color: #ff5722; +} +.navbar-danger { + background-color: #f44336; +} +.navbar-material-red { + background-color: #f44336; +} +.navbar-material-pink { + background-color: #e91e63; +} +.navbar-material-purple { + background-color: #9c27b0; +} +.navbar-material-deeppurple { + background-color: #673ab7; +} +.navbar-material-indigo { + background-color: #3f51b5; +} +.navbar-material-lightblue { + background-color: #03a9f4; +} +.navbar-material-cyan { + background-color: #00bcd4; +} +.navbar-material-teal { + background-color: #009688; +} +.navbar-material-lightgreen { + background-color: #8bc34a; +} +.navbar-material-lime { + background-color: #cddc39; +} +.navbar-material-lightyellow { + background-color: #ffeb3b; +} +.navbar-material-orange { + background-color: #ff9800; +} +.navbar-material-deeporange { + background-color: #ff5722; +} +.navbar-material-grey { + background-color: #9e9e9e; +} +.navbar-material-bluegrey { + background-color: #607d8b; +} +.navbar-material-brown { + background-color: #795548; +} +.navbar-material-lightgrey { + background-color: #ececec; +} +.navbar-inverse { + background-color: #3f51b5; +} +.navbar-material-white { + background-color: #FFF; +} +.navbar-material-white .navbar-brand, +.navbar-material-white .navbar-brand:hover, +.navbar-material-white .navbar-brand:focus { + color: rgba(0, 0, 0, 0.84); +} +.navbar-material-white .navbar-nav > li > a { + color: rgba(0, 0, 0, 0.84); +} +.navbar-material-white .navbar-nav > li > a:hover, +.navbar-material-white .navbar-nav > li > a:focus { + color: rgba(0, 0, 0, 0.84); + background-color: transparent; +} +.navbar-material-white .navbar-nav > .active > a, +.navbar-material-white .navbar-nav > .active > a:hover, +.navbar-material-white .navbar-nav > .active > a:focus { + color: rgba(0, 0, 0, 0.84); + background-color: rgba(0, 0, 0, 0.05); +} +.navbar-material-white .navbar-nav > .disabled > a, +.navbar-material-white .navbar-nav > .disabled > a:hover, +.navbar-material-white .navbar-nav > .disabled > a:focus { + color: rgba(0, 0, 0, 0.84); + background-color: transparent; +} +.navbar-material-white .navbar-nav > .open > a, +.navbar-material-white .navbar-nav > .open > a:hover, +.navbar-material-white .navbar-nav > .open > a:focus { + background-color: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.84); +} +.dropdown-menu { + border: 0; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); +} +.dropdown-menu .divider { + background-color: rgba(229, 229, 229, 0.12); +} +.dropdown-menu li { + overflow: hidden; + position: relative; +} +.dropdown-menu li a:hover { + background: rgba(0, 0, 0, 0.08); +} +.alert { + border: 0px; + border-radius: 0; +} +.alert a, +.alert .alert-link { + color: #FFFFFF; +} +.alert, +.alert-default { + background-color: #ffffff; +} +.alert-primary { + background-color: #4285f4; +} +.alert-success { + background-color: #0f9d58; +} +.alert-info { + background-color: #03a9f4; +} +.alert-warning { + background-color: #ff5722; +} +.alert-danger { + background-color: #f44336; +} +.alert-material-red { + background-color: #f44336; +} +.alert-material-pink { + background-color: #e91e63; +} +.alert-material-purple { + background-color: #9c27b0; +} +.alert-material-deeppurple { + background-color: #673ab7; +} +.alert-material-indigo { + background-color: #3f51b5; +} +.alert-material-lightblue { + background-color: #03a9f4; +} +.alert-material-cyan { + background-color: #00bcd4; +} +.alert-material-teal { + background-color: #009688; +} +.alert-material-lightgreen { + background-color: #8bc34a; +} +.alert-material-lime { + background-color: #cddc39; +} +.alert-material-lightyellow { + background-color: #ffeb3b; +} +.alert-material-orange { + background-color: #ff9800; +} +.alert-material-deeporange { + background-color: #ff5722; +} +.alert-material-grey { + background-color: #9e9e9e; +} +.alert-material-bluegrey { + background-color: #607d8b; +} +.alert-material-brown { + background-color: #795548; +} +.alert-material-lightgrey { + background-color: #ececec; +} +.alert-info, +.alert-danger, +.alert-warning, +.alert-success { + color: #FFFFFF; +} +.alert-default a, +.alert-default .alert-link { + color: #000000; +} +.progress { + height: 4px; + border-radius: 0; + box-shadow: none; + background: #c8c8c8; +} +.progress .progress-bar { + box-shadow: none; +} +.progress .progress-bar, +.progress .progress-bar-default { + background-color: #4285f4; +} +.progress .progress-bar-primary { + background-color: #4285f4; +} +.progress .progress-bar-success { + background-color: #0f9d58; +} +.progress .progress-bar-info { + background-color: #03a9f4; +} +.progress .progress-bar-warning { + background-color: #ff5722; +} +.progress .progress-bar-danger { + background-color: #f44336; +} +.progress .progress-bar-material-red { + background-color: #f44336; +} +.progress .progress-bar-material-pink { + background-color: #e91e63; +} +.progress .progress-bar-material-purple { + background-color: #9c27b0; +} +.progress .progress-bar-material-deeppurple { + background-color: #673ab7; +} +.progress .progress-bar-material-indigo { + background-color: #3f51b5; +} +.progress .progress-bar-material-lightblue { + background-color: #03a9f4; +} +.progress .progress-bar-material-cyan { + background-color: #00bcd4; +} +.progress .progress-bar-material-teal { + background-color: #009688; +} +.progress .progress-bar-material-lightgreen { + background-color: #8bc34a; +} +.progress .progress-bar-material-lime { + background-color: #cddc39; +} +.progress .progress-bar-material-lightyellow { + background-color: #ffeb3b; +} +.progress .progress-bar-material-orange { + background-color: #ff9800; +} +.progress .progress-bar-material-deeporange { + background-color: #ff5722; +} +.progress .progress-bar-material-grey { + background-color: #9e9e9e; +} +.progress .progress-bar-material-bluegrey { + background-color: #607d8b; +} +.progress .progress-bar-material-brown { + background-color: #795548; +} +.progress .progress-bar-material-lightgrey { + background-color: #ececec; +} +.text-warning { + color: #ff5722; +} +.text-primary { + color: #4285f4; +} +.text-danger { + color: #f44336; +} +.text-success { + color: #0f9d58; +} +.text-info { + color: #03a9f4; +} +.nav-tabs { + background: #4285f4; +} +.nav-tabs > li > a { + color: #FFFFFF; + border: 0; + margin: 0; +} +.nav-tabs > li > a:hover { + background: transparent; + border: 0; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.open > a, +.nav-tabs > li.open > a:hover { + background: transparent !important; + border: 0 !important; + color: #FFFFFF !important; + font-weight: 500; +} +.nav-tabs > li.disabled > a, +.nav-tabs > li.disabled > a:hover { + color: rgba(255, 255, 255, 0.5); +} +.popover, +.tooltip-inner { + background: #323232; + color: #FFF; + border-radius: 2px; +} +.tooltip, +.tooltip.in { + opacity: 1; +} +.popover.left .arrow:after, +.tooltip.left .arrow:after, +.popover.left .tooltip-arrow, +.tooltip.left .tooltip-arrow { + border-left-color: #323232; +} +.popover.right .arrow:after, +.tooltip.right .arrow:after, +.popover.right .tooltip-arrow, +.tooltip.right .tooltip-arrow { + border-right-color: #323232; +} +.popover.top .arrow:after, +.tooltip.top .arrow:after, +.popover.top .tooltip-arrow, +.tooltip.top .tooltip-arrow { + border-top-color: #323232; +} +.popover.bottom .arrow:after, +.tooltip.bottom .arrow:after, +.popover.bottom .tooltip-arrow, +.tooltip.bottom .tooltip-arrow { + border-bottom-color: #323232; +} +.icon, +.icon-default { + color: rgba(0, 0, 0, 0.84); +} +.icon-primary { + color: #4285f4; +} +.icon-success { + color: #0f9d58; +} +.icon-info { + color: #03a9f4; +} +.icon-warning { + color: #ff5722; +} +.icon-danger { + color: #f44336; +} +.icon-material-red { + color: #f44336; +} +.icon-material-pink { + color: #e91e63; +} +.icon-material-purple { + color: #9c27b0; +} +.icon-material-deeppurple { + color: #673ab7; +} +.icon-material-indigo { + color: #3f51b5; +} +.icon-material-lightblue { + color: #03a9f4; +} +.icon-material-cyan { + color: #00bcd4; +} +.icon-material-teal { + color: #009688; +} +.icon-material-lightgreen { + color: #8bc34a; +} +.icon-material-lime { + color: #cddc39; +} +.icon-material-lightyellow { + color: #ffeb3b; +} +.icon-material-orange { + color: #ff9800; +} +.icon-material-deeporange { + color: #ff5722; +} +.icon-material-grey { + color: #9e9e9e; +} +.icon-material-bluegrey { + color: #607d8b; +} +.icon-material-brown { + color: #795548; +} +.icon-material-lightgrey { + color: #ececec; +} +.snackbar { + background-color: #323232; + color: rgba(255, 255, 255, 0.84); + font-size: 14px; + border-radius: 2px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + height: 0; + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s; + -webkit-transform: translateY(200%); + transform: translateY(200%); +} +.snackbar.snackbar-opened { + padding: 14px 15px; + margin-bottom: 20px; + height: auto; + -webkit-transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s; + transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s; + -webkit-transform: none; + transform: none; +} +.snackbar.toast { + border-radius: 200px; +} +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -webkit-user-select: none; + -ms-touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.noUi-base { + width: 100%; + height: 100%; + position: relative; +} +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} +.noUi-handle { + position: relative; + z-index: 1; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-sizing: border-box; +} +.noUi-stacking .noUi-handle { + z-index: 10; +} +.noUi-stacking + .noUi-origin { + *z-index: -1; +} +.noUi-state-tap .noUi-origin { + -webkit-transition: left 0.3s, top 0.3s; + transition: left 0.3s, top 0.3s; +} +.noUi-state-drag * { + cursor: inherit !important; +} +.noUi-horizontal { + height: 10px; +} +.noUi-horizontal .noUi-handle { + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 12px; + height: 12px; + left: -10px; + top: -5px; +} +.noUi-horizontal.noUi-extended { + padding: 0 15px; +} +.noUi-horizontal.noUi-extended .noUi-origin { + right: -15px; +} +.noUi-background { + height: 2px; + margin: 20px 0; +} +.noUi-origin { + margin: 0; + border-radius: 0; + height: 2px; + background: #c8c8c8; +} +.noUi-origin[style^="left: 0"] .noUi-handle { + background-color: #fff; + border: 2px solid #c8c8c8; +} +.noUi-origin[style^="left: 0"] .noUi-handle:active { + border-width: 1px; +} +.noUi-target { + border-radius: 2px; +} +.noUi-handle { + border-radius: 100%; + cursor: default; + -webkit-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; + border: 1px solid; +} +.noUi-horizontal { + height: 2px; + margin: 15px 0; +} +.noUi-horizontal .noUi-handle:active { + -webkit-transform: scale(2.5); + transform: scale(2.5); +} +[disabled].noUi-slider { + opacity: 0.5; +} +[disabled] .noUi-handle { + cursor: not-allowed; +} +.slider { + background: #c8c8c8; +} +.slider.noUi-connect, +.slider-default.noUi-connect { + background-color: #4285f4; +} +.slider-primary.noUi-connect { + background-color: #4285f4; +} +.slider-success.noUi-connect { + background-color: #0f9d58; +} +.slider-info.noUi-connect { + background-color: #03a9f4; +} +.slider-warning.noUi-connect { + background-color: #ff5722; +} +.slider-danger.noUi-connect { + background-color: #f44336; +} +.slider-material-red.noUi-connect { + background-color: #f44336; +} +.slider-material-pink.noUi-connect { + background-color: #e91e63; +} +.slider-material-purple.noUi-connect { + background-color: #9c27b0; +} +.slider-material-deeppurple.noUi-connect { + background-color: #673ab7; +} +.slider-material-indigo.noUi-connect { + background-color: #3f51b5; +} +.slider-material-lightblue.noUi-connect { + background-color: #03a9f4; +} +.slider-material-cyan.noUi-connect { + background-color: #00bcd4; +} +.slider-material-teal.noUi-connect { + background-color: #009688; +} +.slider-material-lightgreen.noUi-connect { + background-color: #8bc34a; +} +.slider-material-lime.noUi-connect { + background-color: #cddc39; +} +.slider-material-lightyellow.noUi-connect { + background-color: #ffeb3b; +} +.slider-material-orange.noUi-connect { + background-color: #ff9800; +} +.slider-material-deeporange.noUi-connect { + background-color: #ff5722; +} +.slider-material-grey.noUi-connect { + background-color: #9e9e9e; +} +.slider-material-bluegrey.noUi-connect { + background-color: #607d8b; +} +.slider-material-brown.noUi-connect { + background-color: #795548; +} +.slider-material-lightgrey.noUi-connect { + background-color: #ececec; +} +.slider .noUi-connect, +.slider-default .noUi-connect { + background-color: #4285f4; +} +.slider-primary .noUi-connect { + background-color: #4285f4; +} +.slider-success .noUi-connect { + background-color: #0f9d58; +} +.slider-info .noUi-connect { + background-color: #03a9f4; +} +.slider-warning .noUi-connect { + background-color: #ff5722; +} +.slider-danger .noUi-connect { + background-color: #f44336; +} +.slider-material-red .noUi-connect { + background-color: #f44336; +} +.slider-material-pink .noUi-connect { + background-color: #e91e63; +} +.slider-material-purple .noUi-connect { + background-color: #9c27b0; +} +.slider-material-deeppurple .noUi-connect { + background-color: #673ab7; +} +.slider-material-indigo .noUi-connect { + background-color: #3f51b5; +} +.slider-material-lightblue .noUi-connect { + background-color: #03a9f4; +} +.slider-material-cyan .noUi-connect { + background-color: #00bcd4; +} +.slider-material-teal .noUi-connect { + background-color: #009688; +} +.slider-material-lightgreen .noUi-connect { + background-color: #8bc34a; +} +.slider-material-lime .noUi-connect { + background-color: #cddc39; +} +.slider-material-lightyellow .noUi-connect { + background-color: #ffeb3b; +} +.slider-material-orange .noUi-connect { + background-color: #ff9800; +} +.slider-material-deeporange .noUi-connect { + background-color: #ff5722; +} +.slider-material-grey .noUi-connect { + background-color: #9e9e9e; +} +.slider-material-bluegrey .noUi-connect { + background-color: #607d8b; +} +.slider-material-brown .noUi-connect { + background-color: #795548; +} +.slider-material-lightgrey .noUi-connect { + background-color: #ececec; +} +.slider .noUi-handle, +.slider-default .noUi-handle { + background-color: #4285f4; +} +.slider-primary .noUi-handle { + background-color: #4285f4; +} +.slider-success .noUi-handle { + background-color: #0f9d58; +} +.slider-info .noUi-handle { + background-color: #03a9f4; +} +.slider-warning .noUi-handle { + background-color: #ff5722; +} +.slider-danger .noUi-handle { + background-color: #f44336; +} +.slider-material-red .noUi-handle { + background-color: #f44336; +} +.slider-material-pink .noUi-handle { + background-color: #e91e63; +} +.slider-material-purple .noUi-handle { + background-color: #9c27b0; +} +.slider-material-deeppurple .noUi-handle { + background-color: #673ab7; +} +.slider-material-indigo .noUi-handle { + background-color: #3f51b5; +} +.slider-material-lightblue .noUi-handle { + background-color: #03a9f4; +} +.slider-material-cyan .noUi-handle { + background-color: #00bcd4; +} +.slider-material-teal .noUi-handle { + background-color: #009688; +} +.slider-material-lightgreen .noUi-handle { + background-color: #8bc34a; +} +.slider-material-lime .noUi-handle { + background-color: #cddc39; +} +.slider-material-lightyellow .noUi-handle { + background-color: #ffeb3b; +} +.slider-material-orange .noUi-handle { + background-color: #ff9800; +} +.slider-material-deeporange .noUi-handle { + background-color: #ff5722; +} +.slider-material-grey .noUi-handle { + background-color: #9e9e9e; +} +.slider-material-bluegrey .noUi-handle { + background-color: #607d8b; +} +.slider-material-brown .noUi-handle { + background-color: #795548; +} +.slider-material-lightgrey .noUi-handle { + background-color: #ececec; +} +.slider .noUi-handle, +.slider-default .noUi-handle { + border-color: #4285f4; +} +.slider-primary .noUi-handle { + border-color: #4285f4; +} +.slider-success .noUi-handle { + border-color: #0f9d58; +} +.slider-info .noUi-handle { + border-color: #03a9f4; +} +.slider-warning .noUi-handle { + border-color: #ff5722; +} +.slider-danger .noUi-handle { + border-color: #f44336; +} +.slider-material-red .noUi-handle { + border-color: #f44336; +} +.slider-material-pink .noUi-handle { + border-color: #e91e63; +} +.slider-material-purple .noUi-handle { + border-color: #9c27b0; +} +.slider-material-deeppurple .noUi-handle { + border-color: #673ab7; +} +.slider-material-indigo .noUi-handle { + border-color: #3f51b5; +} +.slider-material-lightblue .noUi-handle { + border-color: #03a9f4; +} +.slider-material-cyan .noUi-handle { + border-color: #00bcd4; +} +.slider-material-teal .noUi-handle { + border-color: #009688; +} +.slider-material-lightgreen .noUi-handle { + border-color: #8bc34a; +} +.slider-material-lime .noUi-handle { + border-color: #cddc39; +} +.slider-material-lightyellow .noUi-handle { + border-color: #ffeb3b; +} +.slider-material-orange .noUi-handle { + border-color: #ff9800; +} +.slider-material-deeporange .noUi-handle { + border-color: #ff5722; +} +.slider-material-grey .noUi-handle { + border-color: #9e9e9e; +} +.slider-material-bluegrey .noUi-handle { + border-color: #607d8b; +} +.slider-material-brown .noUi-handle { + border-color: #795548; +} +.slider-material-lightgrey .noUi-handle { + border-color: #ececec; +} diff --git a/client/lib/ripples.css b/client/lib/ripples.css new file mode 100644 index 0000000..a3c1930 --- /dev/null +++ b/client/lib/ripples.css @@ -0,0 +1,42 @@ +/* Generated by less 1.7.0 */ +.withripple { + position: relative; +} +.ripple-wrapper { + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + overflow: hidden; + border-radius: 2px; +} +.ripple { + position: absolute; + width: 20px; + height: 20px; + margin-left: -10px; + margin-top: -10px; + border-radius: 100%; + background-color: rgba(0, 0, 0, 0.05); + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -webkit-transform-origin: 50%; + -ms-transform-origin: 50%; + transform-origin: 50%; + opacity: 0; +} +.ripple.ripple-on { + -webkit-transition: opacity 0.15s ease-in 0s, -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + -ms-transition: opacity 0.15s ease-in 0s, -ms-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + -moz-transition: opacity 0.15s ease-in 0s, -moz-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s; + opacity: 1; +} +.ripple.ripple-out { + -webkit-transition: opacity 0.1s linear 0s !important; + transition: opacity 0.1s linear 0s !important; + opacity: 0; +} diff --git a/client/lib/snackbarsjs/snackbar.js b/client/lib/snackbarsjs/snackbar.js new file mode 100644 index 0000000..b29c0a0 --- /dev/null +++ b/client/lib/snackbarsjs/snackbar.js @@ -0,0 +1,137 @@ +/* SnackbarJS - MIT LICENSE (https://github.com/FezVrasta/snackbarjs/blob/master/LICENSE.md) */ + +(function( $ ){ + + $(document).ready(function() { + $("body").append("
"); + }); + + function isset(variable) { + if (typeof variable !== "undefined" && variable !== null) { + return true; + } else { + return false; + } + } + + $(document) + .on("click", "[data-toggle=snackbar]", function() { + $(this).snackbar("toggle"); + }) + .on("click", "#snackbar-container .snackbar", function() { + $(this).snackbar("hide"); + }); + + $.snackbar = function(options) { + + if (isset(options) && options === Object(options)) { + var $snackbar; + + if (!isset(options.id)) { + $snackbar = $("
").attr("id", "snackbar" + Date.now()).attr("class", "snackbar"); + } else { + $snackbar = $("#" + options.id); + } + + var snackbarStatus = $snackbar.hasClass("snackbar-opened"); + + if (isset(options.style)) { + $snackbar.attr("class", "snackbar " + options.style); + } else { + $snackbar.attr("class", "snackbar"); + } + + options.timeout = (isset(options.timeout)) ? options.timeout : 3000; + + if (isset(options.content)) { + if ($snackbar.find(".snackbar-content").length) { + $snackbar.find(".snackbar-content").text(options.content); + } else { + $snackbar.prepend("" + options.content + ""); + } + } + + if (!isset(options.id)) { + $snackbar.appendTo("#snackbar-container"); + } else { + $snackbar.insertAfter("#snackbar-container .snackbar:last-child"); + } + + // Show or hide item + if (isset(options.action) && options.action == "toggle") { + if (snackbarStatus) { + options.action = "hide"; + } else { + options.action = "show"; + } + } + + var animationId1 = Date.now(); + $snackbar.data("animationId1", animationId1); + setTimeout(function() { + if ($snackbar.data("animationId1") === animationId1) { + if (!isset(options.action) || options.action == "show") { + $snackbar.addClass("snackbar-opened"); + } else if (isset(options.action) && options.action == "hide") { + $snackbar.removeClass("snackbar-opened"); + } + } + }, 50); + + // Set timer for item autohide + var animationId2 = Date.now(); + $snackbar.data("animationId2", animationId2); + + if (options.timeout !== 0) { + setTimeout(function() { + if ($snackbar.data("animationId2") === animationId2) { + $snackbar.removeClass("snackbar-opened"); + } + }, options.timeout); + } + + return $snackbar; + + } else { + return false; + } + }; + + $.fn.snackbar = function(action) { + + var options = {}; + + if (!this.hasClass("snackbar")) { + + if (!isset(action) || action === "show" || action === "hide" || action == "toggle") { + options = { + content: $(this).attr("data-content"), + style: $(this).attr("data-style"), + timeout: $(this).attr("data-timeout") + }; + } + + if (isset(action)) { + options.id = this.attr("data-snackbar-id"); + + if(action === "show" || action === "hide" || action == "toggle") { + options.action = action; + } + } + + var $snackbar = $.snackbar(options); + this.attr("data-snackbar-id", $snackbar.attr("id")); + + return $snackbar; + + } else { + + options.id = this.attr("id"); + if(action === "show" || action === "hide" || action == "toggle") { + options.action = action; + } + return $.snackbar(options); + } + + }; +})( jQuery ); diff --git a/client/lib/snackbarsjs/snackbar.less b/client/lib/snackbarsjs/snackbar.less new file mode 100644 index 0000000..23e6896 --- /dev/null +++ b/client/lib/snackbarsjs/snackbar.less @@ -0,0 +1,38 @@ +// out: snackbar.css +#snackbar-container { + position: fixed; + left: 20px; + bottom: 0; + z-index: 99999; +} +.snackbar { + overflow: hidden; + clear: both; + min-width: 288px; + max-width: 568px; + cursor: pointer; + opacity: 0; +} + +.snackbar.snackbar-opened { + height: auto; + opacity: 1; +} + +@media (max-width: 767px) { + #snackbar-container { + left: 0px !important; + right: 0px; + width: 100%; + .snackbar { + min-width: 100%; + } + [class="snackbar snackbar-opened"] ~ .snackbar.toast { + margin-top: 20px; + } + [class="snackbar snackbar-opened"] { + border-radius: 0; + margin-bottom: 0; + } + } +} diff --git a/client/methods/activities.js b/client/methods/activities.js new file mode 100644 index 0000000..48deffe --- /dev/null +++ b/client/methods/activities.js @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* Activities Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/activities/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ +}); diff --git a/client/methods/create_organization.js b/client/methods/create_organization.js new file mode 100644 index 0000000..d28be86 --- /dev/null +++ b/client/methods/create_organization.js @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* CreateOrganization Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/create_organization/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ +}); diff --git a/client/methods/users.js b/client/methods/users.js new file mode 100644 index 0000000..c38d40f --- /dev/null +++ b/client/methods/users.js @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* Users Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/users/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ +}); diff --git a/client/views/create_activity/create_activity.html b/client/views/create_activity/create_activity.html new file mode 100644 index 0000000..9b06df8 --- /dev/null +++ b/client/views/create_activity/create_activity.html @@ -0,0 +1,94 @@ + + + diff --git a/client/views/create_activity/create_activity.js b/client/views/create_activity/create_activity.js new file mode 100644 index 0000000..bb88432 --- /dev/null +++ b/client/views/create_activity/create_activity.js @@ -0,0 +1,149 @@ + +/*****************************************************************************/ +/* CreateActivity: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.CreateActivity.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ + + 'change input[name="title"]' : function(e, tmpl){ + + var title = e.target.value + if(!title){ + title = inst.am.temp_marker.title + } + + tmpl.data.am.temp_marker.title = title + tmpl.data.am.set_temp_marker(tmpl.data.am.temp_marker.place) + + }, + + 'change #image' : function(e, tmpl){ + + FS.Utility.eachFile(e, function(_file) { + + var file = new FS.File(_file); + file.owner = Meteor.userId() + file.activity_id = tmpl.temp_id + + Images.insert(file, function (err, fileObj) { + tmpl.temp_fids.push(fileObj._id) + }); + + }); + + }, + + 'submit #create_activity' : function(e, tmpl){ + + e.preventDefault() + e.stopPropagation() + + var serialized = $(e.target).serializeArray() + var data = {} + _.each(serialized, function(x){ + data[x['name']] = x['value'] + }) + + var am = tmpl.data.am + console.log(am.temp_marker.place) + var city = am.get_city(am.temp_marker.place) + + console.log(city) + + data['location'] = { + type : "Point", + coordinates : [am.temp_marker.position.lng(), + am.temp_marker.position.lat()], + } + data['city'] = city + data['images'] = tmpl.temp_fids + data['_id'] = tmpl.temp_id + + Meteor.call('/app/activities/put', data, + function (error, result) { + $(e.target).trigger('reset') + }); + } + +}); + +Template.CreateActivity.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ + images : function(){ + var self = this + var inst = UI._templateInstance() + + console.log(self) + var images = Images.find({activity_id : inst.temp_id}).fetch() + console.log(images, inst.temp_id) + return images + } + +}); + +/*****************************************************************************/ +/* CreateActivity: Lifecycle Hooks */ +/*****************************************************************************/ +Template.CreateActivity.created = function () { + var self = this + self.temp_id = Random.id() + self.temp_fids = [] + +}; + +Template.CreateActivity.rendered = function () { + var self = this; + + ripples.initInputs(); + + var am = self.data.am + am.enable_write_mode() + var map = am.map + var marker = am.temp_marker + + var input = document.getElementById('location'); + var autocomplete = new google.maps.places.Autocomplete(input); + autocomplete.bindTo('bounds', map); + + google.maps.event.addListener(autocomplete, 'place_changed', function() { + + var place = autocomplete.getPlace(); + if (!place.geometry) { + return; + } + + am.set_temp_marker(place) + + }); + + $('.datetimepicker').datetimepicker(); + $('.datetimepicker') + .data("DateTimePicker") + .setMinDate(new Date()); + + Deps.autorun(function () { + var temp_address = am.state.get("temp_address") + if(temp_address){ + input.value = temp_address + } + }); + + + +}; + +Template.CreateActivity.destroyed = function () { + +}; + + diff --git a/client/views/create_activity/create_activity.less b/client/views/create_activity/create_activity.less new file mode 100644 index 0000000..3a83b16 --- /dev/null +++ b/client/views/create_activity/create_activity.less @@ -0,0 +1,14 @@ +/*****************************************************************************/ +/* CreateActivity: Style */ +/*****************************************************************************/ + +#create_activity .input-lg{ + + height: 32px; + font-size: 24px; + +} + +.image { + width: 100%; +} \ No newline at end of file diff --git a/client/views/create_organization/create_organization.html b/client/views/create_organization/create_organization.html new file mode 100644 index 0000000..c8371c0 --- /dev/null +++ b/client/views/create_organization/create_organization.html @@ -0,0 +1,55 @@ + + + diff --git a/client/views/create_organization/create_organization.js b/client/views/create_organization/create_organization.js new file mode 100644 index 0000000..23b0447 --- /dev/null +++ b/client/views/create_organization/create_organization.js @@ -0,0 +1,94 @@ + +/*****************************************************************************/ +/* CreateOrganization: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.CreateOrganization.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ + + 'change #image' : function(e, tmpl){ + + FS.Utility.eachFile(e, function(_file) { + + var file = new FS.File(_file); + file.owner = Meteor.userId() + file.organization_id = tmpl.temp_id + + Images.insert(file, function (err, fileObj) { + tmpl.temp_fids.push(fileObj._id) + }); + + }); + + }, + + 'submit #create_organization' : function(e, tmpl){ + + e.preventDefault() + e.stopPropagation() + + var serialized = $(e.target).serializeArray() + var data = {} + _.each(serialized, function(x){ + data[x['name']] = x['value'] + }) + + data['images'] = tmpl.temp_fids + data['_id'] = tmpl.temp_id + + Meteor.call('/app/organization/put', data, + function (error, result) { + if(!error){ + $.snackbar({content: 'Organization Created'}); + $.snackbar({content: 'Create a new activity'}); + + tmpl.data.state.set("content_view", "CreateActivity") + + } + } + ); + } + + +}); + +Template.CreateOrganization.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ + images : function(){ + var self = this + var inst = UI._templateInstance() + + console.log(self) + var images = Images.find({organization_id : inst.temp_id}).fetch() + console.log(images, inst.temp_id) + return images + } + +}); + +/*****************************************************************************/ +/* CreateOrganization: Lifecycle Hooks */ +/*****************************************************************************/ +Template.CreateOrganization.created = function () { + var self = this + self.temp_id = Random.id() + self.temp_fids = [] +}; + +Template.CreateOrganization.rendered = function () { + ripples.initInputs() +}; + +Template.CreateOrganization.destroyed = function () { +}; + + diff --git a/client/views/create_organization/create_organization.less b/client/views/create_organization/create_organization.less new file mode 100644 index 0000000..6ba69e0 --- /dev/null +++ b/client/views/create_organization/create_organization.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* CreateOrganization: Style */ +/*****************************************************************************/ diff --git a/client/views/feed/feed.html b/client/views/feed/feed.html new file mode 100644 index 0000000..3adf2b6 --- /dev/null +++ b/client/views/feed/feed.html @@ -0,0 +1,35 @@ + + + diff --git a/client/views/feed/feed.js b/client/views/feed/feed.js new file mode 100644 index 0000000..4465434 --- /dev/null +++ b/client/views/feed/feed.js @@ -0,0 +1,97 @@ + +/*****************************************************************************/ +/* Feed: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.Feed.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ + "click #rsvp" : function(e, tmpl){ + Meteor.call("/app/activities/rsvp", this._id, function(){ + + }) + }, + + "click #attendees_toggle" : function(){ + $("#attendees_container_" + this._id).toggleClass("hide") + } + +}); + +var attendees = new ReactiveDict() + +Template.Feed.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ + feed : function(){ + return Activities.find({}, {sort : {start_time : 1}}).fetch() + }, + + is_rsvpd : function(){ + var self = this + + + var userId = Meteor.userId() + if(_.contains(self.rsvpd, userId)){ + return true + } + return false + }, + + attendees : function(){ + var self = this + return attendees.get(this._id).join(", ") + }, + + attendee_count : function(){ + var self = this + + Meteor.call('/app/activities/attendees', this._id, + function (error, result) { + + if(!error){ + attendees.set(self._id, result) + } + }); + + return this.rsvpd.length + }, + + is_owner : function(){ + if(this.owner == Meteor.userId()){ + return false + } + return true + } + +}); + +/*****************************************************************************/ +/* Feed: Lifecycle Hooks */ +/*****************************************************************************/ +Template.Feed.created = function () { + var self = this +}; + +Template.Feed.rendered = function () { + + var self = this + + self.attendees = new Blaze.ReactiveVar() + + var am = self.data.am + am.enable_read_mode() + +}; + +Template.Feed.destroyed = function () { +}; + + diff --git a/client/views/feed/feed.less b/client/views/feed/feed.less new file mode 100644 index 0000000..bcbf9c3 --- /dev/null +++ b/client/views/feed/feed.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* Feed: Style */ +/*****************************************************************************/ diff --git a/client/views/forgot_password/forgot_password.html b/client/views/forgot_password/forgot_password.html new file mode 100644 index 0000000..2e380d1 --- /dev/null +++ b/client/views/forgot_password/forgot_password.html @@ -0,0 +1,26 @@ + + + diff --git a/client/views/forgot_password/forgot_password.js b/client/views/forgot_password/forgot_password.js new file mode 100644 index 0000000..337a221 --- /dev/null +++ b/client/views/forgot_password/forgot_password.js @@ -0,0 +1,35 @@ + +/*****************************************************************************/ +/* ForgotPassword: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.ForgotPassword.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ +}); + +Template.ForgotPassword.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ +}); + +/*****************************************************************************/ +/* ForgotPassword: Lifecycle Hooks */ +/*****************************************************************************/ +Template.ForgotPassword.created = function () { +}; + +Template.ForgotPassword.rendered = function () { +}; + +Template.ForgotPassword.destroyed = function () { +}; + + diff --git a/client/views/forgot_password/forgot_password.less b/client/views/forgot_password/forgot_password.less new file mode 100644 index 0000000..4f2c77b --- /dev/null +++ b/client/views/forgot_password/forgot_password.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* ForgotPassword: Style */ +/*****************************************************************************/ diff --git a/client/views/home/home.html b/client/views/home/home.html new file mode 100644 index 0000000..6d179a8 --- /dev/null +++ b/client/views/home/home.html @@ -0,0 +1,7 @@ + + + diff --git a/client/views/home/home.js b/client/views/home/home.js new file mode 100644 index 0000000..a60c523 --- /dev/null +++ b/client/views/home/home.js @@ -0,0 +1,39 @@ + +/*****************************************************************************/ +/* Home: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.Home.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ +}); + +Template.Home.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ + activities : function(){ + return Activities.find() + } +}); + +/*****************************************************************************/ +/* Home: Lifecycle Hooks */ +/*****************************************************************************/ +Template.Home.created = function () { +}; + +Template.Home.rendered = function () { + +}; + +Template.Home.destroyed = function () { +}; + + diff --git a/client/views/home/home.less b/client/views/home/home.less new file mode 100644 index 0000000..db12afb --- /dev/null +++ b/client/views/home/home.less @@ -0,0 +1,8 @@ +/*****************************************************************************/ +/* Home: Style */ +/****1*************************************************************************/ + +#map_container { + padding-top : 60px; + height: 100%; +} \ No newline at end of file diff --git a/client/views/layouts/master_layout/master_layout.css b/client/views/layouts/master_layout/master_layout.css new file mode 100644 index 0000000..17b329d --- /dev/null +++ b/client/views/layouts/master_layout/master_layout.css @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* MasterLayout: Style */ +/*****************************************************************************/ diff --git a/client/views/layouts/master_layout/master_layout.html b/client/views/layouts/master_layout/master_layout.html new file mode 100644 index 0000000..3f4f495 --- /dev/null +++ b/client/views/layouts/master_layout/master_layout.html @@ -0,0 +1,46 @@ + diff --git a/client/views/layouts/master_layout/master_layout.js b/client/views/layouts/master_layout/master_layout.js new file mode 100644 index 0000000..78c2132 --- /dev/null +++ b/client/views/layouts/master_layout/master_layout.js @@ -0,0 +1,40 @@ + +/*****************************************************************************/ +/* MasterLayout: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.MasterLayout.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ + 'click .sign-out-control' : function(){ + + Meteor.logout() + + } +}); + +Template.MasterLayout.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ +}); + +/*****************************************************************************/ +/* MasterLayout: Lifecycle Hooks */ +/*****************************************************************************/ +Template.MasterLayout.created = function () { +}; + +Template.MasterLayout.rendered = function () { +}; + +Template.MasterLayout.destroyed = function () { +}; + + diff --git a/client/views/list_organizations/list_organizations.html b/client/views/list_organizations/list_organizations.html new file mode 100644 index 0000000..2e45c1d --- /dev/null +++ b/client/views/list_organizations/list_organizations.html @@ -0,0 +1,5 @@ + + + diff --git a/client/views/list_organizations/list_organizations.js b/client/views/list_organizations/list_organizations.js new file mode 100644 index 0000000..b554545 --- /dev/null +++ b/client/views/list_organizations/list_organizations.js @@ -0,0 +1,35 @@ + +/*****************************************************************************/ +/* ListOrganizations: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.ListOrganizations.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ +}); + +Template.ListOrganizations.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ +}); + +/*****************************************************************************/ +/* ListOrganizations: Lifecycle Hooks */ +/*****************************************************************************/ +Template.ListOrganizations.created = function () { +}; + +Template.ListOrganizations.rendered = function () { +}; + +Template.ListOrganizations.destroyed = function () { +}; + + diff --git a/client/views/list_organizations/list_organizations.less b/client/views/list_organizations/list_organizations.less new file mode 100644 index 0000000..680c2ad --- /dev/null +++ b/client/views/list_organizations/list_organizations.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* ListOrganizations: Style */ +/*****************************************************************************/ diff --git a/client/views/list_users/list_users.html b/client/views/list_users/list_users.html new file mode 100644 index 0000000..8e7e605 --- /dev/null +++ b/client/views/list_users/list_users.html @@ -0,0 +1,22 @@ + + + diff --git a/client/views/list_users/list_users.js b/client/views/list_users/list_users.js new file mode 100644 index 0000000..80984b9 --- /dev/null +++ b/client/views/list_users/list_users.js @@ -0,0 +1,56 @@ + +/*****************************************************************************/ +/* ListUsers: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.ListUsers.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ + "submit #invite" : function(e, tmpl){ + + e.preventDefault() + e.stopPropagation() + + var serialized = $(e.target).serializeArray() + + var email = serialized[0]['value'] + var name = serialized[1]['value'] + + Meteor.call('/app/users/invite', email, name, function (error, result) { + $(e.target).trigger('reset') + }); + + } +}); + +Template.ListUsers.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ +}); + +/*****************************************************************************/ +/* ListUsers: Lifecycle Hooks */ +/*****************************************************************************/ +Template.ListUsers.created = function () { +}; + +Template.ListUsers.rendered = function () { + + var self = this + var am = self.data.am + am.enable_read_mode() + + +}; + +Template.ListUsers.destroyed = function () { +}; + + diff --git a/client/views/list_users/list_users.less b/client/views/list_users/list_users.less new file mode 100644 index 0000000..39f5b99 --- /dev/null +++ b/client/views/list_users/list_users.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* ListUsers: Style */ +/*****************************************************************************/ diff --git a/client/views/map_view/map_view.html b/client/views/map_view/map_view.html new file mode 100644 index 0000000..ba876c0 --- /dev/null +++ b/client/views/map_view/map_view.html @@ -0,0 +1,38 @@ + + \ No newline at end of file diff --git a/client/views/map_view/map_view.js b/client/views/map_view/map_view.js new file mode 100644 index 0000000..e930983 --- /dev/null +++ b/client/views/map_view/map_view.js @@ -0,0 +1,248 @@ + +/*****************************************************************************/ +/* MapView: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.MapView.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ + 'click li.control' : function(e, tmpl){ + var content_view = e.target.getAttribute('data-content-view') + var target = e.target + if(!content_view){ + content_view = e.target.parentNode.getAttribute('data-content-view') + target = e.target.parentNode + } + $(".control").removeClass('active') + $(target).toggleClass('active') + + var current_content_view = tmpl.state.get('content_view') + if(current_content_view == content_view){ + tmpl.state.set('content_view', '') + $(target).removeClass('active') + } + else{ + tmpl.state.set('content_view', content_view) + } + }, + + 'click p.entry-signin-cta a' : function(e, tmpl){ + tmpl.state.set('content_view', 'SignIn') + }, + + 'click p.entry-signup-cta a' : function(e, tmpl){ + tmpl.state.set('content_view', 'SignUp') + }, + + 'click p.entry-forgot-cta a' : function(e, tmpl){ + tmpl.state.set('content_view', 'ForgotPassword') + }, + + +}); + +Template.MapView.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ + content_view : function(){ + var inst = UI._templateInstance() + var view = inst.state.get('content_view') + if(!view && !Meteor.userId()){ + view = "SignUp" + } + + // else if(!view && Meteor.userId()){ + // $('#content_pane').toggleClass("hide") + // } + + // else { + // $('#content_pane').toggleClass("hide") + // } + + return view + }, + + data_helper : function(){ + var inst = UI._templateInstance() + return { + state : inst.state, + am : inst.am + } + } + + +}); + +/*****************************************************************************/ +/* MapView: Lifecycle Hooks */ +/*****************************************************************************/ +Template.MapView.created = function () { + + var self = this; + self.state = new ReactiveDict() + + Deps.autorun(function(){ + if(Meteor.userId()){ + self.state.set("content_view", "Feed") + } + else{ + self.state.set("content_view", "SignUp") + } + }); + + +}; + +Template.MapView.rendered = function () { + + var self = this; + + + Meteor.setTimeout(function(){ + + + + + // // var circle_options = { + // // strokeColor: '#00FF00', + // // strokeOpacity: 0.8, + // // strokeWeight: 2, + // // fillColor: '#00FF00', + // // fillOpacity: 0.1, + // // map: map, + // // center: default_coords, + // // radius: 5000, + // // editable : true + // // }; + // // // Add the circle for this city to the map. + // // var circle = new google.maps.Circle(circle_options); + + // map._el = null; + // map._tmp_marker = null + + // Deps.autorun(function(){ + // var state = self.state.get("content_view") + // var current_map = map + + // if(state == "CreateActivity"){ + + // $.snackbar({content: 'Add a new Activity by placing a marker on the map and filling out the form.'}); + + // current_map = null + + // _.each(_.values(markers), function(marker){ + // marker.setMap(current_map) + // }) + + + // map._el = google.maps.event.addListener(map, 'click', function(event) { + // console.log(arguments) + // if(!map._tmp_marker){ + // map._tmp_marker = new google.maps.Marker({ + // position: event.latLng, + // map: map + // }); + // } + // else{ + // map._tmp_marker.setPosition(event.latLng) + // } + // self.state.set("tmp_marker", event.latLng) + + // }); + + + // } + // else{ + // if(map._el){ + // google.maps.event.removeListener(map._el); + // map._el = null + // map._tmp_marker.setMap(null) + // } + // _.each(_.values(markers), function(marker){ + // marker.setMap(current_map) + // }) + // } + // }) + + self.am = new ActivityMap("map_view") + self.am.add_control("map_control") + + Deps.autorun(function () { + // Meteor.subscribe("activities", self.am.state.get("current_city")) + Meteor.subscribe("activities") + + }); + + Deps.autorun(function(){ + + var cur = Activities.find() + + cur.observe({ + added: function (doc) { + // ... + self.am.add_marker(doc._id, doc.location.coordinates[0], + doc.location.coordinates[1]) + + }, // Use either added() OR(!) addedAt() + changed: function (newdoc, olddoc) { + // ... + self.am.remove_marker(olddoc._id, olddoc.location.coordinates[0], + olddoc.location.coordinates[1]) + + self.am.add_marker(newdoc._id, newdoc.location.coordinates[0], + newdoc.location.coordinates[1]) + }, // Use either changed() OR(!) changedAt() + removed: function (doc) { + // ... + self.am.remove_marker(doc._id, doc.location.coordinates[0], + doc.location.coordinates[1]) + }, // Use either removed() OR(!) removedAt() + + }); + + }) + + + + // Deps.autorun(function(){ + + // var view = self.state.get("content_view") + // if(view == "CreateActivity"){ + // self.am.enable_write_mode() + // } + // else{ + // self.am.enable_read_mode() + // } + + // }); + + // self.am.get_user_location(function(){ + // self.state.set('') + // }) + + + Meteor.setTimeout(function(){ + var controlDiv = document.getElementById('map_control'); + $(controlDiv).removeClass('hide') + + }, 1000) + + + + }, 100) + + + +}; + +Template.MapView.destroyed = function () { +}; + + diff --git a/client/views/map_view/map_view.less b/client/views/map_view/map_view.less new file mode 100644 index 0000000..24b3606 --- /dev/null +++ b/client/views/map_view/map_view.less @@ -0,0 +1,29 @@ +/*****************************************************************************/ +/* MapView: Style */ +/*****************************************************************************/ +@import "/client/lib/bootstrap/material/less/variables.import.less"; + +#map_view { + height: 100%; + width: 100%; +} + +#map_control { + height: 90%; + padding-bottom: 40px; + margin: 20px; + width: 33%; + overflow: hidden; +} + +#map_control .active { + background-color: @white; +} + +#content_pane { + background-color: white; + padding: 20px; + width: 100%; + height: 100%; + overflow: auto; +} \ No newline at end of file diff --git a/client/views/shared/loading/loading.css b/client/views/shared/loading/loading.css new file mode 100644 index 0000000..886a639 --- /dev/null +++ b/client/views/shared/loading/loading.css @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* Loading: Style */ +/*****************************************************************************/ diff --git a/client/views/shared/loading/loading.html b/client/views/shared/loading/loading.html new file mode 100644 index 0000000..15eab07 --- /dev/null +++ b/client/views/shared/loading/loading.html @@ -0,0 +1,5 @@ + + + diff --git a/client/views/shared/loading/loading.js b/client/views/shared/loading/loading.js new file mode 100644 index 0000000..ae15b15 --- /dev/null +++ b/client/views/shared/loading/loading.js @@ -0,0 +1,35 @@ + +/*****************************************************************************/ +/* Loading: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.Loading.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ +}); + +Template.Loading.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ +}); + +/*****************************************************************************/ +/* Loading: Lifecycle Hooks */ +/*****************************************************************************/ +Template.Loading.created = function () { +}; + +Template.Loading.rendered = function () { +}; + +Template.Loading.destroyed = function () { +}; + + diff --git a/client/views/shared/not_found/not_found.css b/client/views/shared/not_found/not_found.css new file mode 100644 index 0000000..10b3e1d --- /dev/null +++ b/client/views/shared/not_found/not_found.css @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* NotFound: Style */ +/*****************************************************************************/ diff --git a/client/views/shared/not_found/not_found.html b/client/views/shared/not_found/not_found.html new file mode 100644 index 0000000..32bba3a --- /dev/null +++ b/client/views/shared/not_found/not_found.html @@ -0,0 +1,5 @@ + + + diff --git a/client/views/shared/not_found/not_found.js b/client/views/shared/not_found/not_found.js new file mode 100644 index 0000000..7c4cdec --- /dev/null +++ b/client/views/shared/not_found/not_found.js @@ -0,0 +1,35 @@ + +/*****************************************************************************/ +/* NotFound: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.NotFound.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ +}); + +Template.NotFound.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ +}); + +/*****************************************************************************/ +/* NotFound: Lifecycle Hooks */ +/*****************************************************************************/ +Template.NotFound.created = function () { +}; + +Template.NotFound.rendered = function () { +}; + +Template.NotFound.destroyed = function () { +}; + + diff --git a/client/views/sign_in/sign_in.html b/client/views/sign_in/sign_in.html new file mode 100644 index 0000000..07884a6 --- /dev/null +++ b/client/views/sign_in/sign_in.html @@ -0,0 +1,48 @@ + + + diff --git a/client/views/sign_in/sign_in.js b/client/views/sign_in/sign_in.js new file mode 100644 index 0000000..724a0e6 --- /dev/null +++ b/client/views/sign_in/sign_in.js @@ -0,0 +1,29 @@ + +/*****************************************************************************/ +/* SignIn: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.SignIn.events(AccountsEntry.entrySignInEvents); + +Template.SignIn.helpers(AccountsEntry.entrySignInHelpers); + +/*****************************************************************************/ +/* SignIn: Lifecycle Hooks */ +/*****************************************************************************/ +Template.SignIn.created = function () { +}; + +Template.SignIn.rendered = function () { + var self = this + + ripples.initInputs() + if(self.data.am){ + self.data.am.enable_read_mode() + } + + +}; + +Template.SignIn.destroyed = function () { +}; + + diff --git a/client/views/sign_in/sign_in.less b/client/views/sign_in/sign_in.less new file mode 100644 index 0000000..baf85d1 --- /dev/null +++ b/client/views/sign_in/sign_in.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* SignIn: Style */ +/*****************************************************************************/ diff --git a/client/views/sign_up/sign_up.html b/client/views/sign_up/sign_up.html new file mode 100644 index 0000000..67d64c9 --- /dev/null +++ b/client/views/sign_up/sign_up.html @@ -0,0 +1,83 @@ + + + diff --git a/client/views/sign_up/sign_up.js b/client/views/sign_up/sign_up.js new file mode 100644 index 0000000..b2c8b83 --- /dev/null +++ b/client/views/sign_up/sign_up.js @@ -0,0 +1,35 @@ + +/*****************************************************************************/ +/* SignUp: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.SignUp.events(AccountsEntry.entrySignUpEvents); +Template.SignUp.events({ + +}); + +Template.SignUp.helpers(AccountsEntry.entrySignUpHelpers); +Template.SignUp.helpers({ + +}); + +/*****************************************************************************/ +/* SignUp: Lifecycle Hooks */ +/*****************************************************************************/ +Template.SignUp.created = function () { +}; + +Template.SignUp.rendered = function () { + var self = this + + ripples.initInputs() + if(self.data.am){ + self.data.am.enable_read_mode() + } + + +}; + +Template.SignUp.destroyed = function () { +}; + + diff --git a/client/views/sign_up/sign_up.less b/client/views/sign_up/sign_up.less new file mode 100644 index 0000000..0210557 --- /dev/null +++ b/client/views/sign_up/sign_up.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* SignUp: Style */ +/*****************************************************************************/ \ No newline at end of file diff --git a/client/views/user_profile/user_profile.html b/client/views/user_profile/user_profile.html new file mode 100644 index 0000000..06c8403 --- /dev/null +++ b/client/views/user_profile/user_profile.html @@ -0,0 +1,5 @@ + + + diff --git a/client/views/user_profile/user_profile.js b/client/views/user_profile/user_profile.js new file mode 100644 index 0000000..edbee7e --- /dev/null +++ b/client/views/user_profile/user_profile.js @@ -0,0 +1,35 @@ + +/*****************************************************************************/ +/* UserProfile: Event Handlers and Helpersss .js*/ +/*****************************************************************************/ +Template.UserProfile.events({ + /* + * Example: + * 'click .selector': function (e, tmpl) { + * + * } + */ +}); + +Template.UserProfile.helpers({ + /* + * Example: + * items: function () { + * return Items.find(); + * } + */ +}); + +/*****************************************************************************/ +/* UserProfile: Lifecycle Hooks */ +/*****************************************************************************/ +Template.UserProfile.created = function () { +}; + +Template.UserProfile.rendered = function () { +}; + +Template.UserProfile.destroyed = function () { +}; + + diff --git a/client/views/user_profile/user_profile.less b/client/views/user_profile/user_profile.less new file mode 100644 index 0000000..0e625ec --- /dev/null +++ b/client/views/user_profile/user_profile.less @@ -0,0 +1,3 @@ +/*****************************************************************************/ +/* UserProfile: Style */ +/*****************************************************************************/ diff --git a/config/development/env.sh b/config/development/env.sh new file mode 100644 index 0000000..e69de29 diff --git a/config/development/settings.json b/config/development/settings.json new file mode 100644 index 0000000..e69de29 diff --git a/packages/bootstrap3-less b/packages/bootstrap3-less new file mode 120000 index 0000000..68882ac --- /dev/null +++ b/packages/bootstrap3-less @@ -0,0 +1 @@ +/home/deepu/.meteorite/packages/bootstrap3-less/simison/bootstrap3-less/dc94a51ed00d7de6d6f2b6d65107a876d849ad61 \ No newline at end of file diff --git a/public/fonts/glyphicons-halflings-regular.eot b/public/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

!oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/public/fonts/glyphicons-halflings-regular.svg b/public/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..e3e2dc7 --- /dev/null +++ b/public/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/fonts/glyphicons-halflings-regular.ttf b/public/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/public/fonts/glyphicons-halflings-regular.woff b/public/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 R%dt`3R literal 0 HcmV?d00001 diff --git a/public/icons/fonts/Material-Design.svg b/public/icons/fonts/Material-Design.svg new file mode 100644 index 0000000..999b7a0 --- /dev/null +++ b/public/icons/fonts/Material-Design.svg @@ -0,0 +1,515 @@ + + + + + +{ + "fontFamily": "Material-Design", + "majorVersion": 1, + "minorVersion": 0, + "license": "BSD", + "version": "Version 1.0", + "fontId": "Material-Design", + "psName": "Material-Design", + "subFamily": "Regular", + "fullName": "Material-Design", + "description": "Font generated by IcoMoon." +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/fonts/Material-Design.ttf b/public/icons/fonts/Material-Design.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d71ce13560a15f7bc94b1649bbcd9470dc4de8c8 GIT binary patch literal 85996 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 literal 0 HcmV?d00001 diff --git a/public/icons/fonts/Material-Design.woff b/public/icons/fonts/Material-Design.woff new file mode 100644 index 0000000000000000000000000000000000000000..dbcd778321b3f8ce5f98466c56944e1d092dc578 GIT binary patch literal 56944 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 XJkI@$L}Cr(kP3J3I*WX|OZ@vU!0+F$ literal 0 HcmV?d00001 diff --git a/server/app.js b/server/app.js new file mode 100644 index 0000000..a697cf4 --- /dev/null +++ b/server/app.js @@ -0,0 +1,12 @@ +process.env.MAIL_URL = "smtp://cleanplace@lostinkaos.com:t1WBUWPDNK47tHL_u4ehEA@smtp.mandrillapp.com:587"; + +Accounts.emailTemplates.siteName = "CleanPlace"; +Accounts.emailTemplates.from = "CleanPlace Admin "; +Accounts.emailTemplates.enrollAccount.subject = function (user) { + return "Welcome to a cleaner tomorrow, " + user.profile.name; +}; +Accounts.emailTemplates.enrollAccount.text = function (user, url) { + return "You have been invited to participate in building a better future!" + + " To activate your account, simply click the link below:\n\n" + + url; +}; \ No newline at end of file diff --git a/server/collections/activities.js b/server/collections/activities.js new file mode 100644 index 0000000..fd304e4 --- /dev/null +++ b/server/collections/activities.js @@ -0,0 +1,34 @@ +/* + * Add query methods like this: + * Activities.findPublic = function () { + * return Activities.find({is_public: true}); + * } + */ + +Activities.allow({ + insert: function (userId, doc) { + return true; + }, + + update: function (userId, doc, fieldNames, modifier) { + return true; + }, + + remove: function (userId, doc) { + return true; + } +}); + +Activities.deny({ + insert: function (userId, doc) { + return false; + }, + + update: function (userId, doc, fieldNames, modifier) { + return false; + }, + + remove: function (userId, doc) { + return false; + } +}); diff --git a/server/collections/images.js b/server/collections/images.js new file mode 100644 index 0000000..ac425b6 --- /dev/null +++ b/server/collections/images.js @@ -0,0 +1,43 @@ +/* + * Add query methods like this: + * Images.findPublic = function () { + * return Images.find({is_public: true}); + * } + */ + +Images.allow({ + insert: function (userId, doc) { + return true; + }, + + update: function (userId, doc, fieldNames, modifier) { + return true; + }, + + remove: function (userId, doc) { + return true; + }, + + download : function(){ + return true + } +}); + +Images.deny({ + insert: function (userId, doc) { + return false; + }, + + update: function (userId, doc, fieldNames, modifier) { + return false; + }, + + remove: function (userId, doc) { + return false; + }, + + download : function(){ + return false + } + +}); diff --git a/server/collections/organizations.js b/server/collections/organizations.js new file mode 100644 index 0000000..fa4b7ae --- /dev/null +++ b/server/collections/organizations.js @@ -0,0 +1,34 @@ +/* + * Add query methods like this: + * Organizations.findPublic = function () { + * return Organizations.find({is_public: true}); + * } + */ + +Organizations.allow({ + insert: function (userId, doc) { + return true; + }, + + update: function (userId, doc, fieldNames, modifier) { + return true; + }, + + remove: function (userId, doc) { + return true; + } +}); + +Organizations.deny({ + insert: function (userId, doc) { + return false; + }, + + update: function (userId, doc, fieldNames, modifier) { + return false; + }, + + remove: function (userId, doc) { + return false; + } +}); diff --git a/server/collections/tasks.js b/server/collections/tasks.js new file mode 100644 index 0000000..a1af42c --- /dev/null +++ b/server/collections/tasks.js @@ -0,0 +1,34 @@ +/* + * Add query methods like this: + * Tasks.findPublic = function () { + * return Tasks.find({is_public: true}); + * } + */ + +Tasks.allow({ + insert: function (userId, doc) { + return true; + }, + + update: function (userId, doc, fieldNames, modifier) { + return true; + }, + + remove: function (userId, doc) { + return true; + } +}); + +Tasks.deny({ + insert: function (userId, doc) { + return false; + }, + + update: function (userId, doc, fieldNames, modifier) { + return false; + }, + + remove: function (userId, doc) { + return false; + } +}); diff --git a/server/methods/activities.js b/server/methods/activities.js new file mode 100644 index 0000000..e518c69 --- /dev/null +++ b/server/methods/activities.js @@ -0,0 +1,65 @@ +/*****************************************************************************/ +/* Activities Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/activities/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ + '/app/activities/put' : function(data){ + + var self = this + var owner = self.userId + + var format = "dddd, MMMM Do YYYY, h:mm:ss A" + + Activities.insert({ + _id : data._id, + images : data.images, + city : data.city, + location : data.location, + content : data.details, + start_time : (new moment(data.start_time, format)).unix(), + end_time : (new moment(data.end_time, format)).unix(), + title : data.title, + owner : owner, + rsvpd : [owner] + }) + }, + + '/app/activities/rsvp' : function(activity_id){ + var userId = this.userId + var activity = Activities.findOne({_id : activity_id}) + + if(activity.rsvpd && _.contains(activity.rsvpd, userId)){ + Activities.update({_id : activity_id}, {$pull : {rsvpd : userId}}); + } + else{ + Activities.update({_id : activity_id}, {$push : {rsvpd : userId}}); + } + }, + + + '/app/activities/attendees' : function(activity_id){ + + var activity = Activities.findOne({_id : activity_id}) + + var users = [] + + _.each(Meteor.users.find({_id : {$in : activity.rsvpd}}).fetch(), + function(user){ + try{ + users.push(user.profile.name) + } + catch(er) { + users.push("Anonymous") + } + }) + return users + } + +}); diff --git a/server/methods/organization.js b/server/methods/organization.js new file mode 100644 index 0000000..9b4ba77 --- /dev/null +++ b/server/methods/organization.js @@ -0,0 +1,27 @@ +/*****************************************************************************/ +/* CreateOrganization Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/create_organization/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ + '/app/organization/put' : function(data){ + var self = this + var owner = self.userId + + Organizations.insert({ + _id : data._id, + name : data.name, + content : data.details, + images : data['images'], + owner : owner, + admins : [owner], + created_at : (new moment()).unix() + }) + } +}); diff --git a/server/methods/users.js b/server/methods/users.js new file mode 100644 index 0000000..7de5789 --- /dev/null +++ b/server/methods/users.js @@ -0,0 +1,22 @@ +/*****************************************************************************/ +/* Users Methods */ +/*****************************************************************************/ + +Meteor.methods({ + /* + * Example: + * '/app/users/update/email': function (email) { + * Users.update({_id: this.userId}, {$set: {'profile.email': email}}); + * } + * + */ + '/app/users/invite' : function(email, name){ + + var userId = Accounts.createUser({email : email, profile : {name: name}}) + if(userId){ + Accounts.sendEnrollmentEmail(userId) + } + + }, + +}); diff --git a/server/publish/activities.js b/server/publish/activities.js new file mode 100644 index 0000000..8b3153b --- /dev/null +++ b/server/publish/activities.js @@ -0,0 +1,15 @@ +/*****************************************************************************/ +/* Activities Publish Functions +/*****************************************************************************/ + +Meteor.publish('activities', function (city) { + + console.log(city) + // you can remove this if you return a cursor + // return Activities.find({ + // city : city + // }) + + return Activities.find() + +}); diff --git a/server/publish/images.js b/server/publish/images.js new file mode 100644 index 0000000..145e8e5 --- /dev/null +++ b/server/publish/images.js @@ -0,0 +1,8 @@ +/*****************************************************************************/ +/* Images Publish Functions +/*****************************************************************************/ + +Meteor.publish('images', function () { + // you can remove this if you return a cursor + return Images.find() +}); From 666e38b1710797580d062c2c494c48591b4b2c77 Mon Sep 17 00:00:00 2001 From: Deepu T Philip Date: Wed, 1 Oct 2014 23:41:02 +0530 Subject: [PATCH 2/6] Removing symlink to bs less --- packages/bootstrap3-less | 1 - 1 file changed, 1 deletion(-) delete mode 120000 packages/bootstrap3-less diff --git a/packages/bootstrap3-less b/packages/bootstrap3-less deleted file mode 120000 index 68882ac..0000000 --- a/packages/bootstrap3-less +++ /dev/null @@ -1 +0,0 @@ -/home/deepu/.meteorite/packages/bootstrap3-less/simison/bootstrap3-less/dc94a51ed00d7de6d6f2b6d65107a876d849ad61 \ No newline at end of file From f3a1c3bd0e192796897afee16ab23e69a24db69f Mon Sep 17 00:00:00 2001 From: Deepu T Philip Date: Wed, 1 Oct 2014 23:41:47 +0530 Subject: [PATCH 3/6] Adding bs less files --- packages/bootstrap3-less/.gitignore | 4 + .../bootstrap3-less/bootstrap.import.less | 68 ++ .../lib/less/alerts.import.less | 68 ++ .../lib/less/badges.import.less | 55 ++ .../lib/less/bootstrap.import.less | 50 ++ .../lib/less/breadcrumbs.import.less | 26 + .../lib/less/button-groups.import.less | 240 +++++ .../lib/less/buttons.import.less | 157 ++++ .../lib/less/carousel.import.less | 243 +++++ .../lib/less/close.import.less | 33 + .../bootstrap3-less/lib/less/code.import.less | 68 ++ .../lib/less/component-animations.import.less | 31 + .../lib/less/dropdowns.import.less | 215 +++++ .../lib/less/forms.import.less | 540 +++++++++++ .../lib/less/glyphicons.import.less | 233 +++++ .../bootstrap3-less/lib/less/grid.import.less | 84 ++ .../lib/less/input-groups.import.less | 166 ++++ .../lib/less/jumbotron.import.less | 48 + .../lib/less/labels.import.less | 64 ++ .../lib/less/list-group.import.less | 131 +++ .../lib/less/media.import.less | 56 ++ .../lib/less/mixins.import.less | 39 + .../lib/less/mixins/alerts.import.less | 14 + .../mixins/background-variant.import.less | 8 + .../lib/less/mixins/border-radius.import.less | 18 + .../lib/less/mixins/buttons.import.less | 50 ++ .../lib/less/mixins/center-block.import.less | 7 + .../lib/less/mixins/clearfix.import.less | 22 + .../lib/less/mixins/forms.import.less | 81 ++ .../lib/less/mixins/gradients.import.less | 59 ++ .../less/mixins/grid-framework.import.less | 91 ++ .../lib/less/mixins/grid.import.less | 122 +++ .../lib/less/mixins/hide-text.import.less | 21 + .../lib/less/mixins/image.import.less | 34 + .../lib/less/mixins/labels.import.less | 12 + .../lib/less/mixins/list-group.import.less | 29 + .../lib/less/mixins/nav-divider.import.less | 10 + .../mixins/nav-vertical-align.import.less | 9 + .../lib/less/mixins/opacity.import.less | 8 + .../lib/less/mixins/pagination.import.less | 23 + .../lib/less/mixins/panels.import.less | 24 + .../lib/less/mixins/progress-bar.import.less | 10 + .../lib/less/mixins/reset-filter.import.less | 8 + .../lib/less/mixins/resize.import.less | 6 + .../mixins/responsive-visibility.import.less | 15 + .../lib/less/mixins/size.import.less | 10 + .../lib/less/mixins/tab-focus.import.less | 9 + .../lib/less/mixins/table-row.import.less | 28 + .../lib/less/mixins/text-emphasis.import.less | 8 + .../lib/less/mixins/text-overflow.import.less | 8 + .../less/mixins/vendor-prefixes.import.less | 224 +++++ .../lib/less/modals.import.less | 150 ++++ .../lib/less/navbar.import.less | 655 ++++++++++++++ .../bootstrap3-less/lib/less/navs.import.less | 242 +++++ .../lib/less/normalize.import.less | 425 +++++++++ .../lib/less/pager.import.less | 55 ++ .../lib/less/pagination.import.less | 88 ++ .../lib/less/panels.import.less | 243 +++++ .../lib/less/popovers.import.less | 133 +++ .../lib/less/print.import.less | 101 +++ .../lib/less/progress-bars.import.less | 105 +++ .../lib/less/responsive-embed.import.less | 34 + .../lib/less/responsive-utilities.import.less | 194 ++++ .../lib/less/scaffolding.import.less | 150 ++++ .../lib/less/tables.import.less | 233 +++++ .../lib/less/theme.import.less | 258 ++++++ .../lib/less/thumbnails.import.less | 36 + .../lib/less/tooltip.import.less | 95 ++ .../bootstrap3-less/lib/less/type.import.less | 313 +++++++ .../lib/less/utilities.import.less | 57 ++ .../lib/less/variables.import.less | 846 ++++++++++++++++++ .../lib/less/wells.import.less | 29 + 72 files changed, 8029 insertions(+) create mode 100644 packages/bootstrap3-less/.gitignore create mode 100644 packages/bootstrap3-less/bootstrap.import.less create mode 100755 packages/bootstrap3-less/lib/less/alerts.import.less create mode 100755 packages/bootstrap3-less/lib/less/badges.import.less create mode 100755 packages/bootstrap3-less/lib/less/bootstrap.import.less create mode 100755 packages/bootstrap3-less/lib/less/breadcrumbs.import.less create mode 100755 packages/bootstrap3-less/lib/less/button-groups.import.less create mode 100755 packages/bootstrap3-less/lib/less/buttons.import.less create mode 100755 packages/bootstrap3-less/lib/less/carousel.import.less create mode 100755 packages/bootstrap3-less/lib/less/close.import.less create mode 100755 packages/bootstrap3-less/lib/less/code.import.less create mode 100755 packages/bootstrap3-less/lib/less/component-animations.import.less create mode 100755 packages/bootstrap3-less/lib/less/dropdowns.import.less create mode 100755 packages/bootstrap3-less/lib/less/forms.import.less create mode 100755 packages/bootstrap3-less/lib/less/glyphicons.import.less create mode 100755 packages/bootstrap3-less/lib/less/grid.import.less create mode 100755 packages/bootstrap3-less/lib/less/input-groups.import.less create mode 100755 packages/bootstrap3-less/lib/less/jumbotron.import.less create mode 100755 packages/bootstrap3-less/lib/less/labels.import.less create mode 100755 packages/bootstrap3-less/lib/less/list-group.import.less create mode 100755 packages/bootstrap3-less/lib/less/media.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/alerts.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/background-variant.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/border-radius.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/buttons.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/center-block.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/clearfix.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/forms.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/gradients.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/grid-framework.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/grid.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/hide-text.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/image.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/labels.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/list-group.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/nav-divider.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/nav-vertical-align.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/opacity.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/pagination.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/panels.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/progress-bar.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/reset-filter.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/resize.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/responsive-visibility.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/size.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/tab-focus.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/table-row.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/text-emphasis.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/text-overflow.import.less create mode 100755 packages/bootstrap3-less/lib/less/mixins/vendor-prefixes.import.less create mode 100755 packages/bootstrap3-less/lib/less/modals.import.less create mode 100755 packages/bootstrap3-less/lib/less/navbar.import.less create mode 100755 packages/bootstrap3-less/lib/less/navs.import.less create mode 100755 packages/bootstrap3-less/lib/less/normalize.import.less create mode 100755 packages/bootstrap3-less/lib/less/pager.import.less create mode 100755 packages/bootstrap3-less/lib/less/pagination.import.less create mode 100755 packages/bootstrap3-less/lib/less/panels.import.less create mode 100755 packages/bootstrap3-less/lib/less/popovers.import.less create mode 100755 packages/bootstrap3-less/lib/less/print.import.less create mode 100755 packages/bootstrap3-less/lib/less/progress-bars.import.less create mode 100755 packages/bootstrap3-less/lib/less/responsive-embed.import.less create mode 100755 packages/bootstrap3-less/lib/less/responsive-utilities.import.less create mode 100755 packages/bootstrap3-less/lib/less/scaffolding.import.less create mode 100755 packages/bootstrap3-less/lib/less/tables.import.less create mode 100755 packages/bootstrap3-less/lib/less/theme.import.less create mode 100755 packages/bootstrap3-less/lib/less/thumbnails.import.less create mode 100755 packages/bootstrap3-less/lib/less/tooltip.import.less create mode 100755 packages/bootstrap3-less/lib/less/type.import.less create mode 100755 packages/bootstrap3-less/lib/less/utilities.import.less create mode 100755 packages/bootstrap3-less/lib/less/variables.import.less create mode 100755 packages/bootstrap3-less/lib/less/wells.import.less diff --git a/packages/bootstrap3-less/.gitignore b/packages/bootstrap3-less/.gitignore new file mode 100644 index 0000000..4aabd7b --- /dev/null +++ b/packages/bootstrap3-less/.gitignore @@ -0,0 +1,4 @@ +.idea/ +.build* +bootstrap/ +smart.lock \ No newline at end of file diff --git a/packages/bootstrap3-less/bootstrap.import.less b/packages/bootstrap3-less/bootstrap.import.less new file mode 100644 index 0000000..482ac8d --- /dev/null +++ b/packages/bootstrap3-less/bootstrap.import.less @@ -0,0 +1,68 @@ +// Defines where the package is +@bootstrap3-less-root: "/packages/bootstrap3-less"; + +// Import Bootstrap core variables and mixin +// --------------------------------------- +// (you need these first, to get the default setup for bootstrap) + +@import "@{bootstrap3-less-root}/lib/less/variables.import.less"; +@import "@{bootstrap3-less-root}/lib/less/mixins.import.less"; + +// Application Overrides (config) +// --------------------------------------- +// (Here you can override any variables defined in the default set above) + +@icon-font-path: "@{bootstrap3-less-root}/lib/fonts/"; + + +// Import Bootstrap +// --------------------------------------- +// (This is the full set of package files, include only what you need) + +// Reset and dependencies +@import "@{bootstrap3-less-root}/lib/less/normalize.import.less"; +@import "@{bootstrap3-less-root}/lib/less/print.import.less"; +@import "@{bootstrap3-less-root}/lib/less/glyphicons.import.less"; + +// Core CSS +@import "@{bootstrap3-less-root}/lib/less/scaffolding.import.less"; +@import "@{bootstrap3-less-root}/lib/less/type.import.less"; +@import "@{bootstrap3-less-root}/lib/less/code.import.less"; +@import "@{bootstrap3-less-root}/lib/less/grid.import.less"; +@import "@{bootstrap3-less-root}/lib/less/tables.import.less"; +@import "@{bootstrap3-less-root}/lib/less/forms.import.less"; +@import "@{bootstrap3-less-root}/lib/less/buttons.import.less"; + +// Components +@import "@{bootstrap3-less-root}/lib/less/component-animations.import.less"; +@import "@{bootstrap3-less-root}/lib/less/dropdowns.import.less"; +@import "@{bootstrap3-less-root}/lib/less/button-groups.import.less"; +@import "@{bootstrap3-less-root}/lib/less/input-groups.import.less"; +@import "@{bootstrap3-less-root}/lib/less/navs.import.less"; +@import "@{bootstrap3-less-root}/lib/less/navbar.import.less"; +@import "@{bootstrap3-less-root}/lib/less/breadcrumbs.import.less"; +@import "@{bootstrap3-less-root}/lib/less/pagination.import.less"; +@import "@{bootstrap3-less-root}/lib/less/pager.import.less"; +@import "@{bootstrap3-less-root}/lib/less/labels.import.less"; +@import "@{bootstrap3-less-root}/lib/less/badges.import.less"; +@import "@{bootstrap3-less-root}/lib/less/jumbotron.import.less"; +@import "@{bootstrap3-less-root}/lib/less/thumbnails.import.less"; +@import "@{bootstrap3-less-root}/lib/less/alerts.import.less"; +@import "@{bootstrap3-less-root}/lib/less/progress-bars.import.less"; +@import "@{bootstrap3-less-root}/lib/less/media.import.less"; +@import "@{bootstrap3-less-root}/lib/less/list-group.import.less"; +@import "@{bootstrap3-less-root}/lib/less/panels.import.less"; +@import "@{bootstrap3-less-root}/lib/less/responsive-embed.import.less"; +@import "@{bootstrap3-less-root}/lib/less/wells.import.less"; +@import "@{bootstrap3-less-root}/lib/less/close.import.less"; + +// Components w/ JavaScript +@import "@{bootstrap3-less-root}/lib/less/modals.import.less"; +@import "@{bootstrap3-less-root}/lib/less/tooltip.import.less"; +@import "@{bootstrap3-less-root}/lib/less/popovers.import.less"; +@import "@{bootstrap3-less-root}/lib/less/carousel.import.less"; + +// Utility classes +@import "@{bootstrap3-less-root}/lib/less/utilities.import.less"; +@import "@{bootstrap3-less-root}/lib/less/responsive-utilities.import.less"; + diff --git a/packages/bootstrap3-less/lib/less/alerts.import.less b/packages/bootstrap3-less/lib/less/alerts.import.less new file mode 100755 index 0000000..df070b8 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/alerts.import.less @@ -0,0 +1,68 @@ +// +// 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; + } +} + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissible { + 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 { + .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); +} +.alert-info { + .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); +} +.alert-warning { + .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); +} +.alert-danger { + .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); +} diff --git a/packages/bootstrap3-less/lib/less/badges.import.less b/packages/bootstrap3-less/lib/less/badges.import.less new file mode 100755 index 0000000..20624f3 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/badges.import.less @@ -0,0 +1,55 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.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& { + &:hover, + &:focus { + color: @badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Account for badges in navs + a.list-group-item.active > &, + .nav-pills > .active > a > & { + color: @badge-active-color; + background-color: @badge-active-bg; + } + .nav-pills > li > a > & { + margin-left: 3px; + } +} diff --git a/packages/bootstrap3-less/lib/less/bootstrap.import.less b/packages/bootstrap3-less/lib/less/bootstrap.import.less new file mode 100755 index 0000000..61b7747 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/bootstrap.import.less @@ -0,0 +1,50 @@ +// Core variables and mixins +@import "variables.less"; +@import "mixins.less"; + +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "utilities.less"; +@import "responsive-utilities.less"; diff --git a/packages/bootstrap3-less/lib/less/breadcrumbs.import.less b/packages/bootstrap3-less/lib/less/breadcrumbs.import.less new file mode 100755 index 0000000..cb01d50 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/breadcrumbs.import.less @@ -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/packages/bootstrap3-less/lib/less/button-groups.import.less b/packages/bootstrap3-less/lib/less/button-groups.import.less new file mode 100755 index 0000000..7021ecd --- /dev/null +++ b/packages/bootstrap3-less/lib/less/button-groups.import.less @@ -0,0 +1,240 @@ +// +// 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: 0; + } + } +} + +// 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 + &:extend(.clearfix all); + + .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) { + .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) { + .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 { + .border-right-radius(0); + } +} +.btn-group > .btn-group:last-child > .btn:first-child { + .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 { + .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 { + .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 { + &:extend(.clearfix all); + > .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; + .border-bottom-radius(0); + } + &:last-child:not(:first-child) { + border-bottom-left-radius: @border-radius-base; + .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 { + .border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + .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%; + } + + > .btn-group .dropdown-menu { + left: auto; + } +} + + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot +// use `display: none;` or `visibility: hidden;` as that also hides the popover. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 for more. + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + .opacity(0); +} diff --git a/packages/bootstrap3-less/lib/less/buttons.import.less b/packages/bootstrap3-less/lib/less/buttons.import.less new file mode 100755 index 0000000..492bdc6 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/buttons.import.less @@ -0,0 +1,157 @@ +// +// 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; + .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base); + .user-select(none); + + &, + &:active, + &.active { + &:focus { + .tab-focus(); + } + } + + &:hover, + &:focus { + color: @btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + .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 + .opacity(.65); + .box-shadow(none); + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); +} +.btn-primary { + .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); +} +// Success appears as green +.btn-success { + .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); +} +// Info appears as blue-green +.btn-info { + .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); +} +// Warning appears as orange +.btn-warning { + .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + .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; + .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 + .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 + .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); +} +.btn-xs { + .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%; +} + +// 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/packages/bootstrap3-less/lib/less/carousel.import.less b/packages/bootstrap3-less/lib/less/carousel.import.less new file mode 100755 index 0000000..1644ddf --- /dev/null +++ b/packages/bootstrap3-less/lib/less/carousel.import.less @@ -0,0 +1,243 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + .transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + &:extend(.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; + .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 { + #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: @carousel-control-color; + text-decoration: none; + .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%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + margin-top: -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; + font-size: 30px; + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: -15px; + } + .glyphicon-chevron-right, + .icon-next { + margin-right: -15px; + } + } + + // 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/packages/bootstrap3-less/lib/less/close.import.less b/packages/bootstrap3-less/lib/less/close.import.less new file mode 100755 index 0000000..9b4e74f --- /dev/null +++ b/packages/bootstrap3-less/lib/less/close.import.less @@ -0,0 +1,33 @@ +// +// 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; + .opacity(.2); + + &:hover, + &:focus { + color: @close-color; + text-decoration: none; + cursor: pointer; + .opacity(.5); + } + + // 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& { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + } +} diff --git a/packages/bootstrap3-less/lib/less/code.import.less b/packages/bootstrap3-less/lib/less/code.import.less new file mode 100755 index 0000000..baa13df --- /dev/null +++ b/packages/bootstrap3-less/lib/less/code.import.less @@ -0,0 +1,68 @@ +// +// 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; + 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); + + kbd { + padding: 0; + font-size: 100%; + box-shadow: none; + } +} + +// 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/packages/bootstrap3-less/lib/less/component-animations.import.less b/packages/bootstrap3-less/lib/less/component-animations.import.less new file mode 100755 index 0000000..9400a0d --- /dev/null +++ b/packages/bootstrap3-less/lib/less/component-animations.import.less @@ -0,0 +1,31 @@ +// +// 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/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + .transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { display: block; } + tr&.in { display: table-row; } + tbody&.in { display: table-row-group; } +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + .transition(height .35s ease); +} diff --git a/packages/bootstrap3-less/lib/less/dropdowns.import.less b/packages/bootstrap3-less/lib/less/dropdowns.import.less new file mode 100755 index 0000000..3eb7fc0 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/dropdowns.import.less @@ -0,0 +1,215 @@ +// +// 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; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: @dropdown-bg; + border: 1px solid @dropdown-fallback-border; // IE8 fallback + border: 1px solid @dropdown-border; + border-radius: @border-radius-base; + .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 { + .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 + .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; + white-space: nowrap; // as with > li > a +} + +// 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 { + .dropdown-menu-right(); + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + .dropdown-menu-left(); + } + } +} + diff --git a/packages/bootstrap3-less/lib/less/forms.import.less b/packages/bootstrap3-less/lib/less/forms.import.less new file mode 100755 index 0000000..2c5e9bf --- /dev/null +++ b/packages/bootstrap3-less/lib/less/forms.import.less @@ -0,0 +1,540 @@ +// +// 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: 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; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + 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"] { + .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 { + .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; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); + + // Customize the `:focus` state to imitate native WebKit styles. + .form-control-focus(); + + // Placeholder + .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 + } + + // Reset height for `textarea`s + textarea& { + 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 temporal inputs +// +// In Mobile Safari, setting `display: block` on temporal inputs causes the +// text within the input to become vertically misaligned. +// As a workaround, we set a pixel line-height that matches the +// given height of the input. Since this fucks up everything else, we have to +// appropriately reset it for Internet Explorer and the size variations. + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: @input-height-base; + // IE8+ misaligns the text within date inputs, so we reset + line-height: @line-height-base ~"\0"; + + &.input-sm { + line-height: @input-height-small; + } + &.input-lg { + line-height: @input-height-large; + } +} + + +// 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 { + position: relative; + display: block; + min-height: @line-height-computed; // clear the floating input if there is no label text + margin-top: 10px; + margin-bottom: 10px; + + label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} + +.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 +// Some special care is needed because Star + +// Import the fonts +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('@{icon-font-path}@{icon-font-name}.eot'); + src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'), + url('@{icon-font-path}@{icon-font-name}.woff') format('woff'), + url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'), + url('@{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/packages/bootstrap3-less/lib/less/grid.import.less b/packages/bootstrap3-less/lib/less/grid.import.less new file mode 100755 index 0000000..e100655 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/grid.import.less @@ -0,0 +1,84 @@ +// +// Grid system +// -------------------------------------------------- + + +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +.container { + .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 { + .container-fixed(); +} + + +// Row +// +// Rows contain and clear the floats of your columns. + +.row { + .make-row(); +} + + +// Columns +// +// Common styles for small and large grid columns + +.make-grid-columns(); + + +// Extra small grid +// +// Columns, offsets, pushes, and pulls for extra small devices like +// smartphones. + +.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) { + .make-grid(sm); +} + + +// Medium grid +// +// Columns, offsets, pushes, and pulls for the desktop device range. + +@media (min-width: @screen-md-min) { + .make-grid(md); +} + + +// Large grid +// +// Columns, offsets, pushes, and pulls for the large desktop device range. + +@media (min-width: @screen-lg-min) { + .make-grid(lg); +} diff --git a/packages/bootstrap3-less/lib/less/input-groups.import.less b/packages/bootstrap3-less/lib/less/input-groups.import.less new file mode 100755 index 0000000..a8712f2 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/input-groups.import.less @@ -0,0 +1,166 @@ +// +// 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 { + .input-lg(); +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + .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 { + .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 { + .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/packages/bootstrap3-less/lib/less/jumbotron.import.less b/packages/bootstrap3-less/lib/less/jumbotron.import.less new file mode 100755 index 0000000..27cd8b8 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/jumbotron.import.less @@ -0,0 +1,48 @@ +// +// 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; + } + + > hr { + border-top-color: darken(@jumbotron-bg, 10%); + } + + .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/packages/bootstrap3-less/lib/less/labels.import.less b/packages/bootstrap3-less/lib/less/labels.import.less new file mode 100755 index 0000000..9a5a270 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/labels.import.less @@ -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 + a& { + &: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 { + .label-variant(@label-default-bg); +} + +.label-primary { + .label-variant(@label-primary-bg); +} + +.label-success { + .label-variant(@label-success-bg); +} + +.label-info { + .label-variant(@label-info-bg); +} + +.label-warning { + .label-variant(@label-warning-bg); +} + +.label-danger { + .label-variant(@label-danger-bg); +} diff --git a/packages/bootstrap3-less/lib/less/list-group.import.less b/packages/bootstrap3-less/lib/less/list-group.import.less new file mode 100755 index 0000000..1946bf5 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/list-group.import.less @@ -0,0 +1,131 @@ +// +// 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 { + .border-top-radius(@list-group-border-radius); + } + &:last-child { + margin-bottom: 0; + .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; + color: @list-group-link-hover-color; + background-color: @list-group-hover-bg; + } +} + +.list-group-item { + // Disabled state + &.disabled, + &.disabled:hover, + &.disabled:focus { + background-color: @list-group-disabled-bg; + color: @list-group-disabled-color; + + // Force color to inherit for custom content + .list-group-item-heading { + color: inherit; + } + .list-group-item-text { + color: @list-group-disabled-text-color; + } + } + + // 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, + .list-group-item-heading > small, + .list-group-item-heading > .small { + 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. + +.list-group-item-variant(success; @state-success-bg; @state-success-text); +.list-group-item-variant(info; @state-info-bg; @state-info-text); +.list-group-item-variant(warning; @state-warning-bg; @state-warning-text); +.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/packages/bootstrap3-less/lib/less/media.import.less b/packages/bootstrap3-less/lib/less/media.import.less new file mode 100755 index 0000000..5ad22cd --- /dev/null +++ b/packages/bootstrap3-less/lib/less/media.import.less @@ -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/packages/bootstrap3-less/lib/less/mixins.import.less b/packages/bootstrap3-less/lib/less/mixins.import.less new file mode 100755 index 0000000..f0d92f1 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins.import.less @@ -0,0 +1,39 @@ +// Mixins +// -------------------------------------------------- + +// Utilities +@import "mixins/hide-text.import.less"; +@import "mixins/opacity.import.less"; +@import "mixins/image.import.less"; +@import "mixins/labels.import.less"; +@import "mixins/reset-filter.import.less"; +@import "mixins/resize.import.less"; +@import "mixins/responsive-visibility.import.less"; +@import "mixins/size.import.less"; +@import "mixins/tab-focus.import.less"; +@import "mixins/text-emphasis.import.less"; +@import "mixins/text-overflow.import.less"; +@import "mixins/vendor-prefixes.import.less"; + +// Components +@import "mixins/alerts.import.less"; +@import "mixins/buttons.import.less"; +@import "mixins/panels.import.less"; +@import "mixins/pagination.import.less"; +@import "mixins/list-group.import.less"; +@import "mixins/nav-divider.import.less"; +@import "mixins/forms.import.less"; +@import "mixins/progress-bar.import.less"; +@import "mixins/table-row.import.less"; + +// Skins +@import "mixins/background-variant.import.less"; +@import "mixins/border-radius.import.less"; +@import "mixins/gradients.import.less"; + +// Layout +@import "mixins/clearfix.import.less"; +@import "mixins/center-block.import.less"; +@import "mixins/nav-vertical-align.import.less"; +@import "mixins/grid-framework.import.less"; +@import "mixins/grid.import.less"; diff --git a/packages/bootstrap3-less/lib/less/mixins/alerts.import.less b/packages/bootstrap3-less/lib/less/mixins/alerts.import.less new file mode 100755 index 0000000..396196f --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins/alerts.import.less @@ -0,0 +1,14 @@ +// Alerts + +.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%); + } +} diff --git a/packages/bootstrap3-less/lib/less/mixins/background-variant.import.less b/packages/bootstrap3-less/lib/less/mixins/background-variant.import.less new file mode 100755 index 0000000..556e490 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins/background-variant.import.less @@ -0,0 +1,8 @@ +// Contextual backgrounds + +.bg-variant(@color) { + background-color: @color; + a&:hover { + background-color: darken(@color, 10%); + } +} diff --git a/packages/bootstrap3-less/lib/less/mixins/border-radius.import.less b/packages/bootstrap3-less/lib/less/mixins/border-radius.import.less new file mode 100755 index 0000000..ca05dbf --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins/border-radius.import.less @@ -0,0 +1,18 @@ +// Single side border-radius + +.border-top-radius(@radius) { + border-top-right-radius: @radius; + border-top-left-radius: @radius; +} +.border-right-radius(@radius) { + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; +} +.border-bottom-radius(@radius) { + border-bottom-right-radius: @radius; + border-bottom-left-radius: @radius; +} +.border-left-radius(@radius) { + border-bottom-left-radius: @radius; + border-top-left-radius: @radius; +} diff --git a/packages/bootstrap3-less/lib/less/mixins/buttons.import.less b/packages/bootstrap3-less/lib/less/mixins/buttons.import.less new file mode 100755 index 0000000..409f8f2 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins/buttons.import.less @@ -0,0 +1,50 @@ +// Button variants +// +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons + +.button-variant(@color; @background; @border) { + color: @color; + background-color: @background; + border-color: @border; + + &:hover, + &:focus, + &:active, + &.active, + .open > .dropdown-toggle& { + color: @color; + background-color: darken(@background, 10%); + border-color: darken(@border, 12%); + } + &:active, + &.active, + .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 +.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; +} diff --git a/packages/bootstrap3-less/lib/less/mixins/center-block.import.less b/packages/bootstrap3-less/lib/less/mixins/center-block.import.less new file mode 100755 index 0000000..d18d6de --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins/center-block.import.less @@ -0,0 +1,7 @@ +// Center-align a block level element + +.center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} diff --git a/packages/bootstrap3-less/lib/less/mixins/clearfix.import.less b/packages/bootstrap3-less/lib/less/mixins/clearfix.import.less new file mode 100755 index 0000000..3f7a382 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins/clearfix.import.less @@ -0,0 +1,22 @@ +// Clearfix +// +// 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. +// +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ + +.clearfix() { + &:before, + &:after { + content: " "; // 1 + display: table; // 2 + } + &:after { + clear: both; + } +} diff --git a/packages/bootstrap3-less/lib/less/mixins/forms.import.less b/packages/bootstrap3-less/lib/less/mixins/forms.import.less new file mode 100755 index 0000000..e36c4a8 --- /dev/null +++ b/packages/bootstrap3-less/lib/less/mixins/forms.import.less @@ -0,0 +1,81 @@ +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +.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; + .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%); + .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-border-focus` 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. +.form-control-focus(@color: @input-border-focus) { + @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); + &:focus { + border-color: @color; + outline: 0; + .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; +//** `` background color +@input-bg-disabled: @gray-lighter; + +//** Text color for ``s +@input-color: @gray; +//** `` border color +@input-border: #ccc; +//** `` border radius +@input-border-radius: @border-radius-base; +//** Border color for inputs on focus +@input-border-focus: #66afe9; + +//** Placeholder text color +@input-color-placeholder: @gray-light; + +//** Default `.form-control` height +@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); +//** Large `.form-control` height +@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); +//** Small `.form-control` height +@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2); + +@legend-color: @gray-dark; +@legend-border-color: #e5e5e5; + +//** Background color for textual input addons +@input-group-addon-bg: @gray-lighter; +//** Border color for textual input addons +@input-group-addon-border-color: @input-border; + + +//== Dropdowns +// +//## Dropdown menu container and contents. + +//** Background for the dropdown menu. +@dropdown-bg: #fff; +//** Dropdown menu `border-color`. +@dropdown-border: rgba(0,0,0,.15); +//** Dropdown menu `border-color` **for IE8**. +@dropdown-fallback-border: #ccc; +//** Divider color for between dropdown items. +@dropdown-divider-bg: #e5e5e5; + +//** Dropdown link text color. +@dropdown-link-color: @gray-dark; +//** Hover color for dropdown links. +@dropdown-link-hover-color: darken(@gray-dark, 5%); +//** Hover background for dropdown links. +@dropdown-link-hover-bg: #f5f5f5; + +//** Active dropdown menu item text color. +@dropdown-link-active-color: @component-active-color; +//** Active dropdown menu item background color. +@dropdown-link-active-bg: @component-active-bg; + +//** Disabled dropdown menu item background color. +@dropdown-link-disabled-color: @gray-light; + +//** Text color for headers within dropdown menus. +@dropdown-header-color: @gray-light; + +//** Deprecated `@dropdown-caret-color` as of v3.1.0 +@dropdown-caret-color: #000; + + +//-- 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; +@zindex-dropdown: 1000; +@zindex-popover: 1060; +@zindex-tooltip: 1070; +@zindex-navbar-fixed: 1030; +@zindex-modal-background: 1040; +@zindex-modal: 1050; + + +//== Media queries breakpoints +// +//## Define the breakpoints at which your layout will change, adapting to different screen sizes. + +// Extra small screen / phone +//** Deprecated `@screen-xs` as of v3.0.1 +@screen-xs: 480px; +//** Deprecated `@screen-xs-min` as of v3.2.0 +@screen-xs-min: @screen-xs; +//** Deprecated `@screen-phone` as of v3.0.1 +@screen-phone: @screen-xs-min; + +// Small screen / tablet +//** Deprecated `@screen-sm` as of v3.0.1 +@screen-sm: 768px; +@screen-sm-min: @screen-sm; +//** Deprecated `@screen-tablet` as of v3.0.1 +@screen-tablet: @screen-sm-min; + +// Medium screen / desktop +//** Deprecated `@screen-md` as of v3.0.1 +@screen-md: 992px; +@screen-md-min: @screen-md; +//** Deprecated `@screen-desktop` as of v3.0.1 +@screen-desktop: @screen-md-min; + +// Large screen / wide desktop +//** Deprecated `@screen-lg` as of v3.0.1 +@screen-lg: 1200px; +@screen-lg-min: @screen-lg; +//** Deprecated `@screen-lg-desktop` as of v3.0.1 +@screen-lg-desktop: @screen-lg-min; + +// So media queries don't overlap when required, provide a maximum +@screen-xs-max: (@screen-sm-min - 1); +@screen-sm-max: (@screen-md-min - 1); +@screen-md-max: (@screen-lg-min - 1); + + +//== Grid system +// +//## Define your custom responsive grid. + +//** Number of columns in the grid. +@grid-columns: 12; +//** Padding between columns. Gets divided in half for the left and right. +@grid-gutter-width: 30px; +// Navbar collapse +//** Point at which the navbar becomes uncollapsed. +@grid-float-breakpoint: @screen-sm-min; +//** Point at which the navbar begins collapsing. +@grid-float-breakpoint-max: (@grid-float-breakpoint - 1); + + +//== Container sizes +// +//## Define the maximum width of `.container` for different screen sizes. + +// Small screen / tablet +@container-tablet: ((720px + @grid-gutter-width)); +//** For `@screen-sm-min` and up. +@container-sm: @container-tablet; + +// Medium screen / desktop +@container-desktop: ((940px + @grid-gutter-width)); +//** For `@screen-md-min` and up. +@container-md: @container-desktop; + +// Large screen / wide desktop +@container-large-desktop: ((1140px + @grid-gutter-width)); +//** For `@screen-lg-min` and up. +@container-lg: @container-large-desktop; + + +//== Navbar +// +//## + +// Basics of a navbar +@navbar-height: 50px; +@navbar-margin-bottom: @line-height-computed; +@navbar-border-radius: @border-radius-base; +@navbar-padding-horizontal: floor((@grid-gutter-width / 2)); +@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2); +@navbar-collapse-max-height: 340px; + +@navbar-default-color: #777; +@navbar-default-bg: #f8f8f8; +@navbar-default-border: darken(@navbar-default-bg, 6.5%); + +// Navbar links +@navbar-default-link-color: #777; +@navbar-default-link-hover-color: #333; +@navbar-default-link-hover-bg: transparent; +@navbar-default-link-active-color: #555; +@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%); +@navbar-default-link-disabled-color: #ccc; +@navbar-default-link-disabled-bg: transparent; + +// Navbar brand label +@navbar-default-brand-color: @navbar-default-link-color; +@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%); +@navbar-default-brand-hover-bg: transparent; + +// Navbar toggle +@navbar-default-toggle-hover-bg: #ddd; +@navbar-default-toggle-icon-bar-bg: #888; +@navbar-default-toggle-border-color: #ddd; + + +// Inverted navbar +// Reset inverted navbar basics +@navbar-inverse-color: @gray-light; +@navbar-inverse-bg: #222; +@navbar-inverse-border: darken(@navbar-inverse-bg, 10%); + +// Inverted navbar links +@navbar-inverse-link-color: @gray-light; +@navbar-inverse-link-hover-color: #fff; +@navbar-inverse-link-hover-bg: transparent; +@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color; +@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%); +@navbar-inverse-link-disabled-color: #444; +@navbar-inverse-link-disabled-bg: transparent; + +// Inverted navbar brand label +@navbar-inverse-brand-color: @navbar-inverse-link-color; +@navbar-inverse-brand-hover-color: #fff; +@navbar-inverse-brand-hover-bg: transparent; + +// Inverted navbar toggle +@navbar-inverse-toggle-hover-bg: #333; +@navbar-inverse-toggle-icon-bar-bg: #fff; +@navbar-inverse-toggle-border-color: #333; + + +//== Navs +// +//## + +//=== Shared nav styles +@nav-link-padding: 10px 15px; +@nav-link-hover-bg: @gray-lighter; + +@nav-disabled-link-color: @gray-light; +@nav-disabled-link-hover-color: @gray-light; + +@nav-open-link-hover-color: #fff; + +//== Tabs +@nav-tabs-border-color: #ddd; + +@nav-tabs-link-hover-border-color: @gray-lighter; + +@nav-tabs-active-link-hover-bg: @body-bg; +@nav-tabs-active-link-hover-color: @gray; +@nav-tabs-active-link-hover-border-color: #ddd; + +@nav-tabs-justified-link-border-color: #ddd; +@nav-tabs-justified-active-link-border-color: @body-bg; + +//== Pills +@nav-pills-border-radius: @border-radius-base; +@nav-pills-active-link-hover-bg: @component-active-bg; +@nav-pills-active-link-hover-color: @component-active-color; + + +//== Pagination +// +//## + +@pagination-color: @link-color; +@pagination-bg: #fff; +@pagination-border: #ddd; + +@pagination-hover-color: @link-hover-color; +@pagination-hover-bg: @gray-lighter; +@pagination-hover-border: #ddd; + +@pagination-active-color: #fff; +@pagination-active-bg: @brand-primary; +@pagination-active-border: @brand-primary; + +@pagination-disabled-color: @gray-light; +@pagination-disabled-bg: #fff; +@pagination-disabled-border: #ddd; + + +//== Pager +// +//## + +@pager-bg: @pagination-bg; +@pager-border: @pagination-border; +@pager-border-radius: 15px; + +@pager-hover-bg: @pagination-hover-bg; + +@pager-active-bg: @pagination-active-bg; +@pager-active-color: @pagination-active-color; + +@pager-disabled-color: @pagination-disabled-color; + + +//== Jumbotron +// +//## + +@jumbotron-padding: 30px; +@jumbotron-color: inherit; +@jumbotron-bg: @gray-lighter; +@jumbotron-heading-color: inherit; +@jumbotron-font-size: ceil((@font-size-base * 1.5)); + + +//== Form states and alerts +// +//## Define colors for form feedback states and, by default, alerts. + +@state-success-text: #3c763d; +@state-success-bg: #dff0d8; +@state-success-border: darken(spin(@state-success-bg, -10), 5%); + +@state-info-text: #31708f; +@state-info-bg: #d9edf7; +@state-info-border: darken(spin(@state-info-bg, -10), 7%); + +@state-warning-text: #8a6d3b; +@state-warning-bg: #fcf8e3; +@state-warning-border: darken(spin(@state-warning-bg, -10), 5%); + +@state-danger-text: #a94442; +@state-danger-bg: #f2dede; +@state-danger-border: darken(spin(@state-danger-bg, -10), 5%); + + +//== Tooltips +// +//## + +//** Tooltip max width +@tooltip-max-width: 200px; +//** Tooltip text color +@tooltip-color: #fff; +//** Tooltip background color +@tooltip-bg: #000; +@tooltip-opacity: .9; + +//** Tooltip arrow width +@tooltip-arrow-width: 5px; +//** Tooltip arrow color +@tooltip-arrow-color: @tooltip-bg; + + +//== Popovers +// +//## + +//** Popover body background color +@popover-bg: #fff; +//** Popover maximum width +@popover-max-width: 276px; +//** Popover border color +@popover-border-color: rgba(0,0,0,.2); +//** Popover fallback border color +@popover-fallback-border-color: #ccc; + +//** Popover title background color +@popover-title-bg: darken(@popover-bg, 3%); + +//** Popover arrow width +@popover-arrow-width: 10px; +//** Popover arrow color +@popover-arrow-color: #fff; + +//** Popover outer arrow width +@popover-arrow-outer-width: (@popover-arrow-width + 1); +//** Popover outer arrow color +@popover-arrow-outer-color: fadein(@popover-border-color, 5%); +//** Popover outer arrow fallback color +@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%); + + +//== Labels +// +//## + +//** Default label background color +@label-default-bg: @gray-light; +//** Primary label background color +@label-primary-bg: @brand-primary; +//** Success label background color +@label-success-bg: @brand-success; +//** Info label background color +@label-info-bg: @brand-info; +//** Warning label background color +@label-warning-bg: @brand-warning; +//** Danger label background color +@label-danger-bg: @brand-danger; + +//** Default label text color +@label-color: #fff; +//** Default text color of a linked label +@label-link-hover-color: #fff; + + +//== Modals +// +//## + +//** Padding applied to the modal body +@modal-inner-padding: 15px; + +//** Padding applied to the modal title +@modal-title-padding: 15px; +//** Modal title line-height +@modal-title-line-height: @line-height-base; + +//** Background color of modal content area +@modal-content-bg: #fff; +//** Modal content border color +@modal-content-border-color: rgba(0,0,0,.2); +//** Modal content border color **for IE8** +@modal-content-fallback-border-color: #999; + +//** Modal backdrop background color +@modal-backdrop-bg: #000; +//** Modal backdrop opacity +@modal-backdrop-opacity: .5; +//** Modal header border color +@modal-header-border-color: #e5e5e5; +//** Modal footer border color +@modal-footer-border-color: @modal-header-border-color; + +@modal-lg: 900px; +@modal-md: 600px; +@modal-sm: 300px; + + +//== Alerts +// +//## Define alert colors, border radius, and padding. + +@alert-padding: 15px; +@alert-border-radius: @border-radius-base; +@alert-link-font-weight: bold; + +@alert-success-bg: @state-success-bg; +@alert-success-text: @state-success-text; +@alert-success-border: @state-success-border; + +@alert-info-bg: @state-info-bg; +@alert-info-text: @state-info-text; +@alert-info-border: @state-info-border; + +@alert-warning-bg: @state-warning-bg; +@alert-warning-text: @state-warning-text; +@alert-warning-border: @state-warning-border; + +@alert-danger-bg: @state-danger-bg; +@alert-danger-text: @state-danger-text; +@alert-danger-border: @state-danger-border; + + +//== Progress bars +// +//## + +//** Background color of the whole progress component +@progress-bg: #f5f5f5; +//** Progress bar text color +@progress-bar-color: #fff; + +//** Default progress bar color +@progress-bar-bg: @brand-primary; +//** Success progress bar color +@progress-bar-success-bg: @brand-success; +//** Warning progress bar color +@progress-bar-warning-bg: @brand-warning; +//** Danger progress bar color +@progress-bar-danger-bg: @brand-danger; +//** Info progress bar color +@progress-bar-info-bg: @brand-info; + + +//== List group +// +//## + +//** Background color on `.list-group-item` +@list-group-bg: #fff; +//** `.list-group-item` border color +@list-group-border: #ddd; +//** List group border radius +@list-group-border-radius: @border-radius-base; + +//** Background color of single list items on hover +@list-group-hover-bg: #f5f5f5; +//** Text color of active list items +@list-group-active-color: @component-active-color; +//** Background color of active list items +@list-group-active-bg: @component-active-bg; +//** Border color of active list elements +@list-group-active-border: @list-group-active-bg; +//** Text color for content within active list items +@list-group-active-text-color: lighten(@list-group-active-bg, 40%); + +//** Text color of disabled list items +@list-group-disabled-color: @gray-light; +//** Background color of disabled list items +@list-group-disabled-bg: @gray-lighter; +//** Text color for content within disabled list items +@list-group-disabled-text-color: @list-group-disabled-color; + +@list-group-link-color: #555; +@list-group-link-hover-color: @list-group-link-color; +@list-group-link-heading-color: #333; + + +//== Panels +// +//## + +@panel-bg: #fff; +@panel-body-padding: 15px; +@panel-heading-padding: 10px 15px; +@panel-footer-padding: @panel-heading-padding; +@panel-border-radius: @border-radius-base; + +//** Border color for elements within panels +@panel-inner-border: #ddd; +@panel-footer-bg: #f5f5f5; + +@panel-default-text: @gray-dark; +@panel-default-border: #ddd; +@panel-default-heading-bg: #f5f5f5; + +@panel-primary-text: #fff; +@panel-primary-border: @brand-primary; +@panel-primary-heading-bg: @brand-primary; + +@panel-success-text: @state-success-text; +@panel-success-border: @state-success-border; +@panel-success-heading-bg: @state-success-bg; + +@panel-info-text: @state-info-text; +@panel-info-border: @state-info-border; +@panel-info-heading-bg: @state-info-bg; + +@panel-warning-text: @state-warning-text; +@panel-warning-border: @state-warning-border; +@panel-warning-heading-bg: @state-warning-bg; + +@panel-danger-text: @state-danger-text; +@panel-danger-border: @state-danger-border; +@panel-danger-heading-bg: @state-danger-bg; + + +//== Thumbnails +// +//## + +//** Padding around the thumbnail image +@thumbnail-padding: 4px; +//** Thumbnail background color +@thumbnail-bg: @body-bg; +//** Thumbnail border color +@thumbnail-border: #ddd; +//** Thumbnail border radius +@thumbnail-border-radius: @border-radius-base; + +//** Custom text color for thumbnail captions +@thumbnail-caption-color: @text-color; +//** Padding around the thumbnail caption +@thumbnail-caption-padding: 9px; + + +//== Wells +// +//## + +@well-bg: #f5f5f5; +@well-border: darken(@well-bg, 7%); + + +//== Badges +// +//## + +@badge-color: #fff; +//** Linked badge text color on hover +@badge-link-hover-color: #fff; +@badge-bg: @gray-light; + +//** Badge text color in active nav link +@badge-active-color: @link-color; +//** Badge background color in active nav link +@badge-active-bg: #fff; + +@badge-font-weight: bold; +@badge-line-height: 1; +@badge-border-radius: 10px; + + +//== Breadcrumbs +// +//## + +@breadcrumb-padding-vertical: 8px; +@breadcrumb-padding-horizontal: 15px; +//** Breadcrumb background color +@breadcrumb-bg: #f5f5f5; +//** Breadcrumb text color +@breadcrumb-color: #ccc; +//** Text color of current page in the breadcrumb +@breadcrumb-active-color: @gray-light; +//** Textual separator for between breadcrumb elements +@breadcrumb-separator: "/"; + + +//== Carousel +// +//## + +@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6); + +@carousel-control-color: #fff; +@carousel-control-width: 15%; +@carousel-control-opacity: .5; +@carousel-control-font-size: 20px; + +@carousel-indicator-active-bg: #fff; +@carousel-indicator-border-color: #fff; + +@carousel-caption-color: #fff; + + +//== Close +// +//## + +@close-font-weight: bold; +@close-color: #000; +@close-text-shadow: 0 1px 0 #fff; + + +//== Code +// +//## + +@code-color: #c7254e; +@code-bg: #f9f2f4; + +@kbd-color: #fff; +@kbd-bg: #333; + +@pre-bg: #f5f5f5; +@pre-color: @gray-dark; +@pre-border-color: #ccc; +@pre-scrollable-max-height: 340px; + + +//== Type +// +//## + +//** Horizontal offset for forms and lists. +@component-offset-horizontal: 180px; +//** Text muted color +@text-muted: @gray-light; +//** Abbreviations and acronyms border color +@abbr-border-color: @gray-light; +//** Headings small color +@headings-small-color: @gray-light; +//** Blockquote small color +@blockquote-small-color: @gray-light; +//** Blockquote font size +@blockquote-font-size: (@font-size-base * 1.25); +//** Blockquote border color +@blockquote-border-color: @gray-lighter; +//** Page header border color +@page-header-border-color: @gray-lighter; +//** Width of horizontal description list titles +@dl-horizontal-offset: @component-offset-horizontal; +//** Horizontal line color. +@hr-border: @gray-lighter; + + diff --git a/packages/bootstrap3-less/lib/less/wells.import.less b/packages/bootstrap3-less/lib/less/wells.import.less new file mode 100755 index 0000000..15d072b --- /dev/null +++ b/packages/bootstrap3-less/lib/less/wells.import.less @@ -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; + .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; +} From e80fbb85f35d3a3a50df47fee35d99c6bc927b8e Mon Sep 17 00:00:00 2001 From: Karthikeyan Date: Thu, 2 Oct 2014 00:08:29 +0530 Subject: [PATCH 4/6] Updated README --- README.md | 129 ++++++++++-------------------------------------------- 1 file changed, 24 insertions(+), 105 deletions(-) diff --git a/README.md b/README.md index 8aca9f8..48dda6d 100644 --- a/README.md +++ b/README.md @@ -3,114 +3,33 @@ The Challenge - Clean India Inspired by [The Ugly Indian](http://theuglyindian.com) and the [community](https://www.facebook.com/theugl.yindian) who have been transforming public spaces in the country over the past few years, create a software application that empowers people to take charge and solve problems in their neighborhood. +Some History +============================ -###Why? - - -> "I beg every citizen of the country to pledge 100 hours a year towards cleanliness. This work cannot be done by the PM, CMs or ministers alone. Every citizen of the nation has to pledge to keep the country clean" - Prime Minister Narendra Modi on 24th Sep 2014 - -If you have been following work inspired by [The Ugly Indian](https://www.facebook.com/theugl.yindian) on facebook, you will see that it takes only a few people to go out and bring about a change. - - - -###What? - - -![PM's message to dedicate 2 hours per week to spotfixing](https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xfp1/t31.0-8/r90/10623637_758609274198330_1043844814865936707_o.jpg?dl=1) - -In short do a spot fix - A spotfix is transforming a public space by solving the basic underlying problems - -![An example of spotfix](http://33.media.tumblr.com/7ca066c821c7ef7ca41a1154fb072405/tumblr_n7w439SmZN1tw6339o1_1280.jpg) - - -The photos [here](http://theuglyindian.tumblr.com/) and this [Reddit AMA](http://www.reddit.com/r/india/comments/24uw33/hi_rindia_i_am_anamik_nagrik_an_ugly_indian_ama_r/?sort=top) cover most questions you will have about this approach and proactive style of working. - -There is even a book on this [here](http://theuglyindian.com/books/) - - - -###How? - - -Create an application (mobile or web) that enables people from across the country to plan, organize and execute a spot fix. - -###Who and Where? - - -Anyone from any part of the country can participate. The entire process is online. You can do this as an individual or find a team to build this. - -###When? - - -September 24 - Oct 1 - -We need you to complete your application and submit it by 11:00 PM on 1st October 2014 IST. - - -###What do you get out of this? - -You can create an application that can inspire an entire generation of Indians to *see the change they want to be*. - -The best entries will be showcased, promoted and used by people who have been inspired by 'The Ugly Indian' - -###Submission - -- You will have to email indiarisingtech@gmail.com with a link to the working version of your application along with brief details on how to use it and some screenshots. -- If you have your code on github, submit a pull request to this repository. - - -###Requirements - - -- You can build either a mobile or a web application. There are no restrictions on the platform you can build. All we care about is that whatever you build works, is easy to use and has the potential to have mass appeal. - -The primary functional requirements for the app include -- **Planning a spot fix** | Any person who is interested to do a spot fix should be able to upload a photo, location and description of the spot along with a planned date she or he intends to fix it on. -- **Joining a spot fix** | Any person should be able to browse through planned spot fixes in their vicinity and be able to join the spotfix and share the fix across social media. -- **Reporting a spot fix** | Any person should be able to report a spot fix after it has been completed. The user should be able to upload a before/after picture, a geotagged location, a date and a description of the fix. -- **Map based dashboard** | The primary interface should be map based that shows spots that are available for a fix and spots that have been fixed. The dashboard should let users navigate to each of the spots and browse the details. The dashboard should also report metrics like - Total number of hours volunteered, total number of spot fixes and other interesting aggregated metrics. - - - -###Frequently Asked Questions - -- **Do I need submit a complete application?** - - -We understand that the time period might not be sufficient to complete the entire project. We would like a functional prototype with the possibility of extension. It should be usable. We recommend you build upon the skills you have. If you are a designer, build the aspects your are familiar wih first (Screen mockups, UI/UX flows). If you are developer, write things that work while providing a usable UI. We want to use whatever you make and build on it in the future by contribution from the community. So don't let the enormity of the task let you down. Just do and submit your best. - -- **What kind of submissions have people been sending you?** - -We have had one person sending us an API built in `nodejs` that could be used by any application developer to build the frontend of their application. [Here is the pull request he sent](https://github.com/indiarising/hackathon/pull/1). We had someone else contributing to the existing documentation. We have had people working end to end on finishing a working prototype of the application. We have had people sending in some tools they have built that could be used for this project. We have had designers and agencies sending in mockups and UX flows. And several other things. As you can see, people are doing whatever they are best at while trying to achieve the goal of the hackathon. We intend to use the things learnt from this process for a more long term project that will involve you and your work. - - - -- **Why do we have to create a github page and submit a pull request?** - -Having a github page lets us easily share your work with the community. Submitting the pull request lets us easily track your work while keeping things transparent. Even if you do not finish your submission this time, we know you have tried something and you will be kept in the loop when we build on this further. - -- **What if I am not a programmer but a designer or an agency?** - -As mentioned earlier, focus on what you do best. If you are a design agency willing to build design concepts around the UI/UX flows or assets (logos/banners/iconography/typography) we could use in the future, go ahead and build it. The submission process remains the same. Creating a github page and submitting a pull request is not very hard. Drop us a mail if you get stuck. - - -- **I don't have the necessary skills to finish everything and would know if there is a way to find a team** - -We do not currently have a process to form team. We would like you to find someone know and try to build things. It is perfectly okay to build only the part you are good at. You can also send us an email and we could maybe figure out something. - -- **What if I am interested but can't do anything this time or before the 1st Oct deadline?** - -Create a github page and send it as a pull request telling us about how you can build this and write a bit about how you can contribute. That way we know you are serious about this. Send it as a pull request and we will keep you in the loop in the future. Also send us an email. - -- **What is github and how do I use it? (Skip if you are already familiar with using git)** - -Github is a version control and collaboration platform for projects, mostly projects that involve code but can also be used for documents and even sharing and collaborating on 3D models. To start with github register on https://github.com/ and, [Fork the hackathon Repository](https://help.github.com/articles/fork-a-repo) by hitting the fork button on [the repo](https://github.com/indiarising/hackathon). Then [create a new file](https://github.com/blog/1327-creating-files-on-github) adding whatever you want to it. You can add images, links and pretty much anything when you create the page. Read more [here](https://github.com/blog/1327-creating-files-on-github). Then [submit a Pull Request](https://help.github.com/articles/using-pull-requests) to our repository. - - - +This is a follow up to our app idea at [#hack4good 0.6](http://hack4good.io/) which finished second place in Bangalore. +Presentation on [Youtube](https://www.youtube.com/v/LXV5L6TIeuU?start=262&end=780) from 4:22 to 13:00 -### For any questions email *indiarisingtech@gmail.com* +[GitHub repo](https://github.com/kaoskeya/act) +Features +============================ +* Easy user sign up. +* Creation of spotfixes/events with loction marked using a map. +* Map and List view of spot fixes. +* RSVP and realtime updates for all connected users. +* Google Material Design. +Roadmap +============================ +* Organisation sign up with facebook page. +* Susbribe to users. +* Better filter. +* Timeline of spot. +* View photos of spotfix. +* Share on Social Media. + +Demo +============================ +[View our app](128.199.207.159:3000) and Star/Fork. From 80954caed5022324aef9fd54af6e91b439f7fd30 Mon Sep 17 00:00:00 2001 From: Karthikeyan Date: Thu, 2 Oct 2014 00:19:42 +0530 Subject: [PATCH 5/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 48dda6d..37b4910 100644 --- a/README.md +++ b/README.md @@ -32,4 +32,4 @@ Roadmap Demo ============================ -[View our app](128.199.207.159:3000) and Star/Fork. +[View our app](http://128.199.207.159:3000) and Star/Fork. From dbb191d1ba0255c032b872e9a1f6c8f123f8de03 Mon Sep 17 00:00:00 2001 From: Karthikeyan Date: Thu, 2 Oct 2014 00:20:44 +0530 Subject: [PATCH 6/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37b4910..abf09d0 100644 --- a/README.md +++ b/README.md @@ -32,4 +32,4 @@ Roadmap Demo ============================ -[View our app](http://128.199.207.159:3000) and Star/Fork. +[View our app](http://128.199.207.159) and Star/Fork.