├── README.md ├── css ├── demo.css └── fedmenu.css ├── dev-data.js ├── fonts └── montserrat.ttf ├── img ├── logo.png └── panda-wave.png ├── index.html ├── js ├── fedmenu.js ├── fedora-libravatar.js └── jquery-1.11.2.min.js ├── update-demo.sh ├── update-prod.sh └── update-stg.sh /README.md: -------------------------------------------------------------------------------- 1 | # fedmenu 2 | 3 | A little javascript menu meant to partially unify all the different Fedora apps 4 | 5 | Demo: http://threebean.org/fedmenu 6 | 7 | ![img](http://i.imgur.com/vl6Zkr0.png) 8 | -------------------------------------------------------------------------------- /css/demo.css: -------------------------------------------------------------------------------- 1 | .fm-intro { 2 | padding-bottom: 15px; 3 | } 4 | -------------------------------------------------------------------------------- /css/fedmenu.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Montserrat'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: local('Montserrat-Regular'), url(../fonts/montserrat.ttf) format('truetype'); 6 | } 7 | 8 | .fedmenu-bottom-left { 9 | position: fixed; 10 | bottom: 10px; 11 | left: 10px; 12 | } 13 | 14 | .fedmenu-bottom-right { 15 | position: fixed; 16 | bottom: 10px; 17 | right: 10px; 18 | } 19 | .fedmenu-bottom-left:hover .fedmenu-bottom-left.fedmenu-active { 20 | bottom: 2px; 21 | left: 2px; 22 | } 23 | .fedmenu-bottom-right:hover .fedmenu-bottom-right.fedmenu-active { 24 | bottom: 2px; 25 | right: 2px; 26 | } 27 | 28 | #fedmenu-tray { 29 | width: 48px; 30 | z-index: 1010; 31 | } 32 | 33 | .fedmenu-button { 34 | margin-left: auto; 35 | margin-right: auto; 36 | 37 | margin-top: 0px; 38 | margin-bottom: 8px; 39 | padding-bottom: 0px; 40 | 41 | width: 32px; 42 | height: 32px; 43 | 44 | -webkit-filter: drop-shadow(4px 4px 4px #222); 45 | filter: drop-shadow(4px 4px 4px #222); 46 | 47 | /* Awesome */ 48 | transition-property: width, height, bottom, left, background-size, filter, margin-top, margin-bottom, padding-bottom; 49 | transition-duration: 0.10s; 50 | transition-timing-function: linear; 51 | } 52 | .fedmenu-button:hover, .fedmenu-button.fedmenu-active { 53 | margin-top: -8px; 54 | margin-bottom: 0px; 55 | padding-bottom: -8px; 56 | 57 | width: 48px; 58 | height: 48px; 59 | 60 | -webkit-filter: drop-shadow(4px 4px 6px #222); 61 | filter: drop-shadow(4px 4px 6px #222); 62 | } 63 | 64 | .fedmenu-button div.img { 65 | width: 100%; 66 | height: 100%; 67 | background-repeat: no-repeat; 68 | background-size: 100% 100%; 69 | } 70 | #fedmenu-main-button div.img { background-image: url("../img/logo.png"); } 71 | #fedmenu-user-button div.img { border-radius: 50%; /* Make avatars into a circle */ } 72 | 73 | #fedmenu-wrapper { 74 | position: fixed; 75 | height: 100%; 76 | width: 100%; 77 | top: 0; 78 | left: 0; 79 | z-index: 1008; 80 | display: none; 81 | } 82 | 83 | #fedmenu-wrapper.fedmenu-active,.fedmenu-exit { 84 | cursor: pointer; 85 | } 86 | 87 | .fedmenu-exit { 88 | float: right; 89 | width: 26px; 90 | height: 26px; 91 | text-align: center; 92 | line-height: 28px; 93 | font-family: sans-serif; 94 | font-size: 16pt; 95 | color: #FFF; 96 | background-color: #db3279; 97 | border-radius: 50%; 98 | 99 | -webkit-filter: drop-shadow(4px 4px 4px #222); 100 | filter: drop-shadow(4px 4px 4px #222); 101 | 102 | /* Awesome */ 103 | transition-property: width, height, margin, line-height, font-size; 104 | transition-duration: 0.10s; 105 | transition-timing-function: linear; 106 | } 107 | 108 | .fedmenu-exit:hover { 109 | margin-top: -6px; 110 | margin-right: -6px; 111 | 112 | width: 38px; 113 | height: 38px; 114 | line-height: 40px; 115 | font-size: 22pt; 116 | 117 | -webkit-filter: drop-shadow(4px 4px 6px #222); 118 | filter: drop-shadow(4px 4px 6px #222); 119 | } 120 | 121 | #fedmenu-wrapper.fedmenu-active { 122 | display: block; 123 | background-color: rgba(0,0,0,0.3); 124 | -webkit-box-shadow: inset 0 0 400px rgba(0,0,0,1); 125 | box-shadow: inset 0 0 400px rgba(0,0,0,1); 126 | 127 | } 128 | 129 | .fedmenu-content { 130 | position: fixed; 131 | top: 100%; 132 | 133 | /* Vary these two parameters for responsive-ness */ 134 | left: 30%; 135 | width: 40%; 136 | 137 | background: url('../img/panda-wave.png') no-repeat right bottom; 138 | 139 | background-color: #FFF; 140 | margin-bottom: 20px; 141 | padding: 19px; 142 | border: 0px none; 143 | 144 | -webkit-box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.23); 145 | box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.23); 146 | z-index: 1009; 147 | } 148 | 149 | .fedmenu-content.fedmenu-active { 150 | top: 15%; 151 | transition-property: top; 152 | transition-duration: 0.4s; 153 | transition-delay: 0.3s; 154 | transition-timing-function: ease-out; 155 | } 156 | 157 | .fedmenu-content > h1 { 158 | font-family: Montserrat; 159 | font-weight: bold; 160 | border-bottom: 2px solid; 161 | color: #294172; 162 | } 163 | 164 | .fedmenu-content > h4 { 165 | font-family: Montserrat; 166 | font-size: 80%; 167 | margin-top: 0; 168 | margin-bottom: 0; 169 | } 170 | 171 | .fedmenu-panel { 172 | font-family: Montserrat; 173 | display: inline-block; 174 | vertical-align: top; 175 | font-size: 12pt; 176 | padding: 15px; 177 | } 178 | .fedmenu-panel ul { 179 | margin-top: 10px; 180 | padding-left: 0px; 181 | } 182 | .fedmenu-panel li { 183 | list-style: none; 184 | margin-left: 0px; 185 | } 186 | 187 | .fedmenu-panel a, 188 | .fedmenu-panel a:hover { 189 | color: #3C6EB4; 190 | } 191 | 192 | .fedmenu-header { 193 | display: inline; 194 | font-weight: bold; 195 | font-size: 12pt; 196 | color: #294172; 197 | border-bottom: 1px solid; 198 | } 199 | 200 | /* Responsive stuff... */ 201 | @media all and (max-width: 1450px) { .fedmenu-content { left: 25%; width: 50%; }} 202 | @media all and (max-width: 1200px) { .fedmenu-content { left: 20%; width: 60%; }} 203 | @media all and (max-width: 1000px) { .fedmenu-content { left: 15%; width: 70%; }} 204 | @media all and (max-width: 860px) { .fedmenu-content { left: 10%; width: 80%; }} 205 | @media all and (max-width: 740px) { .fedmenu-content { left: 5%; width: 85%; }} 206 | @media all and (max-width: 600px) { .fedmenu-content { left: 0%; width:100%; }} 207 | @media all and (max-width: 800px) { .fedmenu-content.fedmenu-active { top: 10%; }} 208 | @media all and (max-width: 700px) { .fedmenu-content.fedmenu-active { top: 10%; }} 209 | @media all and (max-width: 600px) { .fedmenu-content.fedmenu-active { top: 5%; }} 210 | @media all and (max-width: 500px) { 211 | .fedmenu-content.fedmenu-active { top: 0%; } 212 | .fedmenu-content > h1 { font-size: 80%; padding: 5px } 213 | .fedmenu-content > h4 { font-size: 80%; margin-top: 0; margin-bottom: 0; } 214 | .fedmenu-panel .fedmenu-header { font-size: 90%; } 215 | .fedmenu-panel { padding: 7px; font-size: 5pt; } 216 | .fedmenu-content { 217 | padding: 9px; 218 | background-image: none; 219 | } 220 | } 221 | -------------------------------------------------------------------------------- /dev-data.js: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Warning. 4 | * Do not edit this file. It is generated from data/apps.yaml 5 | * ...edit that file instead. 6 | */ 7 | 8 | var json = { 9 | "id": 0, 10 | "data": { 11 | "description": "This is a landing page for Fedora Apps. Fedora Infrastructure is huge; this page details only the public facing portion of it all. Explore!\n" 12 | }, 13 | "name": "Fedora Apps", 14 | "children": [ 15 | { 16 | "id": 1, 17 | "data": { 18 | "description": "These are the apps that we're working on, but that aren't quite ready for prime-time yet. Try and use them, and report bugs when they're broken -- it's a big help!. Check back here from time to time, as this section will change.\n" 19 | }, 20 | "name": "In Development", 21 | "children": [ 22 | { 23 | "data": { 24 | "url": "http://koschei.cloud.fedoraproject.org", 25 | "package_url": "http://koschei.cloud.fedoraproject.org/package/{package}", 26 | "description": "Koschei is a continuous integration system for RPM packages. It tracks dependency changes done in Koji repositories and rebuilds packages whose dependencies change. It can help packagers to detect failures early and provide relevant information to narrow down the cause.\n" 27 | }, 28 | "name": "Koschei", 29 | "id": 2 30 | }, 31 | { 32 | "data": { 33 | "url": "http://release-monitoring.org", 34 | "package_url": "https://release-monitoring.org/projects/search/?pattern={package}", 35 | "description": "Code named anitya, this project is slated to replace the old wiki page for Upstream Release Monitoring. It will track upstream tarball locations and publish notifications to the fedmsg bus when new ones are found. Other daemons will then be responsible for filing bugs, attempting to automatically build packages, perform some preliminary QA checks, etc..\n" 36 | }, 37 | "name": "Release Monitoring", 38 | "id": 3 39 | }, 40 | { 41 | "data": { 42 | "url": "http://jenkins.cloud.fedoraproject.org", 43 | "description": "Our own continuous integration (CI) service! It works now and you can use it.. we just don't yet give it the same kind of guarantees that we give our other apps. Look forwards to us promoting it soon..\n" 44 | }, 45 | "name": "Jenkins", 46 | "id": 4 47 | }, 48 | { 49 | "data": { 50 | "url": "http://209.132.184.152/faitout/", 51 | "description": "Provides access to temporary postgresql databases. This database can be used for unit-test thus reducing the differences between testing and production environment.\n" 52 | }, 53 | "name": "faitout", 54 | "id": 5 55 | } 56 | ] 57 | }, 58 | { 59 | "id": 6, 60 | "data": { 61 | "description": "Tools for sysadmins -- the people who run the servers that run Fedora (and otherwise).\n" 62 | }, 63 | "name": "Infrastructure", 64 | "children": [ 65 | { 66 | "data": { 67 | "url": "https://geoip.fedoraproject.org", 68 | "description": "A simple web service running geoip-city-wsgi that will return geoip information to you.\n" 69 | }, 70 | "name": "GeoIP", 71 | "id": 7 72 | }, 73 | { 74 | "data": { 75 | "url": "http://fedoraproject.org/easyfix", 76 | "description": "A list of easy-to-fix problems for the different projects in Fedora. Interested in getting into helping out with sysadmin work or web application development? This should be useful to you.\n" 77 | }, 78 | "name": "Easyfix", 79 | "id": 8 80 | }, 81 | { 82 | "data": { 83 | "description": "DataGrepper is an HTTP API for querying the datanommer database. You can use it to dig into the history of the fedmsg message bus. You can grab events by username, by package, by message source, by topic... you name it.\n", 84 | "user_url": "https://apps.fedoraproject.org/datagrepper/raw?user={user}", 85 | "url": "https://apps.fedoraproject.org/datagrepper", 86 | "package_url": "https://apps.fedoraproject.org/datagrepper/raw?package={package}", 87 | "status_mappings": [ 88 | "fedmsg" 89 | ], 90 | "icon": "fedmsg.png" 91 | }, 92 | "name": "DataGrepper", 93 | "id": 9 94 | }, 95 | { 96 | "data": { 97 | "url": "http://status.fedoraproject.org", 98 | "description": "Sometimes the Fedora Infrastructure team messes up (or lightning strikes our datacenter(s)). Sorry about that. You can use this website to check the status. Is it \"down for everyone, or just me?\"
Notice the favicon in your browser tab. It changes based on the status, so if you keep this open you can check back to it at a glance.\n", 99 | "icon": "status-good.png" 100 | }, 101 | "name": "Status", 102 | "id": 10 103 | }, 104 | { 105 | "data": { 106 | "url": "http://mirrors.fedoraproject.org", 107 | "icon": "downloads.png", 108 | "description": "Fedora is distributed to millions of systems globally. This would not be possible without the donations of time, disk space, and bandwidth by hundreds of volunteer system administrators and their companies or institutions. Your fast download experience is made possible by these donations. The list on the MirrorManager site is dynamically generated every hour, listing only up-to-date mirrors.\n", 109 | "status_mappings": [ 110 | "mirrormanager", 111 | "mirrorlist" 112 | ] 113 | }, 114 | "name": "MirrorManager", 115 | "id": 11 116 | }, 117 | { 118 | "data": { 119 | "url": "http://admin.fedoraproject.org/nagios", 120 | "description": "\"Is telia down?\" The answer can most definitively be found here (and in detail). The Fedora Infrastructure team uses Nagios to monitor the servers that serve Fedora. Accessing most details requires membership in the sysadmin group.\n", 121 | "icon": "nagios-logo.png" 122 | }, 123 | "name": "Nagios", 124 | "id": 12 125 | }, 126 | { 127 | "data": { 128 | "url": "http://admin.fedoraproject.org/collectd/", 129 | "description": "Tracks and displays statistics on the Fedora Infrastructure machines over time. Useful for debugging ineffeciencies and problems.\n", 130 | "icon": "collectd.png" 131 | }, 132 | "name": "Collectd", 133 | "id": 13 134 | }, 135 | { 136 | "data": { 137 | "url": "http://admin.fedoraproject.org/haproxy/proxy1", 138 | "description": "Shows the health of our proxies. How many bytes? Concurrent sessions? Health checks?\n" 139 | }, 140 | "name": "HAProxy", 141 | "id": 14 142 | } 143 | ] 144 | }, 145 | { 146 | "id": 15, 147 | "data": { 148 | "description": "Tools for testers -- the people who tell us its broken so we can fix it.\n" 149 | }, 150 | "name": "QA", 151 | "children": [ 152 | { 153 | "data": { 154 | "url": "https://taskotron.fedoraproject.org", 155 | "package_url": "https://taskotron.fedoraproject.org/resultsdb/results?item={package}", 156 | "description": "Taskotron is a framework for automated task execution and is in the very early stages of development with the objective to replace AutoQA for automating selected QA tasks in Fedora.\n" 157 | }, 158 | "name": "Taskotron", 159 | "id": 16 160 | }, 161 | { 162 | "data": { 163 | "url": "https://apps.fedoraproject.org/releng-dash/", 164 | "description": "Track the status of the Fedora Release Engineering process. Did the latest rawhide get rsynced out? How about for the secondary arches? This read-only dashboard can help you make a quick check.\n" 165 | }, 166 | "name": "Releng-Dash", 167 | "id": 17 168 | }, 169 | { 170 | "data": { 171 | "url": "https://retrace.fedoraproject.org", 172 | "package_url": "https://retrace.fedoraproject.org/faf/reports/?component_names={package}", 173 | "description": "The Problem Tracker is a platform for collecting and analyzing package crashes reported via ABRT (Automatic Bug Reporting Tool). It makes it easy to see what problems users are hitting the most, and allows you to filter them by Fedora release, associate, or component.\n" 174 | }, 175 | "name": "Problem Tracker", 176 | "id": 18 177 | }, 178 | { 179 | "data": { 180 | "url": "http://qa.fedoraproject.org/blockerbugs", 181 | "description": "The Fedora Blocker Bug Tracker tracks release blocking bugs and related updates in Fedora releases currently under development.\n", 182 | "status_mappings": [ 183 | "blockerbugs" 184 | ] 185 | }, 186 | "name": "Blocker Bugs", 187 | "id": 19 188 | }, 189 | { 190 | "data": { 191 | "url": "http://bugzilla.redhat.com", 192 | "package_url": "https://bugzilla.redhat.com/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=Fedora&product=Fedora%20EPEL&query_format=advanced&component={package}", 193 | "description": "The Fedora Community makes use of a bugzilla instance run by Red Hat. Notice something wrong with a Fedora package? You can file an official bug here.\n", 194 | "icon": "bugzilla.png" 195 | }, 196 | "name": "Bugzilla", 197 | "id": 20 198 | }, 199 | { 200 | "data": { 201 | "url": "http://fedoraproject.org/PackageReviewStatus/", 202 | "package_url": "https://bugzilla.redhat.com/buglist.cgi?component=Package%20Review&query_format=advanced&short_desc_type=allwordssubstr&short_desc={package}", 203 | "description": "These pages contain periodically generated reports with information on the current state of all Fedora package review tickets -- a super useful window on bugzilla.\n" 204 | }, 205 | "name": "Review Status", 206 | "id": 21 207 | }, 208 | { 209 | "data": { 210 | "url": "https://apps.fedoraproject.org/kerneltest", 211 | "description": "As part of the kernel testing initiative we provide a webapp where users and automated systems can upload test results. If you have access to hardware where we could catch tricky driver issues, your assistance here would be much appreciated.\n", 212 | "icon": "tux.png" 213 | }, 214 | "name": "Kerneltest", 215 | "id": 22 216 | } 217 | ] 218 | }, 219 | { 220 | "id": 23, 221 | "data": { 222 | "description": "Tools for people -- so we can talk to each other and share content and ideas.\n" 223 | }, 224 | "name": "Coordination", 225 | "children": [ 226 | { 227 | "data": { 228 | "url": "http://paste.fedoraproject.org", 229 | "description": "Our very own pastebin server. If you yum install the fpaste command, it will use this site automatically.\n", 230 | "status_mappings": [ 231 | "fedorapaste" 232 | ] 233 | }, 234 | "name": "Paste", 235 | "id": 24 236 | }, 237 | { 238 | "data": { 239 | "url": "http://admin.fedoraproject.org/voting", 240 | "description": "As a member of the community, you can now vote for the different steering committees and for this you will use the Election application. Voting is a right and a duty as a member of the community; it is one of the things you can do to influence the development of Fedora.\n", 241 | "status_mappings": [ 242 | "elections" 243 | ] 244 | }, 245 | "name": "Elections", 246 | "id": 25 247 | }, 248 | { 249 | "data": { 250 | "url": "https://apps.fedoraproject.org/nuancier", 251 | "description": "Nuancier is a simple voting application for the supplementary wallpapers included in Fedora.\n", 252 | "icon": "nuancier.png" 253 | }, 254 | "name": "Nuancier", 255 | "id": 26 256 | }, 257 | { 258 | "data": { 259 | "url": "http://lists.fedoraproject.org", 260 | "icon": "mail.png", 261 | "description": "Mailing lists are used for communication within the community. There are lists for generic topics and lists more dedicated to a specific topic, there is for sure one for you.\n", 262 | "status_mappings": [ 263 | "mailinglists" 264 | ] 265 | }, 266 | "name": "The Mailing lists", 267 | "id": 27 268 | }, 269 | { 270 | "data": { 271 | "url": "https://apps.fedoraproject.org/calendar", 272 | "icon": "fedocal.png", 273 | "description": "The Fedora Calendar (or fedocal), you might have already guessed, is a public calendar service. You can create your own calendar, or subscribe to others. Want to be kept abrest of releases, freezes, and events? This is the tool for you.\n", 274 | "status_mappings": [ 275 | "fedocal" 276 | ] 277 | }, 278 | "name": "FedoCal", 279 | "id": 28 280 | }, 281 | { 282 | "data": { 283 | "url": "https://meetbot.fedoraproject.org", 284 | "icon": "meetbot.png", 285 | "description": "Fedora Infrastructure runs a friendly IRC bot that you may know named zodbot. Among its many and varied functions is logging IRC meetings, the archives of which you can find here.\n", 286 | "status_mappings": [ 287 | "zodbot" 288 | ] 289 | }, 290 | "name": "Meetbot", 291 | "id": 29 292 | } 293 | ] 294 | }, 295 | { 296 | "id": 30, 297 | "data": { 298 | "description": "Tools for upstream developers -- because we love you.\n" 299 | }, 300 | "name": "Upstream", 301 | "children": [ 302 | { 303 | "data": { 304 | "url": "https://apps.fedoraproject.org/github2fedmsg", 305 | "icon": "github.png", 306 | "description": "github2fedmsg is a web service that bridges upstream development activity from GitHub into the Fedora Infrastructure message bus. Visit the self-service dashboard to toggle the status of your repositories.\n", 307 | "status_mappings": [ 308 | "fedmsg" 309 | ] 310 | }, 311 | "name": "github2fedmsg", 312 | "id": 31 313 | }, 314 | { 315 | "data": { 316 | "url": "http://fedorahosted.org", 317 | "icon": "trac.png", 318 | "description": "Fedora is dedicated to open source software. This commitment can extend beyond regular Fedora offerings.
Fedora Hosted is our most feature rich hosting solution. It includes an scm, trac instance, release dir, account system for access control, etc. This is our most common hosting option. When most groups want hosting, this is what they want.\n", 319 | "status_mappings": [ 320 | "fedorahosted" 321 | ] 322 | }, 323 | "name": "Fedora Hosted", 324 | "id": 32 325 | } 326 | ] 327 | }, 328 | { 329 | "id": 33, 330 | "data": { 331 | "description": "Tools for everybody -- use these things to manage your Fedora Account.\n" 332 | }, 333 | "name": "Accounts", 334 | "children": [ 335 | { 336 | "data": { 337 | "url": "http://fedoraproject.org/membership-map/ambassadors.html", 338 | "description": "Ambassadors are the representatives of Fedora. Ambassadors ensure the public understand Fedora's principles and the work that Fedora is doing. Additionally Ambassadors are responsible for helping to grow the contributor base, and to act as a liaison between other FLOSS projects and the Fedora community.\nThis thing is a map of where all the Fedora Ambassadors live showing just how vibrant the Fedora Community really is. (It's easy to add yourself to the map too, if you can't find yourself on it.)\n" 339 | }, 340 | "name": "Ambassadors Map", 341 | "id": 34 342 | }, 343 | { 344 | "data": { 345 | "url": "https://fedorapeople.org", 346 | "user_url": "https://{user}.fedorapeople.org", 347 | "description": "Being a community member you gain access to fedorapeople which provides you with a space on the web where you can upload files to share them with the community.\n", 348 | "status_mappings": [ 349 | "people" 350 | ] 351 | }, 352 | "name": "FedoraPeople", 353 | "id": 35 354 | }, 355 | { 356 | "data": { 357 | "url": "http://admin.fedoraproject.org/accounts", 358 | "user_url": "https://admin.fedoraproject.org/accounts/user/view/{user}", 359 | "description": "The Fedora Account System. Update your profile information and apply for membership in groups.\n", 360 | "status_mappings": [ 361 | "fas" 362 | ] 363 | }, 364 | "name": "FAS", 365 | "id": 36 366 | }, 367 | { 368 | "data": { 369 | "url": "https://apps.fedoraproject.org/notifications", 370 | "icon": "fedmsg.png", 371 | "description": "Centrally managed preferences for Fedora Infrastructure notifications to your inbox, irc client, and mobile device.\n", 372 | "status_mappings": [ 373 | "fedmsg" 374 | ] 375 | }, 376 | "name": "Notifications", 377 | "id": 37 378 | }, 379 | { 380 | "id": 38, 381 | "data": { 382 | "url": "https://badges.fedoraproject.org", 383 | "icon": "badges.png", 384 | "description": "An achievements system for Fedora Contributors! \"Badges\" are awarded based on activity in the community. Can you unlock them all? You can export your badges to Mozilla's Open Badges Infrastructure\n", 385 | "user_url": "https://badges.fedoraproject.org/user/{user}" 386 | }, 387 | "name": "Badges", 388 | "status_mappings": [ 389 | "badges" 390 | ] 391 | } 392 | ] 393 | }, 394 | { 395 | "id": 39, 396 | "data": { 397 | "description": "Tools for wordsmiths -- the apps that store and archive the troves of content that Fedora authors produce. Blog posts, the wiki, and more..\n" 398 | }, 399 | "name": "Content", 400 | "children": [ 401 | { 402 | "data": { 403 | "url": "https://ask.fedoraproject.org/", 404 | "icon": "ask_fedora.png", 405 | "description": "Any question at all about Fedora? Ask it here.\n", 406 | "status_mappings": [ 407 | "ask" 408 | ] 409 | }, 410 | "name": "Ask Fedora", 411 | "id": 40 412 | }, 413 | { 414 | "data": { 415 | "url": "http://fedoraproject.org/wiki", 416 | "status_mappings": [ 417 | "wiki" 418 | ], 419 | "description": "Maintain your own user profile page, contribute to documents about features, process, and governance.\n", 420 | "icon": "mediawiki.png", 421 | "user_url": "https://fedoraproject.org/wiki/User:{user}" 422 | }, 423 | "name": "The Wiki", 424 | "id": 41 425 | }, 426 | { 427 | "data": { 428 | "url": "http://fedoramagazine.org", 429 | "description": "Fedora Magazine is a WordPress-based site which delivers all the news of the Fedora Community. (It replaces the previous Fedora Weekly News.)\n", 430 | "icon": "magazine.png" 431 | }, 432 | "name": "Fedora Magazine", 433 | "id": 42 434 | }, 435 | { 436 | "data": { 437 | "url": "http://planet.fedoraproject.org", 438 | "description": "The planet is a blog aggregator, a space accessible to you as a community member where you can express your opinion and talk about what you are doing for Fedora.\n", 439 | "icon": "planet_logo.png" 440 | }, 441 | "name": "The Planet", 442 | "id": 43 443 | }, 444 | { 445 | "data": { 446 | "url": "https://docs.fedoraproject.org", 447 | "description": "RTFM! Everything you could ever want to know. Probably the best place to find documentation about Fedora, including the changes between releases (and a big kudos to the translation teams to keep this resource up to date in the different languages!)\n", 448 | "status_mappings": [ 449 | "docs" 450 | ] 451 | }, 452 | "name": "Docs", 453 | "id": 44 454 | } 455 | ] 456 | }, 457 | { 458 | "id": 45, 459 | "data": { 460 | "description": "Tools for packagers -- where the pieces of the distribution get built.\n" 461 | }, 462 | "name": "Packaging", 463 | "children": [ 464 | { 465 | "data": { 466 | "url": "https://apps.fedoraproject.org/packages", 467 | "package_url": "https://apps.fedoraproject.org/packages/{package}", 468 | "description": "A meta-app over the other packaging apps; the best place to find out what is in the Fedora repositories. Which packages are present in which version, who is maintaining them, what patches have been applied, what bugs have been reported against them. All these kind of questions can be answered here. It is sometimes called \"Fedora Community v2\" after the old Fedora Community site.\n", 469 | "status_mappings": [ 470 | "packages" 471 | ] 472 | }, 473 | "name": "Packages", 474 | "id": 46 475 | }, 476 | { 477 | "data": { 478 | "url": "https://apps.fedoraproject.org/tagger", 479 | "package_url": "https://apps.fedoraproject.org/tagger/{package}", 480 | "icon": "tagger.png", 481 | "description": "Help build a tag cloud of all our packages.. It's actually really useful. It'll help improve the search of the \"Packages\" webapp.\n", 482 | "status_mappings": [ 483 | "tagger" 484 | ] 485 | }, 486 | "name": "Tagger", 487 | "id": 47 488 | }, 489 | { 490 | "data": { 491 | "url": "https://copr.fedoraproject.org", 492 | "status_mappings": [ 493 | "copr" 494 | ], 495 | "description": "Copr is an easy-to-use automatic build system providing a package repository as its output. You can make your **own** repositories!\n", 496 | "icon": "copr.png", 497 | "user_url": "https://copr.fedoraproject.org/coprs/{user}/" 498 | }, 499 | "name": "COPR", 500 | "id": 48 501 | }, 502 | { 503 | "data": { 504 | "url": "https://admin.fedoraproject.org/pkgdb", 505 | "package_url": "https://admin.fedoraproject.org/pkgdb/package/{package}/", 506 | "user_url": "https://admin.fedoraproject.org/pkgdb/packager/{user}/", 507 | "description": "Manage ACLs of your packages.\n", 508 | "status_mappings": [ 509 | "pkgdb" 510 | ] 511 | }, 512 | "name": "PkgDB", 513 | "id": 49 514 | }, 515 | { 516 | "data": { 517 | "description": "Koji is the software that builds RPM packages for the Fedora project. It uses Mock to create chroot environments to perform builds that are both safe and trusted.\n", 518 | "user_url": "http://koji.fedoraproject.org/koji/userinfo?userID={user}", 519 | "url": "http://koji.fedoraproject.org/koji", 520 | "package_url": "http://koji.fedoraproject.org/koji/search?match=glob&type=package&terms={package}", 521 | "status_mappings": [ 522 | "koji" 523 | ], 524 | "icon": "koji.png" 525 | }, 526 | "name": "Koji", 527 | "id": 50 528 | }, 529 | { 530 | "data": { 531 | "description": "The tool you will use to push your packages to the Fedora repositories as an update, first an update to be tested (repository: updates-testing) then a stable update (repository: updates). Behold -- the Magic Cabbage.\n", 532 | "user_url": "https://admin.fedoraproject.org/updates/user/{user}", 533 | "url": "https://admin.fedoraproject.org/updates", 534 | "package_url": "https://admin.fedoraproject.org/updates/{package}", 535 | "status_mappings": [ 536 | "bodhi" 537 | ], 538 | "icon": "bodhi.png" 539 | }, 540 | "name": "Bodhi", 541 | "id": 51 542 | }, 543 | { 544 | "data": { 545 | "url": "http://pkgs.fedoraproject.org/cgit", 546 | "package_url": "http://pkgs.fedoraproject.org/cgit/{package}.git", 547 | "icon": "git-logo.png", 548 | "description": "Ever wonder exactly what is in the new release of a Fedora package? This is where the change histories of all the packages in Fedora for every release of Fedora (and EPEL) are kept.. forever! A gold mine.\n", 549 | "status_mappings": [ 550 | "pkgs" 551 | ] 552 | }, 553 | "name": "SCM", 554 | "id": 52 555 | }, 556 | { 557 | "data": { 558 | "url": "https://darkserver.fedoraproject.org", 559 | "description": "A set of tools and JSON service to help userspace developers to debug their applications and libraries. People are be able query the service based on build-id(s) or rpm package names.\nYou can read more about why you might want to use it or you can just click below to...\n", 560 | "status_mappings": [ 561 | "darkserver" 562 | ] 563 | }, 564 | "name": "Darkserver", 565 | "id": 53 566 | } 567 | ] 568 | } 569 | ] 570 | } 571 | -------------------------------------------------------------------------------- /fonts/montserrat.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fedora-infra/fedmenu/8fb6fde588c67f6836397311efc862ccbf1306e5/fonts/montserrat.ttf -------------------------------------------------------------------------------- /img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fedora-infra/fedmenu/8fb6fde588c67f6836397311efc862ccbf1306e5/img/logo.png -------------------------------------------------------------------------------- /img/panda-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fedora-infra/fedmenu/8fb6fde588c67f6836397311efc862ccbf1306e5/img/panda-wave.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 18 | fedmenu 19 | 20 | 21 |
22 |
23 |

