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/README.md b/README.md index 8aca9f8..abf09d0 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](http://128.199.207.159) and Star/Fork. 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/.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