├── .eslintrc ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── ext ├── datatables │ ├── css │ │ ├── demo_table.css │ │ ├── demo_table_jui.css │ │ └── jquery-ui-1.10.3.custom.min.css │ └── js │ │ └── jquery.dataTables.min.js ├── dayjs.min.js ├── jquery-ui-1.10.3.custom │ └── css │ │ └── smoothness │ │ ├── images │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ └── ui-icons_888888_256x240.png │ │ └── jquery-ui-1.10.3.custom.min.css ├── jquery.dataTables.min.js ├── jquery.min.js └── relativeTime.js ├── icons ├── README.md ├── button16_lightgrey.png ├── button19_lightgrey.png ├── button38_lightgrey.png ├── button48_lightgrey.png ├── button512.png ├── button512_grey.png ├── button512_lightgrey.png ├── calendar.png ├── icon128.png ├── icon128_2.png ├── icon16.png ├── icon19.png ├── icon38.png └── icon48.png ├── main.html ├── manifest.json ├── package-lock.json ├── package.json ├── src ├── background.js ├── main.css └── main.js └── zip_for_submission.sh /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "rules": { 4 | "global-strict": 0, 5 | "camelcase": 0, 6 | "quotes": 0, 7 | "no-console": 0, 8 | "no-use-before-define": 0, 9 | "no-underscore-dangle": 0, 10 | "dot-notation": 0 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | *.zip 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | ## [v0.7] - 2021-09-12 3 | 4 | ### Added 5 | - Add package.json and package update procedure in README 6 | ### Changed 7 | - Upgrade Chrome Extension Manifest from v2 to newest v3 8 | - Removed unnecessary permissions 9 | - Upgrade jquery to latest version 10 | - Replace moment.js with day.js 11 | - Start following the [keep a changelog format](https://keepachangelog.com/en/1.0.0/) for this changelog 12 | 13 | ## [v0.6] - 2015-08-22 14 | ### Changed 15 | - Reduce extension size from 429KB to 158KB (by removing unused assets) 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 nickscript0 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # chrome-bookmarks-table 2 | A Chrome Extension ([available on the chrome web store](https://chrome.google.com/webstore/detail/bookmarks-table/eaabmhkokgaboihbikohlooneokghmcp)) that displays your bookmarks by date in a sortable searchable table 3 | 4 | ## Updating 5 | ```bash 6 | # Update packages 7 | npm install 8 | 9 | # Copy the minimal deps to ext/ so we don't have to bundle node_modules 10 | cp node_modules/jquery/dist/jquery.min.js ext/ 11 | cp ext/datatables/js/jquery.dataTables.min.js ext/ 12 | cp node_modules/dayjs/dayjs.min.js ext/ 13 | cp node_modules/dayjs/plugin/relativeTime.js ext/ 14 | 15 | # Zip and upload new version to the Chrome Developer Dashboard https://chrome.google.com/webstore/devconsole 16 | ./zip_for_submission.sh 17 | ``` -------------------------------------------------------------------------------- /ext/datatables/css/demo_table.css: -------------------------------------------------------------------------------- 1 | /* 2 | * File: demo_table.css 3 | * CVS: $Id$ 4 | * Description: CSS descriptions for DataTables demo pages 5 | * Author: Allan Jardine 6 | * Created: Tue May 12 06:47:22 BST 2009 7 | * Modified: $Date$ by $Author$ 8 | * Language: CSS 9 | * Project: DataTables 10 | * 11 | * Copyright 2009 Allan Jardine. All Rights Reserved. 12 | * 13 | * *************************************************************************** 14 | * DESCRIPTION 15 | * 16 | * The styles given here are suitable for the demos that are used with the standard DataTables 17 | * distribution (see www.datatables.net). You will most likely wish to modify these styles to 18 | * meet the layout requirements of your site. 19 | * 20 | * Common issues: 21 | * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is 22 | * no conflict between the two pagination types. If you want to use full_numbers pagination 23 | * ensure that you either have "example_alt_pagination" as a body class name, or better yet, 24 | * modify that selector. 25 | * Note that the path used for Images is relative. All images are by default located in 26 | * ../images/ - relative to this CSS file. 27 | */ 28 | 29 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 30 | * DataTables features 31 | */ 32 | 33 | .dataTables_wrapper { 34 | position: relative; 35 | clear: both; 36 | zoom: 1; /* Feeling sorry for IE */ 37 | } 38 | 39 | .dataTables_processing { 40 | position: absolute; 41 | top: 50%; 42 | left: 50%; 43 | width: 250px; 44 | height: 30px; 45 | margin-left: -125px; 46 | margin-top: -15px; 47 | padding: 14px 0 2px 0; 48 | border: 1px solid #ddd; 49 | text-align: center; 50 | color: #999; 51 | font-size: 14px; 52 | background-color: white; 53 | } 54 | 55 | .dataTables_length { 56 | width: 40%; 57 | float: left; 58 | } 59 | 60 | .dataTables_filter { 61 | width: 50%; 62 | float: right; 63 | text-align: right; 64 | } 65 | 66 | .dataTables_info { 67 | width: 60%; 68 | float: left; 69 | } 70 | 71 | .dataTables_paginate { 72 | float: right; 73 | text-align: right; 74 | } 75 | 76 | /* Pagination nested */ 77 | .paginate_disabled_previous, .paginate_enabled_previous, 78 | .paginate_disabled_next, .paginate_enabled_next { 79 | height: 19px; 80 | float: left; 81 | cursor: pointer; 82 | *cursor: hand; 83 | color: #111 !important; 84 | } 85 | .paginate_disabled_previous:hover, .paginate_enabled_previous:hover, 86 | .paginate_disabled_next:hover, .paginate_enabled_next:hover { 87 | text-decoration: none !important; 88 | } 89 | .paginate_disabled_previous:active, .paginate_enabled_previous:active, 90 | .paginate_disabled_next:active, .paginate_enabled_next:active { 91 | outline: none; 92 | } 93 | 94 | .paginate_disabled_previous, 95 | .paginate_disabled_next { 96 | color: #666 !important; 97 | } 98 | .paginate_disabled_previous, .paginate_enabled_previous { 99 | padding-left: 23px; 100 | } 101 | .paginate_disabled_next, .paginate_enabled_next { 102 | padding-right: 23px; 103 | margin-left: 10px; 104 | } 105 | 106 | .paginate_disabled_previous { 107 | background: url('../images/back_disabled.png') no-repeat top left; 108 | } 109 | 110 | .paginate_enabled_previous { 111 | background: url('../images/back_enabled.png') no-repeat top left; 112 | } 113 | .paginate_enabled_previous:hover { 114 | background: url('../images/back_enabled_hover.png') no-repeat top left; 115 | } 116 | 117 | .paginate_disabled_next { 118 | background: url('../images/forward_disabled.png') no-repeat top right; 119 | } 120 | 121 | .paginate_enabled_next { 122 | background: url('../images/forward_enabled.png') no-repeat top right; 123 | } 124 | .paginate_enabled_next:hover { 125 | background: url('../images/forward_enabled_hover.png') no-repeat top right; 126 | } 127 | 128 | 129 | 130 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 131 | * DataTables display 132 | */ 133 | table.display { 134 | margin: 0 auto; 135 | clear: both; 136 | width: 100%; 137 | 138 | /* Note Firefox 3.5 and before have a bug with border-collapse 139 | * ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 ) 140 | * border-spacing: 0; is one possible option. Conditional-css.com is 141 | * useful for this kind of thing 142 | * 143 | * Further note IE 6/7 has problems when calculating widths with border width. 144 | * It subtracts one px relative to the other browsers from the first column, and 145 | * adds one to the end... 146 | * 147 | * If you want that effect I'd suggest setting a border-top/left on th/td's and 148 | * then filling in the gaps with other borders. 149 | */ 150 | } 151 | 152 | table.display thead th { 153 | padding: 3px 18px 3px 10px; 154 | border-bottom: 1px solid black; 155 | font-weight: bold; 156 | cursor: pointer; 157 | * cursor: hand; 158 | } 159 | 160 | table.display tfoot th { 161 | padding: 3px 18px 3px 10px; 162 | border-top: 1px solid black; 163 | font-weight: bold; 164 | } 165 | 166 | table.display tr.heading2 td { 167 | border-bottom: 1px solid #aaa; 168 | } 169 | 170 | table.display td { 171 | padding: 3px 10px; 172 | } 173 | 174 | table.display td.center { 175 | text-align: center; 176 | } 177 | 178 | 179 | 180 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 181 | * DataTables sorting 182 | */ 183 | 184 | .sorting_asc { 185 | background: url('../images/sort_asc.png') no-repeat center right; 186 | } 187 | 188 | .sorting_desc { 189 | background: url('../images/sort_desc.png') no-repeat center right; 190 | } 191 | 192 | .sorting { 193 | background: url('../images/sort_both.png') no-repeat center right; 194 | } 195 | 196 | .sorting_asc_disabled { 197 | background: url('../images/sort_asc_disabled.png') no-repeat center right; 198 | } 199 | 200 | .sorting_desc_disabled { 201 | background: url('../images/sort_desc_disabled.png') no-repeat center right; 202 | } 203 | 204 | table.display thead th:active, 205 | table.display thead td:active { 206 | outline: none; 207 | } 208 | 209 | 210 | 211 | 212 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 213 | * DataTables row classes 214 | */ 215 | table.display tr.odd.gradeA { 216 | background-color: #ddffdd; 217 | } 218 | 219 | table.display tr.even.gradeA { 220 | background-color: #eeffee; 221 | } 222 | 223 | table.display tr.odd.gradeC { 224 | background-color: #ddddff; 225 | } 226 | 227 | table.display tr.even.gradeC { 228 | background-color: #eeeeff; 229 | } 230 | 231 | table.display tr.odd.gradeX { 232 | background-color: #ffdddd; 233 | } 234 | 235 | table.display tr.even.gradeX { 236 | background-color: #ffeeee; 237 | } 238 | 239 | table.display tr.odd.gradeU { 240 | background-color: #ddd; 241 | } 242 | 243 | table.display tr.even.gradeU { 244 | background-color: #eee; 245 | } 246 | 247 | 248 | tr.odd { 249 | background-color: #E2E4FF; 250 | } 251 | 252 | tr.even { 253 | background-color: white; 254 | } 255 | 256 | 257 | 258 | 259 | 260 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 261 | * Misc 262 | */ 263 | .dataTables_scroll { 264 | clear: both; 265 | } 266 | 267 | .dataTables_scrollBody { 268 | *margin-top: -1px; 269 | -webkit-overflow-scrolling: touch; 270 | } 271 | 272 | .top, .bottom { 273 | padding: 15px; 274 | background-color: #F5F5F5; 275 | border: 1px solid #CCCCCC; 276 | } 277 | 278 | .top .dataTables_info { 279 | float: none; 280 | } 281 | 282 | .clear { 283 | clear: both; 284 | } 285 | 286 | .dataTables_empty { 287 | text-align: center; 288 | } 289 | 290 | tfoot input { 291 | margin: 0.5em 0; 292 | width: 100%; 293 | color: #444; 294 | } 295 | 296 | tfoot input.search_init { 297 | color: #999; 298 | } 299 | 300 | td.group { 301 | background-color: #d1cfd0; 302 | border-bottom: 2px solid #A19B9E; 303 | border-top: 2px solid #A19B9E; 304 | } 305 | 306 | td.details { 307 | background-color: #d1cfd0; 308 | border: 2px solid #A19B9E; 309 | } 310 | 311 | 312 | .example_alt_pagination div.dataTables_info { 313 | width: 40%; 314 | } 315 | 316 | .paging_full_numbers { 317 | width: 400px; 318 | height: 22px; 319 | line-height: 22px; 320 | } 321 | 322 | .paging_full_numbers a:active { 323 | outline: none 324 | } 325 | 326 | .paging_full_numbers a:hover { 327 | text-decoration: none; 328 | } 329 | 330 | .paging_full_numbers a.paginate_button, 331 | .paging_full_numbers a.paginate_active { 332 | border: 1px solid #aaa; 333 | -webkit-border-radius: 5px; 334 | -moz-border-radius: 5px; 335 | padding: 2px 5px; 336 | margin: 0 3px; 337 | cursor: pointer; 338 | *cursor: hand; 339 | color: #333 !important; 340 | } 341 | 342 | .paging_full_numbers a.paginate_button { 343 | background-color: #ddd; 344 | } 345 | 346 | .paging_full_numbers a.paginate_button:hover { 347 | background-color: #ccc; 348 | text-decoration: none !important; 349 | } 350 | 351 | .paging_full_numbers a.paginate_active { 352 | background-color: #99B3FF; 353 | } 354 | 355 | table.display tr.even.row_selected td { 356 | background-color: #B0BED9; 357 | } 358 | 359 | table.display tr.odd.row_selected td { 360 | background-color: #9FAFD1; 361 | } 362 | 363 | 364 | /* 365 | * Sorting classes for columns 366 | */ 367 | /* For the standard odd/even */ 368 | tr.odd td.sorting_1 { 369 | background-color: #D3D6FF; 370 | } 371 | 372 | tr.odd td.sorting_2 { 373 | background-color: #DADCFF; 374 | } 375 | 376 | tr.odd td.sorting_3 { 377 | background-color: #E0E2FF; 378 | } 379 | 380 | tr.even td.sorting_1 { 381 | background-color: #EAEBFF; 382 | } 383 | 384 | tr.even td.sorting_2 { 385 | background-color: #F2F3FF; 386 | } 387 | 388 | tr.even td.sorting_3 { 389 | background-color: #F9F9FF; 390 | } 391 | 392 | 393 | /* For the Conditional-CSS grading rows */ 394 | /* 395 | Colour calculations (based off the main row colours) 396 | Level 1: 397 | dd > c4 398 | ee > d5 399 | Level 2: 400 | dd > d1 401 | ee > e2 402 | */ 403 | tr.odd.gradeA td.sorting_1 { 404 | background-color: #c4ffc4; 405 | } 406 | 407 | tr.odd.gradeA td.sorting_2 { 408 | background-color: #d1ffd1; 409 | } 410 | 411 | tr.odd.gradeA td.sorting_3 { 412 | background-color: #d1ffd1; 413 | } 414 | 415 | tr.even.gradeA td.sorting_1 { 416 | background-color: #d5ffd5; 417 | } 418 | 419 | tr.even.gradeA td.sorting_2 { 420 | background-color: #e2ffe2; 421 | } 422 | 423 | tr.even.gradeA td.sorting_3 { 424 | background-color: #e2ffe2; 425 | } 426 | 427 | tr.odd.gradeC td.sorting_1 { 428 | background-color: #c4c4ff; 429 | } 430 | 431 | tr.odd.gradeC td.sorting_2 { 432 | background-color: #d1d1ff; 433 | } 434 | 435 | tr.odd.gradeC td.sorting_3 { 436 | background-color: #d1d1ff; 437 | } 438 | 439 | tr.even.gradeC td.sorting_1 { 440 | background-color: #d5d5ff; 441 | } 442 | 443 | tr.even.gradeC td.sorting_2 { 444 | background-color: #e2e2ff; 445 | } 446 | 447 | tr.even.gradeC td.sorting_3 { 448 | background-color: #e2e2ff; 449 | } 450 | 451 | tr.odd.gradeX td.sorting_1 { 452 | background-color: #ffc4c4; 453 | } 454 | 455 | tr.odd.gradeX td.sorting_2 { 456 | background-color: #ffd1d1; 457 | } 458 | 459 | tr.odd.gradeX td.sorting_3 { 460 | background-color: #ffd1d1; 461 | } 462 | 463 | tr.even.gradeX td.sorting_1 { 464 | background-color: #ffd5d5; 465 | } 466 | 467 | tr.even.gradeX td.sorting_2 { 468 | background-color: #ffe2e2; 469 | } 470 | 471 | tr.even.gradeX td.sorting_3 { 472 | background-color: #ffe2e2; 473 | } 474 | 475 | tr.odd.gradeU td.sorting_1 { 476 | background-color: #c4c4c4; 477 | } 478 | 479 | tr.odd.gradeU td.sorting_2 { 480 | background-color: #d1d1d1; 481 | } 482 | 483 | tr.odd.gradeU td.sorting_3 { 484 | background-color: #d1d1d1; 485 | } 486 | 487 | tr.even.gradeU td.sorting_1 { 488 | background-color: #d5d5d5; 489 | } 490 | 491 | tr.even.gradeU td.sorting_2 { 492 | background-color: #e2e2e2; 493 | } 494 | 495 | tr.even.gradeU td.sorting_3 { 496 | background-color: #e2e2e2; 497 | } 498 | 499 | 500 | /* 501 | * Row highlighting example 502 | */ 503 | .ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { 504 | background-color: #ECFFB3; 505 | } 506 | 507 | .ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { 508 | background-color: #E6FF99; 509 | } 510 | 511 | .ex_highlight_row #example tr.even:hover { 512 | background-color: #ECFFB3; 513 | } 514 | 515 | .ex_highlight_row #example tr.even:hover td.sorting_1 { 516 | background-color: #DDFF75; 517 | } 518 | 519 | .ex_highlight_row #example tr.even:hover td.sorting_2 { 520 | background-color: #E7FF9E; 521 | } 522 | 523 | .ex_highlight_row #example tr.even:hover td.sorting_3 { 524 | background-color: #E2FF89; 525 | } 526 | 527 | .ex_highlight_row #example tr.odd:hover { 528 | background-color: #E6FF99; 529 | } 530 | 531 | .ex_highlight_row #example tr.odd:hover td.sorting_1 { 532 | background-color: #D6FF5C; 533 | } 534 | 535 | .ex_highlight_row #example tr.odd:hover td.sorting_2 { 536 | background-color: #E0FF84; 537 | } 538 | 539 | .ex_highlight_row #example tr.odd:hover td.sorting_3 { 540 | background-color: #DBFF70; 541 | } 542 | 543 | 544 | /* 545 | * KeyTable 546 | */ 547 | table.KeyTable td { 548 | border: 3px solid transparent; 549 | } 550 | 551 | table.KeyTable td.focus { 552 | border: 3px solid #3366FF; 553 | } 554 | 555 | table.display tr.gradeA { 556 | background-color: #eeffee; 557 | } 558 | 559 | table.display tr.gradeC { 560 | background-color: #ddddff; 561 | } 562 | 563 | table.display tr.gradeX { 564 | background-color: #ffdddd; 565 | } 566 | 567 | table.display tr.gradeU { 568 | background-color: #ddd; 569 | } 570 | 571 | div.box { 572 | height: 100px; 573 | padding: 10px; 574 | overflow: auto; 575 | border: 1px solid #8080FF; 576 | background-color: #E5E5FF; 577 | } 578 | -------------------------------------------------------------------------------- /ext/datatables/css/demo_table_jui.css: -------------------------------------------------------------------------------- 1 | /* 2 | * File: demo_table_jui.css 3 | * CVS: $Id$ 4 | * Description: CSS descriptions for DataTables demo pages 5 | * Author: Allan Jardine 6 | * Created: Tue May 12 06:47:22 BST 2009 7 | * Modified: $Date$ by $Author$ 8 | * Language: CSS 9 | * Project: DataTables 10 | * 11 | * Copyright 2009 Allan Jardine. All Rights Reserved. 12 | * 13 | * *************************************************************************** 14 | * DESCRIPTION 15 | * 16 | * The styles given here are suitable for the demos that are used with the standard DataTables 17 | * distribution (see www.datatables.net). You will most likely wish to modify these styles to 18 | * meet the layout requirements of your site. 19 | * 20 | * Common issues: 21 | * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is 22 | * no conflict between the two pagination types. If you want to use full_numbers pagination 23 | * ensure that you either have "example_alt_pagination" as a body class name, or better yet, 24 | * modify that selector. 25 | * Note that the path used for Images is relative. All images are by default located in 26 | * ../images/ - relative to this CSS file. 27 | */ 28 | 29 | 30 | /* 31 | * jQuery UI specific styling 32 | */ 33 | 34 | .paging_two_button .ui-button { 35 | float: left; 36 | cursor: pointer; 37 | * cursor: hand; 38 | } 39 | 40 | .paging_full_numbers .ui-button { 41 | padding: 2px 6px; 42 | margin: 0; 43 | cursor: pointer; 44 | * cursor: hand; 45 | color: #333 !important; 46 | } 47 | 48 | .dataTables_paginate .ui-button { 49 | margin-right: -0.1em !important; 50 | } 51 | 52 | .paging_full_numbers { 53 | width: 350px !important; 54 | } 55 | 56 | .dataTables_wrapper .ui-toolbar { 57 | padding: 5px; 58 | } 59 | 60 | .dataTables_paginate { 61 | width: auto; 62 | } 63 | 64 | .dataTables_info { 65 | padding-top: 3px; 66 | } 67 | 68 | table.display thead th { 69 | padding: 3px 0px 3px 10px; 70 | cursor: pointer; 71 | * cursor: hand; 72 | } 73 | 74 | div.dataTables_wrapper .ui-widget-header { 75 | font-weight: normal; 76 | } 77 | 78 | 79 | /* 80 | * Sort arrow icon positioning 81 | */ 82 | table.display thead th div.DataTables_sort_wrapper { 83 | position: relative; 84 | padding-right: 20px; 85 | } 86 | 87 | table.display thead th div.DataTables_sort_wrapper span { 88 | position: absolute; 89 | top: 50%; 90 | margin-top: -8px; 91 | right: 0; 92 | } 93 | 94 | 95 | 96 | 97 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 98 | * 99 | * Everything below this line is the same as demo_table.css. This file is 100 | * required for 'cleanliness' of the markup 101 | * 102 | * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 103 | 104 | 105 | 106 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 107 | * DataTables features 108 | */ 109 | 110 | .dataTables_wrapper { 111 | position: relative; 112 | clear: both; 113 | } 114 | 115 | .dataTables_processing { 116 | position: absolute; 117 | top: 0px; 118 | left: 50%; 119 | width: 250px; 120 | margin-left: -125px; 121 | border: 1px solid #ddd; 122 | text-align: center; 123 | color: #999; 124 | font-size: 11px; 125 | padding: 2px 0; 126 | } 127 | 128 | .dataTables_length { 129 | width: 40%; 130 | float: left; 131 | } 132 | 133 | .dataTables_filter { 134 | width: 50%; 135 | float: right; 136 | text-align: right; 137 | } 138 | 139 | .dataTables_info { 140 | width: 50%; 141 | float: left; 142 | } 143 | 144 | .dataTables_paginate { 145 | float: right; 146 | text-align: right; 147 | } 148 | 149 | 150 | 151 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 152 | * DataTables display 153 | */ 154 | table.display { 155 | margin: 0 auto; 156 | width: 100%; 157 | clear: both; 158 | border-collapse: collapse; 159 | } 160 | 161 | table.display tfoot th { 162 | padding: 3px 0px 3px 10px; 163 | font-weight: bold; 164 | font-weight: normal; 165 | } 166 | 167 | table.display tr.heading2 td { 168 | border-bottom: 1px solid #aaa; 169 | } 170 | 171 | table.display td { 172 | padding: 3px 10px; 173 | } 174 | 175 | table.display td.center { 176 | text-align: center; 177 | } 178 | 179 | 180 | 181 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 182 | * DataTables sorting 183 | */ 184 | 185 | .sorting_asc { 186 | background: url('../images/sort_asc.png') no-repeat center right; 187 | } 188 | 189 | .sorting_desc { 190 | background: url('../images/sort_desc.png') no-repeat center right; 191 | } 192 | 193 | .sorting { 194 | background: url('../images/sort_both.png') no-repeat center right; 195 | } 196 | 197 | .sorting_asc_disabled { 198 | background: url('../images/sort_asc_disabled.png') no-repeat center right; 199 | } 200 | 201 | .sorting_desc_disabled { 202 | background: url('../images/sort_desc_disabled.png') no-repeat center right; 203 | } 204 | 205 | 206 | 207 | 208 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 209 | * DataTables row classes 210 | */ 211 | table.display tr.odd.gradeA { 212 | background-color: #ddffdd; 213 | } 214 | 215 | table.display tr.even.gradeA { 216 | background-color: #eeffee; 217 | } 218 | 219 | 220 | 221 | 222 | table.display tr.odd.gradeA { 223 | background-color: #ddffdd; 224 | } 225 | 226 | table.display tr.even.gradeA { 227 | background-color: #eeffee; 228 | } 229 | 230 | table.display tr.odd.gradeC { 231 | background-color: #ddddff; 232 | } 233 | 234 | table.display tr.even.gradeC { 235 | background-color: #eeeeff; 236 | } 237 | 238 | table.display tr.odd.gradeX { 239 | background-color: #ffdddd; 240 | } 241 | 242 | table.display tr.even.gradeX { 243 | background-color: #ffeeee; 244 | } 245 | 246 | table.display tr.odd.gradeU { 247 | background-color: #ddd; 248 | } 249 | 250 | table.display tr.even.gradeU { 251 | background-color: #eee; 252 | } 253 | 254 | 255 | tr.odd { 256 | background-color: #E2E4FF; 257 | } 258 | 259 | tr.even { 260 | background-color: white; 261 | } 262 | 263 | 264 | 265 | 266 | 267 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 268 | * Misc 269 | */ 270 | .dataTables_scroll { 271 | clear: both; 272 | } 273 | 274 | .dataTables_scrollBody { 275 | -webkit-overflow-scrolling: touch; 276 | } 277 | 278 | .top, .bottom { 279 | padding: 15px; 280 | background-color: #F5F5F5; 281 | border: 1px solid #CCCCCC; 282 | } 283 | 284 | .top .dataTables_info { 285 | float: none; 286 | } 287 | 288 | .clear { 289 | clear: both; 290 | } 291 | 292 | .dataTables_empty { 293 | text-align: center; 294 | } 295 | 296 | tfoot input { 297 | margin: 0.5em 0; 298 | width: 100%; 299 | color: #444; 300 | } 301 | 302 | tfoot input.search_init { 303 | color: #999; 304 | } 305 | 306 | td.group { 307 | background-color: #d1cfd0; 308 | border-bottom: 2px solid #A19B9E; 309 | border-top: 2px solid #A19B9E; 310 | } 311 | 312 | td.details { 313 | background-color: #d1cfd0; 314 | border: 2px solid #A19B9E; 315 | } 316 | 317 | 318 | .example_alt_pagination div.dataTables_info { 319 | width: 40%; 320 | } 321 | 322 | .paging_full_numbers a.paginate_button, 323 | .paging_full_numbers a.paginate_active { 324 | border: 1px solid #aaa; 325 | -webkit-border-radius: 5px; 326 | -moz-border-radius: 5px; 327 | padding: 2px 5px; 328 | margin: 0 3px; 329 | cursor: pointer; 330 | *cursor: hand; 331 | color: #333 !important; 332 | } 333 | 334 | .paging_full_numbers a.paginate_button { 335 | background-color: #ddd; 336 | } 337 | 338 | .paging_full_numbers a.paginate_button:hover { 339 | background-color: #ccc; 340 | text-decoration: none !important; 341 | } 342 | 343 | .paging_full_numbers a.paginate_active { 344 | background-color: #99B3FF; 345 | } 346 | 347 | table.display tr.even.row_selected td { 348 | background-color: #B0BED9; 349 | } 350 | 351 | table.display tr.odd.row_selected td { 352 | background-color: #9FAFD1; 353 | } 354 | 355 | 356 | /* 357 | * Sorting classes for columns 358 | */ 359 | /* For the standard odd/even */ 360 | tr.odd td.sorting_1 { 361 | background-color: #D3D6FF; 362 | } 363 | 364 | tr.odd td.sorting_2 { 365 | background-color: #DADCFF; 366 | } 367 | 368 | tr.odd td.sorting_3 { 369 | background-color: #E0E2FF; 370 | } 371 | 372 | tr.even td.sorting_1 { 373 | background-color: #EAEBFF; 374 | } 375 | 376 | tr.even td.sorting_2 { 377 | background-color: #F2F3FF; 378 | } 379 | 380 | tr.even td.sorting_3 { 381 | background-color: #F9F9FF; 382 | } 383 | 384 | 385 | /* For the Conditional-CSS grading rows */ 386 | /* 387 | Colour calculations (based off the main row colours) 388 | Level 1: 389 | dd > c4 390 | ee > d5 391 | Level 2: 392 | dd > d1 393 | ee > e2 394 | */ 395 | tr.odd.gradeA td.sorting_1 { 396 | background-color: #c4ffc4; 397 | } 398 | 399 | tr.odd.gradeA td.sorting_2 { 400 | background-color: #d1ffd1; 401 | } 402 | 403 | tr.odd.gradeA td.sorting_3 { 404 | background-color: #d1ffd1; 405 | } 406 | 407 | tr.even.gradeA td.sorting_1 { 408 | background-color: #d5ffd5; 409 | } 410 | 411 | tr.even.gradeA td.sorting_2 { 412 | background-color: #e2ffe2; 413 | } 414 | 415 | tr.even.gradeA td.sorting_3 { 416 | background-color: #e2ffe2; 417 | } 418 | 419 | tr.odd.gradeC td.sorting_1 { 420 | background-color: #c4c4ff; 421 | } 422 | 423 | tr.odd.gradeC td.sorting_2 { 424 | background-color: #d1d1ff; 425 | } 426 | 427 | tr.odd.gradeC td.sorting_3 { 428 | background-color: #d1d1ff; 429 | } 430 | 431 | tr.even.gradeC td.sorting_1 { 432 | background-color: #d5d5ff; 433 | } 434 | 435 | tr.even.gradeC td.sorting_2 { 436 | background-color: #e2e2ff; 437 | } 438 | 439 | tr.even.gradeC td.sorting_3 { 440 | background-color: #e2e2ff; 441 | } 442 | 443 | tr.odd.gradeX td.sorting_1 { 444 | background-color: #ffc4c4; 445 | } 446 | 447 | tr.odd.gradeX td.sorting_2 { 448 | background-color: #ffd1d1; 449 | } 450 | 451 | tr.odd.gradeX td.sorting_3 { 452 | background-color: #ffd1d1; 453 | } 454 | 455 | tr.even.gradeX td.sorting_1 { 456 | background-color: #ffd5d5; 457 | } 458 | 459 | tr.even.gradeX td.sorting_2 { 460 | background-color: #ffe2e2; 461 | } 462 | 463 | tr.even.gradeX td.sorting_3 { 464 | background-color: #ffe2e2; 465 | } 466 | 467 | tr.odd.gradeU td.sorting_1 { 468 | background-color: #c4c4c4; 469 | } 470 | 471 | tr.odd.gradeU td.sorting_2 { 472 | background-color: #d1d1d1; 473 | } 474 | 475 | tr.odd.gradeU td.sorting_3 { 476 | background-color: #d1d1d1; 477 | } 478 | 479 | tr.even.gradeU td.sorting_1 { 480 | background-color: #d5d5d5; 481 | } 482 | 483 | tr.even.gradeU td.sorting_2 { 484 | background-color: #e2e2e2; 485 | } 486 | 487 | tr.even.gradeU td.sorting_3 { 488 | background-color: #e2e2e2; 489 | } 490 | 491 | 492 | /* 493 | * Row highlighting example 494 | */ 495 | .ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { 496 | background-color: #ECFFB3; 497 | } 498 | 499 | .ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { 500 | background-color: #E6FF99; 501 | } -------------------------------------------------------------------------------- /ext/datatables/css/jquery-ui-1.10.3.custom.min.css: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.3 - 2013-06-04 2 | * http://jqueryui.com 3 | * Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css 4 | * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px 5 | * Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} -------------------------------------------------------------------------------- /ext/datatables/js/jquery.dataTables.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * File: jquery.dataTables.min.js 3 | * Version: 1.9.4 4 | * Author: Allan Jardine (www.sprymedia.co.uk) 5 | * Info: www.datatables.net 6 | * 7 | * Copyright 2008-2012 Allan Jardine, all rights reserved. 8 | * 9 | * This source file is free software, under either the GPL v2 license or a 10 | * BSD style license, available at: 11 | * http://datatables.net/license_gpl2 12 | * http://datatables.net/license_bsd 13 | * 14 | * This source file is distributed in the hope that it will be useful, but 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 | * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. 17 | */ 18 | (function(X,l,n){var L=function(h){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=h.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:l.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===n||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=h.extend({},j.models.oSearch);else if(c=a.aoPreSearchCols[d], 19 | c.bRegex===n&&(c.bRegex=!0),c.bSmart===n&&(c.bSmart=!0),c.bCaseInsensitive===n)c.bCaseInsensitive=!0;m(a,d,null)}function m(a,b,c){var d=a.aoColumns[b];c!==n&&null!==c&&(c.mDataProp&&!c.mData&&(c.mData=c.mDataProp),c.sType!==n&&(d.sType=c.sType,d._bAutoType=!1),h.extend(d,c),p(d,c,"sWidth","sWidthOrig"),c.iDataSort!==n&&(d.aDataSort=[c.iDataSort]),p(d,c,"aDataSort"));var i=d.mRender?Q(d.mRender):null,f=Q(d.mData);d.fnGetData=function(a,b){var c=f(a,b);return d.mRender&&b&&""!==b?i(c,b,a):c};d.fnSetData= 20 | L(d.mData);a.oFeatures.bSort||(d.bSortable=!1);!d.bSortable||-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableNone,d.sSortingClassJUI=""):-1==h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortable,d.sSortingClassJUI=a.oClasses.sSortJUI):-1!=h.inArray("asc",d.asSorting)&&-1==h.inArray("desc",d.asSorting)?(d.sSortingClass=a.oClasses.sSortableAsc,d.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed):-1== 21 | h.inArray("asc",d.asSorting)&&-1!=h.inArray("desc",d.asSorting)&&(d.sSortingClass=a.oClasses.sSortableDesc,d.sSortingClassJUI=a.oClasses.sSortJUIDescAllowed)}function k(a){if(!1===a.oFeatures.bAutoWidth)return!1;da(a);for(var b=0,c=a.aoColumns.length;bj[f])d(a.aoColumns.length+j[f],b[i]);else if("string"===typeof j[f]){e=0;for(w=a.aoColumns.length;eb&&a[d]--; -1!=c&&a.splice(c,1)}function S(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mData},v(a,b,c,"display"))}function ea(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=l.createElement("tr");c.nTr._DT_RowIndex=b;c._aData.DT_RowId&&(c.nTr.id=c._aData.DT_RowId);c._aData.DT_RowClass&& 33 | (c.nTr.className=c._aData.DT_RowClass);for(var i=0,f=a.aoColumns.length;i=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,y(a));if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!wa(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g= 39 | a._iDisplayStart;d=a._iDisplayEnd;a.oFeatures.bServerSide&&(g=0,d=a.aoData.length);for(;g")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=h('
')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),i,f,g,e,w,o,k,m=0;m")[0];w=d[m+ 43 | 1];if("'"==w||'"'==w){o="";for(k=2;d[m+k]!=w;)o+=d[m+k],k++;"H"==o?o=a.oClasses.sJUIHeader:"F"==o&&(o=a.oClasses.sJUIFooter);-1!=o.indexOf(".")?(w=o.split("."),e.id=w[0].substr(1,w[0].length-1),e.className=w[1]):"#"==o.charAt(0)?e.id=o.substr(1,o.length-1):e.className=o;m+=k}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)i=ya(a),f=1;else if("f"==g&&a.oFeatures.bFilter)i=za(a),f=1;else if("r"==g&&a.oFeatures.bProcessing)i=Aa(a),f= 44 | 1;else if("t"==g)i=Ba(a),f=1;else if("i"==g&&a.oFeatures.bInfo)i=Ca(a),f=1;else if("p"==g&&a.oFeatures.bPaginate)i=Da(a),f=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;k=0;for(w=e.length;k'):""===c?'':c+' ',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="";a.aanFeatures.f||(d.id=a.sTableId+"_filter");c=h('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=this.value===""?"":this.value, 51 | g=0,e=c.length;g=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||i.sSearch.length>b.length||1==c||0!==b.indexOf(i.sSearch)){a.aiDisplay.splice(0, 54 | a.aiDisplay.length);la(a,1);for(b=0;b").html(c).text()); 55 | return c.replace(/[\n\r]/g," ")}function ma(a,b,c,d){if(c)return a=b?a.split(" "):oa(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:oa(a);return RegExp(a,d?"i":"")}function Ja(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):null===a?"":"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):a}function oa(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"), 56 | "\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;a.aanFeatures.i||(a.aoDrawCallback.push({fn:Ka,sName:"information"}),b.id=a.sTableId+"_info");a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ka(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),i=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),g;g=0===f?b.sInfoEmpty:b.sInfo;f!=i&&(g+=" "+b.sInfoFiltered);g+=b.sInfoPostFix;g=ja(a,g); 57 | null!==b.fnInfoCallback&&(g=b.fnInfoCallback.call(a.oInstance,a,c,d,i,f,g));a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d,i=a.aLengthMenu;if(2==i.length&&"object"===typeof i[0]&&"object"===typeof i[1]){c=0;for(d=i[0].length;c'+i[1][c]+""}else{c=0;for(d=i.length;c'+i[c]+""}b+="";i=l.createElement("div");a.aanFeatures.l|| 61 | (i.id=a.sTableId+"_length");i.className=a.oClasses.sLength;i.innerHTML="";h('select option[value="'+a._iDisplayLength+'"]',i).attr("selected",!0);h("select",i).bind("change.DT",function(){var b=h(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;ca.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a, 63 | b,function(a){y(a);x(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){y(a);x(a)})},sName:"pagination"});return b}function qa(a,b){var c=a._iDisplayStart;if("number"===typeof b)a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay()&&(a._iDisplayStart=0);else if("first"==b)a._iDisplayStart=0;else if("previous"==b)a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart&&(a._iDisplayStart= 64 | 0);else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLengthh(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(h(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else""!==a.oScroll.sXInner?a.nTable.style.width= 72 | q(a.oScroll.sXInner):i==h(d).width()&&h(d).height()i-a.oScroll.iBarWidth&&(a.nTable.style.width=q(i))):a.nTable.style.width=q(i);i=h(a.nTable).outerWidth();C(s,e);C(function(a){p.push(q(h(a).width()))},e);C(function(a,b){a.style.width=p[b]},g);h(e).height(0);null!==a.nTFoot&&(C(s,j),C(function(a){n.push(q(h(a).width()))},j),C(function(a,b){a.style.width=n[b]},o),h(j).height(0));C(function(a,b){a.innerHTML= 73 | "";a.style.width=p[b]},e);null!==a.nTFoot&&C(function(a,b){a.innerHTML="";a.style.width=n[b]},j);if(h(a.nTable).outerWidth()d.offsetHeight||"scroll"==h(d).css("overflow-y")?i+a.oScroll.iBarWidth:i;if(r&&(d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(g-a.oScroll.iBarWidth);d.style.width=q(g);a.nScrollHead.style.width=q(g);null!==a.nTFoot&&(a.nScrollFoot.style.width=q(g));""===a.oScroll.sX?D(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."): 74 | ""!==a.oScroll.sXInner&&D(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else d.style.width=q("100%"),a.nScrollHead.style.width=q("100%"),null!==a.nTFoot&&(a.nScrollFoot.style.width=q("100%"));""===a.oScroll.sY&&r&&(d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth));""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),r=""!==a.oScroll.sX&&a.nTable.offsetWidth> 75 | d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeightd.clientHeight||"scroll"==h(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";null!==a.nTFoot&&(R.style.width=q(r),l.style.width=q(r),l.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px");h(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function C(a,b,c){for(var d= 76 | 0,i=0,f=b.length,g,e;itd",b));j=N(a,f);for(f=d=0;fc)return null;if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=v(a,c,b,"");return d}return J(a,c)[b]}function Pa(a,b){for(var c=-1,d=-1,i=0;i/g,"");e.length>c&&(c=e.length,d=i)}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1); 82 | return 48>b||57/g,""),i=q[c].nTh,i.removeAttribute("aria-sort"),i.removeAttribute("aria-label"),q[c].bSortable?0d&&d++;f=RegExp(f+"[123]");var o;b=0;for(c=a.length;b
')[0];l.body.appendChild(b);a.oBrowser.bScrollOversize= 96 | 100===h("#DT_BrowserTest",b)[0].offsetWidth?!0:!1;l.body.removeChild(b)}function Va(a){return function(){var b=[s(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var U=/\[.*?\]$/,Wa=X.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,e=[],f=h.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===b&&null!==d&&(d=Wa(d)),e.push((f?"":'"'+c+'":')+d);return(f? 97 | "[":"{")+e+(f?"]":"}")};this.$=function(a,b){var c,d,e=[],f;d=s(this[j.ext.iApiIndex]);var g=d.aoData,o=d.aiDisplay,k=d.aiDisplayMaster;b||(b={});b=h.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page){c=d._iDisplayStart;for(d=d.fnDisplayEnd();c=d.fnRecordsDisplay()&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart&&(d._iDisplayStart=0));if(c===n||c)y(d),x(d);return g};this.fnDestroy=function(a){var b=s(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,i,f,a=a===n?!1:a;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);if(!a){i=0;for(f=b.aoColumns.length;itr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(h(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(h(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);h(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];P(b);h(T(b)).removeClass(b.asStripeClasses.join(" "));h("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc, 103 | b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(h("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),h("th, td",b.nTHead).each(function(){var a=h("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();h(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);i=0;for(f=b.aoData.length;i=t(d);if(!m)for(e=a;et<"F"ip>')):h.extend(g.oClasses,j.ext.oStdClasses);h(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Qa();g.iInitDisplayStart===n&&(g.iInitDisplayStart=e.iDisplayStart, 123 | g._iDisplayStart=e.iDisplayStart);e.bStateSave&&(g.oFeatures.bStateSave=!0,Sa(g,e),z(g,"aoDrawCallback",ra,"state_save"));null!==e.iDeferLoading&&(g.bDeferLoading=!0,a=h.isArray(e.iDeferLoading),g._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,g._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading);null!==e.aaData&&(f=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,h.getJSON(g.oLanguage.sUrl,null,function(a){pa(a);h.extend(true,g.oLanguage,e.oLanguage,a);ba(g)}),i=!0):h.extend(!0, 124 | g.oLanguage,e.oLanguage);null===e.asStripeClasses&&(g.asStripeClasses=[g.oClasses.sStripeOdd,g.oClasses.sStripeEven]);b=g.asStripeClasses.length;g.asDestroyStripes=[];if(b){c=!1;d=h(this).children("tbody").children("tr:lt("+b+")");for(a=0;a=g.aoColumns.length&&(g.aaSorting[a][0]=0);var k=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===n&&(g.aaSorting[a][2]=0);e.aaSorting===n&&g.saved_aaSorting===n&&(g.aaSorting[a][1]= 126 | k.asSorting[0]);c=0;for(d=k.asSorting.length;c=parseInt(n,10)};j.fnIsDataTable=function(e){for(var h=j.settings,m=0;me)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k'+k.sPrevious+''+k.sNext+"":'';h(j).append(k);var l=h("a",j), 147 | k=l[0],l=l[1];e.oApi._fnBindAction(k,{action:"previous"},n);e.oApi._fnBindAction(l,{action:"next"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",l.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),l.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e){if(e.aanFeatures.p)for(var h=e.oClasses,j=e.aanFeatures.p,k,l=0,n=j.length;l'+k.sFirst+''+k.sPrevious+''+k.sNext+''+k.sLast+"");var t=h("a",j),k=t[0],l=t[1],r=t[2],t=t[3];e.oApi._fnBindAction(k,{action:"first"},n);e.oApi._fnBindAction(l,{action:"previous"},n);e.oApi._fnBindAction(r,{action:"next"},n);e.oApi._fnBindAction(t,{action:"last"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",r.id=e.sTableId+"_next",t.id=e.sTableId+"_last")}, 150 | fnUpdate:function(e,o){if(e.aanFeatures.p){var m=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(m/2),l=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),n=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,t="",r,B=e.oClasses,u,M=e.aanFeatures.p,L=function(h){e.oApi._fnBindAction(this,{page:h+r-1},function(h){e.oApi._fnPageChange(e,h.data.page);o(e);h.preventDefault()})};-1===e._iDisplayLength?n=k=r=1:l=l-k?(r=l-m+1,k=l):(r=n-Math.ceil(m/2)+1,k=r+m-1);for(m=r;m<=k;m++)t+= 151 | n!==m?''+e.fnFormatNumber(m)+"":''+e.fnFormatNumber(m)+"";m=0;for(k=M.length;mh?1:0},"string-desc":function(e,h){return eh?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,h){return eh?1:0},"html-desc":function(e,h){return e< 153 | h?1:e>h?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,h){return e-h},"date-desc":function(e,h){return h-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,h){return e-h},"numeric-desc":function(e,h){return h-e}});h.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var h,j=!1;h=e.charAt(0);if(-1=="0123456789-".indexOf(h))return null; 154 | for(var k=1;k")?"html":null}]);h.fn.DataTable=j;h.fn.dataTable=j;h.fn.dataTableSettings=j.settings;h.fn.dataTableExt=j.ext};"function"===typeof define&&define.amd?define(["jquery"],L):jQuery&&!jQuery.fn.dataTable&& 155 | L(jQuery)})(window,document); 156 | -------------------------------------------------------------------------------- /ext/dayjs.min.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",$="Invalid Date",l=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},g={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()j[f])d(a.aoColumns.length+j[f],b[i]);else if("string"===typeof j[f]){e=0;for(w=a.aoColumns.length;eb&&a[d]--; -1!=c&&a.splice(c,1)}function S(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mData},v(a,b,c,"display"))}function ea(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=l.createElement("tr");c.nTr._DT_RowIndex=b;c._aData.DT_RowId&&(c.nTr.id=c._aData.DT_RowId);c._aData.DT_RowClass&& 33 | (c.nTr.className=c._aData.DT_RowClass);for(var i=0,f=a.aoColumns.length;i=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,y(a));if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!wa(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g= 39 | a._iDisplayStart;d=a._iDisplayEnd;a.oFeatures.bServerSide&&(g=0,d=a.aoData.length);for(;g")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=h('
')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),i,f,g,e,w,o,k,m=0;m")[0];w=d[m+ 43 | 1];if("'"==w||'"'==w){o="";for(k=2;d[m+k]!=w;)o+=d[m+k],k++;"H"==o?o=a.oClasses.sJUIHeader:"F"==o&&(o=a.oClasses.sJUIFooter);-1!=o.indexOf(".")?(w=o.split("."),e.id=w[0].substr(1,w[0].length-1),e.className=w[1]):"#"==o.charAt(0)?e.id=o.substr(1,o.length-1):e.className=o;m+=k}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)i=ya(a),f=1;else if("f"==g&&a.oFeatures.bFilter)i=za(a),f=1;else if("r"==g&&a.oFeatures.bProcessing)i=Aa(a),f= 44 | 1;else if("t"==g)i=Ba(a),f=1;else if("i"==g&&a.oFeatures.bInfo)i=Ca(a),f=1;else if("p"==g&&a.oFeatures.bPaginate)i=Da(a),f=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;k=0;for(w=e.length;k'):""===c?'':c+' ',d=l.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="";a.aanFeatures.f||(d.id=a.sTableId+"_filter");c=h('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=this.value===""?"":this.value, 51 | g=0,e=c.length;g=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||i.sSearch.length>b.length||1==c||0!==b.indexOf(i.sSearch)){a.aiDisplay.splice(0, 54 | a.aiDisplay.length);la(a,1);for(b=0;b").html(c).text()); 55 | return c.replace(/[\n\r]/g," ")}function ma(a,b,c,d){if(c)return a=b?a.split(" "):oa(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:oa(a);return RegExp(a,d?"i":"")}function Ja(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):null===a?"":"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):a}function oa(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"), 56 | "\\$1")}function Ca(a){var b=l.createElement("div");b.className=a.oClasses.sInfo;a.aanFeatures.i||(a.aoDrawCallback.push({fn:Ka,sName:"information"}),b.id=a.sTableId+"_info");a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Ka(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),i=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),g;g=0===f?b.sInfoEmpty:b.sInfo;f!=i&&(g+=" "+b.sInfoFiltered);g+=b.sInfoPostFix;g=ja(a,g); 57 | null!==b.fnInfoCallback&&(g=b.fnInfoCallback.call(a.oInstance,a,c,d,i,f,g));a=a.aanFeatures.i;b=0;for(c=a.length;b",c,d,i=a.aLengthMenu;if(2==i.length&&"object"===typeof i[0]&&"object"===typeof i[1]){c=0;for(d=i[0].length;c'+i[1][c]+""}else{c=0;for(d=i.length;c'+i[c]+""}b+="";i=l.createElement("div");a.aanFeatures.l|| 61 | (i.id=a.sTableId+"_length");i.className=a.oClasses.sLength;i.innerHTML="";h('select option[value="'+a._iDisplayLength+'"]',i).attr("selected",!0);h("select",i).bind("change.DT",function(){var b=h(this).val(),i=a.aanFeatures.l;c=0;for(d=i.length;ca.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Da(a){if(a.oScroll.bInfinite)return null;var b=l.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a, 63 | b,function(a){y(a);x(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,function(a){y(a);x(a)})},sName:"pagination"});return b}function qa(a,b){var c=a._iDisplayStart;if("number"===typeof b)a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay()&&(a._iDisplayStart=0);else if("first"==b)a._iDisplayStart=0;else if("previous"==b)a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart&&(a._iDisplayStart= 64 | 0);else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLengthh(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(h(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else""!==a.oScroll.sXInner?a.nTable.style.width= 72 | q(a.oScroll.sXInner):i==h(d).width()&&h(d).height()i-a.oScroll.iBarWidth&&(a.nTable.style.width=q(i))):a.nTable.style.width=q(i);i=h(a.nTable).outerWidth();C(s,e);C(function(a){p.push(q(h(a).width()))},e);C(function(a,b){a.style.width=p[b]},g);h(e).height(0);null!==a.nTFoot&&(C(s,j),C(function(a){n.push(q(h(a).width()))},j),C(function(a,b){a.style.width=n[b]},o),h(j).height(0));C(function(a,b){a.innerHTML= 73 | "";a.style.width=p[b]},e);null!==a.nTFoot&&C(function(a,b){a.innerHTML="";a.style.width=n[b]},j);if(h(a.nTable).outerWidth()d.offsetHeight||"scroll"==h(d).css("overflow-y")?i+a.oScroll.iBarWidth:i;if(r&&(d.scrollHeight>d.offsetHeight||"scroll"==h(d).css("overflow-y")))a.nTable.style.width=q(g-a.oScroll.iBarWidth);d.style.width=q(g);a.nScrollHead.style.width=q(g);null!==a.nTFoot&&(a.nScrollFoot.style.width=q(g));""===a.oScroll.sX?D(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."): 74 | ""!==a.oScroll.sXInner&&D(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else d.style.width=q("100%"),a.nScrollHead.style.width=q("100%"),null!==a.nTFoot&&(a.nScrollFoot.style.width=q("100%"));""===a.oScroll.sY&&r&&(d.style.height=q(a.nTable.offsetHeight+a.oScroll.iBarWidth));""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=q(a.oScroll.sY),r=""!==a.oScroll.sX&&a.nTable.offsetWidth> 75 | d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeightd.clientHeight||"scroll"==h(d).css("overflow-y");b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px";null!==a.nTFoot&&(R.style.width=q(r),l.style.width=q(r),l.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px");h(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function C(a,b,c){for(var d= 76 | 0,i=0,f=b.length,g,e;itd",b));j=N(a,f);for(f=d=0;fc)return null;if(null===a.aoData[c].nTr){var d=l.createElement("td");d.innerHTML=v(a,c,b,"");return d}return J(a,c)[b]}function Pa(a,b){for(var c=-1,d=-1,i=0;i/g,"");e.length>c&&(c=e.length,d=i)}return d}function q(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1); 82 | return 48>b||57/g,""),i=q[c].nTh,i.removeAttribute("aria-sort"),i.removeAttribute("aria-label"),q[c].bSortable?0d&&d++;f=RegExp(f+"[123]");var o;b=0;for(c=a.length;b
')[0];l.body.appendChild(b);a.oBrowser.bScrollOversize= 96 | 100===h("#DT_BrowserTest",b)[0].offsetWidth?!0:!1;l.body.removeChild(b)}function Va(a){return function(){var b=[s(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var U=/\[.*?\]$/,Wa=X.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,e=[],f=h.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===b&&null!==d&&(d=Wa(d)),e.push((f?"":'"'+c+'":')+d);return(f? 97 | "[":"{")+e+(f?"]":"}")};this.$=function(a,b){var c,d,e=[],f;d=s(this[j.ext.iApiIndex]);var g=d.aoData,o=d.aiDisplay,k=d.aiDisplayMaster;b||(b={});b=h.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page){c=d._iDisplayStart;for(d=d.fnDisplayEnd();c=d.fnRecordsDisplay()&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart&&(d._iDisplayStart=0));if(c===n||c)y(d),x(d);return g};this.fnDestroy=function(a){var b=s(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,i,f,a=a===n?!1:a;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);if(!a){i=0;for(f=b.aoColumns.length;itr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(h(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(h(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);h(b.nTableWrapper).remove();b.aaSorting=[];b.aaSortingFixed=[];P(b);h(T(b)).removeClass(b.asStripeClasses.join(" "));h("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc, 103 | b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(h("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),h("th, td",b.nTHead).each(function(){var a=h("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();h(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):a||c.appendChild(b.nTable);i=0;for(f=b.aoData.length;i=t(d);if(!m)for(e=a;et<"F"ip>')):h.extend(g.oClasses,j.ext.oStdClasses);h(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Qa();g.iInitDisplayStart===n&&(g.iInitDisplayStart=e.iDisplayStart, 123 | g._iDisplayStart=e.iDisplayStart);e.bStateSave&&(g.oFeatures.bStateSave=!0,Sa(g,e),z(g,"aoDrawCallback",ra,"state_save"));null!==e.iDeferLoading&&(g.bDeferLoading=!0,a=h.isArray(e.iDeferLoading),g._iRecordsDisplay=a?e.iDeferLoading[0]:e.iDeferLoading,g._iRecordsTotal=a?e.iDeferLoading[1]:e.iDeferLoading);null!==e.aaData&&(f=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,h.getJSON(g.oLanguage.sUrl,null,function(a){pa(a);h.extend(true,g.oLanguage,e.oLanguage,a);ba(g)}),i=!0):h.extend(!0, 124 | g.oLanguage,e.oLanguage);null===e.asStripeClasses&&(g.asStripeClasses=[g.oClasses.sStripeOdd,g.oClasses.sStripeEven]);b=g.asStripeClasses.length;g.asDestroyStripes=[];if(b){c=!1;d=h(this).children("tbody").children("tr:lt("+b+")");for(a=0;a=g.aoColumns.length&&(g.aaSorting[a][0]=0);var k=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===n&&(g.aaSorting[a][2]=0);e.aaSorting===n&&g.saved_aaSorting===n&&(g.aaSorting[a][1]= 126 | k.asSorting[0]);c=0;for(d=k.asSorting.length;c=parseInt(n,10)};j.fnIsDataTable=function(e){for(var h=j.settings,m=0;me)return e;for(var h=e+"",e=h.split(""),j="",h=h.length,k=0;k'+k.sPrevious+''+k.sNext+"":'';h(j).append(k);var l=h("a",j), 147 | k=l[0],l=l[1];e.oApi._fnBindAction(k,{action:"previous"},n);e.oApi._fnBindAction(l,{action:"next"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",l.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),l.setAttribute("aria-controls",e.sTableId))},fnUpdate:function(e){if(e.aanFeatures.p)for(var h=e.oClasses,j=e.aanFeatures.p,k,l=0,n=j.length;l'+k.sFirst+''+k.sPrevious+''+k.sNext+''+k.sLast+"");var t=h("a",j),k=t[0],l=t[1],r=t[2],t=t[3];e.oApi._fnBindAction(k,{action:"first"},n);e.oApi._fnBindAction(l,{action:"previous"},n);e.oApi._fnBindAction(r,{action:"next"},n);e.oApi._fnBindAction(t,{action:"last"},n);e.aanFeatures.p||(j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",l.id=e.sTableId+"_previous",r.id=e.sTableId+"_next",t.id=e.sTableId+"_last")}, 150 | fnUpdate:function(e,o){if(e.aanFeatures.p){var m=j.ext.oPagination.iFullNumbersShowPages,k=Math.floor(m/2),l=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),n=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,t="",r,B=e.oClasses,u,M=e.aanFeatures.p,L=function(h){e.oApi._fnBindAction(this,{page:h+r-1},function(h){e.oApi._fnPageChange(e,h.data.page);o(e);h.preventDefault()})};-1===e._iDisplayLength?n=k=r=1:l=l-k?(r=l-m+1,k=l):(r=n-Math.ceil(m/2)+1,k=r+m-1);for(m=r;m<=k;m++)t+= 151 | n!==m?''+e.fnFormatNumber(m)+"":''+e.fnFormatNumber(m)+"";m=0;for(k=M.length;mh?1:0},"string-desc":function(e,h){return eh?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(e,h){return eh?1:0},"html-desc":function(e,h){return e< 153 | h?1:e>h?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,h){return e-h},"date-desc":function(e,h){return h-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,h){return e-h},"numeric-desc":function(e,h){return h-e}});h.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==typeof e)return null;var h,j=!1;h=e.charAt(0);if(-1=="0123456789-".indexOf(h))return null; 154 | for(var k=1;k")?"html":null}]);h.fn.DataTable=j;h.fn.dataTable=j;h.fn.dataTableSettings=j.settings;h.fn.dataTableExt=j.ext};"function"===typeof define&&define.amd?define(["jquery"],L):jQuery&&!jQuery.fn.dataTable&& 155 | L(jQuery)})(window,document); 156 | -------------------------------------------------------------------------------- /ext/relativeTime.js: -------------------------------------------------------------------------------- 1 | !function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(r="undefined"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){"use strict";return function(r,e,t){r=r||{};var n=e.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],m=h.length,c=0;c0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(""+p)),a="string"==typeof v?v.replace("%d",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return"function"==typeof M?M(a):M.replace("%s",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}})); -------------------------------------------------------------------------------- /icons/README.md: -------------------------------------------------------------------------------- 1 | Icons generated from http://icon-generator.net/ 2 | -------------------------------------------------------------------------------- /icons/button16_lightgrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/button16_lightgrey.png -------------------------------------------------------------------------------- /icons/button19_lightgrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/button19_lightgrey.png -------------------------------------------------------------------------------- /icons/button38_lightgrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/button38_lightgrey.png -------------------------------------------------------------------------------- /icons/button48_lightgrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/button48_lightgrey.png -------------------------------------------------------------------------------- /icons/button512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/button512.png -------------------------------------------------------------------------------- /icons/button512_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/button512_grey.png -------------------------------------------------------------------------------- /icons/button512_lightgrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/button512_lightgrey.png -------------------------------------------------------------------------------- /icons/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/calendar.png -------------------------------------------------------------------------------- /icons/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/icon128.png -------------------------------------------------------------------------------- /icons/icon128_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/icon128_2.png -------------------------------------------------------------------------------- /icons/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/icon16.png -------------------------------------------------------------------------------- /icons/icon19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/icon19.png -------------------------------------------------------------------------------- /icons/icon38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/icon38.png -------------------------------------------------------------------------------- /icons/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nickscript0/chrome-bookmarks-table/ba53edc1bdecf6dec689f30a40ad97af8de69917/icons/icon48.png -------------------------------------------------------------------------------- /main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | 15 | 16 | Bookmarks 17 | 18 | 19 | 20 |
21 | 22 |
23 | 
24 | 
25 | 


