Commit 8e4c0c16b1e0f6c8470f45fbd44dd43686d8eb14
1 parent
471be0f8
Exists in
master
and in
5 other branches
Issue #250
Showing
13 changed files
with
995 additions
and
12 deletions
Show diff stats
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
1 | +@font-face{font-family:footable;src:url(../fonts/footable.eot);src:url(../fonts/footable.eot?#iefix) format('embedded-opentype'),url(../fonts/footable.woff) format('woff'),url(../fonts/footable.ttf) format('truetype'),url(../fonts/footable.svg#footable) format('svg');font-weight:400;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:footable;src:url(../fonts/footable.svg#footable) format('svg');font-weight:400;font-style:normal}}.footable{width:100%}.footable.breakpoint>tbody>tr.footable-detail-show>td{border-bottom:none}.footable.breakpoint>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e001"}.footable.breakpoint>tbody>tr:hover:not(.footable-row-detail){cursor:pointer}.footable.breakpoint>tbody>tr>td.footable-cell-detail{background:#eee;border-top:none}.footable.breakpoint>tbody>tr>td>span.footable-toggle{display:inline-block;font-family:footable;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;padding-right:5px;font-size:14px;color:#888}.footable.breakpoint>tbody>tr>td>span.footable-toggle:before{content:"\e000"}.footable.breakpoint.toggle-circle>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e005"}.footable.breakpoint.toggle-circle>tbody>tr>td>span.footable-toggle:before{content:"\e004"}.footable.breakpoint.toggle-circle-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e003"}.footable.breakpoint.toggle-circle-filled>tbody>tr>td>span.footable-toggle:before{content:"\e002"}.footable.breakpoint.toggle-square>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e007"}.footable.breakpoint.toggle-square>tbody>tr>td>span.footable-toggle:before{content:"\e006"}.footable.breakpoint.toggle-square-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e009"}.footable.breakpoint.toggle-square-filled>tbody>tr>td>span.footable-toggle:before{content:"\e008"}.footable.breakpoint.toggle-arrow>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e00f"}.footable.breakpoint.toggle-arrow>tbody>tr>td>span.footable-toggle:before{content:"\e011"}.footable.breakpoint.toggle-arrow-small>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e013"}.footable.breakpoint.toggle-arrow-small>tbody>tr>td>span.footable-toggle:before{content:"\e015"}.footable.breakpoint.toggle-arrow-circle>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e01b"}.footable.breakpoint.toggle-arrow-circle>tbody>tr>td>span.footable-toggle:before{content:"\e01d"}.footable.breakpoint.toggle-arrow-circle-filled>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e00b"}.footable.breakpoint.toggle-arrow-circle-filled>tbody>tr>td>span.footable-toggle:before{content:"\e00d"}.footable.breakpoint.toggle-arrow-tiny>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e01f"}.footable.breakpoint.toggle-arrow-tiny>tbody>tr>td>span.footable-toggle:before{content:"\e021"}.footable.breakpoint.toggle-arrow-alt>tbody>tr.footable-detail-show>td>span.footable-toggle:before{content:"\e017"}.footable.breakpoint.toggle-arrow-alt>tbody>tr>td>span.footable-toggle:before{content:"\e019"}.footable.breakpoint.toggle-medium>tbody>tr>td>span.footable-toggle{font-size:18px}.footable.breakpoint.toggle-large>tbody>tr>td>span.footable-toggle{font-size:24px}.footable>thead>tr>th{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.footable>thead>tr>th.footable-sortable:hover{cursor:pointer}.footable>thead>tr>th.footable-sorted>span.footable-sort-indicator:before{content:"\e013"}.footable>thead>tr>th.footable-sorted-desc>span.footable-sort-indicator:before{content:"\e012"}.footable>thead>tr>th>span.footable-sort-indicator{display:inline-block;font-family:footable;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;padding-left:5px}.footable>thead>tr>th>span.footable-sort-indicator:before{content:"\e022"}.footable>tfoot .pagination{margin:0}.footable.no-paging .hide-if-no-paging{display:none}.footable-row-detail-inner{display:table}.footable-row-detail-row{display:table-row;line-height:1.5em}.footable-row-detail-group{display:block;line-height:2em;font-size:1.2em;font-weight:700}.footable-row-detail-name{display:table-cell;font-weight:700;padding-right:.5em}.footable-row-detail-value{display:table-cell}.footable-odd{background-color:#f7f7f7} | ||
0 | \ No newline at end of file | 2 | \ No newline at end of file |
No preview for this file type
@@ -0,0 +1,78 @@ | @@ -0,0 +1,78 @@ | ||
1 | +<?xml version="1.0" standalone="no"?> | ||
2 | +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > | ||
3 | +<svg xmlns="http://www.w3.org/2000/svg"> | ||
4 | +<metadata> | ||
5 | +This is a custom SVG font generated by IcoMoon. | ||
6 | +<iconset grid="16"></iconset> | ||
7 | +</metadata> | ||
8 | +<defs> | ||
9 | +<font id="footable" horiz-adv-x="512" > | ||
10 | +<font-face units-per-em="512" ascent="480" descent="-32" /> | ||
11 | +<missing-glyph horiz-adv-x="512" /> | ||
12 | +<glyph class="hidden" unicode="" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" /> | ||
13 | +<glyph unicode="" d="M 496,288L 320,288 L 320,464 c0,8.836-7.164,16-16,16l-96,0 c-8.836,0-16-7.164-16-16l0-176 L 16,288 c-8.836,0-16-7.164-16-16l0-96 | ||
14 | + c0-8.836, 7.164-16, 16-16l 176,0 l0-176 c0-8.836, 7.164-16, 16-16l 96,0 c 8.836,0, 16,7.164, 16,16L 320,160 l 176,0 c 8.836,0, 16,7.164, 16,16l0,96 | ||
15 | + C 512,280.836, 504.836,288, 496,288z" /> | ||
16 | +<glyph unicode="" d="M0,272l0-96 c0-8.836, 7.164-16, 16-16l 480,0 c 8.836,0, 16,7.164, 16,16l0,96 c0,8.836-7.164,16-16,16L 16,288 C 7.164,288,0,280.836,0,272z" /> | ||
17 | +<glyph unicode="" d="M 256,480C 114.615,480,0,365.385,0,224s 114.615-256, 256-256s 256,114.615, 256,256S 397.385,480, 256,480z M 288,192l0-128 l-64,0 L 224,192 L 96,192 l0,64 | ||
18 | + l 128,0 L 224,384 l 64,0 l0-128 l 128,0 l0-64 L 288,192 z" /> | ||
19 | +<glyph unicode="" d="M 256,480C 114.615,480,0,365.385,0,224s 114.615-256, 256-256s 256,114.615, 256,256S 397.385,480, 256,480z M 416,192L 96,192 l0,64 l 320,0 L 416,192 z" /> | ||
20 | +<glyph unicode="" d="M 256,480C 114.615,480,0,365.385,0,224s 114.615-256, 256-256s 256,114.615, 256,256S 397.385,480, 256,480z M 256,32 | ||
21 | + c-106.039,0-192,85.961-192,192c0,106.039, 85.961,192, 192,192c 106.039,0, 192-85.961, 192-192C 448,117.961, 362.039,32, 256,32zM 384,192 L 288,192 L 288,96 L 224,96 L 224,192 L 128,192 L 128,256 L 224,256 L 224,352 L 288,352 L 288,256 L 384,256 Z" /> | ||
22 | +<glyph unicode="" d="M 256,480C 114.615,480,0,365.385,0,224s 114.615-256, 256-256s 256,114.615, 256,256S 397.385,480, 256,480z M 256,32 | ||
23 | + c-106.039,0-192,85.961-192,192c0,106.039, 85.961,192, 192,192c 106.039,0, 192-85.961, 192-192C 448,117.961, 362.039,32, 256,32zM 128,256L 384,256L 384,192L 128,192z" /> | ||
24 | +<glyph unicode="" d="M 256,214.857l0-18.286 q0-4 -2.571-6.571t-6.571-2.571l-64,0 l0-64 q0-4 -2.571-6.571t-6.571-2.571l-18.286,0 q-4,0 -6.571,2.571t-2.571,6.571l0,64 l-64,0 q-4,0 -6.571,2.571t-2.571,6.571l0,18.286 q0,4 2.571,6.571t 6.571,2.571l 64,0 l0,64 q0,4 2.571,6.571t 6.571,2.571l 18.286,0 q 4,0 6.571-2.571t 2.571-6.571l0-64 l 64,0 q 4,0 6.571-2.571t 2.571-6.571zM 292.571,105.143l0,201.143 q0,11.429 -8,19.429t-19.429,8l-201.143,0 q-11.429,0 -19.429-8 t-8-19.429l0-201.143 q0-11.429 8-19.429t 19.429-8l 201.143,0 q 11.429,0 19.429,8t 8,19.429zM 329.143,306.286l0-201.143 q0-26.286 -18.714-45.143t-45.286-18.857l-201.143,0 q-26.571,0 -45.286,18.857t-18.714,45.143l0,201.143 q0,26.571 18.714,45.286t 45.286,18.714l 201.143,0 q 26.571,0 45.286-18.714t 18.714-45.286z" horiz-adv-x="329.143" /> | ||
25 | +<glyph unicode="" d="M 265.143,370.286q 26.571,0 45.286-18.714t 18.714-45.286l0-201.143 q0-26.286 -18.714-45.143t-45.286-18.857l-201.143,0 q-26.571,0 -45.286,18.857t-18.714,45.143l0,201.143 q0,26.571 18.714,45.286t 45.286,18.714l 201.143,0 zM 292.571,105.143l0,201.143 q0,11.429 -8,19.429t-19.429,8l-201.143,0 q-11.429,0 -19.429-8t-8-19.429l0-201.143 q0-11.429 8-19.429t 19.429-8l 201.143,0 q 11.429,0 19.429,8t 8,19.429z M 246.857,224q 4,0 6.571-2.571t 2.571-6.571l0-18.286 q0-4 -2.571-6.571t-6.571-2.571l-164.571,0 q-4,0 -6.571,2.571t-2.571,6.571l0,18.286 q0,4 2.571,6.571t 6.571,2.571l 164.571,0 z" horiz-adv-x="329.143" /> | ||
26 | +<glyph unicode="" d="M 365.714,205.714l0,36.571 q0,7.429 -5.429,12.857t-12.857,5.429l-91.429,0 l0,91.429 q0,7.429 -5.429,12.857t-12.857,5.429l-36.571,0 q-7.429,0 -12.857-5.429t-5.429-12.857l0-91.429 l-91.429,0 q-7.429,0 -12.857-5.429t-5.429-12.857l0-36.571 q0-7.429 5.429-12.857t 12.857-5.429l 91.429,0 l0-91.429 q0-7.429 5.429-12.857t 12.857-5.429l 36.571,0 q 7.429,0 12.857,5.429t 5.429,12.857l0,91.429 l 91.429,0 q 7.429,0 12.857,5.429t 5.429,12.857zM 438.857,361.143l0-274.286 q0-34 -24.143-58.143t-58.143-24.143l-274.286,0 q-34,0 -58.143,24.143t-24.143,58.143l0,274.286 q0,34 24.143,58.143t 58.143,24.143l 274.286,0 q 34,0 58.143-24.143t 24.143-58.143z" horiz-adv-x="438.857" /> | ||
27 | +<glyph unicode="" d="M 365.714,205.714l0,36.571 q0,7.429 -5.429,12.857t-12.857,5.429l-256,0 q-7.429,0 -12.857-5.429t-5.429-12.857l0-36.571 q0-7.429 5.429-12.857t 12.857-5.429l 256,0 q 7.429,0 12.857,5.429t 5.429,12.857zM 438.857,361.143l0-274.286 q0-34 -24.143-58.143t-58.143-24.143l-274.286,0 q-34,0 -58.143,24.143t-24.143,58.143l0,274.286 q0,34 24.143,58.143t 58.143,24.143l 274.286,0 q 34,0 58.143-24.143 t 24.143-58.143z" horiz-adv-x="438.857" /> | ||
28 | +<glyph unicode="" d="M 512,224C 512,82.615, 397.385-32, 256-32s -256,114.615, -256,256s 114.615,256, 256,256S 512,365.385, 512,224z M 233.372,374.628 | ||
29 | + l -128-128.001C 99.124,240.379, 96,232.189, 96,224s 3.124-16.379 9.372-22.627c 12.497-12.497 32.759-12.497, 45.256,0L 224,274.745 | ||
30 | + L 224,96 c 0-17.673 14.327-32 32-32c 17.673,0, 32,14.327, 32,32l0,178.745 l 73.373-73.373c 12.497-12.497 32.758-12.497, 45.255,0 | ||
31 | + c 12.497,12.497, 12.497,32.758, 0,45.254l -128,128.001C 266.131,387.124, 245.869,387.124, 233.372,374.628z" /> | ||
32 | +<glyph unicode="" d="M 512,224C 512,365.385, 397.385,480, 256,480s -256-114.615, -256-256s 114.615-256, 256-256S 512,82.615, 512,224z M 233.372,73.372 | ||
33 | + l -128,128.001C 99.124,207.621, 96,215.811, 96,224s 3.124,16.379 9.372,22.627c 12.497,12.497 32.759,12.497, 45.256,0L 224,173.255 | ||
34 | + L 224,352 c 0,17.673 14.327,32 32,32c 17.673,0, 32-14.327, 32-32l0-178.745 l 73.373,73.373c 12.497,12.497 32.758,12.497, 45.255,0 | ||
35 | + c 12.497-12.497, 12.497-32.758, 0-45.254l -128-128.001C 266.131,60.876, 245.869,60.876, 233.372,73.372z" /> | ||
36 | +<glyph unicode="" d="M 256,480C 397.385,480, 512,365.385, 512,224s -114.615-256, -256-256s -256,114.615, -256,256S 114.615,480, 256,480z M 105.372,201.372 | ||
37 | + l 128.001-128C 239.621,67.124, 247.811,64, 256,64s 16.379,3.124 22.627,9.372c 12.497,12.497 12.497,32.759,0,45.256L 205.255,192 | ||
38 | + L 384,192 c 17.673,0 32,14.327 32,32c0,17.673, -14.327,32, -32,32l-178.745,0 l 73.373,73.373c 12.497,12.497 12.497,32.758,0,45.255 | ||
39 | + c -12.497,12.497, -32.758,12.497, -45.254,0l -128.001-128C 92.876,234.131, 92.876,213.869, 105.372,201.372z" /> | ||
40 | +<glyph unicode="" d="M 256,480C 114.615,480,0,365.385,0,224s 114.615-256, 256-256s 256,114.615, 256,256S 397.385,480, 256,480z M 406.628,201.372 | ||
41 | + l-128.001-128C 272.379,67.124, 264.189,64, 256,64s-16.379,3.124-22.627,9.372c-12.497,12.497-12.497,32.759,0,45.256L 306.745,192 | ||
42 | + L 128,192 c-17.673,0-32,14.327-32,32c0,17.673, 14.327,32, 32,32l 178.745,0 l-73.373,73.373c-12.497,12.497-12.497,32.758,0,45.255 | ||
43 | + c 12.497,12.497, 32.758,12.497, 45.254,0l 128.001-128C 419.124,234.131, 419.124,213.869, 406.628,201.372z" /> | ||
44 | +<glyph unicode="" d="M0,160L 96,64L 256,224L 416,64L 512,160L 256.001,416 z" /> | ||
45 | +<glyph unicode="" d="M 512,288L 416,384L 256,224L 96,384L0,288L 256,32.001 z" /> | ||
46 | +<glyph unicode="" d="M 320-32L 416,64L 256,224L 416,384L 320,480L 64,224 z" /> | ||
47 | +<glyph unicode="" d="M 192,480L 96,384L 256,224L 96,64L 192-32L 448,224 z" /> | ||
48 | +<glyph unicode="" d="M 292.571,132.571q0-7.429 -5.429-12.857t-12.857-5.429l-256,0 q-7.429,0 -12.857,5.429t-5.429,12.857t 5.429,12.857l 128,128q 5.429,5.429 12.857,5.429t 12.857-5.429l 128-128q 5.429-5.429 5.429-12.857z" horiz-adv-x="292.571" /> | ||
49 | +<glyph unicode="" d="M 292.571,278.857q0-7.429 -5.429-12.857l-128-128q-5.429-5.429 -12.857-5.429t-12.857,5.429l-128,128q-5.429,5.429 -5.429,12.857t 5.429,12.857t 12.857,5.429l 256,0 q 7.429,0 12.857-5.429t 5.429-12.857z" horiz-adv-x="292.571" /> | ||
50 | +<glyph unicode="" d="M 182.857,352l0-256 q0-7.429 -5.429-12.857t-12.857-5.429t-12.857,5.429l-128,128q-5.429,5.429 -5.429,12.857t 5.429,12.857l 128,128q 5.429,5.429 12.857,5.429t 12.857-5.429t 5.429-12.857z" horiz-adv-x="182.857" /> | ||
51 | +<glyph unicode="" d="M 164.571,224q0-7.429 -5.429-12.857l-128-128q-5.429-5.429 -12.857-5.429t-12.857,5.429t-5.429,12.857l0,256 q0,7.429 5.429,12.857t 12.857,5.429t 12.857-5.429l 128-128q 5.429-5.429 5.429-12.857z" horiz-adv-x="182.857" /> | ||
52 | +<glyph unicode="" d="M 256,480L 32-32L 256,64L 480-32 z" /> | ||
53 | +<glyph unicode="" d="M 256-32L 480,480L 256,384L 32,480 z" /> | ||
54 | +<glyph unicode="" d="M0,224L 512,0L 416,224L 512,448 z" /> | ||
55 | +<glyph unicode="" d="M 512,224L0,448L 96,224L0,0 z" /> | ||
56 | +<glyph unicode="" d="M 512,224C 512,82.615, 397.385-32, 256-32s -256,114.615, -256,256s 114.615,256, 256,256S 512,365.385, 512,224z M 48,224 | ||
57 | + c 0-114.875 93.125-208 208-208S 464,109.125, 464,224s -93.125,208, -208,208S 48,338.875, 48,224zM 278.627,374.628l 128-128.001c 12.497-12.496 12.497-32.757 0-45.254c -12.497-12.497 -32.758-12.497,-45.255,0L 288,274.745 | ||
58 | + L 288,96 c 0-17.673 -14.327-32 -32-32c-17.673,0, -32,14.327, -32,32l0,178.745 l -73.372-73.373c -12.497-12.497 -32.759-12.497,-45.256,0 | ||
59 | + C 99.124,207.621, 96,215.811, 96,224s 3.124,16.379, 9.372,22.627l 128,128.001C 245.869,387.124, 266.131,387.124, 278.627,374.628z" /> | ||
60 | +<glyph unicode="" d="M 512,224C 512,365.385, 397.385,480, 256,480s -256-114.615, -256-256s 114.615-256, 256-256S 512,82.615, 512,224z M 48,224 | ||
61 | + c 0,114.875 93.125,208 208,208S 464,338.875, 464,224s -93.125-208, -208-208S 48,109.125, 48,224zM 278.627,73.372l 128,128.001c 12.497,12.496 12.497,32.757 0,45.254c -12.497,12.497 -32.758,12.497,-45.255,0L 288,173.255 | ||
62 | + L 288,352 c 0,17.673 -14.327,32 -32,32c-17.673,0, -32-14.327, -32-32l0-178.745 l -73.372,73.373c -12.497,12.497 -32.759,12.497,-45.256,0 | ||
63 | + C 99.124,240.379, 96,232.189, 96,224s 3.124-16.379, 9.372-22.627l 128-128.001C 245.869,60.876, 266.131,60.876, 278.627,73.372z" /> | ||
64 | +<glyph unicode="" d="M 256,480C 397.385,480, 512,365.385, 512,224s -114.615-256, -256-256s -256,114.615, -256,256S 114.615,480, 256,480z M 256,16 | ||
65 | + c 114.875,0 208,93.125 208,208S 370.875,432, 256,432s -208-93.125, -208-208S 141.125,16, 256,16zM 105.372,246.627l 128.001,128c 12.496,12.497 32.757,12.497 45.254,0c 12.497-12.497 12.497-32.758,0-45.255L 205.255,256 | ||
66 | + L 384,256 c 17.673,0 32-14.327 32-32c0-17.673, -14.327-32, -32-32l-178.745,0 l 73.373-73.372c 12.497-12.497 12.497-32.759,0-45.256 | ||
67 | + C 272.379,67.124, 264.189,64, 256,64s -16.379,3.124, -22.627,9.372l -128.001,128C 92.876,213.869, 92.876,234.131, 105.372,246.627z" /> | ||
68 | +<glyph unicode="" d="M 256,480C 114.615,480,0,365.385,0,224s 114.615-256, 256-256s 256,114.615, 256,256S 397.385,480, 256,480z M 256,16 | ||
69 | + c-114.875,0-208,93.125-208,208S 141.125,432, 256,432s 208-93.125, 208-208S 370.875,16, 256,16zM 406.628,246.627l-128.001,128c-12.496,12.497-32.757,12.497-45.254,0c-12.497-12.497-12.497-32.758,0-45.255L 306.745,256 | ||
70 | + L 128,256 c-17.673,0-32-14.327-32-32c0-17.673, 14.327-32, 32-32l 178.745,0 l-73.373-73.372c-12.497-12.497-12.497-32.759,0-45.256 | ||
71 | + C 239.621,67.124, 247.811,64, 256,64s 16.379,3.124, 22.627,9.372l 128.001,128C 419.124,213.869, 419.124,234.131, 406.628,246.627z" /> | ||
72 | +<glyph unicode="" d="M 307.143,141.714q0-3.714 -2.857-6.571l-14.286-14.286q-2.857-2.857 -6.571-2.857t-6.571,2.857l-112.286,112.286l-112.286-112.286q-2.857-2.857 -6.571-2.857t-6.571,2.857l-14.286,14.286q-2.857,2.857 -2.857,6.571t 2.857,6.571l 133.143,133.143q 2.857,2.857 6.571,2.857t 6.571-2.857l 133.143-133.143q 2.857-2.857 2.857-6.571z" horiz-adv-x="329.143" /> | ||
73 | +<glyph unicode="" d="M 307.143,269.714q0-3.714 -2.857-6.571l-133.143-133.143q-2.857-2.857 -6.571-2.857t-6.571,2.857l-133.143,133.143q-2.857,2.857 -2.857,6.571t 2.857,6.571l 14.286,14.286q 2.857,2.857 6.571,2.857t 6.571-2.857l 112.286-112.286l 112.286,112.286q 2.857,2.857 6.571,2.857t 6.571-2.857l 14.286-14.286q 2.857-2.857 2.857-6.571z" horiz-adv-x="329.143" /> | ||
74 | +<glyph unicode="" d="M 179.143,324.571q0-3.714 -2.857-6.571l-112.286-112.286l 112.286-112.286q 2.857-2.857 2.857-6.571t-2.857-6.571l-14.286-14.286q-2.857-2.857 -6.571-2.857t-6.571,2.857l-133.143,133.143q-2.857,2.857 -2.857,6.571t 2.857,6.571l 133.143,133.143q 2.857,2.857 6.571,2.857t 6.571-2.857l 14.286-14.286q 2.857-2.857 2.857-6.571z" horiz-adv-x="182.857" /> | ||
75 | +<glyph unicode="" d="M 170,205.714q0-3.714 -2.857-6.571l-133.143-133.143q-2.857-2.857 -6.571-2.857t-6.571,2.857l-14.286,14.286q-2.857,2.857 -2.857,6.571t 2.857,6.571l 112.286,112.286l-112.286,112.286q-2.857,2.857 -2.857,6.571t 2.857,6.571l 14.286,14.286q 2.857,2.857 6.571,2.857t 6.571-2.857l 133.143-133.143q 2.857-2.857 2.857-6.571z" horiz-adv-x="182.857" /> | ||
76 | +<glyph unicode="" d="M 292.571,169.143q0-7.429 -5.429-12.857l-128-128q-5.429-5.429 -12.857-5.429t-12.857,5.429l-128,128q-5.429,5.429 -5.429,12.857t 5.429,12.857t 12.857,5.429l 256,0 q 7.429,0 12.857-5.429t 5.429-12.857zM 292.571,278.857q0-7.429 -5.429-12.857t-12.857-5.429l-256,0 q-7.429,0 -12.857,5.429t-5.429,12.857t 5.429,12.857l 128,128q 5.429,5.429 12.857,5.429t 12.857-5.429l 128-128q 5.429-5.429 5.429-12.857z" horiz-adv-x="292.571" /> | ||
77 | +<glyph unicode=" " horiz-adv-x="256" /> | ||
78 | +</font></defs></svg> | ||
0 | \ No newline at end of file | 79 | \ No newline at end of file |
No preview for this file type
No preview for this file type
1.94 KB
2.03 KB
index.html
@@ -48,6 +48,7 @@ | @@ -48,6 +48,7 @@ | ||
48 | 'css/bootstrap.min.css', | 48 | 'css/bootstrap.min.css', |
49 | 'css/bootstrap-alert.min.css', | 49 | 'css/bootstrap-alert.min.css', |
50 | 'css/hover.custom.css', | 50 | 'css/hover.custom.css', |
51 | + 'css/footable.core.min.css', | ||
51 | 'http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css', | 52 | 'http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css', |
52 | 'http://fonts.googleapis.com/css?family=Open+Sans:400,300,700', | 53 | 'http://fonts.googleapis.com/css?family=Open+Sans:400,300,700', |
53 | 'http://fonts.googleapis.com/css?family=Asap:400,700', | 54 | 'http://fonts.googleapis.com/css?family=Asap:400,700', |
@@ -323,15 +324,18 @@ | @@ -323,15 +324,18 @@ | ||
323 | <span>Última atualização </span> | 324 | <span>Última atualização </span> |
324 | <span class="timeago" title="{{updated_at}}"></span> | 325 | <span class="timeago" title="{{updated_at}}"></span> |
325 | </div> | 326 | </div> |
326 | - <div class="table-responsive border"> | ||
327 | - <table class="table"> | ||
328 | - <tr class="header"> | ||
329 | - <th class="position">Posição <a href="#"><span class="fa fa-question"></span></a></th> | ||
330 | - <th class="abstract-text">Propostas</th> | ||
331 | - <th class="views">Exibições</th> | ||
332 | - <th class="votes-for"><span class="fa fa-check"></span></th> | ||
333 | - <th class="votes-against"><span class="fa fa-times"></span></th> | ||
334 | - </tr> | 327 | + <div class="border"> |
328 | + <table class="footable"> | ||
329 | + <thead> | ||
330 | + <tr class="header"> | ||
331 | + <th class="position">Posição <a href="#" class="hidden-xs"><span class="fa fa-question"></span></a></th> | ||
332 | + <th class="abstract-text" data-toggle="true">Propostas</th> | ||
333 | + <th class="views" data-hide="phone">Exibições</th> | ||
334 | + <th class="votes-for" data-hide="phone"><span class="sr-only">A favor</span><span class="fa fa-check"></span></th> | ||
335 | + <th class="votes-against" data-hide="phone"><span class="sr-only">Contra</span><span class="fa fa-times"></span></th> | ||
336 | + </tr> | ||
337 | + </thead> | ||
338 | + <tbody> | ||
335 | {{#each proposals}} | 339 | {{#each proposals}} |
336 | <tr> | 340 | <tr> |
337 | <td class="">{{calcPosition @index ../pagination.per_page ../pagination.page}}°</td> | 341 | <td class="">{{calcPosition @index ../pagination.per_page ../pagination.page}}°</td> |
@@ -341,6 +345,7 @@ | @@ -341,6 +345,7 @@ | ||
341 | <td class="votes-against value">{{votes_against}}</td> | 345 | <td class="votes-against value">{{votes_against}}</td> |
342 | </tr> | 346 | </tr> |
343 | {{/each}} | 347 | {{/each}} |
348 | + </tbody> | ||
344 | </table> | 349 | </table> |
345 | </div> | 350 | </div> |
346 | <div class="paging"></div> | 351 | <div class="paging"></div> |
@@ -0,0 +1,824 @@ | @@ -0,0 +1,824 @@ | ||
1 | +/*! | ||
2 | + * FooTable - Awesome Responsive Tables | ||
3 | + * Version : 2.0.3 | ||
4 | + * http://fooplugins.com/plugins/footable-jquery/ | ||
5 | + * | ||
6 | + * Requires jQuery - http://jquery.com/ | ||
7 | + * | ||
8 | + * Copyright 2014 Steven Usher & Brad Vincent | ||
9 | + * Released under the MIT license | ||
10 | + * You are free to use FooTable in commercial projects as long as this copyright header is left intact. | ||
11 | + * | ||
12 | + * Date: 11 Nov 2014 | ||
13 | + */ | ||
14 | +(function ($, w, undefined) { | ||
15 | + w.footable = { | ||
16 | + options: { | ||
17 | + delay: 100, // The number of millseconds to wait before triggering the react event | ||
18 | + breakpoints: { // The different screen resolution breakpoints | ||
19 | + phone: 480, | ||
20 | + tablet: 1024 | ||
21 | + }, | ||
22 | + parsers: { // The default parser to parse the value out of a cell (values are used in building up row detail) | ||
23 | + alpha: function (cell) { | ||
24 | + return $(cell).data('value') || $.trim($(cell).text()); | ||
25 | + }, | ||
26 | + numeric: function (cell) { | ||
27 | + var val = $(cell).data('value') || $(cell).text().replace(/[^0-9.\-]/g, ''); | ||
28 | + val = parseFloat(val); | ||
29 | + if (isNaN(val)) val = 0; | ||
30 | + return val; | ||
31 | + } | ||
32 | + }, | ||
33 | + addRowToggle: true, | ||
34 | + calculateWidthOverride: null, | ||
35 | + toggleSelector: ' > tbody > tr:not(.footable-row-detail)', //the selector to show/hide the detail row | ||
36 | + columnDataSelector: '> thead > tr:last-child > th, > thead > tr:last-child > td', //the selector used to find the column data in the thead | ||
37 | + detailSeparator: ':', //the separator character used when building up the detail row | ||
38 | + toggleHTMLElement: '<span />', // override this if you want to insert a click target rather than use a background image. | ||
39 | + createGroupedDetail: function (data) { | ||
40 | + var groups = { '_none': { 'name': null, 'data': [] } }; | ||
41 | + for (var i = 0; i < data.length; i++) { | ||
42 | + var groupid = data[i].group; | ||
43 | + if (groupid !== null) { | ||
44 | + if (!(groupid in groups)) | ||
45 | + groups[groupid] = { 'name': data[i].groupName || data[i].group, 'data': [] }; | ||
46 | + | ||
47 | + groups[groupid].data.push(data[i]); | ||
48 | + } else { | ||
49 | + groups._none.data.push(data[i]); | ||
50 | + } | ||
51 | + } | ||
52 | + return groups; | ||
53 | + }, | ||
54 | + createDetail: function (element, data, createGroupedDetail, separatorChar, classes) { | ||
55 | + /// <summary>This function is used by FooTable to generate the detail view seen when expanding a collapsed row.</summary> | ||
56 | + /// <param name="element">This is the div that contains all the detail row information, anything could be added to it.</param> | ||
57 | + /// <param name="data"> | ||
58 | + /// This is an array of objects containing the cell information for the current row. | ||
59 | + /// These objects look like the below: | ||
60 | + /// obj = { | ||
61 | + /// 'name': String, // The name of the column | ||
62 | + /// 'value': Object, // The value parsed from the cell using the parsers. This could be a string, a number or whatever the parser outputs. | ||
63 | + /// 'display': String, // This is the actual HTML from the cell, so if you have images etc you want moved this is the one to use and is the default value used. | ||
64 | + /// 'group': String, // This is the identifier used in the data-group attribute of the column. | ||
65 | + /// 'groupName': String // This is the actual name of the group the column belongs to. | ||
66 | + /// } | ||
67 | + /// </param> | ||
68 | + /// <param name="createGroupedDetail">The grouping function to group the data</param> | ||
69 | + /// <param name="separatorChar">The separator charactor used</param> | ||
70 | + /// <param name="classes">The array of class names used to build up the detail row</param> | ||
71 | + | ||
72 | + var groups = createGroupedDetail(data); | ||
73 | + for (var group in groups) { | ||
74 | + if (groups[group].data.length === 0) continue; | ||
75 | + if (group !== '_none') element.append('<div class="' + classes.detailInnerGroup + '">' + groups[group].name + '</div>'); | ||
76 | + | ||
77 | + for (var j = 0; j < groups[group].data.length; j++) { | ||
78 | + var separator = (groups[group].data[j].name) ? separatorChar : ''; | ||
79 | + element.append($('<div></div>').addClass(classes.detailInnerRow).append($('<div></div>').addClass(classes.detailInnerName) | ||
80 | + .append(groups[group].data[j].name + separator)).append($('<div></div>').addClass(classes.detailInnerValue) | ||
81 | + .attr('data-bind-value', groups[group].data[j].bindName).append(groups[group].data[j].display))); | ||
82 | + } | ||
83 | + } | ||
84 | + }, | ||
85 | + classes: { | ||
86 | + main: 'footable', | ||
87 | + loading: 'footable-loading', | ||
88 | + loaded: 'footable-loaded', | ||
89 | + toggle: 'footable-toggle', | ||
90 | + disabled: 'footable-disabled', | ||
91 | + detail: 'footable-row-detail', | ||
92 | + detailCell: 'footable-row-detail-cell', | ||
93 | + detailInner: 'footable-row-detail-inner', | ||
94 | + detailInnerRow: 'footable-row-detail-row', | ||
95 | + detailInnerGroup: 'footable-row-detail-group', | ||
96 | + detailInnerName: 'footable-row-detail-name', | ||
97 | + detailInnerValue: 'footable-row-detail-value', | ||
98 | + detailShow: 'footable-detail-show' | ||
99 | + }, | ||
100 | + triggers: { | ||
101 | + initialize: 'footable_initialize', //trigger this event to force FooTable to reinitialize | ||
102 | + resize: 'footable_resize', //trigger this event to force FooTable to resize | ||
103 | + redraw: 'footable_redraw', //trigger this event to force FooTable to redraw | ||
104 | + toggleRow: 'footable_toggle_row', //trigger this event to force FooTable to toggle a row | ||
105 | + expandFirstRow: 'footable_expand_first_row', //trigger this event to force FooTable to expand the first row | ||
106 | + expandAll: 'footable_expand_all', //trigger this event to force FooTable to expand all rows | ||
107 | + collapseAll: 'footable_collapse_all' //trigger this event to force FooTable to collapse all rows | ||
108 | + }, | ||
109 | + events: { | ||
110 | + alreadyInitialized: 'footable_already_initialized', //fires when the FooTable has already been initialized | ||
111 | + initializing: 'footable_initializing', //fires before FooTable starts initializing | ||
112 | + initialized: 'footable_initialized', //fires after FooTable has finished initializing | ||
113 | + resizing: 'footable_resizing', //fires before FooTable resizes | ||
114 | + resized: 'footable_resized', //fires after FooTable has resized | ||
115 | + redrawn: 'footable_redrawn', //fires after FooTable has redrawn | ||
116 | + breakpoint: 'footable_breakpoint', //fires inside the resize function, when a breakpoint is hit | ||
117 | + columnData: 'footable_column_data', //fires when setting up column data. Plugins should use this event to capture their own info about a column | ||
118 | + rowDetailUpdating: 'footable_row_detail_updating', //fires before a detail row is updated | ||
119 | + rowDetailUpdated: 'footable_row_detail_updated', //fires when a detail row is being updated | ||
120 | + rowCollapsed: 'footable_row_collapsed', //fires when a row is collapsed | ||
121 | + rowExpanded: 'footable_row_expanded', //fires when a row is expanded | ||
122 | + rowRemoved: 'footable_row_removed', //fires when a row is removed | ||
123 | + reset: 'footable_reset' //fires when FooTable is reset | ||
124 | + }, | ||
125 | + debug: false, // Whether or not to log information to the console. | ||
126 | + log: null | ||
127 | + }, | ||
128 | + | ||
129 | + version: { | ||
130 | + major: 0, minor: 5, | ||
131 | + toString: function () { | ||
132 | + return w.footable.version.major + '.' + w.footable.version.minor; | ||
133 | + }, | ||
134 | + parse: function (str) { | ||
135 | + var version = /(\d+)\.?(\d+)?\.?(\d+)?/.exec(str); | ||
136 | + return { | ||
137 | + major: parseInt(version[1], 10) || 0, | ||
138 | + minor: parseInt(version[2], 10) || 0, | ||
139 | + patch: parseInt(version[3], 10) || 0 | ||
140 | + }; | ||
141 | + } | ||
142 | + }, | ||
143 | + | ||
144 | + plugins: { | ||
145 | + _validate: function (plugin) { | ||
146 | + ///<summary>Simple validation of the <paramref name="plugin"/> to make sure any members called by FooTable actually exist.</summary> | ||
147 | + ///<param name="plugin">The object defining the plugin, this should implement a string property called "name" and a function called "init".</param> | ||
148 | + | ||
149 | + if (!$.isFunction(plugin)) { | ||
150 | + if (w.footable.options.debug === true) console.error('Validation failed, expected type "function", received type "{0}".', typeof plugin); | ||
151 | + return false; | ||
152 | + } | ||
153 | + var p = new plugin(); | ||
154 | + if (typeof p['name'] !== 'string') { | ||
155 | + if (w.footable.options.debug === true) console.error('Validation failed, plugin does not implement a string property called "name".', p); | ||
156 | + return false; | ||
157 | + } | ||
158 | + if (!$.isFunction(p['init'])) { | ||
159 | + if (w.footable.options.debug === true) console.error('Validation failed, plugin "' + p['name'] + '" does not implement a function called "init".', p); | ||
160 | + return false; | ||
161 | + } | ||
162 | + if (w.footable.options.debug === true) console.log('Validation succeeded for plugin "' + p['name'] + '".', p); | ||
163 | + return true; | ||
164 | + }, | ||
165 | + registered: [], // An array containing all registered plugins. | ||
166 | + register: function (plugin, options) { | ||
167 | + ///<summary>Registers a <paramref name="plugin"/> and its default <paramref name="options"/> with FooTable.</summary> | ||
168 | + ///<param name="plugin">The plugin that should implement a string property called "name" and a function called "init".</param> | ||
169 | + ///<param name="options">The default options to merge with the FooTable's base options.</param> | ||
170 | + | ||
171 | + if (w.footable.plugins._validate(plugin)) { | ||
172 | + w.footable.plugins.registered.push(plugin); | ||
173 | + if (typeof options === 'object') $.extend(true, w.footable.options, options); | ||
174 | + } | ||
175 | + }, | ||
176 | + load: function(instance){ | ||
177 | + var loaded = [], registered, i; | ||
178 | + for(i = 0; i < w.footable.plugins.registered.length; i++){ | ||
179 | + try { | ||
180 | + registered = w.footable.plugins.registered[i]; | ||
181 | + loaded.push(new registered(instance)); | ||
182 | + } catch (err) { | ||
183 | + if (w.footable.options.debug === true) console.error(err); | ||
184 | + } | ||
185 | + } | ||
186 | + return loaded; | ||
187 | + }, | ||
188 | + init: function (instance) { | ||
189 | + ///<summary>Loops through all registered plugins and calls the "init" method supplying the current <paramref name="instance"/> of the FooTable as the first parameter.</summary> | ||
190 | + ///<param name="instance">The current instance of the FooTable that the plugin is being initialized for.</param> | ||
191 | + | ||
192 | + for (var i = 0; i < instance.plugins.length; i++) { | ||
193 | + try { | ||
194 | + instance.plugins[i]['init'](instance); | ||
195 | + } catch (err) { | ||
196 | + if (w.footable.options.debug === true) console.error(err); | ||
197 | + } | ||
198 | + } | ||
199 | + } | ||
200 | + } | ||
201 | + }; | ||
202 | + | ||
203 | + var instanceCount = 0; | ||
204 | + | ||
205 | + $.fn.footable = function (options) { | ||
206 | + ///<summary>The main constructor call to initialize the plugin using the supplied <paramref name="options"/>.</summary> | ||
207 | + ///<param name="options"> | ||
208 | + ///<para>A JSON object containing user defined options for the plugin to use. Any options not supplied will have a default value assigned.</para> | ||
209 | + ///<para>Check the documentation or the default options object above for more information on available options.</para> | ||
210 | + ///</param> | ||
211 | + | ||
212 | + options = options || {}; | ||
213 | + var o = $.extend(true, {}, w.footable.options, options); //merge user and default options | ||
214 | + return this.each(function () { | ||
215 | + instanceCount++; | ||
216 | + var footable = new Footable(this, o, instanceCount); | ||
217 | + $(this).data('footable', footable); | ||
218 | + }); | ||
219 | + }; | ||
220 | + | ||
221 | + //helper for using timeouts | ||
222 | + function Timer() { | ||
223 | + ///<summary>Simple timer object created around a timeout.</summary> | ||
224 | + var t = this; | ||
225 | + t.id = null; | ||
226 | + t.busy = false; | ||
227 | + t.start = function (code, milliseconds) { | ||
228 | + ///<summary>Starts the timer and waits the specified amount of <paramref name="milliseconds"/> before executing the supplied <paramref name="code"/>.</summary> | ||
229 | + ///<param name="code">The code to execute once the timer runs out.</param> | ||
230 | + ///<param name="milliseconds">The time in milliseconds to wait before executing the supplied <paramref name="code"/>.</param> | ||
231 | + | ||
232 | + if (t.busy) { | ||
233 | + return; | ||
234 | + } | ||
235 | + t.stop(); | ||
236 | + t.id = setTimeout(function () { | ||
237 | + code(); | ||
238 | + t.id = null; | ||
239 | + t.busy = false; | ||
240 | + }, milliseconds); | ||
241 | + t.busy = true; | ||
242 | + }; | ||
243 | + t.stop = function () { | ||
244 | + ///<summary>Stops the timer if its runnning and resets it back to its starting state.</summary> | ||
245 | + | ||
246 | + if (t.id !== null) { | ||
247 | + clearTimeout(t.id); | ||
248 | + t.id = null; | ||
249 | + t.busy = false; | ||
250 | + } | ||
251 | + }; | ||
252 | + } | ||
253 | + | ||
254 | + function Footable(t, o, id) { | ||
255 | + ///<summary>Inits a new instance of the plugin.</summary> | ||
256 | + ///<param name="t">The main table element to apply this plugin to.</param> | ||
257 | + ///<param name="o">The options supplied to the plugin. Check the defaults object to see all available options.</param> | ||
258 | + ///<param name="id">The id to assign to this instance of the plugin.</param> | ||
259 | + | ||
260 | + var ft = this; | ||
261 | + ft.id = id; | ||
262 | + ft.table = t; | ||
263 | + ft.options = o; | ||
264 | + ft.breakpoints = []; | ||
265 | + ft.breakpointNames = ''; | ||
266 | + ft.columns = {}; | ||
267 | + ft.plugins = w.footable.plugins.load(ft); | ||
268 | + | ||
269 | + var opt = ft.options, | ||
270 | + cls = opt.classes, | ||
271 | + evt = opt.events, | ||
272 | + trg = opt.triggers, | ||
273 | + indexOffset = 0; | ||
274 | + | ||
275 | + // This object simply houses all the timers used in the FooTable. | ||
276 | + ft.timers = { | ||
277 | + resize: new Timer(), | ||
278 | + register: function (name) { | ||
279 | + ft.timers[name] = new Timer(); | ||
280 | + return ft.timers[name]; | ||
281 | + } | ||
282 | + }; | ||
283 | + | ||
284 | + ft.init = function () { | ||
285 | + var $window = $(w), $table = $(ft.table); | ||
286 | + | ||
287 | + w.footable.plugins.init(ft); | ||
288 | + | ||
289 | + if ($table.hasClass(cls.loaded)) { | ||
290 | + //already loaded FooTable for the table, so don't init again | ||
291 | + ft.raise(evt.alreadyInitialized); | ||
292 | + return; | ||
293 | + } | ||
294 | + | ||
295 | + //raise the initializing event | ||
296 | + ft.raise(evt.initializing); | ||
297 | + | ||
298 | + $table.addClass(cls.loading); | ||
299 | + | ||
300 | + // Get the column data once for the life time of the plugin | ||
301 | + $table.find(opt.columnDataSelector).each(function () { | ||
302 | + var data = ft.getColumnData(this); | ||
303 | + ft.columns[data.index] = data; | ||
304 | + }); | ||
305 | + | ||
306 | + // Create a nice friendly array to work with out of the breakpoints object. | ||
307 | + for (var name in opt.breakpoints) { | ||
308 | + ft.breakpoints.push({ 'name': name, 'width': opt.breakpoints[name] }); | ||
309 | + ft.breakpointNames += (name + ' '); | ||
310 | + } | ||
311 | + | ||
312 | + // Sort the breakpoints so the smallest is checked first | ||
313 | + ft.breakpoints.sort(function (a, b) { | ||
314 | + return a['width'] - b['width']; | ||
315 | + }); | ||
316 | + | ||
317 | + $table | ||
318 | + .unbind(trg.initialize) | ||
319 | + //bind to FooTable initialize trigger | ||
320 | + .bind(trg.initialize, function () { | ||
321 | + //remove previous "state" (to "force" a resize) | ||
322 | + $table.removeData('footable_info'); | ||
323 | + $table.data('breakpoint', ''); | ||
324 | + | ||
325 | + //trigger the FooTable resize | ||
326 | + $table.trigger(trg.resize); | ||
327 | + | ||
328 | + //remove the loading class | ||
329 | + $table.removeClass(cls.loading); | ||
330 | + | ||
331 | + //add the FooTable and loaded class | ||
332 | + $table.addClass(cls.loaded).addClass(cls.main); | ||
333 | + | ||
334 | + //raise the initialized event | ||
335 | + ft.raise(evt.initialized); | ||
336 | + }) | ||
337 | + .unbind(trg.redraw) | ||
338 | + //bind to FooTable redraw trigger | ||
339 | + .bind(trg.redraw, function () { | ||
340 | + ft.redraw(); | ||
341 | + }) | ||
342 | + .unbind(trg.resize) | ||
343 | + //bind to FooTable resize trigger | ||
344 | + .bind(trg.resize, function () { | ||
345 | + ft.resize(); | ||
346 | + }) | ||
347 | + .unbind(trg.expandFirstRow) | ||
348 | + //bind to FooTable expandFirstRow trigger | ||
349 | + .bind(trg.expandFirstRow, function () { | ||
350 | + $table.find(opt.toggleSelector).first().not('.' + cls.detailShow).trigger(trg.toggleRow); | ||
351 | + }) | ||
352 | + .unbind(trg.expandAll) | ||
353 | + //bind to FooTable expandFirstRow trigger | ||
354 | + .bind(trg.expandAll, function () { | ||
355 | + $table.find(opt.toggleSelector).not('.' + cls.detailShow).trigger(trg.toggleRow); | ||
356 | + }) | ||
357 | + .unbind(trg.collapseAll) | ||
358 | + //bind to FooTable expandFirstRow trigger | ||
359 | + .bind(trg.collapseAll, function () { | ||
360 | + $table.find('.' + cls.detailShow).trigger(trg.toggleRow); | ||
361 | + }); | ||
362 | + | ||
363 | + //trigger a FooTable initialize | ||
364 | + $table.trigger(trg.initialize); | ||
365 | + | ||
366 | + //bind to window resize | ||
367 | + $window | ||
368 | + .bind('resize.footable', function () { | ||
369 | + ft.timers.resize.stop(); | ||
370 | + ft.timers.resize.start(function () { | ||
371 | + ft.raise(trg.resize); | ||
372 | + }, opt.delay); | ||
373 | + }); | ||
374 | + }; | ||
375 | + | ||
376 | + ft.addRowToggle = function () { | ||
377 | + if (!opt.addRowToggle) return; | ||
378 | + | ||
379 | + var $table = $(ft.table), | ||
380 | + hasToggleColumn = false; | ||
381 | + | ||
382 | + //first remove all toggle spans | ||
383 | + $table.find('span.' + cls.toggle).remove(); | ||
384 | + | ||
385 | + for (var c in ft.columns) { | ||
386 | + var col = ft.columns[c]; | ||
387 | + if (col.toggle) { | ||
388 | + hasToggleColumn = true; | ||
389 | + var selector = '> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > td:nth-child(' + (parseInt(col.index, 10) + 1) + '),' + | ||
390 | + '> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > th:nth-child(' + (parseInt(col.index, 10) + 1) + ')'; | ||
391 | + $table.find(selector).not('.' + cls.detailCell).prepend($(opt.toggleHTMLElement).addClass(cls.toggle)); | ||
392 | + return; | ||
393 | + } | ||
394 | + } | ||
395 | + //check if we have an toggle column. If not then add it to the first column just to be safe | ||
396 | + if (!hasToggleColumn) { | ||
397 | + $table | ||
398 | + .find('> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > td:first-child') | ||
399 | + .add('> tbody > tr:not(.' + cls.detail + ',.' + cls.disabled + ') > th:first-child') | ||
400 | + .not('.' + cls.detailCell) | ||
401 | + .prepend($(opt.toggleHTMLElement).addClass(cls.toggle)); | ||
402 | + } | ||
403 | + }; | ||
404 | + | ||
405 | + ft.setColumnClasses = function () { | ||
406 | + var $table = $(ft.table); | ||
407 | + for (var c in ft.columns) { | ||
408 | + var col = ft.columns[c]; | ||
409 | + if (col.className !== null) { | ||
410 | + var selector = '', first = true; | ||
411 | + $.each(col.matches, function (m, match) { //support for colspans | ||
412 | + if (!first) selector += ', '; | ||
413 | + selector += '> tbody > tr:not(.' + cls.detail + ') > td:nth-child(' + (parseInt(match, 10) + 1) + ')'; | ||
414 | + first = false; | ||
415 | + }); | ||
416 | + //add the className to the cells specified by data-class="blah" | ||
417 | + $table.find(selector).not('.' + cls.detailCell).addClass(col.className); | ||
418 | + } | ||
419 | + } | ||
420 | + }; | ||
421 | + | ||
422 | + //moved this out into it's own function so that it can be called from other add-ons | ||
423 | + ft.bindToggleSelectors = function () { | ||
424 | + var $table = $(ft.table); | ||
425 | + | ||
426 | + if (!ft.hasAnyBreakpointColumn()) return; | ||
427 | + | ||
428 | + $table.find(opt.toggleSelector).unbind(trg.toggleRow).bind(trg.toggleRow, function (e) { | ||
429 | + var $row = $(this).is('tr') ? $(this) : $(this).parents('tr:first'); | ||
430 | + ft.toggleDetail($row); | ||
431 | + }); | ||
432 | + | ||
433 | + $table.find(opt.toggleSelector).unbind('click.footable').bind('click.footable', function (e) { | ||
434 | + if ($table.is('.breakpoint') && $(e.target).is('td,th,.'+ cls.toggle)) { | ||
435 | + $(this).trigger(trg.toggleRow); | ||
436 | + } | ||
437 | + }); | ||
438 | + }; | ||
439 | + | ||
440 | + ft.parse = function (cell, column) { | ||
441 | + var parser = opt.parsers[column.type] || opt.parsers.alpha; | ||
442 | + return parser(cell); | ||
443 | + }; | ||
444 | + | ||
445 | + ft.getColumnData = function (th) { | ||
446 | + var $th = $(th), hide = $th.data('hide'), index = $th.index(); | ||
447 | + hide = hide || ''; | ||
448 | + hide = jQuery.map(hide.split(','), function (a) { | ||
449 | + return jQuery.trim(a); | ||
450 | + }); | ||
451 | + var data = { | ||
452 | + 'index': index, | ||
453 | + 'hide': { }, | ||
454 | + 'type': $th.data('type') || 'alpha', | ||
455 | + 'name': $th.data('name') || $.trim($th.text()), | ||
456 | + 'ignore': $th.data('ignore') || false, | ||
457 | + 'toggle': $th.data('toggle') || false, | ||
458 | + 'className': $th.data('class') || null, | ||
459 | + 'matches': [], | ||
460 | + 'names': { }, | ||
461 | + 'group': $th.data('group') || null, | ||
462 | + 'groupName': null, | ||
463 | + 'isEditable': $th.data('editable') | ||
464 | + }; | ||
465 | + | ||
466 | + if (data.group !== null) { | ||
467 | + var $group = $(ft.table).find('> thead > tr.footable-group-row > th[data-group="' + data.group + '"], > thead > tr.footable-group-row > td[data-group="' + data.group + '"]').first(); | ||
468 | + data.groupName = ft.parse($group, { 'type': 'alpha' }); | ||
469 | + } | ||
470 | + | ||
471 | + var pcolspan = parseInt($th.prev().attr('colspan') || 0, 10); | ||
472 | + indexOffset += pcolspan > 1 ? pcolspan - 1 : 0; | ||
473 | + var colspan = parseInt($th.attr('colspan') || 0, 10), curindex = data.index + indexOffset; | ||
474 | + if (colspan > 1) { | ||
475 | + var names = $th.data('names'); | ||
476 | + names = names || ''; | ||
477 | + names = names.split(','); | ||
478 | + for (var i = 0; i < colspan; i++) { | ||
479 | + data.matches.push(i + curindex); | ||
480 | + if (i < names.length) data.names[i + curindex] = names[i]; | ||
481 | + } | ||
482 | + } else { | ||
483 | + data.matches.push(curindex); | ||
484 | + } | ||
485 | + | ||
486 | + data.hide['default'] = ($th.data('hide') === "all") || ($.inArray('default', hide) >= 0); | ||
487 | + | ||
488 | + var hasBreakpoint = false; | ||
489 | + for (var name in opt.breakpoints) { | ||
490 | + data.hide[name] = ($th.data('hide') === "all") || ($.inArray(name, hide) >= 0); | ||
491 | + hasBreakpoint = hasBreakpoint || data.hide[name]; | ||
492 | + } | ||
493 | + data.hasBreakpoint = hasBreakpoint; | ||
494 | + var e = ft.raise(evt.columnData, { 'column': { 'data': data, 'th': th } }); | ||
495 | + return e.column.data; | ||
496 | + }; | ||
497 | + | ||
498 | + ft.getViewportWidth = function () { | ||
499 | + return window.innerWidth || (document.body ? document.body.offsetWidth : 0); | ||
500 | + }; | ||
501 | + | ||
502 | + ft.calculateWidth = function ($table, info) { | ||
503 | + if (jQuery.isFunction(opt.calculateWidthOverride)) { | ||
504 | + return opt.calculateWidthOverride($table, info); | ||
505 | + } | ||
506 | + if (info.viewportWidth < info.width) info.width = info.viewportWidth; | ||
507 | + if (info.parentWidth < info.width) info.width = info.parentWidth; | ||
508 | + return info; | ||
509 | + }; | ||
510 | + | ||
511 | + ft.hasBreakpointColumn = function (breakpoint) { | ||
512 | + for (var c in ft.columns) { | ||
513 | + if (ft.columns[c].hide[breakpoint]) { | ||
514 | + if (ft.columns[c].ignore) { | ||
515 | + continue; | ||
516 | + } | ||
517 | + return true; | ||
518 | + } | ||
519 | + } | ||
520 | + return false; | ||
521 | + }; | ||
522 | + | ||
523 | + ft.hasAnyBreakpointColumn = function () { | ||
524 | + for (var c in ft.columns) { | ||
525 | + if (ft.columns[c].hasBreakpoint) { | ||
526 | + return true; | ||
527 | + } | ||
528 | + } | ||
529 | + return false; | ||
530 | + }; | ||
531 | + | ||
532 | + ft.resize = function () { | ||
533 | + var $table = $(ft.table); | ||
534 | + | ||
535 | + if (!$table.is(':visible')) { | ||
536 | + return; | ||
537 | + } //we only care about FooTables that are visible | ||
538 | + | ||
539 | + if (!ft.hasAnyBreakpointColumn()) { | ||
540 | + $table.trigger(trg.redraw); | ||
541 | + return; | ||
542 | + } //we only care about FooTables that have breakpoints | ||
543 | + | ||
544 | + var info = { | ||
545 | + 'width': $table.width(), //the table width | ||
546 | + 'viewportWidth': ft.getViewportWidth(), //the width of the viewport | ||
547 | + 'parentWidth': $table.parent().width() //the width of the parent | ||
548 | + }; | ||
549 | + | ||
550 | + info = ft.calculateWidth($table, info); | ||
551 | + | ||
552 | + var pinfo = $table.data('footable_info'); | ||
553 | + $table.data('footable_info', info); | ||
554 | + ft.raise(evt.resizing, { 'old': pinfo, 'info': info }); | ||
555 | + | ||
556 | + // This (if) statement is here purely to make sure events aren't raised twice as mobile safari seems to do | ||
557 | + if (!pinfo || (pinfo && pinfo.width && pinfo.width !== info.width)) { | ||
558 | + | ||
559 | + var current = null, breakpoint; | ||
560 | + for (var i = 0; i < ft.breakpoints.length; i++) { | ||
561 | + breakpoint = ft.breakpoints[i]; | ||
562 | + if (breakpoint && breakpoint.width && info.width <= breakpoint.width) { | ||
563 | + current = breakpoint; | ||
564 | + break; | ||
565 | + } | ||
566 | + } | ||
567 | + | ||
568 | + var breakpointName = (current === null ? 'default' : current['name']), | ||
569 | + hasBreakpointFired = ft.hasBreakpointColumn(breakpointName), | ||
570 | + previousBreakpoint = $table.data('breakpoint'); | ||
571 | + | ||
572 | + $table | ||
573 | + .data('breakpoint', breakpointName) | ||
574 | + .removeClass('default breakpoint').removeClass(ft.breakpointNames) | ||
575 | + .addClass(breakpointName + (hasBreakpointFired ? ' breakpoint' : '')); | ||
576 | + | ||
577 | + //only do something if the breakpoint has changed | ||
578 | + if (breakpointName !== previousBreakpoint) { | ||
579 | + //trigger a redraw | ||
580 | + $table.trigger(trg.redraw); | ||
581 | + //raise a breakpoint event | ||
582 | + ft.raise(evt.breakpoint, { 'breakpoint': breakpointName, 'info': info }); | ||
583 | + } | ||
584 | + } | ||
585 | + | ||
586 | + ft.raise(evt.resized, { 'old': pinfo, 'info': info }); | ||
587 | + }; | ||
588 | + | ||
589 | + ft.redraw = function () { | ||
590 | + //add the toggler to each row | ||
591 | + ft.addRowToggle(); | ||
592 | + | ||
593 | + //bind the toggle selector click events | ||
594 | + ft.bindToggleSelectors(); | ||
595 | + | ||
596 | + //set any cell classes defined for the columns | ||
597 | + ft.setColumnClasses(); | ||
598 | + | ||
599 | + var $table = $(ft.table), | ||
600 | + breakpointName = $table.data('breakpoint'), | ||
601 | + hasBreakpointFired = ft.hasBreakpointColumn(breakpointName); | ||
602 | + | ||
603 | + $table | ||
604 | + .find('> tbody > tr:not(.' + cls.detail + ')').data('detail_created', false).end() | ||
605 | + .find('> thead > tr:last-child > th') | ||
606 | + .each(function () { | ||
607 | + var data = ft.columns[$(this).index()], selector = '', first = true; | ||
608 | + $.each(data.matches, function (m, match) { | ||
609 | + if (!first) { | ||
610 | + selector += ', '; | ||
611 | + } | ||
612 | + var count = match + 1; | ||
613 | + selector += '> tbody > tr:not(.' + cls.detail + ') > td:nth-child(' + count + ')'; | ||
614 | + selector += ', > tfoot > tr:not(.' + cls.detail + ') > td:nth-child(' + count + ')'; | ||
615 | + selector += ', > colgroup > col:nth-child(' + count + ')'; | ||
616 | + first = false; | ||
617 | + }); | ||
618 | + | ||
619 | + selector += ', > thead > tr[data-group-row="true"] > th[data-group="' + data.group + '"]'; | ||
620 | + var $column = $table.find(selector).add(this); | ||
621 | + if (breakpointName !== '') { | ||
622 | + if (data.hide[breakpointName] === false) $column.addClass('footable-visible').show(); | ||
623 | + else $column.removeClass('footable-visible').hide(); | ||
624 | + } | ||
625 | + | ||
626 | + if ($table.find('> thead > tr.footable-group-row').length === 1) { | ||
627 | + var $groupcols = $table.find('> thead > tr:last-child > th[data-group="' + data.group + '"]:visible, > thead > tr:last-child > th[data-group="' + data.group + '"]:visible'), | ||
628 | + $group = $table.find('> thead > tr.footable-group-row > th[data-group="' + data.group + '"], > thead > tr.footable-group-row > td[data-group="' + data.group + '"]'), | ||
629 | + groupspan = 0; | ||
630 | + | ||
631 | + $.each($groupcols, function () { | ||
632 | + groupspan += parseInt($(this).attr('colspan') || 1, 10); | ||
633 | + }); | ||
634 | + | ||
635 | + if (groupspan > 0) $group.attr('colspan', groupspan).show(); | ||
636 | + else $group.hide(); | ||
637 | + } | ||
638 | + }) | ||
639 | + .end() | ||
640 | + .find('> tbody > tr.' + cls.detailShow).each(function () { | ||
641 | + ft.createOrUpdateDetailRow(this); | ||
642 | + }); | ||
643 | + | ||
644 | + $table.find("[data-bind-name]").each(function () { | ||
645 | + ft.toggleInput(this); | ||
646 | + }); | ||
647 | + | ||
648 | + $table.find('> tbody > tr.' + cls.detailShow + ':visible').each(function () { | ||
649 | + var $next = $(this).next(); | ||
650 | + if ($next.hasClass(cls.detail)) { | ||
651 | + if (!hasBreakpointFired) $next.hide(); | ||
652 | + else $next.show(); | ||
653 | + } | ||
654 | + }); | ||
655 | + | ||
656 | + // adding .footable-first-column and .footable-last-column to the first and last th and td of each row in order to allow | ||
657 | + // for styling if the first or last column is hidden (which won't work using :first-child or :last-child) | ||
658 | + $table.find('> thead > tr > th.footable-last-column, > tbody > tr > td.footable-last-column').removeClass('footable-last-column'); | ||
659 | + $table.find('> thead > tr > th.footable-first-column, > tbody > tr > td.footable-first-column').removeClass('footable-first-column'); | ||
660 | + $table.find('> thead > tr, > tbody > tr') | ||
661 | + .find('> th.footable-visible:last, > td.footable-visible:last') | ||
662 | + .addClass('footable-last-column') | ||
663 | + .end() | ||
664 | + .find('> th.footable-visible:first, > td.footable-visible:first') | ||
665 | + .addClass('footable-first-column'); | ||
666 | + | ||
667 | + ft.raise(evt.redrawn); | ||
668 | + }; | ||
669 | + | ||
670 | + ft.toggleDetail = function (row) { | ||
671 | + var $row = (row.jquery) ? row : $(row), | ||
672 | + $next = $row.next(); | ||
673 | + | ||
674 | + //check if the row is already expanded | ||
675 | + if ($row.hasClass(cls.detailShow)) { | ||
676 | + $row.removeClass(cls.detailShow); | ||
677 | + | ||
678 | + //only hide the next row if it's a detail row | ||
679 | + if ($next.hasClass(cls.detail)) $next.hide(); | ||
680 | + | ||
681 | + ft.raise(evt.rowCollapsed, { 'row': $row[0] }); | ||
682 | + | ||
683 | + } else { | ||
684 | + ft.createOrUpdateDetailRow($row[0]); | ||
685 | + $row.addClass(cls.detailShow) | ||
686 | + .next().show(); | ||
687 | + | ||
688 | + ft.raise(evt.rowExpanded, { 'row': $row[0] }); | ||
689 | + } | ||
690 | + }; | ||
691 | + | ||
692 | + ft.removeRow = function (row) { | ||
693 | + var $row = (row.jquery) ? row : $(row); | ||
694 | + if ($row.hasClass(cls.detail)) { | ||
695 | + $row = $row.prev(); | ||
696 | + } | ||
697 | + var $next = $row.next(); | ||
698 | + if ($row.data('detail_created') === true) { | ||
699 | + //remove the detail row | ||
700 | + $next.remove(); | ||
701 | + } | ||
702 | + $row.remove(); | ||
703 | + | ||
704 | + //raise event | ||
705 | + ft.raise(evt.rowRemoved); | ||
706 | + }; | ||
707 | + | ||
708 | + ft.appendRow = function (row) { | ||
709 | + var $row = (row.jquery) ? row : $(row); | ||
710 | + $(ft.table).find('tbody').append($row); | ||
711 | + | ||
712 | + //redraw the table | ||
713 | + ft.redraw(); | ||
714 | + }; | ||
715 | + | ||
716 | + ft.getColumnFromTdIndex = function (index) { | ||
717 | + /// <summary>Returns the correct column data for the supplied index taking into account colspans.</summary> | ||
718 | + /// <param name="index">The index to retrieve the column data for.</param> | ||
719 | + /// <returns type="json">A JSON object containing the column data for the supplied index.</returns> | ||
720 | + var result = null; | ||
721 | + for (var column in ft.columns) { | ||
722 | + if ($.inArray(index, ft.columns[column].matches) >= 0) { | ||
723 | + result = ft.columns[column]; | ||
724 | + break; | ||
725 | + } | ||
726 | + } | ||
727 | + return result; | ||
728 | + }; | ||
729 | + | ||
730 | + ft.createOrUpdateDetailRow = function (actualRow) { | ||
731 | + var $row = $(actualRow), $next = $row.next(), $detail, values = []; | ||
732 | + if ($row.data('detail_created') === true) return true; | ||
733 | + | ||
734 | + if ($row.is(':hidden')) return false; //if the row is hidden for some reason (perhaps filtered) then get out of here | ||
735 | + ft.raise(evt.rowDetailUpdating, { 'row': $row, 'detail': $next }); | ||
736 | + $row.find('> td:hidden').each(function () { | ||
737 | + var index = $(this).index(), column = ft.getColumnFromTdIndex(index), name = column.name; | ||
738 | + if (column.ignore === true) return true; | ||
739 | + | ||
740 | + if (index in column.names) name = column.names[index]; | ||
741 | + | ||
742 | + var bindName = $(this).attr("data-bind-name"); | ||
743 | + if (bindName != null && $(this).is(':empty')) { | ||
744 | + var bindValue = $('.' + cls.detailInnerValue + '[' + 'data-bind-value="' + bindName + '"]'); | ||
745 | + $(this).html($(bindValue).contents().detach()); | ||
746 | + } | ||
747 | + var display; | ||
748 | + if (column.isEditable !== false && (column.isEditable || $(this).find(":input").length > 0)) { | ||
749 | + if(bindName == null) { | ||
750 | + bindName = "bind-" + $.now() + "-" + index; | ||
751 | + $(this).attr("data-bind-name", bindName); | ||
752 | + } | ||
753 | + display = $(this).contents().detach(); | ||
754 | + } | ||
755 | + if (!display) display = $(this).contents().clone(true, true); | ||
756 | + values.push({ 'name': name, 'value': ft.parse(this, column), 'display': display, 'group': column.group, 'groupName': column.groupName, 'bindName': bindName }); | ||
757 | + return true; | ||
758 | + }); | ||
759 | + if (values.length === 0) return false; //return if we don't have any data to show | ||
760 | + var colspan = $row.find('> td:visible').length; | ||
761 | + var exists = $next.hasClass(cls.detail); | ||
762 | + if (!exists) { // Create | ||
763 | + $next = $('<tr class="' + cls.detail + '"><td class="' + cls.detailCell + '"><div class="' + cls.detailInner + '"></div></td></tr>'); | ||
764 | + $row.after($next); | ||
765 | + } | ||
766 | + $next.find('> td:first').attr('colspan', colspan); | ||
767 | + $detail = $next.find('.' + cls.detailInner).empty(); | ||
768 | + opt.createDetail($detail, values, opt.createGroupedDetail, opt.detailSeparator, cls); | ||
769 | + $row.data('detail_created', true); | ||
770 | + ft.raise(evt.rowDetailUpdated, { 'row': $row, 'detail': $next }); | ||
771 | + return !exists; | ||
772 | + }; | ||
773 | + | ||
774 | + ft.raise = function (eventName, args) { | ||
775 | + | ||
776 | + if (ft.options.debug === true && $.isFunction(ft.options.log)) ft.options.log(eventName, 'event'); | ||
777 | + | ||
778 | + args = args || { }; | ||
779 | + var def = { 'ft': ft }; | ||
780 | + $.extend(true, def, args); | ||
781 | + var e = $.Event(eventName, def); | ||
782 | + if (!e.ft) { | ||
783 | + $.extend(true, e, def); | ||
784 | + } //pre jQuery 1.6 which did not allow data to be passed to event object constructor | ||
785 | + $(ft.table).trigger(e); | ||
786 | + return e; | ||
787 | + }; | ||
788 | + | ||
789 | + //reset the state of FooTable | ||
790 | + ft.reset = function() { | ||
791 | + var $table = $(ft.table); | ||
792 | + $table.removeData('footable_info') | ||
793 | + .data('breakpoint', '') | ||
794 | + .removeClass(cls.loading) | ||
795 | + .removeClass(cls.loaded); | ||
796 | + | ||
797 | + $table.find(opt.toggleSelector).unbind(trg.toggleRow).unbind('click.footable'); | ||
798 | + | ||
799 | + $table.find('> tbody > tr').removeClass(cls.detailShow); | ||
800 | + | ||
801 | + $table.find('> tbody > tr.' + cls.detail).remove(); | ||
802 | + | ||
803 | + ft.raise(evt.reset); | ||
804 | + }; | ||
805 | + | ||
806 | + //Switch between row-detail and detail-show. | ||
807 | + ft.toggleInput = function (column) { | ||
808 | + var bindName = $(column).attr("data-bind-name"); | ||
809 | + if(bindName != null) { | ||
810 | + var bindValue = $('.' + cls.detailInnerValue + '[' + 'data-bind-value="' + bindName + '"]'); | ||
811 | + if(bindValue != null) { | ||
812 | + if($(column).is(":visible")) { | ||
813 | + if(!$(bindValue).is(':empty')) $(column).html($(bindValue).contents().detach()); | ||
814 | + } else if(!$(column).is(':empty')) { | ||
815 | + $(bindValue).html($(column).contents().detach()); | ||
816 | + } | ||
817 | + } | ||
818 | + } | ||
819 | + }; | ||
820 | + | ||
821 | + ft.init(); | ||
822 | + return ft; | ||
823 | + } | ||
824 | +})(jQuery, window); |
js/main.js
@@ -164,6 +164,8 @@ define(['handlebars', 'fastclick', 'handlebars_helpers'], function(Handlebars, F | @@ -164,6 +164,8 @@ define(['handlebars', 'fastclick', 'handlebars_helpers'], function(Handlebars, F | ||
164 | $(".timeago").timeago(); | 164 | $(".timeago").timeago(); |
165 | $resultsContainer.show(); | 165 | $resultsContainer.show(); |
166 | 166 | ||
167 | + $('.footable').footable(); | ||
168 | + | ||
167 | if(data.pagination.total > data.pagination.per_page) { | 169 | if(data.pagination.total > data.pagination.per_page) { |
168 | $resultsContainer.find('.paging').pagination({ | 170 | $resultsContainer.find('.paging').pagination({ |
169 | items: data.pagination.total, | 171 | items: data.pagination.total, |
js/requirejs-config.js
@@ -15,6 +15,7 @@ requirejs.config({ | @@ -15,6 +15,7 @@ requirejs.config({ | ||
15 | jquery_timeago: 'jquery.timeago', | 15 | jquery_timeago: 'jquery.timeago', |
16 | jquery_timeago_pt: 'jquery.timeago.pt-br', | 16 | jquery_timeago_pt: 'jquery.timeago.pt-br', |
17 | jquery_simplePagination: 'jquery.simplePagination', | 17 | jquery_simplePagination: 'jquery.simplePagination', |
18 | + jquery_simplePagination: 'footable', | ||
18 | handlebars: 'handlebars-v3.0.1', | 19 | handlebars: 'handlebars-v3.0.1', |
19 | handlebars_helpers: 'handlebars-helpers', | 20 | handlebars_helpers: 'handlebars-helpers', |
20 | jquery_maxlength: 'jquery.maxlength.min', | 21 | jquery_maxlength: 'jquery.maxlength.min', |
@@ -41,6 +42,9 @@ requirejs.config({ | @@ -41,6 +42,9 @@ requirejs.config({ | ||
41 | 'jquery_simplePagination': { | 42 | 'jquery_simplePagination': { |
42 | deps: ['jquery'] | 43 | deps: ['jquery'] |
43 | }, | 44 | }, |
45 | + 'footable': { | ||
46 | + deps: ['jquery'] | ||
47 | + }, | ||
44 | 'jquery_ui': { | 48 | 'jquery_ui': { |
45 | deps: ['jquery'] | 49 | deps: ['jquery'] |
46 | }, | 50 | }, |
@@ -66,5 +70,5 @@ requirejs.config({ | @@ -66,5 +70,5 @@ requirejs.config({ | ||
66 | } | 70 | } |
67 | }); | 71 | }); |
68 | 72 | ||
69 | -requirejs(['jquery', 'proposal_app', 'jquery_ui', 'jquery_xdomainrequest', 'jquery_timeago_pt', 'jquery_simplePagination', 'handlebars_helpers']); | 73 | +requirejs(['jquery', 'proposal_app', 'jquery_ui', 'jquery_xdomainrequest', 'jquery_timeago_pt', 'jquery_simplePagination', 'footable', 'handlebars_helpers']); |
70 | requirejs(['slick', 'fastclick', 'jquery_maxlength', 'layout','main']); | 74 | requirejs(['slick', 'fastclick', 'jquery_maxlength', 'layout','main']); |
sass/_proposal_detail.scss
@@ -283,7 +283,7 @@ | @@ -283,7 +283,7 @@ | ||
283 | } | 283 | } |
284 | td { | 284 | td { |
285 | background-color: #eeeff1; | 285 | background-color: #eeeff1; |
286 | - padding: 10px 20px; | 286 | + padding: 10px; |
287 | border: 1px solid #fff; | 287 | border: 1px solid #fff; |
288 | text-align: center; | 288 | text-align: center; |
289 | &.abstract-text { | 289 | &.abstract-text { |
@@ -388,7 +388,7 @@ | @@ -388,7 +388,7 @@ | ||
388 | .truncate { | 388 | .truncate { |
389 | display: table; | 389 | display: table; |
390 | table-layout: fixed; | 390 | table-layout: fixed; |
391 | - width: 100%; | 391 | + width: 90%; |
392 | } | 392 | } |
393 | .truncated { | 393 | .truncated { |
394 | overflow-x: hidden; | 394 | overflow-x: hidden; |
sass/style.scss
@@ -224,3 +224,72 @@ form { | @@ -224,3 +224,72 @@ form { | ||
224 | } | 224 | } |
225 | } | 225 | } |
226 | } | 226 | } |
227 | + | ||
228 | +.footable { | ||
229 | + &-loaded { | ||
230 | + td { | ||
231 | + font-weight: 500 !important; | ||
232 | + } | ||
233 | + } | ||
234 | + &-detail { | ||
235 | + &-show { | ||
236 | + td { | ||
237 | + background-color: #ddd !important; | ||
238 | + } | ||
239 | + } | ||
240 | + } | ||
241 | + &-row { | ||
242 | + &-detail { | ||
243 | + &-cell { | ||
244 | + border-top: 1px solid #ccc !important; | ||
245 | + padding: 0 !important; | ||
246 | + } | ||
247 | + &-inner { | ||
248 | + background-color: #ccc; | ||
249 | + display: block; | ||
250 | + padding: 10px; | ||
251 | + width: 100%; | ||
252 | + } | ||
253 | + &-row { | ||
254 | + display: inline-block; | ||
255 | + } | ||
256 | + &-row:nth-child(2) { | ||
257 | + div:nth-child(1) { | ||
258 | + background: url(images/icons/icon-afavor.png) no-repeat center top; | ||
259 | + text-indent: -99999px; | ||
260 | + } | ||
261 | + } | ||
262 | + &-row:nth-child(3) { | ||
263 | + div:nth-child(1) { | ||
264 | + background: url(images/icons/icon-contra.png) no-repeat center top; | ||
265 | + text-indent: -99999px; | ||
266 | + } | ||
267 | + } | ||
268 | + &-name { | ||
269 | + display: block; | ||
270 | + padding: 2px 15px; | ||
271 | + text-transform: uppercase; | ||
272 | + font-size: 16px; | ||
273 | + } | ||
274 | + &-value { | ||
275 | + display: block; | ||
276 | + } | ||
277 | + } | ||
278 | + } | ||
279 | + &.breakpoint { | ||
280 | + > tbody { | ||
281 | + > tr { | ||
282 | + > td { | ||
283 | + > span { | ||
284 | + &.footable-toggle { | ||
285 | + background-color: #ccc; | ||
286 | + float: right; | ||
287 | + margin: -10px; | ||
288 | + padding: 12px; | ||
289 | + } | ||
290 | + } | ||
291 | + } | ||
292 | + } | ||
293 | + } | ||
294 | + } | ||
295 | +} |