├── icon.png
├── icon_small.png
├── test.html
├── todo.md
├── manifest.json
├── whoa.js
├── license.js
├── README.md
├── popup.html
├── konami.js
├── popup.js
└── buttons.css
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/christiangenco/chrome-export-history/HEAD/icon.png
--------------------------------------------------------------------------------
/icon_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/christiangenco/chrome-export-history/HEAD/icon_small.png
--------------------------------------------------------------------------------
/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/todo.md:
--------------------------------------------------------------------------------
1 | # Todo
2 |
3 | * local time zone
4 | * multiple computer/devise history API?
5 | * reply to support requests: https://chrome.google.com/webstore/detail/export-history/hcohnnbbiggngobheobhdipbgmcbelhh/support
6 |
7 |
8 | ---
9 |
10 | https://developer.chrome.com/webstore/one_time_payments#update-manifest
11 |
12 | * "export as csv" redirects to gen.co/exporthistory with a "name your price" stripe payment
13 | * show list of people that have paid with amounts
14 | * "If you really don't want to spend money (and I totally empathize with you - I didn't have a debit card and couldn't buy anything online until I was like nineteen), the secret to unlocking excel exports is in the source code :)"
15 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 2,
3 | "name": "Export History",
4 | "description":
5 | "Download your full chrome history in Excel-readable csv and json",
6 | "key":
7 | "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgbRhEYSFuFFubsDQmMiLL7gi+zqx+oy4cCZs0gaLK6D1LmJAMWzDrjgZ9OTXHjvqLnqely7ZLyzoPRwq8CspZdOiAukOI/Df/4crnJ+vqiJtjxT6/pkY/XCV04cMXcxONY7rsJi7GuhtsQXFG2qO/I05L00Zdh+VMv0d8vrikklh2huQAEEtJyuFN6Wzdj5NP0zJJsBDQJ1dAUF26920438LSxpDtdVCX7nmHc2M76SyFeZzy8Q/9cU8uKbS0GiCm4oSIR1L4KsAXvYjnv9xC3eE5VHrtD+LEoo2mdiRvvC4KJRHZj8m8s34d8fwomKZH2P70jlB9xlQz0RgWWEp5wIDAQAB",
8 | "version": "2.0",
9 |
10 | "permissions": [
11 | "history",
12 | "identity",
13 | "https://www.googleapis.com/",
14 | "downloads"
15 | ],
16 | "oauth2": {
17 | "client_id":
18 | "650566817477-0080kv7ltdklamk1qf27rpjdrpa964qm.apps.googleusercontent.com",
19 | "scopes": ["https://www.googleapis.com/auth/chromewebstore.readonly"]
20 | },
21 | "browser_action": {
22 | "default_icon": "icon.png",
23 | "default_popup": "popup.html"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/whoa.js:
--------------------------------------------------------------------------------
1 | // localStorage.removeItem('rickrolled');
2 |
3 | var step = 0;
4 | var messages = [
5 | "Whoa.",
6 | "Hey.",
7 | "Stop that!",
8 | "Nothing else happens.",
9 | "Nothing else happens. I promise.",
10 | "",
11 | ".",
12 | "..",
13 | "...",
14 | "...see?",
15 | "Oh, right.",
16 | "Well, fine. Nothing else happens from now on.",
17 | "At least, nothing you'll find enjoyable.",
18 | "...",
19 | "Stop it!",
20 | "Aren't your fingers getting tired?",
21 | "You'll have that konami code memorized in no time.",
22 | "You probably already have it memorized, in fact.",
23 | "Jeez! I mean, I appreciate you registering Export History and everything",
24 | "Jeez! I mean, I appreciate you registering Export History and everything (really, I do)",
25 | "Jeez! I mean, I appreciate you registering Export History and everything (really, I do), but this is just getting absurd.",
26 | "You can already export your history in Excel!",
27 | "What more do you want?",
28 | "Alright, you know what?",
29 | "You know what you get?",
30 | "You get this:",
31 | "You get this: (which you completely deserve)",
32 | ];
33 |
34 | window.whoa = function(){
35 | if(step < messages.length && !localStorage['rickrolled']){
36 | var thankyou = document.getElementById("thankyou");
37 | thankyou.innerHTML = messages[step++];
38 | }else{
39 | localStorage['rickrolled'] = true;
40 | chrome.tabs.create({url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"});
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/license.js:
--------------------------------------------------------------------------------
1 | var CWS_LICENSE_API_URL = 'https://www.googleapis.com/chromewebstore/v1.1/userlicenses/';
2 |
3 | function getLicense(cb) {
4 | console.log("getting license");
5 | try{
6 | xhrWithAuth('GET', CWS_LICENSE_API_URL + chrome.runtime.id, true, function(error, status, res){
7 | if(status === 200){
8 | cb(res, null);
9 | }else{
10 | cb(res, "Error reading license server: " + response);
11 | }
12 | });
13 | }catch(e){
14 | cb(null, "Error getting authenticated XHR request: " + e);
15 | }
16 | }
17 |
18 |
19 | // Helper Util for making authenticated XHRs
20 | function xhrWithAuth(method, url, interactive, callback) {
21 | var retry = true;
22 | getToken();
23 |
24 | function getToken() {
25 | console.log("Getting auth token...");
26 | console.log("Calling chrome.identity.getAuthToken", interactive);
27 | chrome.identity.getAuthToken({ interactive: interactive }, function(token) {
28 | if (chrome.runtime.lastError) {
29 | callback(chrome.runtime.lastError);
30 | return;
31 | }
32 | console.log("chrome.identity.getAuthToken returned a token", token);
33 | access_token = token;
34 | requestStart();
35 | });
36 | }
37 |
38 | function requestStart() {
39 | console.log("Starting authenticated XHR...", method, url);
40 | var xhr = new XMLHttpRequest();
41 | xhr.open(method, url);
42 | xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);
43 | xhr.onload = requestComplete;
44 | xhr.send();
45 | }
46 |
47 | function requestComplete() {
48 | console.log("Authenticated XHR completed.");
49 | if (this.status == 401 && retry) {
50 | retry = false;
51 | chrome.identity.removeCachedAuthToken({ token: access_token }, getToken);
52 | } else {
53 | callback(null, this.status, JSON.parse(this.response));
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Export History
2 |
3 | A Chrome extension to export your history as csv or json.
4 |
5 | ## Usage
6 |
7 | [Download it](https://chrome.google.com/webstore/detail/export-history/hcohnnbbiggngobheobhdipbgmcbelhh) on the Chrome web store.
8 |
9 | ## Contributing
10 |
11 | Clone this repository:
12 |
13 | $ git clone github.com:christiangenco/chrome-export-history.git
14 |
15 | Then visit the [extensions panel](chrome://extensions/) of your chrome settings, check `developer mode`, click `Load unpacked extension`, and select the directory you just cloned (for a more detailed explanation of these steps, visit Chrome's [Getting Started: Building a Chrome Extension](http://developer.chrome.com/extensions/getstarted) page).
16 |
17 | Most of the logic is contained in [popup.js](popup.js). The method that makes the magic happen is [chrome.history.search](https://developer.chrome.com/extensions/history#method-search), but trying to convert the entire object returned in memory makes Chrome crash.
18 |
19 | The workaround used by this extension is to convert each object of the returned results array individually and append it to a hidden div, `#data`. For whatever reason, the DOM has a much higher memory tolerance than javascript objects in chrome extensions.
20 |
21 | The data in `#data` is then converted to a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) and encoded to a [data URI](http://en.wikipedia.org/wiki/Data_URI_scheme), which you can do like this:
22 |
23 | var blob = new Blob([SOME_DATA], {type: 'application/octet-binary'});
24 | var url = URL.createObjectURL(blob);
25 |
26 | And then *that* url is stuck into a link and clicked on so it downloads as a file, which you can do like this:
27 |
28 | var pom = document.createElement('a');
29 | pom.setAttribute('href', url);
30 | pom.setAttribute('download', filename);
31 | pom.click();
32 |
33 | Direct any questions to [@cgenco](https://twitter.com/cgenco) if you get stuck.
34 |
35 | ## License
36 |
37 | Do whatever you want with this - but if you make money on it, I want some.
--------------------------------------------------------------------------------
/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Export History
5 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | Export History
36 |
40 |
41 |
42 |
43 |
44 |
45 |
48 |
49 |
50 | Thank you for registering Export History :) Tweet me @cgenco if you run into any problems!
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/konami.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Konami-JS ~
3 | * :: Now with support for touch events and multiple instances for
4 | * :: those situations that call for multiple easter eggs!
5 | * Code: http://konami-js.googlecode.com/
6 | * Examples: http://www.snaptortoise.com/konami-js
7 | * Copyright (c) 2009 George Mandis (georgemandis.com, snaptortoise.com)
8 | * Version: 1.4.2 (9/2/2013)
9 | * Licensed under the MIT License (http://opensource.org/licenses/MIT)
10 | * Tested in: Safari 4+, Google Chrome 4+, Firefox 3+, IE7+, Mobile Safari 2.2.1 and Dolphin Browser
11 | */
12 |
13 | var Konami = function (callback) {
14 | var konami = {
15 | addEvent: function (obj, type, fn, ref_obj) {
16 | if (obj.addEventListener)
17 | obj.addEventListener(type, fn, false);
18 | else if (obj.attachEvent) {
19 | // IE
20 | obj["e" + type + fn] = fn;
21 | obj[type + fn] = function () {
22 | obj["e" + type + fn](window.event, ref_obj);
23 | }
24 | obj.attachEvent("on" + type, obj[type + fn]);
25 | }
26 | },
27 | input: "",
28 | pattern: "38384040373937396665",
29 | load: function (link) {
30 | this.addEvent(document, "keydown", function (e, ref_obj) {
31 | if (ref_obj) konami = ref_obj; // IE
32 | konami.input += e ? e.keyCode : event.keyCode;
33 | if (konami.input.length > konami.pattern.length)
34 | konami.input = konami.input.substr((konami.input.length - konami.pattern.length));
35 | if (konami.input == konami.pattern) {
36 | konami.code(link);
37 | konami.input = "";
38 | e.preventDefault();
39 | return false;
40 | }
41 | }, this);
42 | this.iphone.load(link);
43 | },
44 | code: function (link) {
45 | window.location = link
46 | },
47 | iphone: {
48 | start_x: 0,
49 | start_y: 0,
50 | stop_x: 0,
51 | stop_y: 0,
52 | tap: false,
53 | capture: false,
54 | orig_keys: "",
55 | keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"],
56 | code: function (link) {
57 | konami.code(link);
58 | },
59 | load: function (link) {
60 | this.orig_keys = this.keys;
61 | konami.addEvent(document, "touchmove", function (e) {
62 | if (e.touches.length == 1 && konami.iphone.capture == true) {
63 | var touch = e.touches[0];
64 | konami.iphone.stop_x = touch.pageX;
65 | konami.iphone.stop_y = touch.pageY;
66 | konami.iphone.tap = false;
67 | konami.iphone.capture = false;
68 | konami.iphone.check_direction();
69 | }
70 | });
71 | konami.addEvent(document, "touchend", function (evt) {
72 | if (konami.iphone.tap == true) konami.iphone.check_direction(link);
73 | }, false);
74 | konami.addEvent(document, "touchstart", function (evt) {
75 | konami.iphone.start_x = evt.changedTouches[0].pageX;
76 | konami.iphone.start_y = evt.changedTouches[0].pageY;
77 | konami.iphone.tap = true;
78 | konami.iphone.capture = true;
79 | });
80 | },
81 | check_direction: function (link) {
82 | x_magnitude = Math.abs(this.start_x - this.stop_x);
83 | y_magnitude = Math.abs(this.start_y - this.stop_y);
84 | x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT";
85 | y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP";
86 | result = (x_magnitude > y_magnitude) ? x : y;
87 | result = (this.tap == true) ? "TAP" : result;
88 |
89 | if (result == this.keys[0]) this.keys = this.keys.slice(1, this.keys.length);
90 | if (this.keys.length == 0) {
91 | this.keys = this.orig_keys;
92 | this.code(link);
93 | }
94 | }
95 | }
96 | }
97 |
98 | typeof callback === "string" && konami.load(callback);
99 | if (typeof callback === "function") {
100 | konami.code = callback;
101 | konami.load();
102 | }
103 |
104 | return konami;
105 | };
--------------------------------------------------------------------------------
/popup.js:
--------------------------------------------------------------------------------
1 | // localStorage.removeItem('registered');
2 |
3 | var unlocked = false;
4 | var unlock = function() {
5 | unlocked = true;
6 | window.csvButton.className = window.csvButton.className.replace(
7 | "caution",
8 | "action"
9 | );
10 | document.getElementById("thankyou").style.display = "block";
11 | document.getElementById("buy").style.display = "none";
12 | };
13 |
14 | getLicense(function(license, error) {
15 | console.log("got license: ");
16 | if (!error && license && license.result && license.accessLevel === "FULL") {
17 | unlock();
18 | }
19 | });
20 |
21 | var easter_egg = new Konami();
22 | easter_egg.code = function() {
23 | if (!unlocked) {
24 | unlock();
25 | } else {
26 | whoa();
27 | }
28 | };
29 | easter_egg.load();
30 |
31 | var append = function(text) {
32 | data.appendChild(document.createTextNode(text));
33 | };
34 |
35 | const downloadFile = ({ data, filename }) => {
36 | const blob = new Blob([data], {
37 | type: "application/octet-binary"
38 | });
39 | const url = URL.createObjectURL(blob);
40 |
41 | chrome.downloads.download({ url, filename });
42 | // const pom = document.createElement("a");
43 | // pom.setAttribute("href", url);
44 | // pom.setAttribute("download", filename);
45 | // pom.click();
46 | };
47 |
48 | var download = function(format) {
49 | if (format == "csv" && !unlocked) {
50 | // not registered
51 | // show link to purchase
52 | chrome.tabs.create({
53 | url:
54 | "https://chrome.google.com/webstore/detail/export-history/hcohnnbbiggngobheobhdipbgmcbelhh"
55 | });
56 | return;
57 | }
58 |
59 | document.getElementById("content").innerText = "preparing file...";
60 |
61 | chrome.history.search(
62 | {
63 | text: "",
64 | // 'maxResults': 100,
65 | maxResults: 1000000,
66 | startTime: 0
67 | },
68 | function(res) {
69 | window.res = res;
70 |
71 | var text, filename;
72 |
73 | // put the data in a hidden div so chrome doesn't crash
74 | if (format === "csv") {
75 | filename = "history.csv";
76 |
77 | // header row
78 | var keys = Object.keys(res[0]);
79 | append("formattedLastVisitTime," + keys.join(","));
80 |
81 | var row, time, value;
82 | for (var i = 0; i < res.length; i++) {
83 | row = "";
84 |
85 | // convert time for excel
86 | time = new Date(res[i]["lastVisitTime"]);
87 | formatted = time
88 | .toISOString()
89 | .replace("T", " ")
90 | .replace(/\.\d+Z/, "");
91 | row += formatted + ",";
92 |
93 | for (var j = 0; j < keys.length; j++) {
94 | value = res[i][keys[j]].toString();
95 | value = value.replace(/"/g, '""');
96 | if (value.search(/("|,|\n)/g) >= 0) value = '"' + value + '"';
97 | row += value;
98 | if (j !== keys.length - 1) row += ",";
99 | }
100 | append("\n" + row);
101 | }
102 | } else {
103 | filename = "history.json";
104 |
105 | append("[");
106 | for (var i = 0; i < res.length; i++) {
107 | text = JSON.stringify(res[i]);
108 | if (i !== res.length - 1) text = text + ",";
109 | append(text);
110 | }
111 | append("]");
112 | }
113 |
114 | const isoDate = new Date().toISOString().substr(0, 10);
115 |
116 | downloadFile({
117 | filename: isoDate + " " + filename,
118 | data: data.innerText
119 | });
120 |
121 | // window.close();
122 | }
123 | );
124 | };
125 |
126 | document.addEventListener("DOMContentLoaded", function() {
127 | window.data = document.getElementById("data");
128 | window.jsonButton = document.getElementById("json");
129 | window.csvButton = document.getElementById("csv");
130 |
131 | jsonButton.onclick = function() {
132 | download("json");
133 | };
134 |
135 | csvButton.onclick = function() {
136 | download("csv");
137 | };
138 |
139 | // document.getElementById('titlex').onclick = register;
140 |
141 | // if(localStorage['registered']) register();
142 | });
143 |
--------------------------------------------------------------------------------
/buttons.css:
--------------------------------------------------------------------------------
1 | /*http://alexwolfe.github.io/Buttons/*/
2 | /* line 24, ../scss/partials/_buttons.scss */
3 | .button {
4 | -webkit-box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 1px 2px rgba(0, 0, 0, 0.15);
5 | -moz-box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 1px 2px rgba(0, 0, 0, 0.15);
6 | box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.5), 0px 1px 2px rgba(0, 0, 0, 0.15);
7 | background-color: #eeeeee;
8 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fbfbfb), color-stop(100%, #e1e1e1));
9 | background: -webkit-linear-gradient(top, #fbfbfb, #e1e1e1);
10 | background: -moz-linear-gradient(top, #fbfbfb, #e1e1e1);
11 | background: -o-linear-gradient(top, #fbfbfb, #e1e1e1);
12 | background: linear-gradient(top, #fbfbfb, #e1e1e1);
13 | display: -moz-inline-stack;
14 | display: inline-block;
15 | vertical-align: middle;
16 | *vertical-align: auto;
17 | zoom: 1;
18 | *display: inline;
19 | border: 1px solid #d4d4d4;
20 | height: 32px;
21 | line-height: 32px;
22 | padding: 0px 25.6px;
23 | font-weight: 300;
24 | font-size: 14px;
25 | font-family: "Helvetica Neue Light", "Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", sans-serif;
26 | color: #666666;
27 | text-shadow: 0 1px 1px white;
28 | margin: 0;
29 | text-decoration: none;
30 | text-align: center; }
31 | /* line 42, ../scss/partials/_buttons.scss */
32 | .button:hover {
33 | background-color: #eeeeee;
34 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dcdcdc));
35 | background: -webkit-linear-gradient(top, #ffffff, #dcdcdc);
36 | background: -moz-linear-gradient(top, #ffffff, #dcdcdc);
37 | background: -o-linear-gradient(top, #ffffff, #dcdcdc);
38 | background: linear-gradient(top, #ffffff, #dcdcdc); }
39 | /* line 46, ../scss/partials/_buttons.scss */
40 | .button:active {
41 | -webkit-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3), 0px 1px 0px white;
42 | -moz-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3), 0px 1px 0px white;
43 | box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.3), 0px 1px 0px white;
44 | text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4);
45 | background: #eeeeee;
46 | color: #bbbbbb; }
47 | /* line 52, ../scss/partials/_buttons.scss */
48 | .button:focus {
49 | outline: none; }
50 |
51 | /* line 58, ../scss/partials/_buttons.scss */
52 | input.button, button.button {
53 | height: 34px;
54 | cursor: pointer;
55 | -webkit-appearance: none; }
56 |
57 | /* line 65, ../scss/partials/_buttons.scss */
58 | .button-block {
59 | display: block; }
60 |
61 | /* line 74, ../scss/partials/_buttons.scss */
62 | .button.disabled,
63 | .button.disabled:hover,
64 | .button.disabled:active,
65 | input.button:disabled,
66 | button.button:disabled {
67 | -webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1);
68 | -moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1);
69 | box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1);
70 | filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
71 | opacity: 0.8;
72 | background: #EEE;
73 | border: 1px solid #DDD;
74 | text-shadow: 0 1px 1px white;
75 | color: #CCC;
76 | cursor: default;
77 | -webkit-appearance: none; }
78 |
79 | /* line 86, ../scss/partials/_buttons.scss */
80 | .button-wrap {
81 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e3e3e3), color-stop(100%, #f2f2f2));
82 | background: -webkit-linear-gradient(top, #e3e3e3, #f2f2f2);
83 | background: -moz-linear-gradient(top, #e3e3e3, #f2f2f2);
84 | background: -o-linear-gradient(top, #e3e3e3, #f2f2f2);
85 | background: linear-gradient(top, #e3e3e3, #f2f2f2);
86 | -webkit-border-radius: 200px;
87 | -moz-border-radius: 200px;
88 | -ms-border-radius: 200px;
89 | -o-border-radius: 200px;
90 | border-radius: 200px;
91 | -webkit-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.04);
92 | -moz-box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.04);
93 | box-shadow: inset 0px 1px 3px rgba(0, 0, 0, 0.04);
94 | padding: 10px;
95 | display: inline-block; }
96 |
97 | /* line 96, ../scss/partials/_buttons.scss */
98 | .button-flat {
99 | -webkit-box-shadow: none;
100 | -moz-box-shadow: none;
101 | box-shadow: none;
102 | -webkit-transition-property: background;
103 | -moz-transition-property: background;
104 | -o-transition-property: background;
105 | transition-property: background;
106 | -webkit-transition-duration: 0.3s;
107 | -moz-transition-duration: 0.3s;
108 | -o-transition-duration: 0.3s;
109 | transition-duration: 0.3s;
110 | background: #eeeeee;
111 | border: none;
112 | text-shadow: none; }
113 | /* line 105, ../scss/partials/_buttons.scss */
114 | .button-flat:hover {
115 | background: #fbfbfb; }
116 | /* line 108, ../scss/partials/_buttons.scss */
117 | .button-flat:active {
118 | -webkit-transition-duration: 0s;
119 | -moz-transition-duration: 0s;
120 | -o-transition-duration: 0s;
121 | transition-duration: 0s;
122 | background: #eeeeee;
123 | color: #bbbbbb; }
124 | /* line 113, ../scss/partials/_buttons.scss */
125 | .button-flat.disabled {
126 | -webkit-box-shadow: none;
127 | -moz-box-shadow: none;
128 | box-shadow: none;
129 | -webkit-appearance: none; }
130 |
131 | /* line 123, ../scss/partials/_buttons.scss */
132 | .button-border {
133 | -webkit-box-shadow: none;
134 | -moz-box-shadow: none;
135 | box-shadow: none;
136 | -webkit-transition-property: all;
137 | -moz-transition-property: all;
138 | -o-transition-property: all;
139 | transition-property: all;
140 | -webkit-transition-duration: 0.3s;
141 | -moz-transition-duration: 0.3s;
142 | -o-transition-duration: 0.3s;
143 | transition-duration: 0.3s;
144 | color: #666666;
145 | border: 2px solid #666666;
146 | background: none;
147 | text-shadow: none; }
148 | /* line 132, ../scss/partials/_buttons.scss */
149 | .button-border:hover {
150 | background: none;
151 | color: gray;
152 | border: 2px solid gray; }
153 | /* line 137, ../scss/partials/_buttons.scss */
154 | .button-border:active {
155 | -webkit-transition-duration: 0s;
156 | -moz-transition-duration: 0s;
157 | -o-transition-duration: 0s;
158 | transition-duration: 0s;
159 | background: none;
160 | color: #4d4d4d;
161 | border: 2px solid #4d4d4d; }
162 | /* line 143, ../scss/partials/_buttons.scss */
163 | .button-border.disabled {
164 | -webkit-box-shadow: none;
165 | -moz-box-shadow: none;
166 | box-shadow: none;
167 | -webkit-appearance: none; }
168 |
169 | /* line 226, ../scss/partials/_buttons.scss */
170 | .button-primary {
171 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #00b5e5), color-stop(100%, #008db2));
172 | background: -webkit-linear-gradient(top, #00b5e5, #008db2);
173 | background: -moz-linear-gradient(top, #00b5e5, #008db2);
174 | background: -o-linear-gradient(top, #00b5e5, #008db2);
175 | background: linear-gradient(top, #00b5e5, #008db2);
176 | background-color: #00a1cb;
177 | border-color: #007998;
178 | color: white;
179 | text-shadow: 0 -1px 1px rgba(0, 40, 50, 0.35); }
180 | /* line 233, ../scss/partials/_buttons.scss */
181 | .button-primary:hover {
182 | background-color: #00a1cb;
183 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #00c9fe), color-stop(100%, #008db2));
184 | background: -webkit-linear-gradient(top, #00c9fe, #008db2);
185 | background: -moz-linear-gradient(top, #00c9fe, #008db2);
186 | background: -o-linear-gradient(top, #00c9fe, #008db2);
187 | background: linear-gradient(top, #00c9fe, #008db2); }
188 | /* line 237, ../scss/partials/_buttons.scss */
189 | .button-primary:active {
190 | background: #1495b7;
191 | color: #005065; }
192 |
193 | /* line 321, ../scss/partials/_buttons.scss */
194 | .button-flat-primary {
195 | -webkit-box-shadow: none;
196 | -moz-box-shadow: none;
197 | box-shadow: none;
198 | -webkit-transition-property: background;
199 | -moz-transition-property: background;
200 | -o-transition-property: background;
201 | transition-property: background;
202 | -webkit-transition-duration: 0.3s;
203 | -moz-transition-duration: 0.3s;
204 | -o-transition-duration: 0.3s;
205 | transition-duration: 0.3s;
206 | background: #00a1cb;
207 | color: white;
208 | text-shadow: none;
209 | border: none; }
210 | /* line 330, ../scss/partials/_buttons.scss */
211 | .button-flat-primary:hover {
212 | background: #00b5e5; }
213 | /* line 333, ../scss/partials/_buttons.scss */
214 | .button-flat-primary:active {
215 | -webkit-transition-duration: 0s;
216 | -moz-transition-duration: 0s;
217 | -o-transition-duration: 0s;
218 | transition-duration: 0s;
219 | background: #1495b7;
220 | color: #00647f; }
221 | /* line 338, ../scss/partials/_buttons.scss */
222 | .button-flat-primary.disabled {
223 | -webkit-box-shadow: none;
224 | -moz-box-shadow: none;
225 | box-shadow: none;
226 | -webkit-appearance: none; }
227 |
228 | /* line 226, ../scss/partials/_buttons.scss */
229 | .button-action {
230 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #8fcf00), color-stop(100%, #6b9c00));
231 | background: -webkit-linear-gradient(top, #8fcf00, #6b9c00);
232 | background: -moz-linear-gradient(top, #8fcf00, #6b9c00);
233 | background: -o-linear-gradient(top, #8fcf00, #6b9c00);
234 | background: linear-gradient(top, #8fcf00, #6b9c00);
235 | background-color: #7db500;
236 | border-color: #5a8200;
237 | color: white;
238 | text-shadow: 0 -1px 1px rgba(19, 28, 0, 0.35); }
239 | /* line 233, ../scss/partials/_buttons.scss */
240 | .button-action:hover {
241 | background-color: #7db500;
242 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a0e800), color-stop(100%, #6b9c00));
243 | background: -webkit-linear-gradient(top, #a0e800, #6b9c00);
244 | background: -moz-linear-gradient(top, #a0e800, #6b9c00);
245 | background: -o-linear-gradient(top, #a0e800, #6b9c00);
246 | background: linear-gradient(top, #a0e800, #6b9c00); }
247 | /* line 237, ../scss/partials/_buttons.scss */
248 | .button-action:active {
249 | background: #76a312;
250 | color: #374f00; }
251 |
252 | /* line 321, ../scss/partials/_buttons.scss */
253 | .button-flat-action {
254 | -webkit-box-shadow: none;
255 | -moz-box-shadow: none;
256 | box-shadow: none;
257 | -webkit-transition-property: background;
258 | -moz-transition-property: background;
259 | -o-transition-property: background;
260 | transition-property: background;
261 | -webkit-transition-duration: 0.3s;
262 | -moz-transition-duration: 0.3s;
263 | -o-transition-duration: 0.3s;
264 | transition-duration: 0.3s;
265 | background: #7db500;
266 | color: white;
267 | text-shadow: none;
268 | border: none; }
269 | /* line 330, ../scss/partials/_buttons.scss */
270 | .button-flat-action:hover {
271 | background: #8fcf00; }
272 | /* line 333, ../scss/partials/_buttons.scss */
273 | .button-flat-action:active {
274 | -webkit-transition-duration: 0s;
275 | -moz-transition-duration: 0s;
276 | -o-transition-duration: 0s;
277 | transition-duration: 0s;
278 | background: #76a312;
279 | color: #486900; }
280 | /* line 338, ../scss/partials/_buttons.scss */
281 | .button-flat-action.disabled {
282 | -webkit-box-shadow: none;
283 | -moz-box-shadow: none;
284 | box-shadow: none;
285 | -webkit-appearance: none; }
286 |
287 | /* line 226, ../scss/partials/_buttons.scss */
288 | .button-highlight {
289 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fa9915), color-stop(100%, #d87e04));
290 | background: -webkit-linear-gradient(top, #fa9915, #d87e04);
291 | background: -moz-linear-gradient(top, #fa9915, #d87e04);
292 | background: -o-linear-gradient(top, #fa9915, #d87e04);
293 | background: linear-gradient(top, #fa9915, #d87e04);
294 | background-color: #f18d05;
295 | border-color: #bf7004;
296 | color: white;
297 | text-shadow: 0 -1px 1px rgba(91, 53, 2, 0.35); }
298 | /* line 233, ../scss/partials/_buttons.scss */
299 | .button-highlight:hover {
300 | background-color: #f18d05;
301 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fba42e), color-stop(100%, #d87e04));
302 | background: -webkit-linear-gradient(top, #fba42e, #d87e04);
303 | background: -moz-linear-gradient(top, #fba42e, #d87e04);
304 | background: -o-linear-gradient(top, #fba42e, #d87e04);
305 | background: linear-gradient(top, #fba42e, #d87e04); }
306 | /* line 237, ../scss/partials/_buttons.scss */
307 | .button-highlight:active {
308 | background: #d8891e;
309 | color: #8d5303; }
310 |
311 | /* line 321, ../scss/partials/_buttons.scss */
312 | .button-flat-highlight {
313 | -webkit-box-shadow: none;
314 | -moz-box-shadow: none;
315 | box-shadow: none;
316 | -webkit-transition-property: background;
317 | -moz-transition-property: background;
318 | -o-transition-property: background;
319 | transition-property: background;
320 | -webkit-transition-duration: 0.3s;
321 | -moz-transition-duration: 0.3s;
322 | -o-transition-duration: 0.3s;
323 | transition-duration: 0.3s;
324 | background: #f18d05;
325 | color: white;
326 | text-shadow: none;
327 | border: none; }
328 | /* line 330, ../scss/partials/_buttons.scss */
329 | .button-flat-highlight:hover {
330 | background: #fa9915; }
331 | /* line 333, ../scss/partials/_buttons.scss */
332 | .button-flat-highlight:active {
333 | -webkit-transition-duration: 0s;
334 | -moz-transition-duration: 0s;
335 | -o-transition-duration: 0s;
336 | transition-duration: 0s;
337 | background: #d8891e;
338 | color: #a66103; }
339 | /* line 338, ../scss/partials/_buttons.scss */
340 | .button-flat-highlight.disabled {
341 | -webkit-box-shadow: none;
342 | -moz-box-shadow: none;
343 | box-shadow: none;
344 | -webkit-appearance: none; }
345 |
346 | /* line 226, ../scss/partials/_buttons.scss */
347 | .button-caution {
348 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e8543f), color-stop(100%, #d9331a));
349 | background: -webkit-linear-gradient(top, #e8543f, #d9331a);
350 | background: -moz-linear-gradient(top, #e8543f, #d9331a);
351 | background: -o-linear-gradient(top, #e8543f, #d9331a);
352 | background: linear-gradient(top, #e8543f, #d9331a);
353 | background-color: #e54028;
354 | border-color: #c22d18;
355 | color: white;
356 | text-shadow: 0 -1px 1px rgba(103, 24, 13, 0.35); }
357 | /* line 233, ../scss/partials/_buttons.scss */
358 | .button-caution:hover {
359 | background-color: #e54028;
360 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eb6855), color-stop(100%, #d9331a));
361 | background: -webkit-linear-gradient(top, #eb6855, #d9331a);
362 | background: -moz-linear-gradient(top, #eb6855, #d9331a);
363 | background: -o-linear-gradient(top, #eb6855, #d9331a);
364 | background: linear-gradient(top, #eb6855, #d9331a); }
365 | /* line 237, ../scss/partials/_buttons.scss */
366 | .button-caution:active {
367 | background: #cd5240;
368 | color: #952312; }
369 |
370 | /* line 321, ../scss/partials/_buttons.scss */
371 | .button-flat-caution {
372 | -webkit-box-shadow: none;
373 | -moz-box-shadow: none;
374 | box-shadow: none;
375 | -webkit-transition-property: background;
376 | -moz-transition-property: background;
377 | -o-transition-property: background;
378 | transition-property: background;
379 | -webkit-transition-duration: 0.3s;
380 | -moz-transition-duration: 0.3s;
381 | -o-transition-duration: 0.3s;
382 | transition-duration: 0.3s;
383 | background: #e54028;
384 | color: white;
385 | text-shadow: none;
386 | border: none; }
387 | /* line 330, ../scss/partials/_buttons.scss */
388 | .button-flat-caution:hover {
389 | background: #e8543f; }
390 | /* line 333, ../scss/partials/_buttons.scss */
391 | .button-flat-caution:active {
392 | -webkit-transition-duration: 0s;
393 | -moz-transition-duration: 0s;
394 | -o-transition-duration: 0s;
395 | transition-duration: 0s;
396 | background: #cd5240;
397 | color: #ac2815; }
398 | /* line 338, ../scss/partials/_buttons.scss */
399 | .button-flat-caution.disabled {
400 | -webkit-box-shadow: none;
401 | -moz-box-shadow: none;
402 | box-shadow: none;
403 | -webkit-appearance: none; }
404 |
405 | /* line 226, ../scss/partials/_buttons.scss */
406 | .button-royal {
407 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #99389f), color-stop(100%, #752a79));
408 | background: -webkit-linear-gradient(top, #99389f, #752a79);
409 | background: -moz-linear-gradient(top, #99389f, #752a79);
410 | background: -o-linear-gradient(top, #99389f, #752a79);
411 | background: linear-gradient(top, #99389f, #752a79);
412 | background-color: #87318c;
413 | border-color: #632466;
414 | color: white;
415 | text-shadow: 0 -1px 1px rgba(26, 9, 27, 0.35); }
416 | /* line 233, ../scss/partials/_buttons.scss */
417 | .button-royal:hover {
418 | background-color: #87318c;
419 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ab3eb2), color-stop(100%, #752a79));
420 | background: -webkit-linear-gradient(top, #ab3eb2, #752a79);
421 | background: -moz-linear-gradient(top, #ab3eb2, #752a79);
422 | background: -o-linear-gradient(top, #ab3eb2, #752a79);
423 | background: linear-gradient(top, #ab3eb2, #752a79); }
424 | /* line 237, ../scss/partials/_buttons.scss */
425 | .button-royal:active {
426 | background: #764479;
427 | color: #3e1740; }
428 |
429 | /* line 321, ../scss/partials/_buttons.scss */
430 | .button-flat-royal {
431 | -webkit-box-shadow: none;
432 | -moz-box-shadow: none;
433 | box-shadow: none;
434 | -webkit-transition-property: background;
435 | -moz-transition-property: background;
436 | -o-transition-property: background;
437 | transition-property: background;
438 | -webkit-transition-duration: 0.3s;
439 | -moz-transition-duration: 0.3s;
440 | -o-transition-duration: 0.3s;
441 | transition-duration: 0.3s;
442 | background: #87318c;
443 | color: white;
444 | text-shadow: none;
445 | border: none; }
446 | /* line 330, ../scss/partials/_buttons.scss */
447 | .button-flat-royal:hover {
448 | background: #99389f; }
449 | /* line 333, ../scss/partials/_buttons.scss */
450 | .button-flat-royal:active {
451 | -webkit-transition-duration: 0s;
452 | -moz-transition-duration: 0s;
453 | -o-transition-duration: 0s;
454 | transition-duration: 0s;
455 | background: #764479;
456 | color: #501d53; }
457 | /* line 338, ../scss/partials/_buttons.scss */
458 | .button-flat-royal.disabled {
459 | -webkit-box-shadow: none;
460 | -moz-box-shadow: none;
461 | box-shadow: none;
462 | -webkit-appearance: none; }
463 |
464 | /* line 358, ../scss/partials/_buttons.scss */
465 | .button-jumbo {
466 | font-size: 24px;
467 | height: 51.2px;
468 | line-height: 51.2px;
469 | padding: 0px 40.96px; }
470 |
471 | /* line 358, ../scss/partials/_buttons.scss */
472 | .button-large {
473 | font-size: 19px;
474 | height: 38.4px;
475 | line-height: 38.4px;
476 | padding: 0px 30.72px; }
477 |
478 | /* line 389, ../scss/partials/_buttons.scss */
479 | input.button-large, button.button-large {
480 | height: 40.4px; }
481 |
482 | /* line 358, ../scss/partials/_buttons.scss */
483 | .button-small {
484 | font-size: 15px;
485 | height: 25.6px;
486 | line-height: 25.6px;
487 | padding: 0px 20.48px; }
488 |
489 | /* line 389, ../scss/partials/_buttons.scss */
490 | input.button-small, button.button-small {
491 | height: 27.6px; }
492 |
493 | /* line 358, ../scss/partials/_buttons.scss */
494 | .button-tiny {
495 | font-size: 12px;
496 | height: 22.4px;
497 | line-height: 22.4px;
498 | padding: 0px 17.92px; }
499 |
500 | /* line 389, ../scss/partials/_buttons.scss */
501 | input.button-tiny, button.button-tiny {
502 | height: 24.4px; }
503 |
--------------------------------------------------------------------------------