--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "manifest_version": 3,
 3 |     "name": "Bookmarks Table",
 4 |     "version": "0.7",
 5 |     "description": "View your Chrome bookmarks by date in a sortable searchable table",
 6 |     "action": {
 7 |         "name": "Load bookmarks",
 8 |         "default_icon": {
 9 |             "19": "icons/button19_lightgrey.png",
10 |             "38": "icons/button38_lightgrey.png"
11 |         }
12 |     },
13 |     "permissions": ["bookmarks"],
14 |     "background": {
15 |         "service_worker": "src/background.js"
16 |     },
17 |     "icons": { "16": "icons/button16_lightgrey.png", "48": "icons/icon48.png", "128": "icons/icon128.png" }
18 | }
19 | 


--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "chrome-bookmarks-table",
 3 |   "version": "1.0.0",
 4 |   "lockfileVersion": 2,
 5 |   "requires": true,
 6 |   "packages": {
 7 |     "": {
 8 |       "version": "1.0.0",
 9 |       "license": "ISC",
10 |       "dependencies": {
11 |         "dayjs": "^1.10.7",
12 |         "jquery": "^3.6.0"
13 |       }
14 |     },
15 |     "node_modules/dayjs": {
16 |       "version": "1.10.7",
17 |       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
18 |       "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig=="
19 |     },
20 |     "node_modules/jquery": {
21 |       "version": "3.6.0",
22 |       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
23 |       "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
24 |     }
25 |   },
26 |   "dependencies": {
27 |     "dayjs": {
28 |       "version": "1.10.7",
29 |       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz",
30 |       "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig=="
31 |     },
32 |     "jquery": {
33 |       "version": "3.6.0",
34 |       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
35 |       "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
36 |     }
37 |   }
38 | }
39 | 


