├── Procfile
├── .gitignore
├── public
├── img
│ ├── wreath.gif
│ ├── envelope.png
│ ├── favicon.ico
│ ├── heart_thumb.png
│ ├── love_thumb.png
│ ├── mathogram.png
│ ├── sierpinski.png
│ ├── dancing_thumb.png
│ ├── flower_thumb.png
│ └── heartbeat_thumb.png
├── js
│ ├── view.js
│ ├── about.js
│ ├── compose.js
│ ├── graph-templates.js
│ └── jquery-3.3.1.min.js
└── css
│ ├── mathogram-icons.css
│ └── mathogram.css
├── views
├── view.pug
├── layout.pug
├── about.pug
└── compose.pug
├── package.json
├── app.js
├── README.md
├── LICENSE
└── math_quotes.js
/Procfile:
--------------------------------------------------------------------------------
1 | web: node app.js
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/*
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/public/img/wreath.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/wreath.gif
--------------------------------------------------------------------------------
/public/img/envelope.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/envelope.png
--------------------------------------------------------------------------------
/public/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/favicon.ico
--------------------------------------------------------------------------------
/public/img/heart_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/heart_thumb.png
--------------------------------------------------------------------------------
/public/img/love_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/love_thumb.png
--------------------------------------------------------------------------------
/public/img/mathogram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/mathogram.png
--------------------------------------------------------------------------------
/public/img/sierpinski.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/sierpinski.png
--------------------------------------------------------------------------------
/public/img/dancing_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/dancing_thumb.png
--------------------------------------------------------------------------------
/public/img/flower_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/flower_thumb.png
--------------------------------------------------------------------------------
/public/img/heartbeat_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/desmosinc/mathograms/HEAD/public/img/heartbeat_thumb.png
--------------------------------------------------------------------------------
/views/view.pug:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block body
4 | body.is-loading
5 | .loading Loading...
6 | .compose-view
7 | .header
8 | img.branding(src='/img/mathogram.png')
9 | a.action-share.button-pink(href='/') Make your own Math-o-gram
10 | i.dcg-icon-chevron-right
11 | .messages
12 | textarea(disabled='disabled').message
13 | input(type='text', disabled='disabled').from
14 | .graph-paper
15 | .about
16 | p Made with love by Desmos. Learn more.
17 |
18 | block scripts
19 | script(src='/js/view.js')
20 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mathogram",
3 | "version": "0.0.1",
4 | "description": "The world's lightest weight Math-o-gram generator, from Desmos.com",
5 | "main": "app.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git://github.com/desmosinc/mathograms.git"
12 | },
13 | "keywords": [
14 | "I.",
15 | "Heart.",
16 | "Math."
17 | ],
18 | "author": "Desmos",
19 | "license": "MIT",
20 | "bugs": {
21 | "url": "https://github.com/desmosinc/mathograms/issues"
22 | },
23 | "homepage": "https://github.com/desmosinc/mathograms",
24 | "dependencies": {
25 | "body-parser": "^1.18.3",
26 | "express": "^4.16.4",
27 | "pug": "^2.0.3"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | // set variables for environment
2 | var express = require('express');
3 | var app = express();
4 | var path = require('path');
5 |
6 | var quotes = require('./math_quotes');
7 | var bodyParser = require('body-parser')
8 |
9 | app.set('views', path.join(__dirname, 'views'));
10 | app.set('view engine', 'pug');
11 | app.use(express.static('public'));
12 |
13 | app.get('/', function(req, res) {
14 | res.render('compose', {host: req.get('host')});
15 | });
16 |
17 | app.get('/view', function(req, res) {
18 | res.render('view', {host: req.get('host')});
19 | });
20 |
21 | app.get('/about', function(req, res) {
22 | res.render('about', {host: req.get('host')});
23 | });
24 |
25 | // Set server port
26 | var port = Number(process.env.PORT || 5000);
27 | app.listen(port, function() {
28 | console.log('server is listening on ' + port);
29 | });
30 |
--------------------------------------------------------------------------------
/views/layout.pug:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | meta(property="og:title", content="For my math lovers: a Desmos Math-o-gram!")
5 | meta(property="og:site_name", content="Desmos Mathogram")
6 | meta(property="og:image", content="http://#{host}/img/envelope.png")
7 | link(rel="image_src", href="http://#{host}/img/heart_thumb.png")
8 | link(rel='stylesheet' type='text/css' href='/css/mathogram.css')
9 | link(rel='stylesheet' type='text/css' href='/css/mathogram-icons.css')
10 |
11 | link(rel="icon", type="image/x-icon", href="/img/favicon.ico")
12 | link(rel="shortcut icon", href="/img/favicon.ico", type="image/x-icon")
13 |
14 | link(href="//fonts.googleapis.com/css?family=Cookie" rel="stylesheet" type="text/css")
15 | title Math-o-grams by Desmos
16 |
17 | block body
18 |
19 | script(src='//www.desmos.com/api/v1.4/calculator.js?apiKey=8555055993b32c41a6218fe2d2a411e5')
20 | script(src='/js/jquery-3.3.1.min.js')
21 | script(src='/js/graph-templates.js')
22 |
23 | block scripts
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Math-o-grams by Desmos
2 | ======================
3 |
4 | This is a little project by the folks at desmos.com to:
5 | * show the world how easy it is to use the Desmos API
6 | * let the math nerds and math nerd lovers send adorable valentine's day cards
7 |
8 | Try it out live at http://www.mathogram.com
9 |
10 | Quick Start Guide
11 | -------
12 |
13 | 1. Install node (visit www.nodejs.org)
14 | 2. Clone this repo and navigate to the root of it
15 | 3. Install dependencies by typing: `npm install`
16 | 4. Run the app by typing: `node app.js`
17 | 5. Visit http://localhost:5000 from your browser
18 |
19 | Deploying
20 | ---------
21 |
22 | To deploy, you'll need to get an account set up with heroku and follow their instructions here: https://devcenter.heroku.com/articles/getting-started-with-nodejs
23 |
24 | Making Your own Desmos Apps
25 | ---------
26 | Head over to https://www.desmos.com/api to see our API docs. If you'd like your own key (required for any public-facing app), send us an e-mail at partnerships@desmos.com.
27 |
28 | We can't wait to see what you build with the Desmos API!
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2019 desmosinc
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/views/about.pug:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block body
4 | body.is-loading
5 | .container
6 | .header
7 | img.branding(src='/img/mathogram.png')
8 | a.action-share.button-pink(href='/') Make your own Math-o-gram
9 | i.dcg-icon-chevron-right
10 | .learn-more
11 | h1 About Math-o-grams
12 | .graph
13 | .paragraphs
14 | p At Desmos, we love math, teachers, and technology, and we think Valentine's Day is the perfect time to share that love with the world. So here's a Math-o-gram from us to you.
15 | p While you're enjoying that warm, fuzzy feeling, look at how easy it is to embed that Desmos Math-o-gram into a plain webpage! We've been polishing and perfecting our API for years so that you can use all the features you love about Desmos anywhere on the web. (Try the movable point. Try it!)
16 | p If you want to use our technology, or help improve it, please head to Github where we've open-sourced the whole project. Shoutout to 0p3r4t0r for help getting us back up and running for 2019.
17 |
18 | div(style="clear:both")
19 |
20 | block scripts
21 | script(src='/js/about.js')
22 |
--------------------------------------------------------------------------------
/public/js/view.js:
--------------------------------------------------------------------------------
1 | ;
2 |
3 | $(function() {
4 |
5 | var parseUrl = function() {
6 | var queryParams = {};
7 | var queryString = window.location.search.substr(1);
8 | var params = queryString.split('&');
9 | for (var i = 0; i < params.length; i++){
10 | var index = params[i].indexOf('=');
11 | var key = decodeURIComponent(params[i].slice(0, index).replace(/\+/g, ' '));
12 | var value = decodeURIComponent(params[i].slice(index + 1).replace(/\+/g, ' '));
13 | queryParams[key] = value;
14 | }
15 | return queryParams
16 | };
17 | //all the information needed to render a math-o-gram is stored
18 | //in the URL, so read off of the URL
19 | var queryParams = parseUrl();
20 |
21 | //instantiate a desmos graph
22 | var graphPaper = $('.graph-paper')[0];
23 |
24 | var options = {
25 | keypad: false,
26 | border: false,
27 | settingsMenu: false,
28 | zoomButtons: false
29 | };
30 |
31 | var desmosGraph = Desmos.Calculator(graphPaper, options);
32 | var state = {};
33 | if (queryParams.graph) {
34 | state = graphTemplates[queryParams.graph];
35 | } else if (queryParams.state) {
36 | state = JSON.parse(queryParams.state);
37 | } else if (window.location.hash) {
38 | state = JSON.parse(decodeURIComponent(window.location.hash.substr(1)));
39 | }
40 | desmosGraph.setState(state);
41 |
42 | //write in the message. google url encoder is replacing spaces with pluses
43 | $('.message').val(queryParams.message);
44 | $('.from').val(queryParams.from);
45 | $('body').removeClass('is-loading');
46 | })
--------------------------------------------------------------------------------
/public/js/about.js:
--------------------------------------------------------------------------------
1 | ;$(function() {
2 | //find an element, instantiate a calculator, and setState.
3 | //easy-peasy.
4 | var graphPaper = $('.graph')[0];
5 | var desmosGraph = Desmos.Calculator(graphPaper, {expressions: false, zoomButtons: false, settingsMenu: false});
6 | var movableHeart = {"graph":{"viewport":{"xmin":-4,"ymin":-4,"xmax":4,"ymax":4},"showLabels":true,"degreeMode":false,"showGrid":true,"polarMode":false,"showAxes":true,"squareAxes":true,"labelXMode":"","labelYMode":""},"expressions":{"list":[{"id":1,"latex":"f\\left(x\\right)=\\sqrt{\\left|\\cos\\left(x-a\\right)-\\sin\\left(x-a\\right)\\right|}+\\sqrt{\\left|\\cos\\left(x-a\\right)+\\sin\\left(x-a\\right)\\right|}+b\\left\\{-\\frac{\\pi}{2}Learn more.
25 |
26 |
27 | .share-view
28 | .header
29 | img.branding(src='/img/mathogram.png')
30 |
31 | .main
32 | .share Share your Math-o-gram!
33 | img.envelope(src='/img/envelope.png')
34 | .action-create-another.button-pink
35 | i.dcg-icon-chevron-left
36 | | Create Another
37 |
38 | .share-form
39 | label
40 | p Share this link:
41 | input(type='url' class='share-link' contenteditable='false')
42 |
43 | .social-buttons
44 | a(target='_blank').action-tweet.btn.tweet-btn
45 | i.dcg-icon-twitter
46 | | Tweet
47 | a(target='_blank').action-fb-post.btn.fb-post-btn
48 | i.dcg-icon-facebook
49 | | Share
50 |
51 | .about
52 | p Made with love by Desmos. Learn more.
53 |
54 | block scripts
55 | script(src='/js/compose.js')
56 |
--------------------------------------------------------------------------------
/math_quotes.js:
--------------------------------------------------------------------------------
1 | //this file generates and returns a random inspirational math quote,
2 | //used when you share by e-mail
3 |
4 | var quotes = [
5 | '\"Pure mathematics is, in its way, the poetry of logical ideas.\" - Albert Einstein',
6 | '\"God used beautiful mathematics in creating the world.\" - Paul Dirac',
7 | '\"The true spirit of delight, the exaltation, the sense of being more than Man, which is the touchstone of the highest excellence, is to be found in mathematics as surely as poetry.\" - Bertrand Russell',
8 | '\"One of the most amazing things about mathematics is the people who do math aren\'t usually interested in application, because mathematics itself is truly a beautiful art form. It\'s structures and patterns, and that\'s what we love.\" - Danica McKellar',
9 | '\"Mathematics is, as it were, a sensuous logic, and relates to philosophy as do the arts, music, and plastic art to poetry.\" - Karl Wilhelm Friedrich Schlegel',
10 | '\"You want to know how to rhyme, then learn how to add. It\'s mathematics.\" - Mos Def',
11 | '\"Mathematics is the most beautiful and most powerful creation of the human spirit.\" - Stefan Banach',
12 | '\"Life is good for only two things, discovering mathematics and teaching mathematics.\" - Simeon Poisson',
13 | '\"There should be no such thing as boring mathematics.\" - Edsger Dijkstra',
14 | '\"Mathematics is the study of problems so simple that they have good solutions.\" - Whitfield Diffie',
15 | '\"The essence of mathematics lies in its freedom.\" - Georg Cantor',
16 | '\"Mathematics is a place where you can do things which you can\'t do in the real world.\" - Marcus du Sautoy',
17 | '\"Out of an infinity of designs a mathematician chooses one pattern for beauty\'s sake and pulls it down to earth.\" - Marston Morse',
18 | '\"Mathematics is the music of reason.\" - James Joseph Sylvester',
19 | '\"Beauty is the first test: there is no permanent place in the world for ugly mathematics.\" - Godfrey Harold Hardy',
20 | '\"The mathematician does not study pure mathematics because it is useful; he studies it because he delights in it and he delights in it because it is beautiful.\" - J.H. Poincare',
21 | '\"My work always tried to unite the true with the beautiful, but when I had to choose one or the other, I usually chose the beautiful.\" - Herman Weyl'
22 | ]
23 |
24 | var sample = function(){
25 | var index = Math.floor(Math.random()*this.quotes.length);
26 | return this.quotes[index];
27 | }
28 |
29 | module.exports = {quotes: quotes, sample: sample};
--------------------------------------------------------------------------------
/public/js/compose.js:
--------------------------------------------------------------------------------
1 | ;(function() {
2 | var lastSavedURL;
3 |
4 | //cache a bunch of selectors
5 | var $composeView = $('.compose-view');
6 | var $shareView = $('.share-view');
7 | var $shareLink = $('.share-link');
8 | var $twitterLink = $('.tweet-btn');
9 | var $facebookLink = $('.fb-post-btn');
10 | var $headerImages = $('.header .images');
11 | var $composeView = $('.compose-view');
12 | var $shareView = $('.share-view');
13 | var $shareLink = $('.share-link');
14 | var $composeFrom = $('.compose-view .from');
15 | var $composeMessage = $('.compose-view .message');
16 | var $body = $('body');
17 | var expressionKeys = Object.keys(graphTemplates);
18 |
19 | var graphName = '';
20 |
21 | //move on to step 2 (share)
22 | var showShare = function () {
23 | $composeView.hide();
24 | $shareView.show();
25 | $body.removeClass('is-loading');
26 | };
27 |
28 | //go back to step 1 (compose)
29 | var showCompose = function () {
30 | $shareView.hide();
31 | $composeView.show();
32 | desmosGraph.resize();
33 | };
34 |
35 | var getLongUrl = function () {
36 | var urlBase = window.location.origin + '/view';
37 | var message = encodeURIComponent($composeMessage.val());
38 | var from = encodeURIComponent($composeFrom.val());
39 | return urlBase.concat('?message=',message,'&from=',from,'&graph=',graphName);
40 | };
41 |
42 | //this is called once we have a short url from the google url-shortener
43 | var shareCallback = function(shareLink){
44 | $shareLink.val(shareLink);
45 | var tweetUrl = "https://twitter.com/intent/tweet?text="
46 | + encodeURIComponent("For my math lovers: a Desmos #mathogram! " + shareLink)
47 | + "&via=desmos";
48 | var fbUrl = 'http://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(shareLink);
49 | $twitterLink.attr('href', tweetUrl);
50 | $facebookLink.attr('href', fbUrl);
51 | lastSavedURL = shareLink;
52 | showShare();
53 | };
54 |
55 | //TODO: hook up a new link shortener!
56 | var share = function(){
57 | $body.addClass('is-loading');
58 | var longUrl = getLongUrl();
59 | shareCallback(longUrl);
60 | };
61 |
62 | //this is the code that interacts with the graphpaper
63 | var clickToSetGraph = function() {
64 | $('.button.selected').removeClass('selected');
65 | $(this).addClass('selected');
66 | selectGraph($(this).attr('name'));
67 | };
68 |
69 | var selectGraph = function(name){
70 | desmosGraph.setState(graphTemplates[name]);
71 | graphName = name;
72 | };
73 |
74 | //Finally: let's execute some code!
75 | //First, instantiate a Desmos Graph
76 | var graphPaper = $('.graph-paper')[0];
77 | var options = {
78 | keypad: false,
79 | border: false,
80 | settingsMenu: false,
81 | zoomButtons: false
82 | };
83 | var desmosGraph = Desmos.Calculator(graphPaper, options);
84 |
85 | //Hook up our listeners
86 | $('.action-share').on('click', share);
87 | $('.action-create-another').on('click', showCompose)
88 | $shareLink.on('click', function() {this.select();});
89 | $('.button').on('click', clickToSetGraph);
90 |
91 | //set the state of the graph
92 | selectGraph('sierpinski');
93 | $body.removeClass('is-loading');
94 | })()
95 |
--------------------------------------------------------------------------------
/public/css/mathogram-icons.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'mathogram';
3 | src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'),
4 | url(data:application/font-woff;charset=utf-8;base64,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) format('woff');
5 | font-weight: normal;
6 | font-style: normal;
7 | }
8 |
9 | [class^="dcg-icon-"], [class*=" dcg-icon-"] {
10 | font-family: 'mathogram';
11 | speak: none;
12 | font-style: normal;
13 | font-weight: normal;
14 | font-variant: normal;
15 | text-transform: none;
16 | line-height: 1;
17 |
18 | /* Better Font Rendering =========== */
19 | -webkit-font-smoothing: antialiased;
20 | -moz-osx-font-smoothing: grayscale;
21 | }
22 |
23 | .dcg-icon-twitter:before {
24 | content: "\e62f";
25 | }
26 | .dcg-icon-remove:before {
27 | content: "\e633";
28 | }
29 | .dcg-icon-facebook:before {
30 | content: "\e63b";
31 | }
32 | .dcg-icon-chevron-right:before {
33 | content: "\e63c";
34 | }
35 | .dcg-icon-chevron-left:before {
36 | content: "\e63d";
37 | }
38 |
--------------------------------------------------------------------------------
/public/css/mathogram.css:
--------------------------------------------------------------------------------
1 | * {
2 | -moz-box-sizing: border-box;
3 | box-sizing: border-box;
4 | }
5 |
6 | body{
7 | background-color: #474747;
8 | margin: 0;
9 | color: #fff;
10 | font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
11 | font-weight: 300;
12 | }
13 |
14 | .loading {
15 | display: none;
16 | }
17 |
18 | .is-loading .loading, .spinner {
19 | display: block;
20 | position: absolute;
21 | top: 50%;
22 | left: 50%;
23 | width: 200px;
24 | margin-left: -100px;
25 | text-align: center;
26 | font-size: 20px;
27 | }
28 |
29 | .spinner{
30 | margin-top: -97px;
31 | }
32 |
33 | .compose-view, .share-view {
34 | transition: opacity .3s;
35 | -webkit-transition: opacity .3s;
36 | -moz-transition: opacity .3s;
37 | -o-transition: opacity .3s;
38 | -ms-transition: opacity .3s;
39 | }
40 |
41 | .is-loading .compose-view, .is-loading .share-view {
42 | opacity: .1;
43 | pointer-events: none;
44 | }
45 |
46 | .header{
47 | position: absolute;
48 | top: 0;
49 | left: 0;
50 | right: 0;
51 | height: 80px;
52 | padding: 5px 10px;
53 | transform: translateZ(0);
54 | }
55 |
56 | .branding {
57 | height: 65px;
58 | float: left;
59 | margin: 10px 15px 0 5px;
60 | }
61 |
62 | .images {
63 | display: inline-block;
64 | margin-left: 50px;
65 | padding: 10px;
66 | }
67 |
68 | .images img {
69 | width: 60px;
70 | height: 60px;
71 | margin-right: 10px;
72 | border-radius: 5px;
73 | cursor: pointer;
74 | border: 2px solid #444;
75 | opacity: .7;
76 | }
77 |
78 | .top-message {
79 | position: absolute;
80 | top: 90px;
81 | left: 370px;
82 | background: red;
83 | padding: 20px;
84 | font-size: 40px;
85 | z-index: 30;
86 | }
87 |
88 | .header .images img:hover {
89 | border: 2px solid #888;
90 | opacity: 1;
91 | }
92 |
93 | .header .images img.selected {
94 | border: 2px solid #d68989;
95 | opacity: 1;
96 | }
97 |
98 | .button-pink {
99 | background: #d68989;
100 | padding: 8px 12px 10px;
101 | border-radius: 2px;
102 | color: #fff;
103 | cursor: pointer;
104 | text-decoration: none;
105 | }
106 |
107 | .action-create-another, .action-share {
108 | position: absolute;
109 | top: 27px;
110 | right: 27px;
111 | }
112 |
113 | .action-create-another i {
114 | margin-right: 5px;
115 | }
116 |
117 | .action-share i {
118 | margin-left: 3px;
119 | }
120 |
121 | .action-send {
122 | display: inline-block;
123 | margin: 4px 0;
124 | padding: 7px 10px 8px;
125 | font-size: 14px;
126 | }
127 |
128 | .button-pink:hover, .btn:hover {
129 | box-shadow: 0 0 8px rgba(0,0,0,.4);
130 | }
131 |
132 | .button-pink:active, .btn:active {
133 | box-shadow: inset 0 0 6px rgba(0,0,0,.4);
134 | }
135 |
136 | .button-pink i {
137 | font-size: 10px;
138 | }
139 |
140 | .graph-paper, .about-section {
141 | position: absolute;
142 | top: 90px;
143 | bottom: 38px;
144 | width: 900px;
145 | margin-left: -450px;
146 | left: 50%;
147 | border-radius: 5px;
148 | border: 2px solid #fff;
149 | box-shadow: 0 0 5px #000;
150 | }
151 | .about-section {
152 | background: white;
153 | padding: 20px;
154 | font-size: 20px;
155 | color: #222;
156 | }
157 |
158 | /* this is just a centered container that we use for positioning the textareas */
159 | .compose-view .messages {
160 | width: 900px;
161 | position: absolute;
162 | width: 0;
163 | left: 50%;
164 | top: 80px;
165 | bottom: 25px;
166 | }
167 |
168 | .compose-view ::-webkit-input-placeholder { /* WebKit browsers */
169 | color: #d68989;
170 | opacity: .5;
171 | }
172 | .compose-view :-moz-placeholder { /* Mozilla Firefox 4 to 18 */
173 | color: #d68989;
174 | opacity: .5;
175 | }
176 | .compose-view ::-moz-placeholder { /* Mozilla Firefox 19+ */
177 | color: #d68989;
178 | opacity: .5;
179 | }
180 | .compose-view :-ms-input-placeholder { /* Internet Explorer 10+ */
181 | color: #d68989;
182 | opacity: .5;
183 | }
184 |
185 | .compose-view .message, .compose-view .from {
186 | resize: none;
187 | color: #d68989;
188 | background: transparent;
189 | border: 0;
190 | position: absolute;
191 | z-index: 40;
192 | font-size: 32px;
193 | line-height: 1em;
194 | font-family: 'Cookie', "Brush Script MT", cursive, sans-serif;
195 | padding: 5px;
196 | }
197 |
198 | .compose-view .message {
199 | top: 20px;
200 | left: -80px;
201 | width: 520px;
202 | height: 120px;
203 | text-align: left;
204 | }
205 |
206 | .compose-view .about {
207 | position: absolute;
208 | bottom: -5px;
209 | width: 100%;
210 | text-align: center;
211 | }
212 |
213 | .compose-view .from {
214 | bottom: 20px;
215 | width: 520px;
216 | right: -442px;
217 | text-align: right;
218 | }
219 |
220 | .compose-view .message:focus, .compose-view .from:focus {
221 | box-shadow: 0 0 6px #999;
222 | border-radius: 3px;
223 | opacity: 1;
224 | outline: none;
225 | cursor: text;
226 | background: #fff;
227 | }
228 |
229 | .compose-view .message::selection{
230 | background: #cce;
231 | }
232 | .compose-view.message::-moz-selection{
233 | background: #cce;
234 | }
235 | .compose-view .from::selection{
236 | background: #cce;
237 | }
238 | .compose-view.from::-moz-selection{
239 | background: #cce;
240 | }
241 |
242 | .btn {
243 | border-radius: 2px;
244 | display: inline-block;
245 | padding: 7px 12px;
246 | margin: 4px;
247 | cursor: pointer;
248 | color: white;
249 | text-decoration: none;
250 | }
251 |
252 | .share-view {
253 | display: none;
254 | }
255 |
256 | .share-form {
257 | position: relative;
258 | }
259 |
260 | .share-form p {
261 | margin: 0;
262 | }
263 |
264 | .share-form input, .share-form textarea {
265 | display: block;
266 | width: 100%;
267 | border-radius: 2px;
268 | border: none;
269 | margin: 4px 0;
270 | padding: 8px;
271 | font-family: sans-serif;
272 | font-size: 14px;
273 | }
274 |
275 | .share-form input.name {
276 | width: 242px;
277 | margin-right: 5px;
278 | float: left;
279 | }
280 |
281 | .share-form textarea {
282 | height: 3em;
283 | position: relative;
284 | }
285 |
286 | .share-form .social-buttons {
287 | margin-top: 30px;
288 | }
289 |
290 | .dcg-icon-twitter, .dcg-icon-facebook {
291 | font-size: 13px;
292 | }
293 |
294 | .send-btn {
295 | background: #d28889;
296 | }
297 |
298 | .tweet-btn {
299 | background: #49AEEC;
300 | margin: 0 10px 0 0;
301 | }
302 |
303 | .fb-post-btn {
304 | background: #455697;
305 | margin: 0;
306 | }
307 |
308 | .fb-post-btn, .tweet-btn {
309 | width: 145px;
310 | text-align: center;
311 | }
312 |
313 | .fb-post-btn i {
314 | margin-right: 5px;
315 | }
316 |
317 | .tweet-btn i {
318 | margin-right: 8px;
319 | }
320 |
321 | .share-view .main {
322 | margin-left: auto;
323 | margin-right: auto;
324 | margin-top: 110px;
325 | width: 700px;
326 | }
327 |
328 | .share {
329 | font-size: 32px;
330 | text-align: center;
331 | margin-bottom: 50px;
332 | }
333 |
334 | .envelope {
335 | width: 330px;
336 | float: left;
337 | margin-top: -15px;
338 | }
339 |
340 | .share-form {
341 | margin-left: 400px;
342 | }
343 |
344 | .about {
345 | text-align: center;
346 | clear: both;
347 | margin-top: 250px;
348 | }
349 | .about a {
350 | color: #fff;
351 | }
352 |
353 | .learn-more{
354 | width: 850px;
355 | margin: 100px auto 0 auto;
356 | border-radius: 10px;
357 | position: relative;
358 | padding: 20px;
359 | background: white;
360 | color: #222;
361 | font-size: 18px;
362 | color: #666;
363 | }
364 | .container .header .title{
365 | font-size: 2em;
366 | text-align: center;
367 | position: absolute;
368 | width: 100%;
369 | top: 0;
370 | }
371 |
372 | .learn-more h1 {
373 | font-weight: normal;
374 | text-align: center;
375 | margin-top: 10px;
376 | }
377 |
378 | .learn-more a {
379 | color: #4781b9;
380 | text-decoration: none;
381 | }
382 | .learn-more a:hover {
383 | text-decoration: underline;
384 | }
385 |
386 | .learn-more .graph {
387 | float: left;
388 | width: 310px;
389 | height: 310px;
390 | border: 1px solid #ccc;
391 | margin: 0px 25px 0px 10px;
392 | }
393 |
394 | .learn-more p {
395 | margin: 10px;
396 | }
397 |
--------------------------------------------------------------------------------
/public/js/graph-templates.js:
--------------------------------------------------------------------------------
1 | window.graphTemplates = {
2 | heart: {"graph":{"viewport":{"xmin":-2.5,"ymin":-2.456,"xmax":2.5,"ymax":2.456},"showLabels":true,"degreeMode":false,"showGrid":true,"polarMode":false,"showAxes":true,"squareAxes":true,"labelXMode":"","labelYMode":""},"expressions":{"list":[{"id":"heart-158","text":"Do you <3 math?"},{"id":"heart-157","latex":"\\sqrt{\\cos x}\\cos\\left(250x\\right)-.7+1\\sqrt{\\left|x\\right|}","domain":{"min":0,"max":10},"hidden":false,"color":"#C0504D","style":"normal"}]}},
3 | heartbeat: {"version":1,"graph":{"showGrid":true,"showXAxis":true,"showYAxis":true,"xAxisStep":0,"yAxisStep":0,"xAxisMinorSubdivisions":0,"yAxisMinorSubdivisions":0,"xAxisArrowMode":"NONE","yAxisArrowMode":"NONE","xAxisLabel":"","yAxisLabel":"","xAxisNumbers":true,"yAxisNumbers":true,"polarMode":false,"polarNumbers":true,"degreeMode":false,"projectorMode":false,"squareAxes":true,"viewport":{"xmin":-21.26969626571867,"ymin":-31.037330244872408,"xmax":59.37867226263953,"ymax":22.781800147557874}},"expressions":{"list":[{"id":"heartbeat17","type":"folder","title":"Beating Heart","memberIds":{"heartbeat1":true,"heartbeat8":true,"heartbeat9":true,"heartbeat15":true,"heartbeat24":true},"hidden":false,"collapsed":true,"secret":false},{"id":"heartbeat24","type":"expression","latex":"a=b_{eat}","domain":{"min":0,"max":1},"hidden":false,"color":"#9BBB59","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat1","type":"expression","latex":"\\left(16\\left(\\sin t\\right)^3,\\ 13\\left(\\cos\\left(t\\right)\\right)-5\\cos\\left(2t\\right)-2\\cos\\left(3t\\right)-\\cos\\left(4t\\right)\\right)","domain":{"min":0,"max":10},"hidden":true,"color":"#C0504D","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat8","type":"expression","latex":"H\\left(x\\right)=16\\left(\\sin x\\right)^3","domain":{"min":0,"max":1},"hidden":true,"color":"#4F81BD","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat9","type":"expression","latex":"V\\left(x\\right)=13\\left(\\cos\\left(x\\right)\\right)-5\\cos\\left(2x\\right)-2\\cos\\left(3x\\right)-\\cos\\left(4x\\right)","domain":{"min":0,"max":1},"hidden":true,"color":"#9BBB59","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat15","type":"expression","latex":"\\left(\\left|f\\left(ar_{ate}\\right)\\right|H\\left(t\\right),\\ \\left|f\\left(ar_{ate}\\right)\\right|V\\left(t\\right)\\right)","domain":{"min":0,"max":6.28},"hidden":false,"color":"#C0504D","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat21","type":"folder","title":"Rotate Line","memberIds":{"heartbeat10":true,"heartbeat18":true},"hidden":false,"collapsed":true,"secret":false},{"id":"heartbeat18","type":"expression","latex":"\\left(H\\left(-a\\right)\\left|f\\left(r_{ate}a\\right)\\right|,\\ V\\left(a\\right)\\left|f\\left(r_{ate}a\\right)\\right|\\right)","domain":{"min":0,"max":1},"hidden":false,"color":"#C0504D","style":"point","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat10","type":"expression","latex":"\\left(tH\\left(-a\\right)\\left|f\\left(r_{ate}a\\right)\\right|,\\ tV\\left(a\\right)\\left|f\\left(r_{ate}a\\right)\\right|\\right)","domain":{"min":0,"max":1},"hidden":false,"color":"#8064A2","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat23","type":"folder","title":"Heart Sine","memberIds":{"heartbeat12":true,"heartbeat13":true,"heartbeat14":true,"heartbeat16":true},"hidden":false,"collapsed":true,"secret":false},{"id":"heartbeat12","type":"expression","latex":"y=V\\left(x\\right)\\left|f\\left(r_{ate}x\\right)\\right|\\left\\{16\\le x\\le a\\right\\}","domain":{"min":0,"max":1},"hidden":false,"color":"#4F81BD","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat13","type":"expression","latex":"\\left(\\left(1-t\\right)H\\left(-a\\right)\\left|f\\left(ar_{ate}\\right)\\right|+ta,\\ \\left|f\\left(ar_{ate}\\right)\\right|\\left(1-t\\right)V\\left(-a\\right)+tV\\left(a\\right)\\left|f\\left(ar_{ate}\\right)\\right|\\right)","domain":{"min":0,"max":1},"hidden":false,"color":"#C0504D","style":"dashed","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat14","type":"expression","latex":"\\left(a,\\ V\\left(a\\right)\\left|f\\left(ar_{ate}\\right)\\right|\\right)","domain":{"min":0,"max":1},"hidden":false,"color":"#4F81BD","style":"point","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat16","type":"expression","latex":"\\left(t,\\ V\\left(t\\right)\\left|\\sin t\\right|\\ \\right)","domain":{"min":0,"max":100},"hidden":true,"color":"#8064A2","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"heartbeat26","type":"text","text":"Change the beat and rate"},{"id":"heartbeat19","type":"expression","latex":"r_{ate}=.27","domain":{"min":0,"max":1},"hidden":true,"color":"#000000","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false,"sliderMin":0,"sliderMax":1,"sliderHardMin":true,"sliderHardMax":true,"sliderAnimationPeriod":4000,"sliderLoopMode":"LOOP_FORWARD_REVERSE","sliderPlayDirection":1,"sliderIsPlaying":false},{"id":"heartbeat11","type":"expression","latex":"b_{eat}=19.542","domain":{"min":0,"max":1},"hidden":true,"color":"#F79646","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false,"sliderMin":16,"sliderMax":50,"sliderHardMin":true,"sliderHardMax":true,"sliderAnimationPeriod":40000,"sliderLoopMode":"LOOP_FORWARD","sliderPlayDirection":1,"sliderIsPlaying":true},{"id":"heartbeat27","type":"expression","latex":"f\\left(x\\right)=.5+.2\\left|\\sin3x-.8\\right|","domain":{"min":0,"max":1},"hidden":true,"color":"#C0504D","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false}]}},
4 | flower: {"version":7,"graph":{"showGrid":false,"showXAxis":false,"showYAxis":false,"xAxisNumbers":false,"yAxisNumbers":false,"polarNumbers":false,"viewport":{"xmin":-8.7,"ymin":-10.871647490820072,"xmax":9.32,"ymax":7.6556474908200745}},"expressions":{"list":[{"type":"text","id":"flower160","text":"Drag 'a' to transform the rose."},{"type":"expression","id":"flower94","color":"#000000","latex":"a=0","parametricDomain":{"min":"0","max":"10"},"slider":{"hardMin":true,"hardMax":true,"animationPeriod":8000,"min":"0","max":"1"},"domain":{"min":"0","max":"10"}},{"type":"folder","id":"flower164","title":"Behind the scenes","collapsed":true},{"type":"text","id":"flower103","folderId":"flower164","text":"Polar function for the heart:"},{"type":"expression","id":"flower1","folderId":"flower164","color":"#c74440","latex":"f\\left(\\theta\\right)=2-2\\sin\\left(\\theta\\right)+\\frac{\\sin\\left(\\theta\\right)\\sqrt{\\left|\\cos\\left(\\theta\\right)\\right|}}{\\sin\\left(\\theta\\right)+1.4}","parametricDomain":{"min":"0","max":"10"},"hidden":true,"domain":{"min":"0","max":"10"}},{"type":"text","id":"flower106","folderId":"flower164","text":"Polar function for the red flower"},{"type":"expression","id":"flower92","folderId":"flower164","color":"#6042a6","latex":"g\\left(\\theta\\right)=\\sin\\left(1.2\\theta\\right)+1","parametricDomain":{"min":"0","max":"10"},"hidden":true,"domain":{"min":"0","max":"10"}},{"type":"text","id":"flower108","folderId":"flower164","text":"Shades the region. Goes from the flower to heart."},{"type":"expression","id":"flower93","folderId":"flower164","color":"#c74440","latex":"r\\le g\\left(\\theta\\right)\\left(1-a\\right)+f\\left(\\theta\\right)a","parametricDomain":{"min":"0","max":"10"},"domain":{"min":"0","max":"10"}},{"type":"text","id":"flower110","folderId":"flower164","text":"The following graph the stem and leaf."},{"type":"expression","id":"flower96","folderId":"flower164","color":"#388c46","latex":"y=\\left\\{0\\le x\\le\\sqrt{1.5}:-4x^2\\right\\}V\\left(a\\right)","parametricDomain":{"min":"0","max":"10"},"domain":{"min":"0","max":"10"}},{"type":"expression","id":"flower97","folderId":"flower164","color":"#c74440","latex":"L_1\\left(x\\right)=\\left\\{1\\le x\\le2:-4+2\\left(x-1\\right)^2\\right\\}","parametricDomain":{"min":"0","max":"10"},"hidden":true,"domain":{"min":"0","max":"10"}},{"type":"expression","id":"flower98","folderId":"flower164","color":"#6042a6","latex":"L_2\\left(x\\right)=\\left\\{1\\le x\\le2:-2-2\\left(x-2\\right)^2\\right\\}","parametricDomain":{"min":"0","max":"10"},"hidden":true,"domain":{"min":"0","max":"10"}},{"type":"expression","id":"flower99","folderId":"flower164","color":"#388c46","latex":"L_3\\left(x\\right)=\\left\\{1\\le x\\le2:-4+2\\left(x-1\\right)\\right\\}V\\left(a\\right)","parametricDomain":{"min":"0","max":"10"},"domain":{"min":"0","max":"10"}},{"type":"expression","id":"flower100","folderId":"flower164","color":"#388c46","latex":"L_1\\left(x\\right)\\le y\\le L_2\\left(x\\right)V\\left(a\\right)","parametricDomain":{"min":"0","max":"10"},"domain":{"min":"0","max":"10"}},{"type":"text","id":"flower112","folderId":"flower164","text":"Turns the stem and leaf off for a values greater than 0."},{"type":"expression","id":"flower101","folderId":"flower164","color":"#2d70b3","latex":"V\\left(x\\right)=\\left\\{x=0\\right\\}","parametricDomain":{"min":"0","max":"10"},"domain":{"min":"0","max":"10"}}]}},
5 | dancing: {"version":1,"graph":{"showGrid":true,"showXAxis":true,"showYAxis":true,"xAxisStep":0,"yAxisStep":0,"xAxisMinorSubdivisions":0,"yAxisMinorSubdivisions":0,"xAxisArrowMode":"NONE","yAxisArrowMode":"NONE","xAxisLabel":"","yAxisLabel":"","xAxisNumbers":true,"yAxisNumbers":true,"polarMode":false,"polarNumbers":true,"degreeMode":false,"projectorMode":false,"squareAxes":true,"viewport":{"xmin":-10,"ymin":-6.671306772908366,"xmax":10,"ymax":6.6753067729083675}},"expressions":{"list":[{"id":"dancing-1","type":"expression","latex":"a=-2.71","domain":{"min":0,"max":10},"hidden":false,"color":"#C0504D","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false,"sliderMin":-10,"sliderMax":10,"sliderHardMin":false,"sliderHardMax":false,"sliderAnimationPeriod":11428.57142857143,"sliderLoopMode":"LOOP_FORWARD_REVERSE","sliderPlayDirection":1,"sliderIsPlaying":true},{"id":"dancing-16","type":"expression","latex":"-\\sqrt{\\sin\\left(x-a\\right)}+\\sqrt{\\left|\\cos\\left(x\\right)\\right|}\\le y\\le\\sqrt{\\sin\\left(x-a\\right)}+\\sqrt{\\left|\\cos\\left(x\\right)\\right|}","domain":{"min":0,"max":10},"hidden":false,"color":"#4F81BD","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"dancing-17","type":"expression","latex":"-\\sqrt{\\sin\\left(x+a+\\pi\\right)}+\\sqrt{\\left|\\cos\\left(x+\\pi\\right)\\right|}+2\\le y\\le\\sqrt{\\sin\\left(x+a+\\pi\\right)}+\\sqrt{\\left|\\cos\\left(x+\\pi\\right)\\right|}+2","domain":{"min":0,"max":10},"hidden":false,"color":"#C0504D","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false},{"id":"dancing-18","type":"expression","latex":"-\\sqrt{\\sin\\left(x+a+\\pi\\right)}+\\sqrt{\\left|\\cos\\left(x+\\pi\\right)\\right|}-2\\le y\\le\\sqrt{\\sin\\left(x+a+\\pi\\right)}+\\sqrt{\\left|\\cos\\left(x+\\pi\\right)\\right|}-2","domain":{"min":0,"max":10},"hidden":false,"color":"#8064A2","style":"normal","residualVariable":"","regressionParameters":{},"isLogModeRegression":false}]}},
6 | sierpinski: {"graph":{"showGrid":true,"polarMode":false,"showXAxis":true,"showYAxis":true,"xAxisStep":0,"yAxisStep":0,"degreeMode":false,"xAxisArrows":"none","yAxisArrows":"none","xAxisLabel":"","yAxisLabel":"","xAxisNumbers":true,"yAxisNumbers":true,"polarNumbers":true,"projectorMode":false,"squareAxes":true,"viewport":{"xmin":-1.2,"ymin":-1.2935,"xmax":1.2,"ymax":1.641}},"expressions":{"list":[{"id":"sierpinski16","text":"Happy Sierpinski Valentine! Inspired by http://xkcd.com/543/"},{"id":"sierpinski14","latex":"N=5","domain":{"min":0,"max":1},"hidden":false,"color":"#4F81BD","style":"normal","residualVariable":"","regressionParameters":{},"sliderMin":0,"sliderMax":6,"sliderHardMin":true,"sliderHardMax":true,"sliderInterval":1,"sliderAnimationPeriod":10666.666666666666,"sliderPlayDirection":1,"sliderIsPlaying":false},{"id":"sierpinski170","type":"folder","title":"behind the scenes","memberIds":{"sierpinski1":true,"sierpinski5":true,"sierpinski6":true,"sierpinski10":true},"hidden":false,"collapsed":true},{"id":"sierpinski1","latex":"s\\left(i,k,o\\right)=\\sum_{n=1}^i\\frac{1}{2^n}\\left(\\sin\\left(\\frac{2\\pi}{3}\\floor\\left(3^nk\\right)+o\\right)\\right)","domain":{"min":0,"max":2},"hidden":false,"color":"#C0504D","style":"normal","residualVariable":"","regressionParameters":{}},{"id":"sierpinski5","latex":"X\\left(i,t\\right)=s\\left(i,t,0\\right)+\\frac{.24}{2^i}\\sin\\left(2\\pi\\cdot3^it\\right)","domain":{"min":0,"max":1},"hidden":false,"color":"#F79646","style":"normal","residualVariable":"","regressionParameters":{}},{"id":"sierpinski10","latex":"Y\\left(i,t\\right)=s\\left(i,t,\\frac{\\pi}{2}\\right)+\\frac{.2}{2^i}\\left(\\cos\\left(2\\pi\\cdot3^it\\right)+.9\\left|\\sin2\\pi\\cdot3^it\\right|-.3\\right)","domain":{"min":0,"max":1},"hidden":false,"color":"#8064A2","style":"normal","residualVariable":"","regressionParameters":{}},{"id":"sierpinski6","latex":"\\left(X\\left(\\left[0...N\\right],t\\right),Y\\left(\\left[0...N\\right],t\\right)\\right)","domain":{"min":0,"max":1},"hidden":false,"color":"#C0504D","style":"normal","residualVariable":"","regressionParameters":{}}]}},
7 | love: {"graph":{"viewport":{"xmin":-14.18,"ymin":-17.59,"xmax":14.41,"ymax":6.14},"showLabels":false,"degreeMode":false,"showGrid":true,"polarMode":false,"showAxes":false,"squareAxes":true,"labelXMode":"","labelYMode":""},"expressions":{"list":[{"id":"love22","text":"Drag a to join me and you"},{"id":"love2","latex":"a=-4","domain":{"min":0,"max":1},"hidden":true,"color":"#4F81BD","style":"normal","sliderMin":-4,"sliderMax":0,"sliderHardMin":true,"sliderHardMax":true,"sliderAnimationPeriod":8000,"sliderPlayDirection":1,"sliderIsPlaying":false},{"id":"love6","type":"folder","title":"me","memberIds":{"love1":true,"love3":true,"love4":true},"hidden":false,"collapsed":true},{"id":"love1","latex":"\\left(x-a+2\\right)^2+\\left(y+2\\right)^2=.4","domain":{"min":0,"max":1},"hidden":false,"color":"#9BBB59","style":"normal"},{"id":"love3","latex":"y=\\frac{1}{2}\\left|x-a+2\\right|-4\\left\\{a-4=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/