fedmenu

24 | 25 | source 26 | 27 | 28 | issue tracker 29 | 30 |
31 | 32 |

Try clicking the button at the bottom of the page (the Fedora logo)

33 | 34 |

This is a little demo of a menu that we can add to all our apps.

35 |

The javascript code to make this menu happen looks like this..

36 |
37 |     <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
38 |     <script src="fedora-libravatar.js"> </script> <!-- only needed for avatars -->
39 |     <script src="fedmenu.js"> </script>
40 |     <script>
41 |      fedmenu({
42 |        /* Optional. Default is 'bottom-left' */
43 |        'position': 'bottom-right',
44 | 
45 |        /* Optional. Use this if the page is "about" a user.. like on
46 |          their badges page. Do not use it for a logged in user. */
47 |        'user': 'kevin',
48 | 
49 |        /* Optional. Use this if the page is "about" a package.. like
50 |          on the pkgdb page for a package. */
51 |        'package': 'firefox',
52 |      });
53 |     </script>
54 |             
55 |

Below here there is just some text to fill out this demo page..

56 |

Lorem ipsum dolor sit amet, ad debet constituto mel, delenit quaerendum in duo. Ea mea mazim disputationi. Populo dictas efficiendi has at, et vim copiosae scaevola persequeris. An mei putant iuvaret aliquando, in mel equidem indoctum erroribus. An est vero solum voluptatum. Id sit veritus consequat elaboraret, eirmod legimus eam et, ea vix delectus definitiones. Ad graeci ullamcorper vim, ea sed nominavi patrioque.

