Mercurial > gemma
changeset 1480:9b81ac91a43e
fix: linting
line wrap: on
line diff
--- a/client/src/components/App.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/App.vue Tue Dec 04 10:02:31 2018 +0100 @@ -27,9 +27,7 @@ </div> <Zoom v-if="routeName == 'mainview'"></Zoom> </div> - <div class="d-flex flex-column"> - <router-view/> - </div> + <div class="d-flex flex-column"><router-view /></div> <vue-snotify></vue-snotify> </div> </template>
--- a/client/src/components/Login.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/Login.vue Tue Dec 04 10:02:31 2018 +0100 @@ -3,16 +3,19 @@ <div class="m-5"> <!-- logo section --> <div class="d-flex flex-row justify-content-center mb-3"> - <div class="logo mr-3"> - <img src="../assets/logo.png"> - </div> + <div class="logo mr-3"><img src="../assets/logo.png" /></div> <div class="title"> <h1>{{ appTitle }}</h1> </div> </div> <!-- end logo section --> <form class="loginform mx-auto" @submit.prevent="login"> - <div id="alert" :style="errorMessageStyle" :class="errorMessageClass" role="alert"> + <div + id="alert" + :style="errorMessageStyle" + :class="errorMessageClass" + role="alert" + > <span>{{ errorMessage }}</span> </div> <div class="input-group mb-3"> @@ -24,7 +27,7 @@ :placeholder="usernameLabel" required autofocus - > + /> </div> <div class="input-group mb-3"> <input @@ -35,16 +38,20 @@ :placeholder="passwordLabel" :required="!showPasswordReset" :disabled="showPasswordReset" - > + /> <div class="input-group-append"> - <span class="input-group-text disabled" id="basic-addon2" @click="showPassword"> - <font-awesome-icon icon="eye" v-if="!readablePassword"/> - <font-awesome-icon icon="eye-slash" v-if="readablePassword"/> + <span + class="input-group-text disabled" + id="basic-addon2" + @click="showPassword" + > + <font-awesome-icon icon="eye" v-if="!readablePassword" /> + <font-awesome-icon icon="eye-slash" v-if="readablePassword" /> </span> </div> </div> <button - v-if="showPasswordReset==false" + v-if="showPasswordReset == false" class="btn btn-primary btn-block shadow-sm" :disabled="submitted || showPasswordReset" type="submit" @@ -52,7 +59,11 @@ <translate>Login</translate> </button> <div v-if="showPasswordReset" class="passwordreset"> - <button class="btn btn-block btn-info" type="button" @click="resetPassword"> + <button + class="btn btn-block btn-info" + type="button" + @click="resetPassword" + > <translate>Request password reset!</translate> </button> <div class="pull-right"> @@ -70,11 +81,11 @@ <!-- bottom logo section --> <div class="mb-3 secondary-logo mx-auto mb-auto"> - <img :src="secondaryLogo"> + <img :src="secondaryLogo" /> </div> </div> - </div> -</template>) + </div> </template +>) <style lang="scss" scoped> .login {
--- a/client/src/components/admin/Importqueue.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/Importqueue.vue Tue Dec 04 10:02:31 2018 +0100 @@ -3,7 +3,9 @@ <div :class="spacerStyle"></div> <div class="mt-3"> <div class="card importqueuecard shadow-xs"> - <h6 class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center"> + <h6 + class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center" + > <font-awesome-icon icon="tasks" class="mr-2"></font-awesome-icon> <translate class="headline">Importqueue</translate> </h6> @@ -23,10 +25,13 @@ placeholder aria-label="Search" aria-describedby="search" - > + /> </div> <div class="filters"> - <button @click="setFilter('successful')" :class="successfulStyle"> + <button + @click="setFilter('successful')" + :class="successfulStyle" + > <translate>Successful</translate> </button> <button @click="setFilter('failed')" :class="failedStyle"> @@ -46,26 +51,18 @@ <table class="table"> <thead> <tr> - <th> - <translate>Enqueued</translate> - </th> - <th> - <translate>Kind</translate> - </th> - <th> - <translate>User</translate> - </th> - <th> - <translate>State</translate> - </th> + <th><translate>Enqueued</translate></th> + <th><translate>Kind</translate></th> + <th><translate>User</translate></th> + <th><translate>State</translate></th> </tr> </thead> <tbody> <tr v-for="job in filteredImports" :key="job.id"> - <td>{{job.enqueued}}</td> - <td>{{job.kind}}</td> - <td>{{job.user}}</td> - <td>{{job.state}}</td> + <td>{{ job.enqueued }}</td> + <td>{{ job.kind }}</td> + <td>{{ job.user }}</td> + <td>{{ job.state }}</td> </tr> </tbody> </table>
--- a/client/src/components/admin/Logs.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/Logs.vue Tue Dec 04 10:02:31 2018 +0100 @@ -3,7 +3,10 @@ <div class="d-flex flex-row"> <div :class="spacer"></div> <div class="logoutput text-left bg-white shadow-xs mt-3 mx-3"> - <pre id="code" v-highlightjs="logs"><code class="bash hljs hljs-string"></code></pre> + <pre + id="code" + v-highlightjs="logs" + ><code class="bash hljs hljs-string"></code></pre> </div> </div> <div class="d-flex flex-row logmenu"> @@ -31,10 +34,7 @@ </div> <div class="statuscontainer d-flex flex-row"> <div class="statusline ml-3 mt-1 align-self-center"> - <h3> - <translate>Last refresh:</translate> - {{refreshed}} - </h3> + <h3><translate>Last refresh:</translate> {{ refreshed }}</h3> </div> <div class="refresh"> <button class="btn btn-dark" @click="fetch(currentFile, currentLog)">
--- a/client/src/components/admin/Systemconfiguration.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/Systemconfiguration.vue Tue Dec 04 10:02:31 2018 +0100 @@ -2,7 +2,9 @@ <div class="d-flex flex-row"> <div :class="spacerStyle"></div> <div class="card sysconfig mt-3 shadow-xs"> - <h6 class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center"> + <h6 + class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center" + > <font-awesome-icon icon="wrench" class="mr-2"></font-awesome-icon> <translate class="headline">Systemconfiguration</translate> </h6> @@ -11,13 +13,13 @@ <h4 class="card-title"> <translate>Bottleneck Areas stroke-color</translate> </h4> - <compact-picker v-model="strokeColor"/> + <compact-picker v-model="strokeColor" /> </section> <section> <h4 class="card-title"> <translate>Bottleneck Areas fill-color</translate> </h4> - <chrome-picker v-model="fillColor"/> + <chrome-picker v-model="fillColor" /> </section> <div class="sendbutton"> <a @click.prevent="submit" class="btn btn-info text-white">
--- a/client/src/components/admin/importschedule/Importschedule.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/importschedule/Importschedule.vue Tue Dec 04 10:02:31 2018 +0100 @@ -3,7 +3,9 @@ <div :class="spacerStyle"></div> <div class="mt-3"> <div class="card schedulecard shadow-xs"> - <h6 class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center"> + <h6 + class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center" + > <font-awesome-icon icon="clock" class="mr-2"></font-awesome-icon> <translate class="headline">Importschedule</translate> </h6> @@ -23,27 +25,17 @@ placeholder aria-label="Search" aria-describedby="search" - > + /> </div> </div> <table v-if="schedules.length" class="table"> <thead> <tr> - <th> - <translate>Import</translate> - </th> - <th> - <translate>Type</translate> - </th> - <th> - <translate>Author</translate> - </th> - <th> - <translate>Schedule</translate> - </th> - <th> - <translate>Email</translate> - </th> + <th><translate>Import</translate></th> + <th><translate>Type</translate></th> + <th><translate>Author</translate></th> + <th><translate>Schedule</translate></th> + <th><translate>Email</translate></th> <th> </th> <th> </th> </tr> @@ -56,10 +48,17 @@ <td></td> <td></td> <td> - <font-awesome-icon icon="pencil-alt" fixed-width></font-awesome-icon> + <font-awesome-icon + icon="pencil-alt" + fixed-width + ></font-awesome-icon> </td> <td> - <font-awesome-icon @click="deleteSchedule" icon="trash" fixed-width></font-awesome-icon> + <font-awesome-icon + @click="deleteSchedule" + icon="trash" + fixed-width + ></font-awesome-icon> </td> </tr> </tbody> @@ -67,7 +66,10 @@ <div v-else class="mt-4 small text-center py-3"> <translate>No schedules</translate> </div> - <button @click="newImport" class="btn btn-info position-absolute newbutton"> + <button + @click="newImport" + class="btn btn-info position-absolute newbutton" + > <translate>New Import</translate> </button> </div>
--- a/client/src/components/admin/importschedule/Importscheduledetail.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/importschedule/Importscheduledetail.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,7 +1,9 @@ <template> <div class="importscheduledetails" v-if="importScheduleDetailVisible"> <div class="card shadow-xs"> - <h6 class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center"> + <h6 + class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center" + > <translate>New import</translate> <span @click="closeDetailview" class="closebutton"> <font-awesome-icon icon="times"></font-awesome-icon>
--- a/client/src/components/admin/usermanagement/Passwordfield.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/usermanagement/Passwordfield.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,6 +1,6 @@ <template> <div> - <label for="password">{{this.label}}</label> + <label for="password">{{ this.label }}</label> <div class="d-flex d-row"> <input :type="isPasswordVisible" @@ -8,15 +8,17 @@ class="form-control" :placeholder="placeholder" :required="required" - > + /> <span class="input-group-text" @click="showPassword"> - <font-awesome-icon :icon="readablePassword ? 'eye-slash' : 'eye'"></font-awesome-icon> + <font-awesome-icon + :icon="readablePassword ? 'eye-slash' : 'eye'" + ></font-awesome-icon> </span> </div> <div v-show="passworderrors" class="text-danger"> <small> <font-awesome-icon icon="exclamation-triangle"></font-awesome-icon> - {{ this.passworderrors}} + {{ this.passworderrors }} </small> </div> </div>
--- a/client/src/components/admin/usermanagement/Userdetail.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/usermanagement/Userdetail.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,7 +1,9 @@ <template> <div class="userdetails h-100 mt-3 mr-auto shadow fadeIn animated"> <div class="card"> - <h6 class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center"> + <h6 + class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center" + > {{ this.cardHeader }} <span @click="closeDetailview" class="closebutton"> <font-awesome-icon icon="times"></font-awesome-icon> @@ -11,9 +13,7 @@ <form @submit.prevent="save" class="ml-3"> <div class="formfields"> <div v-if="currentUser.isNew" class="form-group row"> - <label for="user"> - <translate>Username</translate> - </label> + <label for="user"> <translate>Username</translate> </label> <input type="user" :placeholder="userNamePlaceholder" @@ -21,18 +21,18 @@ id="user" aria-describedby="userHelp" v-model="currentUser.user" - > + /> <div v-show="errors.user" class="text-danger"> <small> - <font-awesome-icon icon="exclamation-triangle"></font-awesome-icon> + <font-awesome-icon + icon="exclamation-triangle" + ></font-awesome-icon> {{ errors.user }} </small> </div> </div> <div class="form-group row"> - <label for="country"> - <translate>Country</translate> - </label> + <label for="country"> <translate>Country</translate> </label> <select class="form-control form-control-sm" v-on:change="validateCountry" @@ -45,19 +45,20 @@ v-for="country in countries" v-bind:value="country" v-bind:key="country" - >{{country}}</option> + >{{ country }}</option + > </select> <div v-show="errors.country" class="text-danger"> <small> - <font-awesome-icon icon="exclamation-triangle"></font-awesome-icon> + <font-awesome-icon + icon="exclamation-triangle" + ></font-awesome-icon> {{ errors.country }} </small> </div> </div> <div class="form-group row"> - <label for="email"> - <translate>Email address</translate> - </label> + <label for="email"> <translate>Email address</translate> </label> <input type="email" v-on:change="validateEmailaddress" @@ -65,18 +66,18 @@ id="email" aria-describedby="emailHelp" v-model="currentUser.email" - > + /> <div v-show="errors.email" class="text-danger"> <small> - <font-awesome-icon icon="exclamation-triangle"></font-awesome-icon> + <font-awesome-icon + icon="exclamation-triangle" + ></font-awesome-icon> {{ errors.email }} </small> </div> </div> <div class="form-group row"> - <label for="role"> - <translate>Role</translate> - </label> + <label for="role"> <translate>Role</translate> </label> <select class="form-control form-control-sm" v-on:change="validateRole" @@ -97,7 +98,9 @@ </select> <div v-show="errors.role" class="text-danger"> <small> - <font-awesome-icon icon="exclamation-triangle"></font-awesome-icon> + <font-awesome-icon + icon="exclamation-triangle" + ></font-awesome-icon> {{ errors.role }} </small> </div> @@ -120,21 +123,23 @@ </div> </div> <div> - <button type="submit" :disabled="submitted" class="shadow-sm btn btn-info pull-right"> + <button + type="submit" + :disabled="submitted" + class="shadow-sm btn btn-info pull-right" + > <translate>Submit</translate> </button> </div> <div - v-if="currentUser.role !='waterway_user' " + v-if="currentUser.role != 'waterway_user'" class="form-group row d-flex flex-row justify-content-start mailbutton" > <a @click="sendTestMail" class="btn btn-light"> <font-awesome-icon icon="paper-plane"></font-awesome-icon> <translate>Send testmail</translate> </a> - <div v-if="mailsent"> - <translate>Mail was sent</translate> - </div> + <div v-if="mailsent"><translate>Mail was sent</translate></div> </div> </form> </div>
--- a/client/src/components/admin/usermanagement/Usermanagement.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/admin/usermanagement/Usermanagement.vue Tue Dec 04 10:02:31 2018 +0100 @@ -5,8 +5,13 @@ <div class="d-flex flex-row"> <div :class="userlistStyle"> <div class="card"> - <h6 class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center"> - <font-awesome-icon icon="users-cog" class="mr-2"></font-awesome-icon> + <h6 + class="mb-0 py-2 px-3 border-bottom d-flex text-info align-items-center" + > + <font-awesome-icon + icon="users-cog" + class="mr-2" + ></font-awesome-icon> <translate class="headline">Users</translate> </h6> <div class="card-body"> @@ -14,38 +19,64 @@ <thead> <tr> <th scope="col" @click="sortBy('user')"> - <span>Username - <font-awesome-icon v-if="sortCriterion=='user'" icon="angle-down"></font-awesome-icon> + <span + >Username + <font-awesome-icon + v-if="sortCriterion == 'user'" + icon="angle-down" + ></font-awesome-icon> </span> </th> <th scope="col" @click="sortBy('country')"> - <span>Country - <font-awesome-icon v-if="sortCriterion=='country'" icon="angle-down"></font-awesome-icon> + <span + >Country + <font-awesome-icon + v-if="sortCriterion == 'country'" + icon="angle-down" + ></font-awesome-icon> </span> </th> <th scope="col" @click="sortBy('email')"> - <span>Email - <font-awesome-icon v-if="sortCriterion=='email'" icon="angle-down"></font-awesome-icon> + <span + >Email + <font-awesome-icon + v-if="sortCriterion == 'email'" + icon="angle-down" + ></font-awesome-icon> </span> </th> <th scope="col" @click="sortBy('role')"> - <span>Role - <font-awesome-icon v-if="sortCriterion=='role'" icon="angle-down"></font-awesome-icon> + <span + >Role + <font-awesome-icon + v-if="sortCriterion == 'role'" + icon="angle-down" + ></font-awesome-icon> </span> </th> <th scope="col"></th> </tr> </thead> <tbody> - <tr v-for="user in users" :key="user.user" @click="selectUser(user.user)"> + <tr + v-for="user in users" + :key="user.user" + @click="selectUser(user.user)" + > <td>{{ user.user }}</td> <td>{{ user.country }}</td> - <td>{{ user.email}}</td> + <td>{{ user.email }}</td> <td> - <font-awesome-icon :icon="roleIcon(user.role)" @click="deleteUser(user.user)"></font-awesome-icon> + <font-awesome-icon + :icon="roleIcon(user.role)" + @click="deleteUser(user.user)" + ></font-awesome-icon> </td> <td> - <font-awesome-icon icon="trash" @click="deleteUser(user.user)"></font-awesome-icon> + <font-awesome-icon + icon="trash" + @click="deleteUser(user.user)" + ></font-awesome-icon> </td> </tr> </tbody> @@ -59,7 +90,7 @@ > <font-awesome-icon icon="angle-left"></font-awesome-icon> </button> - {{this.currentPage}} / {{this.pages}} + {{ this.currentPage }} / {{ this.pages }} <button @click="nextPage" v-if="this.currentPage !== this.pages" @@ -69,13 +100,16 @@ </button> </div> <div class="mr-3 pb-3"> - <button @click="addUser " class="btn btn-info pull-right shadow-sm"> + <button + @click="addUser" + class="btn btn-info pull-right shadow-sm" + > <translate>Add User</translate> </button> </div> </div> </div> - <Userdetail v-if="isUserDetailsVisible "></Userdetail> + <Userdetail v-if="isUserDetailsVisible"></Userdetail> </div> </div> </div>
--- a/client/src/components/map/Identify.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/Identify.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,5 +1,10 @@ <template> - <div :class="['box ui-element rounded bg-white text-nowrap', { expanded: showIdentify }]"> + <div + :class="[ + 'box ui-element rounded bg-white text-nowrap', + { expanded: showIdentify } + ]" + > <div style="width: 20rem"> <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center"> <font-awesome-icon icon="info" class="mr-2"></font-awesome-icon> @@ -13,17 +18,30 @@ <div class="d-flex flex-column features p-3 flex-grow-1 text-left"> <div v-if="currentMeasurement"> <b> - {{ currentMeasurement.quantity }} - ({{ currentMeasurement.unitSymbol }}): + {{ currentMeasurement.quantity }} ({{ + currentMeasurement.unitSymbol + }}): </b> - <br> + <br /> <small>{{ currentMeasurement.value }}</small> </div> <div v-for="(feature, i) of identifiedFeatures" :key="feature.getId()"> <div v-if="feature.getId()" :class="{ 'mt-2': i }"> - <b>{{ feature.getId().replace(/[.][^.]*$/,"") /* cut away everything from the last . to the end */}}:</b> - <small v-for="(value, key) in prepareProperties(feature)" :key="key"> - <div v-if="value">{{key}}:{{value}}</div> + <b + >{{ + feature + .getId() + .replace( + /[.][^.]*$/, + "" + ) /* cut away everything from the last . to the end */ + }}:</b + > + <small + v-for="(value, key) in prepareProperties(feature)" + :key="key" + > + <div v-if="value">{{ key }}:{{ value }}</div> </small> </div> </div> @@ -35,23 +53,19 @@ </div> </div> <div class="versioninfo border-top p-3 text-left"> - <span v-translate="{license: 'AGPL-3.0-or-later'}"> - This app uses - <i>gemma</i>, which is Free Software under - <br> - %{ license } - without warranty, see docs for details. + <span v-translate="{ license: 'AGPL-3.0-or-later' }"> + This app uses <i>gemma</i>, which is Free Software under <br /> + %{ license } without warranty, see docs for details. </span> - <br> + <br /> <a href="https://hg.intevation.de/gemma/file/tip"> <translate>source-code</translate> </a> - {{ versionStr }} - <br>© via donau. ⓔ Intevation. - <br> - <span v-translate="{name: 'OpenSteetMap'}">Some data © - <a href="https://www.openstreetmap.org/copyright">%{ name }</a> - <span >contributors.</span> + {{ versionStr }} <br />© via donau. ⓔ Intevation. <br /> + <span v-translate="{ name: 'OpenSteetMap' }" + >Some data © + <a href="https://www.openstreetmap.org/copyright">%{ name }</a> + <span>contributors.</span> </span> </div> </div>
--- a/client/src/components/map/Pdftool.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/Pdftool.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,8 +1,14 @@ <template> - <div :class="['box ui-element rounded bg-white text-nowrap', { expanded: showPdfTool }]"> + <div + :class="[ + 'box ui-element rounded bg-white text-nowrap', + { expanded: showPdfTool } + ]" + > <div style="width: 20rem"> <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center"> - <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon><translate>Generate PDF</translate> + <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon + ><translate>Generate PDF</translate> <font-awesome-icon icon="times" class="ml-auto text-muted" @@ -22,21 +28,27 @@ value="download" v-model="form.downloadType" selected + /> + <label for="pdfexport-downloadtype-download" class="ml-1 mr-2" + ><translate>Download</translate></label > - <label for="pdfexport-downloadtype-download" class="ml-1 mr-2"><translate>Download</translate></label> <input type="radio" id="pdfexport-downloadtype-open" value="open" v-model="form.downloadType" + /> + <label for="pdfexport-downloadtype-open" class="ml-1" + ><translate>Open in new window</translate></label > - <label for="pdfexport-downloadtype-open" class="ml-1"><translate>Open in new window</translate></label> </small> <button @click="download" type="button" class="btn btn-sm btn-info d-block w-100" - ><translate>Generate PDF</translate></button> + > + <translate>Generate PDF</translate> + </button> </div> </div> </div>
--- a/client/src/components/map/Search.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/Search.vue Tue Dec 04 10:02:31 2018 +0100 @@ -6,7 +6,15 @@ </span> </div> <div - :class="['searchgroup', {'searchgroup-collapsed': !showSearchbar, big: showContextBox && ['bottlenecks', 'staging'].indexOf(contextBoxContent) !== -1 }]" + :class="[ + 'searchgroup', + { + 'searchgroup-collapsed': !showSearchbar, + big: + showContextBox && + ['bottlenecks', 'staging'].indexOf(contextBoxContent) !== -1 + } + ]" > <input @keyup.enter="takeFirstSearchresult" @@ -14,22 +22,40 @@ v-model="searchQuery" type="text" :class="searchInputStyle" - > + /> </div> <div v-if="showSearchbar && searchResults !== null && !showContextBox" class="searchresults border-top ui-element bg-white rounded-bottom d-print-none position-absolute" > - <div v-for="entry of searchResults" :key="entry.name" class="border-top text-left"> - <a href="#" @click.prevent="moveToSearchResult(entry)" class="p-2 d-block text-nowrap"> + <div + v-for="entry of searchResults" + :key="entry.name" + class="border-top text-left" + > + <a + href="#" + @click.prevent="moveToSearchResult(entry)" + class="p-2 d-block text-nowrap" + > <font-awesome-icon icon="ship" v-if="entry.type === 'bottleneck'" class="mr-1" fixed-width /> - <font-awesome-icon icon="water" v-if="entry.type === 'rhm'" class="mr-1" fixed-width/> - <font-awesome-icon icon="city" v-if="entry.type === 'city'" class="mr-1" fixed-width/> + <font-awesome-icon + icon="water" + v-if="entry.type === 'rhm'" + class="mr-1" + fixed-width + /> + <font-awesome-icon + icon="city" + v-if="entry.type === 'city'" + class="mr-1" + fixed-width + /> {{ entry.name }} </a> </div>
--- a/client/src/components/map/Zoom.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/Zoom.vue Tue Dec 04 10:02:31 2018 +0100 @@ -3,7 +3,10 @@ class="d-flex buttoncontainer shadow-xs mb-3 position-absolute" :style="showSplitscreen ? 'margin-bottom: 51vh !important' : ''" > - <button class="zoomButton border-0 bg-white rounded-left ui-element" @click="zoomOut"> + <button + class="zoomButton border-0 bg-white rounded-left ui-element" + @click="zoomOut" + > <font-awesome-icon icon="minus"></font-awesome-icon> </button> <button
--- a/client/src/components/map/contextbox/Bottlenecks.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/contextbox/Bottlenecks.vue Tue Dec 04 10:02:31 2018 +0100 @@ -9,21 +9,32 @@ <a href="#" @click="sortBy('name')" class="sort-link"> <translate>Name</translate> </a> - <font-awesome-icon :icon="sortIcon" class="ml-1" v-if="sortColumn === 'name'"></font-awesome-icon> + <font-awesome-icon + :icon="sortIcon" + class="ml-1" + v-if="sortColumn === 'name'" + ></font-awesome-icon> </div> <div class="col-2"> <a href="#" @click="sortBy('latestMeasurement')" class="sort-link"> - <translate>Latest</translate> - <br> + <translate>Latest</translate> <br /> <translate>Measurement</translate> </a> - <font-awesome-icon :icon="sortIcon" class="ml-1" v-if="sortColumn === 'latestMeasurement'"></font-awesome-icon> + <font-awesome-icon + :icon="sortIcon" + class="ml-1" + v-if="sortColumn === 'latestMeasurement'" + ></font-awesome-icon> </div> <div class="col-3"> <a href="#" @click="sortBy('chainage')" class="sort-link"> <translate>Chainage</translate> </a> - <font-awesome-icon :icon="sortIcon" class="ml-1" v-if="sortColumn === 'chainage'"></font-awesome-icon> + <font-awesome-icon + :icon="sortIcon" + class="ml-1" + v-if="sortColumn === 'chainage'" + ></font-awesome-icon> </div> <div class="col-2"></div> </div> @@ -38,12 +49,21 @@ class="border-top row bottleneck-row mx-0" > <div class="col-5 py-2 text-left"> - <a href="#" @click="selectBottleneck(bottleneck)">{{ bottleneck.properties.name }}</a> + <a href="#" @click="selectBottleneck(bottleneck)">{{ + bottleneck.properties.name + }}</a> + </div> + <div class="col-2 py-2"> + {{ displayCurrentSurvey(bottleneck.properties.current) }} </div> - <div class="col-2 py-2">{{ displayCurrentSurvey(bottleneck.properties.current) }}</div> - <div - class="col-3 py-2" - >{{ displayCurrentChainage(bottleneck.properties.from, bottleneck.properties.from) }}</div> + <div class="col-3 py-2"> + {{ + displayCurrentChainage( + bottleneck.properties.from, + bottleneck.properties.from + ) + }} + </div> <div class="col-2 pr-0 text-right"> <button type="button" @@ -60,17 +80,27 @@ <font-awesome-icon icon="angle-down" fixed-width - v-if="loading !== bottleneck.properties.name && openBottleneck !== bottleneck.properties.name" + v-if=" + loading !== bottleneck.properties.name && + openBottleneck !== bottleneck.properties.name + " ></font-awesome-icon> <font-awesome-icon icon="angle-up" fixed-width - v-if="loading !== bottleneck.properties.name && openBottleneck === bottleneck.properties.name" + v-if=" + loading !== bottleneck.properties.name && + openBottleneck === bottleneck.properties.name + " ></font-awesome-icon> </button> </div> <div - :class="['col-12 p-0', 'surveys', {open: openBottleneck === bottleneck.properties.name}]" + :class="[ + 'col-12 p-0', + 'surveys', + { open: openBottleneck === bottleneck.properties.name } + ]" > <a href="#" @@ -78,7 +108,8 @@ v-for="(survey, index) in openBottleneckSurveys" :key="index" @click="selectSurvey(survey, bottleneck)" - >{{ survey.date_info }}</a> + >{{ survey.date_info }}</a + > </div> </div> </div>
--- a/client/src/components/map/contextbox/Staging.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/contextbox/Staging.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,27 +1,20 @@ <template> <div class="w-90"> <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center"> - <font-awesome-icon icon="clipboard-check" class="mr-2"></font-awesome-icon> + <font-awesome-icon + icon="clipboard-check" + class="mr-2" + ></font-awesome-icon> <translate>Staging Area</translate> </h6> <table class="table mb-0"> <thead> <tr> - <th> - <translate>Name</translate> - </th> - <th> - <translate>Type</translate> - </th> - <th> - <translate>Date</translate> - </th> - <th> - <translate>Imported</translate> - </th> - <th> - <translate>Username</translate> - </th> + <th><translate>Name</translate></th> + <th><translate>Type</translate></th> + <th><translate>Date</translate></th> + <th><translate>Imported</translate></th> + <th><translate>Username</translate></th> <th> </th> <th> </th> </tr> @@ -29,7 +22,9 @@ <tbody v-if="filteredData.length"> <tr v-for="data in filteredData" :key="data.id"> <td> - <a @click="zoomTo(data.id)" href="#">{{ data.summary.bottleneck }}</a> + <a @click="zoomTo(data.id)" href="#">{{ + data.summary.bottleneck + }}</a> </td> <td>{{ data.kind.toUpperCase() }}</td> <td>{{ data.summary.date }}</td> @@ -38,7 +33,12 @@ <td> <button @click="toggleApproval(data.id, $options.STATES.APPROVED)" - :class="{btn:true, 'btn-sm':true, 'btn-outline-success':needsApproval(data) || isRejected(data), 'btn-success':isApproved(data)}" + :class="{ + btn: true, + 'btn-sm': true, + 'btn-outline-success': needsApproval(data) || isRejected(data), + 'btn-success': isApproved(data) + }" > <font-awesome-icon icon="check"></font-awesome-icon> </button> @@ -46,7 +46,12 @@ <td> <button @click="toggleApproval(data.id, $options.STATES.REJECTED)" - :class="{btn:true, 'btn-sm':true, 'btn-outline-danger':needsApproval(data) || isApproved(data), 'btn-danger':isRejected(data)}" + :class="{ + btn: true, + 'btn-sm': true, + 'btn-outline-danger': needsApproval(data) || isApproved(data), + 'btn-danger': isRejected(data) + }" > <font-awesome-icon icon="times"></font-awesome-icon> </button>
--- a/client/src/components/map/fairway/Fairwayprofile.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/fairway/Fairwayprofile.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,30 +1,32 @@ <template> - <div :class="['position-relative', {show: showSplitscreen}]"> + <div :class="['position-relative', { show: showSplitscreen }]"> <button class="rounded-bottom bg-white border-0 position-absolute splitscreen-toggle" @click="$store.commit('application/showSplitscreen', false)" v-if="showSplitscreen" > - <font-awesome-icon icon="angle-down"/> + <font-awesome-icon icon="angle-down" /> </button> <button class="rounded-bottom bg-white border-0 position-absolute clear-selection" - @click="$store.dispatch('fairwayprofile/clearSelection');" + @click="$store.dispatch('fairwayprofile/clearSelection')" v-if="showSplitscreen" > - <font-awesome-icon icon="times"/> + <font-awesome-icon icon="times" /> </button> <div class="profile bg-white position-relative d-flex flex-column"> <h5 class="headline border-bottom mb-0 py-2" v-if="selectedBottleneck && selectedSurvey" - >{{ selectedBottleneck }} ({{ selectedSurvey.date_info }})</h5> + > + {{ selectedBottleneck }} ({{ selectedSurvey.date_info }}) + </h5> <div class="d-flex flex-fill"> <div class="loading d-flex justify-content-center align-items-center" v-if="surveysLoading || profileLoading" > - <font-awesome-icon icon="spinner" spin/> + <font-awesome-icon icon="spinner" spin /> </div> <div class="fairwayprofile m-3 mt-0 bg-white flex-grow-1"></div> </div>
--- a/client/src/components/map/fairway/Infobar.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/fairway/Infobar.vue Tue Dec 04 10:02:31 2018 +0100 @@ -5,8 +5,7 @@ > <div class="d-flex flex-row justify-content-between h-100"> <h6 class="my-auto px-2"> - {{ selectedBottleneck }} - ({{ selectedSurvey.date_info }}) + {{ selectedBottleneck }} ({{ selectedSurvey.date_info }}) </h6> <span class="p-2 border-left d-flex align-items-center"
--- a/client/src/components/map/fairway/Profiles.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/fairway/Profiles.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,5 +1,10 @@ <template> - <div :class="['box ui-element rounded bg-white text-nowrap', { expanded: showProfiles }]"> + <div + :class="[ + 'box ui-element rounded bg-white text-nowrap', + { expanded: showProfiles } + ]" + > <div style="width: 20rem"> <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center"> <font-awesome-icon icon="chart-area" class="mr-2"></font-awesome-icon> @@ -10,12 +15,14 @@ @click="$store.commit('application/showProfiles', false)" ></font-awesome-icon> </h6> - <div class="d-flex flex-column p-3 flex-grow-1 text-left position-relative"> + <div + class="d-flex flex-column p-3 flex-grow-1 text-left position-relative" + > <div class="loading d-flex justify-content-center align-items-center" v-if="surveysLoading || profileLoading" > - <font-awesome-icon icon="spinner" spin/> + <font-awesome-icon icon="spinner" spin /> </div> <select @click="moveToBottleneck" @@ -29,7 +36,8 @@ v-for="bn in bottlenecks" :key="bn.properties.name" :value="bn.properties.name" - >{{ bn.properties.name }}</option> + >{{ bn.properties.name }}</option + > </select> <div v-if="selectedBottleneck"> <div class="d-flex mt-2"> @@ -37,60 +45,79 @@ <small class="text-muted"> <translate>Sounding Result</translate>: </small> - <select v-model="selectedSurvey" class="form-control form-control-sm"> + <select + v-model="selectedSurvey" + class="form-control form-control-sm" + > <option v-for="survey in surveys" :key="survey.date_info" :value="survey" - >{{ survey.date_info }}</option> + >{{ survey.date_info }}</option + > </select> </div> - <div class="flex-fill ml-3" v-if="selectedSurvey && surveys.length > 1"> + <div + class="flex-fill ml-3" + v-if="selectedSurvey && surveys.length > 1" + > <small class="text-muted mt-1"> <translate>Compare with</translate>: </small> - <select v-model="additionalSurvey" class="form-control form-control-sm"> + <select + v-model="additionalSurvey" + class="form-control form-control-sm" + > <option :value="null">None</option> <option v-for="survey in additionalSurveys" :key="survey.date_info" :value="survey" - >{{ survey.date_info }}</option> + >{{ survey.date_info }}</option + > </select> </div> </div> - <hr class="w-100 mb-0"> + <hr class="w-100 mb-0" /> <small class="text-muted d-block mt-2"> <translate>Saved cross profiles</translate>: </small> <div class="d-flex"> <select - :class="['form-control form-control-sm flex-fill', { 'rounded-left-only': selectedCut }]" + :class="[ + 'form-control form-control-sm flex-fill', + { 'rounded-left-only': selectedCut } + ]" v-model="selectedCut" > <option></option> - <option v-for="(cut, index) in previousCuts" :value="cut" :key="index">{{ cut.label }}</option> + <option + v-for="(cut, index) in previousCuts" + :value="cut" + :key="index" + >{{ cut.label }}</option + > </select> <button class="btn btn-sm btn-danger input-button-right" @click="confirmDeleteSelectedCut = true" v-if="selectedCut && !confirmDeleteSelectedCut" > - <font-awesome-icon icon="trash"/> + <font-awesome-icon icon="trash" /> </button> <button class="btn btn-sm btn-info rounded-0" @click="confirmDeleteSelectedCut = false" v-if="selectedCut && confirmDeleteSelectedCut" > - <font-awesome-icon icon="times"/> + <font-awesome-icon icon="times" /> </button> <button class="btn btn-sm btn-danger input-button-right" @click="deleteSelectedCut" v-if="selectedCut && confirmDeleteSelectedCut" > - <font-awesome-icon icon="check"/> + <font-awesome-icon icon="check" /> </button> </div> <small class="text-muted d-block mt-2"> @@ -101,31 +128,25 @@ class="form-control form-control-sm pr-5" placeholder="Lat,Lon,Lat,Lon" v-model="coordinatesInput" - > + /> <button class="btn btn-sm btn-info position-absolute input-button-right" @click="applyManualCoordinates" style="top: 0; right: 0;" v-if="coordinatesInputIsValid" > - <font-awesome-icon icon="check"/> + <font-awesome-icon icon="check" /> </button> </div> <small class="d-flex text-left mt-2" v-if="startPoint && endPoint"> <div class="text-nowrap mr-3"> - <b> - <translate>Start</translate>: - </b> - <br> - Lat: {{ startPoint[1] }} - <br> + <b> <translate>Start</translate>: </b> <br /> + Lat: {{ startPoint[1] }} <br /> Lon: {{ startPoint[0] }} </div> <div class="text-nowrap"> - <b>End:</b> - <br> - Lat: {{ endPoint[1] }} - <br> + <b>End:</b> <br /> + Lat: {{ endPoint[1] }} <br /> Lon: {{ endPoint[0] }} </div> <button @@ -133,19 +154,29 @@ v-clipboard:success="onCopyCoordinates" class="btn btn-info btn-sm ml-auto mt-auto" > - <font-awesome-icon icon="copy"/> + <font-awesome-icon icon="copy" /> </button> </small> <div class="d-flex mt-3"> - <div class="pr-3 w-50" v-if="startPoint && endPoint && !selectedCut"> - <button class="btn btn-info btn-sm w-100" @click="showLabelInput = !showLabelInput"> - <font-awesome-icon :icon="showLabelInput ? 'times' : 'check'"/> + <div + class="pr-3 w-50" + v-if="startPoint && endPoint && !selectedCut" + > + <button + class="btn btn-info btn-sm w-100" + @click="showLabelInput = !showLabelInput" + > + <font-awesome-icon :icon="showLabelInput ? 'times' : 'check'" /> {{ showLabelInput ? "Cancel" : "Save" }} </button> </div> - <div :class="startPoint && endPoint && !selectedCut ? 'w-50' : 'w-100'"> + <div + :class="startPoint && endPoint && !selectedCut ? 'w-50' : 'w-100'" + > <button class="btn btn-info btn-sm w-100" @click="toggleCutTool"> - <font-awesome-icon :icon="cutTool && cutTool.getActive() ? 'times' : 'plus'"></font-awesome-icon> + <font-awesome-icon + :icon="cutTool && cutTool.getActive() ? 'times' : 'plus'" + ></font-awesome-icon> {{ cutTool && cutTool.getActive() ? "Cancel" : "New" }} </button> </div> @@ -155,14 +186,17 @@ <translate>Enter label for cross profile</translate>: </small> <div class="position-relative"> - <input class="form-control form-control-sm pr-5" v-model="cutLabel"> + <input + class="form-control form-control-sm pr-5" + v-model="cutLabel" + /> <button class="btn btn-sm btn-info position-absolute input-button-right" @click="saveCut" v-if="cutLabel" style="top: 0; right: 0;" > - <font-awesome-icon icon="check"/> + <font-awesome-icon icon="check" /> </button> </div> </div>
--- a/client/src/components/map/layers/Layers.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/layers/Layers.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,8 +1,14 @@ <template> - <div :class="['box ui-element rounded bg-white text-nowrap', { expanded: showLayers }]"> + <div + :class="[ + 'box ui-element rounded bg-white text-nowrap', + { expanded: showLayers } + ]" + > <div style="width: 20rem"> <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center"> - <font-awesome-icon icon="layer-group" class="mr-2"></font-awesome-icon><translate>Layers</translate> + <font-awesome-icon icon="layer-group" class="mr-2"></font-awesome-icon + ><translate>Layers</translate> <font-awesome-icon icon="times" class="ml-auto text-muted"
--- a/client/src/components/map/layers/Layerselect.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/layers/Layerselect.vue Tue Dec 04 10:02:31 2018 +0100 @@ -7,12 +7,17 @@ :id="layername" type="checkbox" :checked="isVisible" - > - <LegendElement :layername="layername" :layerindex="layerindex"></LegendElement> - <label class="layername form-check-label" @click="visibilityToggled">{{layername}}</label> + /> + <LegendElement + :layername="layername" + :layerindex="layerindex" + ></LegendElement> + <label class="layername form-check-label" @click="visibilityToggled">{{ + layername + }}</label> </div> - <div v-if="isVisible && (layername == 'Bottleneck isolines')"> - <img class="rounded my-1 d-block" :src="isolinesLegendImgUrl"> + <div v-if="isVisible && layername == 'Bottleneck isolines'"> + <img class="rounded my-1 d-block" :src="isolinesLegendImgUrl" /> </div> </div> </template> @@ -26,7 +31,6 @@ } </style> - <script> /* This is Free Software under GNU Affero General Public License v >= 3.0 * without warranty, see README.md and license for details.
--- a/client/src/components/map/toolbar/Identify.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/toolbar/Identify.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,10 +1,24 @@ <template> - <div @click="$store.commit('application/showIdentify', !showIdentify)" class="toolbar-button"> - <font-awesome-icon icon="info" :class="{'text-info': showIdentify}"></font-awesome-icon> - <span :class="['indicator', { show: !showIdentify && (identifiedFeatures.length || currentMeasurement) }]"> - {{ badgeCount }} - </span> - </div> + <div + @click="$store.commit('application/showIdentify', !showIdentify)" + class="toolbar-button" + > + <font-awesome-icon + icon="info" + :class="{ 'text-info': showIdentify }" + ></font-awesome-icon> + <span + :class="[ + 'indicator', + { + show: + !showIdentify && (identifiedFeatures.length || currentMeasurement) + } + ]" + > + {{ badgeCount }} + </span> + </div> </template> <script>
--- a/client/src/components/map/toolbar/Layers.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/toolbar/Layers.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,7 +1,13 @@ <template> - <div @click="$store.commit('application/showLayers', !showLayers)" class="toolbar-button"> - <font-awesome-icon icon="layer-group" :class="{'text-info': showLayers}"></font-awesome-icon> - </div> + <div + @click="$store.commit('application/showLayers', !showLayers)" + class="toolbar-button" + > + <font-awesome-icon + icon="layer-group" + :class="{ 'text-info': showLayers }" + ></font-awesome-icon> + </div> </template> <script>
--- a/client/src/components/map/toolbar/Linetool.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/toolbar/Linetool.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,7 +1,10 @@ <template> - <div @click="toggleLineTool" class="toolbar-button"> - <font-awesome-icon icon="ruler" :class="{'text-info': lineTool && lineTool.getActive()}"></font-awesome-icon> - </div> + <div @click="toggleLineTool" class="toolbar-button"> + <font-awesome-icon + icon="ruler" + :class="{ 'text-info': lineTool && lineTool.getActive() }" + ></font-awesome-icon> + </div> </template> <script>
--- a/client/src/components/map/toolbar/Pdftool.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/toolbar/Pdftool.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,7 +1,13 @@ <template> - <div @click="$store.commit('application/showPdfTool', !showPdfTool)" class="toolbar-button"> - <font-awesome-icon icon="file-pdf" :class="{'text-info': showPdfTool}"></font-awesome-icon> - </div> + <div + @click="$store.commit('application/showPdfTool', !showPdfTool)" + class="toolbar-button" + > + <font-awesome-icon + icon="file-pdf" + :class="{ 'text-info': showPdfTool }" + ></font-awesome-icon> + </div> </template> <script>
--- a/client/src/components/map/toolbar/Polygontool.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/toolbar/Polygontool.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,7 +1,10 @@ <template> - <div @click="togglePolygonTool" class="toolbar-button"> - <font-awesome-icon icon="draw-polygon" :class="{'text-info': polygonTool && polygonTool.getActive()}"></font-awesome-icon> - </div> + <div @click="togglePolygonTool" class="toolbar-button"> + <font-awesome-icon + icon="draw-polygon" + :class="{ 'text-info': polygonTool && polygonTool.getActive() }" + ></font-awesome-icon> + </div> </template> <script>
--- a/client/src/components/map/toolbar/Profiles.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/toolbar/Profiles.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,7 +1,13 @@ <template> - <div @click="$store.commit('application/showProfiles', !showProfiles)" class="toolbar-button"> - <font-awesome-icon icon="chart-area" :class="{ 'text-info': showProfiles }"></font-awesome-icon> - </div> + <div + @click="$store.commit('application/showProfiles', !showProfiles)" + class="toolbar-button" + > + <font-awesome-icon + icon="chart-area" + :class="{ 'text-info': showProfiles }" + ></font-awesome-icon> + </div> </template> <script>
--- a/client/src/components/map/toolbar/Toolbar.vue Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/components/map/toolbar/Toolbar.vue Tue Dec 04 10:02:31 2018 +0100 @@ -1,6 +1,11 @@ <template> <div class="ml-2"> - <div :class="'rounded-top toolbar toolbar-' + (expandToolbar ? 'expanded' : 'collapsed')"> + <div + :class=" + 'rounded-top toolbar toolbar-' + + (expandToolbar ? 'expanded' : 'collapsed') + " + > <Identify></Identify> <Layers></Layers> <Profiles></Profiles> @@ -12,7 +17,9 @@ @click="$store.commit('application/expandToolbar', !expandToolbar)" class="toolbar-button toolbar-toggle rounded-bottom bg-info text-white" > - <font-awesome-icon :icon="expandToolbar ? 'angle-up' : 'angle-down'"></font-awesome-icon> + <font-awesome-icon + :icon="expandToolbar ? 'angle-up' : 'angle-down'" + ></font-awesome-icon> </div> </div> </template>
--- a/client/src/store/bottlenecks.js Tue Dec 04 09:56:11 2018 +0100 +++ b/client/src/store/bottlenecks.js Tue Dec 04 10:02:31 2018 +0100 @@ -100,8 +100,8 @@ } }) .then(response => { - const surveys = response.data.surveys.sort( - (a, b) => (a.date_info < b.date_info ? 1 : -1) + const surveys = response.data.surveys.sort((a, b) => + a.date_info < b.date_info ? 1 : -1 ); commit("selectedSurvey", surveys[0]); commit("setSurveys", surveys);