diff --git a/CHANGELOG.md b/CHANGELOG.md index b3c50af0..b19dfc2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,15 @@ #Changelog +* 1.5.0: + * Features + * Translation support, current languages are english and german + * Module infos are going to be loaded in the selected language too + * Adjusted parsing of ingame fits for changed made to the game + * Updated fit display library to a version that supports the ingame fit format changes too + * Fixes + * Some parts of the site not being readable on dark themes + * Roles not properly getting selected in config dialog + * Fixed sometimes displaying input for display name of waitlists when the user didn't have permission to change it + * Fixed missing space between multiple fleetmaners/fcs * 1.4.2: * Improvements * Community name is no longer hidden when menu collapses, also moved menu button to right side diff --git a/IncWLAwesome.json b/IncWLAwesome.json index bce1d0bf..5c19ccdf 100644 --- a/IncWLAwesome.json +++ b/IncWLAwesome.json @@ -1,597 +1,595 @@ { + "selection": [ + { + "name": "user-plus", + "order": 55, + "prevSize": 28 + }, + { + "name": "user-times", + "order": 56, + "prevSize": 28 + }, + { + "name": "address-book-o", + "order": 57, + "prevSize": 28 + }, + { + "order": 58, + "name": "rotate-left, undo", + "prevSize": 28 + }, + { + "order": 59, + "name": "list", + "prevSize": 28 + }, + { + "order": 60, + "name": "history", + "prevSize": 28 + }, + { + "order": 61, + "name": "search", + "prevSize": 28 + }, + { + "order": 62, + "name": "question-circle-o", + "prevSize": 28 + }, + { + "order": 63, + "name": "info-circle", + "prevSize": 28 + }, + { + "order": 64, + "name": "wrench", + "prevSize": 28 + }, + { + "name": "cog, gear", + "order": 65, + "prevSize": 28 + }, + { + "order": 66, + "name": "sign-out", + "prevSize": 28 + }, + { + "order": 67, + "name": "close, remove, times", + "prevSize": 28 + }, + { + "order": 68, + "name": "bell-o", + "prevSize": 28 + }, + { + "order": 69, + "prevSize": 28, + "name": "bell-slash-o" + }, + { + "order": 70, + "name": "thumbs-o-up", + "prevSize": 28 + }, + { + "order": 71, + "name": "angle-double-right", + "prevSize": 28 + }, + { + "order": 72, + "prevSize": 28, + "name": "angle-right" + }, + { + "order": 73, + "prevSize": 28, + "name": "angle-left" + }, + { + "order": 74, + "name": "angle-double-left", + "prevSize": 28 + }, + { + "order": 75, + "name": "bed, hotel", + "prevSize": 28 + }, + { + "order": 76, + "name": "trash", + "prevSize": 28 + }, + { + "order": 77, + "name": "minus-square", + "prevSize": 28 + }, + { + "order": 78, + "name": "comment", + "prevSize": 28 + }, + { + "order": 79, + "name": "calendar-o", + "prevSize": 28 + }, + { + "order": 80, + "name": "calendar2", + "prevSize": 28 + }, + { + "order": 81, + "name": "calendar", + "prevSize": 28 + }, + { + "order": 82, + "name": "plus-square", + "prevSize": 28 + }, + { + "order": 83, + "name": "plus", + "prevSize": 28 + }, + { + "order": 84, + "name": "arrow-down", + "prevSize": 28 + }, + { + "order": 85, + "name": "arrow-up", + "prevSize": 28 + }, + { + "order": 86, + "name": "chevron-right", + "prevSize": 28 + }, + { + "order": 87, + "name": "chevron-left", + "prevSize": 28 + }, + { + "order": 88, + "name": "clock-o", + "prevSize": 28 + }, + { + "order": 89, + "name": "check", + "prevSize": 28 + } + ], "metadata": { - "name": "IncWLAwesome", - "lastOpened": 1483192916387, - "created": 1483191539113 + "name": "wl-awesome", + "url": "https://github.com/FortAwesome/Font-Awesome", + "designer": "Dave Gandy", + "designerURL": "https://github.com/davegandy", + "license": "Custom", + "licenseURL": "https://github.com/FortAwesome/Font-Awesome#license", + "iconsHash": 1443555622, + "importSize": { + "width": 25, + "height": 28 + } }, - "iconSets": [ - { - "selection": [ - { - "order": 1, - "id": 22, - "name": "thumbs-o-up", - "prevSize": 28, - "code": 59653, - "tempChar": "" - }, - { - "order": 1, - "id": 21, - "name": "angle-double-right", - "prevSize": 28, - "code": 59669, - "tempChar": "" - }, - { - "order": 1, - "id": 20, - "prevSize": 28, - "code": 59667, - "name": "angle-right", - "tempChar": "" - }, - { - "order": 2, - "id": 19, - "prevSize": 28, - "code": 59668, - "name": "angle-left", - "tempChar": "" - }, - { - "order": 10, - "id": 18, - "name": "angle-double-left", - "prevSize": 28, - "code": 59648, - "tempChar": "" - }, - { - "order": 1, - "id": 17, - "name": "bed, hotel", - "prevSize": 28, - "code": 59649, - "tempChar": "" - }, - { - "order": 1, - "id": 16, - "name": "trash", - "prevSize": 28, - "code": 59650, - "tempChar": "" - }, - { - "order": 1, - "id": 15, - "name": "minus-square", - "prevSize": 28, - "code": 59651, - "tempChar": "" - }, - { - "order": 1, - "id": 14, - "name": "bell-o", - "prevSize": 28, - "code": 59652, - "tempChar": "" - }, - { - "order": 0, - "id": 13, - "name": "hand-o-right", - "prevSize": 28, - "code": 59653, - "tempChar": "" - }, - { - "order": 1, - "id": 12, - "name": "comment", - "prevSize": 28, - "code": 59654, - "tempChar": "" - }, - { - "order": 1, - "id": 11, - "name": "calendar-o", - "prevSize": 28, - "code": 59655, - "tempChar": "" - }, - { - "order": 2, - "id": 10, - "name": "calendar2", - "prevSize": 28, - "code": 59656, - "tempChar": "" - }, - { - "order": 1, - "id": 9, - "name": "calendar", - "prevSize": 28, - "code": 59657, - "tempChar": "" - }, - { - "order": 1, - "id": 8, - "name": "plus-square", - "prevSize": 28, - "code": 59658, - "tempChar": "" - }, - { - "order": 2, - "id": 7, - "name": "plus", - "prevSize": 28, - "code": 59659, - "tempChar": "" - }, - { - "order": 1, - "id": 6, - "name": "arrow-down", - "prevSize": 28, - "code": 59660, - "tempChar": "" - }, - { - "order": 3, - "id": 5, - "name": "arrow-up", - "prevSize": 28, - "code": 59661, - "tempChar": "" - }, - { - "order": 1, - "id": 4, - "name": "chevron-right", - "prevSize": 28, - "code": 59662, - "tempChar": "" - }, - { - "order": 2, - "id": 3, - "name": "chevron-left", - "prevSize": 28, - "code": 59663, - "tempChar": "" - }, - { - "order": 1, - "id": 2, - "name": "clock-o", - "prevSize": 28, - "code": 59664, - "tempChar": "" - }, - { - "order": 1, - "id": 1, - "name": "close, remove, times", - "prevSize": 28, - "code": 59665, - "tempChar": "" - }, - { - "order": 1, - "id": 0, - "name": "check", - "prevSize": 28, - "code": 59666, - "tempChar": "" - } - ], - "id": 0, - "metadata": { - "name": "Font Awesome (subset)", - "url": "https://github.com/FortAwesome/Font-Awesome", - "designer": "Dave Gandy", - "designerURL": "https://github.com/davegandy", - "license": "Custom", - "licenseURL": "https://github.com/FortAwesome/Font-Awesome#license", - "iconsHash": 309851062, - "importSize": { - "width": 24, - "height": 28 - } - }, - "height": 1024, - "prevSize": 28, - "icons": [ - { - "id": 22, - "paths": [ - "M146.286 768c0-20-16.571-36.571-36.571-36.571s-36.571 16.571-36.571 36.571 16.571 36.571 36.571 36.571 36.571-16.571 36.571-36.571zM804.571 438.857c0-38.857-34.857-73.143-73.143-73.143h-201.143c0-66.857 54.857-115.429 54.857-182.857 0-66.857-13.143-109.714-91.429-109.714-36.571 37.143-17.714 124.571-73.143 182.857-16 16.571-29.714 34.286-44 52-25.714 33.143-93.714 130.857-138.857 130.857h-18.286v365.714h18.286c32 0 84.571 20.571 115.429 31.429 62.857 21.714 128 41.714 195.429 41.714h69.143c64.571 0 109.714-25.714 109.714-95.429 0-10.857-1.143-21.714-2.857-32 24-13.143 37.143-45.714 37.143-72 0-13.714-3.429-27.429-10.286-39.429 19.429-18.286 30.286-41.143 30.286-68 0-18.286-8-45.143-20-58.857 26.857-0.571 42.857-52 42.857-73.143zM877.714 438.286c0 33.143-9.714 65.714-28 93.143 3.429 12.571 5.143 26.286 5.143 39.429 0 28.571-7.429 57.143-21.714 82.286 1.143 8 1.714 16.571 1.714 24.571 0 36.571-12 73.143-34.286 101.714 1.143 108-72.571 171.429-178.286 171.429h-73.714c-81.143 0-156.571-24-232-50.286-16.571-5.714-62.857-22.857-78.857-22.857h-164.571c-40.571 0-73.143-32.571-73.143-73.143v-365.714c0-40.571 32.571-73.143 73.143-73.143h156.571c22.286-14.857 61.143-66.286 78.286-88.571 19.429-25.143 39.429-49.714 61.143-73.143 34.286-36.571 16-126.857 73.143-182.857 13.714-13.143 32-21.143 51.429-21.143 59.429 0 116.571 21.143 144.571 76.571 17.714 34.857 20 68 20 106.286 0 40-10.286 74.286-27.429 109.714h100.571c78.857 0 146.286 66.857 146.286 145.714z" - ], - "attrs": [ - {} - ], - "width": 878, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "thumbs-o-up" - ], - "grid": 14 - }, - { - "id": 21, - "paths": [ - "M340 548.571c0 4.571-2.286 9.714-5.714 13.143l-266.286 266.286c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-28.571-28.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l224.571-224.571-224.571-224.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l28.571-28.571c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l266.286 266.286c3.429 3.429 5.714 8.571 5.714 13.143zM559.429 548.571c0 4.571-2.286 9.714-5.714 13.143l-266.286 266.286c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-28.571-28.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l224.571-224.571-224.571-224.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l28.571-28.571c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l266.286 266.286c3.429 3.429 5.714 8.571 5.714 13.143z" - ], - "attrs": [ - {} - ], - "width": 567, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "angle-double-right" - ], - "grid": 14 - }, - { - "id": 20, - "paths": [ - "M340 548.571c0 4.571-2.286 9.714-5.714 13.143l-266.286 266.286c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-28.571-28.571c-3.429-3.429-5.714-8-5.714-13.143 0-4.571 2.286-9.714 5.714-13.143l224.571-224.571-224.571-224.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l28.571-28.571c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l266.286 266.286c3.429 3.429 5.714 8.571 5.714 13.143z" - ], - "attrs": [ - {} - ], - "width": 347, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "angle-right" - ], - "grid": 14 - }, - { - "id": 19, - "paths": [ - "M358.286 310.857c0 4.571-2.286 9.714-5.714 13.143l-224.571 224.571 224.571 224.571c3.429 3.429 5.714 8.571 5.714 13.143s-2.286 9.714-5.714 13.143l-28.571 28.571c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-266.286-266.286c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l266.286-266.286c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l28.571 28.571c3.429 3.429 5.714 8 5.714 13.143z" - ], - "attrs": [ - {} - ], - "width": 384, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "angle-left" - ], - "grid": 14 - }, - { - "id": 18, - "paths": [ - "M358.286 786.286c0 4.571-2.286 9.714-5.714 13.143l-28.571 28.571c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-266.286-266.286c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l266.286-266.286c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l28.571 28.571c3.429 3.429 5.714 8.571 5.714 13.143s-2.286 9.714-5.714 13.143l-224.571 224.571 224.571 224.571c3.429 3.429 5.714 8.571 5.714 13.143zM577.714 786.286c0 4.571-2.286 9.714-5.714 13.143l-28.571 28.571c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-266.286-266.286c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l266.286-266.286c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l28.571 28.571c3.429 3.429 5.714 8.571 5.714 13.143s-2.286 9.714-5.714 13.143l-224.571 224.571 224.571 224.571c3.429 3.429 5.714 8.571 5.714 13.143z" - ], - "attrs": [ - {} - ], - "width": 603, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "angle-double-left" - ], - "grid": 14 - }, - { - "id": 17, - "paths": [ - "M146.286 585.143h987.429c20 0 36.571 16.571 36.571 36.571v256h-146.286v-146.286h-877.714v146.286h-146.286v-694.857c0-20 16.571-36.571 36.571-36.571h73.143c20 0 36.571 16.571 36.571 36.571v402.286zM475.429 402.286c0-80.571-65.714-146.286-146.286-146.286s-146.286 65.714-146.286 146.286 65.714 146.286 146.286 146.286 146.286-65.714 146.286-146.286zM1170.286 548.571v-36.571c0-121.143-98.286-219.429-219.429-219.429h-402.286c-20 0-36.571 16.571-36.571 36.571v219.429h658.286z" - ], - "attrs": [ - {} - ], - "width": 1170, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "bed", - "hotel" - ], - "grid": 14 - }, - { - "id": 16, - "paths": [ - "M292.571 786.286v-402.286c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v402.286c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM438.857 786.286v-402.286c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v402.286c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM585.143 786.286v-402.286c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v402.286c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM274.286 219.429h256l-27.429-66.857c-1.714-2.286-6.857-5.714-9.714-6.286h-181.143c-3.429 0.571-8 4-9.714 6.286zM804.571 237.714v36.571c0 10.286-8 18.286-18.286 18.286h-54.857v541.714c0 62.857-41.143 116.571-91.429 116.571h-475.429c-50.286 0-91.429-51.429-91.429-114.286v-544h-54.857c-10.286 0-18.286-8-18.286-18.286v-36.571c0-10.286 8-18.286 18.286-18.286h176.571l40-95.429c11.429-28 45.714-50.857 76-50.857h182.857c30.286 0 64.571 22.857 76 50.857l40 95.429h176.571c10.286 0 18.286 8 18.286 18.286z" - ], - "attrs": [ - {} - ], - "width": 805, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "trash" - ], - "grid": 14 - }, - { - "id": 15, - "paths": [ - "M731.429 548.571v-73.143c0-20-16.571-36.571-36.571-36.571h-512c-20 0-36.571 16.571-36.571 36.571v73.143c0 20 16.571 36.571 36.571 36.571h512c20 0 36.571-16.571 36.571-36.571zM877.714 237.714v548.571c0 90.857-73.714 164.571-164.571 164.571h-548.571c-90.857 0-164.571-73.714-164.571-164.571v-548.571c0-90.857 73.714-164.571 164.571-164.571h548.571c90.857 0 164.571 73.714 164.571 164.571z" - ], - "attrs": [ - {} - ], - "width": 878, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "minus-square" - ], - "grid": 14 - }, - { - "id": 14, - "paths": [ - "M521.143 969.143c0-5.143-4-9.143-9.143-9.143-45.143 0-82.286-37.143-82.286-82.286 0-5.143-4-9.143-9.143-9.143s-9.143 4-9.143 9.143c0 55.429 45.143 100.571 100.571 100.571 5.143 0 9.143-4 9.143-9.143zM140.571 804.571h742.857c-102.286-115.429-152-272-152-475.429 0-73.714-69.714-182.857-219.429-182.857s-219.429 109.143-219.429 182.857c0 203.429-49.714 360-152 475.429zM987.429 804.571c0 40-33.143 73.143-73.143 73.143h-256c0 80.571-65.714 146.286-146.286 146.286s-146.286-65.714-146.286-146.286h-256c-40 0-73.143-33.143-73.143-73.143 84.571-71.429 182.857-199.429 182.857-475.429 0-109.714 90.857-229.714 242.286-252-2.857-6.857-4.571-14.286-4.571-22.286 0-30.286 24.571-54.857 54.857-54.857s54.857 24.571 54.857 54.857c0 8-1.714 15.429-4.571 22.286 151.429 22.286 242.286 142.286 242.286 252 0 276 98.286 404 182.857 475.429z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "bell-o" - ], - "grid": 14 - }, - { - "id": 13, - "paths": [ - "M146.286 768c0-20-16.571-36.571-36.571-36.571s-36.571 16.571-36.571 36.571 16.571 36.571 36.571 36.571 36.571-16.571 36.571-36.571zM950.857 438.857c0-38.857-34.857-73.143-73.143-73.143h-329.143c0-36 54.857-73.143 54.857-146.286 0-54.857-42.857-73.143-91.429-73.143-16 0-45.143 66.286-51.429 79.429-6.857 12.571-13.714 25.143-21.143 37.143-18.857 30.286-40.571 56.571-64 82.857-36.571 41.714-77.143 93.143-137.714 93.143h-18.286v365.714h18.286c100 0 197.714 73.143 308.571 73.143 64 0 108-26.857 108-95.429 0-10.857-1.143-21.714-2.857-32 24-13.143 37.143-45.714 37.143-72 0-13.714-3.429-27.429-10.286-39.429 19.429-18.286 30.286-41.143 30.286-68 0-18.286-8-45.143-20-58.857h189.143c39.429 0 73.143-33.714 73.143-73.143zM1024 438.286c0 80-66.286 146.857-146.286 146.857h-96.571c-1.714 24-9.143 46.857-21.143 68 1.143 8 1.714 16.571 1.714 24.571 0 36.571-12 73.143-34.286 101.714 1.143 108-72.571 171.429-178.286 171.429-64 0-124.571-17.714-184-39.429-34.857-12.571-91.429-33.714-127.429-33.714h-164.571c-40.571 0-73.143-32.571-73.143-73.143v-365.714c0-40.571 32.571-73.143 73.143-73.143h164.571c27.429 0 66.286-49.143 82.857-68 20.571-23.429 40-46.857 57.143-73.714 33.143-53.143 57.714-150.857 134.286-150.857 90.857 0 164.571 49.714 164.571 146.286 0 25.143-4 49.714-12.571 73.143h213.714c78.857 0 146.286 66.857 146.286 145.714z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "hand-o-right" - ], - "grid": 14 - }, - { - "id": 12, - "paths": [ - "M1024 512c0 202.286-229.143 365.714-512 365.714-28 0-56-1.714-82.857-4.571-74.857 66.286-164 113.143-262.857 138.286-20.571 5.714-42.857 9.714-65.143 12.571-12.571 1.143-24.571-8-27.429-21.714v-0.571c-2.857-14.286 6.857-22.857 15.429-33.143 36-40.571 77.143-74.857 104-170.286-117.714-66.857-193.143-170.286-193.143-286.286 0-201.714 229.143-365.714 512-365.714s512 163.429 512 365.714z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "comment" - ], - "grid": 14 - }, - { - "id": 11, - "paths": [ - "M73.143 950.857h804.571v-585.143h-804.571v585.143zM292.571 256v-164.571c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v164.571c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM731.429 256v-164.571c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v164.571c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z" - ], - "attrs": [ - {} - ], - "width": 951, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "calendar-o" - ], - "grid": 14 - }, - { - "id": 10, - "paths": [ - "M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z" - ], - "attrs": [ - {} - ], - "width": 951, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "calendar" - ], - "grid": 14 - }, - { - "id": 9, - "paths": [ - "M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z" - ], - "attrs": [ - {} - ], - "width": 951, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "calendar" - ], - "grid": 14 - }, - { - "id": 8, - "paths": [ - "M731.429 548.571v-73.143c0-20-16.571-36.571-36.571-36.571h-182.857v-182.857c0-20-16.571-36.571-36.571-36.571h-73.143c-20 0-36.571 16.571-36.571 36.571v182.857h-182.857c-20 0-36.571 16.571-36.571 36.571v73.143c0 20 16.571 36.571 36.571 36.571h182.857v182.857c0 20 16.571 36.571 36.571 36.571h73.143c20 0 36.571-16.571 36.571-36.571v-182.857h182.857c20 0 36.571-16.571 36.571-36.571zM877.714 237.714v548.571c0 90.857-73.714 164.571-164.571 164.571h-548.571c-90.857 0-164.571-73.714-164.571-164.571v-548.571c0-90.857 73.714-164.571 164.571-164.571h548.571c90.857 0 164.571 73.714 164.571 164.571z" - ], - "attrs": [ - {} - ], - "width": 878, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "plus-square" - ], - "grid": 14 - }, - { - "id": 7, - "paths": [ - "M804.571 420.571v109.714c0 30.286-24.571 54.857-54.857 54.857h-237.714v237.714c0 30.286-24.571 54.857-54.857 54.857h-109.714c-30.286 0-54.857-24.571-54.857-54.857v-237.714h-237.714c-30.286 0-54.857-24.571-54.857-54.857v-109.714c0-30.286 24.571-54.857 54.857-54.857h237.714v-237.714c0-30.286 24.571-54.857 54.857-54.857h109.714c30.286 0 54.857 24.571 54.857 54.857v237.714h237.714c30.286 0 54.857 24.571 54.857 54.857z" - ], - "attrs": [ - {} - ], - "width": 805, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "plus" - ], - "grid": 14 - }, - { - "id": 6, - "paths": [ - "M920.571 475.429c0 19.429-8 38.286-21.143 51.429l-372 372.571c-13.714 13.143-32.571 21.143-52 21.143s-38.286-8-51.429-21.143l-372-372.571c-13.714-13.143-21.714-32-21.714-51.429s8-38.286 21.714-52l42.286-42.857c13.714-13.143 32.571-21.143 52-21.143s38.286 8 51.429 21.143l168 168v-402.286c0-40 33.143-73.143 73.143-73.143h73.143c40 0 73.143 33.143 73.143 73.143v402.286l168-168c13.143-13.143 32-21.143 51.429-21.143s38.286 8 52 21.143l42.857 42.857c13.143 13.714 21.143 32.571 21.143 52z" - ], - "attrs": [ - {} - ], - "width": 951, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "arrow-down" - ], - "grid": 14 - }, - { - "id": 5, - "paths": [ - "M920.571 554.857c0 19.429-8 37.714-21.143 51.429l-42.857 42.857c-13.714 13.714-32.571 21.714-52 21.714s-38.286-8-51.429-21.714l-168-167.429v402.286c0 41.143-34.286 66.857-73.143 66.857h-73.143c-38.857 0-73.143-25.714-73.143-66.857v-402.286l-168 167.429c-13.143 13.714-32 21.714-51.429 21.714s-38.286-8-51.429-21.714l-42.857-42.857c-13.714-13.714-21.714-32-21.714-51.429s8-38.286 21.714-52l372-372c13.143-13.714 32-21.143 51.429-21.143s38.286 7.429 52 21.143l372 372c13.143 13.714 21.143 32.571 21.143 52z" - ], - "attrs": [ - {} - ], - "width": 951, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "arrow-up" - ], - "grid": 14 - }, - { - "id": 4, - "paths": [ - "M632.571 501.143l-424 424c-14.286 14.286-37.143 14.286-51.429 0l-94.857-94.857c-14.286-14.286-14.286-37.143 0-51.429l303.429-303.429-303.429-303.429c-14.286-14.286-14.286-37.143 0-51.429l94.857-94.857c14.286-14.286 37.143-14.286 51.429 0l424 424c14.286 14.286 14.286 37.143 0 51.429z" - ], - "attrs": [ - {} - ], - "width": 695, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "chevron-right" - ], - "grid": 14 - }, - { - "id": 3, - "paths": [ - "M669.143 172l-303.429 303.429 303.429 303.429c14.286 14.286 14.286 37.143 0 51.429l-94.857 94.857c-14.286 14.286-37.143 14.286-51.429 0l-424-424c-14.286-14.286-14.286-37.143 0-51.429l424-424c14.286-14.286 37.143-14.286 51.429 0l94.857 94.857c14.286 14.286 14.286 37.143 0 51.429z" - ], - "attrs": [ - {} - ], - "width": 768, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "chevron-left" - ], - "grid": 14 - }, - { - "id": 2, - "paths": [ - "M512 310.857v256c0 10.286-8 18.286-18.286 18.286h-182.857c-10.286 0-18.286-8-18.286-18.286v-36.571c0-10.286 8-18.286 18.286-18.286h128v-201.143c0-10.286 8-18.286 18.286-18.286h36.571c10.286 0 18.286 8 18.286 18.286zM749.714 512c0-171.429-139.429-310.857-310.857-310.857s-310.857 139.429-310.857 310.857 139.429 310.857 310.857 310.857 310.857-139.429 310.857-310.857zM877.714 512c0 242.286-196.571 438.857-438.857 438.857s-438.857-196.571-438.857-438.857 196.571-438.857 438.857-438.857 438.857 196.571 438.857 438.857z" - ], - "attrs": [ - {} - ], - "width": 878, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "clock-o" - ], - "grid": 14 - }, - { - "id": 1, - "paths": [ - "M741.714 755.429c0 14.286-5.714 28.571-16 38.857l-77.714 77.714c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-16l-168-168-168 168c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-16l-77.714-77.714c-10.286-10.286-16-24.571-16-38.857s5.714-28.571 16-38.857l168-168-168-168c-10.286-10.286-16-24.571-16-38.857s5.714-28.571 16-38.857l77.714-77.714c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l168 168 168-168c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l77.714 77.714c10.286 10.286 16 24.571 16 38.857s-5.714 28.571-16 38.857l-168 168 168 168c10.286 10.286 16 24.571 16 38.857z" - ], - "attrs": [ - {} - ], - "width": 805, - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "close", - "remove", - "times" - ], - "grid": 14 - }, - { - "id": 0, - "paths": [ - "M954.857 323.429c0 14.286-5.714 28.571-16 38.857l-491.429 491.429c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-16l-284.571-284.571c-10.286-10.286-16-24.571-16-38.857s5.714-28.571 16-38.857l77.714-77.714c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l168 168.571 374.857-375.429c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l77.714 77.714c10.286 10.286 16 24.571 16 38.857z" - ], - "attrs": [ - {} - ], - "isMulticolor": false, - "isMulticolor2": false, - "tags": [ - "check" - ], - "grid": 14 - } - ], - "invisible": false, - "colorThemes": [] + "height": 1024, + "prevSize": 28, + "icons": [ + { + "paths": [ + "M402.286 512c-121.143 0-219.429-98.286-219.429-219.429s98.286-219.429 219.429-219.429 219.429 98.286 219.429 219.429-98.286 219.429-219.429 219.429zM950.857 585.143h201.143c9.714 0 18.286 8.571 18.286 18.286v109.714c0 9.714-8.571 18.286-18.286 18.286h-201.143v201.143c0 9.714-8.571 18.286-18.286 18.286h-109.714c-9.714 0-18.286-8.571-18.286-18.286v-201.143h-201.143c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h201.143v-201.143c0-9.714 8.571-18.286 18.286-18.286h109.714c9.714 0 18.286 8.571 18.286 18.286v201.143zM530.286 713.143c0 40 33.143 73.143 73.143 73.143h146.286v136c-28 20.571-63.429 28.571-97.714 28.571h-499.429c-91.429 0-152.571-54.857-152.571-148 0-129.143 30.286-327.429 197.714-327.429 9.143 0 15.429 4 22.286 9.714 56 42.857 110.286 69.714 182.286 69.714s126.286-26.857 182.286-69.714c6.857-5.714 13.143-9.714 22.286-9.714 48.571 0 91.429 18.286 124 54.857h-127.429c-40 0-73.143 33.143-73.143 73.143v109.714z" + ], + "width": 1170.2857142857142, + "tags": [ + "user-plus" + ], + "defaultCode": 62004, + "grid": 14 + }, + { + "paths": [ + "M402.286 512c-121.143 0-219.429-98.286-219.429-219.429s98.286-219.429 219.429-219.429 219.429 98.286 219.429 219.429-98.286 219.429-219.429 219.429zM1017.714 694.857l142.286 142.286c3.429 3.429 5.143 8 5.143 13.143 0 4.571-1.714 9.143-5.143 12.571l-77.714 77.714c-3.429 3.429-8 5.143-12.571 5.143-5.143 0-9.714-1.714-13.143-5.143l-142.286-142.286-142.286 142.286c-3.429 3.429-8 5.143-13.143 5.143-4.571 0-9.143-1.714-12.571-5.143l-77.714-77.714c-3.429-3.429-5.143-8-5.143-12.571 0-5.143 1.714-9.714 5.143-13.143l142.286-142.286-142.286-142.286c-3.429-3.429-5.143-8-5.143-13.143 0-4.571 1.714-9.143 5.143-12.571l77.714-77.714c3.429-3.429 8-5.143 12.571-5.143 5.143 0 9.714 1.714 13.143 5.143l142.286 142.286 142.286-142.286c3.429-3.429 8-5.143 13.143-5.143 4.571 0 9.143 1.714 12.571 5.143l77.714 77.714c3.429 3.429 5.143 8 5.143 12.571 0 5.143-1.714 9.714-5.143 13.143zM733.143 694.857l-103.429 103.429c-13.714 13.714-21.143 32.571-21.143 52 0 18.857 7.429 37.714 21.143 51.429l47.429 47.429c-8 1.143-16.571 1.714-25.143 1.714h-499.429c-91.429 0-152.571-54.857-152.571-148 0-129.143 30.286-327.429 197.714-327.429 9.143 0 15.429 4 22.286 9.714 54.857 43.429 110.857 69.714 182.286 69.714s127.429-26.286 182.286-69.714c6.857-5.714 13.143-9.714 22.286-9.714 10.857 0 21.714 1.143 32.571 3.429-18.857 18.286-30.857 33.143-30.857 60.571 0 19.429 7.429 38.286 21.143 52z" + ], + "width": 1165.165714285714, + "tags": [ + "user-times" + ], + "defaultCode": 62005, + "grid": 14 + }, + { + "paths": [ + "M587.429 368c0 81.714-66.857 148-148.571 148s-148.571-66.286-148.571-148c0-82.286 66.857-148.571 148.571-148.571s148.571 66.286 148.571 148.571zM560 493.714c109.143 0 126.286 129.714 126.286 213.714 0 48-30.286 97.143-82.857 97.143h-329.143c-52.571 0-82.857-49.143-82.857-97.143 0-80.571 17.143-213.714 123.429-213.714h2.857c37.714 22.286 76 49.714 121.143 49.714s83.429-27.429 121.143-49.714zM950.857 347.429c0 9.714-8.571 18.286-18.286 18.286h-54.857v73.143h54.857c9.714 0 18.286 8.571 18.286 18.286v109.714c0 9.714-8.571 18.286-18.286 18.286h-54.857v73.143h54.857c9.714 0 18.286 8.571 18.286 18.286v109.714c0 9.714-8.571 18.286-18.286 18.286h-54.857v128c0 50.286-41.143 91.429-91.429 91.429h-694.857c-50.286 0-91.429-41.143-91.429-91.429v-841.143c0-50.286 41.143-91.429 91.429-91.429h694.857c50.286 0 91.429 41.143 91.429 91.429v128h54.857c9.714 0 18.286 8.5711 18.286 18.286v109.714zM804.571 932.571v-841.143c0-9.714-8.571-18.286-18.286-18.286h-694.857c-9.714 0-18.286 8.571-18.286 18.286v841.143c0 9.714 8.571 18.286 18.286 18.286h694.857c9.714 0 18.286-8.571 18.286-18.286z" + ], + "width": 950.8571428571428, + "tags": [ + "address-book-o" + ], + "defaultCode": 62138, + "grid": 14 + }, + { + "paths": [ + "M877.714 512c0 241.714-197.143 438.857-438.857 438.857-130.857 0-254.286-57.714-337.714-158.286-5.714-7.429-5.143-18.286 1.143-24.571l78.286-78.857c4-3.429 9.143-5.143 14.286-5.143 5.143 0.571 10.286 2.857 13.143 6.857 56 72.571 140 113.714 230.857 113.714 161.143 0 292.571-131.429 292.571-292.571s-131.429-292.571-292.571-292.571c-74.857 0-145.714 28.571-198.857 78.286l78.286 78.857c10.857 10.286 13.714 26.286 8 39.429-5.714 13.714-18.857 22.857-33.714 22.857h-256c-20 0-36.571-16.571-36.571-36.571v-256c0-14.857 9.143-28 22.857-33.714 13.143-5.714 29.143-2.857 39.429 8l74.286 73.714c80.571-76 189.714-121.143 302.286-121.143 241.714 0 438.857 197.143 438.857 438.857z" + ], + "width": 878, + "tags": [ + "rotate-left", + "undo" + ], + "grid": 14, + "defaultCode": 59672 + }, + { + "paths": [ + "M146.286 749.714v109.714c0 9.714-8.571 18.286-18.286 18.286h-109.714c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h109.714c9.714 0 18.286 8.571 18.286 18.286zM146.286 530.286v109.714c0 9.714-8.571 18.286-18.286 18.286h-109.714c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h109.714c9.714 0 18.286 8.571 18.286 18.286zM146.286 310.857v109.714c0 9.714-8.571 18.286-18.286 18.286h-109.714c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h109.714c9.714 0 18.286 8.571 18.286 18.286zM1024 749.714v109.714c0 9.714-8.571 18.286-18.286 18.286h-768c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h768c9.714 0 18.286 8.571 18.286 18.286zM146.286 91.429v109.714c0 9.714-8.571 18.286-18.286 18.286h-109.714c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h109.714c9.714 0 18.286 8.571 18.286 18.286zM1024 530.286v109.714c0 9.714-8.571 18.286-18.286 18.286h-768c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h768c9.714 0 18.286 8.571 18.286 18.286zM1024 310.857v109.714c0 9.714-8.571 18.286-18.286 18.286h-768c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h768c9.714 0 18.286 8.571 18.286 18.286zM1024 91.429v109.714c0 9.714-8.571 18.286-18.286 18.286h-768c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h768c9.714 0 18.286 8.571 18.286 18.286z" + ], + "tags": [ + "list" + ], + "grid": 14, + "defaultCode": 59673 + }, + { + "paths": [ + "M877.714 512c0 241.714-197.143 438.857-438.857 438.857-130.857 0-254.286-57.714-337.714-158.286-5.714-7.429-5.143-18.286 1.143-24.571l78.286-78.857c4-3.429 9.143-5.143 14.286-5.143 5.143 0.571 10.286 2.857 13.143 6.857 56 72.571 140 113.714 230.857 113.714 161.143 0 292.571-131.429 292.571-292.571s-131.429-292.571-292.571-292.571c-74.857 0-145.714 28.571-198.857 78.286l78.286 78.857c10.857 10.286 13.714 26.286 8 39.429-5.714 13.714-18.857 22.857-33.714 22.857h-256c-20 0-36.571-16.571-36.571-36.571v-256c0-14.857 9.143-28 22.857-33.714 13.143-5.714 29.143-2.857 39.429 8l74.286 73.714c80.571-76 189.714-121.143 302.286-121.143 241.714 0 438.857 197.143 438.857 438.857zM512 347.429v256c0 10.286-8 18.286-18.286 18.286h-182.857c-10.286 0-18.286-8-18.286-18.286v-36.571c0-10.286 8-18.286 18.286-18.286h128v-201.143c0-10.286 8-18.286 18.286-18.286h36.571c10.286 0 18.286 8 18.286 18.286z" + ], + "width": 878, + "tags": [ + "history" + ], + "grid": 14, + "defaultCode": 59674 + }, + { + "paths": [ + "M658.286 475.429c0-141.143-114.857-256-256-256s-256 114.857-256 256 114.857 256 256 256 256-114.857 256-256zM950.857 950.857c0 40-33.143 73.143-73.143 73.143-19.429 0-38.286-8-51.429-21.714l-196-195.429c-66.857 46.286-146.857 70.857-228 70.857-222.286 0-402.286-180-402.286-402.286s180-402.286 402.286-402.286 402.286 180 402.286 402.286c0 81.143-24.571 161.143-70.857 228l196 196c13.143 13.143 21.143 32 21.143 51.429z" + ], + "width": 951, + "tags": [ + "search" + ], + "grid": 14, + "defaultCode": 59675 + }, + { + "paths": [ + "M502.857 685.714v91.429c0 10.286-8 18.286-18.286 18.286h-91.429c-10.286 0-18.286-8-18.286-18.286v-91.429c0-10.286 8-18.286 18.286-18.286h91.429c10.286 0 18.286 8 18.286 18.286zM649.143 402.286c0 81.143-56.571 113.143-98.286 136.571-29.714 17.143-48 28-48 46.286v18.286c0 10.286-8 18.286-18.286 18.286h-91.429c-10.286 0-18.286-8-18.286-18.286v-38.857c0-70.286 50.286-92.571 90.857-110.857 34.286-16 55.429-26.857 55.429-52.571 0-33.143-41.714-57.714-79.429-57.714-20 0-41.143 6.286-54.286 15.429-12.571 8.571-24.571 21.143-45.714 47.429-3.429 4.571-8.571 6.857-14.286 6.857-4 0-8-1.143-10.857-3.429l-61.714-46.857c-7.429-5.714-9.143-16.571-4-24.571 46.857-73.714 112.571-109.714 199.429-109.714v0c93.714 0 198.857 74.286 198.857 173.714zM438.857 146.286c-201.714 0-365.714 164-365.714 365.714s164 365.714 365.714 365.714 365.714-164 365.714-365.714-164-365.714-365.714-365.714zM877.714 512c0 242.286-196.571 438.857-438.857 438.857s-438.857-196.571-438.857-438.857 196.571-438.857 438.857-438.857v0c242.286 0 438.857 196.571 438.857 438.857z" + ], + "width": 878, + "tags": [ + "question-circle-o" + ], + "grid": 14, + "defaultCode": 59676 + }, + { + "paths": [ + "M585.143 786.286v-91.429c0-10.286-8-18.286-18.286-18.286h-54.857v-292.571c0-10.286-8-18.286-18.286-18.286h-182.857c-10.286 0-18.286 8-18.286 18.286v91.429c0 10.286 8 18.286 18.286 18.286h54.857v182.857h-54.857c-10.286 0-18.286 8-18.286 18.286v91.429c0 10.286 8 18.286 18.286 18.286h256c10.286 0 18.286-8 18.286-18.286zM512 274.286v-91.429c0-10.286-8-18.286-18.286-18.286h-109.714c-10.286 0-18.286 8-18.286 18.286v91.429c0 10.286 8 18.286 18.286 18.286h109.714c10.286 0 18.286-8 18.286-18.286zM877.714 512c0 242.286-196.571 438.857-438.857 438.857s-438.857-196.571-438.857-438.857 196.571-438.857 438.857-438.857 438.857 196.571 438.857 438.857z" + ], + "width": 878, + "tags": [ + "info-circle" + ], + "grid": 14, + "defaultCode": 59677 + }, + { + "paths": [ + "M219.429 841.143c0-20-16.571-36.571-36.571-36.571s-36.571 16.571-36.571 36.571 16.571 36.571 36.571 36.571 36.571-16.571 36.571-36.571zM587.429 601.143l-389.714 389.714c-13.143 13.143-32 21.143-51.429 21.143s-38.286-8-52-21.143l-60.571-61.714c-13.714-13.143-21.714-32-21.714-51.429s8-38.286 21.714-52l389.143-389.143c29.714 74.857 89.714 134.857 164.571 164.571zM949.714 352.571c0 18.857-6.857 42.286-13.143 60.571-36 101.714-133.714 172-241.714 172-141.143 0-256-114.857-256-256s114.857-256 256-256c41.714 0 96 12.571 130.857 36 5.714 4 9.143 9.143 9.143 16 0 6.286-4 12.571-9.143 16l-167.429 96.571v128l110.286 61.143c18.857-10.857 151.429-94.286 162.857-94.286s18.286 8.571 18.286 20z" + ], + "width": 962, + "tags": [ + "wrench" + ], + "grid": 14, + "defaultCode": 59678 + }, + { + "paths": [ + "M585.143 512c0-80.571-65.714-146.286-146.286-146.286s-146.286 65.714-146.286 146.286 65.714 146.286 146.286 146.286 146.286-65.714 146.286-146.286zM877.714 449.714v126.857c0 8.571-6.857 18.857-16 20.571l-105.714 16c-6.286 18.286-13.143 35.429-22.286 52 19.429 28 40 53.143 61.143 78.857 3.429 4 5.714 9.143 5.714 14.286s-1.714 9.143-5.143 13.143c-13.714 18.286-90.857 102.286-110.286 102.286-5.143 0-10.286-2.286-14.857-5.143l-78.857-61.714c-16.571 8.571-34.286 16-52 21.714-4 34.857-7.429 72-16.571 106.286-2.286 9.143-10.286 16-20.571 16h-126.857c-10.286 0-19.429-7.429-20.571-17.143l-16-105.143c-17.714-5.714-34.857-12.571-51.429-21.143l-80.571 61.143c-4 3.429-9.143 5.143-14.286 5.143s-10.286-2.286-14.286-6.286c-30.286-27.429-70.286-62.857-94.286-96-2.857-4-4-8.571-4-13.143 0-5.143 1.714-9.143 4.571-13.143 19.429-26.286 40.571-51.429 60-78.286-9.714-18.286-17.714-37.143-23.429-56.571l-104.571-15.429c-9.714-1.714-16.571-10.857-16.571-20.571v-126.857c0-8.571 6.857-18.857 15.429-20.571l106.286-16c5.714-18.286 13.143-35.429 22.286-52.571-19.429-27.429-40-53.143-61.143-78.857-3.429-4-5.714-8.571-5.714-13.714s2.286-9.143 5.143-13.143c13.714-18.857 90.857-102.286 110.286-102.286 5.143 0 10.286 2.286 14.857 5.714l78.857 61.143c16.571-8.571 34.286-16 52-21.714 4-34.857 7.429-72 16.571-106.286 2.286-9.143 10.286-16 20.571-16h126.857c10.286 0 19.429 7.429 20.571 17.143l16 105.143c17.714 5.714 34.857 12.571 51.429 21.143l81.143-61.143c3.429-3.429 8.571-5.143 13.714-5.143s10.286 2.286 14.286 5.714c30.286 28 70.286 63.429 94.286 97.143 2.857 3.429 4 8 4 12.571 0 5.143-1.714 9.143-4.571 13.143-19.429 26.286-40.571 51.429-60 78.286 9.714 18.286 17.714 37.143 23.429 56l104.571 16c9.714 1.714 16.571 10.857 16.571 20.571z" + ], + "width": 877.7142857142857, + "tags": [ + "cog", + "gear" + ], + "defaultCode": 61459, + "grid": 14 + }, + { + "paths": [ + "M365.714 822.857c0 16 7.429 54.857-18.286 54.857h-182.857c-90.857 0-164.571-73.714-164.571-164.571v-402.286c0-90.857 73.714-164.571 164.571-164.571h182.857c9.714 0 18.286 8.571 18.286 18.286 0 16 7.429 54.857-18.286 54.857h-182.857c-50.286 0-91.429 41.143-91.429 91.429v402.286c0 50.286 41.143 91.429 91.429 91.429h164.571c14.286 0 36.571-2.857 36.571 18.286zM896 512c0 9.714-4 18.857-10.857 25.714l-310.857 310.857c-6.857 6.857-16 10.857-25.714 10.857-20 0-36.571-16.571-36.571-36.571v-164.571h-256c-20 0-36.571-16.571-36.571-36.571v-219.429c0-20 16.571-36.571 36.571-36.571h256v-164.571c0-20 16.571-36.571 36.571-36.571 9.714 0 18.857 4 25.714 10.857l310.857 310.857c6.857 6.857 10.857 16 10.857 25.714z" + ], + "width": 896, + "tags": [ + "sign-out" + ], + "grid": 14, + "defaultCode": 59652 + }, + { + "paths": [ + "M741.714 755.429c0 14.286-5.714 28.571-16 38.857l-77.714 77.714c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-16l-168-168-168 168c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-16l-77.714-77.714c-10.286-10.286-16-24.571-16-38.857s5.714-28.571 16-38.857l168-168-168-168c-10.286-10.286-16-24.571-16-38.857s5.714-28.571 16-38.857l77.714-77.714c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l168 168 168-168c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l77.714 77.714c10.286 10.286 16 24.571 16 38.857s-5.714 28.571-16 38.857l-168 168 168 168c10.286 10.286 16 24.571 16 38.857z" + ], + "width": 805, + "tags": [ + "close", + "remove", + "times" + ], + "grid": 14, + "defaultCode": 59665 + }, + { + "paths": [ + "M521.143 969.143c0-5.143-4-9.143-9.143-9.143-45.143 0-82.286-37.143-82.286-82.286 0-5.143-4-9.143-9.143-9.143s-9.143 4-9.143 9.143c0 55.429 45.143 100.571 100.571 100.571 5.143 0 9.143-4 9.143-9.143zM140.571 804.571h742.857c-102.286-115.429-152-272-152-475.429 0-73.714-69.714-182.857-219.429-182.857s-219.429 109.143-219.429 182.857c0 203.429-49.714 360-152 475.429zM987.429 804.571c0 40-33.143 73.143-73.143 73.143h-256c0 80.571-65.714 146.286-146.286 146.286s-146.286-65.714-146.286-146.286h-256c-40 0-73.143-33.143-73.143-73.143 84.571-71.429 182.857-199.429 182.857-475.429 0-109.714 90.857-229.714 242.286-252-2.857-6.857-4.571-14.286-4.571-22.286 0-30.286 24.571-54.857 54.857-54.857s54.857 24.571 54.857 54.857c0 8-1.714 15.429-4.571 22.286 151.429 22.286 242.286 142.286 242.286 252 0 276 98.286 404 182.857 475.429z" + ], + "tags": [ + "bell-o" + ], + "grid": 14, + "defaultCode": 59670 + }, + { + "paths": [ + "M594.286 969.143c0-5.143-4-9.143-9.143-9.143-45.143 0-82.286-37.143-82.286-82.286 0-5.143-4-9.143-9.143-9.143s-9.143 4-9.143 9.143c0 55.429 45.143 100.571 100.571 100.571 5.143 0 9.143-4 9.143-9.143zM287.429 697.714l501.143-434.286c-28.571-60-94.857-117.143-203.429-117.143-149.714 0-219.429 109.143-219.429 182.857 0 146.286-25.714 268.571-78.286 368.571zM1060.571 804.571c0 40-33.143 73.143-73.143 73.143h-256c0 80.571-65.714 146.286-146.286 146.286s-145.714-65.143-146.286-145.714l85.143-73.714h432.571c-63.429-71.429-106.286-158.286-129.714-262.286l63.429-55.429c29.143 170.286 104 261.714 170.286 317.714zM1109.714 9.143l48 54.857c6.286 8 5.714 19.429-1.714 26.286l-1069.714 926.857c-7.429 6.286-19.429 5.714-25.714-2.286l-48-54.857c-6.286-8-5.714-19.429 1.714-25.714l106.286-92c-6.857-11.429-10.857-24-10.857-37.714 84.571-71.429 182.857-199.429 182.857-475.429 0-109.714 90.857-229.714 242.286-252-2.857-6.857-4.571-14.286-4.571-22.286 0-30.286 24.571-54.857 54.857-54.857s54.857 24.571 54.857 54.857c0 8-1.714 15.429-4.571 22.286 98.286 14.286 170.857 69.714 209.714 137.143l238.857-207.429c7.429-6.286 19.429-5.714 25.714 2.286z" + ], + "width": 1170, + "tags": [ + "bell-slash-o" + ], + "grid": 14, + "defaultCode": 59671 + }, + { + "paths": [ + "M146.286 768c0-20-16.571-36.571-36.571-36.571s-36.571 16.571-36.571 36.571 16.571 36.571 36.571 36.571 36.571-16.571 36.571-36.571zM804.571 438.857c0-38.857-34.857-73.143-73.143-73.143h-201.143c0-66.857 54.857-115.429 54.857-182.857 0-66.857-13.143-109.714-91.429-109.714-36.571 37.143-17.714 124.571-73.143 182.857-16 16.571-29.714 34.286-44 52-25.714 33.143-93.714 130.857-138.857 130.857h-18.286v365.714h18.286c32 0 84.571 20.571 115.429 31.429 62.857 21.714 128 41.714 195.429 41.714h69.143c64.571 0 109.714-25.714 109.714-95.429 0-10.857-1.143-21.714-2.857-32 24-13.143 37.143-45.714 37.143-72 0-13.714-3.429-27.429-10.286-39.429 19.429-18.286 30.286-41.143 30.286-68 0-18.286-8-45.143-20-58.857 26.857-0.571 42.857-52 42.857-73.143zM877.714 438.286c0 33.143-9.714 65.714-28 93.143 3.429 12.571 5.143 26.286 5.143 39.429 0 28.571-7.429 57.143-21.714 82.286 1.143 8 1.714 16.571 1.714 24.571 0 36.571-12 73.143-34.286 101.714 1.143 108-72.571 171.429-178.286 171.429h-73.714c-81.143 0-156.571-24-232-50.286-16.571-5.714-62.857-22.857-78.857-22.857h-164.571c-40.571 0-73.143-32.571-73.143-73.143v-365.714c0-40.571 32.571-73.143 73.143-73.143h156.571c22.286-14.857 61.143-66.286 78.286-88.571 19.429-25.143 39.429-49.714 61.143-73.143 34.286-36.571 16-126.857 73.143-182.857 13.714-13.143 32-21.143 51.429-21.143 59.429 0 116.571 21.143 144.571 76.571 17.714 34.857 20 68 20 106.286 0 40-10.286 74.286-27.429 109.714h100.571c78.857 0 146.286 66.857 146.286 145.714z" + ], + "width": 878, + "tags": [ + "thumbs-o-up" + ], + "grid": 14, + "defaultCode": 59653 + }, + { + "paths": [ + "M340 548.571c0 4.571-2.286 9.714-5.714 13.143l-266.286 266.286c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-28.571-28.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l224.571-224.571-224.571-224.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l28.571-28.571c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l266.286 266.286c3.429 3.429 5.714 8.571 5.714 13.143zM559.429 548.571c0 4.571-2.286 9.714-5.714 13.143l-266.286 266.286c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-28.571-28.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l224.571-224.571-224.571-224.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l28.571-28.571c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l266.286 266.286c3.429 3.429 5.714 8.571 5.714 13.143z" + ], + "width": 567, + "tags": [ + "angle-double-right" + ], + "grid": 14, + "defaultCode": 59669 + }, + { + "paths": [ + "M340 548.571c0 4.571-2.286 9.714-5.714 13.143l-266.286 266.286c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-28.571-28.571c-3.429-3.429-5.714-8-5.714-13.143 0-4.571 2.286-9.714 5.714-13.143l224.571-224.571-224.571-224.571c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l28.571-28.571c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l266.286 266.286c3.429 3.429 5.714 8.571 5.714 13.143z" + ], + "width": 347, + "tags": [ + "angle-right" + ], + "grid": 14, + "defaultCode": 59667 + }, + { + "paths": [ + "M358.286 310.857c0 4.571-2.286 9.714-5.714 13.143l-224.571 224.571 224.571 224.571c3.429 3.429 5.714 8.571 5.714 13.143s-2.286 9.714-5.714 13.143l-28.571 28.571c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-266.286-266.286c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l266.286-266.286c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l28.571 28.571c3.429 3.429 5.714 8 5.714 13.143z" + ], + "width": 384, + "tags": [ + "angle-left" + ], + "grid": 14, + "defaultCode": 59668 + }, + { + "paths": [ + "M358.286 786.286c0 4.571-2.286 9.714-5.714 13.143l-28.571 28.571c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-266.286-266.286c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l266.286-266.286c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l28.571 28.571c3.429 3.429 5.714 8.571 5.714 13.143s-2.286 9.714-5.714 13.143l-224.571 224.571 224.571 224.571c3.429 3.429 5.714 8.571 5.714 13.143zM577.714 786.286c0 4.571-2.286 9.714-5.714 13.143l-28.571 28.571c-3.429 3.429-8.571 5.714-13.143 5.714s-9.714-2.286-13.143-5.714l-266.286-266.286c-3.429-3.429-5.714-8.571-5.714-13.143s2.286-9.714 5.714-13.143l266.286-266.286c3.429-3.429 8.571-5.714 13.143-5.714s9.714 2.286 13.143 5.714l28.571 28.571c3.429 3.429 5.714 8.571 5.714 13.143s-2.286 9.714-5.714 13.143l-224.571 224.571 224.571 224.571c3.429 3.429 5.714 8.571 5.714 13.143z" + ], + "width": 603, + "tags": [ + "angle-double-left" + ], + "grid": 14, + "defaultCode": 59648 + }, + { + "paths": [ + "M146.286 585.143h987.429c20 0 36.571 16.571 36.571 36.571v256h-146.286v-146.286h-877.714v146.286h-146.286v-694.857c0-20 16.571-36.571 36.571-36.571h73.143c20 0 36.571 16.571 36.571 36.571v402.286zM475.429 402.286c0-80.571-65.714-146.286-146.286-146.286s-146.286 65.714-146.286 146.286 65.714 146.286 146.286 146.286 146.286-65.714 146.286-146.286zM1170.286 548.571v-36.571c0-121.143-98.286-219.429-219.429-219.429h-402.286c-20 0-36.571 16.571-36.571 36.571v219.429h658.286z" + ], + "width": 1170, + "tags": [ + "bed", + "hotel" + ], + "grid": 14, + "defaultCode": 59649 + }, + { + "paths": [ + "M292.571 786.286v-402.286c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v402.286c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM438.857 786.286v-402.286c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v402.286c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM585.143 786.286v-402.286c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v402.286c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM274.286 219.429h256l-27.429-66.857c-1.714-2.286-6.857-5.714-9.714-6.286h-181.143c-3.429 0.571-8 4-9.714 6.286zM804.571 237.714v36.571c0 10.286-8 18.286-18.286 18.286h-54.857v541.714c0 62.857-41.143 116.571-91.429 116.571h-475.429c-50.286 0-91.429-51.429-91.429-114.286v-544h-54.857c-10.286 0-18.286-8-18.286-18.286v-36.571c0-10.286 8-18.286 18.286-18.286h176.571l40-95.429c11.429-28 45.714-50.857 76-50.857h182.857c30.286 0 64.571 22.857 76 50.857l40 95.429h176.571c10.286 0 18.286 8 18.286 18.286z" + ], + "width": 805, + "tags": [ + "trash" + ], + "grid": 14, + "defaultCode": 59650 + }, + { + "paths": [ + "M731.429 548.571v-73.143c0-20-16.571-36.571-36.571-36.571h-512c-20 0-36.571 16.571-36.571 36.571v73.143c0 20 16.571 36.571 36.571 36.571h512c20 0 36.571-16.571 36.571-36.571zM877.714 237.714v548.571c0 90.857-73.714 164.571-164.571 164.571h-548.571c-90.857 0-164.571-73.714-164.571-164.571v-548.571c0-90.857 73.714-164.571 164.571-164.571h548.571c90.857 0 164.571 73.714 164.571 164.571z" + ], + "width": 878, + "tags": [ + "minus-square" + ], + "grid": 14, + "defaultCode": 59651 + }, + { + "paths": [ + "M1024 512c0 202.286-229.143 365.714-512 365.714-28 0-56-1.714-82.857-4.571-74.857 66.286-164 113.143-262.857 138.286-20.571 5.714-42.857 9.714-65.143 12.571-12.571 1.143-24.571-8-27.429-21.714v-0.571c-2.857-14.286 6.857-22.857 15.429-33.143 36-40.571 77.143-74.857 104-170.286-117.714-66.857-193.143-170.286-193.143-286.286 0-201.714 229.143-365.714 512-365.714s512 163.429 512 365.714z" + ], + "tags": [ + "comment" + ], + "grid": 14, + "defaultCode": 59654 + }, + { + "paths": [ + "M73.143 950.857h804.571v-585.143h-804.571v585.143zM292.571 256v-164.571c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v164.571c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM731.429 256v-164.571c0-10.286-8-18.286-18.286-18.286h-36.571c-10.286 0-18.286 8-18.286 18.286v164.571c0 10.286 8 18.286 18.286 18.286h36.571c10.286 0 18.286-8 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z" + ], + "width": 951, + "tags": [ + "calendar-o" + ], + "grid": 14, + "defaultCode": 59655 + }, + { + "paths": [ + "M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z" + ], + "width": 951, + "tags": [ + "calendar" + ], + "grid": 14, + "defaultCode": 59656 + }, + { + "paths": [ + "M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z" + ], + "width": 951, + "tags": [ + "calendar" + ], + "grid": 14, + "defaultCode": 59657 + }, + { + "paths": [ + "M731.429 548.571v-73.143c0-20-16.571-36.571-36.571-36.571h-182.857v-182.857c0-20-16.571-36.571-36.571-36.571h-73.143c-20 0-36.571 16.571-36.571 36.571v182.857h-182.857c-20 0-36.571 16.571-36.571 36.571v73.143c0 20 16.571 36.571 36.571 36.571h182.857v182.857c0 20 16.571 36.571 36.571 36.571h73.143c20 0 36.571-16.571 36.571-36.571v-182.857h182.857c20 0 36.571-16.571 36.571-36.571zM877.714 237.714v548.571c0 90.857-73.714 164.571-164.571 164.571h-548.571c-90.857 0-164.571-73.714-164.571-164.571v-548.571c0-90.857 73.714-164.571 164.571-164.571h548.571c90.857 0 164.571 73.714 164.571 164.571z" + ], + "width": 878, + "tags": [ + "plus-square" + ], + "grid": 14, + "defaultCode": 59658 + }, + { + "paths": [ + "M804.571 420.571v109.714c0 30.286-24.571 54.857-54.857 54.857h-237.714v237.714c0 30.286-24.571 54.857-54.857 54.857h-109.714c-30.286 0-54.857-24.571-54.857-54.857v-237.714h-237.714c-30.286 0-54.857-24.571-54.857-54.857v-109.714c0-30.286 24.571-54.857 54.857-54.857h237.714v-237.714c0-30.286 24.571-54.857 54.857-54.857h109.714c30.286 0 54.857 24.571 54.857 54.857v237.714h237.714c30.286 0 54.857 24.571 54.857 54.857z" + ], + "width": 805, + "tags": [ + "plus" + ], + "grid": 14, + "defaultCode": 59659 + }, + { + "paths": [ + "M920.571 475.429c0 19.429-8 38.286-21.143 51.429l-372 372.571c-13.714 13.143-32.571 21.143-52 21.143s-38.286-8-51.429-21.143l-372-372.571c-13.714-13.143-21.714-32-21.714-51.429s8-38.286 21.714-52l42.286-42.857c13.714-13.143 32.571-21.143 52-21.143s38.286 8 51.429 21.143l168 168v-402.286c0-40 33.143-73.143 73.143-73.143h73.143c40 0 73.143 33.143 73.143 73.143v402.286l168-168c13.143-13.143 32-21.143 51.429-21.143s38.286 8 52 21.143l42.857 42.857c13.143 13.714 21.143 32.571 21.143 52z" + ], + "width": 951, + "tags": [ + "arrow-down" + ], + "grid": 14, + "defaultCode": 59660 + }, + { + "paths": [ + "M920.571 554.857c0 19.429-8 37.714-21.143 51.429l-42.857 42.857c-13.714 13.714-32.571 21.714-52 21.714s-38.286-8-51.429-21.714l-168-167.429v402.286c0 41.143-34.286 66.857-73.143 66.857h-73.143c-38.857 0-73.143-25.714-73.143-66.857v-402.286l-168 167.429c-13.143 13.714-32 21.714-51.429 21.714s-38.286-8-51.429-21.714l-42.857-42.857c-13.714-13.714-21.714-32-21.714-51.429s8-38.286 21.714-52l372-372c13.143-13.714 32-21.143 51.429-21.143s38.286 7.429 52 21.143l372 372c13.143 13.714 21.143 32.571 21.143 52z" + ], + "width": 951, + "tags": [ + "arrow-up" + ], + "grid": 14, + "defaultCode": 59661 + }, + { + "paths": [ + "M632.571 501.143l-424 424c-14.286 14.286-37.143 14.286-51.429 0l-94.857-94.857c-14.286-14.286-14.286-37.143 0-51.429l303.429-303.429-303.429-303.429c-14.286-14.286-14.286-37.143 0-51.429l94.857-94.857c14.286-14.286 37.143-14.286 51.429 0l424 424c14.286 14.286 14.286 37.143 0 51.429z" + ], + "width": 695, + "tags": [ + "chevron-right" + ], + "grid": 14, + "defaultCode": 59662 + }, + { + "paths": [ + "M669.143 172l-303.429 303.429 303.429 303.429c14.286 14.286 14.286 37.143 0 51.429l-94.857 94.857c-14.286 14.286-37.143 14.286-51.429 0l-424-424c-14.286-14.286-14.286-37.143 0-51.429l424-424c14.286-14.286 37.143-14.286 51.429 0l94.857 94.857c14.286 14.286 14.286 37.143 0 51.429z" + ], + "width": 768, + "tags": [ + "chevron-left" + ], + "grid": 14, + "defaultCode": 59663 + }, + { + "paths": [ + "M512 310.857v256c0 10.286-8 18.286-18.286 18.286h-182.857c-10.286 0-18.286-8-18.286-18.286v-36.571c0-10.286 8-18.286 18.286-18.286h128v-201.143c0-10.286 8-18.286 18.286-18.286h36.571c10.286 0 18.286 8 18.286 18.286zM749.714 512c0-171.429-139.429-310.857-310.857-310.857s-310.857 139.429-310.857 310.857 139.429 310.857 310.857 310.857 310.857-139.429 310.857-310.857zM877.714 512c0 242.286-196.571 438.857-438.857 438.857s-438.857-196.571-438.857-438.857 196.571-438.857 438.857-438.857 438.857 196.571 438.857 438.857z" + ], + "width": 878, + "tags": [ + "clock-o" + ], + "grid": 14, + "defaultCode": 59664 + }, + { + "paths": [ + "M954.857 323.429c0 14.286-5.714 28.571-16 38.857l-491.429 491.429c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-16l-284.571-284.571c-10.286-10.286-16-24.571-16-38.857s5.714-28.571 16-38.857l77.714-77.714c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l168 168.571 374.857-375.429c10.286-10.286 24.571-16 38.857-16s28.571 5.714 38.857 16l77.714 77.714c10.286 10.286 16 24.571 16 38.857z" + ], + "tags": [ + "check" + ], + "grid": 14, + "defaultCode": 59666 } ], - "uid": -1, + "colorThemes": [], + "colorThemeIdx": 0, "preferences": { "showGlyphs": true, - "showCodes": true, "showQuickUse": true, "showQuickUse2": true, "showSVGs": true, "fontPref": { "prefix": "fa-", "metadata": { - "fontFamily": "fa-subset", + "fontFamily": "wl-awesome", "majorVersion": 1, "minorVersion": 0 }, @@ -601,12 +599,14 @@ "whitespace": 50 }, "embed": false, + "noie8": true, + "ie7": false, "showSelector": true, - "selector": "class", - "showMetrics": false, + "showMetrics": true, "showMetadata": true, "showVersion": true, - "classSelector": ".fa" + "selector": "", + "classSelector": ".icon" }, "imagePref": { "prefix": "icon-", @@ -615,12 +615,13 @@ "color": 0, "bgColor": 16777215, "classSelector": ".icon", - "height": 14, + "height": 32, "columns": 16, - "margin": 16, - "overrideSize": "" + "margin": 16 }, - "historySize": 100, + "historySize": 50, + "showCodes": true, "gridSize": 16 - } + }, + "IcoMoonType": "icon-set" } \ No newline at end of file diff --git a/README.md b/README.md index 8fcf800a..fea83529 100644 --- a/README.md +++ b/README.md @@ -28,14 +28,15 @@ Enter the character name of your main character as account name, then enter the When asked for more characters just press enter without entering anything. Further admin accounts can be created over the account management on the website 12. create a folder called `sde` in the waitlists base dir (this is where sde data uploads are saved) -13. Start the waitlist with `python main.py` and visit it to login with the character that was setup as adming in the previous step. -14. Now configure groups and permissions :) -15. Import needed static data! You can find the interface for it under `Setting`->`Static Data Import`. +13. Use the command `pybabel compile -d translations` to compile the translation files. +14. Start the waitlist with `python main.py` and visit it to login with the character that was setup as adming in the previous step. +15. Now configure groups and permissions :) +16. Import needed static data! You can find the interface for it under `Setting`->`Static Data Import`. The Eve Static Date Export can be found at [Eve Resources](https://developers.eveonline.com/resource/resources). Mandatory are: typeIDs.yaml, staStations.yaml and updating systems and constellations! The systems and constellations are updated via esi and can take quite a while. Updating systems and constellations can fail quietly, so check the error log afterwards. -16. If you write any improvements committing code back to this project is very much appreciated! +17. If you write any improvements committing code back to this project is very much appreciated! # SSO Callback You need to create an application on the [CCP 3rd Party Developer Page](https://developers.eveonline.com/applications). @@ -71,7 +72,7 @@ Please edit the tex only and not the html! HTML modifications will not be accept # Upgrading ## Special Version Upgrades -Pre 1.2.0: +*Pre 1.2.0*: Prior to this version only MySQL(and MariaDB) where supported, because of this the needed migration script only supports these databases but should be easily adjustable for others. If you are upgrading from a version prior to 1.2.0 you need to upgrade you database up to 1.1.4 using the normal migration manager method. @@ -86,6 +87,11 @@ I am just trying to drop them in case some one created them manually for some re After this you can download the current version and use the migration manager again. +*1.5.0*: +Translations where added, this means there is a new setup and upgrade step! + ## Normal Upgrades run `python manager.py db upgrade` and make sure new options added to `config.cfg` are present in your config file. +Some version add new dependencys so you should run `pip install -r requirements.txt` too. +Run `pybabel compile -d translations` to compile translations! diff --git a/babel.cfg b/babel.cfg new file mode 100644 index 00000000..8b11a46b --- /dev/null +++ b/babel.cfg @@ -0,0 +1,4 @@ +[python: waitlist/**.py] +[jinja2: templates/**.html] +extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension +silent=false \ No newline at end of file diff --git a/compile.bat b/compile.bat new file mode 100644 index 00000000..e5a429b0 --- /dev/null +++ b/compile.bat @@ -0,0 +1 @@ +pybabel compile -d translations\ diff --git a/config/logger.base.json b/config/logger.base.json new file mode 100644 index 00000000..0d02a51e --- /dev/null +++ b/config/logger.base.json @@ -0,0 +1,72 @@ +{ + "version": 1, + "formatters": { + "main": { + "format": "%(asctime)s - %(name)s - %(levelname)s - %(funcName)s - %(lineno)d - %(message)s" + } + }, + "handlers": { + "error": { + "class": "logging.handlers.TimedRotatingFileHandler", + "filename": "/var/log/pywaitlist/error.log", + "formatter": "main", + "level": "ERROR", + "when": "midnight", + "interval":1, + "utc": true + }, + "info": { + "class": "logging.handlers.TimedRotatingFileHandler", + "filename": "/var/log/pywaitlist/info.log", + "formatter": "main", + "level": "INFO", + "filters": ["info_and_warning"], + "when": "midnight", + "interval":1, + "utc": true + }, + "debug": { + "class": "logging.handlers.TimedRotatingFileHandler", + "filename": "/var/log/pywaitlist/debug.log", + "formatter": "main", + "level": "DEBUG", + "filters": ["only_debug"], + "when": "midnight", + "interval":1, + "utc": true + } + }, + "filters": { + "only_debug": { + "()": "waitlist.utility.logging.LogDedicatedLevelFilter", + "levels": ["DEBUG"] + }, + "info_and_warning": { + "()": "waitlist.utility.logging.LogDedicatedLevelFilter", + "levels": ["INFO", "WARNING"] + } + }, + "loggers": { + "waitlist": { + "level": "ERROR", + "filters": [], + "handlers": ["error", "info", "debug"] + }, + "esipy": { + "level": "WARNING", + "handlers": ["error", "info", "debug"] + }, + "flask": { + "level": "ERROR", + "handlers": ["error", "info", "debug"] + }, + "flask.app": { + "level": "INFO", + "handlers": ["error", "info", "debug"] + }, + "gevent.pywsgi.WSGIServer": { + "handlers": ["error", "info", "debug"], + "level": "WARNING" + } + } +} \ No newline at end of file diff --git a/config/menu.base.cfg b/config/menu.base.cfg new file mode 100644 index 00000000..89fe63dd --- /dev/null +++ b/config/menu.base.cfg @@ -0,0 +1,192 @@ +[menu::menu::0] +# where should this menu be added to +# nav-main is a pre defined nav +# that gets rendered as the main menu +target_id = nav-main +# only required item are target_id and identity +identity = menu-left +classes = justify-content-start mr-auto +order = 0 +# perms = commandcore +# this sets to only show if the user is loggedin (e.g. logout button) +# this can be on all items +# need_authenticated = True + +[menu::menu::1] +# where should this menu be added to +target_id = nav-main +# only required items are target_id and identity +identity = menu-right +classes = justify-content-end +# higher order means later in the html +order = 1 +# perms = commandcore|view_feedback + +[menu::menuitem::0] +# where should this item be added to +# we use the menu we defined above with id menu-left +target_id = menu-left +# text to use for the menu item +title = Help +# send title through translation +use_gettext = True +# extra css classes to add to them menu item +# classes = +# url for the menu item, can be view identifier +# if you set url_for to True +url = site_help +# set that url_for should be used on the url +url_for = True +# if this is set a with the given css classes +# will be added infront of the title +iconclass = fa-question-circle-o +# higher number means later in html +order = 900 +# perms = perm1|perm2 +# user your own jinja2 template code inside the
  • nav item +# when rendered gets the menu item as 'item' +# customtemplate = + +[menu::ddmenu::0] +target_id = menu-left +identity = tools +title = Tools +use_gettext = True +# these classes get added to the nav-item
  • +# classes = +iconclass = fa-wrench +order = 2 +# perms = +# html rendered from the customtemplate only replaces the inner part of the
  • +# so the part that is displayed in the bar +# this item is accessible as 'menu' in the template +# customtemplate = +# what tag do use for the display part item, default is 'a' +# nodetag = 'a' +# additional css classes to add to the dropdown element, default '' +dropclasses = +# additional css classes to add to the dropdown element, default 'nav-link' +triggerclasses = nav-link + +[menu::ddmenu::1] +target_id = menu-right +identity = dd-settings +classes = ml-3 +triggerclasses = btn btn-primary btn-sm +dropclasses = dropdown-menu-right +nodetag = button +# any % must be escaped by an other % +# so jinja2 syntax ist {% if ... %} +# but we need {%% if ... %%} +# because % is the interpolation trigger +customtemplate = {%% if current_user.is_authenticated and current_user.get_eve_id() is not none %%} {%% else %%} {{ _('Not loggedin') }} {%% endif %%} + +[menu::dditem::0] +target_id = dd-settings +title = Logout +use_gettext = True +url = logout +url_for = True +iconclass = fa-sign-out +order = 9998 +need_authenticated = True + +[menu::dditem::1] +target_id = dd-settings +title = About +use_gettext = True +url = about +url_for = True +iconclass = fa-info-circle +order = 9999 + +[menu::dditem::2] +target_id = tools +title = Command Core List +use_gettext = True +url = accounts_cc.accounts +url_for = True +iconclass = fa-list +order = 4 +perms = commandcore + +[menu::dddivider::0] +target_id = tools +order = 5 +perms = commandcore|comphistory_search + +[menu::dditem::3] +target_id = tools +title = Comp History Search +use_gettext = True +url = comp_history_search.index +url_for = True +iconclass = fa-search +order = 6 +perms = commandcore|comphistory_search + + +[menu::dditem::4] +target_id = tools +title = Custom Notifications +use_gettext = True, +url = notification.alarm_idx +url_for = True +order = 0 +iconclass = fa-bell-o + +[menu::dddivider::1] +target_id = tools +order = 1 +perms = commandcore + +[menu::dditem::5] +target_id = dd-settings +title = Settings +use_gettext = True +url = settings_overview.overview +url_for = True +perms = settings_access +iconclass = fa-cog +order = 0 + +[menu::menuitem::1] +target_id = menu-left +title = X-UP +use_gettext = True +classes = bg-success +url = xup.index +url_for = True +iconclasses = fa-user-plus +order = 0 + +[menu::dditem::6] +target_id = tools +title = Comp History +use_gettext = True +url = fittings.history_default +url_for = True +iconclass = fa-history +order = 2 +perms = commandcore|comphistory_view + +[menu::dditem::7] +target_id = tools +title = Reform +use_gettext = True +url = fleet_reform.index +url_for = True +iconclass = fa-undo +order = 3 +perms = commandcore|fleet_management + +# this is the language select +# it needs to have id=lang-select for the js to work +[menu::menuitem::2] +target_id = menu-right +order = 0 +customtemplate = +need_authenticated = True \ No newline at end of file diff --git a/extract.bat b/extract.bat new file mode 100644 index 00000000..443ac269 --- /dev/null +++ b/extract.bat @@ -0,0 +1 @@ +pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot . diff --git a/main.py b/main.py index 084230ca..8ca13179 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,24 @@ import gevent_patch_helper -import logging +import logging.config +import os +import json + +# setup logging +logger_config = os.path.join('.', 'config', 'logger.base.json') +if os.path.isfile(logger_config): + with open(logger_config, 'r') as fp: + cfg = json.load(fp) + logging.config.dictConfig(cfg) + +logger_config = os.path.join('.', 'config', 'logger.user.json') +if os.path.isfile(logger_config): + with open(logger_config, 'r') as fp: + cfg = json.load(fp) + logging.config.dictConfig(cfg) + from werkzeug.contrib.fixers import ProxyFix -from logging.handlers import TimedRotatingFileHandler from gevent.pywsgi import WSGIServer + from waitlist.blueprints.fittings import bp_waitlist from waitlist.blueprints.fc_sso import bp as fc_sso_bp from waitlist.blueprints.fleet import bp as fleet_bp @@ -45,7 +61,6 @@ # load base app routes from waitlist.blueprints import * - app.register_blueprint(bp_waitlist) app.register_blueprint(feedback.feedback, url_prefix="/feedback") app.register_blueprint(fc_sso_bp, url_prefix="/fc_sso") @@ -91,59 +106,16 @@ logger = logging.getLogger(__name__) -err_fh = None -info_fh = None -debug_fh = None - - -class LogDedicatedLevelFilter(object): - def __init__(self, level): - self.__level = level - - def filter(self, log_record): - return log_record.levelno == self.__level - def run_server(): - wsgi_logger = logging.getLogger("gevent.pywsgi.WSGIServer") - wsgi_logger.addHandler(err_fh) - wsgi_logger.addHandler(info_fh) - wsgi_logger.addHandler(debug_fh) - wsgi_logger.setLevel(logging.INFO) app.wsgi_app = ProxyFix(app.wsgi_app) - server = WSGIServer((config.server_bind, config.server_port), app, log=wsgi_logger, error_log=wsgi_logger) + wsgi_logger = logging.getLogger("gevent.pywsgi.WSGIServer") + server = WSGIServer((config.server_bind, config.server_port), app, + log=wsgi_logger, error_log=wsgi_logger) server.serve_forever() if __name__ == '__main__': - err_fh = TimedRotatingFileHandler(filename=config.error_log, when="midnight", interval=1, utc=True) - info_fh = TimedRotatingFileHandler(filename=config.info_log, when="midnight", interval=1, utc=True) - debug_fh = TimedRotatingFileHandler(filename=config.debug_log, when="midnight", interval=1, utc=True) - - formatter = logging\ - .Formatter('%(asctime)s - %(name)s - %(levelname)s - %(pathname)s - %(funcName)s - %(lineno)d - %(message)s') - err_fh.setFormatter(formatter) - info_fh.setFormatter(formatter) - debug_fh.setFormatter(formatter) - - info_fh.setLevel(logging.INFO) - err_fh.setLevel(logging.ERROR) - debug_fh.setLevel(logging.DEBUG) - - info_fh.addFilter(LogDedicatedLevelFilter(logging.INFO)) - debug_fh.addFilter(LogDedicatedLevelFilter(logging.DEBUG)) - - waitlistlogger = logging.getLogger("waitlist") - waitlistlogger.addHandler(err_fh) - waitlistlogger.addHandler(info_fh) - waitlistlogger.addHandler(debug_fh) - waitlistlogger.setLevel(logging.INFO) - - app.logger.addHandler(err_fh) - app.logger.addHandler(info_fh) - app.logger.addHandler(debug_fh) - app.logger.setLevel(logging.INFO) - # app.run(host="0.0.0.0", port=81, debug=True) # connect account signal handler diff --git a/migrations/versions/8ec8c7bb9459_.py b/migrations/versions/8ec8c7bb9459_.py new file mode 100644 index 00000000..cbb25e78 --- /dev/null +++ b/migrations/versions/8ec8c7bb9459_.py @@ -0,0 +1,34 @@ +"""empty message + +Revision ID: 8ec8c7bb9459 +Revises: 9ab201421111 +Create Date: 2018-09-10 17:52:00.595675 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '8ec8c7bb9459' +down_revision = '9ab201421111' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('dogma_effect', + sa.Column('type_id', sa.Integer(), autoincrement=False, nullable=False), + sa.Column('effect_id', sa.Integer(), autoincrement=False, nullable=False), + sa.Column('is_default', sa.Boolean(name='is_default'), nullable=True), + sa.ForeignKeyConstraint(['type_id'], ['invtypes.type_id'], name=op.f('fk_dogma_effect_type_id_invtypes'), ondelete='CASCADE'), + sa.PrimaryKeyConstraint('type_id', 'effect_id', name=op.f('pk_dogma_effect')) + ) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('dogma_effect') + # ### end Alembic commands ### diff --git a/migrations/versions/9ab201421111_.py b/migrations/versions/9ab201421111_.py new file mode 100644 index 00000000..2db78d88 --- /dev/null +++ b/migrations/versions/9ab201421111_.py @@ -0,0 +1,83 @@ +"""empty message + +Revision ID: 9ab201421111 +Revises: c2b7b284ed6f +Create Date: 2018-09-08 13:40:35.106054 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '9ab201421111' +down_revision = 'c2b7b284ed6f' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + + op.drop_constraint(op.f('fk_fit_module_fit_id_fittings'), 'fit_module', type_='foreignkey') + op.drop_constraint(op.f('fk_fit_module_module_id_invtypes'), 'fit_module', type_='foreignkey') + op.drop_constraint(op.f('pk_fit_module'), 'fit_module', type_='primary') + op.add_column('fit_module', sa.Column('location_flag', sa.Integer(), nullable=False, server_default=sa.text('1000'))) + + # remove auto increment from invtypes table + # drop all remaining foreign keys towards the invtypes.type_id column + op.drop_constraint(op.f('fk_fittings_ship_type_invtypes'), 'fittings', type_='foreignkey') + # now we can fix the id column (remove the auto increment) + op.alter_column('invtypes', 'type_id', autoincrement=False, existing_type=sa.Integer, existing_nullable=False) + op.create_foreign_key(op.f('fk_fittings_ship_type_invtypes'), 'fittings', 'invtypes', ['ship_type'], ['type_id'], onupdate='CASCADE') + # done removing autoincrement from invtypes table + + # readd keys we removed to change the primary key of fit_module + op.create_primary_key(op.f('pk_fit_module'), 'fit_module', + ['fit_id', 'module_id', 'location_flag']) + op.create_foreign_key(op.f('fk_fit_module_fit_id_fittings'), 'fit_module', 'fittings', ['fit_id'], ['id']) + op.create_foreign_key(op.f('fk_fit_module_module_id_invtypes'), 'fit_module', 'invtypes', ['module_id'], ['type_id'], onupdate='CASCADE') + + op.create_table('invcategory', + sa.Column('category_id', sa.Integer(), nullable=False, autoincrement=False), + sa.Column('category_name', sa.String(length=255), nullable=True), + sa.Column('published', sa.Boolean(name='is_published'), nullable=True), + sa.PrimaryKeyConstraint('category_id', name=op.f('pk_invcategory')) + ) + op.create_table('dogma_attributes', + sa.Column('type_id', sa.Integer(), nullable=False, autoincrement=False), + sa.Column('attribute_id', sa.Integer(), nullable=False), + sa.Column('value', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['type_id'], ['invtypes.type_id'], name=op.f('fk_dogma_attributes_type_id_invtypes'), ondelete='CASCADE'), + sa.PrimaryKeyConstraint('type_id', 'attribute_id', name=op.f('pk_dogma_attributes')) + ) + op.create_table('invgroup', + sa.Column('group_id', sa.Integer(), nullable=False, autoincrement=False), + sa.Column('group_name', sa.String(length=255), nullable=True), + sa.Column('published', sa.Boolean(name='is_published'), nullable=True), + sa.Column('category_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['category_id'], ['invcategory.category_id'], name=op.f('fk_invgroup_category_id_invcategory'), ondelete='CASCADE'), + sa.PrimaryKeyConstraint('group_id', name=op.f('pk_invgroup')) + ) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + # we don't need to reverse the removal of the autoincrement since it is better for older versions too + op.drop_constraint(op.f('fk_fit_module_fit_id_fittings'), 'fit_module', type_='foreignkey') + op.drop_constraint(op.f('fk_fit_module_module_id_invtypes'), 'fit_module', type_='foreignkey') + op.drop_constraint(op.f('pk_fit_module'), 'fit_module', type_='primary') + + op.drop_column('fit_module', 'location_flag') + + op.create_primary_key(op.f('pk_fit_module'), 'fit_module', + ['fit_id', 'module_id']) + op.create_foreign_key(op.f('fk_fit_module_fit_id_fittings'), 'fit_module', 'fittings', ['fit_id'], ['id']) + op.create_foreign_key(op.f('fk_fit_module_module_id_invtypes'), 'fit_module', 'invtypes', ['module_id'], ['type_id']) + + op.drop_table('invgroup') + op.drop_table('dogma_attributes') + op.drop_table('invcategory') + # ### end Alembic commands ### diff --git a/migrations/versions/c2b7b284ed6f_.py b/migrations/versions/c2b7b284ed6f_.py new file mode 100644 index 00000000..9c560922 --- /dev/null +++ b/migrations/versions/c2b7b284ed6f_.py @@ -0,0 +1,30 @@ +"""empty message + +Revision ID: c2b7b284ed6f +Revises: 217e6df96f88 +Create Date: 2018-06-20 14:04:04.014198 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'c2b7b284ed6f' +down_revision = '217e6df96f88' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('accounts', sa.Column('language', sa.String(length=10), nullable=True)) + op.add_column('characters', sa.Column('language', sa.String(length=10), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ## + op.drop_column('characters', 'language') + op.drop_column('accounts', 'language') + # ### end Alembic commands ### diff --git a/migrations/versions/edc810245f94_.py b/migrations/versions/edc810245f94_.py index 25ac14ee..9ed3f786 100644 --- a/migrations/versions/edc810245f94_.py +++ b/migrations/versions/edc810245f94_.py @@ -48,7 +48,7 @@ def upgrade(): ) op.create_index(op.f('ix_ssotoken_character_id'), 'ssotoken', ['character_id'], unique=False) op.create_index(op.f('ix_ssotoken_account_id'), 'ssotoken', ['account_id'], unique=False) - op.create_index('ix_character_id_account_id', 'ssotoken', ['character_id', 'account_id'], unique=False) + op.create_index(op.f('ix_character_id_account_id'), 'ssotoken', ['character_id', 'account_id'], unique=False) op.create_table('eveapiscope', sa.Column('token_id', sa.Integer(), nullable=False), diff --git a/package.json b/package.json index dbfc33b6..3e271f0c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "dependencies": { "babel-cli": "^6.26.0", "babel-plugin-transform-remove-console": "^6.9.0", - "babel-preset-minify": "^0.3.0" + "babel-preset-minify": "^0.3.0", + "csso-cli": "^1.1.0" }, "devDependencies": {}, "license": "MIT" diff --git a/requirements.txt b/requirements.txt index 520d008f..1b7d6d6e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,14 +1,13 @@ Flask>=1.0.2 PyYAML>=3.12 SQLAlchemy>=1.2.7 -Werkzeug>=0.11.11 +Werkzeug>=0.14.1 alembic>=0.9.9 bcrypt>=3.1.1 blinker>=1.4 gevent>=1.3.1 requests>=2.18.4 -esipy==0.4.0 -cssmin>=0.2.0 +esipy>=0.4.3 Flask-Assets>=0.12 Flask-htmlmin>=1.2 Flask-Login>=0.4.1 @@ -19,4 +18,7 @@ Flask-SQLAlchemy>=2.3.2 Flask-CDN>=1.5.3 flask-limiter>=1.0.1 ts3==1.0.6 -Flask-Script>=2.0.6 \ No newline at end of file +Flask-Script>=2.0.6 +Flask-Babel>=0.11.2 +csscompressor>=0.9.5 +flasgger>=0.9.0 \ No newline at end of file diff --git a/static/css/base.css b/static/css/base.css index 090f1204..da2ac45a 100644 --- a/static/css/base.css +++ b/static/css/base.css @@ -4,6 +4,7 @@ .profile-img-32 { width: 32px; height: 32px; + vertical-align: inherit; } .pretty-dd { margin-bottom: 0; diff --git a/static/css/font.css b/static/css/font.css index 19c30ce3..8d3ac996 100644 --- a/static/css/font.css +++ b/static/css/font.css @@ -1,108 +1,14 @@ -/* -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - - */ @font-face { - font-family: 'fa-subset'; - src: url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); - + font-family: 'wl-awesome'; + src: + url(data:application/font-woff2;charset=utf-8;base64,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) format('woff2'); font-weight: normal; font-style: normal; } -.fa { +[class^="fa-"], [class*=" fa-"] { /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'fa-subset' !important; + font-family: 'wl-awesome' !important; speak: none; font-style: normal; font-weight: normal; @@ -115,6 +21,63 @@ OTHER DEALINGS IN THE FONT SOFTWARE. -moz-osx-font-smoothing: grayscale; } +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-rotate-left:before { + content: "\e918"; +} +.fa-undo:before { + content: "\e918"; +} +.fa-list:before { + content: "\e919"; +} +.fa-history:before { + content: "\e91a"; +} +.fa-search:before { + content: "\e91b"; +} +.fa-question-circle-o:before { + content: "\e91c"; +} +.fa-info-circle:before { + content: "\e91d"; +} +.fa-wrench:before { + content: "\e91e"; +} +.fa-cog:before { + content: "\f013"; +} +.fa-gear:before { + content: "\f013"; +} +.fa-sign-out:before { + content: "\e904"; +} +.fa-close:before { + content: "\e911"; +} +.fa-remove:before { + content: "\e911"; +} +.fa-times:before { + content: "\e911"; +} +.fa-bell-o:before { + content: "\e916"; +} +.fa-bell-slash-o:before { + content: "\e917"; +} .fa-thumbs-o-up:before { content: "\e905"; } @@ -142,9 +105,6 @@ OTHER DEALINGS IN THE FONT SOFTWARE. .fa-minus-square:before { content: "\e903"; } -.fa-bell-o:before { - content: "\e904"; -} .fa-comment:before { content: "\e906"; } @@ -178,16 +138,20 @@ OTHER DEALINGS IN THE FONT SOFTWARE. .fa-clock-o:before { content: "\e910"; } -.fa-close:before { - content: "\e911"; -} -.fa-remove:before { - content: "\e911"; -} -.fa-times:before { - content: "\e911"; -} .fa-check:before { content: "\e912"; } +.fa-lg { + font-size: 1.333em; + line-height: 0.75em; + vertical-align: -15%; +} + +.fa-2x { font-size: 2em; } + +.fa-3x { font-size: 3em; } + +.fa-4x { font-size: 4em; } + +.fa-5x { font-size: 5em; } diff --git a/static/css/themes/dark.css b/static/css/themes/dark.css index 629ff375..9f69c682 100644 --- a/static/css/themes/dark.css +++ b/static/css/themes/dark.css @@ -1866,7 +1866,7 @@ pre code { } .form-control:disabled, .form-control[readonly] { - background-color: #6c757d; + background-color: #bbc1c5; opacity: 1; } @@ -3877,7 +3877,7 @@ input[type="button"].btn-block { .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { - color: #495057; + color: #f8f9fa; background-color: #495057; border-color: #dee2e6 #dee2e6 #495057; } @@ -4841,7 +4841,7 @@ input[type="button"].btn-block { .jumbotron { padding: 2rem 1rem; margin-bottom: 2rem; - background-color: #e9ecef; + background-color: gray-600; border-radius: 0.3rem; } @@ -8996,3 +8996,10 @@ a.text-dark:hover, a.text-dark:focus { background: #495057 !important; color: #f8f9fa !important; } + +input[type="button" i]:disabled, input[type="submit" i]:disabled, +input[type="reset" i]:disabled, input[type="file" i]:disabled, +button:disabled, optgroup:disabled, +option:disabled, select[disabled] > option { + color: inherit; +} diff --git a/static/css/themes/dark_purple.css b/static/css/themes/dark_purple.css index 09884011..7b282974 100644 --- a/static/css/themes/dark_purple.css +++ b/static/css/themes/dark_purple.css @@ -1866,7 +1866,7 @@ pre code { } .form-control:disabled, .form-control[readonly] { - background-color: #6c757d; + background-color: #bbc1c5; opacity: 1; } @@ -3877,7 +3877,7 @@ input[type="button"].btn-block { .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { - color: #495057; + color: #f8f9fa; background-color: #495057; border-color: #dee2e6 #dee2e6 #495057; } @@ -4841,7 +4841,7 @@ input[type="button"].btn-block { .jumbotron { padding: 2rem 1rem; margin-bottom: 2rem; - background-color: #e9ecef; + background-color: gray-600; border-radius: 0.3rem; } @@ -8996,3 +8996,10 @@ a.text-dark:hover, a.text-dark:focus { background: #495057 !important; color: #f8f9fa !important; } + +input[type="button" i]:disabled, input[type="submit" i]:disabled, +input[type="reset" i]:disabled, input[type="file" i]:disabled, +button:disabled, optgroup:disabled, +option:disabled, select[disabled] > option { + color: inherit; +} diff --git a/static/css/themes/default.css b/static/css/themes/default.css index 864f1e2e..e22c2a65 100644 --- a/static/css/themes/default.css +++ b/static/css/themes/default.css @@ -8996,3 +8996,10 @@ a.text-dark:hover, a.text-dark:focus { background: #fff !important; color: #212529 !important; } + +input[type="button" i]:disabled, input[type="submit" i]:disabled, +input[type="reset" i]:disabled, input[type="file" i]:disabled, +button:disabled, optgroup:disabled, +option:disabled, select[disabled] > option { + color: inherit; +} diff --git a/static/js/accounts/accountslist-dom.js b/static/js/accounts/accountslist-dom.js index ab468118..e3bb3c76 100644 --- a/static/js/accounts/accountslist-dom.js +++ b/static/js/accounts/accountslist-dom.js @@ -8,6 +8,57 @@ let swa_client = SwaggerClient( } ); +class AccountRow { + constructor(accountId, grid) { + this.accountId = accountId; + this.id = `account-${accountId}` + this.element = document.getElementById(this.id); + this.grid = grid; + } + + set status(value) { + this.setColumn('status', value) + this.grid.refreshGrid(); + } + + get name() { + return this.getColumn('account-name'); + } + + get defaultCharName() { + return this.getColumn('current-character'); + } + + get rolesIdx() { + return this.getColumnIdx('roles'); + } + + getColumnIdx(name) { + return this.grid.getColumnIndex(name); + + } + + getColumn(name) { + let data = this.grid.dataUnfiltered != null ? this.grid.dataUnfiltered : this.grid.data; + // find the data row + let rowdata = data.find(e => e.id == this.id); + console.log("Get columnIdex for "+name); + console.log(rowdata); + console.log(this.grid); + let columnIndex = this.grid.getColumnIndex(name); + console.log('Got idx '+columnIndex+' for '+name); + return rowdata.columns[columnIndex]; + } + + setColumn(name, value) { + let griddata = this.grid.dataUnfiltered != null ? this.grid.dataUnfiltered : this.grid.data; + // find the data row + let rowdata = griddata.find(e => e.id == this.id); + let columIndex = this.grid.getColumnIndex(name); + rowdata.columns[columnIndex] = value; + } +} + class AltEntry { constructor(account_id, character_id, character_name, can_change_link) { if (account_id instanceof HTMLElement) { @@ -231,7 +282,7 @@ class AltsList { let input_field = document.createElement('input'); input_field.setAttribute('type', 'text'); input_field.setAttribute('class', 'form-control'); - input_field.setAttribute('placeholder', 'Enter -> Add, Esc -> Cancel'); + input_field.setAttribute('placeholder', $.i18n('wl-add-alt-placehonder')); alts_list.element.appendChild(input_field); input_field = $(input_field); @@ -239,11 +290,11 @@ class AltsList { input_field.on('keyup', function(e) { if(e.keyCode == 13) { // enter let char_name = e.currentTarget.value; - e.currentTarget.value = "Please wait..."; + e.currentTarget.value = $.i18n('wl-please-wait'); client.apis.Accounts.post_accounts_account_id({'account_id': account_id, 'character_identifier': {'character_name': char_name}}) .then(function(event) { - waitlist.base.displayMessage("Alt added", "success"); + waitlist.base.displayMessage($.i18n('wl-alt-added'), "success"); input_field.remove(); alts_list.addAltByData(event.obj.character_id, event.obj.character_name); }) @@ -251,9 +302,9 @@ class AltsList { if (typeof(event.response) !== "undefined" && typeof(event.response.obj) !== "undefined" && typeof(event.response.obj.error) !== "undefined"){ - waitlist.base.displayMessage("Failed to add alt: "+event.response.obj.error, "danger"); + waitlist.base.displayMessage($.i18n('wl-add-alt-failed', ' :' + event.response.obj.error), "danger"); } else { - waitlist.base.displayMessage("Failed to add alt", "danger"); + waitlist.base.displayMessage($.i18n('wl-add-alt-failed', ''), "danger"); } input_field.remove(); }); diff --git a/static/js/accounts/commandcorelist.js b/static/js/accounts/commandcorelist.js index 9b8406f1..f042f1f8 100644 --- a/static/js/accounts/commandcorelist.js +++ b/static/js/accounts/commandcorelist.js @@ -1,10 +1,11 @@ EditableGrid.prototype.initializeGrid = function() { - this.setCellRenderer("Account Name", new AccountCellRenderer()); + this.setCellRenderer("account-name", new AccountCellRenderer()); }; $(document).ready(function() { - let getMetaData = waitlist.base.getMetaData; - var canViewProfile = getMetaData('can-view-profile') === "True"; + var oldFilter = null; + let getMetaData = waitlist.base.getMetaData; + var canViewProfile = getMetaData('can-view-profile') === "True"; var editableGrid = new EditableGrid( "CommandCore", { @@ -13,30 +14,36 @@ $(document).ready(function() { maxBars: 5 }); - editableGrid.load({ - metadata: [ - { - name: "Account Name", - datatype: "string", - editable: false, - values: [{"value": "canViewProfile", "label": canViewProfile}] - }, { - name: "Roles", - datatype: "string", - editable: false - }, { - name: "Known Alts", - datatype: "string", - editable: false - } - ] - }); - - editableGrid.attachToHTMLTable('commanderlist'); - editableGrid.initializePaginator(); - editableGrid.initializeGrid(); - editableGrid.renderGrid(); - $('#filter').on('keyup', function() { - editableGrid.filter($('#filter').val()); + // make sure translations are loaded + i18nloaded.then(() => { + editableGrid.load({ + metadata: [ + { + name: "account-name", + datatype: "string", + editable: false, + values: [{"value": "canViewProfile", "label": canViewProfile}] + }, { + name: "roles", + datatype: "string", + editable: false + }, { + name: "alts", + datatype: "string", + editable: false + } + ] + }); + + editableGrid.attachToHTMLTable('commanderlist'); + editableGrid.initializePaginator(); + editableGrid.initializeGrid(); + editableGrid.renderGrid(); + $('#filter').on('keyup', function() { + if (oldFilter != null) editableGrid.removeFilter(oldFilter); + oldFilter = new StringFilter($('#filter').val()); + editableGrid.addFilter(oldFilter); + }); + registerRoleFilterSelect(editableGrid, 'filterRole'); }); }); diff --git a/static/js/accounts/editablegrid_filter.js b/static/js/accounts/editablegrid_filter.js new file mode 100644 index 00000000..991edb23 --- /dev/null +++ b/static/js/accounts/editablegrid_filter.js @@ -0,0 +1,29 @@ +class RoleFilter extends Filter { + constructor(roleName) { + super(); + this.roleName = roleName; + } + + shouldInclude(row, ridx, grid) { + let roleIdx = grid.getColumnIndex('roles'); + let roleString = row.columns[roleIdx]; + let accId = row.id.substring(8); + console.log("Account Id: "+accId+ " RIdx: "+ ridx); + let value = grid.getValueAt(ridx, roleIdx); + let roles_node = $.parseHTML('
    '+value+'
    ')[0]; + + // remove the new node + if (roles_node.children.length > 0 && roles_node.children[0].nodeName === "SPAN") { + roles_node.children[0].remove() + } + let roles = roles_node.textContent; + roles = roles.replace(/[\t\n\r]/g, ''); // clean up tabs and newlines + roles = roles.split(', '); + roles = roles.map(role => role.trim()); + console.log(roles); + console.log("Role we want: " + this.roleName); + let should_include = roles.includes(this.roleName); + console.log("Should include " + should_include); + return should_include; + } +} diff --git a/static/js/accounts/role_filter.js b/static/js/accounts/role_filter.js new file mode 100644 index 00000000..c1d2af80 --- /dev/null +++ b/static/js/accounts/role_filter.js @@ -0,0 +1,14 @@ +function registerRoleFilterSelect(editableGrid, selectId){ + let oldFilter = null; + $('#'+selectId).on('change', function(event){ + let select = event.currentTarget; + let val = select.value; + if (oldFilter != null) editableGrid.removeFilter(oldFilter); + if (val != '') { + oldFilter = new RoleFilter(val); + editableGrid.addFilter(oldFilter); + } else { + oldFilter = null; + } + }); +} \ No newline at end of file diff --git a/static/js/accounts/settings-accounts.js b/static/js/accounts/settings-accounts.js index f2ac03a9..aec6eab9 100644 --- a/static/js/accounts/settings-accounts.js +++ b/static/js/accounts/settings-accounts.js @@ -4,18 +4,21 @@ if (!waitlist) { var waitlist = {}; } + waitlist.accounts = (function() { var getMetaData = waitlist.base.getMetaData; var displayMessage = waitlist.base.displayMessage; var sendMail = waitlist.IGBW.sendMail; + + let grid = null; function disableAccount(accountId, onsuccess){ var settings = { async: true, dataType: "text", error: function() { - displayMessage("Disabling Account failed!", "danger"); + displayMessage($.i18n('wl-accounts-error-disable-account-failed'), "danger"); }, method: "POST", data: { @@ -35,7 +38,7 @@ waitlist.accounts = (function() { async: true, dataType: "text", error: function() { - displayMessage("Enabling Account failed!", "danger"); + displayMessage($.i18n('wl-accounts-error-enabling-account-failed'), "danger"); }, method: "POST", data: { @@ -54,11 +57,10 @@ waitlist.accounts = (function() { var source = $(event.currentTarget); var id = Number(source.data('id')); enableAccount(id, function() { - const td_status_field_id = "#account-"+id+"-status"; - const td = $(td_status_field_id); - td.text('Active') + let accountRow = new AccountRow(id, grid); + accountRow.status = 'Active'; source.attr("data-type", "acc-disable"); - source.text("Disable"); + source.text($.i18n("wl-disable")); }); } @@ -66,11 +68,10 @@ waitlist.accounts = (function() { var source = $(event.currentTarget); var id = Number(source.data('id')); disableAccount(id, function() { - const td_status_field_id = "#account-"+id+"-status"; - const td = $(td_status_field_id); - td.text('Deactivated') + let accountRow = new AccountRow(id, grid); + accountRow.status = 'Deactivated'; source.attr("data-type", "acc-enable"); - source.text("Enable"); + source.text($.i18n("wl-enable")); }); } @@ -103,26 +104,30 @@ waitlist.accounts = (function() { } function editAccount(accountId) { - let name = $('#acc-'+accountId+"-name > a").text(); - let roles_node = document.getElementById('acc-'+accountId+'-roles'); - let has_new_tag = (roles_node.childNodes.length > 0 && roles_node.childNodes[0].nodeName === "SPAN"); - let roles = roles_node.textContent; + let account_node = document.getElementById(`account-${accountId}`); + let account_row = new AccountRow(accountId, grid); + let name = account_row.name; + let roles_node = account_node.children[account_row.rolesIdx]; + let has_new_tag = (roles_node.children.length > 0 && roles_node.children[0].nodeName === "SPAN"); + let roles = roles_node.textContent; + roles = roles.replace(/[\t\n\r]/g, ''); // clean up tabs and newlines // if it has a new tag remove the "New" from the beginning if (has_new_tag){ roles = roles.slice(3) } - let default_char_name = $('#acc-'+accountId+'-cchar').text(); + let default_char_name = account_row.defaultCharName; $('#acc-edit-name').val(name); // this is more complicated // $('#acc-edit-roles') roles = roles.split(", "); + roles = roles.map(x => x.trim()) // map the roles he has to a dict so we can fast and easy check for them // later let has_roles = {}; - for (let role in roles) { - has_roles[roles[role]] = true; + for (let idx in roles) { + has_roles[roles[idx]] = true; } let edit_roles_select = document.getElementById('acc-edit-roles'); @@ -169,7 +174,7 @@ waitlist.accounts = (function() { } function setUpTable() { - var editableGrid = new EditableGrid( + grid = new EditableGrid( "Accounts", { enableSort: true, @@ -179,31 +184,31 @@ waitlist.accounts = (function() { $.parseHTML('')[0], $.parseHTML('')[0]); - editableGrid.load({ + grid.load({ metadata: [ { - name: "Actions", + name: 'actions', datatype: "html", editable: false }, { - name: "Status", + name: 'status', datatype: "string", editable: false }, { - name: "Account Name", + name: 'account-name', datatype: "string", editable: false, values: [{"value": "canViewProfile", "label": true}] }, { - name: "Roles", + name: 'roles', datatype: "html", editable: false }, { - name: "Current Char", + name: 'current-character', datatype: "string", editable: false }, { - name: "Alts", + name: 'alts', datatype: "string", editable: false, values: [{"value": "canChangeLinks", "label": getMetaData('can-change-links') == 'True'}] @@ -215,19 +220,26 @@ waitlist.accounts = (function() { ] }); - editableGrid.attachToHTMLTable('acctable'); - editableGrid.initializePaginator(); - editableGrid.initializeGrid(); - editableGrid.renderGrid(); + grid.attachToHTMLTable('acctable'); + grid.initializePaginator(); + grid.initializeGrid(); + grid.renderGrid(); + let oldFilter = null; $('#filter').on('keyup', function() { - editableGrid.filter($('#filter').val()); + if (oldFilter != null) grid.removeFilter(oldFilter); + oldFilter = new StringFilter($('#filter').val()); + grid.addFilter(oldFilter); }); + registerRoleFilterSelect(grid, 'filterRole'); } function init() { noclick(); setUpEventhandlers(); - setUpTable(); + // make sure language data is loaded + i18nloaded.then(() => { + setUpTable(); + }); } $(document).ready(init); @@ -235,6 +247,6 @@ waitlist.accounts = (function() { })(); EditableGrid.prototype.initializeGrid = function() { - this.setCellRenderer("Account Name", new AccountCellRenderer()); - this.setCellRenderer("Alts", new AltCellRenderer()); + this.setCellRenderer('account-name', new AccountCellRenderer()); + this.setCellRenderer('alts', new AltCellRenderer()); }; \ No newline at end of file diff --git a/static/js/api/ui.js b/static/js/api/ui.js index 5993c749..aabaed7e 100644 --- a/static/js/api/ui.js +++ b/static/js/api/ui.js @@ -4,7 +4,7 @@ if (!waitlist) { var waitlist = {}; waitlist.esi = {}; } else if (!waitlist.esi) { - waitlist.esi = {}; + waitlist.esi = {}; } /** @@ -12,9 +12,9 @@ if (!waitlist) { */ waitlist.esi.ui = (function() { - var urls = { + var urls = { esi_ui_newmail: waitlist.base.getMetaData('api-esi-ui-newmail'), - esi_ui_auth: waitlist.base.getMetaData('api-esi-ui-auth') + esi_ui_auth: waitlist.base.getMetaData('api-esi-ui-auth') }; /** @@ -24,7 +24,7 @@ waitlist.esi.ui = (function() { * @param subject Mails Subject * @param body Mails Body */ - function open_newmail(receipients, subject, body) { + function open_newmail(receipients, subject, body) { /* * mailRecipients => JSON String recipients=[{"recipient_id": ID, "recipient_type": "alliance|character|corporation|mailing_list"}] * mailBody => String @@ -49,9 +49,9 @@ waitlist.esi.ui = (function() { waitlist.base.displayMessage(message, "danger"); } }); - } + } - return { + return { newmail: open_newmail, }; })(); diff --git a/static/js/base.js b/static/js/base.js index 2c567cc4..bf8d91ca 100644 --- a/static/js/base.js +++ b/static/js/base.js @@ -8,6 +8,16 @@ waitlist.base = (function(){ function getMetaData (name) { return $('meta[name="'+name+'"]').attr('content'); } + + var wlClient = SwaggerClient( + { + url: "/spec/v1/swagger.json", + requestInterceptor : function(req) { + req.headers['X-CSRFToken'] = getMetaData('csrf-token'); + return req; + } + } + ); function displayMessage(message, type, html, id) { var alertHTML = $($.parseHTML(`
  • '); @@ -356,7 +383,7 @@ waitlist.listdom = (function(){ fitDOM.append($(baseHTML) .append(fitContainer) ); - return fitDOM; + return fitDOM; } /** @@ -461,7 +488,7 @@ waitlist.listdom = (function(){ } } else { let invElement = $('.missed-invites', jEntries[0]); - let counterElement = $.parseHTML("
    "+entry.missedInvites+'
    '); + let counterElement = $.parseHTML("
    "+entry.missedInvites+'
    '); invElement.append(counterElement); } } else { @@ -642,7 +669,7 @@ waitlist.listdom = (function(){ var cTime = new Date(Date.now()); var xupTime = new Date(Date.parse(waitElement.attr('data-time'))); var waitTimeMinutes = Math.max(0, Math.floor((cTime - xupTime)/60000)); - waitElement.text(waitTimeMinutes+" min ago"); + waitElement.text($.i18n('wl-min-ago', waitTimeMinutes)); }); } @@ -661,7 +688,8 @@ waitlist.listdom = (function(){ countEl.text(count+1); } else { // he didn't miss invites yet, no DOM - el.append($(`
    ${count+1}
    `)); + el.append($(`
    ${count+1}
    `)); + } }); } @@ -670,16 +698,13 @@ waitlist.listdom = (function(){ // status update start /** - * @param groupStatus - * { - * groupID=INT, status=STR, influence=BOOL, - * constellation={constellationID=INT,constellationName=STR}, - * solarSystem={systemID=INT,systemName=STR}, - * station={stationID=INT, stationName=STR}, - * fcs=[{id=INT,name=STR,newbro=BOOL}...], - * managers=[{id=INT,name=STR,newbro=BOOL}...], - * fleets=[{grouID=INT, comp={id=INT,name=STR,newbro=BOOL}}...] - * } + * @param groupStatus { groupID=INT, status=STR, influence=BOOL, + * constellation={constellationID=INT,constellationName=STR}, + * solarSystem={systemID=INT,systemName=STR}, + * station={stationID=INT, stationName=STR}, + * fcs=[{id=INT,name=STR,newbro=BOOL}...], + * managers=[{id=INT,name=STR,newbro=BOOL}...], + * fleets=[{grouID=INT, comp={id=INT,name=STR,newbro=BOOL}}...] } */ function setStatusDom(groupStatus) { @@ -689,7 +714,7 @@ waitlist.listdom = (function(){ fcTD.empty(); for(let fc of groupStatus.fcs) { // create the fc link - let fcA = $(`
    ${fc.name}`); + let fcA = $(`${fc.name}`); fcTD.append(fcA); } @@ -729,9 +754,9 @@ waitlist.listdom = (function(){ // update managers var managerTD = $(`#grp-${groupStatus.groupID}-manager`); managerTD.empty(); - // we have connected crest fleets, use the managers from those + // we have connected crest fleets, use the managers from those for(let manager of groupStatus.managers) { - var managerA = $(`${manager.name}`); + var managerA = $(`${manager.name}`); managerTD.append(managerA); } @@ -740,17 +765,25 @@ waitlist.listdom = (function(){ statusDiv.empty(); if (groupStatus.enabled) { if (groupStatus.status) { - statusDiv.text(groupStatus.status+' '); + // lets see if an translation exists + let translation_key = `wl-liststatus-${groupStatus.status}`; + let translated_status = $.i18n(translation_key); + // no translation exists + if (translated_status === translation_key) { + translated_status = groupStatus.status; + } + + statusDiv.text(translated_status+' '); if (groupStatus.influence) { let influenceLink = getMetaData('influence-link'); - statusDiv.append($(`Fit for Influence`)); + statusDiv.append($(`${$.i18n('wl-fit-influence')}`)); $('#influence-link').on('click', function (e) { e.stopPropagation(); }); } } } else { - statusDiv.html('This waitlist is currently closed however there might be another open!'); + statusDiv.html($.i18n('wl-list-closed')); $('#status-link').on('click', function (e) { e.stopPropagation(); }); @@ -763,8 +796,8 @@ waitlist.listdom = (function(){ var fitLists = $('ol[id|="wl-fits"]'); fitLists.empty(); fitLists.each(function(idx, el){ - var wlId = Number($(el).attr('id').replace('wl-fits-', '')); - updateWlEntryTagCount(wlid); + let wlId = Number($(el).attr('id').replace('wl-fits-', '')); + updateWlEntryTagCount(wlId); }); } @@ -780,7 +813,7 @@ waitlist.listdom = (function(){ } - $(document).ready(init); + $(document).ready(init); return { loadWaitlist: refreshWl, addFitToDom: addFitToDom, diff --git a/static/js/wlsseupdate.js b/static/js/wlsseupdate.js index 1b69f540..af0a7d3a 100644 --- a/static/js/wlsseupdate.js +++ b/static/js/wlsseupdate.js @@ -6,6 +6,7 @@ if (!waitlist) { waitlist.sse = (function() { let getMetaData = waitlist.base.getMetaData; + let displayMessage = waitlist.base.displayMessage; let eventListeners = []; @@ -17,37 +18,38 @@ waitlist.sse = (function() { event.target.close(); errorCount++; if (errorCount < 2) { // our first error reconnect this instant - connectSSE(); - } else if (errorCount >= 2 && errorCount <= 5) { // 2-5 errors, try - // reconnect after - // 1s - setTimeout(connectSSE, 1000); - } else { // > 5 errors try reconnect after 10s - setTimeout(connectSSE, 10000); + connectSSE(errorCount); + // error 2-5, try reconnect after 2s + } else if (errorCount >= 2 && errorCount <= 5) { + setTimeout(connectSSE.bind(null, errorCount), 2000); + } else if (errorCount >= 6 && errorCount <= 10) { // > 5 errors try reconnect after 10s + setTimeout(connectSSE.bind(null, errorCount), 10000); + // more then 10 reconnects don't try anymore + } else { + displayMessage($.i18n('wl-error-to-many-sse-errors'), 'danger'); } - event.target.close(); } function handleSSEOpen() { if (errorCount > 1) { // refresh the page using json, to pull ALL the date, we might have // missed sth - loadWaitlist(); + waitlist.listdom.loadWaitlist(); } errorCount = 0; // reset error counter } - function connectSSE() { + function connectSSE(count = 0) { let wlgroup = getMetaData('wl-group-id'); if(typeof wlgroup !== "undefined") { - eventSource = getSSE("waitlistUpdates,gong,statusChanged", wlgroup); + eventSource = getSSE("waitlistUpdates,gong,statusChanged", wlgroup, count); } else { - eventSource = getSSE("statusChanged"); + eventSource = getSSE("statusChanged", undefined, count); } } - function getSSE(events, groupId) { - let url = getMetaData('api-sse')+"?events="+encodeURIComponent(events); + function getSSE(events, groupId, count = 0) { + let url = getMetaData('api-sse')+"?events="+encodeURIComponent(events)+"&connect_try="+count; if (typeof groupId !== "undefined") { url += "&groupId="+encodeURIComponent(groupId); } @@ -99,7 +101,7 @@ waitlist.sse = (function() { } - $(document).ready(init); + $(document).ready(init); return { addEventListener: addEventListener }; diff --git a/static/local/de.json b/static/local/de.json new file mode 100644 index 00000000..5a8f67a1 --- /dev/null +++ b/static/local/de.json @@ -0,0 +1,81 @@ +{ + "@metadata": { + "authors": [ + "Constantin Wenger" + ], + "last-updated": "2018-06-19", + "locale": "en", + "message-documentation": "notes" + }, + "wl-tag-logi": "LOGI", + "wl-tag-basilisk": "B", + "wl-tag-scimitar": "S", + "wl-tag-dps": "DMG", + "wl-tag-sniper": "SCHS", + "wl-new": "Neu", + "wl-missed-invites": "Verpasste Einladungen", + "wl-wardec-desc": "rot = aktiver Krieg, orange = Krieg erklärt, error = Es liegt ein Fehler vor", + "wl-update": "Aktualisieren", + "wl-min-ago": "vor $1 min", + "wl-fit-influence": "Rüste dich für hohen Einfluss aus", + "wl-list-closed": "Diese Warteliste ist momentan geschlossen, allerdings ist vielleicht eine andere offen!", + "wl-fbmail-topic": "Antwor auf deine Wartelisten Rückmeldung", + "wl-fbmail-body": "Hallo $1,\nWir haben deine Ticket gelesen:\n$2\n\n$3\n\nvielen Dank,\n", + "wl-notifiaction-xup-title": "Neuer Eintrag", + "wl-notifiaction-xup-body": "Neuer Eintrag von $1", + "wl-no-result-found": "Kein Ergebnis gefunden", + "wl-xup-uppercase": "Eintrag", + "wl-remove-char": "Entferene Charakter von Wartelisten", + "wl-send-invite": "Einladung Gesendet", + "wl-remove-entry-from-xup": "Eintrag aus Einschreibung entfernen", + "wl-remove-own-fit": "Eigene Ausrüstung entfernt", + "wl-remove-own-entry": "Eigenen Eintrag entfernt", + "wl-remove-self-all-lists": "Hat sich selbst von allen Listen entfernt", + "wl-approved-xup-entry": "Einschreibung bestätigt", + "wl-approved-single-fit": "Einzelne Ausrüstung bestätigt", + "wl-sent-notification-to-char": "Benachrichtigung an Charakter gesendet", + "wl-was-set-as-fc": "Wurde as FC eingetragen", + "wl-was-set-as-fleetcomp": "Wurde as Flotten-Verwalter eingetragen", + "wl-auto-removed-after-found-in-fleet": "Spieler wurde nach Auffindung in der Flotte entfernt", + "wl-missed-his-invite": "Spiele hat seine Einladung verpasst", + "wl-player-removed-himself-from-xups": "Spieler hat sich selbst von der Einschreibung entfernt", + "wl-player-invited-by-name": "Spieler wurde per Namen eingeladen(Reform Werkzeug?)", + "wl-gong-info": "Um informiert zu werden wenn du eingeladen wirst, aktiviere die Browserbenachrichtigungen.", + "wl-clear-list-warning-body": "Willst du worklich die Warteschlangen und Eintragungen löschen?", + "wl-clear-list-warning-label": "Löschen der Wartelisten???", + "wl-warn-checkfit": "Du solltest die Ausrüstunge von $1 betrachten befor du dieser zustimmst.", + "wl-warn-checkfits": "Du solltest alle Ausrüstungen von $1 betrachten befor du diesen zustimmst.", + "wl-permissions-setting-failed": "Das eintragen des Rechtes ist fehlgeschlagen", + "wl-overview-top-commader-time": "$1 Kommandeure mit meister Aktivität in letzen $2 Tagen", + "wl-overview-top-distinct-time": "$1 meisten Hülle/Charakter Kombinationen in letzten $2 Tagen", + "wl-fleetjoins-per-month": "Flotten Beitritte pro Monat", + "wl-fleetview-error-indexdb": "IndexDB is nötig um Charakter und Schiff Information zwischen zu speichern. Warum haben sie nicht erlaubt IndexedDB zu benutzen?!", + "wl-fleetview-error-db": "Datenbank Fehler: $1", + "wl-calendar-settings-error-event-delete": "Das löschen der Veranstaltung ist fehlgeschlagen", + "wl-calendar-settings-event-deleted": "Veranstaltung wurde gelöscht", + "wl-accounts-error-disable-account-failed": "Deaktivieren das Kontos is fehlgeschlagen!", + "wl-accounts-error-enabling-account-failed": "Aktivieren das Kontos is fehlgeschlagen!", + "wl-accounts-column-account-name": "Konto Name", + "wl-accounts-column-alts": "Alternierende Charaktere", + "wl-settings-accounts-table-actions": "Aktionen", + "wl-settings-accounts-table-status": "Zustand", + "wl-settings-accounts-table-roles": "Rollen", + "wl-settings-accounts-table-current-character": "Aktiver Charakter", + "wl-fits": "Ausrüstungen", + "wl-fit": "Ausrüstung", + "wl-overview-stat-error-fit-by-acc": "Das laden der bestätigent Ausrüstungen per Account Statistik is fehlgeschlagen: $1", + "wl-overview-stat-error-joins-per-month": "Das laden der Fottenbeitritte pro Monat Statistik is fehlgeschlagen: $1", + "wl-overview-stat-error-hull-char": "Das laden der unterschiedliche Hüllen/Charakter Statistik is fehlgeschlagen: $1", + "wl-liststatus-Running": "Betrieb", + "wl-liststatus-Down": "außer Betrieb", + "wl-liststatus-Forming": "Aufstellen", + "wl-lang-change-failed": "Das Ändern der Sprach ist fehlgeschlagen: $1", + "wl-add-alt-failed": "Das Hinzufügen des Alts ist fehlgeschlagen$1", + "wl-alt-added": "Alt wurde hinzugefügt", + "wl-please-wait": "Bitte warte...", + "wl-add-alt-placehonder": "Eingabe -> Hinzufügen, Esc -> Abbrechen", + "wl-account": "Konto", + "wl-enable": "Aktivieren", + "wl-disable": "Deaktivieren", + "wl-error-to-many-sse-errors": "Die SSE verbindung wurde zu oft unterbrochen, neuaufbau der verbindung wird eingestellt. WL wird nicht mehr geupdatet." +} diff --git a/static/local/en.json b/static/local/en.json new file mode 100644 index 00000000..f5a96f53 --- /dev/null +++ b/static/local/en.json @@ -0,0 +1,81 @@ +{ + "@metadata": { + "authors": [ + "Constantin Wenger" + ], + "last-updated": "2018-06-19", + "locale": "en", + "message-documentation": "notes" + }, + "wl-tag-logi": "LOGI", + "wl-tag-basilisk": "B", + "wl-tag-scimitar": "S", + "wl-tag-dps": "DPS", + "wl-tag-sniper": "SNI", + "wl-new": "New", + "wl-missed-invites": "Missed Invites", + "wl-wardec-desc": "red = valid target, orange = soon to be valid target, error = error happened", + "wl-update": "Update", + "wl-min-ago": "$1 min ago", + "wl-fit-influence": "Fit for Influence", + "wl-list-closed": "This waitlist is currently closed however there might be another open!", + "wl-fbmail-topic": "Answer to your Waitlist Feedback", + "wl-fbmail-body": "Hello $1,\nWe read your ticket:\n$2\n\n$3\n\nregards,\n", + "wl-notifiaction-xup-title": "New X-UP", + "wl-notifiaction-xup-body": "New X-UP from $1", + "wl-no-result-found": "No Results Found", + "wl-xup-uppercase": "X-UP", + "wl-remove-char": "Removed a Character from Waitlists", + "wl-send-invite": "Send Invitation to Character", + "wl-remove-entry-from-xup": "Removed Entry from X-UPs", + "wl-remove-own-fit": "Removed own fit", + "wl-remove-own-entry": "Removed own entry", + "wl-remove-self-all-lists": "Removed himself from all lists", + "wl-approved-xup-entry": "Approved X-UP entry", + "wl-approved-single-fit": "Approved Single Fit", + "wl-sent-notification-to-char": "Sent Notification to Character", + "wl-was-set-as-fc": "Was set as FC", + "wl-was-set-as-fleetcomp": "Was set as Fleet Comp", + "wl-auto-removed-after-found-in-fleet": "Player was removed after found in fleet", + "wl-missed-his-invite": "Player missed his invite", + "wl-player-removed-himself-from-xups": "Player removed himself from X-UPs", + "wl-player-invited-by-name": "Player was invited by Name(Reform Tool?)", + "wl-gong-info": "To get informed when you are invited please enable browser notifications.", + "wl-clear-list-warning-body": "Do your really want to clear the Waitlist and all Xups?", + "wl-clear-list-warning-label": "Clear Waitlist???", + "wl-warn-checkfit": "You should view $1's fit before accepting it.", + "wl-warn-checkfits": "You should view all of $1's fits before accepting them.", + "wl-permissions-setting-failed": "Setting Permission failed", + "wl-overview-top-commader-time": "Top $1 commanders with approves last $2d", + "wl-overview-top-distinct-time": "Top $1 distinct Char/Hull combinations last $2d", + "wl-fleetjoins-per-month": "Fleetjoins per month", + "wl-fleetview-error-indexdb": "IndexDB is needed to cache character/ship information. Why didn't you allow my web app to use IndexedDB?!", + "wl-fleetview-error-db": "Database error: $1", + "wl-calendar-settings-error-event-delete": "Deleting event failed", + "wl-calendar-settings-event-deleted": "Event deleted", + "wl-accounts-error-disable-account-failed": "Disabling Account failed!", + "wl-accounts-error-enabling-account-failed": "Enabling Account failed!", + "wl-accounts-column-account-name": "Account Name", + "wl-accounts-column-alts": "Alts", + "wl-settings-accounts-table-actions": "Actions", + "wl-settings-accounts-table-status": "Status", + "wl-settings-accounts-table-roles": "Roles", + "wl-settings-accounts-table-current-character": "Current Char", + "wl-fits": "Fits", + "wl-fit": "Fit", + "wl-overview-stat-error-fit-by-acc": "Failed to get approved fits by account statistics: $1", + "wl-overview-stat-error-joins-per-month": "Failed to get joins per month statistics: $1", + "wl-overview-stat-error-hull-char": "Failed to get distinct hull character statistics: $1", + "wl-liststatus-Running": "Running", + "wl-liststatus-Down": "Down", + "wl-liststatus-Forming": "Forming", + "wl-lang-change-failed": "Failed to change language: $1", + "wl-add-alt-failed": "Failed to add alt$1", + "wl-alt-added": "Alt added", + "wl-please-wait": "Please wait...", + "wl-add-alt-placehonder": "Enter -> Add, Esc -> Cancel", + "wl-account": "Account", + "wl-enable": "Enable", + "wl-disable": "Disable", + "wl-error-to-many-sse-errors": "Your SSE connection go terminated to often, stopping reconnect. WL will not update anymore." +} diff --git a/templates/about.html b/templates/about.html index 439b9179..da0bee40 100644 --- a/templates/about.html +++ b/templates/about.html @@ -4,15 +4,17 @@ {% block head %} {{ super() }} -{% assets filters="babili", output="gen/eveproxy.%(version)s.js", "js/base.js", "js/eveproxy.js" %} +{% assets filters="babili", output="gen/eveproxy.%(version)s.js", "js/eveproxy.js" %} {% endassets %} {% include "libs/eve-ui.html"%} {% endblock %} {% block data %} -

    - Eve-Inc-Waitlist Created by Bruce Warhead and Beryl Slanjava -
    - Fitting Display (Eve-UI) and Fitting Stats by Quie'scens -

    +
    +

    + {{ _('Eve-Inc-Waitlist Created by Bruce Warhead and Beryl Slanjava') }} +
    + {{ _('Fitting Display (Eve-UI) and Fitting Stats by Quie\'scens') }} +

    +
    {% endblock %} \ No newline at end of file diff --git a/templates/account/profile.html b/templates/account/profile.html index 77fc2ecc..4a663eec 100644 --- a/templates/account/profile.html +++ b/templates/account/profile.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}Account - Profile - {{account.username}}{% endblock %} +{% block title %}{{ _('Account') }} - {{ _('Profile') }} - {{account.username}}{% endblock %} {% block head %} {{super()}} @@ -14,10 +14,10 @@

    Profile of {{account.username}}

    # - Date Time - Noted By - Note - Role Changes + {{ _('Date Time') }} + {{ _('Noted By') }} + {{ _('Note') }} + {{ _('Role Changes') }} @@ -40,23 +40,23 @@

    Profile of {{account.username}}

    - - + {% if perm_manager.get_permission('view_notes_med').can() %} - + {% endif %} {% if perm_manager.get_permission('view_notes_high').can() %} - + {% endif %} - Restrict who can see this message + {{ _('Restrict who can see this message') }}
    - +
    - +
    {% endif %} diff --git a/templates/account/unauthed_characters_form.html b/templates/account/unauthed_characters_form.html index 842b18cf..d2a66feb 100644 --- a/templates/account/unauthed_characters_form.html +++ b/templates/account/unauthed_characters_form.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}Account - Unauthorized Characters - {{account.username}}{% endblock %} +{% block title %}{{ _('Account') }} - {{ _('Unauthorized Characters') }} - {{account.username}}{% endblock %} {% block head %} {{super()}} @@ -10,7 +10,7 @@
    @@ -27,7 +27,7 @@ - + diff --git a/templates/base.html b/templates/base.html index f42f71c0..165456da 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,20 +1,49 @@ - + + + + + + + + + + + {% block head %} -{% assets filters="cssmin", output="gen/setup.%(version)s.css", "css/base.css", "css/waitlist.css", "css/font.css" %} +{% assets filters="babili", output="gen/base.%(version)s.js", "js/swagger-client.min.js", "js/base.js" %} + +{% endassets %} +{% assets filters="csscomp", output="gen/setup.%(version)s.css", "css/base.css", "css/waitlist.css", "css/font.css" %} {% endassets %} - @@ -26,91 +55,16 @@ - {% block alert_base %}
    {% with messages = get_flashed_messages(with_categories=true) %} @@ -133,12 +87,14 @@ {% endblock %}
    {% block footer %} -
    +
    -
    © Copyright 2016-2018+ by Bruce Warhead ISK Donations are appreciated v{{version}}.
    - EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. CCP hf. has granted permission to Bruce Warhead to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, Bruce Warhead. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website. -
    - {% include 'partials/themes_selector.html' %} + +
    + {% include 'partials/themes_selector.html' %} +
    {% endblock %} diff --git a/templates/calendar/settings.html b/templates/calendar/settings.html index d36004cf..9327b373 100644 --- a/templates/calendar/settings.html +++ b/templates/calendar/settings.html @@ -1,12 +1,12 @@ {% extends "settings/base.html" %} -{% block title %}Settings - Calendar{% endblock %} +{% block title %}{{ _('Settings') }} - {{ _('Calendar') }}{% endblock %} {% block head %} {{ super() }} -{% assets filters="babili", output="gen/calendar-settings.%(version)s.js", "js/base.js", "js/calendar/settings.js" %} +{% assets filters="babili", output="gen/calendar-settings.%(version)s.js", "js/calendar/settings.js" %} {% endassets %} {% endblock %} @@ -15,51 +15,56 @@
    - - {% for category in categories %} {% endfor %}
    - +
    - UTC + {{ _('UTC') }}
    - - {% for account in accounts %} {% endfor %}
    - +
    - + - {# #} + {% for event in events %} - + - {# #} {% endfor %} diff --git a/templates/enable_trust.html b/templates/enable_trust.html deleted file mode 100644 index 8273871e..00000000 --- a/templates/enable_trust.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Settings{% endblock %} - -{% block head %} -{{ super() }} -{% endblock %} - -{% block data %} -

    Please enable trust and refresh the page!

    -{% endblock %} diff --git a/templates/example.html b/templates/example.html deleted file mode 100644 index a79b705b..00000000 --- a/templates/example.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Settings{% endblock %} - -{% block head %} -{{ super() }} -{% endblock %} - -{% block data %} - -{% endblock %} diff --git a/templates/feedback/index.html b/templates/feedback/index.html index 82ee4795..8c5826ea 100644 --- a/templates/feedback/index.html +++ b/templates/feedback/index.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}Feedback{% endblock %} +{% block title %}{{ _('Feedback') }}{% endblock %} {% block head %} {{ super() }} @@ -11,14 +11,14 @@
    - - + +
    - - + +
    - + {% endblock %} \ No newline at end of file diff --git a/templates/feedback/settings.html b/templates/feedback/settings.html index 0b97c657..eb87e438 100644 --- a/templates/feedback/settings.html +++ b/templates/feedback/settings.html @@ -1,12 +1,12 @@ {% extends "settings/base.html" %} -{% block title %}Settings - Tickets{% endblock %} +{% block title %}{{ _('Settings') }} - {{ _('Tickets') }}{% endblock %} {% block head %} {{ super() }} -{% assets filters="babili", output="gen/ticket.%(version)s.js", "js/base.js", "js/api/ui.js", "js/ticket-settings.js" %} +{% assets filters="babili", output="gen/ticket.%(version)s.js", "js/api/ui.js", "js/ticket-settings.js" %} {% endassets %} {% endblock %} @@ -15,11 +15,11 @@
    Outstanding Events{{ _('Outstanding Events') }}
    ActionsCreatorTimeTitleCategoryOrganizersBackseats{{ _('Actions') }}{{ _('Creator') }}{{ _('Time') }}{{ _('Title') }}{{ _('Category') }}{{ _('Backseats') }}
    {% if event.creator.id == current_user.id or perm_manager.get_permission('calendar_event_delete_other').can() %}{% endif %} + {% if event.creator.id == current_user.id or perm_manager.get_permission('calendar_event_delete_other').can() %} + + {% endif %} + {{ event.creator.username }} {{ event.eventTime }} {{ event.eventTitle }} {{ event.eventCategory.categoryName }}{% for account in event.organizers %} {% if not loop.first %}, {% endif %} {{ account.current_char_obj.eve_name }} {% endfor %}{% for account in event.backseats %} {% if not loop.first %}, {% endif %} {{ account.current_char_obj.eve_name }} {% endfor %}
    - - - - - + + + + + @@ -27,13 +27,13 @@ {% for fb in tickets %} - + {% endfor %} diff --git a/templates/fleet/reform/index.html b/templates/fleet/reform/index.html index eb95871f..de4743e5 100644 --- a/templates/fleet/reform/index.html +++ b/templates/fleet/reform/index.html @@ -1,23 +1,23 @@ {% extends "base.html" %} -{% block title %}Fleet - Reform{% endblock %} +{% block title %}{{ _('Fleet') }} - {{ _('Reform') }}{% endblock %} {% block head %} {{super()}} -{% assets filters="babili", output="gen/reform.%(version)s.js", "js/base.js", "js/reform.js" %} +{% assets filters="babili", output="gen/reform.%(version)s.js", "js/reform.js" %} {% endassets %} {% endblock %} {% block container_data %}
    -

    You can just copy and paste the ingame fleet channel member list into the field below. -Then press Send Invites to start sending out the invites. -People that are still in the old fleet will not get an invite of course.

    -

    This will not trigger, notifications or pokes.

    +{{ _('

    You can just copy and paste the ingame fleet channel member list into the field below.' + ' Then press Send Invites to start sending out the invites.' + ' People that are still in the old fleet will not get an invite of course.

    ' + '

    This will not trigger, notifications or pokes.

    ') }}
    - +
    diff --git a/templates/fleet/setup/fleet_url.html b/templates/fleet/setup/fleet_url.html index 58dbf886..72e01dd2 100644 --- a/templates/fleet/setup/fleet_url.html +++ b/templates/fleet/setup/fleet_url.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}Fleet - Setup - Fleet Input{% endblock %} +{% block title %}{{ _('Fleet') }} - {{ _('Setup') }} - {{ _('Fleet Input') }}{% endblock %} {% block head %} {{ super() }} @@ -10,25 +10,15 @@
    -
    - - -
    -
    - -
    - - -
    -
    - + + +
    + + +
    + {% endblock %} diff --git a/templates/fleet/setup/select.html b/templates/fleet/setup/select.html index c88cee9f..852848d4 100644 --- a/templates/fleet/setup/select.html +++ b/templates/fleet/setup/select.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}Fleet - Setup - Select Squads{% endblock %} +{% block title %}{{ _('Fleet') }} - {{ _('Setup') }} - {{ _('Select Squads') }}{% endblock %} {% block head %} {{ super() }} @@ -11,16 +11,16 @@
    - - {% for group in groups %} {% endfor %}
    - - {% for wing in wings %} {% for squad in wing.squads() %} @@ -29,8 +29,8 @@
    - - {% for wing in wings %} {% for squad in wing.squads() %} @@ -39,8 +39,8 @@
    - - {% for wing in wings %} {% for squad in wing.squads() %} @@ -49,8 +49,8 @@
    - - {% for wing in wings %} {% for squad in wing.squads() %} @@ -58,6 +58,6 @@ {% endfor %}
    - + {% endblock %} diff --git a/templates/fleet/takeover/change-group-form.html b/templates/fleet/takeover/change-group-form.html index f1b7bdf3..c6ba94f6 100644 --- a/templates/fleet/takeover/change-group-form.html +++ b/templates/fleet/takeover/change-group-form.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}Fleet - Takeover - Change Fleet Group{% endblock %} +{% block title %}{{ _('Fleet') }} - {{ _('Takeover') }} - {{ _('Change Fleet Group') }}{% endblock %} {% block head %} {{ super() }} @@ -10,13 +10,13 @@
    - - {% for group in groups %} {% endfor %}
    - + {% endblock %} diff --git a/templates/help.html b/templates/help.html index ea53fd80..b02d8d77 100644 --- a/templates/help.html +++ b/templates/help.html @@ -7,24 +7,25 @@ {% endblock %} {% block data %} +
    • -

      How do I enter the Waitlist?

      +

      {{ _('How do I enter the Waitlist?') }}

      - In the eve client, go to the Ship Fitting Window.
      - On the bottom right side is a Save button, click it.
      - A Fitting Management window will open, that has a Copy to Clipboard button at the bottom, click it.
      - Now you are ready to switch to the Waitlist Website.
      - At the top there is a link X-UP, open the link. - In the big text field, below Fittings, press Ctrl+V or right click and select Paste.
      - Now at the bottom, if you are flying one of these ships: Rokh, Rattlesnake, Scorpion Navy Issue, please select your Caldari Battleship Level.
      - If you are flying a Logistics Ship, namely Basilisk or Scimitar, please select your Logistics Cruiser Level too.
      - Now you can press Enter on Waitlist.
      - Your Fittings will now be queued up for review by a Waitlist Manager before you are put on the Waitlist.
      - You will be send back to the index page, where you can see who is on the Waitlist, and/or in the queue, to be review by a Waitlist Manager. + {{_('In the eve client, go to the Ship Fitting Window.
      + On the bottom right side is a Save button, click it.
      + A Fitting Management window will open, that has a Copy to Clipboard button at the bottom, click it.
      + Now you are ready to switch to the Waitlist Website.
      + At the top there is a link X-UP, open the link. + In the big text field, below Fittings, press Ctrl+V or right click and select Paste.
      + Now at the bottom, if you are flying one of these ships: Rokh, Rattlesnake, Scorpion Navy Issue, please select your Caldari Battleship Level.
      + If you are flying a Logistics Ship, namely Basilisk or Scimitar, please select your Logistics Cruiser Level too.
      + Now you can press Enter on Waitlist.
      + Your Fittings will now be queued up for review by a Waitlist Manager before you are put on the Waitlist.
      + You will be send back to the index page, where you can see who is on the Waitlist, and/or in the queue, to be review by a Waitlist Manager.')}}

      @@ -33,61 +34,62 @@

      -

      How do Alarm Expressions work?

      +

      {{ _('How do Alarm Expressions work?') }}

      - For expression evaluation expr-eval is used. - The variables, open, xup, logi, dps, sniper, other are provided, open being a boolean(true/false) while the others are numbers. - You can have one expression per Waitlist Group, there is no need for more then one, because using (expression) or (expression) would be the same as using two expression for one group. + {{ _('For expression evaluation expr-eval is used. + The variables, open, xup, logi, dps, sniper, other are provided, open being a boolean(true/false) while the others are numbers. + You can have one expression per Waitlist Group, there is no need for more then one, because using (expression) or (expression) would be the same as using two expression for one group.') }}

      - To explain how the expressions work, first we are introducing the word operator. - An operator is something that takes input values, and does something witht them, then providing an output value. + {{ _('To explain how the expressions work, first we are introducing the word operator. + An operator is something that takes input values, and does something witht them, then providing an output value.') }}

      - For our usage we only need to look at unary and binary operators. - Binary operators, take two arguments. Unary ones only take one. Now that we have established this we are going to move on to an example. + {{ _('For our usage we only need to look at unary and binary operators. + Binary operators, take two arguments. Unary ones only take one. Now that we have established this we are going to move on to an example.') }}

      - Our placeholder expression is (xup == 0 and logi < 2) or (xup == 2 and dps <= 5). - This expression is split on two subexpressions, made by (), a grouping operator, which are (1)(xup == 0 and logi < 2) and (2)(xup == 2 and dps <= 5). + {{ _('Our placeholder expression is (xup == 0 and logi < 2) or (xup == 2 and dps <= 5). + This expression is split on two subexpressions, made by (), a grouping operator, which are (1)(xup == 0 and logi < 2) and (2)(xup == 2 and dps <= 5).') }}

      - These two expressions are connected by the operator or which is a binary operator. - The or operator works like this: It takes the two given arguments, and if either is true, it solves to true in all other cases (both are false) it solves to false. + {{ _('These two expressions are connected by the operator or which is a binary operator. + The or operator works like this: It takes the two given arguments, and if either is true, it solves to true in all other cases (both are false) it solves to false.') }}

      - Now taking a look at subexpression (1)(xup == 0 and logi < 2) we see our placeholder variables xup and logi. - They will be replaced with our values from the table, on every update and following evaluation of the expressions. + {{ _('Now taking a look at subexpression (1)(xup == 0 and logi < 2) we see our placeholder variables xup and logi. + They will be replaced with our values from the table, on every update and following evaluation of the expressions.') }}

      - So here again we have two subexpressions inside this subexpression. (xup == 0) and (logi < 2). + {{ _('So here again we have two subexpressions inside this subexpression. (xup == 0) and (logi < 2).') }}

      - We know these two are subexpressions like this because of association. - You really don't need to care about this, if you don't know what it is. - Just put all your expressions in () and you don't need to know what it is. + {{ _('We know these two are subexpressions like this because of association. + You really don\'t need to care about this, if you don\'t know what it is. + Just put all your expressions in () and you don\'t need to know what it is.') }}

      - Taking the first one (xup == 0) it uses the binary operator == which means "equals". - And so check if both arguments xup and 0 are equal. - If this is the case the operator == resolves to true, otherwise false. + {{ _('Taking the first one (xup == 0) it uses the binary operator == which means "equals". + And so check if both arguments xup and 0 are equal. + If this is the case the operator == resolves to true, otherwise false.') }}

      - (logi < 2) uses the binary operator < "lesser then", with logi and 2 as arguments. - And so evaluates to true, if logi (the replacement value) is less then 2. + {{ _('(logi < 2) uses the binary operator < "lesser then", with logi and 2 as arguments. + And so evaluates to true, if logi (the replacement value) is less then 2.') }}

      - The common operators are: == equals, != does not equal, >= bigger or equal, <= less then or equal - > greater then, < less then - And to connect these expressions, the operators: - and and or. Keep in mind the "or" is a "true or", not the way it often is used in language, it is not an "either or". On this "or" both can be true. - There are other also useful operators, that can be used you can find them under expr-eval. - But the ones introduced here, should be enough to write decent notification logic and should cover most use cases. + {{ _('The common operators are: == equals, != does not equal, >= bigger or equal, <= less then or equal + > greater then, < less then + And to connect these expressions, the operators: + and and or. Keep in mind the "or" is a "true or", not the way it often is used in language, it is not an "either or". On this "or" both can be true. + There are other also useful operators, that can be used you can find them under expr-eval. + But the ones introduced here, should be enough to write decent notification logic and should cover most use cases.') }}

      -
      -
      -
      +

      +
    +
    + {% endblock %} diff --git a/templates/index.html b/templates/index.html index 7bcef43c..7ff9743e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,4 +1,7 @@ -{% extends "base.html" %} {% block title %}Overview{% endblock %} +{% extends "base.html" %} + +{% block title %}{{ _('Overview') }}{% endblock %} + {% block head %} @@ -39,7 +42,7 @@ {{ super() }} -{% assets filters="babili", output="gen/setup.%(version)s.js", "js/base.js", +{% assets filters="babili", output="gen/setup.%(version)s.js", "js/dropdown.js", "js/eveproxy.js", "js/waitlist-dom.js", "js/wlsseupdate.js", "js/sse-dom.js", "js/dnasetup.js", "js/calendar/index.js" %} @@ -84,18 +87,18 @@
    {% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} - {% for category, message in messages %} + {% if messages %} + {% for category, message in messages %} {% if category == "error" %} {% set category = "danger" %}{% endif %} - - {% endfor %} - {% endif %} + + {% endfor %} + {% endif %} {% endwith %}
    @@ -116,23 +119,23 @@ {% if perm_manager.get_permission('fleet_management').can() and current_user.fleet is none%} {% endif %} {% if ts and is_on_wl %} {% endif %} {% if ccvote_on %} {% endif %} @@ -148,6 +151,28 @@ {% endif %} {% endfor %} + {% if is_on_wl %} + + +
  • + {% endif %} @@ -163,7 +188,7 @@
  • ActionsTimeCharacter NameTitleMessage{{ _('Actions') }}{{ _('Time') }}{{ _('Character Name') }}{{ _('Title') }}{{ _('Message') }}
    - - + + {{ fb.time }} {{ fb.character.eve_name }} {{ fb.title }}{{ fb.message }}{% autoescape false %}{{ fb.message|e|replace('\n', '
    ') }}{% endautoescape %}
    - + @@ -180,17 +205,17 @@ - + - + - + @@ -202,8 +227,9 @@
    {% if not group.enabled %} {% endif %} {% if is_on_wl %} @@ -213,7 +239,7 @@ {% if events|length > 0 %}
    -
    Events{%if events|length > 1%}{% endif %}
    +
    {{ _('Events') }}{%if events|length > 1%}{% endif %}
    @@ -249,7 +275,7 @@

    0 {% endif %} {{wlist.displayTitle|e }} - +

    @@ -260,7 +286,9 @@

    {% endfor %} {% else %} -

    All Waitlists are closed!

    +
    +

    {{ _('All Waitlists are closed!') }}

    +
    {% endif %} {% endblock %} diff --git a/templates/libs/eve-ui.html b/templates/libs/eve-ui.html index 817bc9de..6b09b8f6 100644 --- a/templates/libs/eve-ui.html +++ b/templates/libs/eve-ui.html @@ -1,7 +1,6 @@ {% assets filters="babili", output="gen/eve-ui.%(version)s.js", "js/eve-ui-config.js" %} {% endassets %} - \ No newline at end of file + \ No newline at end of file diff --git a/templates/logout.html b/templates/logout.html index 365a2d37..7f75e366 100644 --- a/templates/logout.html +++ b/templates/logout.html @@ -1,8 +1,8 @@ {% extends "base.html" %} -{% block title %}Logout{% endblock %} +{% block title %}{{ _('Logout') }}{% endblock %} {% block head %} {{super()}} {% endblock %} {% block data %} -

    You are now logged out!

    +

    {{ _('You are now logged out!') }}

    {% endblock %} \ No newline at end of file diff --git a/templates/mainmenu/dropdown.html b/templates/mainmenu/dropdown.html new file mode 100644 index 00000000..63e21de3 --- /dev/null +++ b/templates/mainmenu/dropdown.html @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/templates/mainmenu/dropdownitem.html b/templates/mainmenu/dropdownitem.html new file mode 100644 index 00000000..c3b7337f --- /dev/null +++ b/templates/mainmenu/dropdownitem.html @@ -0,0 +1,7 @@ +{% if customhtml %} + {{ customhtml|safe }} +{% else %} + + {% if item.iconclass %} {% endif %}{{item.title}} + +{% endif %} \ No newline at end of file diff --git a/templates/mainmenu/item.html b/templates/mainmenu/item.html new file mode 100644 index 00000000..20f1e72a --- /dev/null +++ b/templates/mainmenu/item.html @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/templates/mainmenu/menu.html b/templates/mainmenu/menu.html new file mode 100644 index 00000000..cf674f06 --- /dev/null +++ b/templates/mainmenu/menu.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/templates/mainmenu/navbar.html b/templates/mainmenu/navbar.html new file mode 100644 index 00000000..8a81df39 --- /dev/null +++ b/templates/mainmenu/navbar.html @@ -0,0 +1,36 @@ + \ No newline at end of file diff --git a/templates/notifications/alarm.html b/templates/notifications/alarm.html index ac8ea61e..ab68738e 100644 --- a/templates/notifications/alarm.html +++ b/templates/notifications/alarm.html @@ -1,13 +1,13 @@ {% extends "base.html" %} -{% block title %}Alarm{% endblock %} +{% block title %}{{ _('Alarm') }}{% endblock %} {% block head %} {{ super() }} - {% assets filters="babili", output="gen/alarm.%(version)s.js", "js/base.js", "js/notification/alarm.js" %} + {% assets filters="babili", output="gen/alarm.%(version)s.js", "js/notification/alarm.js" %} {% endassets %} {% endblock head %} @@ -23,7 +23,7 @@
    Fleet Manager{{_('Fleet Manager')}}
    Constellation{{ _('Constellation') }}
    Dockup{{ _('Dockup') }}
    HQ System{{ _('HQ System') }}
    - + @@ -33,18 +33,18 @@
    - - - +
    WL Groupopenxuplogidpssniperother{{ _('WL Group') }}{{ _('open') }}{{ _('xup') }}{{ _('logi') }}{{ _('dps') }}{{ _('sniper') }}{{ _('other') }}
    - + diff --git a/templates/partials/i18n.js b/templates/partials/i18n.js new file mode 100644 index 00000000..446a18ab --- /dev/null +++ b/templates/partials/i18n.js @@ -0,0 +1,6 @@ +var i18nloaded = $.i18n({ + locale: '{{ lang_code }}' +}).load({ + en: {% assets "i18n.en" %}'{{ ASSET_URL }}'{% endassets %}, + de: {% assets "i18n.de" %}'{{ ASSET_URL }}'{% endassets %}, +}); \ No newline at end of file diff --git a/templates/partials/themes_selector.html b/templates/partials/themes_selector.html index 8f86d981..47838667 100644 --- a/templates/partials/themes_selector.html +++ b/templates/partials/themes_selector.html @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/templates/settings/accounts.html b/templates/settings/accounts.html index f2e098d8..ea49cbe3 100644 --- a/templates/settings/accounts.html +++ b/templates/settings/accounts.html @@ -1,6 +1,6 @@ {% extends "settings/base.html" %} -{% block title %}Settings - Accounts{% endblock %} +{% block title %}{{ _('Settings') }} - {{ _('Accounts') }}{% endblock %} {% block head %} @@ -16,7 +16,7 @@ {{ super() }} -{% assets filters="cssmin", output="gen/fileinput.%(version)s.css", "css/fileinput.css" %} +{% assets filters="csscomp", output="gen/fileinput.%(version)s.css", "css/fileinput.css" %} {% endassets %} @@ -28,12 +28,8 @@ {% endassets %} -{% assets filters="babili", output="gen/swagger-client.%(version)s.js", "js/swagger-client.min.js" %} - -{% endassets %} - -{% assets filters="babili", output="gen/acc-cc-list.%(version)s.js", "js/base.js", "js/eve-igb-wrapper.js", -"js/editablegrid/editablegrid_customrenderer.js", "js/accounts/accountslist-dom.js", "js/accounts/settings-accounts.js" %} +{% assets filters="babili", output="gen/acc-cc-list.%(version)s.js", "js/eve-igb-wrapper.js", +"js/editablegrid/editablegrid_customrenderer.js", "js/accounts/editablegrid_filter.js", "js/accounts/role_filter.js", "js/accounts/accountslist-dom.js", "js/accounts/settings-accounts.js" %} {% endassets %} {% endblock %} @@ -44,73 +40,91 @@
    - +
    - +
    - +
    - + {% endif %}
    - +
    -
    -
    - Filter +
    +
    +
    + {{ _('Filter') }} +
    +
    -
    +
    +
    +
    + {{ _('Role Filter') }} +
    + +
    +
    +
    +
    TargetExpression Need Help?Enabled{{ _('Target') }}{{ _('Expression') }} {{ _('Need Help?') }}{{ _('Enabled') }}
    - - - - - - - {# #} + + + + + + @@ -118,8 +132,12 @@ {% for acc in accounts %} - - - - + + + + - {# #} - + {% endfor %} @@ -154,37 +180,37 @@ - + @@ -197,38 +223,38 @@ - + diff --git a/templates/settings/bans.html b/templates/settings/bans.html index 012024de..0ce7e559 100644 --- a/templates/settings/bans.html +++ b/templates/settings/bans.html @@ -1,26 +1,26 @@ {% extends "settings/base.html" %} -{% block title %}Settings - Bans{% endblock %} +{% block title %}{{ _('Settings') }} - {{ _('Bans') }}{% endblock %} {% block head %} {{ super() }} {% endblock %} {% block content %} -
    +
    {% if perm_manager.get_permission('bans_edit_multiple').can() %}
    - +
    - +
    - + {% endif %} {% if perm_manager.get_permission('bans_edit').can() and not perm_manager.get_permission('bans_edit_multiple') %} @@ -28,25 +28,25 @@
    - +
    - +
    - + {% endif %}
    ActionsStatusAccount NameRolesCurrent CharAltsEmail{{ _('Actions') }}{{ _('Status') }}{{ _('Account Name') }}{{ _('Roles') }}{{ _('Current Char') }}{{ _('Alts') }} #
    - - + + {% if not acc.had_welcome_mail %} {% set is_rbadge = ['1'] %} {% set is_tbadge = ['1'] %} @@ -132,16 +150,24 @@ {% endfor %} {% set is_rbadge = (is_rbadge|length > 1) %} {% set is_tbadge = (is_tbadge|length > 1) %} - + {% endif %} {% if acc.disabled %}Deactivated{% else %}Active{% endif %}{{ acc.username }}{% if not acc.had_welcome_mail %}New{% endif %}{% for role in acc.roles %}{{role.name}}{% if not loop.last %}, {% endif %}{% endfor %}{{ acc.current_char_obj.eve_name }}{% if acc.disabled %}{{ _('Deactivated') }}{% else %}{{ _('Active') }}{% endif %}{{ acc.username }} + {% if not acc.had_welcome_mail %} + New + {% endif %} + {% for role in acc.roles %} + {{role.name}}{% if not loop.last %}, {% endif %} + {% endfor %} + {{ acc.current_char_obj.eve_name }} {{acc.id}};{% for character in acc.characters %}{{character.id}}:{{character.eve_name}}{% if not loop.last %},{% endif %}{% endfor %}{% if acc.email is not none %}{{ acc.email }}{% endif %}{{ acc.id }}{{ acc.id }}
    - - - - - + + + + + @@ -60,7 +60,7 @@ - + diff --git a/templates/settings/base.html b/templates/settings/base.html index 723c2c91..2aab260e 100644 --- a/templates/settings/base.html +++ b/templates/settings/base.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}Settings{% endblock %} +{% block title %}{{ _('Settings') }}{% endblock %} {% block head %} {{ super() }} @@ -8,10 +8,10 @@ {% block container_data %}
    -
    Char IDCharacter NameReasonByActions{{ _('Char ID') }}{{ _('Character Name') }}{{ _('Reason') }}{{ _('By') }}{{ _('Actions') }}
    - + {% for cc in fcs %} @@ -20,7 +20,7 @@

    FC

    LM

    UsernameVotes
    {{ _('Username') }}{{ _('Votes') }}
    {{cc[0]}}{{cc[1]}}
    - + {% for cc in lms %} @@ -29,9 +29,9 @@

    LM

    UsernameVotes
    {{ _('Username') }}{{ _('Votes') }}
    {{cc[0]}}{{cc[1]}}
    -

    Unique Voters for FC

    +

    {{ _('Unique Voters for FC') }}

    - + {% for cc in ufcs %} @@ -40,9 +40,9 @@

    Unique Voters for FC

    UsernameVotes
    {{ _('Username') }}{{ _('Votes') }}
    {{cc[0]}}{{cc[1]}}
    -

    Unique Voters for LM

    +

    {{ _('Unique Voters for LM') }}

    - + {% for cc in ulms %} diff --git a/templates/settings/fleet.html b/templates/settings/fleet.html index b557e11a..160cd1b8 100644 --- a/templates/settings/fleet.html +++ b/templates/settings/fleet.html @@ -1,15 +1,15 @@ {% extends "settings/base.html" %} -{% block title %}Settings - Fleet Settings{% endblock %} +{% block title %}{{ _('Settings') }} - {{ _('Fleet Settings') }}{% endblock %} {% block head %} {{ super() }} -{% assets filters="cssmin", output="gen/fleetsettings-typeahead.%(version)s.css", "css/typeaheadjs.css", "css/settings-fleet.css" %} +{% assets filters="csscomp", output="gen/fleetsettings-typeahead.%(version)s.css", "css/typeaheadjs.css", "css/settings-fleet.css" %} {% endassets %} -{% assets filters="babili", output="gen/fleetsettings.%(version)s.js", "js/base.js", "js/fleet-settings.js" %} +{% assets filters="babili", output="gen/fleetsettings.%(version)s.js", "js/fleet-settings.js" %} {% endassets %} @@ -23,7 +23,7 @@
    - +
    {% for group in groups %} @@ -31,34 +31,34 @@ - +
    UsernameVotes
    {{ _('Username') }}{{ _('Votes') }}
    {{cc[0]}}{{cc[1]}}
    - + - + - + - + {% if perm_manager.get_permission('fleet_location_edit').can() %} - - + + - + @@ -162,16 +162,16 @@ - + {% endif %} - + @@ -193,30 +193,30 @@ - + - + - + {% for fleet in group.fleets %} - + {% endfor %} @@ -238,8 +238,8 @@ diff --git a/templates/settings/fleet_motd/index.html b/templates/settings/fleet_motd/index.html index 360a6cfc..0fe87228 100644 --- a/templates/settings/fleet_motd/index.html +++ b/templates/settings/fleet_motd/index.html @@ -8,26 +8,26 @@ {% block content %}

    $ts$ gets replaced with the server address

    -TS: $ts$
    +{{ _('TS: $ts$') }}
    -

    HQ/AS MOTD

    +

    {{ _('HQ/AS MOTD') }}

    - +

    -

    VG MOTD

    +

    {{ _('VG MOTD') }}

    - +
    - + {% endblock content %} \ No newline at end of file diff --git a/templates/settings/fleetspy/spy.html b/templates/settings/fleetspy/spy.html index aa7fcce2..6a2aa48c 100644 --- a/templates/settings/fleetspy/spy.html +++ b/templates/settings/fleetspy/spy.html @@ -7,7 +7,7 @@ -{% assets filters="babili", output="gen/fleetview.%(version)s.js", "js/base.js", "js/swagger-client.min.js", "js/fleetview/fleetview.js" %} +{% assets filters="babili", output="gen/fleetview.%(version)s.js", "js/swagger-client.min.js", "js/fleetview/fleetview.js" %} {% endassets %} @@ -16,8 +16,8 @@
    - + {% for fleet in fleets %} {% endfor %} diff --git a/templates/settings/inserts.html b/templates/settings/inserts.html index add8f290..cb91b6ed 100644 --- a/templates/settings/inserts.html +++ b/templates/settings/inserts.html @@ -6,14 +6,14 @@ {{ super() }} {% endblock head %} {% block content %} -

    $type$ gets replaced with number representing the type of a person, 0=linemember,1=fc/t,2=lm/r,3=both

    -

    Page Inserts

    +

    {{ _('$type$ gets replaced with number representing the type of a person, 0=linemember,1=fc/t,2=lm/r,3=both') }}

    +

    {{ _('Page Inserts') }}

    - +
    - + {% endblock content %} \ No newline at end of file diff --git a/templates/settings/mail/index.html b/templates/settings/mail/index.html index a7435a1c..02ba9675 100644 --- a/templates/settings/mail/index.html +++ b/templates/settings/mail/index.html @@ -1,6 +1,6 @@ {% extends "settings/base.html" %} -{% block title %}Settings - IG Mail{% endblock %} +{% block title %}{{ _('Settings') }} - {{ _('IG Mail') }}{% endblock %} {% block head %} {{ super() }} @@ -8,25 +8,25 @@ {% block raw_content %}
    {% if perm_manager.get_permission('welcome_mail_edit').can() %} -

    Default Mail

    +

    {{ _('Default Mail') }}

    - +
    - +
     
    -Hello $recv$,
    +{{ _('Hello $recv$,
    welcome to the Community program!
    your <a href="$link$">Login Link</a> save it as a bookmark!

    sincerely
    -$sig$
    +$sig$
    ') }}
    @@ -37,49 +37,49 @@

    T-Badge Mail

    - +
    - +
     
    -Hello $recv$,
    +{{ _('Hello $recv$,
    welcome to the T-Badge program!
    your <a href="$link$">Login Link</a> save it as a bookmark!

    sincerely
    -$sig$
    +$sig$
    ') }}
    {% endif %} {% if perm_manager.get_permission('welcome_mail_edit').can() %} -

    Resident Mail

    +

    {{ _('Resident Mail') }}

    - +
    - +
     
    -Hello $recv$,
    +{{ _('Hello $recv$,
    welcome to the R-Badge program!
    your <a href="$link$">Login Link</a> save it as a bookmark!

    sincerely
    -$sig$
    +$sig$
    ') }}
    - + {% endif %}
    diff --git a/templates/settings/overview.html b/templates/settings/overview.html index 4f023c31..2465836b 100644 --- a/templates/settings/overview.html +++ b/templates/settings/overview.html @@ -9,10 +9,7 @@ integrity="sha256-q4eNahhjrmTWF+LAesQ+rDagZhwcegBpS7qE0UAjJx4=" crossorigin="anonymous"> - {% assets filters="babili", output="gen/swagger-client.%(version)s.js", "js/swagger-client.min.js" %} - - {% endassets %} - {% assets filters="babili", output="gen/settings.overview.%(version)s.js", "js/base.js", + {% assets filters="babili", output="gen/settings.overview.%(version)s.js", "js/overview/overview.js" %} {% endassets %} diff --git a/templates/settings/permissions/config.html b/templates/settings/permissions/config.html index f8824ee4..9199a936 100644 --- a/templates/settings/permissions/config.html +++ b/templates/settings/permissions/config.html @@ -1,11 +1,11 @@ {% extends "settings/base.html" %} -{% block title %}Settings - Permissions{% endblock %} +{% block title %}{{ _('Settings') }} - {{ _('Permissions') }}{% endblock %} {% block head %} {{ super() }} - {% assets filters="babili", output="gen/permission-config.%(version)s.js", "js/base.js", "js/permissions/config.js" %} + {% assets filters="babili", output="gen/permission-config.%(version)s.js", "js/permissions/config.js" %} {% endassets %} {% endblock %} @@ -16,14 +16,14 @@
    - +
    - +
    - +
    Display Name{{ _('Display Name') }} {{group.displayName}}
    - {% if perm_manager.get_permission('fleet_custom_status').can() %} + {% if perm_manager.get_permission('fleet_custom_display_name_all').can() %} {% else %} - + + + + {% endif %} - +
    Status{{ _('Status') }} {{group.status}}
    @@ -67,27 +67,27 @@ {% if perm_manager.get_permission('fleet_custom_status').can() %} {% else %} - - - - + + + {% endif %}
    - - + +
    - - + +
    - +
    FC{{ _('FC') }} {% for fc in group.fcs %} {{fc.get_eve_name()}} @@ -103,12 +103,12 @@
    - +
    Fleet Manager{{ _('Fleet Manager') }} {% for manager in group.manager %} {{manager.get_eve_name()}} @@ -125,32 +125,32 @@ - +
    Constellation{% if group.constellation is not none %}{{group.constellation.constellationName}}{% else %}Not Set{% endif %}{{ _('Constellation') }}{% if group.constellation is not none %}{{group.constellation.constellationName}}{% else %}{{ _('Not Set') }}{% endif %}
    - +
    Dockup{{ _('Dockup') }} {% if group.dockup is not none %}{{group.dockup.stationName}}{% else %}Not Set{% endif %}
    - +
    Backseats:{{ _('Backseats') }}: {% for backseat in group.backseats %} - {{backseat.current_char_obj.get_eve_name()}} + {{backseat.get_eve_name()}}
    @@ -183,7 +183,7 @@ - +
    Register for Fleet{{ _('Register for Fleet') }}
    - Take over a Fleet + {{ _('Take over a Fleet') }}
    Fleet IDCurrent Fleet CompActions{{ _('Fleet ID') }}{{ _('Current Fleet Comp') }}{{ _('Actions') }}
    {{fleet.fleetID}}{% if fleet.comp %}{{fleet.comp.get_eve_name()}}{% else %}{{None}}{% endif %}{% if fleet.comp %}{{fleet.comp.get_eve_name()}}{% else %}{{ _('None') }}{% endif %} - - Change Fleet Type - Change Squads - + + {{ _('Change Fleet Type') }} + {{ _('Change Squads') }} +