--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "chrome-bookmarks-table",
 3 |   "version": "1.0.0",
 4 |   "description": "A Chrome Extension ([available on the chrome web store](https://chrome.google.com/webstore/detail/bookmarks-table/eaabmhkokgaboihbikohlooneokghmcp)) that displays your bookmarks by date in a sortable searchable table",
 5 |   "main": "index.js",
 6 |   "scripts": {
 7 |     "test": "echo \"Error: no test specified\" && exit 1"
 8 |   },
 9 |   "repository": {
10 |     "type": "git",
11 |     "url": "git+https://github.com/nickscript0/chrome-bookmarks-table.git"
12 |   },
13 |   "keywords": [],
14 |   "author": "",
15 |   "license": "ISC",
16 |   "bugs": {
17 |     "url": "https://github.com/nickscript0/chrome-bookmarks-table/issues"
18 |   },
19 |   "homepage": "https://github.com/nickscript0/chrome-bookmarks-table#readme",
20 |   "dependencies": {
21 |     "dayjs": "^1.10.7",
22 |     "jquery": "^3.6.0"
23 |   }
24 | }
25 | 


--------------------------------------------------------------------------------
/src/background.js:
--------------------------------------------------------------------------------
1 | // Open main.html on icon click
2 | chrome.action.onClicked.addListener((_tab) => {
3 |     chrome.tabs.create({
4 |         url: 'main.html',
5 |     });
6 | });
7 | 