57 |

Oblique disputationi est at, vivendum consequuntur ius cu. Suas vocent vivendum ut pri. Zril nonumy persequeris vix eu. Nihil scripta pri te, no eos sententiae reformidans, commune vituperata cum an. Nec ut feugiat platonem. Est paulo possit perpetua at, sit ea clita commune, duo ei placerat praesent dissentiunt.

58 |

Has an consectetuer mediocritatem. Populo melius in sit. Accumsan tincidunt an sea, his illum sanctus adversarium eu, sea ea offendit convenire aliquando. Justo graeco an sea, te vis latine quaerendum.

59 |

Ex mea prompta theophrastus intellegebat. Id qui legendos repudiare. Quo et quem congue pertinax, eam an dignissim quaerendum. Sed tincidunt assueverit ex, an admodum voluptua eos, cu sea fierent appareat.

60 |

Et his dico populo. Ad harum nemore nec, quo ad laoreet aliquando. In eum melius ocurreret disputando, sit ne utroque adipisci, hendrerit quaerendum at mei. Sed partem consulatu in, rationibus assueverit interesset nam ut.

61 |

Definitiones signiferumque ea vim, indoctum torquatos cum an. Primis percipitur mea ad, vis ei eruditi definitiones. Ne his stet quando, at dolore dolores per, est id novum salutandi scripserit. Vide tacimates disputationi has in. Nec malis altera constituto in, ut aperiam utroque assentior sed.

