├── favicon.ico
├── img
├── digg.jpg
├── g+.jpg
├── mail.jpg
├── rss.jpg
├── flickr.jpg
├── forrst.jpg
├── skype.jpg
├── vimeo.jpg
├── zerply.jpg
├── Linkedin.jpg
├── dribbble.jpg
├── evernote.jpg
├── facebook.jpg
├── last-fm.jpg
├── pinterest.jpg
├── twitter.jpg
├── beta_ribbon.png
├── mail-backup.jpg
├── stumbleupon.jpg
├── twitter_alt.jpg
└── profile
│ ├── Max-Gluck.jpg
│ ├── Sagar-Savla.jpg
│ ├── Shiv-Patel.jpg
│ ├── Colin-Bookman.jpg
│ ├── Nakul-Dureja.jpg
│ ├── Chris-Forrence.jpg
│ ├── Joseph-Mattingly.jpg
│ └── Vivek-Srinivasan.jpg
├── js
├── clippy
│ ├── Agents
│ │ ├── F1
│ │ │ └── map.png
│ │ ├── Bonzi
│ │ │ └── map.png
│ │ ├── Clippy
│ │ │ ├── map.png
│ │ │ └── sounds-mp3.js
│ │ ├── Genie
│ │ │ └── map.png
│ │ ├── Genius
│ │ │ └── map.png
│ │ ├── Links
│ │ │ └── map.png
│ │ ├── Merlin
│ │ │ └── map.png
│ │ ├── Peedy
│ │ │ └── map.png
│ │ ├── Rocky
│ │ │ └── map.png
│ │ └── Rover
│ │ │ ├── map.png
│ │ │ └── sounds-mp3.js
│ ├── R-Wreck-vocal.mp3
│ ├── R-Wreck-vocal.ogg
│ ├── src
│ │ ├── images
│ │ │ ├── tip.png
│ │ │ └── border.png
│ │ ├── queue.js
│ │ ├── clippy.css
│ │ ├── load.js
│ │ ├── animator.js
│ │ ├── balloon.js
│ │ └── agent.js
│ ├── MIT-LICENSE.txt
│ ├── build
│ │ ├── clippy.css
│ │ └── clippy.min.js
│ ├── README.md
│ └── clippy.min.js-backup
├── bootswatch.js
├── application.js
├── searchResults.js
├── easter.js
└── dataTables
│ └── DT_bootstrap.js
├── css
├── dataTables
│ ├── images
│ │ ├── favicon.ico
│ │ ├── sort_asc.png
│ │ ├── sort_both.png
│ │ ├── sort_desc.png
│ │ ├── Sorting icons.psd
│ │ ├── back_disabled.png
│ │ ├── back_enabled.png
│ │ ├── forward_disabled.png
│ │ ├── forward_enabled.png
│ │ ├── back_enabled_hover.png
│ │ ├── sort_asc_disabled.png
│ │ ├── sort_desc_disabled.png
│ │ └── forward_enabled_hover.png
│ └── DT_bootstrap.css
├── author.css
├── critique.css
└── bootswatch.css
├── api.php
├── footer.php
├── README.md
├── config.php
├── elasticsearch
├── courseSchema.sh
└── profSchema.sh
├── search.php
├── admin
├── getOSCAR.php
└── import.php
├── datalayer.php
├── 404.html
├── index.html
├── course.php
├── prof.php
├── author
└── index.html
└── default
├── variables.less
└── bootstrap-responsive.min.css
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/favicon.ico
--------------------------------------------------------------------------------
/img/digg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/digg.jpg
--------------------------------------------------------------------------------
/img/g+.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/g+.jpg
--------------------------------------------------------------------------------
/img/mail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/mail.jpg
--------------------------------------------------------------------------------
/img/rss.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/rss.jpg
--------------------------------------------------------------------------------
/img/flickr.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/flickr.jpg
--------------------------------------------------------------------------------
/img/forrst.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/forrst.jpg
--------------------------------------------------------------------------------
/img/skype.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/skype.jpg
--------------------------------------------------------------------------------
/img/vimeo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/vimeo.jpg
--------------------------------------------------------------------------------
/img/zerply.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/zerply.jpg
--------------------------------------------------------------------------------
/img/Linkedin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/Linkedin.jpg
--------------------------------------------------------------------------------
/img/dribbble.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/dribbble.jpg
--------------------------------------------------------------------------------
/img/evernote.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/evernote.jpg
--------------------------------------------------------------------------------
/img/facebook.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/facebook.jpg
--------------------------------------------------------------------------------
/img/last-fm.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/last-fm.jpg
--------------------------------------------------------------------------------
/img/pinterest.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/pinterest.jpg
--------------------------------------------------------------------------------
/img/twitter.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/twitter.jpg
--------------------------------------------------------------------------------
/img/beta_ribbon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/beta_ribbon.png
--------------------------------------------------------------------------------
/img/mail-backup.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/mail-backup.jpg
--------------------------------------------------------------------------------
/img/stumbleupon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/stumbleupon.jpg
--------------------------------------------------------------------------------
/img/twitter_alt.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/twitter_alt.jpg
--------------------------------------------------------------------------------
/img/profile/Max-Gluck.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Max-Gluck.jpg
--------------------------------------------------------------------------------
/img/profile/Sagar-Savla.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Sagar-Savla.jpg
--------------------------------------------------------------------------------
/img/profile/Shiv-Patel.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Shiv-Patel.jpg
--------------------------------------------------------------------------------
/js/clippy/Agents/F1/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/F1/map.png
--------------------------------------------------------------------------------
/js/clippy/R-Wreck-vocal.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/R-Wreck-vocal.mp3
--------------------------------------------------------------------------------
/js/clippy/R-Wreck-vocal.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/R-Wreck-vocal.ogg
--------------------------------------------------------------------------------
/img/profile/Colin-Bookman.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Colin-Bookman.jpg
--------------------------------------------------------------------------------
/img/profile/Nakul-Dureja.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Nakul-Dureja.jpg
--------------------------------------------------------------------------------
/js/clippy/src/images/tip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/src/images/tip.png
--------------------------------------------------------------------------------
/img/profile/Chris-Forrence.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Chris-Forrence.jpg
--------------------------------------------------------------------------------
/img/profile/Joseph-Mattingly.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Joseph-Mattingly.jpg
--------------------------------------------------------------------------------
/img/profile/Vivek-Srinivasan.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Vivek-Srinivasan.jpg
--------------------------------------------------------------------------------
/js/clippy/Agents/Bonzi/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Bonzi/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Clippy/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Clippy/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Genie/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Genie/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Genius/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Genius/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Links/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Links/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Merlin/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Merlin/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Peedy/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Peedy/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Rocky/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Rocky/map.png
--------------------------------------------------------------------------------
/js/clippy/Agents/Rover/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Rover/map.png
--------------------------------------------------------------------------------
/js/clippy/src/images/border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/src/images/border.png
--------------------------------------------------------------------------------
/css/dataTables/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/favicon.ico
--------------------------------------------------------------------------------
/css/dataTables/images/sort_asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_asc.png
--------------------------------------------------------------------------------
/css/dataTables/images/sort_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_both.png
--------------------------------------------------------------------------------
/css/dataTables/images/sort_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_desc.png
--------------------------------------------------------------------------------
/css/dataTables/images/Sorting icons.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/Sorting icons.psd
--------------------------------------------------------------------------------
/css/dataTables/images/back_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/back_disabled.png
--------------------------------------------------------------------------------
/css/dataTables/images/back_enabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/back_enabled.png
--------------------------------------------------------------------------------
/css/dataTables/images/forward_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/forward_disabled.png
--------------------------------------------------------------------------------
/css/dataTables/images/forward_enabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/forward_enabled.png
--------------------------------------------------------------------------------
/css/dataTables/images/back_enabled_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/back_enabled_hover.png
--------------------------------------------------------------------------------
/css/dataTables/images/sort_asc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_asc_disabled.png
--------------------------------------------------------------------------------
/css/dataTables/images/sort_desc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_desc_disabled.png
--------------------------------------------------------------------------------
/css/dataTables/images/forward_enabled_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/forward_enabled_hover.png
--------------------------------------------------------------------------------
/api.php:
--------------------------------------------------------------------------------
1 | 'invalid api call'
15 | )
16 | );
17 | }
18 |
19 | ?>
20 |
--------------------------------------------------------------------------------
/js/bootswatch.js:
--------------------------------------------------------------------------------
1 | $('a[rel=tooltip]').tooltip({
2 | 'placement': 'bottom'
3 | });
4 |
5 | function parseRSS(url, callback) {
6 | $.ajax({
7 | url: 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
8 | dataType: 'json',
9 | success: function(data) {
10 | callback(data.responseData.feed);
11 | }
12 | });
13 | }
--------------------------------------------------------------------------------
/footer.php:
--------------------------------------------------------------------------------
1 |
3 |
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## gt-course-critique
2 | ###### (Georgia Institute of Technology Course Critique)
3 |
4 |
5 | This is the official repository for Georgia Tech's Course Critique application. To host your own Course Critique, you need the following:
6 |
7 | * A database (MySQL, PostgreSQL, etc.)
8 | * A web server with PHP > 5.3.*
9 | * [ElasticSearch running the JDBC river](https://github.com/jprante/elasticsearch-river-jdbc)
10 |
11 | Please contact Georgia Tech's SGA for more detailed instructions on how to host your own Course Critique
12 |
--------------------------------------------------------------------------------
/css/author.css:
--------------------------------------------------------------------------------
1 | .author-info h4 {
2 | margin-bottom:0px;
3 | text-decoration: underline;
4 | color:rgb(85, 85, 85);
5 | font-size:18.5px;
6 | }
7 | .author-info {
8 | text-align: center;
9 | }
10 | .author-page-title h1 {
11 | font-size:70px;
12 | }
13 | .author-page-title p {
14 | margin-top: 22px;
15 | font-size:35px;
16 | }
17 | .author-pic {
18 | width:160px;
19 | height:160px;
20 | }
21 | .author-title {
22 | display:block;
23 | font-size:17px;
24 | margin-bottom:3px;
25 | }
26 | /* Override from bootstrap */
27 | .row {
28 | margin-bottom: 20px;
29 | }
--------------------------------------------------------------------------------
/config.php:
--------------------------------------------------------------------------------
1 | pdo = new PDO($this->RDBMType . ":host=" . $this->dbhost . ";dbname=" . $this->database, $this->username, $this->password);
20 | }
21 |
22 | }
--------------------------------------------------------------------------------
/js/application.js:
--------------------------------------------------------------------------------
1 | !function ($) {
2 |
3 | $(function(){
4 |
5 | // fix sub nav on scroll
6 | var $win = $(window)
7 | , $nav = $('.subnav')
8 | , navHeight = $('.navbar').first().height()
9 | , navTop = $('.subnav').length && $('.subnav').offset().top - navHeight
10 | , isFixed = 0
11 |
12 | processScroll()
13 |
14 | $win.on('scroll', processScroll)
15 |
16 | function processScroll() {
17 | var i, scrollTop = $win.scrollTop()
18 | if (scrollTop >= navTop && !isFixed) {
19 | isFixed = 1
20 | $nav.addClass('subnav-fixed')
21 | } else if (scrollTop <= navTop && isFixed) {
22 | isFixed = 0
23 | $nav.removeClass('subnav-fixed')
24 | }
25 | }
26 |
27 | })
28 |
29 | }(window.jQuery)
--------------------------------------------------------------------------------
/elasticsearch/courseSchema.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ELASTICSEARCH_URL = "localhost:9200"
4 | MYSQL_DATABASE = "192.168.1.1:3306/courseCritique"
5 | MYSQL_USERNAME = "*****"
6 | MYSQL_PASSWORD = "*****"
7 | MYSQL_TABLE_NAME = "Data"
8 |
9 | curl -XPUT "$ELASTICSEARCH_URL/_river/class/_meta" -d '{
10 | "type" : "jdbc",
11 | "jdbc" : {
12 | "driver" : "com.mysql.jdbc.Driver",
13 | "url" : "jdbc:mysql://$MYSQL_DATABASE",
14 | "user" : "$MYSQL_USERNAME",
15 | "password" : "$MYSQL_PASSWORD",
16 | "sql" : "SELECT DISTINCT \"class\" as \"_index\", REPLACE(Course,\" \",\"\") as \"_id\", Course as \"course\", ROUND(AVG(GPA),2) as \"grades.gpa\", ROUND(AVG(A)) as \"grades.a\", ROUND(AVG(B)) as \"grades.b\", ROUND(AVG(C)) as \"grades.c\", ROUND(AVG(D)) as \"grades.d\", ROUND(AVG(F)) as \"grades.f\", ROUND(AVG(W)) as \"grades.w\" FROM $MYSQL_TABLE_NAME GROUP BY Course"
17 | }
18 | }'
19 |
--------------------------------------------------------------------------------
/css/critique.css:
--------------------------------------------------------------------------------
1 | .dataTables_paginate > ul > li.active > a {
2 | background-color: #003049 !important;
3 | }
4 |
5 | .dataTables_paginate > ul > li:not(.disabled) > a:hover{
6 | background-color: #B18E5F !important;
7 | color: white !important;
8 | }
9 |
10 | .avg {
11 | text-decoration: overline;
12 | }
13 |
14 | .CoursesDisabled , .TermsDisabled, .ProfessorsDisabled {
15 | display: none;
16 | }
17 |
18 | .beta-ribbon {
19 | position: fixed;
20 | pointer-events: none;
21 | top: 0px;
22 | left: 0px;
23 | height: 75px;
24 | z-index: 1;
25 | }
26 |
27 | .center-table {
28 | margin: 0 auto !important;
29 | float: none !important;
30 | }
31 |
32 | .dropdown-menu {
33 | max-height:325px;
34 | overflow-y:scroll;
35 | }
36 |
37 | .prof-flash-gold {
38 | background-color: rgb(177, 142, 95) !important;
39 | }
40 |
41 | body.extra-space-top {
42 | padding-top:60px;
43 | }
--------------------------------------------------------------------------------
/elasticsearch/profSchema.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ELASTICSEARCH_URL = "localhost:9200"
4 | MYSQL_DATABASE = "192.168.1.1:3306/courseCritique"
5 | MYSQL_USERNAME = "*****"
6 | MYSQL_PASSWORD = "*****"
7 | MYSQL_TABLE_NAME = "Data"
8 |
9 | curl -XPUT "$ELASTICSEARCH_URL/_river/prof/_meta" -d '{
10 | "type" : "jdbc",
11 | "jdbc" : {
12 | "driver" : "com.mysql.jdbc.Driver",
13 | "url" : "jdbc:mysql://$MYSQL_DATABASE",
14 | "user" : "$MYSQL_USERNAME",
15 | "password" : "$MYSQL_PASSWORD",
16 | "sql" : "SELECT DISTINCT \"prof\" as \"_index\", UPPER(REPLACE(REPLACE(Prof,\" \",\"\"),\",\",\"\")) as \"_id\", Prof as \"prof\", ROUND(AVG(GPA),2) as \"grades.gpa\", ROUND(AVG(A)) as \"grades.a\", ROUND(AVG(B)) as \"grades.b\", ROUND(AVG(C)) as \"grades.c\", ROUND(AVG(D)) as \"grades.d\", ROUND(AVG(F)) as \"grades.f\", ROUND(AVG(W)) as \"grades.w\" FROM $MYSQL_TABLE_NAME GROUP BY Prof"
17 |
18 | }
19 | }'
20 |
--------------------------------------------------------------------------------
/search.php:
--------------------------------------------------------------------------------
1 | Error with query syntax");
24 | return false;
25 | }
26 | //Output number of hits...etc
27 | temp = msg;
28 | var output = "" + msg.hits.total + " results in: " + msg.took + "ms
";
29 | for(var i = 0; i < msg.hits.hits.length; i++) {
30 | //type
31 | var type = msg.hits.hits[i]._index
32 | //Get title for each respective type
33 | var titleTag="";
34 | var action = "#Error";
35 | switch(type) {
36 | case('class') : titleTag = "course"; action="course.php"; break;
37 | case('prof') : titleTag = "prof"; action = "prof.php"; break;
38 | }
39 | var id = msg.hits.hits[i]._id;
40 | var title = msg.hits.hits[i]._source[titleTag].replace(",",", ");
41 | //Heading
42 | output += "";
43 | //End tags
44 | output += "
";
45 | }
46 | $("#searchResults").html(output);
47 | return true;
48 | }
49 |
--------------------------------------------------------------------------------
/js/clippy/build/clippy.css:
--------------------------------------------------------------------------------
1 | .clippy, .clippy-balloon {
2 | position: fixed;
3 | z-index: 1000;
4 | cursor: pointer;
5 | }
6 |
7 | .clippy-balloon {
8 |
9 | background: #FFC;
10 | color: black;
11 | padding: 8px;
12 | border: 1px solid black;
13 | border-radius: 5px;
14 |
15 | }
16 |
17 | .clippy-content {
18 | max-width: 200px;
19 | min-width: 120px;
20 | font-family: "Microsoft Sans", sans-serif;
21 | font-size: 10pt;
22 | }
23 |
24 | .clippy-tip {
25 | width: 10px;
26 | height: 16px;
27 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAMAAAAlvKiEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRF///MAAAA////52QwgAAAAAN0Uk5T//8A18oNQQAAAGxJREFUeNqs0kEOwCAIRFHn3//QTUU6xMyyxii+jQosrTPkyPEM6IN3FtzIRk1U4dFeKWQiH6pRRowMVKEmvronEynkwj0uZJgR22+YLopPSo9P34wJSamLSU7lSIWLJU7NkNomNlhqxUeAAQC+TQLZyEuJBwAAAABJRU5ErkJggg==) no-repeat;
28 | position: absolute;
29 | }
30 |
31 | .clippy-top-left .clippy-tip {
32 | top: 100%;
33 | margin-top: 0px;
34 | left: 100%;
35 | margin-left: -50px;
36 | }
37 |
38 | .clippy-top-right .clippy-tip {
39 | top: 100%;
40 | margin-top: 0px;
41 | left: 0;
42 | margin-left: 50px;
43 | background-position: -10px 0;
44 |
45 | }
46 |
47 | .clippy-bottom-right .clippy-tip {
48 | top: 0;
49 | margin-top: -16px;
50 | left: 0;
51 | margin-left: 50px;
52 | background-position: -10px -16px;
53 | }
54 |
55 | .clippy-bottom-left .clippy-tip {
56 | top: 0;
57 | margin-top: -16px;
58 | left: 100%;
59 | margin-left: -50px;
60 | background-position: 0px -16px;
61 | }
62 |
63 |
--------------------------------------------------------------------------------
/js/clippy/src/clippy.css:
--------------------------------------------------------------------------------
1 | .clippy, .clippy-balloon {
2 | position: fixed;
3 | z-index: 1000;
4 | cursor: pointer;
5 | }
6 |
7 | .clippy-balloon {
8 |
9 | background: #FFC;
10 | color: black;
11 | padding: 8px;
12 | border: 1px solid black;
13 | border-radius: 5px;
14 |
15 | }
16 |
17 | .clippy-content {
18 | max-width: 200px;
19 | min-width: 120px;
20 | font-family: "Microsoft Sans", sans-serif;
21 | font-size: 10pt;
22 | }
23 |
24 | .clippy-tip {
25 | width: 10px;
26 | height: 16px;
27 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAMAAAAlvKiEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRF///MAAAA////52QwgAAAAAN0Uk5T//8A18oNQQAAAGxJREFUeNqs0kEOwCAIRFHn3//QTUU6xMyyxii+jQosrTPkyPEM6IN3FtzIRk1U4dFeKWQiH6pRRowMVKEmvronEynkwj0uZJgR22+YLopPSo9P34wJSamLSU7lSIWLJU7NkNomNlhqxUeAAQC+TQLZyEuJBwAAAABJRU5ErkJggg==) no-repeat;
28 | position: absolute;
29 | }
30 |
31 | .clippy-top-left .clippy-tip {
32 | top: 100%;
33 | margin-top: 0px;
34 | left: 100%;
35 | margin-left: -50px;
36 | }
37 |
38 | .clippy-top-right .clippy-tip {
39 | top: 100%;
40 | margin-top: 0px;
41 | left: 0;
42 | margin-left: 50px;
43 | background-position: -10px 0;
44 |
45 | }
46 |
47 | .clippy-bottom-right .clippy-tip {
48 | top: 0;
49 | margin-top: -16px;
50 | left: 0;
51 | margin-left: 50px;
52 | background-position: -10px -16px;
53 | }
54 |
55 | .clippy-bottom-left .clippy-tip {
56 | top: 0;
57 | margin-top: -16px;
58 | left: 100%;
59 | margin-left: -50px;
60 | background-position: 0px -16px;
61 | }
62 |
63 |
--------------------------------------------------------------------------------
/js/easter.js:
--------------------------------------------------------------------------------
1 | /* Easter Egg */
2 | var clippy_easter_hold = false;
3 | function search_easter(query) {
4 | if (query === "George P. Burdell") {
5 | do_easter();
6 | }
7 | }
8 | function do_easter() {
9 | if (clippy_easter_hold) {
10 | return false;
11 | }
12 | clippy_easter_hold = true;
13 |
14 | //Load Clippy CSS
15 | $('head').append('');
16 | //Load clippy js
17 | $.getScript("js/clippy/build/clippy.min.js").done(function() {
18 | //Random clippy
19 | var agents = ["Bonzi", "Genius", "Clippy", "F1", "Genie", "Links", "Merlin", "Rover"];
20 | agents = agents[Math.floor(Math.random() * agents.length)];
21 | clippy.load(agents, function(agent) {
22 | agent.show();
23 | agent.speak("You found me! How about we sing a song?");
24 | setTimeout(function() {
25 | if (!window.HTMLAudioElement) {
26 | agent.speak("Seems your browser doesn't support HTML5, maybe next time");
27 | }
28 | else {
29 | var snd = new Audio('');
30 | if (snd.canPlayType('audio/mp3')) {
31 | snd = new Audio('js/clippy/R-Wreck-vocal.mp3');
32 | } else if (snd.canPlayType('audio/ogg')) {
33 | snd = new Audio('js/clippy/R-Wreck-vocal.ogg');
34 | }
35 | snd.play();
36 | }
37 | var random = setInterval(function() {
38 | agent.animate();
39 | }, 1000);
40 | }, 3000);
41 | });
42 | });
43 | }
44 |
--------------------------------------------------------------------------------
/js/clippy/README.md:
--------------------------------------------------------------------------------
1 | [Clippy.JS](http://smore.com/clippy-js)
2 | =========
3 | Add Clippy or his friends to any website for instant nostalgia.
4 | Read more about the project on [our homepage](http://smore.com/clippy-js).
5 |
6 |
7 | Usage: Setup
8 | ------------
9 | Add this code to you to your page to enable Clippy.js.
10 |
11 | ```html
12 |
13 |
14 |
15 | ...
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
31 |
32 | ```
33 |
34 | Usage: Actions
35 | --------------
36 | All the agent actions are queued and executed by order, so you could stack them.
37 |
38 | ```javascript
39 | // play a given animation
40 | agent.Play('Searching');
41 |
42 | // play a random animation
43 | agent.animate();
44 |
45 | // get a list of all the animations
46 | agent.animations();
47 | // => ["MoveLeft", "Congratulate", "Hide", "Pleased", "Acknowledge", ...]
48 |
49 | // Show text balloon
50 | agent.speak('When all else fails, bind some paper together. My name is Clippy.');
51 |
52 | // move to the given point, use animation if available
53 | agent.moveTo(100,100);
54 |
55 | // gesture at a given point (if gesture animation is available)
56 | agent.gestureAt(200,200);
57 |
58 | // stop the current action in the queue
59 | agent.stopCurrent();
60 |
61 | // stop all actions in the queue and go back to idle mode
62 | agent.stop();
63 | ```
64 |
65 | Special Thanks
66 | --------------
67 | * The awesome [Cinnamon Software](http://www.cinnamonsoftware.com/) for developing [Double Agent](http://doubleagent.sourceforge.net/)
68 | the program we used to unpack Clippy and his friends!
69 | * Microsoft, for creating clippy :)
--------------------------------------------------------------------------------
/admin/getOSCAR.php:
--------------------------------------------------------------------------------
1 | \n";
45 | echo "Course Name: $course_name\n";
46 |
47 | // echo "
Description: $description";
48 | echo "
Description: " . parser("", "<");
49 |
50 | function parser($start, $end) {
51 | global $html;
52 | $position = strpos($html, $start);
53 | $position += strlen($start);
54 | $parsed = false;
55 | $text = "";
56 | while (!$parsed) {
57 | if ($html[$position] != $end) {
58 | $text .= $html[$position];
59 | $position++;
60 | } else {
61 | ;
62 | $parsed = true;
63 | }
64 | }
65 | return $text;
66 | }
--------------------------------------------------------------------------------
/datalayer.php:
--------------------------------------------------------------------------------
1 | pdo->prepare("SELECT DISTINCT Course FROM Data WHERE courseID = :id");
9 | $raw = $db->pdo->prepare("SELECT profID, Prof, Size, ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)), ROUND(AVG(W)) FROM Data WHERE courseID = :id AND GPA != 0 GROUP BY Prof");
10 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE courseID = :id AND GPA != 0");
11 |
12 | if (!$courseName->execute(array(":id" => $courseID)) || !$raw->execute(array(":id" => $courseID)) || !$avg->execute(array(":id" => $courseID))) {
13 | return array( 'err' => 'failed to grab course data', 'courseId' => $courseId);
14 | }
15 |
16 | $courseName = $courseName->fetch(PDO::FETCH_NUM);
17 | $courseName = $courseName[0];
18 |
19 | $avg = $avg->fetch(PDO::FETCH_ASSOC);
20 | $raw = $raw->fetchAll(PDO::FETCH_ASSOC);
21 |
22 | return array(
23 | 'courseId' => $courseId,
24 | 'courseName' => $courseName,
25 | 'grades' => array(
26 | 'avg' => $avg,
27 | 'raw' => $raw
28 | )
29 | );
30 | }
31 |
32 | function profData($profId) {
33 | $profName = $db->pdo->prepare("SELECT DISTINCT Prof FROM Data WHERE profID = :id");
34 | $raw = $db->pdo->prepare("SELECT courseID, Course, Section, Year, Size, GPA, A, B, C, D, F, W FROM Data WHERE profID = :id");
35 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE profID = :id AND GPA != 0 GROUP BY Prof");
36 | //execute query and handle error
37 | if (!$raw->execute(array(":id" => $profID)) || !$avg->execute(array(":id" => $profID)) || !$profName->execute(array(":id" => $profID))) {
38 | return array('err'=>'failed to grab prof data', 'profId'=>$profId);
39 | }
40 |
41 | $profName = $profName->fetch(PDO::FETCH_NUM);
42 | $profName = $profName[0];
43 |
44 | $avg = $avg->fetch(PDO::FETCH_ASSOC);
45 | $raw = $raw->fetchAll(PDO::FETCH_ASSOC);
46 |
47 | return array(
48 | 'profId' => $profId,
49 | 'profName' => $profName,
50 | 'grades' => array(
51 | 'avg' => $avg,
52 | 'raw' => $raw
53 | )
54 | );
55 | }
56 |
--------------------------------------------------------------------------------
/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Course Critique - 404
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
27 |
28 |
39 |
40 |
42 |
43 |
49 |
50 |
51 |
52 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/admin/import.php:
--------------------------------------------------------------------------------
1 | 'Spring',
36 | '05' => 'Summer',
37 | '08' => 'Fall',
38 | ];
39 |
40 | $_input = [
41 | '201305.csv' => 0,
42 | '201308_201402_201405.csv' => 0
43 | ];
44 |
45 | $destination = __DIR__ . '/insert.sql';
46 | $insert = "INSERT INTO `Data` (`profID`,`courseID`,`Course`,`Section`,`Year`,`Prof`,`A`,`B`,`C`,`D`,`F`,`W`,`Size`,`Level`,`GPA`) VALUES ";
47 | $_counter = [];
48 | echo "\nCount | Filename\n------------------------------";
49 | foreach($_input as $file => $count) {
50 | $csv = array_map('str_getcsv', file(__DIR__ . '/' . $file));
51 | array_shift($csv);
52 |
53 | $csvlen = count($csv);
54 | echo "\n" . str_pad($csvlen, 8) . ' | ' . $file;
55 | $sql = '';
56 | $counter = 0;
57 | foreach($csv as $row) {
58 | $name = explode(',', preg_replace("/'/", "''", $row[4])); // Now [lastname, firstname]
59 | $course = explode(' ', $row[1]); // Now [department, number]
60 | $term = $_term[substr($row[0], 4, 2)] . ' ' . substr($row[0], 0, 4);
61 |
62 | $in = [
63 | '\'' . preg_replace('/[^A-Z]/', '', strtoupper(implode('', $name))) . '\'',
64 | '\'' . strtoupper(implode('', $course)) . '\'',
65 | '\'' . "{$course[0]} {$course[1]}" . '\'',
66 | '\'' . $row[2] . '\'',
67 | '\'' . $term . '\'',
68 | '\'' . implode(', ', $name) . '\'',
69 | preg_replace('/[^0-9]/', '', $row[5]) ?: 0,
70 | preg_replace('/[^0-9]/', '', $row[6]) ?: 0,
71 | preg_replace('/[^0-9]/', '', $row[7]) ?: 0,
72 | preg_replace('/[^0-9]/', '', $row[8]) ?: 0,
73 | preg_replace('/[^0-9]/', '', $row[9]) ?: 0,
74 | preg_replace('/[^0-9]/', '', $row[15]) ?: 0,
75 | '\'' . $row[17] . '\'',
76 | '\'' . $row[19] . '\'',
77 | $row[18] != 'N/A' ? $row[18] : 0,
78 | ];
79 |
80 | $sql .= "\n (" . implode(', ', $in) . ")";
81 | if(!(++$counter % 100) || $counter == $csvlen) {
82 | file_put_contents($destination, $insert . $sql . ";\n\n", FILE_APPEND);
83 | $sql = '';
84 | }
85 | else {
86 | $sql .= ',';
87 | }
88 | }
89 | }
90 | echo "\nDone! \n";
91 |
--------------------------------------------------------------------------------
/js/clippy/src/load.js:
--------------------------------------------------------------------------------
1 | clippy.BASE_PATH = 'http://clippy.js.s3.amazonaws.com/Agents/';
2 |
3 | clippy.load = function (name, successCb, failCb) {
4 | var path = clippy.BASE_PATH + name;
5 |
6 | var mapDfd = clippy.load._loadMap(path);
7 | var agentDfd = clippy.load._loadAgent(name, path);
8 | var soundsDfd = clippy.load._loadSounds(name, path);
9 |
10 | var data;
11 | agentDfd.done(function (d) {
12 | data = d;
13 | });
14 |
15 | var sounds;
16 |
17 | soundsDfd.done(function (d) {
18 | sounds = d;
19 | });
20 |
21 | // wrapper to the success callback
22 | var cb = function () {
23 | var a = new clippy.Agent(path, data,sounds);
24 | successCb(a);
25 | };
26 |
27 | $.when(mapDfd, agentDfd, soundsDfd).done(cb).fail(failCb);
28 | };
29 |
30 | clippy.load._maps = {};
31 | clippy.load._loadMap = function (path) {
32 | var dfd = clippy.load._maps[path];
33 | if (dfd) return dfd;
34 |
35 | // set dfd if not defined
36 | dfd = clippy.load._maps[path] = $.Deferred();
37 |
38 | var src = path + '/map.png';
39 | var img = new Image();
40 |
41 | img.onload = dfd.resolve;
42 | img.onerror = dfd.reject;
43 |
44 | // start loading the map;
45 | img.setAttribute('src', src);
46 |
47 | return dfd.promise();
48 | };
49 |
50 | clippy.load._sounds = {};
51 |
52 | clippy.load._loadSounds = function (name, path) {
53 | var dfd = clippy.load._sounds[name];
54 | if (dfd) return dfd;
55 |
56 | // set dfd if not defined
57 | dfd = clippy.load._sounds[name] = $.Deferred();
58 |
59 | var audio = document.createElement('audio');
60 | var canPlayMp3 = !!audio.canPlayType && "" != audio.canPlayType('audio/mpeg');
61 | var canPlayOgg = !!audio.canPlayType && "" != audio.canPlayType('audio/ogg; codecs="vorbis"');
62 |
63 | if (!canPlayMp3 && !canPlayOgg) {
64 | dfd.resolve({});
65 | } else {
66 | var src = path + (canPlayMp3 ? '/sounds-mp3.js' : '/sounds-ogg.js');
67 | // load
68 | clippy.load._loadScript(src);
69 | }
70 |
71 | return dfd.promise()
72 | };
73 |
74 |
75 | clippy.load._data = {};
76 | clippy.load._loadAgent = function (name, path) {
77 | var dfd = clippy.load._data[name];
78 | if (dfd) return dfd;
79 |
80 | dfd = clippy.load._getAgentDfd(name);
81 |
82 | var src = path + '/agent.js';
83 |
84 | clippy.load._loadScript(src);
85 |
86 | return dfd.promise();
87 | };
88 |
89 | clippy.load._loadScript = function (src) {
90 | var script = document.createElement('script');
91 | script.setAttribute('src', src);
92 | script.setAttribute('async', 'async');
93 | script.setAttribute('type', 'text/javascript');
94 |
95 | document.head.appendChild(script);
96 | };
97 |
98 | clippy.load._getAgentDfd = function (name) {
99 | var dfd = clippy.load._data[name];
100 | if (!dfd) {
101 | dfd = clippy.load._data[name] = $.Deferred();
102 | }
103 | return dfd;
104 | };
105 |
106 | clippy.ready = function (name, data) {
107 | var dfd = clippy.load._getAgentDfd(name);
108 | dfd.resolve(data);
109 | };
110 |
111 | clippy.soundsReady = function (name, data) {
112 | var dfd = clippy.load._sounds[name];
113 | if (!dfd) {
114 | dfd = clippy.load._sounds[name] = $.Deferred();
115 | }
116 |
117 | dfd.resolve(data);
118 | };
--------------------------------------------------------------------------------
/css/dataTables/DT_bootstrap.css:
--------------------------------------------------------------------------------
1 |
2 | div.dataTables_length label {
3 | float: left;
4 | text-align: left;
5 | }
6 |
7 | div.dataTables_length select {
8 | width: 75px;
9 | }
10 |
11 | div.dataTables_filter label {
12 | float: right;
13 | }
14 |
15 | div.dataTables_info {
16 | padding-top: 8px;
17 | }
18 |
19 | div.dataTables_paginate {
20 | float: right;
21 | margin: 0;
22 | }
23 |
24 | table.table {
25 | clear: both;
26 | margin-bottom: 6px !important;
27 | max-width: none !important;
28 | }
29 |
30 | table.table thead .sorting,
31 | table.table thead .sorting_asc,
32 | table.table thead .sorting_desc,
33 | table.table thead .sorting_asc_disabled,
34 | table.table thead .sorting_desc_disabled {
35 | cursor: pointer;
36 | *cursor: hand;
37 | }
38 |
39 | table.table thead .sorting { background: url('images/sort_both.png') no-repeat center right; }
40 | table.table thead .sorting_asc { background: url('images/sort_asc.png') no-repeat center right; }
41 | table.table thead .sorting_desc { background: url('images/sort_desc.png') no-repeat center right; }
42 |
43 | table.table thead .sorting_asc_disabled { background: url('images/sort_asc_disabled.png') no-repeat center right; }
44 | table.table thead .sorting_desc_disabled { background: url('images/sort_desc_disabled.png') no-repeat center right; }
45 |
46 | table.dataTable th:active {
47 | outline: none;
48 | }
49 |
50 | /* Scrolling */
51 | div.dataTables_scrollHead table {
52 | margin-bottom: 0 !important;
53 | border-bottom-left-radius: 0;
54 | border-bottom-right-radius: 0;
55 | }
56 |
57 | div.dataTables_scrollHead table thead tr:last-child th:first-child,
58 | div.dataTables_scrollHead table thead tr:last-child td:first-child {
59 | border-bottom-left-radius: 0 !important;
60 | border-bottom-right-radius: 0 !important;
61 | }
62 |
63 | div.dataTables_scrollBody table {
64 | border-top: none;
65 | margin-bottom: 0 !important;
66 | }
67 |
68 | div.dataTables_scrollBody tbody tr:first-child th,
69 | div.dataTables_scrollBody tbody tr:first-child td {
70 | border-top: none;
71 | }
72 |
73 | div.dataTables_scrollFoot table {
74 | border-top: none;
75 | }
76 |
77 |
78 |
79 |
80 | /*
81 | * TableTools styles
82 | */
83 | .table tbody tr.active td,
84 | .table tbody tr.active th {
85 | background-color: #08C;
86 | color: white;
87 | }
88 |
89 | .table tbody tr.active:hover td,
90 | .table tbody tr.active:hover th {
91 | background-color: #0075b0 !important;
92 | }
93 |
94 | .table-striped tbody tr.active:nth-child(odd) td,
95 | .table-striped tbody tr.active:nth-child(odd) th {
96 | background-color: #017ebc;
97 | }
98 |
99 | table.DTTT_selectable tbody tr {
100 | cursor: pointer;
101 | *cursor: hand;
102 | }
103 |
104 | div.DTTT .btn {
105 | color: #333 !important;
106 | font-size: 12px;
107 | }
108 |
109 | div.DTTT .btn:hover {
110 | text-decoration: none !important;
111 | }
112 |
113 |
114 | ul.DTTT_dropdown.dropdown-menu a {
115 | color: #333 !important; /* needed only when demo_page.css is included */
116 | }
117 |
118 | ul.DTTT_dropdown.dropdown-menu li:hover a {
119 | background-color: #0088cc;
120 | color: white !important;
121 | }
122 |
123 | /* TableTools information display */
124 | div.DTTT_print_info.modal {
125 | height: 150px;
126 | margin-top: -75px;
127 | text-align: center;
128 | }
129 |
130 | div.DTTT_print_info h6 {
131 | font-weight: normal;
132 | font-size: 28px;
133 | line-height: 28px;
134 | margin: 1em;
135 | }
136 |
137 | div.DTTT_print_info p {
138 | font-size: 14px;
139 | line-height: 20px;
140 | }
141 |
142 |
143 |
144 | /*
145 | * FixedColumns styles
146 | */
147 | div.DTFC_LeftHeadWrapper table,
148 | div.DTFC_LeftFootWrapper table,
149 | table.DTFC_Cloned tr.even {
150 | background-color: white;
151 | }
152 |
153 | div.DTFC_LeftHeadWrapper table {
154 | margin-bottom: 0 !important;
155 | border-top-right-radius: 0 !important;
156 | border-bottom-left-radius: 0 !important;
157 | border-bottom-right-radius: 0 !important;
158 | }
159 |
160 | div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
161 | div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
162 | border-bottom-left-radius: 0 !important;
163 | border-bottom-right-radius: 0 !important;
164 | }
165 |
166 | div.DTFC_LeftBodyWrapper table {
167 | border-top: none;
168 | margin-bottom: 0 !important;
169 | }
170 |
171 | div.DTFC_LeftBodyWrapper tbody tr:first-child th,
172 | div.DTFC_LeftBodyWrapper tbody tr:first-child td {
173 | border-top: none;
174 | }
175 |
176 | div.DTFC_LeftFootWrapper table {
177 | border-top: none;
178 | }
179 |
180 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Course Critique
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
28 |
29 |
30 |
31 |
32 | Course Critique
33 | Type in a Professor or Course Name
34 |
35 |
36 |
37 |
38 |
40 |
41 |
42 |
59 |
60 |
61 |
62 |
64 |
71 |
72 |
73 |
74 |
75 | | Example Searches: |
76 |
77 |
78 | | ECE 3020 |
79 | | PHYS 2212 |
80 | | George P. Burdell |
81 |
82 |
83 |
84 |
85 |
86 |
88 |
89 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/js/clippy/src/animator.js:
--------------------------------------------------------------------------------
1 | /******
2 | *
3 | *
4 | * @constructor
5 | */
6 | clippy.Animator = function (el, path, data, sounds) {
7 | this._el = el;
8 | this._data = data;
9 | this._path = path;
10 | this._currentFrameIndex = 0;
11 | this._currentFrame = undefined;
12 | this._exiting = false;
13 | this._currentAnimation = undefined;
14 | this._endCallback = undefined;
15 | this._started = false;
16 | this._sounds = {};
17 | this.currentAnimationName = undefined;
18 | this.preloadSounds(sounds);
19 | this._overlays = [this._el];
20 | var curr = this._el;
21 |
22 | this._setupElement(this._el);
23 | for (var i = 1; i < this._data.overlayCount; i++) {
24 | var inner = this._setupElement($(''));
25 |
26 | curr.append(inner);
27 | this._overlays.push(inner);
28 | curr = inner;
29 | }
30 | };
31 |
32 | clippy.Animator.prototype = {
33 | _setupElement:function (el) {
34 | var frameSize = this._data.framesize;
35 | el.css('display', "none");
36 | el.css({width:frameSize[0], height:frameSize[1]});
37 | el.css('background', "url('" + this._path + "/map.png') no-repeat");
38 |
39 | return el;
40 | },
41 |
42 | animations:function () {
43 | var r = [];
44 | var d = this._data.animations;
45 | for (var n in d) {
46 | r.push(n);
47 | }
48 | return r;
49 | },
50 |
51 | preloadSounds:function (sounds) {
52 |
53 | for (var i = 0; i < this._data.sounds.length; i++) {
54 | var snd = this._data.sounds[i];
55 | var uri = sounds[snd];
56 | if (!uri) continue;
57 | this._sounds[snd] = new Audio(uri);
58 |
59 | }
60 | },
61 | hasAnimation:function (name) {
62 | return !!this._data.animations[name];
63 | },
64 |
65 | exitAnimation:function () {
66 | this._exiting = true;
67 | },
68 |
69 |
70 | showAnimation:function (animationName, stateChangeCallback) {
71 | this._exiting = false;
72 |
73 | if (!this.hasAnimation(animationName)) {
74 | return false;
75 | }
76 |
77 | this._currentAnimation = this._data.animations[animationName];
78 | this.currentAnimationName = animationName;
79 |
80 |
81 | if (!this._started) {
82 | this._step();
83 | this._started = true;
84 | }
85 |
86 | this._currentFrameIndex = 0;
87 | this._currentFrame = undefined;
88 | this._endCallback = stateChangeCallback;
89 |
90 | return true;
91 | },
92 |
93 |
94 | _draw:function () {
95 | var images = [];
96 | if (this._currentFrame) images = this._currentFrame.images || [];
97 |
98 | for (var i = 0; i < this._overlays.length; i++) {
99 | if (i < images.length) {
100 | var xy = images[i];
101 | var bg = -xy[0] + 'px ' + -xy[1] + 'px';
102 | this._overlays[i].css({'background-position':bg, 'display':'block'});
103 | }
104 | else {
105 | this._overlays[i].css('display', 'none');
106 | }
107 |
108 | }
109 | },
110 |
111 | _getNextAnimationFrame:function () {
112 | if (!this._currentAnimation) return undefined;
113 | // No current frame. start animation.
114 | if (!this._currentFrame) return 0;
115 | var currentFrame = this._currentFrame;
116 | var branching = this._currentFrame.branching;
117 |
118 |
119 | if (this._exiting && currentFrame.exitBranch !== undefined) {
120 | return currentFrame.exitBranch;
121 | }
122 | else if (branching) {
123 | var rnd = Math.random() * 100;
124 | for (var i = 0; i < branching.branches.length; i++) {
125 | var branch = branching.branches[i];
126 | if (rnd <= branch.weight) {
127 | return branch.frameIndex;
128 | }
129 |
130 | rnd -= branch.weight;
131 | }
132 | }
133 |
134 | return this._currentFrameIndex + 1;
135 | },
136 |
137 | _playSound:function () {
138 | var s = this._currentFrame.sound;
139 | if (!s) return;
140 | var audio = this._sounds[s];
141 | if (audio) audio.play();
142 | },
143 |
144 | _atLastFrame:function () {
145 | return this._currentFrameIndex >= this._currentAnimation.frames.length - 1;
146 | },
147 |
148 | _step:function () {
149 | if (!this._currentAnimation) return;
150 | var newFrameIndex = Math.min(this._getNextAnimationFrame(), this._currentAnimation.frames.length - 1);
151 | var frameChanged = !this._currentFrame || this._currentFrameIndex !== newFrameIndex;
152 | this._currentFrameIndex = newFrameIndex;
153 |
154 | // always switch frame data, unless we're at the last frame of an animation with a useExitBranching flag.
155 | if (!(this._atLastFrame() && this._currentAnimation.useExitBranching)) {
156 | this._currentFrame = this._currentAnimation.frames[this._currentFrameIndex];
157 | }
158 |
159 | this._draw();
160 | this._playSound();
161 |
162 | this._loop = window.setTimeout($.proxy(this._step, this), this._currentFrame.duration);
163 |
164 |
165 | // fire events if the frames changed and we reached an end
166 | if (this._endCallback && frameChanged && this._atLastFrame()) {
167 | if (this._currentAnimation.useExitBranching && !this._exiting) {
168 | this._endCallback(this.currentAnimationName, clippy.Animator.States.WAITING);
169 | }
170 | else {
171 | this._endCallback(this.currentAnimationName, clippy.Animator.States.EXITED);
172 | }
173 | }
174 | },
175 |
176 | /***
177 | * Pause animation execution
178 | */
179 | pause:function () {
180 | window.clearTimeout(this._loop);
181 | },
182 |
183 | /***
184 | * Resume animation
185 | */
186 | resume:function () {
187 | this._step();
188 | }
189 | };
190 |
191 | clippy.Animator.States = { WAITING:1, EXITED:0 };
192 |
--------------------------------------------------------------------------------
/js/clippy/src/balloon.js:
--------------------------------------------------------------------------------
1 | /******
2 | *
3 | *
4 | * @constructor
5 | */
6 | clippy.Balloon = function (targetEl) {
7 | this._targetEl = targetEl;
8 |
9 | this._hidden = true;
10 | this._setup();
11 | };
12 |
13 | clippy.Balloon.prototype = {
14 |
15 | WORD_SPEAK_TIME:200,
16 | CLOSE_BALLOON_DELAY:2000,
17 |
18 | _setup:function () {
19 |
20 | this._balloon = $(' ').hide();
21 | this._content = this._balloon.find('.clippy-content');
22 |
23 | $(document.body).append(this._balloon);
24 | },
25 |
26 | reposition:function () {
27 | var sides = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];
28 |
29 | for (var i = 0; i < sides.length; i++) {
30 | var s = sides[i];
31 | this._position(s);
32 | if (!this._isOut()) break;
33 | }
34 | },
35 |
36 | _BALLOON_MARGIN:15,
37 |
38 | /***
39 | *
40 | * @param side
41 | * @private
42 | */
43 | _position:function (side) {
44 | var o = this._targetEl.offset();
45 | var h = this._targetEl.height();
46 | var w = this._targetEl.width();
47 | o.top -= $(window).scrollTop();
48 | o.left -= $(window).scrollLeft();
49 |
50 | var bH = this._balloon.outerHeight();
51 | var bW = this._balloon.outerWidth();
52 |
53 | this._balloon.removeClass('clippy-top-left');
54 | this._balloon.removeClass('clippy-top-right');
55 | this._balloon.removeClass('clippy-bottom-right');
56 | this._balloon.removeClass('clippy-bottom-left');
57 |
58 | var left, top;
59 | switch (side) {
60 | case 'top-left':
61 | // right side of the balloon next to the right side of the agent
62 | left = o.left + w - bW;
63 | top = o.top - bH - this._BALLOON_MARGIN;
64 | break;
65 | case 'top-right':
66 | // left side of the balloon next to the left side of the agent
67 | left = o.left;
68 | top = o.top - bH - this._BALLOON_MARGIN;
69 | break;
70 | case 'bottom-right':
71 | // right side of the balloon next to the right side of the agent
72 | left = o.left;
73 | top = o.top + h + this._BALLOON_MARGIN;
74 | break;
75 | case 'bottom-left':
76 | // left side of the balloon next to the left side of the agent
77 | left = o.left + w - bW;
78 | top = o.top + h + this._BALLOON_MARGIN;
79 | break;
80 | }
81 |
82 | this._balloon.css({top:top, left:left});
83 | this._balloon.addClass('clippy-' + side);
84 | },
85 |
86 | _isOut:function () {
87 | var o = this._balloon.offset();
88 | var bH = this._balloon.outerHeight();
89 | var bW = this._balloon.outerWidth();
90 |
91 | var wW = $(window).width();
92 | var wH = $(window).height();
93 | var sT = $(document).scrollTop();
94 | var sL = $(document).scrollLeft();
95 |
96 | var top = o.top - sT;
97 | var left = o.left - sL;
98 | var m = 5;
99 | if (top - m < 0 || left - m < 0) return true;
100 | if ((top + bH + m) > wH || (left + bW + m) > wW) return true;
101 |
102 | return false;
103 | },
104 |
105 | speak:function (complete, text, hold) {
106 | this._hidden = false;
107 | this.show();
108 | var c = this._content;
109 | // set height to auto
110 | c.height('auto');
111 | c.width('auto');
112 | // add the text
113 | c.text(text);
114 | // set height
115 | c.height(c.height());
116 | c.width(c.width());
117 | c.text('');
118 | this.reposition();
119 |
120 | this._complete = complete;
121 | this._sayWords(text, hold, complete);
122 | },
123 |
124 | show:function () {
125 | if (this._hidden) return;
126 | this._balloon.show();
127 | },
128 |
129 | hide:function (fast) {
130 | if (fast) {
131 | this._balloon.hide();
132 | return;
133 | }
134 |
135 | this._hiding = window.setTimeout($.proxy(this._finishHideBalloon, this), this.CLOSE_BALLOON_DELAY);
136 | },
137 |
138 | _finishHideBalloon:function () {
139 | if (this._active) return;
140 | this._balloon.hide();
141 | this._hidden = true;
142 | this._hiding = null;
143 | },
144 |
145 | _sayWords:function (text, hold, complete) {
146 | this._active = true;
147 | this._hold = hold;
148 | var words = text.split(/[^\S-]/);
149 | var time = this.WORD_SPEAK_TIME;
150 | var el = this._content;
151 | var idx = 1;
152 |
153 |
154 | this._addWord = $.proxy(function () {
155 | if (!this._active) return;
156 | if (idx > words.length) {
157 | delete this._addWord;
158 | this._active = false;
159 | if (!this._hold) {
160 | complete();
161 | this.hide();
162 | }
163 | } else {
164 | el.text(words.slice(0, idx).join(' '));
165 | idx++;
166 | this._loop = window.setTimeout($.proxy(this._addWord, this), time);
167 | }
168 | }, this);
169 |
170 | this._addWord();
171 |
172 | },
173 |
174 | close:function () {
175 | if (this._active) {
176 | this._hold = false;
177 | } else if (this._hold) {
178 | this._complete();
179 | }
180 | },
181 |
182 | pause:function () {
183 | window.clearTimeout(this._loop);
184 | if (this._hiding) {
185 | window.clearTimeout(this._hiding);
186 | this._hiding = null;
187 | }
188 | },
189 |
190 | resume:function () {
191 | if (this._addWord) {
192 | this._addWord();
193 | } else if (!this._hold && !this._hidden) {
194 | this._hiding = window.setTimeout($.proxy(this._finishHideBalloon, this), this.CLOSE_BALLOON_DELAY);
195 | }
196 | }
197 |
198 |
199 | };
200 |
201 |
--------------------------------------------------------------------------------
/js/dataTables/DT_bootstrap.js:
--------------------------------------------------------------------------------
1 | /* Set the defaults for DataTables initialisation */
2 | //$.extend( true, $.fn.dataTable.defaults, {
3 | // "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
4 | // "sPaginationType": "bootstrap",
5 | // "oLanguage": {
6 | // "sLengthMenu": "_MENU_ records per page"
7 | // }
8 | //} );
9 |
10 |
11 | /* Default class modification */
12 | $.extend( $.fn.dataTableExt.oStdClasses, {
13 | "sWrapper": "dataTables_wrapper form-inline"
14 | } );
15 |
16 |
17 | /* API method to get paging information */
18 | //$.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
19 | //{
20 | // return {
21 | // "iStart": oSettings._iDisplayStart,
22 | // "iEnd": oSettings.fnDisplayEnd(),
23 | // "iLength": oSettings._iDisplayLength,
24 | // "iTotal": oSettings.fnRecordsTotal(),
25 | // "iFilteredTotal": oSettings.fnRecordsDisplay(),
26 | // "iPage": Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
27 | // "iTotalPages": Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
28 | // };
29 | //};
30 |
31 |
32 | /* Bootstrap style pagination control */
33 | $.extend( $.fn.dataTableExt.oPagination, {
34 | "bootstrap": {
35 | "fnInit": function( oSettings, nPaging, fnDraw ) {
36 | var oLang = oSettings.oLanguage.oPaginate;
37 | var fnClickHandler = function ( e ) {
38 | e.preventDefault();
39 | if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
40 | fnDraw( oSettings );
41 | }
42 | };
43 |
44 | $(nPaging).addClass('pagination').append(
45 | ''
49 | );
50 | var els = $('a', nPaging);
51 | $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
52 | $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
53 | },
54 |
55 | "fnUpdate": function ( oSettings, fnDraw ) {
56 | var iListLength = 5;
57 | var oPaging = oSettings.oInstance.fnPagingInfo();
58 | var an = oSettings.aanFeatures.p;
59 | var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
60 |
61 | if ( oPaging.iTotalPages < iListLength) {
62 | iStart = 1;
63 | iEnd = oPaging.iTotalPages;
64 | }
65 | else if ( oPaging.iPage <= iHalf ) {
66 | iStart = 1;
67 | iEnd = iListLength;
68 | } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
69 | iStart = oPaging.iTotalPages - iListLength + 1;
70 | iEnd = oPaging.iTotalPages;
71 | } else {
72 | iStart = oPaging.iPage - iHalf + 1;
73 | iEnd = iStart + iListLength - 1;
74 | }
75 |
76 | for ( i=0, iLen=an.length ; i'+j+'')
84 | .insertBefore( $('li:last', an[i])[0] )
85 | .bind('click', function (e) {
86 | e.preventDefault();
87 | oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
88 | fnDraw( oSettings );
89 | } );
90 | }
91 |
92 | // Add / remove disabled classes from the static elements
93 | if ( oPaging.iPage === 0 ) {
94 | $('li:first', an[i]).addClass('disabled');
95 | } else {
96 | $('li:first', an[i]).removeClass('disabled');
97 | }
98 |
99 | if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
100 | $('li:last', an[i]).addClass('disabled');
101 | } else {
102 | $('li:last', an[i]).removeClass('disabled');
103 | }
104 | }
105 | }
106 | }
107 | } );
108 |
109 |
110 | /*
111 | * TableTools Bootstrap compatibility
112 | * Required TableTools 2.1+
113 | */
114 | if ( $.fn.DataTable.TableTools ) {
115 | // Set the classes that TableTools uses to something suitable for Bootstrap
116 | $.extend( true, $.fn.DataTable.TableTools.classes, {
117 | "container": "DTTT btn-group",
118 | "buttons": {
119 | "normal": "btn",
120 | "disabled": "disabled"
121 | },
122 | "collection": {
123 | "container": "DTTT_dropdown dropdown-menu",
124 | "buttons": {
125 | "normal": "",
126 | "disabled": "disabled"
127 | }
128 | },
129 | "print": {
130 | "info": "DTTT_print_info modal"
131 | },
132 | "select": {
133 | "row": "active"
134 | }
135 | } );
136 |
137 | // Have the collection use a bootstrap compatible dropdown
138 | $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
139 | "collection": {
140 | "container": "ul",
141 | "button": "li",
142 | "liner": "a"
143 | }
144 | } );
145 | }
146 |
147 |
148 | /* Table initialisation */
149 | var dataTable = "";
150 | function initTable() {
151 | $(document).ready(function() {
152 | dataTable = $('#dataTable').dataTable( {
153 | "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
154 | "bPaginate": false,
155 | "bInfo": false,
156 | "bFilter" : false,
157 | "iDisplayLength" : -1,
158 | "bLengthChange" : false,
159 | "oLanguage": {
160 | "sLengthMenu": "_MENU_ records per page"
161 | }
162 | });
163 | //Init Search the Critique textbox
164 | // $("div#dataTable_wrapper > div.row > div.span6").eq(1).html(' \
165 | // \
169 | // ');
170 |
171 | $("div#dataTable_wrapper > div.row > div.span6").eq(1).html('');
174 | //Bind Search Results
175 | // $("#quickSearchCritique").keyup(function(event) {
176 | // if(event.which==13) {
177 | // quickSearch();
178 | // } else {
179 | // clearTimeout($(this).data('timer'));
180 | // var search = $(this).val();
181 | // //If we have more than 3 chars...
182 | // if(search.length >= 3) {
183 | // //Query every .333 seconds
184 | // $(this).data('timer', setTimeout(function() {
185 | // quickSearch();
186 | // }, 333));
187 | // }
188 | // }
189 | // });
190 | });
191 | }//END DataTable INIT
192 |
193 | /* dataTable searchbar ajax, and auto complete */
194 | //function quickSearch() {
195 | // var query = $("#quickSearch.Critique").val();
196 | //
197 | //}
198 |
--------------------------------------------------------------------------------
/course.php:
--------------------------------------------------------------------------------
1 | pdo->prepare("SELECT DISTINCT Course FROM Data WHERE courseID = :id");
20 | $raw = $db->pdo->prepare("SELECT profID, Prof, Size, ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)), ROUND(AVG(W)) FROM Data WHERE courseID = :id AND GPA != 0 GROUP BY Prof");
21 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE courseID = :id AND GPA != 0");
22 |
23 | //execute query and handle error
24 | if (!$courseName->execute(array(":id" => $courseID)) || !$raw->execute(array(":id" => $courseID)) || !$avg->execute(array(":id" => $courseID))) {
25 | $error = file_get_contents("404.html");
26 | die($error);
27 | }
28 | //Get course name
29 | $courseName = $courseName->fetch(PDO::FETCH_NUM);
30 | $courseName = $courseName[0];
31 |
32 | //Get the avg marks
33 | $avg = $avg->fetch(PDO::FETCH_NUM);
34 | ?>
35 |
36 |
37 |
38 |
39 | Course Critique - = $courseName ?>
40 |
41 |
42 |
43 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | = $courseName ?>
64 |
65 |
66 |
67 |
68 | | Average Marks |
69 | GPA |
70 | A% |
71 | B% |
72 | C% |
73 | D% |
74 | F% |
75 |
76 |
77 |
78 |
79 | |
80 |
81 | = $value ?> |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | | Professor |
93 | Size |
94 | GPA |
95 | A% |
96 | B% |
97 | C% |
98 | D% |
99 | F% |
100 | W% |
101 |
102 |
103 |
104 | fetch(PDO::FETCH_NUM)): ?>
105 |
106 | | ">= $row[1] ?> |
107 |
108 | = $row[$i] ?> |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
161 |
162 |
163 |
164 |
165 |
--------------------------------------------------------------------------------
/css/bootswatch.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding-top: 20px;
3 | padding-bottom: 20px;
4 | }
5 |
6 | .navbar a > i {
7 | opacity: 1;
8 | }
9 |
10 | .navbar a:hover > i {
11 | opacity: 0.5;
12 | }
13 | section {
14 | margin-top: 100px;
15 | }
16 |
17 | .subhead {
18 | padding-bottom: 0;
19 | margin-bottom: 9px;
20 | }
21 |
22 | .subhead h1 {
23 | font-size: 54px;
24 | }
25 |
26 | .subnav {
27 | margin-bottom: 60px;
28 | width: 100%;
29 | height: 36px;
30 | background-color: #eeeeee; /* Old browsers */
31 | background-repeat: repeat-x; /* Repeat the gradient */
32 | background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); /* FF3.6+ */
33 | background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#eeeeee)); /* Chrome,Safari4+ */
34 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Chrome 10+,Safari 5.1+ */
35 | background-image: -ms-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* IE10+ */
36 | background-image: -o-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Opera 11.10+ */
37 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */
38 | background-image: linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* W3C */
39 | border: 1px solid #e5e5e5;
40 | -webkit-border-radius: 4px;
41 | -moz-border-radius: 4px;
42 | border-radius: 4px;
43 | }
44 |
45 | .subnav .nav {
46 | margin-bottom: 0;
47 | }
48 |
49 | .subnav .nav > li > a {
50 | margin: 0;
51 | padding-top: 11px;
52 | padding-bottom: 11px;
53 | border-left: 1px solid #f5f5f5;
54 | border-right: 1px solid #e5e5e5;
55 | -webkit-border-radius: 0;
56 | -moz-border-radius: 0;
57 | border-radius: 0;
58 | }
59 |
60 | .subnav .nav > .active > a,
61 | .subnav .nav > .active > a:hover {
62 | padding-left: 13px;
63 | color: #777;
64 | background-color: #e9e9e9;
65 | border-right-color: #ddd;
66 | border-left: 0;
67 | -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
68 | -moz-box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
69 | box-shadow: inset 0 3px 5px rgba(0,0,0,.05);
70 | }
71 |
72 | .subnav .nav > .active > a .caret,
73 | .subnav .nav > .active > a:hover .caret {
74 | border-top-color: #777;
75 | }
76 |
77 | .subnav .nav > li:first-child > a,
78 | .subnav .nav > li:first-child > a:hover {
79 | border-left: 0;
80 | padding-left: 12px;
81 | -webkit-border-radius: 4px 0 0 4px;
82 | -moz-border-radius: 4px 0 0 4px;
83 | border-radius: 4px 0 0 4px;
84 | }
85 |
86 | .subnav .nav > li:last-child > a {
87 | border-right: 0;
88 | }
89 |
90 | .subnav .dropdown-menu {
91 | -webkit-border-radius: 0 0 4px 4px;
92 | -moz-border-radius: 0 0 4px 4px;
93 | border-radius: 0 0 4px 4px;
94 | }
95 |
96 | .tooltip-inner {
97 | max-width: 500px;
98 | }
99 |
100 | .hero-unit {
101 | margin-bottom: 10px;
102 | text-align: center;
103 | }
104 |
105 | .hero-unit h1,
106 | .hero-unit p {
107 | margin-bottom: 15px;
108 | }
109 |
110 | #social {
111 | display: inline-block;
112 | margin-top: 45px;
113 | text-align: center;
114 | }
115 |
116 | #gh-star {
117 | margin-right: 10px;
118 | }
119 |
120 | .twitter-follow-button {
121 | width: 60px !important;
122 | }
123 |
124 | .twitter-share-button {
125 | margin-right: 15px;
126 | }
127 |
128 | .rss-button {
129 | width: 40px;
130 | height: 14px;
131 | font-size: 11px;
132 | line-height: 14px;
133 | font-weight: bold;
134 | margin: 0 0 10px;
135 | padding: 2px 5px 2px 4px;
136 | }
137 |
138 | .icon-rss {
139 | background: url(../img/rss-icons.png) no-repeat 0 0;
140 | opacity: .65;
141 | width: 16px;
142 | }
143 |
144 | #ticker {
145 | margin-bottom: 40px;
146 | }
147 |
148 | .about {
149 | margin-top: 20px;
150 | }
151 |
152 | .about > div {
153 | margin-bottom: 20px;
154 | }
155 |
156 | .about h3 {
157 | margin: 0 0 5px 35px;
158 | }
159 |
160 | .about img {
161 | float: left;
162 | margin-top: 5px;
163 | opacity: 0.7;
164 | }
165 |
166 | #gallery {
167 | margin: 45px 0 30px 0;
168 | padding-right: 20px;
169 | text-align: center;
170 | }
171 |
172 | .thumbnail {
173 | margin-bottom: 20px;
174 | background-color: rgba(0, 0, 0, 0.05);
175 | }
176 |
177 | .thumbnail img {
178 | width: 100%;
179 | -webkit-border-radius: 7px;
180 | -moz-border-radius: 7px;
181 | border-radius: 7px;
182 | }
183 |
184 | .thumbnail .caption {
185 | color: inherit !important;
186 | }
187 |
188 | .thumbnail h3 {
189 | margin-bottom: 0;
190 | }
191 |
192 | .thumbnail .btn-toolbar {
193 | margin-top: 15px;
194 | text-align: right;
195 | }
196 |
197 | .links {
198 | margin-bottom: 20px;
199 | }
200 |
201 | .links > a {
202 | margin-right: 10px;
203 | }
204 |
205 | div.one .bsa_it_ad {
206 | padding: 25px 25px 15px 25px;
207 | }
208 |
209 | div.one .bsa_it_p {
210 | display: none;
211 | }
212 |
213 | .bsa {
214 | float: right;
215 | max-width: 400px;
216 | padding: 0;
217 | }
218 |
219 | body .one .bsa_it_ad {
220 | margin-bottom: -10px;
221 | background: none;
222 | border: none;
223 | font-family: inherit;
224 | color: inherit;
225 | }
226 |
227 | body .one .bsa_it_ad .bsa_it_t,
228 | body .one .bsa_it_ad .bsa_it_d {
229 | color: inherit;
230 | font-size: inherit;
231 | }
232 |
233 | body .one .bsa_it_p {
234 | display: none;
235 | }
236 |
237 | #bsap_aplink {
238 | float: right;
239 | position: relative;
240 | right: 10px;
241 | height: 0;
242 | font-size: 11px;
243 | }
244 |
245 | .links {
246 | margin-bottom: 20px;
247 | }
248 |
249 | .links > a {
250 | margin-right: 10px;
251 | }
252 |
253 | @media (max-width: 480px) {
254 |
255 | .hero-unit {
256 | padding: 20px 20px 0;
257 | margin: 0 0 20px;
258 | }
259 |
260 | .hero-unit h1 {
261 | font-size: 36px;
262 | }
263 |
264 | .hero-unit iframe {
265 | margin-right: 0 !important;
266 | }
267 |
268 | #social {
269 | margin-top: 0px;
270 | margin-bottom: 20px;
271 | }
272 |
273 | #social > span {
274 | display: block;
275 | }
276 |
277 | .about {
278 | margin-top: 0;
279 | }
280 |
281 | .about h3 {
282 | margin-top: 20px;
283 | }
284 |
285 | .about p {
286 | margin-bottom: 0;
287 | }
288 |
289 | .modal {
290 | position: fixed !important;
291 | top: 25% !important;
292 | }
293 | }
294 |
295 | /* Landscape phone to portrait tablet */
296 | @media (min-width: 481px) and (max-width: 767px) {
297 |
298 | .hero-unit {
299 | margin-top: 0;
300 | padding: 30px;
301 | }
302 |
303 | .about {
304 | margin-top: 0;
305 | }
306 | }
307 |
308 | @media (max-width: 767px) {
309 |
310 | body {
311 | padding-top: 0;
312 | }
313 |
314 | .subnav {
315 | position: static;
316 | top: auto;
317 | z-index: auto;
318 | width: auto;
319 | height: auto;
320 | background: #fff; /* whole background property since we use a background-image for gradient */
321 | -webkit-box-shadow: none;
322 | -moz-box-shadow: none;
323 | box-shadow: none;
324 | }
325 |
326 | .subnav .nav > li {
327 | float: none;
328 | }
329 |
330 | .subnav .nav > li > a {
331 | border: 0;
332 | }
333 |
334 | .subnav .nav > li + li > a {
335 | border-top: 1px solid #e5e5e5;
336 | }
337 |
338 | .subnav .nav > li:first-child > a,
339 | .subnav .nav > li:first-child > a:hover {
340 | -webkit-border-radius: 4px 4px 0 0;
341 | -moz-border-radius: 4px 4px 0 0;
342 | border-radius: 4px 4px 0 0;
343 | }
344 |
345 | .bsa {
346 | float: none;
347 | }
348 | }
349 |
350 | /* Portrait tablet to landscape and desktop */
351 | @media (min-width: 768px) and (max-width: 979px) {
352 |
353 | .hero-unit {
354 | margin-top: 0;
355 | }
356 |
357 | .thumbnail p {
358 | font-size: 12px;
359 | }
360 |
361 | .thumbnail .btn {
362 | padding: 8px 12px;
363 | font-size: 12px;
364 | }
365 | }
366 |
367 | /* Fixed subnav on scroll, but only for 980px and up (sorry IE!) */
368 | @media (min-width: 980px) {
369 | .subnav-fixed {
370 | position: fixed;
371 | top: 40px;
372 | left: 0;
373 | right: 0;
374 | z-index: 1020; /* 10 less than .navbar-fixed to prevent any overlap */
375 | border-color: #d5d5d5;
376 | border-width: 0 0 1px; /* drop the border on the fixed edges */
377 | -webkit-border-radius: 0;
378 | -moz-border-radius: 0;
379 | border-radius: 0;
380 | -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
381 | -moz-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
382 | box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1);
383 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */
384 | }
385 | .subnav-fixed .nav {
386 | width: 938px;
387 | margin: 0 auto;
388 | padding: 0 1px;
389 | }
390 | .subnav .nav > li:first-child > a,
391 | .subnav .nav > li:first-child > a:hover {
392 | -webkit-border-radius: 0;
393 | -moz-border-radius: 0;
394 | border-radius: 0;
395 | }
396 | }
397 |
398 | @media (min-width: 768px) and (max-width: 979px) {
399 |
400 | /* Remove any padding from the body */
401 | body {
402 | padding-top: 0;
403 | }
404 | }
405 |
406 | @media (min-width: 1210px) {
407 |
408 | .subnav-fixed .nav {
409 | width: 1168px; /* 2px less to account for left/right borders being removed when in fixed mode */
410 | }
411 | }
412 |
--------------------------------------------------------------------------------
/prof.php:
--------------------------------------------------------------------------------
1 | pdo->prepare("SELECT DISTINCT Prof FROM Data WHERE profID = :id");
18 | $raw = $db->pdo->prepare("SELECT courseID, Course, Section, Year, Size, GPA, A, B, C, D, F, W FROM Data WHERE profID = :id");
19 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE profID = :id AND GPA != 0 GROUP BY Prof");
20 |
21 | //execute query and handle error
22 | if (!$raw->execute(array(":id" => $profID)) || !$avg->execute(array(":id" => $profID)) || !$profName->execute(array(":id" => $profID))) {
23 | $error = file_get_contents("404.html");
24 | die($error);
25 | }
26 |
27 | // Get the professor's name
28 | $profName = $profName->fetch(PDO::FETCH_NUM);
29 | $profName = $profName[0];
30 |
31 | //Get the avg
32 | $avg = $avg->fetch(PDO::FETCH_NUM);
33 | ?>
34 |
35 |
36 |
37 |
38 | Course Critique - = $profName ?>
39 |
40 |
41 |
42 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | = $profName ?>
63 |
64 |
65 |
66 |
67 | | Average Marks |
68 | GPA |
69 | A% |
70 | B% |
71 | C% |
72 | D% |
73 | F% |
74 |
75 |
76 |
77 |
78 | |
79 |
80 | = $value ?> |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 | | Course |
92 | Section |
93 | Year |
94 | Size |
95 | GPA |
96 | A% |
97 | B% |
98 | C% |
99 | D% |
100 | F% |
101 | W% |
102 |
103 |
104 |
105 | fetch(PDO::FETCH_NUM)): ?>
106 | ">
107 | | = $row[1] ?> |
108 |
109 | = $row[$i] ?> |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
205 |
206 |
207 |
208 |
209 |
--------------------------------------------------------------------------------
/author/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | About the Critiquers
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
44 |
45 |
46 |
48 |
49 |
57 |
59 |
60 |
61 | 
62 |
63 | SGA Director of IT
64 | Joseph Mattingly
65 |
66 | 
67 | 
68 | 
69 |
70 |
71 |
72 |
73 | 
74 |
75 | SGA IT Specialist - Project Lead
76 | Colin Bookman
77 |
78 | 
79 | 
80 |
81 |
82 |
83 |
84 | 
85 |
86 | Project Designer
87 | Shiv Patel
88 |
89 | 
90 | 
91 | 
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | 
100 |
101 | Creative Director
102 | Max Gluck
103 |
104 | 
105 |
106 |
107 |
108 |
109 | 
110 |
111 | Consultant
112 | Sagar Savla
113 |
114 | 
115 | 
116 | 
117 |
118 |
119 |
120 |
121 | 
122 |
123 | Consultant
124 | Vivek Srinivasan
125 |
126 | 
127 |
128 |
129 |
130 |
131 |
132 | 
133 |
134 | Consultant
135 | Nakul Dureja
136 |
137 | 
138 |
139 |
140 |
141 |
142 |
143 | 
144 |
145 | Software Engineer
146 | Chris Forrence
147 |
148 | 
149 |
150 |
151 |
152 |
153 |
155 |
156 |
162 |
163 |
164 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/default/variables.less:
--------------------------------------------------------------------------------
1 | // Swatch 2.2.1
2 | // Variables
3 | // --------------------------------------------------
4 |
5 |
6 | // Global values
7 | // --------------------------------------------------
8 |
9 |
10 | // Grays
11 | // -------------------------
12 | @black: #000;
13 | @grayDarker: #222;
14 | @grayDark: #333;
15 | @gray: #555;
16 | @grayLight: #999;
17 | @grayLighter: #eee;
18 | @white: #fff;
19 |
20 |
21 | // Accent colors
22 | // -------------------------
23 | @blue: #049cdb;
24 | @blueDark: #0064cd;
25 | @green: #46a546;
26 | @red: #9d261d;
27 | @yellow: #ffc40d;
28 | @orange: #f89406;
29 | @pink: #c3325f;
30 | @purple: #7a43b6;
31 |
32 |
33 | // Scaffolding
34 | // -------------------------
35 | @bodyBackground: @white;
36 | @textColor: @grayDark;
37 |
38 |
39 | // Links
40 | // -------------------------
41 | @linkColor: #08c;
42 | @linkColorHover: darken(@linkColor, 15%);
43 |
44 |
45 | // Typography
46 | // -------------------------
47 | @sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
48 | @serifFontFamily: Georgia, "Times New Roman", Times, serif;
49 | @monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace;
50 |
51 | @baseFontSize: 14px;
52 | @baseFontFamily: @sansFontFamily;
53 | @baseLineHeight: 20px;
54 | @altFontFamily: @serifFontFamily;
55 |
56 | @headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily
57 | @headingsFontWeight: bold; // instead of browser default, bold
58 | @headingsColor: inherit; // empty to use BS default, @textColor
59 |
60 |
61 | // Component sizing
62 | // -------------------------
63 | // Based on 14px font-size and 20px line-height
64 |
65 | @fontSizeLarge: @baseFontSize * 1.25; // ~18px
66 | @fontSizeSmall: @baseFontSize * 0.85; // ~12px
67 | @fontSizeMini: @baseFontSize * 0.75; // ~11px
68 |
69 | @paddingLarge: 11px 19px; // 44px
70 | @paddingSmall: 2px 10px; // 26px
71 | @paddingMini: 1px 6px; // 24px
72 |
73 | @baseBorderRadius: 4px;
74 | @borderRadiusLarge: 6px;
75 | @borderRadiusSmall: 3px;
76 |
77 |
78 | // Tables
79 | // -------------------------
80 | @tableBackground: transparent; // overall background-color
81 | @tableBackgroundAccent: #f9f9f9; // for striping
82 | @tableBackgroundHover: #f5f5f5; // for hover
83 | @tableBorder: #ddd; // table and cell border
84 |
85 | // Buttons
86 | // -------------------------
87 | @btnBackground: @white;
88 | @btnBackgroundHighlight: darken(@white, 10%);
89 | @btnBorder: #bbb;
90 |
91 | @btnPrimaryBackground: @linkColor;
92 | @btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%);
93 |
94 | @btnInfoBackground: #5bc0de;
95 | @btnInfoBackgroundHighlight: #2f96b4;
96 |
97 | @btnSuccessBackground: #62c462;
98 | @btnSuccessBackgroundHighlight: #51a351;
99 |
100 | @btnWarningBackground: lighten(@orange, 15%);
101 | @btnWarningBackgroundHighlight: @orange;
102 |
103 | @btnDangerBackground: #ee5f5b;
104 | @btnDangerBackgroundHighlight: #bd362f;
105 |
106 | @btnInverseBackground: #444;
107 | @btnInverseBackgroundHighlight: @grayDarker;
108 |
109 |
110 | // Forms
111 | // -------------------------
112 | @inputBackground: @white;
113 | @inputBorder: #ccc;
114 | @inputBorderRadius: @baseBorderRadius;
115 | @inputDisabledBackground: @grayLighter;
116 | @formActionsBackground: #f5f5f5;
117 | @inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
118 |
119 |
120 | // Dropdowns
121 | // -------------------------
122 | @dropdownBackground: @white;
123 | @dropdownBorder: rgba(0,0,0,.2);
124 | @dropdownDividerTop: #e5e5e5;
125 | @dropdownDividerBottom: @white;
126 |
127 | @dropdownLinkColor: @grayDark;
128 | @dropdownLinkColorHover: @white;
129 | @dropdownLinkColorActive: @dropdownLinkColor;
130 |
131 | @dropdownLinkBackgroundActive: @linkColor;
132 | @dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive;
133 |
134 |
135 |
136 | // COMPONENT VARIABLES
137 | // --------------------------------------------------
138 |
139 |
140 | // Z-index master list
141 | // -------------------------
142 | // Used for a bird's eye view of components dependent on the z-axis
143 | // Try to avoid customizing these :)
144 | @zindexDropdown: 1000;
145 | @zindexPopover: 1010;
146 | @zindexTooltip: 1030;
147 | @zindexFixedNavbar: 1030;
148 | @zindexModalBackdrop: 1040;
149 | @zindexModal: 1050;
150 |
151 |
152 | // Sprite icons path
153 | // -------------------------
154 | @iconSpritePath: "../img/glyphicons-halflings.png";
155 | @iconWhiteSpritePath: "../img/glyphicons-halflings-white.png";
156 |
157 |
158 | // Input placeholder text color
159 | // -------------------------
160 | @placeholderText: @grayLight;
161 |
162 |
163 | // Hr border color
164 | // -------------------------
165 | @hrBorder: @grayLighter;
166 |
167 |
168 | // Horizontal forms & lists
169 | // -------------------------
170 | @horizontalComponentOffset: 180px;
171 |
172 |
173 | // Wells
174 | // -------------------------
175 | @wellBackground: #f5f5f5;
176 |
177 |
178 | // Navbar
179 | // -------------------------
180 | @navbarCollapseWidth: 979px;
181 | @navbarCollapseDesktopWidth: @navbarCollapseWidth + 1;
182 |
183 | @navbarHeight: 40px;
184 | @navbarBackgroundHighlight: #ffffff;
185 | @navbarBackground: darken(@navbarBackgroundHighlight, 5%);
186 | @navbarBorder: darken(@navbarBackground, 12%);
187 |
188 | @navbarText: #777;
189 | @navbarLinkColor: #777;
190 | @navbarLinkColorHover: @grayDark;
191 | @navbarLinkColorActive: @gray;
192 | @navbarLinkBackgroundHover: transparent;
193 | @navbarLinkBackgroundActive: darken(@navbarBackground, 5%);
194 |
195 | @navbarBrandColor: @navbarLinkColor;
196 |
197 | // Inverted navbar
198 | @navbarInverseBackground: #111111;
199 | @navbarInverseBackgroundHighlight: #222222;
200 | @navbarInverseBorder: #252525;
201 |
202 | @navbarInverseText: @grayLight;
203 | @navbarInverseLinkColor: @grayLight;
204 | @navbarInverseLinkColorHover: @white;
205 | @navbarInverseLinkColorActive: @navbarInverseLinkColorHover;
206 | @navbarInverseLinkBackgroundHover: transparent;
207 | @navbarInverseLinkBackgroundActive: @navbarInverseBackground;
208 |
209 | @navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%);
210 | @navbarInverseSearchBackgroundFocus: @white;
211 | @navbarInverseSearchBorder: @navbarInverseBackground;
212 | @navbarInverseSearchPlaceholderColor: #ccc;
213 |
214 | @navbarInverseBrandColor: @navbarInverseLinkColor;
215 |
216 |
217 | // Pagination
218 | // -------------------------
219 | @paginationBackground: #fff;
220 | @paginationBorder: #ddd;
221 | @paginationActiveBackground: #f5f5f5;
222 |
223 |
224 | // Hero unit
225 | // -------------------------
226 | @heroUnitBackground: @grayLighter;
227 | @heroUnitHeadingColor: inherit;
228 | @heroUnitLeadColor: inherit;
229 |
230 |
231 | // Form states and alerts
232 | // -------------------------
233 | @warningText: #c09853;
234 | @warningBackground: #fcf8e3;
235 | @warningBorder: darken(spin(@warningBackground, -10), 3%);
236 |
237 | @errorText: #b94a48;
238 | @errorBackground: #f2dede;
239 | @errorBorder: darken(spin(@errorBackground, -10), 3%);
240 |
241 | @successText: #468847;
242 | @successBackground: #dff0d8;
243 | @successBorder: darken(spin(@successBackground, -10), 5%);
244 |
245 | @infoText: #3a87ad;
246 | @infoBackground: #d9edf7;
247 | @infoBorder: darken(spin(@infoBackground, -10), 7%);
248 |
249 |
250 | // Tooltips and popovers
251 | // -------------------------
252 | @tooltipColor: #fff;
253 | @tooltipBackground: #000;
254 | @tooltipArrowWidth: 5px;
255 | @tooltipArrowColor: @tooltipBackground;
256 |
257 | @popoverBackground: #fff;
258 | @popoverArrowWidth: 10px;
259 | @popoverArrowColor: #fff;
260 | @popoverTitleBackground: darken(@popoverBackground, 3%);
261 |
262 | // Special enhancement for popovers
263 | @popoverArrowOuterWidth: @popoverArrowWidth + 1;
264 | @popoverArrowOuterColor: rgba(0,0,0,.25);
265 |
266 |
267 |
268 | // GRID
269 | // --------------------------------------------------
270 |
271 |
272 | // Default 940px grid
273 | // -------------------------
274 | @gridColumns: 12;
275 | @gridColumnWidth: 60px;
276 | @gridGutterWidth: 20px;
277 | @gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
278 |
279 | // 1200px min
280 | @gridColumnWidth1200: 70px;
281 | @gridGutterWidth1200: 30px;
282 | @gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1));
283 |
284 | // 768px-979px
285 | @gridColumnWidth768: 42px;
286 | @gridGutterWidth768: 20px;
287 | @gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1));
288 |
289 |
290 | // Fluid grid
291 | // -------------------------
292 | @fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth);
293 | @fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth);
294 |
295 | // 1200px min
296 | @fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200);
297 | @fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200);
298 |
299 | // 768px-979px
300 | @fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768);
301 | @fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768);
302 |
--------------------------------------------------------------------------------
/js/clippy/build/clippy.min.js:
--------------------------------------------------------------------------------
1 | var clippy={};clippy.Agent=function(a,b,c){this.path=a,this._queue=new clippy.Queue($.proxy(this._onQueueEmpty,this)),this._el=$('').hide(),$(document.body).append(this._el),this._animator=new clippy.Animator(this._el,a,b,c),this._balloon=new clippy.Balloon(this._el),this._setupEvents()},clippy.Agent.prototype={gestureAt:function(a,b){var c=this._getDirection(a,b),d="Gesture"+c,e="Look"+c,f=this.hasAnimation(d)?d:e;return this.play(f)},hide:function(a,b){this._hidden=!0;var c=this._el;this.stop();if(a){this._el.hide(),this.stop(),this.pause(),b&&b();return}return this._playInternal("Hide",function(){c.hide(),this.pause(),b&&b()})},moveTo:function(a,b,c){var d=this._getDirection(a,b),e="Move"+d;c===undefined&&(c=1e3),this._addToQueue(function(d){if(c===0){this._el.css({top:b,left:a}),this.reposition(),d();return}if(!this.hasAnimation(e)){this._el.animate({top:b,left:a},c,d);return}var f=$.proxy(function(e,f){f===clippy.Animator.States.EXITED&&d(),f===clippy.Animator.States.WAITING&&this._el.animate({top:b,left:a},c,$.proxy(function(){this._animator.exitAnimation()},this))},this);this._playInternal(e,f)},this)},_playInternal:function(a,b){this._isIdleAnimation()&&this._idleDfd&&this._idleDfd.state()==="pending"&&this._idleDfd.done($.proxy(function(){this._playInternal(a,b)},this)),this._animator.showAnimation(a,b)},play:function(a,b,c){return this.hasAnimation(a)?(b===undefined&&(b=5e3),this._addToQueue(function(d){var e=!1,f=function(a,b){b===clippy.Animator.States.EXITED&&(e=!0,c&&c(),d())};b&&window.setTimeout($.proxy(function(){if(e)return;this._animator.exitAnimation()},this),b),this._playInternal(a,f)},this),!0):!1},show:function(a){this._hidden=!1;if(a){this._el.show(),this.resume(),this._onQueueEmpty();return}if(this._el.css("top")==="auto"||!this._el.css("left")==="auto"){var b=$(window).width()*.8,c=($(window).height()+$(document).scrollTop())*.8;this._el.css({top:c,left:b})}return this.resume(),this.play("Show")},speak:function(a,b){this._addToQueue(function(c){this._balloon.speak(c,a,b)},this)},closeBalloon:function(){this._balloon.hide()},delay:function(a){a=a||250,this._addToQueue(function(b){this._onQueueEmpty(),window.setTimeout(b,a)})},stopCurrent:function(){this._animator.exitAnimation(),this._balloon.close()},stop:function(){this._queue.clear(),this._animator.exitAnimation(),this._balloon.hide()},hasAnimation:function(a){return this._animator.hasAnimation(a)},animations:function(){return this._animator.animations()},animate:function(){var a=this.animations(),b=a[Math.floor(Math.random()*a.length)];return b.indexOf("Idle")===0?this.animate():this.play(b)},_getDirection:function(a,b){var c=this._el.offset(),d=this._el.height(),e=this._el.width(),f=c.left+e/2,g=c.top+d/2,h=g-b,i=f-a,j=Math.round(180*Math.atan2(h,i)/Math.PI);return-45<=j&&j<45?"Right":45<=j&&j<135?"Up":135<=j&&j<=180||-180<=j&&j<-135?"Left":-135<=j&&j<-45?"Down":"Top"},_onQueueEmpty:function(){if(this._hidden||this._isIdleAnimation())return;var a=this._getIdleAnimation();this._idleDfd=$.Deferred(),this._animator.showAnimation(a,$.proxy(this._onIdleComplete,this))},_onIdleComplete:function(a,b){b===clippy.Animator.States.EXITED&&this._idleDfd.resolve()},_isIdleAnimation:function(){var a=this._animator.currentAnimationName;return a&&a.indexOf("Idle")===0},_getIdleAnimation:function(){var a=this.animations(),b=[];for(var c=0;ce&&(h=e-b-j),i-j<0?i=j:i+c+j>d&&(i=d-c-j),this._el.css({left:i,top:h}),this._balloon.reposition()},_onMouseDown:function(a){a.preventDefault(),this._startDrag(a)},_startDrag:function(a){this.pause(),this._balloon.hide(!0),this._offset=this._calculateClickOffset(a),this._moveHandle=$.proxy(this._dragMove,this),this._upHandle=$.proxy(this._finishDrag,this),$(window).on("mousemove",this._moveHandle),$(window).on("mouseup",this._upHandle),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_calculateClickOffset:function(a){var b=a.pageX,c=a.pageY,d=this._el.offset();return{top:c-d.top,left:b-d.left}},_updateLocation:function(){this._el.css({top:this._targetY,left:this._taregtX}),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_dragMove:function(a){a.preventDefault();var b=a.clientX-this._offset.left,c=a.clientY-this._offset.top;this._taregtX=b,this._targetY=c},_finishDrag:function(){window.clearTimeout(this._dragUpdateLoop),$(window).off("mousemove",this._moveHandle),$(window).off("mouseup",this._upHandle),this._balloon.show(),this.reposition(),this.resume()},_addToQueue:function(a,b){b&&(a=$.proxy(a,b)),this._queue.queue(a)},pause:function(){this._animator.pause(),this._balloon.pause()},resume:function(){this._animator.resume(),this._balloon.resume()}},clippy.Animator=function(a,b,c,d){this._el=a,this._data=c,this._path=b,this._currentFrameIndex=0,this._currentFrame=undefined,this._exiting=!1,this._currentAnimation=undefined,this._endCallback=undefined,this._started=!1,this._sounds={},this.currentAnimationName=undefined,this.preloadSounds(d),this._overlays=[this._el];var e=this._el;this._setupElement(this._el);for(var f=1;f"));e.append(g),this._overlays.push(g),e=g}},clippy.Animator.prototype={_setupElement:function(a){var b=this._data.framesize;return a.css("display","none"),a.css({width:b[0],height:b[1]}),a.css("background","url('"+this._path+"/map.png') no-repeat"),a},animations:function(){var a=[],b=this._data.animations;for(var c in b)a.push(c);return a},preloadSounds:function(a){for(var b=0;b=this._currentAnimation.frames.length-1},_step:function(){if(!this._currentAnimation)return;var a=Math.min(this._getNextAnimationFrame(),this._currentAnimation.frames.length-1),b=!this._currentFrame||this._currentFrameIndex!==a;this._currentFrameIndex=a;if(!this._atLastFrame()||!this._currentAnimation.useExitBranching)this._currentFrame=this._currentAnimation.frames[this._currentFrameIndex];this._draw(),this._playSound(),this._loop=window.setTimeout($.proxy(this._step,this),this._currentFrame.duration),this._endCallback&&b&&this._atLastFrame()&&(this._currentAnimation.useExitBranching&&!this._exiting?this._endCallback(this.currentAnimationName,clippy.Animator.States.WAITING):this._endCallback(this.currentAnimationName,clippy.Animator.States.EXITED))},pause:function(){window.clearTimeout(this._loop)},resume:function(){this._step()}},clippy.Animator.States={WAITING:1,EXITED:0},clippy.Balloon=function(a){this._targetEl=a,this._hidden=!0,this._setup()},clippy.Balloon.prototype={WORD_SPEAK_TIME:200,CLOSE_BALLOON_DELAY:2e3,_setup:function(){this._balloon=$(' ').hide(),this._content=this._balloon.find(".clippy-content"),$(document.body).append(this._balloon)},reposition:function(){var a=["top-left","top-right","bottom-left","bottom-right"];for(var b=0;be||i+c+j>d?!0:!1},speak:function(a,b,c){this._hidden=!1,this.show();var d=this._content;d.height("auto"),d.width("auto"),d.text(b),d.height(d.height()),d.width(d.width()),d.text(""),this.reposition(),this._complete=a,this._sayWords(b,c,a)},show:function(){if(this._hidden)return;this._balloon.show()},hide:function(a){if(a){this._balloon.hide();return}this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)},_finishHideBalloon:function(){if(this._active)return;this._balloon.hide(),this._hidden=!0,this._hiding=null},_sayWords:function(a,b,c){this._active=!0,this._hold=b;var d=a.split(/[^\S-]/),e=this.WORD_SPEAK_TIME,f=this._content,g=1;this._addWord=$.proxy(function(){if(!this._active)return;g>d.length?(this._active=!1,this._hold||(c(),this.hide())):(f.text(d.slice(0,g).join(" ")),g++,this._loop=window.setTimeout($.proxy(this._addWord,this),e))},this),this._addWord()},close:function(){this._active?this._hold=!1:this._hold&&this._complete()},pause:function(){window.clearTimeout(this._loop),this._hiding&&(window.clearTimeout(this._hiding),this._hiding=null)},resume:function(){this._addWord&&this._addWord(),this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)}},clippy.BASE_PATH="https://critique.gatech.edu/js/clippy/Agents/",clippy.load=function(a,b,c){var d=clippy.BASE_PATH+a,e=clippy.load._loadMap(d),f=clippy.load._loadAgent(a,d),g=clippy.load._loadSounds(a,d),h;f.done(function(a){h=a});var i;g.done(function(a){i=a});var j=function(){var a=new clippy.Agent(d,h,i);b(a)};$.when(e,f,g).done(j).fail(c)},clippy.load._maps={},clippy.load._loadMap=function(a){var b=clippy.load._maps[a];if(b)return b;b=clippy.load._maps[a]=$.Deferred();var c=a+"/map.png",d=new Image;return d.onload=b.resolve,d.onerror=b.reject,d.setAttribute("src",c),b.promise()},clippy.load._sounds={},clippy.load._loadSounds=function(a,b){var c=clippy.load._sounds[a];if(c)return c;c=clippy.load._sounds[a]=$.Deferred();var d=document.createElement("audio"),e=!!d.canPlayType&&""!=d.canPlayType("audio/mpeg"),f=!!d.canPlayType&&""!=d.canPlayType('audio/ogg; codecs="vorbis"');if(!e&&!f)c.resolve({});else{var g=b+(e?"/sounds-mp3.js":"/sounds-ogg.js");clippy.load._loadScript(g)}return c.promise()},clippy.load._data={},clippy.load._loadAgent=function(a,b){var c=clippy.load._data[a];if(c)return c;c=clippy.load._getAgentDfd(a);var d=b+"/agent.js";return clippy.load._loadScript(d),c.promise()},clippy.load._loadScript=function(a){var b=document.createElement("script");b.setAttribute("src",a),b.setAttribute("async","async"),b.setAttribute("type","text/javascript"),document.head.appendChild(b)},clippy.load._getAgentDfd=function(a){var b=clippy.load._data[a];return b||(b=clippy.load._data[a]=$.Deferred()),b},clippy.ready=function(a,b){var c=clippy.load._getAgentDfd(a);c.resolve(b)},clippy.soundsReady=function(a,b){var c=clippy.load._sounds[a];c||(c=clippy.load._sounds[a]=$.Deferred()),c.resolve(b)},clippy.Queue=function(a){this._queue=[],this._onEmptyCallback=a},clippy.Queue.prototype={queue:function(a){this._queue.push(a),this._queue.length===1&&!this._active&&this._progressQueue()},_progressQueue:function(){if(!this._queue.length){this._onEmptyCallback();return}var a=this._queue.shift();this._active=!0;var b=$.proxy(this.next,this);a(b)},clear:function(){this._queue=[]},next:function(){this._active=!1,this._progressQueue()}}
--------------------------------------------------------------------------------
/js/clippy/clippy.min.js-backup:
--------------------------------------------------------------------------------
1 | var clippy={};clippy.Agent=function(a,b,c){this.path=a,this._queue=new clippy.Queue($.proxy(this._onQueueEmpty,this)),this._el=$('').hide(),$(document.body).append(this._el),this._animator=new clippy.Animator(this._el,a,b,c),this._balloon=new clippy.Balloon(this._el),this._setupEvents()},clippy.Agent.prototype={gestureAt:function(a,b){var c=this._getDirection(a,b),d="Gesture"+c,e="Look"+c,f=this.hasAnimation(d)?d:e;return this.play(f)},hide:function(a,b){this._hidden=!0;var c=this._el;this.stop();if(a){this._el.hide(),this.stop(),this.pause(),b&&b();return}return this._playInternal("Hide",function(){c.hide(),this.pause(),b&&b()})},moveTo:function(a,b,c){var d=this._getDirection(a,b),e="Move"+d;c===undefined&&(c=1e3),this._addToQueue(function(d){if(c===0){this._el.css({top:b,left:a}),this.reposition(),d();return}if(!this.hasAnimation(e)){this._el.animate({top:b,left:a},c,d);return}var f=$.proxy(function(e,f){f===clippy.Animator.States.EXITED&&d(),f===clippy.Animator.States.WAITING&&this._el.animate({top:b,left:a},c,$.proxy(function(){this._animator.exitAnimation()},this))},this);this._playInternal(e,f)},this)},_playInternal:function(a,b){this._isIdleAnimation()&&this._idleDfd&&this._idleDfd.state()==="pending"&&this._idleDfd.done($.proxy(function(){this._playInternal(a,b)},this)),this._animator.showAnimation(a,b)},play:function(a,b,c){return this.hasAnimation(a)?(b===undefined&&(b=5e3),this._addToQueue(function(d){var e=!1,f=function(a,b){b===clippy.Animator.States.EXITED&&(e=!0,c&&c(),d())};b&&window.setTimeout($.proxy(function(){if(e)return;this._animator.exitAnimation()},this),b),this._playInternal(a,f)},this),!0):!1},show:function(a){this._hidden=!1;if(a){this._el.show(),this.resume(),this._onQueueEmpty();return}if(this._el.css("top")==="auto"||!this._el.css("left")==="auto"){var b=$(window).width()*.8,c=($(window).height()+$(document).scrollTop())*.8;this._el.css({top:c,left:b})}return this.resume(),this.play("Show")},speak:function(a,b){this._addToQueue(function(c){this._balloon.speak(c,a,b)},this)},closeBalloon:function(){this._balloon.hide()},delay:function(a){a=a||250,this._addToQueue(function(b){this._onQueueEmpty(),window.setTimeout(b,a)})},stopCurrent:function(){this._animator.exitAnimation(),this._balloon.close()},stop:function(){this._queue.clear(),this._animator.exitAnimation(),this._balloon.hide()},hasAnimation:function(a){return this._animator.hasAnimation(a)},animations:function(){return this._animator.animations()},animate:function(){var a=this.animations(),b=a[Math.floor(Math.random()*a.length)];return b.indexOf("Idle")===0?this.animate():this.play(b)},_getDirection:function(a,b){var c=this._el.offset(),d=this._el.height(),e=this._el.width(),f=c.left+e/2,g=c.top+d/2,h=g-b,i=f-a,j=Math.round(180*Math.atan2(h,i)/Math.PI);return-45<=j&&j<45?"Right":45<=j&&j<135?"Up":135<=j&&j<=180||-180<=j&&j<-135?"Left":-135<=j&&j<-45?"Down":"Top"},_onQueueEmpty:function(){if(this._hidden||this._isIdleAnimation())return;var a=this._getIdleAnimation();this._idleDfd=$.Deferred(),this._animator.showAnimation(a,$.proxy(this._onIdleComplete,this))},_onIdleComplete:function(a,b){b===clippy.Animator.States.EXITED&&this._idleDfd.resolve()},_isIdleAnimation:function(){var a=this._animator.currentAnimationName;return a&&a.indexOf("Idle")===0},_getIdleAnimation:function(){var a=this.animations(),b=[];for(var c=0;ce&&(h=e-b-j),i-j<0?i=j:i+c+j>d&&(i=d-c-j),this._el.css({left:i,top:h}),this._balloon.reposition()},_onMouseDown:function(a){a.preventDefault(),this._startDrag(a)},_startDrag:function(a){this.pause(),this._balloon.hide(!0),this._offset=this._calculateClickOffset(a),this._moveHandle=$.proxy(this._dragMove,this),this._upHandle=$.proxy(this._finishDrag,this),$(window).on("mousemove",this._moveHandle),$(window).on("mouseup",this._upHandle),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_calculateClickOffset:function(a){var b=a.pageX,c=a.pageY,d=this._el.offset();return{top:c-d.top,left:b-d.left}},_updateLocation:function(){this._el.css({top:this._targetY,left:this._taregtX}),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_dragMove:function(a){a.preventDefault();var b=a.clientX-this._offset.left,c=a.clientY-this._offset.top;this._taregtX=b,this._targetY=c},_finishDrag:function(){window.clearTimeout(this._dragUpdateLoop),$(window).off("mousemove",this._moveHandle),$(window).off("mouseup",this._upHandle),this._balloon.show(),this.reposition(),this.resume()},_addToQueue:function(a,b){b&&(a=$.proxy(a,b)),this._queue.queue(a)},pause:function(){this._animator.pause(),this._balloon.pause()},resume:function(){this._animator.resume(),this._balloon.resume()}},clippy.Animator=function(a,b,c,d){this._el=a,this._data=c,this._path=b,this._currentFrameIndex=0,this._currentFrame=undefined,this._exiting=!1,this._currentAnimation=undefined,this._endCallback=undefined,this._started=!1,this._sounds={},this.currentAnimationName=undefined,this.preloadSounds(d),this._overlays=[this._el];var e=this._el;this._setupElement(this._el);for(var f=1;f"));e.append(g),this._overlays.push(g),e=g}},clippy.Animator.prototype={_setupElement:function(a){var b=this._data.framesize;return a.css("display","none"),a.css({width:b[0],height:b[1]}),a.css("background","url('"+this._path+"/map.png') no-repeat"),a},animations:function(){var a=[],b=this._data.animations;for(var c in b)a.push(c);return a},preloadSounds:function(a){for(var b=0;b=this._currentAnimation.frames.length-1},_step:function(){if(!this._currentAnimation)return;var a=Math.min(this._getNextAnimationFrame(),this._currentAnimation.frames.length-1),b=!this._currentFrame||this._currentFrameIndex!==a;this._currentFrameIndex=a;if(!this._atLastFrame()||!this._currentAnimation.useExitBranching)this._currentFrame=this._currentAnimation.frames[this._currentFrameIndex];this._draw(),this._playSound(),this._loop=window.setTimeout($.proxy(this._step,this),this._currentFrame.duration),this._endCallback&&b&&this._atLastFrame()&&(this._currentAnimation.useExitBranching&&!this._exiting?this._endCallback(this.currentAnimationName,clippy.Animator.States.WAITING):this._endCallback(this.currentAnimationName,clippy.Animator.States.EXITED))},pause:function(){window.clearTimeout(this._loop)},resume:function(){this._step()}},clippy.Animator.States={WAITING:1,EXITED:0},clippy.Balloon=function(a){this._targetEl=a,this._hidden=!0,this._setup()},clippy.Balloon.prototype={WORD_SPEAK_TIME:200,CLOSE_BALLOON_DELAY:2e3,_setup:function(){this._balloon=$(' ').hide(),this._content=this._balloon.find(".clippy-content"),$(document.body).append(this._balloon)},reposition:function(){var a=["top-left","top-right","bottom-left","bottom-right"];for(var b=0;be||i+c+j>d?!0:!1},speak:function(a,b,c){this._hidden=!1,this.show();var d=this._content;d.height("auto"),d.width("auto"),d.text(b),d.height(d.height()),d.width(d.width()),d.text(""),this.reposition(),this._complete=a,this._sayWords(b,c,a)},show:function(){if(this._hidden)return;this._balloon.show()},hide:function(a){if(a){this._balloon.hide();return}this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)},_finishHideBalloon:function(){if(this._active)return;this._balloon.hide(),this._hidden=!0,this._hiding=null},_sayWords:function(a,b,c){this._active=!0,this._hold=b;var d=a.split(/[^\S-]/),e=this.WORD_SPEAK_TIME,f=this._content,g=1;this._addWord=$.proxy(function(){if(!this._active)return;g>d.length?(this._active=!1,this._hold||(c(),this.hide())):(f.text(d.slice(0,g).join(" ")),g++,this._loop=window.setTimeout($.proxy(this._addWord,this),e))},this),this._addWord()},close:function(){this._active?this._hold=!1:this._hold&&this._complete()},pause:function(){window.clearTimeout(this._loop),this._hiding&&(window.clearTimeout(this._hiding),this._hiding=null)},resume:function(){this._addWord&&this._addWord(),this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)}},clippy.BASE_PATH="http://critique.gatech.edu/js/clippy/Agents/",clippy.load=function(a,b,c){var d=clippy.BASE_PATH+a,e=clippy.load._loadMap(d),f=clippy.load._loadAgent(a,d),g=clippy.load._loadSounds(a,d),h;f.done(function(a){h=a});var i;g.done(function(a){i=a});var j=function(){var a=new clippy.Agent(d,h,i);b(a)};$.when(e,f,g).done(j).fail(c)},clippy.load._maps={},clippy.load._loadMap=function(a){var b=clippy.load._maps[a];if(b)return b;b=clippy.load._maps[a]=$.Deferred();var c=a+"/map.png",d=new Image;return d.onload=b.resolve,d.onerror=b.reject,d.setAttribute("src",c),b.promise()},clippy.load._sounds={},clippy.load._loadSounds=function(a,b){var c=clippy.load._sounds[a];if(c)return c;c=clippy.load._sounds[a]=$.Deferred();var d=document.createElement("audio"),e=!!d.canPlayType&&""!=d.canPlayType("audio/mpeg"),f=!!d.canPlayType&&""!=d.canPlayType('audio/ogg; codecs="vorbis"');if(!e&&!f)c.resolve({});else{var g=b+(e?"/sounds-mp3.js":"/sounds-ogg.js");clippy.load._loadScript(g)}return c.promise()},clippy.load._data={},clippy.load._loadAgent=function(a,b){var c=clippy.load._data[a];if(c)return c;c=clippy.load._getAgentDfd(a);var d=b+"/agent.js";return clippy.load._loadScript(d),c.promise()},clippy.load._loadScript=function(a){var b=document.createElement("script");b.setAttribute("src",a),b.setAttribute("async","async"),b.setAttribute("type","text/javascript"),document.head.appendChild(b)},clippy.load._getAgentDfd=function(a){var b=clippy.load._data[a];return b||(b=clippy.load._data[a]=$.Deferred()),b},clippy.ready=function(a,b){var c=clippy.load._getAgentDfd(a);c.resolve(b)},clippy.soundsReady=function(a,b){var c=clippy.load._sounds[a];c||(c=clippy.load._sounds[a]=$.Deferred()),c.resolve(b)},clippy.Queue=function(a){this._queue=[],this._onEmptyCallback=a},clippy.Queue.prototype={queue:function(a){this._queue.push(a),this._queue.length===1&&!this._active&&this._progressQueue()},_progressQueue:function(){if(!this._queue.length){this._onEmptyCallback();return}var a=this._queue.shift();this._active=!0;var b=$.proxy(this.next,this);a(b)},clear:function(){this._queue=[]},next:function(){this._active=!1,this._progressQueue()}}
--------------------------------------------------------------------------------
/js/clippy/src/agent.js:
--------------------------------------------------------------------------------
1 | var clippy = {};
2 |
3 | /******
4 | *
5 | *
6 | * @constructor
7 | */
8 | clippy.Agent = function (path, data, sounds) {
9 | this.path = path;
10 |
11 | this._queue = new clippy.Queue($.proxy(this._onQueueEmpty, this));
12 |
13 | this._el = $('').hide();
14 |
15 | $(document.body).append(this._el);
16 |
17 | this._animator = new clippy.Animator(this._el, path, data, sounds);
18 |
19 | this._balloon = new clippy.Balloon(this._el);
20 |
21 | this._setupEvents();
22 | };
23 |
24 | clippy.Agent.prototype = {
25 |
26 | /**************************** API ************************************/
27 |
28 | /***
29 | *
30 | * @param {Number} x
31 | * @param {Number} y
32 | */
33 | gestureAt:function (x, y) {
34 | var d = this._getDirection(x, y);
35 | var gAnim = 'Gesture' + d;
36 | var lookAnim = 'Look' + d;
37 |
38 | var animation = this.hasAnimation(gAnim) ? gAnim : lookAnim;
39 | return this.play(animation);
40 | },
41 |
42 | /***
43 | *
44 | * @param {Boolean=} fast
45 | *
46 | */
47 | hide:function (fast, callback) {
48 | this._hidden = true;
49 | var el = this._el;
50 | this.stop();
51 | if (fast) {
52 | this._el.hide();
53 | this.stop();
54 | this.pause();
55 | if (callback) callback();
56 | return;
57 | }
58 |
59 | return this._playInternal('Hide', function () {
60 | el.hide();
61 | this.pause();
62 | if (callback) callback();
63 | })
64 | },
65 |
66 |
67 | moveTo:function (x, y, duration) {
68 | var dir = this._getDirection(x, y);
69 | var anim = 'Move' + dir;
70 | if (duration === undefined) duration = 1000;
71 |
72 | this._addToQueue(function (complete) {
73 | // the simple case
74 | if (duration === 0) {
75 | this._el.css({top:y, left:x});
76 | this.reposition();
77 | complete();
78 | return;
79 | }
80 |
81 | // no animations
82 | if (!this.hasAnimation(anim)) {
83 | this._el.animate({top:y, left:x}, duration, complete);
84 | return;
85 | }
86 |
87 | var callback = $.proxy(function (name, state) {
88 | // when exited, complete
89 | if (state === clippy.Animator.States.EXITED) {
90 | complete();
91 | }
92 | // if waiting,
93 | if (state === clippy.Animator.States.WAITING) {
94 | this._el.animate({top:y, left:x}, duration, $.proxy(function () {
95 | // after we're done with the movement, do the exit animation
96 | this._animator.exitAnimation();
97 | }, this));
98 | }
99 |
100 | }, this);
101 |
102 | this._playInternal(anim, callback);
103 | }, this);
104 | },
105 |
106 | _playInternal:function (animation, callback) {
107 |
108 | // if we're inside an idle animation,
109 | if (this._isIdleAnimation() && this._idleDfd && this._idleDfd.state() === 'pending') {
110 | this._idleDfd.done($.proxy(function () {
111 | this._playInternal(animation, callback);
112 | }, this))
113 | }
114 |
115 | this._animator.showAnimation(animation, callback);
116 | },
117 |
118 | play:function (animation, timeout, cb) {
119 | if (!this.hasAnimation(animation)) return false;
120 |
121 | if (timeout === undefined) timeout = 5000;
122 |
123 |
124 | this._addToQueue(function (complete) {
125 | var completed = false;
126 | // handle callback
127 | var callback = function (name, state) {
128 | if (state === clippy.Animator.States.EXITED) {
129 | completed = true;
130 | if (cb) cb();
131 | complete();
132 | }
133 | };
134 |
135 | // if has timeout, register a timeout function
136 | if (timeout) {
137 | window.setTimeout($.proxy(function () {
138 | if (completed) return;
139 | // exit after timeout
140 | this._animator.exitAnimation();
141 | }, this), timeout)
142 | }
143 |
144 | this._playInternal(animation, callback);
145 | }, this);
146 |
147 | return true;
148 | },
149 |
150 | /***
151 | *
152 | * @param {Boolean=} fast
153 | */
154 | show:function (fast) {
155 |
156 | this._hidden = false;
157 | if (fast) {
158 | this._el.show();
159 | this.resume();
160 | this._onQueueEmpty();
161 | return;
162 | }
163 |
164 | if (this._el.css('top') === 'auto' || !this._el.css('left') === 'auto') {
165 | var left = $(window).width() * 0.8;
166 | var top = ($(window).height() + $(document).scrollTop()) * 0.8;
167 | this._el.css({top:top, left:left});
168 | }
169 |
170 | this.resume();
171 | return this.play('Show');
172 | },
173 |
174 | /***
175 | *
176 | * @param {String} text
177 | */
178 | speak:function (text, hold) {
179 | this._addToQueue(function (complete) {
180 | this._balloon.speak(complete, text, hold);
181 | }, this);
182 | },
183 |
184 |
185 | /***
186 | * Close the current balloon
187 | */
188 | closeBalloon:function () {
189 | this._balloon.hide();
190 | },
191 |
192 | delay:function (time) {
193 | time = time || 250;
194 |
195 | this._addToQueue(function (complete) {
196 | this._onQueueEmpty();
197 | window.setTimeout(complete, time);
198 | });
199 | },
200 |
201 | /***
202 | * Skips the current animation
203 | */
204 | stopCurrent:function () {
205 | this._animator.exitAnimation();
206 | this._balloon.close();
207 | },
208 |
209 |
210 | stop:function () {
211 | // clear the queue
212 | this._queue.clear();
213 | this._animator.exitAnimation();
214 | this._balloon.hide();
215 | },
216 |
217 | /***
218 | *
219 | * @param {String} name
220 | * @returns {Boolean}
221 | */
222 | hasAnimation:function (name) {
223 | return this._animator.hasAnimation(name);
224 | },
225 |
226 | /***
227 | * Gets a list of animation names
228 | *
229 | * @return {Array.}
230 | */
231 | animations:function () {
232 | return this._animator.animations();
233 | },
234 |
235 | /***
236 | * Play a random animation
237 | * @return {jQuery.Deferred}
238 | */
239 | animate:function () {
240 | var animations = this.animations();
241 | var anim = animations[Math.floor(Math.random() * animations.length)];
242 | // skip idle animations
243 | if (anim.indexOf('Idle') === 0) {
244 | return this.animate();
245 | }
246 | return this.play(anim);
247 | },
248 |
249 | /**************************** Utils ************************************/
250 |
251 | /***
252 | *
253 | * @param {Number} x
254 | * @param {Number} y
255 | * @return {String}
256 | * @private
257 | */
258 | _getDirection:function (x, y) {
259 | var offset = this._el.offset();
260 | var h = this._el.height();
261 | var w = this._el.width();
262 |
263 | var centerX = (offset.left + w / 2);
264 | var centerY = (offset.top + h / 2);
265 |
266 |
267 | var a = centerY - y;
268 | var b = centerX - x;
269 |
270 | var r = Math.round((180 * Math.atan2(a, b)) / Math.PI);
271 |
272 | // Left and Right are for the character, not the screen :-/
273 | if (-45 <= r && r < 45) return 'Right';
274 | if (45 <= r && r < 135) return 'Up';
275 | if (135 <= r && r <= 180 || -180 <= r && r < -135) return 'Left';
276 | if (-135 <= r && r < -45) return 'Down';
277 |
278 | // sanity check
279 | return 'Top';
280 | },
281 |
282 | /**************************** Queue and Idle handling ************************************/
283 |
284 | /***
285 | * Handle empty queue.
286 | * We need to transition the animation to an idle state
287 | * @private
288 | */
289 | _onQueueEmpty:function () {
290 | if (this._hidden || this._isIdleAnimation()) return;
291 | var idleAnim = this._getIdleAnimation();
292 | this._idleDfd = $.Deferred();
293 |
294 | this._animator.showAnimation(idleAnim, $.proxy(this._onIdleComplete, this));
295 | },
296 |
297 | _onIdleComplete:function (name, state) {
298 | if (state === clippy.Animator.States.EXITED) {
299 | this._idleDfd.resolve();
300 | }
301 | },
302 |
303 |
304 | /***
305 | * Is the current animation is Idle?
306 | * @return {Boolean}
307 | * @private
308 | */
309 | _isIdleAnimation:function () {
310 | var c = this._animator.currentAnimationName;
311 | return c && c.indexOf('Idle') === 0;
312 | },
313 |
314 |
315 | /**
316 | * Gets a random Idle animation
317 | * @return {String}
318 | * @private
319 | */
320 | _getIdleAnimation:function () {
321 | var animations = this.animations();
322 | var r = [];
323 | for (var i = 0; i < animations.length; i++) {
324 | var a = animations[i];
325 | if (a.indexOf('Idle') === 0) {
326 | r.push(a);
327 | }
328 | }
329 |
330 | // pick one
331 | var idx = Math.floor(Math.random() * r.length);
332 | return r[idx];
333 | },
334 |
335 | /**************************** Events ************************************/
336 |
337 | _setupEvents:function () {
338 | $(window).on('resize', $.proxy(this.reposition, this));
339 |
340 | this._el.on('mousedown', $.proxy(this._onMouseDown, this));
341 |
342 | this._el.on('dblclick', $.proxy(this._onDoubleClick, this));
343 | },
344 |
345 | _onDoubleClick:function () {
346 | if (!this.play('ClickedOn')) {
347 | this.animate();
348 | }
349 | },
350 |
351 | reposition:function () {
352 | if (!this._el.is(':visible')) return;
353 | var o = this._el.offset();
354 | var bH = this._el.outerHeight();
355 | var bW = this._el.outerWidth();
356 |
357 | var wW = $(window).width();
358 | var wH = $(window).height();
359 | var sT = $(window).scrollTop();
360 | var sL = $(window).scrollLeft();
361 |
362 | var top = o.top - sT;
363 | var left = o.left - sL;
364 | var m = 5;
365 | if (top - m < 0) {
366 | top = m;
367 | } else if ((top + bH + m) > wH) {
368 | top = wH - bH - m;
369 | }
370 |
371 | if (left - m < 0) {
372 | left = m;
373 | } else if (left + bW + m > wW) {
374 | left = wW - bW - m;
375 | }
376 |
377 | this._el.css({left:left, top:top});
378 | // reposition balloon
379 | this._balloon.reposition();
380 | },
381 |
382 | _onMouseDown:function (e) {
383 | e.preventDefault();
384 | this._startDrag(e);
385 | },
386 |
387 |
388 | /**************************** Drag ************************************/
389 |
390 | _startDrag:function (e) {
391 | // pause animations
392 | this.pause();
393 | this._balloon.hide(true);
394 | this._offset = this._calculateClickOffset(e);
395 |
396 | this._moveHandle = $.proxy(this._dragMove, this);
397 | this._upHandle = $.proxy(this._finishDrag, this);
398 |
399 | $(window).on('mousemove', this._moveHandle);
400 | $(window).on('mouseup', this._upHandle);
401 |
402 | this._dragUpdateLoop = window.setTimeout($.proxy(this._updateLocation, this), 10);
403 | },
404 |
405 | _calculateClickOffset:function (e) {
406 | var mouseX = e.pageX;
407 | var mouseY = e.pageY;
408 | var o = this._el.offset();
409 | return {
410 | top:mouseY - o.top,
411 | left:mouseX - o.left
412 | }
413 |
414 | },
415 |
416 | _updateLocation:function () {
417 | this._el.css({top:this._targetY, left:this._targetX});
418 | this._dragUpdateLoop = window.setTimeout($.proxy(this._updateLocation, this), 10);
419 | },
420 |
421 | _dragMove:function (e) {
422 | e.preventDefault();
423 | var x = e.clientX - this._offset.left;
424 | var y = e.clientY - this._offset.top;
425 | this._targetX = x;
426 | this._targetY = y;
427 | },
428 |
429 | _finishDrag:function () {
430 | window.clearTimeout(this._dragUpdateLoop);
431 | // remove handles
432 | $(window).off('mousemove', this._moveHandle);
433 | $(window).off('mouseup', this._upHandle);
434 | // resume animations
435 | this._balloon.show();
436 | this.reposition();
437 | this.resume();
438 |
439 | },
440 |
441 | _addToQueue:function (func, scope) {
442 | if (scope) func = $.proxy(func, scope);
443 | this._queue.queue(func);
444 | },
445 |
446 | /**************************** Pause and Resume ************************************/
447 |
448 | pause:function () {
449 | this._animator.pause();
450 | this._balloon.pause();
451 |
452 | },
453 |
454 | resume:function () {
455 | this._animator.resume();
456 | this._balloon.resume();
457 | }
458 |
459 | };
460 |
--------------------------------------------------------------------------------
/default/bootstrap-responsive.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.2.2
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */@-ms-viewport{width:device-width}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
10 |
--------------------------------------------------------------------------------
/js/clippy/Agents/Clippy/sounds-mp3.js:
--------------------------------------------------------------------------------
1 | clippy.soundsReady('Clippy', {'1':'data:audio/mpeg;base64,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','2':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAsAAAUZADMzMzMzMzMzM0dHR0dHR0dHR1xcXFxcXFxcXHBwcHBwcHBwcIWFhYWFhYWFhZmZmZmZmZmZma6urq6urq6ursLCwsLCwsLCwtfX19fX19fX1+vr6+vr6+vr6////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAERgCxlVBGABpeOEAAQEB+CByCETn3ZQEwfB94IA+D4Ph8Rg/BAMeDgIHOoMet/+D4IHPLg/B8H/E4P5cHwfBwEAQBDzn3fynl3//ggrfoNfAMmppHbcjFOkREnlKl3EWUWcP/+MixBYXygrsAYMoADJOOPZBEMEGynGmcxHQSdnQz0LSJndrpxAwldtSLftPIssh2noyPZBHNi7wneDYIgFDREVPO8gaGPzr5SAYuwUHf1f/hYc8KvXVqqmazxvyD9Vh5qwPHcpUUKRM/+MgxBIWmVbZi8MYANAIHsbKDBp0kigU/CrxyjU4wMur/5mO1VcrhQ0WSCo8sVO5FT4KuWE8OFgaPFeDQMnTtzXckE3ezhoaeCgURjRqx0qGv/d/uUrRHxbLSRUikq9WmJNhVUxjqjP/4yLEEhhh/rDCSMaYSq5MKUTkEUBEt4VFEsRdKhhRsBAWFUyZDvlqFAc+W5QCPyz857ExlIzQvOMZcqleUBNK0iIBNBqJopLXuc+vRlk0aEWI72sb2Wt/c4n9gEotfYCYcYVVoZSGAg7/4yDEDBawsqDKGMZMDUMUagJWplWxlBCuQTsKMGzBPWJwZERNaBYubHB4KHWzqa1xAIHiEOgZo0JEQ8wXAyFNehy0H2Lok+gpQ526uPrRu1uFvS4XculbXf0srh//wJ5hbCsZUEhRqP/jIsQME9AuoMoQRAARmnkToWeDFqaT8WeA1lC0UeZi9k+KiECKKo3UqFN0kapQkJpXEM7ZPtHdiE77LGNfTUqPsWBEajbnrNZBNjVy9xRqakv///9lZZ0z2BTeWaEowJg9UBmhA84+Hv/jIMQYFGheqZQIxiigaWHKCLybxzRUMPTeah5tAwHjLgyRiYIIa+xSVqKp8xFAOlSqdrPftUldC7ZmRRMpU+99yDSf/Y9dBoqqqfIdKiNIO0Lg2BBUCC4DEoGQpTSgYFz0wBDYIvYg/+MixCEUqAahkgBEAKnwoJhPIlUHzh9WPeGHrPUFXvt1HETKDTDdMTbmXTECDUJlUzyid/Why419qUKSk19KB3//8GST5FOcW4RCyd0kJxA57iaG3XMjgxKCp8BtWfEFCb19Vx/eyHyL/+MgxCoUcJ6kAUEQADuIHwiFwIJ2H5RY51z3ROQCwAAZRlsPOWWBAToUTKCeGFr+gPkBAJ4CIYYIBgQCyBCb1XyhPMJCb8HscB7/jw8OiKFP/NOKnkV//c0bDYqKRt//joiuAKDwVA//4yLEMxijbpj9gjgBhkB3//8fOMc0IQlZRQItfp//7IPD5Sw2KCUxopLJ////+OkUKmTXKjhVUGzoJ3AqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yDELAAAA0gBwAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','3':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAsAAAUZADMzMzMzMzMzM0dHR0dHR0dHR1xcXFxcXFxcXHBwcHBwcHBwcIWFhYWFhYWFhZmZmZmZmZmZma6urq6urq6ursLCwsLCwsLCwtfX19fX19fX1+vr6+vr6+vr6////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEkB+eAlGSAIn//aP4jO93bXbEAAAAAgeCAYJGHfLggCAIAgCYPn8oCAYQX+c6wfwQd///E4EBAEHcoCAJg+D4Pn//gg4oCH/4P8oCDsMeJwfQ89XeJbWwxIOXMB8lFxKUAIC/+MixBIU4JasAYZIAMszld2+yeo2QEYqJab3FRVmRR45aj41iHXpcezzNNFEVeZLMTHnmTNS0Z3CBsYhlnMmmlFuhzvYRvF21r87JyKplakAKqr7j9bzuHJEkb30znIvIxgcXJUF3YAq/+MgxBoZiP6pk89AAM5oysIDRQUIHB0FXPhYieKdd7qbtu0XciXoqW95pyErsOPYVehpsHTwCGmxFFK0OJHHvXJs3re9rK5XajliGN3bOsi77967FtSLMfQq4D/41inbGjkCtnkMZXX/4yLEDhfYpqzKHh5M5qXLARxpIjapmWpOm0lA8B5Hg2u6q9yc9z41SYwYA8fFBV5xziZ8o5LE1urymoHGOsJVNTaj7cwbRa9VLdleK1q0JPSK7X2dNiscrWmb7EC9VZAACqqqnJzkMt7/4yDEChbw7rmUZgxwpIFYJ0nF8AZAYsChNfQ0BaNX60EcYvHotT1r7sZVr6AqrJtxusme8F3rP+Z1FaKhpj0Xm1T6xrFr0Vq3bS2iTOeR1fu269/3/Z+v9VNcl33opbEAATLdtttqrv/jIsQJFYia1l4zzEzYEoUsS8Vj5mLELOKSiXCEzRXEdvpnma7LLxiR4GwTCaQCeYHSI5ryqAUIjluQy/4oh91NNHRsJDbu39V0dU5aEspOsr9NdCquPZ9X9aqNAFS222222qVCNkVSB//jIMQOFHBe8l4IxiqGoZiXwJAmEJcRLAYQPC+5pRT09SHYbKRZE4lyHMMqHbDBEsTchU0hiHVTStuw/t0Of0CJC219FOd67e0UdUeSiUueSgX/eV9lIOKQsyUyACiFtDmxvQxjjVc4/+MixBcUiHKoyhvGSCQUjUAKZQmWvQkWfZO5JpxOxJpa0UBZIfaetb1elgx7Hp6ERZuXfcZQEnWvOWLaqvpZal9VWukffHu0VaqqqRGP//5FCIiB0Mno4YzELOHhCu5Qo9zlvXURtCCG/+MgxCATkFqoVUkQAIXSzQdYdvkw7quFkUKZFiUbIk1PM0OFHLc6srWpp2mR93oRnmVOYadsXkaN/ZpVAAggQAEScnCUPETCmBZ9B8v8487/NSrf+QmExzr/+QlDyEtN//wlCcIIbjj/4yLELBczdogVilAASkxqf//qLmIR6RKzCsI5F///+4lFgbiqlCcViYmFYjZP////yIvOIdDTTEPMVpEPnUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/4yDEKwAAA0gBwAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','4':'data:audio/mpeg;base64,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','5':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAkAAARIADw8PDw8PDw8PDw8VVVVVVVVVVVVVVVtbW1tbW1tbW1tbYaGhoaGhoaGhoaGnp6enp6enp6enp62tra2tra2tra2ts/Pz8/Pz8/Pz8/P5+fn5+fn5+fn5+f//////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAE7nidAFBEAD/gAv/jG/1PnOc/5znOc53b/ITOc53/zgAAII055z/+QhCEIc5zvoQDFuIAQBA/BB2D79QIAgCYPn/xIcxAD4Pn/4gBBwOAgc/qBAMQxggVV/Pc++tvRmalfpM/+MixAwUMhq4AYFQANFSzKe6k7GmLCQSSqERG1RYLI46h4s5osGDgiiUqQ2M9Dj1OMZVc8fqcTmuYTohImqegtqTNCwu4TChX/zjP1OZ/6vvpnLbbbboqkjZtTsrV1NKyUHAV+S0JCRN/+MgxBcaAg6+V8JAAMwa0ptbVUPD3N99/8XdfRIuFZ6xIJSYb+u55lY4Xhvqf2uZNq4nYf3dxf7GnmNsULVDlCMilwXU4q4UmEZokSS2lAqtNDCTFR6337V2jWL3m7//5A7miSjMpZL/4yLEChXRarGUCMaUAihSZnsZ0yQF+TmiddxYgAEIiIiO/E+aIhFyQHTtUtRTGBgwpCCEyR4KAIDPQiL8XADBUTtZUK6iTOxN7HPtplyFf7Siv0bEXf27GLpqcul2kAac7pfhowoUMRT/4yDEDheBErZcGYxwZOOaSZLvKLRp1SRCc+HBSW55ma3tXeZqqpJ581kmyx0isFTtqBKDTxQUzrgqRkKWUsA8JW1C+bbfRt1RoCetSbGOQJXyKfYe+rQt0XchyOnDf//fb7a2SgD7kP/jIsQLFHE2+l4IxnLGWYiXd7OX0RNNAjmEimZ17CqbHH9DEG9dKT1ziuaCATHyDir4rIDZIYNcKIWEVOStSe+XA6LUME7Sa59t6tP/9//9e9/QYv///61T9E/1dKyv99SEVz1Svk/kV//jIMQVFWOuwAFAKADrQQIvot1Ogo6znOel5DmazsdxNGZZiiCs90Qgwp0KY18iDahAVMSfYxEVBAokJDXVF0eSX1S1WoPKIqIBYYh+qjr////f//X/0pb//Jmq11T/ZtqEZWVKOcFm/+MixBoYa6bIAYEoAPVCoPSOUB1fdg44CjgiZnW9dIiK4jC2ZRcjiYbOooKuBgmBwI9xrq6h8RNlKXsYRMLZSoVCisfGGGoe+5LDxzKrsLSdLa6stUBACAhBBJIIEBfL8/Wv6sd//Hf//+MgxBQRSp56LYE4AFr//07jq//845zZoqHv//y41HTDzlHkOFI7///+YecaKhsoRCouwaZ//wkwUUFWWMUqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=','6':'data:audio/mpeg;base64,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','7':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAA4AAAZTACkpKSkpKSk5OTk5OTk5SkpKSkpKSlpaWlpaWlpra2tra2tre3t7e3t7e4yMjIyMjIycnJycnJycnK2tra2tra29vb29vb29zs7Ozs7Ozt7e3t7e3t7v7+/v7+/v/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQADQACwl9BEACONzMhNRA6bicHwfPlwfB8H3wxeI38EDjuUOQQlAx8P9AIfy/+ox//6PwxKAgGP/hj//4f++IootN+5QQRR3oFUl6OZKFhs8woPdtzsYZYOIGWi3VRU6jsjFJk/+MixCcbkhbEAYZIAJbXlsc/xdZabHxKs9tzhdy8at0sxpjewsV+astvtqvPb9u3Yr5c/f/8FodqWBT5SsJGCIXA5rGyzmyebE8VLkV//e+3+QUHVXurgZvusY7oonTmuYdTo9LBWvq1/+MgxBQZee7BlcYwABm0cTiTcz9qqzVEpL0wYzbrT23Nv+6re8t/nd82v23M8v9r+MyPtTnnXmfnpsqsmX1ISAKy+Ufiyr7BUNDQVFzoKnXDj1reRX9nsSRPcqLnf9Asira1IPhCFpD/4yLECRaZEqgAGZBwlFNSRweNKToIrMEAc12kuZzSioqoOh6a1lDKV+pm6spAdCYLkhaiTDxcmCN5IH3E2tblxU68RBptO97Sp9ro0XHTtljJ5GiiyvqVHI0+3/e1dS31ZNB4Y5eKzZT/4yDEChbBRqQAEYpweS3pHLFvUAZaUQ92bcqugkd3zsW6kMZ7lLERXuKoHbVkzQFGqHMlEIUsSshFNQ2TU1WGjhhimhgLXJWLJIpd0p00sYOQ7am0xQjenWfyVi4d//6JdMSxrlN0Fv/jIsQKFaEWqMoaBnCdXrhnpFIDkMIsQFTU6TrOvl8zJbkTz6LIhShCcBxQPFRUCEwJN70vrPMXJjSBtLBRTnAuZalLrXOUmi66tTtjFTen3s/12IHRXbGY9QbiJHkVqGOTOmNABEdnnP/jIMQPEpHyqAAIRpi9AzARGXThZZ3VT67GqPV62UhXL0IqeXv+f/+TlTTCmFhxObbZSGHD2nnKn6E22ORS1PxlnmqdVH1bOpVXwHFwtwb7xUOiJyTAThYEzxx4shT2hAJockEUCxJh/+MixB8S4HqoAAjQSKFzyRwqSE6Tz0G3/ppUo6HEDo9zB7g6/lB0HTD7ap+sXvXqL+xaNnf1Ud3+pc/20zY6aqU/Ud+ye+/u9xZK0ixgEGs3/7cPPlGDneXiGLF7V8oWd1+dIiBCAgQB/+MgxC8SGVqsAEmGlAT+LvIWIUCDPjNr+rs1bd+3XZ0KYWb/7v0qxjM2Rr61P+YztjHW1t3LIguOVDO5aHf4v5asrLD2cNGZOjKZYqgqVkXEGMDh14CNsET9uWDWE2tvaGfYSuj3bbD/4yLEQRPZNqgAMYZwV61F+5f1WJfW3cj6ur1VUjCQj7zaZXMhyjpMJO6WmStre2qNqW5qukrOTRDO/blhkMwzsYdJLPNfjYo69zhroqQKh1vhEDWX3ilmS6Sa/b9kclmqJunPCmn+/eL/4yDETRKBYqQACUSUsi9+Y/f3Yt1zDREZ3uwRIAoNfFwOFWINJUICYzNtJmW0iuLsaBNcmZRuFGqMGBOERUC2jhjLWBxxPdECyy02LxUNvU5KNbf//+2vSokBYdsMV+uYTVWEwA8kSf/jIsReE6h6qMtGKAAJfRhifNQ8j6W7ZHUVEEIpSPI6S127WJBeeIyCBSsq521pvKDDSn1A8k1VvG6YpNU4ku9y6US/5h09w/Z9nYmlGsumVPXF/VRaU/a2xz2Ovj2V7vmLhrW7HIdf8v/jIMRrJOt+nAGPWAHKbz098ui8/Ed/7Wxf/Fw11Txt4t0VNvt/B9gX1eqBgmPO/KN+jv6bVQIBAghhhIAGH+HS+w3yoN/EWUv+YRUol/4k4kZU//KxilUBf/8cIgKKHlEjf//qJGdp/+MixDIT215I84UoAUJCTt////mM6CSiQk8xQkJf////ulxERIuswje+SkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq','8':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAUAAAKmAGJiYmJiYmJiYmJiYmJiYmJiYmKJiYmJiYmJiYmJiYmJiYmJiYmJibGxsbGxsbGxsbGxsbGxsbGxsbGx2NjY2NjY2NjY2NjY2NjY2NjY2Nj//////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAFGGKoidBGACMATACpHGMf/8YAL4Hd3d3f/QvroiIXogGBgYGLf0d3OIAJQiFoEAAAQLd3d3c+uHAwMDcHAQBD+Xg+HwQOf3f4PviB0HwffUCDv/Lg///+nkFVf//JtszOzTM/+MixAkUIX68AYFgAJmZpkztWcq1+S9FnzNYkItj5AE6hWZOEGiHEAwv0K4xLQloIhmRJsRz1uTKxWE5WbDrArisGgWBpfhn/d+/9TP/0f///9/+lUSr3xetKtl6lLso21J+plLU1rvr/+MgxBQWwX6sAYFoAC4J2SxgXaxdNDJBpYUV3SHwKVSiGiiZmKlGzJkUh0zc1nD9Uetda0rKWm3jX8ilYsh9A5exeX891pqtIpdqSxe3FT1uL2XpBQ+nBRHxQW8xo/pKSR/zJMnFpR//4yLEFBezboQBhWgAV81LoJ8kYrV/8zKJFE+LRdEy16K/5RLyLnjU3PK9X/8xpzVTrSMWO////oHVs6aBskkZHD6zb////8wLyJiYGR00QTrMls5go3+pTEFNRTMuOTkuNVVVVVVVVVX/4yDEEQAAA0gBwAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','9':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAwAAAWCAC8vLy8vLy8vQkJCQkJCQkJVVVVVVVVVVWhoaGhoaGhoaHt7e3t7e3t7jo6Ojo6Ojo6hoaGhoaGhoaG0tLS0tLS0tMbGxsbGxsbG2tra2tra2tra7Ozs7Ozs7Oz//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAD1AGfbFBEACo6gABAAEAQBA5qIZyXBB2CYf+IAQU4uH/TqBB3+sEHZcHz/5cH+GPiAEDniN5T8Ez//+oEPygIHPhj5cH1WRrW0okEn7XPctERlZmO/UWVqiIY1J7Pozs6Wur/+MixB0bVAKsAYUoAKOjEvTsplQOVTZjpTVEFkMRBasYR3cdQTF6szudDyPOo4UozlhE7sgYncedkS9vqQRSyoVqoRCtFx8qqyPKm9nPPbXWjvPerTadlrZ++e7D1aKpqqkstq85UYOn/+MgxAsWChKtkco4AM5Wo+qkE/+lXZ6zUflRwylJx9FUwXvzKUeNgXljmeqUfOVaujVShw618748cx/fzSofdXScb1CgPhvwAHGDn7vpG6dAmb8Z4upCtr7kqqqqqqoo57elYiAjaUf/4yLEDRbLXq2SKcS8+56bO7TVMtOXX1MPmXuiURQeiW2/OdB0Ktba9lRJn+ybkFsnR32Urv177X36pdQRL6N0UI7f3ZDtdK60cknv+z/+6Dgm/zRzL5wzeemkVc/////oiyt6X0CeTs3/4yDEDReCxrWUUcq4s9upe9t1ZLi/zrLS5hN3Od9dBMAUQ06XqwDnlv94kuyWXoNF91ZkmzGdmeyOqNUXvuf7ORqbfvP2t0DysY4dJiAa0RtgH+j55zS2oYTcK6Fpb0/gsf29Ktp61P/jIsQKE/OqpAA4jtzwttl+qG9nvzAy+3usGb3/YzvrmeS7N1rspy03z9ntb6Majd+/ktGf1uezGP5ymDoyGF06ohpjv+v7aMnVHOJGIpoLvY6h/////+LHyrZcNq47OgNHXfxNxXc83f/jIMQWF+uqtZRaBNx9daXbenzF8JxXU3HE8UdUTDRT7LC0Ds3KYya5imGulQtDznTRd/R7H2+ZqGlat/1Tf/Usv///qFG/utq+tvy9/9RJDSD0tPa4qgYmvdzIA0chrULE5+BiqhYS/+MixBESEDqgADhUBBlBkAi0yLbyIzw2utli5ZfP2LdYKY66hG0rocIV01oRdYcoINbWoUQPfaxqVqwJc4m6LWP26Vpqv/+Aa2kvWzrazBgttZkJZemU4aeWp9vYeTPQxNz3RqVdPdqP/+MgxCQUacqgykDElHq2anQ7zKdL9qPukLUdSg2cNmSwvE7W7HbCXvbZWctRW7jgrbe9+jmKH8UyD03//0CM74xZg6hgBFZpAEMi54BFw6bFhrHSMjebNQ4Bng+T4DUOWsoo1CblpOH/4yLELROoPqDLQhAAFRpg5oshwzodY9q0r2o3rpYepG5BXzH05pT4unsertKPSgZWSNvHktNvxKbpHvGglDmdzweg5GysvwLD8bg6NHUc35UgRGgGiTQeQ7+OCKFRqOliKHdP88LIPFz/4yDEOiBjeoABizgBkOEBV9WO/8mLTh0gWcUk0OIedm9P/yQ2FAsPQaCQPDRhsRUkcdHhsrDyzlr//4pCg4SB8OOIsmWHhqD4SBlh0sWXh2/vCKFKTEFNRTMuOTkuNaqqqqqqqqqqqv/jIsQTAAADSAHAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','10':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAQAAAI+AHNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc6KioqKioqKioqKioqKioqKioqKioqKioqLR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAETJuillBEAAFGIkCRonmNuQx3KQBjGMbxkIT/9T/znORv/59TnP8jc7/////rO///+hDnOd+cAIcB8H8EAQcGC4PvEYPv/L////+oEEVgkMabVbm66Uvr2vtV3butvmR4WOc/+MixBYZe96sAYU4AMOlOiPVtVez3dGRUsjta1UU2c/+y37uZR0ckp9q77R/7U46BR0HhYaYM6MyIDDpQnKC41rTItZpyFBtn512pfmN26Guqa9+y+bdFcq4U6w6ggLSHguHfQ/x5/5p/+MgxAwWu3Z8CYc4AKyf5ynKb/46YSHgfE//x4lnHf/9Dh1kNNNHv//xsIw6RFRpQbR0ahD///+ASNAhByWYIhKHiQpHiR3////9JxJR0iaPDYqPHkR0wRhqUG1MQU1FMy45OS41VVX/4yLEDAAAA0gBwAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=','11':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAwAAAWCAC8vLy8vLy8vQkJCQkJCQkJVVVVVVVVVVWhoaGhoaGhoaHt7e3t7e3t7jo6Ojo6Ojo6hoaGhoaGhoaG0tLS0tLS0tMbGxsbGxsbG2tra2tra2tra7Ozs7Ozs7Oz//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEegCcjFBEAARCpTGYDETw9dUD8Tn/1ZQEDn+oEEB/8oc/8Tg+f4nP+CYPg+H4Pn/lAQB8HwfygIOg+D4f/DCwfB/8Tg+H/hiXB9+CEhB8Poa0b1r//Vvp7rWntsT3f+nKnq+/+MixBMX8+akAYIQAcm/si9n2vXdqyao1zFo+1Ps57Uoys87FYhnRTM2ZmbUiqdWNncO7IRbQYNBIJnGRGd5EbIjMRVIrsyoYjOrYhCSQbJYxitMZwazfS5KalltttsikCl6olp6plYu/+MgxA8X6ZquW8UwAK7ilz29S7ZkJmF+D9WpoQc6h9kkC4lMrULM+xvUyL+Np3vo6fqNx8dcJ1lm0YJhouaFxgP4SW9SSy4Rv74srUcU2rUnjHqywstCuU7+v25XRXBZttbG0pAnt7L/4yLEChYg8q5aKMZww+7OgekzqBL+WsJZWZSgRXX8yYILlEEXaJGBgakCtGFg89IOmmQDclBstcQj4x8k9SRVwp70wwwlA3S1iFFX4etp03jXS97FPEDZP0UetZsP4hobS2RJMbvr8LD/4yDEDRaJNrp+EMZwRYcnKIGBfTNyBsosFXd+/DycVIDLe9tbRzRcqeYYVaHyQbHZxQIC7x8ZAznMe8OLaXLFyAxBZ/ZyS0W0EmuUgsReqj2+xvF0J1f1uxKqg//76vBn/eRiTynhDP/jIsQNFnGepZIozJTOMlc45o6L9P3Di7lmiC9wMckgZytlBmRaq3Kh1XENV53qnzNftjtvKfE4lSJSp1qZ7lWFHLDa3PGilg5GtotI2Or9xBd/qdO6UVf/or/fgGfZUVBITOYReHnuXv/jIMQPFEj+mMooRnC+c7GYpAzCj1Zo0qic3PLawedFyIu4MIWrhSixJtTRR+deSbtQWJLap1GKIUWGxyla1sJXs1X5VVqEY8d4dm16GsTVg/+gb/W4XBdVgCaYwyC40IsZiFh5oOmn/+MixBgTsAaYyjBGAJAJXtFiATKkazSiYUnsk4Gyui6OFAJU4A7LPKyYfSSPlmLJBNiy9Lj525S7+/rC4ykXurWlFimb/8Bn+py96OtmHlXnBr0BkUeTgIUDFITF40IUrewBBCLIURUP/+MgxCUT6G6YyihEKK1pTtpExmLrfQAkhoqgnaOZYXGpsSZdapx2SXnlOm7kMQs4/IWUe6OqXLqP/4Bn/9H15I4CCyBUTDm1kxVLTZcmDopEo4ChcSHWz5lbCLMe15YXJObUJGrU5a7/4yLEMBPoZpjLRRgASaxxFFPIvNTKqLyz0pES4K2e4AJbL6LbPAGhqK6HNMUNWGoWoabjeq9lCgtTWMBYIdC3+LDgCCIoKIg34oEDYBa6uJ+HPFHQZi/ILapfw/gcFsMFLtfMIZM1Y1b/4yDEPCBTtogBiBgBPxBBsgxG44lgQqsDkgKUtfrCj9W0dHIuBXxSvUqmRg3kMGSGv+a/6rgyIwRsNHqo18OLodHDDxzsHzHIDoi8qf2F4rL8lQSCRgYCY9f/1KMxRj6v+WhjMhn6Gv/jIsQVEXGOHYHDEACG+b9Slepf/1L//M6lAR4alToKuiX7VPBV+VOiXEv/h2JTold/ywNKDv/+oGhgNfh1TEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','12':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAUAAAKmAGJiYmJiYmJiYmJiYmJiYmJiYmKJiYmJiYmJiYmJiYmJiYmJiYmJibGxsbGxsbGxsbGxsbGxsbGxsbGx2NjY2NjY2NjY2NjY2NjY2NjY2Nj//////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEXgGnlFBEAAtqhC1kICsHwfDCMu/ggCByUOQfeD/BMPxA7sLh//KHP9QIYgDEoc///B8Hz+JwfNS4f9QJh8QAgCAPg/iMP/DH/gQEDkmGYaNvfIRBcW/2+Z/cdczizyZmhyo/+MixBUXwyq4AYI4ADhB3xsQ8go4OXOWJiveUGj+q5typyv//8sJAsVkPOIotxuWlkp6hGbbv0U05TUUsLzEir/NiYvv9K4Vbl3B0GgeWx7QCd9an7PqDIZDKvTGoKCVFy9VSlE6/Eg3/+MgxBIWGxKsAYU4AChHjrfWEQb6lAbzYVPEm+4hIv0enp/Q/+76/jhEuJ/fjwOQcETdeaPGnf+3MKlyoAxyffx0F4ZX9e4+IoeV+k798VAvt8RVFZBRtstLpW5OW36LomGkrxMaKnP/4yLEFBgLXowBjWgBJKtH6bGBJF8NPrJH8huamrMd0v/sYmFBaVKl+v/oDJHqICYH1m5izWMlLLqkv//rrMkFIIkmF4JbW36kjFkv//6DVKUtdFRqXsriuSpMQU1FMy45OS41qqqqqqr/4yDEDwAAA0gBwAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','13':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAUAAAKmAGJiYmJiYmJiYmJiYmJiYmJiYmKJiYmJiYmJiYmJiYmJiYmJiYmJibGxsbGxsbGxsbGxsbGxsbGxsbGx2NjY2NjY2NjY2NjY2NjY2NjY2Nj//////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAExEijgNBKACywOBgZjGN8HyGP8BznfyHfIQhP6EIcPgOAYBh8+8hGU4ucEDggDHiAHwfB8+XB9YPvD5QEHAmD5+c//8uH3f4fggc/5QMfUCH/BMH1fXXzP/xrEO/xbH+vvev/+MixA4WedbEAYF4APG//v08G2twaXlNxkyn6UwjYIp7uZfe3i01TWr7v0g6233rZ7nEaNbFL3w2RP5YUGS9P6zXrNeAKhR92ETD20ta/o6v9n//T6/q/yLmv8je5v1rOZMzPbNL17fn/+MgxBAWYdq8AYFgAGZvt8lzuvq9fCXC+BW1nh5IILR8tKXC13oIIWcZ1qDFHq3lfWXPrq0ukdmm9fXT69Nyi2i3qVhJCWvj0v616NX2muxf/30LV/lqEEkD8y819Re/MhzieMf8ulj/4yLEERjbXowjgYgAFmigRCv/jHD0BAgJgH4DY9rX/lMMuhllFEhpDv/8QsQo5REklLI4mf//zQ2Mi85ianETI2Jr///82MUkq0WRRUiXS6l/////R0UnMUkkpkXpUZVMQU1FMy45OS7/4yDECQAAA0gBwAAANVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','14':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAkAAARIADw8PDw8PDw8PDw8VVVVVVVVVVVVVVVtbW1tbW1tbW1tbYaGhoaGhoaGhoaGnp6enp6enp6enp62tra2tra2tra2ts/Pz8/Pz8/Pz8/P5+fn5+fn5+fn5+f//////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEAiuhNVBMAAGGGBjxjGMYwAAAAAJDGMYxjf97PJk02JpmAAAAAgCB/lz/B9+XP/4gDHrf/yjuD4PvlP/8Tn///z+UDH8oCH0Khom3fq1J9sbuCyKaCkq1ZGAwlc8LmTZGPS2/+MixBoXwNasAYJ4AJeBznGuGSOS8v7+23NXIRTmnmShgYqtKzg1jWpuCLr3wslkWC5IsLcbUEjpg+Yr8okv35exNHCZKPehPhLu121rTc1tKsD6A///xv/17WMIBngB8PK1V8lVxcsC/+MgxBcaEV7FlcJ4AB5oMpO15kJgJgbi7ThuCYK1uZHBWOoEffr/rGqazTecvI7x/CifPrH+JQKDr7BY0LATCzTgEYaUGxjCgbtXTW/e1dP51LKFa1143K+3V+uteupMyA//8v5/7/X/4yLECRbY9sV0Chhw8UISAfD8PA/BuBhDuByTjNwkCeVwoJYjKaB8cFd19t9dSk5HZ4spVxiGQmcFCJaJAOLjFKNoothp+D4y1NvcU1MPtT2IWyxb1ze39mtyK9X/fTVgQSEAAySSSKX/4yDECRa5qspeCkqU+v196qGNIiZbWn2wpNtEYbdJZygmLGz+BQJiBQiKOGsiCZv/an7IZWR1EcrFZzaIcUHkHlCosWAe8jd3pGO3lq0p3dfsb0P7O4t7ko1+26ua1oNtsyQ5ttraN//jIsQJFgjy0l4RknD2v+bux9n+cKB3Rg9Tqt7QjYUQEhRdvNbbQdVlQzmtFWWEj52HlJSPIoW2WE6BDDp5SkiUXGPSx0cQqGgO1DU77zEW29XfMo4zv8tt/v8T1Rv/0rftWGfNILhlsf/jIMQMFHjqpAFCeABGdKPLcWM6W8YAAuDZOkqHieS6tXL2FS2H0eo4KKgYs9GXPBkqPULiQGjyUKnpvNLWtbK7L2Ja6y5ScYhXf+3vrjdn19fWDFvnbzopcqYmdzRWBuJengVQBQNQ/+MixBUYU3aUAYVQAF8SkxCpqfInNJkHuhppv7uRGljE9Dv89zZx55h3rX/5Kaeikh7Exy/p//+hYoiHmnqYS0Jc75v0//+VRzjR4YSnHHE9jZpKSrLHi2SqTEFNRTMuOTkuNaqqqqqq/+MgxA8AAANIAcAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=','15':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAMAAAHVAI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAAAADSAAAAABMQU1FMy45OS41VVVVVVVVVVVVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MixFsAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MgxKQAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='});
--------------------------------------------------------------------------------
/js/clippy/Agents/Rover/sounds-mp3.js:
--------------------------------------------------------------------------------
1 | clippy.soundsReady('Rover', {'1':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/7MMAAAAAAAAAAAAAAAAAAAAAAAEluZm8AAAAHAAAABQAABLAATU1NTU1NTU1NTU1NTU1NTU1NTXp6enp6enp6enp6enp6enp6enp6pqampqampqampqampqampqampqbT09PT09PT09PT09PT09PT09PT0///////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAP/7UMQAAAf4HSZEpGJBYQ/n8PYNLABq8Uh0DADkQ4jkICEHggPhEBkAsNA5A+ETWNAiGhECEws5DXZM4NRrQ05kwiBEe12kVNf6Wf45L9aRUCE/xyQrbtLXVCBCwk2L6wGUfKwfzengRaHI9MT7XTlg+OZerD/WhltTcwAncQkG0mrVWSWm9BUelb3BBzzjkVAM+IAEYKSa2QHlxZHsJ7FW5Tn+ikYaL+hyO9mTClsdjIRBIJgzA2DBYIAkGBUEg/JxAIBxs4hE+UQMKVc18ub/+1LEEYAMRJ1BpiRpQbqgKEDEJXCM0iUir9v50zoGBixGiIQQAoAgIgNsDNz9BFJMPpD4Pg+gwsmJw/C7w/iCKOw+D9oIBGfQLBj/1JF/Su5b9U0BIrYbOn56VlDpy8eIIucYY60kLQ09FUMhY6HJo+g4ViI7xNcnLrH4jktziETsBxcuiPGCyFoVLU2wWZYQIEoMtzYdhxIkdBxG0upFGk5Ag6SC5+aNpBVqSTRtwTvF+QOGISUUFmFxMQUCe2nIr6F/+fETi5I2FhZHCRlAb//7UsQHAAw8/UykmMuBWRIrPJSVKM00GSUuvXfZAa6bqErD9d7fwyma/sFNFKYhxVGDQg5ALHMPzQlywoGGgCkyy02tsDdM8tzSjKlTPAw9bNve8dfeCT/EEnE6g8KCWTrDlqKCqYWbNsivEQyqcyCSUwiQEofELB88jGUMZQJ2BO64sPdjt9oY9xXqICyIZifcilMxZUI+2odJCAuacdPHb2w44qOW8GAsLGCMimFH/Zpj3Vyyw1b1PooFbuSLKlczZYZFFsAApwUK6RRJ3VVa//tSxAiAC8iBReewyUGUHOb9hg1wpTVZCqtNTEEYj0OVa3ptzuTWsD1oo+jZmq3s3r/1VdqrSgqyJUAUAlQEIlG3EwkHcs9LFhoFDzIdHXnREImPnYhypKoedCT3b2afluOI1aGeWUkiE2owQtQh+4Ff62yl7XGhq7eEI/MVhOCUunhaOVsXremtF39/WgjrMza9Ye38p7GomUlKZrhUhl6+bYZypNbn6r7OgrY79RrRgq1pL+M1uBUjEtgsePZbyZ1sqBjzJCoAACQEBhDRJQb/+1LEBIPJQF75B4xnAAAANIAAAARaMW3B2MscjL7Zc/lv/+bWWKwUECDgmZAQuzAQVDICCQGFjQMiprijcFgqKxUUFosLCN0VZqFvF2YqLNxfircWF0xBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','2':'data:audio/mpeg;base64,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','3':'data:audio/mpeg;base64,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','4':'data:audio/mpeg;base64,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OH5/OUS2hpttkmpdjT9jW8atbLVWlqctYV+Uf5cy1avV5un1hhjqzV5l+WX/Vy79XQoXkVsItWPCwUGNErtR5YNq//KM//OqAAAQAggQAQgwARiPPBJC6PjICQ+COiceSzl38AsgIMJWLD/EmI4wpiOX/yoyMScZGP/4xh3Hzhk6P//kiYmqToju///JI+TjI2MUVEiTTX///0qI7iSPk4yNjFFQ7SRNf//AQAAgCVDmeDyE18dCf4pLeNjl/CIRhcO/5qCkdb/whEUwTjpb/86cVNFf7RdyD3+WURCf///7kmRLgAMbV0HOQaAAOMU4IcacAAAAAaQcAAAgAAA0g4AABNijwo+L1UxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','5':'data:audio/mpeg;base64,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','6':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/7MMAAAAAAAAAAAAAAAAAAAAAAAEluZm8AAAAHAAAADAAACmcAIiIiIiIiIiI3Nzc3Nzc3N0tLS0tLS0tLX19fX19fX19fc3Nzc3Nzc3OHh4eHh4eHh5ubm5ubm5ubm6+vr6+vr6+vw8PDw8PDw8PX19fX19fX19fr6+vr6+vr6///////////AAAAAAAAAAAAAAAAAAAAAAAAAP/7UMQAAIeACSbnoEABaJglsYYVMA3gAAByE0L+F3PpQOOAg44o5rfPg/LviDB93EgIYnDAnB98+GJQdwTfWf+Ug+/5d/qOfBB2JHI9RzxOGAWSTCQFI5FdTLLcMNglMGSFyAoss2iHUrtHm22Fp0QwoQ3ziF++LOVzgOiuQeeVT1S1mJWeq2VXszIryFI9rI4eVIxVG60FmqUdxsVtA5Beb1KanTWj1/7bdSo2ItOkIxggpg/zEJCcsdCVGmo7WqlAiGliMQ/WkTA5i4ILUOf/+1LEEgANzIc7p73pYaCTKPzGMSxmViFxC2JwZqoRjI3m44sa2rNMO36Io5LKQQiK3wrZpWmH8W73bHYmRDI4giOU8ygyux5ZKG2UUMIzi73nvhfaxMvGWUtxlYY/uQFUqKiGIFNuOWgM4WACgoVRrEsRyRcgLLEIOROEo01Bvj8bi1o4WH4Zlcvp2JPjFt0fKN3Omy6pPFZ3nVy9p2b9Ws2y95YvmvEy6BGLgFN6+ol2vODx849r12UWJYpyL8BKGfrtXQ6mupc5IoADXVl/Jv/7UsQEgAswrVWHvGmxb5YqdPeNMocqoQRiPUIIIp4ydPhQ3a7KsQsXiDXv8wffNcz1tmtQe4M0Cw4EmCNZDn+f/vAdJlWfb9MWhVpQVW3ZVnnkBVEzJJHvaXv0tvne6jXT/oYug7uONoEFy22HXlAHYSg/V5DCkSiKTx5FwJGhyvVCvmjqJ7ai7Z1djWo77erz6r0pizU9Cnuf8KWwWNxZWEGDupMVgMKoTAaCyljsyGeskSVN68eLNap+nPM///1Vu9tjSCvdWPjS/bHDCt7T//tSxAeAC+hxVYwwyXF4m2g09I1wXwfVtn6H4RycCwclI0MlalldeC0F7Z9eFloFUdswsZsomIfMLnHPBwHEAiFgKC4JDhY829wBfEZ9QuIRAdF2JFUHxRrbE0X3XrZYm+73/1rercYIAAdu0oDoPNCjqlVagM1Cz/TB4EQfIB5QQCxJql5AApOVUCy6kiO4OxOkU0mrIigcF2E3vyGSePDeEUGbJTq63P20/9E/q5GGcgVKIEK0sIvD0et//d/0ff9lKigQAAqpR8DGQhTHU3z/+1LEBoAL0GMxJ7GHAV4RJOayYACGkelY4KytoNQMoCEUon4I2g6AGBI7usOR1Hg+bL1LJVJySYnmd160GjYKG0CISh1IcAAZHwMWEQcc2sqkm3Fa7BrlitFK++l/suVt9K2N+vjA0xABohDnZQyVXjC6mezTiq3RV2J65lDMJpbiQVPzgiYKLMBgZcnO75KDbkyzoTG9rc6mmcnYfCrE6WIcddCd9AsWepp1I9zzN+dbssyTb1PAp1um3//oE7u6///+VFAAQadk5AZhprArnP/7UsQJgAzEnyc5pIABcZLo9zSQAs3pNRl+IxKJiLSCbtAGBNRcUIC4qJET4sGwoKtOmTBgXUJCTUCzJNKCsDsZJMfr0mrJZRSE4qrNx3MX1oUkkmidByLPQ08gP3Ag6n/8vu/f/5z0Tay222W3bba22SSAAAEyJxjEOA5SbyGoM1mP0VSMUt+ntRhy5ESnhQjhpCqgaVkwodLB8hIRZDIyPk8SdDBNliQgmZ5K0s29W4x/nkV783NmRcNNEVKL9ui3eH6K5v///////P6AI1rY//tSxAYAC6TBMTmVgAGDjiTDsMAAqUp4WBilT5RfeOCabKGJ122Ww8gycNZKNXWsO83AfAPxPtrtBVc6alqDrn3HGVA7DRa/lvup7qfyx96vy3/e/j79FjPA4O6Rc+bG6+1+ZcXLgVyFMmn683JI4/b2PPE70OPxCHffwDzY2KTJbXAcD8dDk5PXoEUTkmEES5atO17q7ocfhos2NkoBgOSabeCYgFHHxRrVK3saeSKtGtUeak7QhKG15vT1I79+X7nFVOY76nUB8XAhA+qEYpb/+1LEBQAK4Jcupj0pQYYaKHz0mXQJjShQqZgJmL9nblSraHYm0otLh4rlEf6uG+Kx9odQLnUXURgOG20BNPr3iBmWbe7fuq97/l/E2UUWJlNbqthl6I/GZPQe2XW+v2/r61iWVzQgEExxtwm6GsxpF8SSZNxEXc02KAdiJh9VfELEdWsypNtaF7vZpFC8cUXDUiXNbe2ci//qVTuPm3Vbl2Yz/Gm/3i9ucb97x3dFKWLGGFG2sQ5aR9zypPo9O4y+zb66RZZHQyEIE9rvg+NlA//7UsQGgAvQs0PmJGmBfBGmZPSZKLjoB0QU5JPxUGjhw6yc1G4saVWLVHxoshmofisRlXNjEo7ODPPk/3zTEihxlliF/7XWSggEHwEFCwut192jpqDYow6xBmprxQi4y1qkW/ff/rqaEAAn/AKlpGKmG4NqFXSomBBEAIBB1kuMiAckcEygDAqBIbHj4CHghZUrMYpOQQwiBBQUi17XzM9d83/NQ0CQ2JwuJxmKKmi5YIxQJHwBUyLmucHFU9RqjV6m23f+ug400SAALeAeH0Jy//tSxAWAC1BnL4YxJwEYDGJM8wzgwEomCWBEKVIjWHonlBGemT0SdFseAwPm8gKtXFJCehOmyWSJWkMKmk2AQWER57XgJrpIGhYWBYqeFh5mLE5482SDoMiqkDj7h2yklp412YAAABcFdOQ+1C+3mKSKTRJPjJAokxOdqhssPVgYJD1BOMKCuJDUMgsLkQESBkkFforIhLqQFUaGP+0Cij/8VM/in9Qu7/66TEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+1LEEwPAAAGkAAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7UsRxA8AAAaQAAAAgAAA0gAAABKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq','7':'data:audio/mpeg;base64,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','8':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/zUMAAAAAAAAAAAABJbmZvAAAABwAAAAMAAAG7AIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw////////////////////////////////////////////wD/80DEAA+pQtbrQRgAZWiWtjWLZEAAMYxj8Ax+Y3+iJ+7n/00RP//d3f93d3/dEREAABDnh/LmlAgCAIA//gg7/icP//+IAQ+GPqDCfwl7L62/U7/pLU/+arMkBMvMfiapC6bglgJqFP/zQsQcGiM2yAGBaAAUUUScJcTv5aJsbjFICRLCfiZFIxSo0S6j/ycWrROrOmhiPY2TGKz/0Uf/+O5R0aS8fNEWWXi8YqcwMVPWi3WytL//yVLpqTj5n/kY+j4at7zn7zPqt71Vd5ztM//zQMQPEDmldAvAMAGdq/7VXec7GkUcOJJbJIBEtIgFFjiJEjhxJJzSRKtkiSCQXIK6FHArgkVwbj///jeiuUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV','9':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAQAAAI+AHNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc6KioqKioqKioqKioqKioqKioqKioqKioqLR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQADrgGRXdAEABZVxgAGNQIROCDlh+D71OIcuH+fqcUdwQd/DFb/g/yjv/B8cD5/L1AgsEDn8PqdAn+Ug/+XeCH9vD8MPP5c39ma4gTntRf/1qMX8jIjyi4oI/850ZZC7CQ9f+Q/+MixCAa89awAYEoAIrMEA66KLhwOiYedzd9NXIjBgs5kKY5yOHx4dERMgGMPFDtoz/84oMlQQcMhwXIjC4wcHlECIpCpm///0Fxo8QFxUXU5/0yNFTrtiYpqYNTf9UL68Smce/zj1Ex/+MgxBAX41KYAYI4AL2/UamiMJR2b/5AkpEeB7R//gtESJQRMPmEazTTv/xlypAFBahQamA+Om49Vv//Gxw4PHDgyIriYbjYSiQ8h2cmtf//6ikecTjaWNlJ7ZkqlbNUqlLMYylM/7r/4yLECxHysWABwBAAGM5SlQzI9S5v//1KWYzqVQolgwEZQpjfuhjSlKhm//tQ0xpSlQxf1ZQESwYCMoU3qfyKzv///4dWdLKeVkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqo=','10':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAQAAAI+AHNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc6KioqKioqKioqKioqKioqKioqKioqKioqLR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEYoqOlNBEADhnREVyAEH8h9GNkP5yOf+c/U//z6fO//8jSNoQjKQjKfQh3/neSp3Q53+cjeRjgAhi5/5QMZc4XfKHKrPxOOB+7ykEP8Pqs8vL4V26N7bT2/8mdf3kerHqd+p/+MixBQXm46kAYEoAN17G2W8pju34iZkj0Yg4ROLgOFDlVXt5OZDEJYJq6DFUhrIwmg4Y3ujH9rHK487xfU51REYMF1EbSO5ft//utXFQ+Q6IKkUHQ+pVQ/P6FLdRv4dDpU/zXIfob5S/+MgxBEXay6QAYEoAYhDrUMv+okJuDGEKUm/xAHBw4AQfFQLiMpTaf8oRDw8WHhITgCKkNxGyaf/zhJChExyQ8MFRRCGVDKaWoiYxv//EmaaI0FzdYxTcTYqgYUYKhIOCJ+VcDQ86Cr/4yLEDhFwEYQBwxgA4O/8SlToiHnRL/8RCI8CowOA0eKnSowGgKGwVcDXBVR78SqPA0VDRZ3cJfgqo95VwNDzv/JKPFZMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo='});
--------------------------------------------------------------------------------
|