--------------------------------------------------------------------------------
/src/main.css:
--------------------------------------------------------------------------------
 1 | table {
 2 |     font: 100% "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
 3 | 
 4 |     width: 100% !important;
 5 |     /* position: relative; */
 6 | 
 7 |     table-layout: fixed;
 8 | }
 9 | 
10 | .datatable td {
11 |     overflow: hidden;
12 | }
13 | 
14 | .odd {
15 |     background-color: rgb(243, 244, 247) !important;
16 | }
17 | 
18 | tr.odd td.sorting_1  {
19 |     background-color: rgb(234, 235, 253) !important;
20 | }


--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
 1 | dayjs.extend(window.dayjs_plugin_relativeTime);
 2 | 
 3 | function main() {
 4 |   chrome.bookmarks.getTree(function(bookmarks) {
 5 |     loadDatatable(nodeListToRows(bookmarks[0]));
 6 |   });
 7 | }
 8 | 
 9 | function buildHostnameLink(url) {
10 |   var l = document.createElement("a");
11 |   l.href = url;
12 |   return '' + l.hostname + '';
13 | }
14 | 
15 | // Convert a bookmarks.getTree response to a DataTables input array
16 | function nodeListToRows(bookmarks) {
17 |   var node_list = flattenBTNodes(bookmarks, '');
18 |   var output = [];
19 |   for (var i = 0; i < node_list.length; i++) {
20 |     b = node_list[i];
21 |     var url = b.hasOwnProperty('url') ? b.url : '';
22 |     var m = dayjs(b.dateAdded);
23 |     var date_added = m.format("MMMM DD, YYYY h:mm:ss a");
24 |     output.push([b.title, buildHostnameLink(url), b.path, date_added, m.fromNow()]);
25 |   }
26 |   return output;
27 | }
28 | 
29 | // Walks through a tree of BookmarkNodes, returning a flattened array of all the nodes
30 | // Throws out folder nodes
31 | function flattenBTNodes(node, path) {
32 |   node.path = path;
33 |   var output = [];
34 |   if (node.hasOwnProperty('children')) {
35 |     for (var i = 0; i < node.children.length; i++) {
36 |       var cur_path = path === '' ? node.title : path + '/' + node.title; // Parent nodes are directories so add them to the path
37 |       output.push.apply(output, flattenBTNodes(node.children[i], cur_path));
38 |     }
39 |   } else {
40 |     output = [node];
41 |   }
42 |   return output;
43 | }
44 | 
45 | // PROBLEM: unbroken text (e.g. search for pdf) extends the table past 100%
46 | 
47 | // load datatable with Collection data
48 | function loadDatatable(aDataSet) {
49 |   $("div#collection_div").html('
'); 50 | $("table#collection").dataTable({ 51 | "bJQueryUI": true, 52 | "aaData": aDataSet, 53 | "aaSorting": [ 54 | [3, 'desc'] 55 | ], 56 | "aoColumns": [{ 57 | "sTitle": "Title" 58 | }, { 59 | "sTitle": "URL" 60 | }, { 61 | "sTitle": "Path" 62 | }, { 63 | "sTitle": "Date Added", 64 | "sType": "date" 65 | }, { 66 | "sTitle": "Relative", 67 | "bSortable": false, 68 | "sWidth": "80px" 69 | }], 70 | "bPaginate": false, 71 | "bAutoWidth": false 72 | }); 73 | $('div.dataTables_filter input').focus(); // Default focus to search field 74 | } 75 | 76 | main(); -------------------------------------------------------------------------------- /zip_for_submission.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | zip -r --exclude=*.git* bookmarks_table_ext_v$1.zip icons ext src main.html manifest.json 3 | --------------------------------------------------------------------------------