62 |

Vim cu cibo atqui paulo, nec eius diceret moderatius ut, has id odio eros accommodare. Possim placerat delicata cum eu. Cu duo solet animal ceteros, cu usu euismod aliquam imperdiet, nostro inermis gloriatur has te. Cu mazim disputationi usu, cu apeirian expetenda eos, aperiam salutandi id mel. Nam ad quidam splendide, nec ut lorem molestiae. Alia vero ex vix, audiam imperdiet per in, eu cum nullam causae.

63 |

Melius rationibus mediocritatem te vim. Mea ne dicunt causae inermis, sit commune dissentias ad, cu pro persequeris voluptatibus. Sit aperiri splendide vulputate cu, qui nobis singulis pertinax ex, pro id dicit deseruisse. Tempor prompta consetetur nec ex, mel ut malis omnesque offendit.

64 |

Eam ex accusam persecuti, vide natum duo an. Ei duo iusto appellantur. Brute perfecto sed ut. Cum ex brute definiebas, iriure option quaestio eos te. Sumo persius cu his, eu aperiam denique sea.

65 |

Ei mei vidisse ornatus epicuri, nec epicurei repudiare ne. Usu et inani fierent antiopam. Ad usu appetere persecuti eloquentiam, est ponderum postulant consequuntur ad. Quando semper mel ne, fastidii disputando sit in, his vide putent ceteros eu.

66 |

Esse vituperata ad usu. Tantas omittantur at quo. Quo eu velit quaestio rationibus. Vel dicat alterum prodesset at, ei vis nusquam insolens, te inciderint comprehensam vim. Purto quando facete id duo, alii dicit epicurei nec te, vix ancillae epicurei volutpat te.

67 |

Te pri ceteros probatus, ad scripta scriptorem vituperatoribus eos. Quo honestatis consequuntur ne, nostrud convenire sapientem eu duo. Animal urbanitas at sit. Pri ex partem ceteros pertinax, mazim tation exerci an has, ne pri eirmod abhorreant moderatius. Sea te errem appareat accusamus, elitr repudiare an eos, ne eum meis voluptatum consectetuer. Vel debitis definitiones ne. Labitur docendi quo cu.

68 |

Congue laboramus cu qui. Eam odio omittam at, vel ei dicam ridens placerat, phaedrum vituperatoribus eu ius. Essent quodsi inciderint sea ea. Nec ex dicam splendide, duo erant commune eu. Sit id nihil sapientem suavitate. Legendos quaerendum cu usu.

69 |

Nibh volutpat inciderint mei id. Ius ei tibique convenire, prompta ullamcorper voluptatibus has eu, pertinacia inciderint ne per. Illum exerci euismod eos ut, ne malorum tincidunt sea. Ullum assentior pri no. Te eam fabellas dissentiet. Ut pro option moderatius.

70 |

Graeci accumsan vix ut, ex mea iusto nihil, ex case habemus usu. Mazim quando cu vim. Te atqui nusquam est. Alii appetere has ne, id nominavi oportere tractatos eam, quot doctus labitur no sit. Mei reque viderer facilisis an. Sed iusto ludus te.

71 |

At periculis ocurreret per. Ne convenire argumentum quo. Consul diceret argumentum in nam, autem exerci definitionem eu has. Vel omnis viderer feugait te, idque commune nam ut, id cum error evertitur. Eum illum minim primis ex.

72 |
73 | 74 | 75 | -------------------------------------------------------------------------------- /js/fedmenu.js: -------------------------------------------------------------------------------- 1 | var fedmenu = function(options) { $(document).ready(function() { 2 | var defaults = { 3 | 'url': 'https://apps.fedoraproject.org/js/data.js', 4 | 'mimeType': undefined, // Only needed for local development 5 | 6 | 'context': document, // Alternatively, parent.document for iframes. 7 | 8 | 'position': 'bottom-left', 9 | 10 | 'user': null, 11 | 'package': null, 12 | }; 13 | 14 | // Our options object is called 'o' for shorthand 15 | var o = $.extend({}, defaults, options || {}); 16 | 17 | // Also, hang on to the selector context with a shorthand 'c' 18 | var c = o['context']; 19 | 20 | var buttons = ""; 21 | if (o.user !== null) buttons += '
'; 22 | if (o.package !== null) buttons += '
'; 23 | buttons += '
'; 24 | 25 | var script = $("script[src$='fedmenu.js']").attr('src'); 26 | var base = script.slice(0, -13); 27 | 28 | // Add a section if one doesn't exist. 29 | // https://github.com/fedora-infra/fedmenu/issues/6 30 | if ($('head', c).length == 0) $('html', c).append(''); 31 | $('head', c).append(''); 32 | 33 | $('body', c).append( 34 | '
' + 35 | buttons + '
'); 36 | 37 | $('body', c).append('
'); 38 | 39 | var imgurl; 40 | if (o.user !== null) { 41 | imgurl = libravatar.url(o.user); 42 | $('#fedmenu-user-button .img', c).css('background-image', 'url("' + imgurl + '")'); 43 | } 44 | if (o.package !== null) { 45 | /* This icon is not always going to exist, so we should put in an 46 | * apache rule that redirects to a default icon if this file 47 | * isn't there. */ 48 | imgurl = 'https://apps.fedoraproject.org/packages/images/icons/' + o.package + '.png'; 49 | $('#fedmenu-package-button .img', c).css('background-image', 'url("' + imgurl + '")'); 50 | } 51 | 52 | // Define three functions used to generate the content of the menu panes 53 | var make_main_content_html = function(i, node) { 54 | var html = "
" + 55 | node.name + "
"; 64 | 65 | if ($('#fedmenu-main-content').length == 0) { 66 | $('body', c).append('
'); 67 | $('#fedmenu-main-content', c).append(""); 68 | $('#fedmenu-main-content', c).append("

Fedora Infrastructure Apps

"); 69 | $('#fedmenu-main-content', c).append("

Legal

"); 70 | } 71 | $("#fedmenu-main-content", c).append(html); 72 | }; 73 | 74 | var make_user_content_html = function(i, node) { 75 | var html = "
" + 76 | node.name + "
"; 96 | $("#fedmenu-user-content", c).append(html); 97 | } 98 | }; 99 | 100 | var make_package_content_html = function(i, node) { 101 | var html = "
" + 102 | node.name + "
"; 117 | if ($('#fedmenu-package-content').length == 0) { 118 | $('body', c).append('
'); 119 | $('#fedmenu-package-content', c).append(""); 120 | $('#fedmenu-package-content', c).append("

View the " + o.package + " package elsewhere

"); 121 | } 122 | $("#fedmenu-package-content", c).append(html); 123 | } 124 | }; 125 | 126 | // A handy lookup for those functions we just defined. 127 | var content_makers = { 128 | 'main': make_main_content_html, 129 | 'user': make_user_content_html, 130 | 'package': make_package_content_html, 131 | }; 132 | 133 | var normalize = function(url) { 134 | return url.slice(url.indexOf('://') + 3).replace(/\/$/, ""); 135 | } 136 | 137 | // Figure out the current site that we're on, if possible, and return the 138 | // data we have on it from the json we loaded. 139 | var get_current_site = function() { 140 | var found = null; 141 | var ours = normalize(window.location.toString()); 142 | $.each(master_data, function(i, node) { 143 | $.each(node.children, function(j, leaf) { 144 | var theirs = normalize(leaf.data.url); 145 | if (ours.indexOf(theirs) === 0) found = leaf; 146 | }) 147 | }); 148 | return found; 149 | } 150 | 151 | // Try to construct a little footer for the menus. 152 | var add_footer_links = function() { 153 | var site = get_current_site(); 154 | var content = ""; 155 | if (site != null && site.data.bugs_url != undefined && site.data.source_url != undefined) { 156 | content = content + "Problems with " + site.name + 157 | "? Please file bugs or check out the source."; 160 | } 161 | content = content + "
Powered by fedmenu."; 162 | $(".fedmenu-content").append("

" + content + "

"); 163 | } 164 | 165 | $.ajax({ 166 | url: o.url, 167 | mimeType: o.mimeType, 168 | dataType: 'script', 169 | cache: true, 170 | error: function(err) { 171 | console.log('Error getting ' + o.url); 172 | console.log(err); 173 | }, 174 | success: function(script) { 175 | // Save this for later... 176 | master_data = json.children; 177 | }, 178 | }); 179 | 180 | var selector = function(t) { 181 | return "#fedmenu-wrapper," + 182 | "#fedmenu-" + t + "-button," + 183 | "#fedmenu-" + t + "-content"; 184 | }; 185 | 186 | var activate = function(t) { 187 | $.each(master_data, content_makers[t]); 188 | $(".fedmenu-exit", c).click(function() {deactivate(t);}); 189 | add_footer_links(); 190 | setTimeout(function() {$(selector(t), c).addClass('fedmenu-active');}, 50); 191 | }; 192 | var deactivate = function(t) { 193 | $(selector(t), c).removeClass('fedmenu-active'); 194 | $('.fedmenu-content', c).remove(); // destroy content. 195 | }; 196 | 197 | var click_factory = function(t) { return function() { 198 | if ($(this).hasClass('fedmenu-active')) { 199 | deactivate(t); 200 | } else { 201 | // Deactivate any others that may be active before starting anew. 202 | deactivate('main'); deactivate('user'); deactivate('package'); 203 | activate(t); 204 | } 205 | };}; 206 | $("#fedmenu-main-button", c).click(click_factory('main')); 207 | $("#fedmenu-user-button", c).click(click_factory('user')); 208 | $("#fedmenu-package-button", c).click(click_factory('package')); 209 | $("#fedmenu-wrapper,.fedmenu-exit", c).click(function() { 210 | deactivate('main'); 211 | deactivate('user'); 212 | deactivate('package'); 213 | }); 214 | $(document).keydown(function(event) { 215 | if (event.key == 'Escape' || event.key == 'Esc'){ 216 | deactivate('main'); 217 | deactivate('user'); 218 | deactivate('package'); 219 | } 220 | }); 221 | }); }; 222 | -------------------------------------------------------------------------------- /js/fedora-libravatar.js: -------------------------------------------------------------------------------- 1 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ 2 | /* Libravatar retrieval for Fedora FAS usernames */ 3 | /* (c) Ralph Bean 2015 / MIT License */ 4 | /* Original SHA-256 implementation in JavaScript */ 5 | /* (c) Chris Veness 2002-2014 / MIT Licence */ 6 | /* */ 7 | /* - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html */ 8 | /* http://csrc.nist.gov/groups/ST/toolkit/examples.html */ 9 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ 10 | 11 | 'use strict'; 12 | 13 | 14 | var sha256 = {}; 15 | var libravatar = {}; 16 | 17 | /** 18 | * Generates SHA-256 hash of string. 19 | * 20 | * @param {string} msg - String to be hashed 21 | * @returns {string} Hash of msg as hex character string 22 | */ 23 | sha256.hash = function(msg) { 24 | // convert string to UTF-8, as SHA only deals with byte-streams 25 | msg = msg.utf8Encode(); 26 | 27 | // constants [§4.2.2] 28 | var K = [ 29 | 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 30 | 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 31 | 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 32 | 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 33 | 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 34 | 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 35 | 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 36 | 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 ]; 37 | // initial hash value [§5.3.1] 38 | var H = [ 39 | 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ]; 40 | 41 | // PREPROCESSING 42 | 43 | msg += String.fromCharCode(0x80); // add trailing '1' bit (+ 0's padding) to string [§5.1.1] 44 | 45 | // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1] 46 | var l = msg.length/4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length 47 | var N = Math.ceil(l/16); // number of 16-integer-blocks required to hold 'l' ints 48 | var M = new Array(N); 49 | 50 | for (var i=0; i>> 32, but since JS converts 59 | // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators 60 | M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14]); 61 | M[N-1][15] = ((msg.length-1)*8) & 0xffffffff; 62 | 63 | 64 | // HASH COMPUTATION [§6.1.2] 65 | 66 | var W = new Array(64); var a, b, c, d, e, f, g, h; 67 | for (var i=0; i>> n) | (x << (32-n)); 106 | }; 107 | 108 | sha256.BigSigma0 = function(x) { return sha256.ROTR(2, x) ^ sha256.ROTR(13, x) ^ sha256.ROTR(22, x); }; 109 | sha256.BigSigma1 = function(x) { return sha256.ROTR(6, x) ^ sha256.ROTR(11, x) ^ sha256.ROTR(25, x); }; 110 | sha256.SmallSigma0 = function(x) { return sha256.ROTR(7, x) ^ sha256.ROTR(18, x) ^ (x>>>3); }; 111 | sha256.SmallSigma1 = function(x) { return sha256.ROTR(17, x) ^ sha256.ROTR(19, x) ^ (x>>>10); }; 112 | sha256.Ch = function(x, y, z) { return (x & y) ^ (~x & z); }; 113 | sha256.Maj = function(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); }; 114 | 115 | sha256.toHexStr = function(n) { 116 | // note can't use toString(16) as it is implementation-dependant, 117 | // and in IE returns signed numbers when used on full words 118 | var s="", v; 119 | for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); } 120 | return s; 121 | }; 122 | 123 | 124 | if (typeof String.prototype.utf8Encode == 'undefined') { 125 | String.prototype.utf8Encode = function() { 126 | return unescape( encodeURIComponent( this ) ); 127 | }; 128 | } 129 | if (typeof String.prototype.utf8Decode == 'undefined') { 130 | String.prototype.utf8Decode = function() { 131 | try { 132 | return decodeURIComponent( escape( this ) ); 133 | } catch (e) { 134 | return this; // invalid UTF-8? return as-is 135 | } 136 | }; 137 | } 138 | 139 | /* This is all that we need the sha256 code for... */ 140 | libravatar.url = function(username, s, d) { 141 | if (s === undefined) s = 64; 142 | if (d === undefined) d = 'retro'; 143 | 144 | var openid = 'http://' + username + '.id.fedoraproject.org/' 145 | var hash = sha256.hash(openid); 146 | 147 | return 'https://seccdn.libravatar.org/avatar/' + hash + '?s=' + s + '&d=' + d; 148 | } 149 | -------------------------------------------------------------------------------- /js/jquery-1.11.2.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ 2 | !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; 3 | return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("