Commit bacb1866 authored by ZeMKI's avatar ZeMKI
Browse files

Upgrade Tailwind to V2 + saveStudy and improved qsort interview

* upgraded tailwind to v2.
* now you can save a study with qsort sorting.
* added the window for the cards with the hover effect.
parent 8ad7000b
......@@ -6,14 +6,13 @@ use Illuminate\Database\Eloquent\Model;
/**
* App\Sorting
*
* @property int $id
* @property string $name
* @property string $description
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property int $id
* @property string $name
* @property string $description
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Study[] $studies
* @property-read int|null $studies_count
* @property-read int|null $studies_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\Sorting newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Sorting newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Sorting query()
......@@ -35,27 +34,49 @@ class Sorting extends Model
{
if (!$request->has('details'))
{
$circles="";
$classifiers="";
$sections = "";
$sectionNames = "";
$sectionCenter = "";
$qsortsections = "";
$study->sortings()->detach();
// insert in details something according to the sorting
$circles = 'circles|' . $request->input('sorting.numberofcircles');
$description = '||description|' . $request->input('sorting.description');
$classifiers = $request->input('sorting.classifier') && $request->input('sorting.classifier')['name'] != 'none' ? '||classifier|' . $request->input('sorting.classifier')['name'] : '';
if ($request->input('sorting.id') == 2)
if ($request->input('sorting.id') == 1)
{
$circles = 'circles|' . $request->input('sorting.numberofcircles');
$description = '||description|' . $request->input('sorting.description');
$classifiers = $request->input('sorting.classifier') && $request->input('sorting.classifier')['name'] != 'none' ? '||classifier|' . $request->input('sorting.classifier')['name'] : '';
}
else if ($request->input('sorting.id') == 2)
{
$circles = 'circles|' . $request->input('sorting.numberofcircles');
$description = '||description|' . $request->input('sorting.description');
$classifiers = $request->input('sorting.classifier') && $request->input('sorting.classifier')['name'] != 'none' ? '||classifier|' . $request->input('sorting.classifier')['name'] : '';
$sections = '||divisions|' . $request->input('sorting.sectionNumber');
$sectionNames = '||names|';
foreach ($request->input('sorting.sections') as $section)
{
$sectionNames .= $section['name'] . ";color:".($section['color'] === null ? 'casual' : $section['color'] )."|";
$sectionNames .= $section['name'] . ";color:" . ($section['color'] === null ? 'casual' : $section['color']) . "|";
}
$sectionCenter = '|center|' . $request->input('sorting.centerLabel')."||";
} else
$sectionCenter = '|center|' . $request->input('sorting.centerLabel') . "||";
} else if ($request->input('sorting.id') == 3)
{
$sections = "";
$sectionNames = "";
$sectionCenter = "";
$description = '||description|' . $request->input('sorting.description');
$qsortsections = '||qsort|';
foreach($request->input('sorting.qsort') as $qsort)
{
foreach($qsort as &$val){
if($val === "" || $val === false || $val === null) $val = "--empty--";
}
$qsortsections .= implode('|',array_reverse($qsort)).'|separator|';
}
}
$study->sortings()->attach($request->get('sorting')['id'], ['details' => $circles . $description . $classifiers . $sections . $sectionNames . $sectionCenter]);
$study->sortings()->attach($request->get('sorting')['id'], ['details' => $circles . $description . $classifiers . $sections . $sectionNames . $sectionCenter.$qsortsections]);
} else
{
$study->sortings()->attach($request->get('sortingid'), ['details' => $request->get('details')]);
......
......@@ -21,5 +21,10 @@ class SortingTableSeeder extends Seeder
'name' => 'Network Sorting',
'description' => 'Network sorting',
]);
DB::table('sortings')->insert([
'name' => 'Qsort',
'description' => 'Qsort',
]);
}
}
This diff is collapsed.
......@@ -11,15 +11,15 @@
"compress": "bread-compressor -s public/css/*.css public/js/*.js"
},
"devDependencies": {
"@babel/core": "^7.12.0",
"@babel/preset-env": "^7.12.0",
"@babel/core": "^7.12.10",
"@babel/preset-env": "^7.12.11",
"axios": "^0.19.2",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"bread-compressor-cli": "^1.1.0",
"cross-env": "^6.0.3",
"jquery": "^3.5.0",
"laravel-mix": "^5.0.7",
"laravel-mix": "^5.0.9",
"laravel-mix-polyfill": "^2.0.0",
"laravel-mix-purgecss": "^4.2.0",
"lodash": "^4.17.20",
......@@ -28,30 +28,32 @@
"vue": "^2.6.12"
},
"dependencies": {
"@babel/runtime": "^7.12.0",
"@babel/runtime": "^7.12.5",
"@mdi/font": "^4.9.95",
"alpinejs": "^2.7.0",
"alpinejs": "^2.8.0",
"autoprefixer": "^10.1.0",
"buefy": "^0.8.20",
"bulma": "^0.9.1",
"child_process": "^1.0.2",
"core-js": "^3.6.5",
"core-js": "^3.8.1",
"es6-promise": "^4.2.8",
"fs": "0.0.1-security",
"html-to-image": "^0.1.1",
"html-to-image": "latest",
"i": "^0.3.6",
"imagemin": "^7.0.1",
"interactjs": "^1.10.0",
"interactjs": "^1.10.1",
"jsonlint": "^1.6.3",
"laravel-elixir-phpdox": "^0.2.0",
"launch-editor-middleware": "^2.2.1",
"moment": "^2.29.1",
"node-sass": "^4.14.1",
"npm": "^6.14.8",
"tailwindcss": "^1.9.6",
"vue-material-design-icons": "^4.9.0",
"vue-select": "^3.10.8",
"npm": "^6.14.10",
"postcss": "^8.2.1",
"tailwindcss": "^2.0.2",
"vue-material-design-icons": "^4.11.0",
"vue-select": "^3.11.2",
"vue-template-compiler": "^2.6.12",
"vue2-touch-events": "^2.3.2",
"vuex": "^3.5.1"
"vuex": "^3.6.0"
}
}
This diff is collapsed.
......@@ -29,7 +29,7 @@ X
>
<label class="font-bold">{{trans('Person Name')}}</label>
<input id="addPerson" type="text" v-model="newtoken.name" class="w-full block bg-gray-200 focus:outline-none focus:shadow-outline border border-gray-300 py-1 px-2 block mt-2 appearance-none leading-normal"/>
<input id="addPerson" type="text" v-model="newtoken.name" class="w-full block bg-gray-200 focus:outline-none focus:ring border border-gray-300 py-1 px-2 block mt-2 appearance-none leading-normal"/>
</div>
<!--Footer-->
......
<template>
<div class="flex">
<div v-show="toggleCards"
class="flex-wrap w-1/3 m-0 bg-green-400 py-2 font-bold relative sm:text-xs md:text-xs lg:text-base z-30 h-64" style="left:51%;">
<div v-for="(t,index) in tokens" :id="t.id"
class="z-50 ml-1 inline-flex"
@mouseover="hovertrue(index)"
@mouseleave="hoverfalse(index)"
style="width: 50px;height: 50px;z-index:100;"
>
<div class="block">
<img :src="t.image_path"
alt="token"
style="width: 50px;height: 50px;z-index:100;">
<div :id="'tokenlabel'+t.id" class="block bg-gray-300 text-center"
<div class="flex fixed bottom-0 w-full justify-center">
<div class="w-auto" v-for="n in 7">
<div
v-html="t.name"></div>
</div>
<div id="tokendescription" v-show="t.hover" class="absolute p-2 bg-gray-700 text-white z-50 cards-description">
<img :src="t.image_path"
:alt="t.properties.description"
class="block" style="width: 150px;height: 150px;z-index:100;">
{{ t.properties.description }}
</div>
class="inline-block border border-solid border-gray-700 w-40 h-40 text-center content-center"
>
a
</div>
</div>
<div
id="qsort"
:class="'grid grid-cols-'+itemsnumber+ ' gap-0 text-center absolute mx-auto w-auto'"
style="left: 50%;transform: translateX(-50%);top:15%;"
>
<div v-for="(array,key) in columns" :style="'height:'+ eachContainerHeight+'px'" class="grid grid-cols-1 gap-0 align-middle">
<div :class="'qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 grid grid-rows-'+(maxnumber+1)+' grid-flow-row gap-0 '">
<div v-for="n in array.length-2" :class="(array[n] === '---blank---')?
'bg-pink-400 opacity-0 qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12' :
'bg-gray-900 text-white border border-solid border-white qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12 select-none inline-block align-middle justify-center' ">
</div>
<div class="bg-white text-black qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-12 qsortmd:h-8 qsortsm:h-8 select-none inline-block align-middle justify-center">
{{ array[array.length - 2] }}
</div>
<div class="bg-white text-black qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12 select-none inline-block align-top justify-center"
>
{{ array[array.length - 1] !== '--empty--' ? array[array.length - 1] : '' }}
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "q-sort"
import {mapState} from "vuex"
export default {
name: "q-sort",
props: ['columns', 'itemsnumber', 'maxnumber', 'availabletokens'],
data() {
return {
basicWidth: 24,
containerWidth: 24 * this.itemsnumber * 2 * 2,
eachContainerHeight: 24 * this.maxnumber * 2,
tokens: [],
descriptionShowninToken: {}
}
},
computed: {
...mapState({
toggleCards: (state) => state.newinterview.toggleCards,
sortingtotal: state => state.newinterview.sortingtotal,
currentsorting: state => state.newinterview.sorting,
currentpage: state => state.newinterview.page,
})
},
mounted() {
this.createtokens();
},
created() {
this.tokens = {};
setTimeout(function () {
let tokens = document.getElementsByClassName("cards");
for (let i = 0; i < tokens.length; i++) {
tokens[i].addEventListener('click', tokenListener, false);
}
let tokenListener = (e) => {
let description = document.getElementById('tokendescription');
self.mousePosition.x = e.clientX;
self.mousePosition.y = e.clientY - 58;
_.forEach(self.$refs['sortingContainer' + self.sortingtotal][0], function (section, i) {
element.style.transform = 'translateY(' + (e.clientY - 10) + 'px)';
element.style.transform += 'translateX(' + (e.clientX - 100) + 'px)';
element.innerHTML = self.sectionNames[i];
tokenListener.classList.remove('invisible');
});
};
},1500
);
setTimeout(function () {
let windowSize = window.innerWidth;
let widthMultiplier = 24;
let top = 6;
let mediaQuerySM = windowSize > 639 && windowSize < 768;
let mediaQueryMD = windowSize >= 768 && windowSize < 1366;
let mediaQueryLG = windowSize >= 1366;
if (mediaQuerySM) {
widthMultiplier = 12;
top *= 3;
console.log("SM")
}
else if (mediaQueryMD) {
console.log("MD")
widthMultiplier = 16;
top *= 2;
}
else if (mediaQueryLG) {
console.log("LG?")
//@todo check the resolution on various tablets
top *= 4
widthMultiplier = 24;
}
let containerWidth = widthMultiplier * this.itemsnumber * 2 * 2;
let element = document.getElementById('qsort');
element.style.width = containerWidth.toString() + 'px';
element.style.top = top.toString() + '%';
}, 75);
},
methods:
{
hovertrue: function (i){
Vue.set(this.tokens[i],'hover',true);
this.descriptionShowninToken = this.tokens[i];
this.$forceUpdate();
},
hoverfalse: function (i){
Vue.set(this.tokens[i],'hover',false);
this.descriptionShowninToken.hover = false;
this.$forceUpdate();
},
createtokens: function () {
this.tokens = this.availabletokens;
for (
var i = 0;
i < this.tokens.length;
i++
) {
let tokensorting = this.tokens[i].author == 0 ? 0 : this.sortingtotal;
this.tokens[i].valutation = {circle: 0, distance: 0, sorting: tokensorting, classifiers: []};
this.tokens[i].position = 0;
this.tokens[i].drag = true;
this.tokens[i].hover = false;
this.tokens[i].properties = JSON.parse(this.tokens[i].properties);
}
}
,
}
}
</script>
<style scoped>
......
......@@ -405,7 +405,7 @@
}
}
let centerLabel = document.createElement('div');
centerLabel.className = 'bg-gray-900 text-white absolute rounded-full text-center align-middle p-3 whitespace-no-wrap centerLabel';
centerLabel.className = 'bg-gray-900 text-white absolute rounded-full text-center align-middle p-3 whitespace-nowrap centerLabel';
centerLabel.style.height = '50px';
centerLabel.style.width = '50px';
centerLabel.style.left = (this.center_x - 25) + 'px';
......
This diff is collapsed.
......@@ -14,6 +14,7 @@ export default new Vuex.Store(
{
state: {
newinterview: {
toggleCards: false,
center_x: 0,
center_y: 0,
bounds: {},
......@@ -216,6 +217,10 @@ export default new Vuex.Store(
state.newinterview.sortingType = value;
},
updateToggleCards: function(state,value)
{
state.newinterview.toggleCards = value;
}
},
actions: {
......
......@@ -18,7 +18,7 @@
Email
</label>
<input type="email" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline w-1/4" name="email" >
<input type="email" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:ring w-1/4" name="email" >
<input type="checkbox" name="all" value="true"> Send to all users<br>
......@@ -33,7 +33,7 @@
<label for="email" class="label">
Notification Message
</label>
<textarea class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline" name="message" rows="3" cols="10"></textarea>
<textarea class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:ring" name="message" rows="3" cols="10"></textarea>
<button class="button is-link">Send notification</button>
......
......@@ -49,7 +49,7 @@
<div class="pr-4 pl-4 text-center">
<button type="submit"
class="inline-block align-middle text-center select-none border font-normal whitespace-no-wrap py-2 px-4 rounded text-base leading-normal no-underline text-blue-lightest bg-blue hover:bg-blue-light">
class="inline-block align-middle text-center select-none border font-normal whitespace-nowrap py-2 px-4 rounded text-base leading-normal no-underline text-blue-lightest bg-blue hover:bg-blue-light">
{{ __('Send Password Reset Link') }}
</button>
</div>
......
......@@ -34,7 +34,7 @@
class="md:w-1/3 mr-2 pl-4 pt-2 pb-2 mb-0 leading-normal">{{ __('E-Mail Address') }}</label>
<div class="md:w-1/2">
<input id="email" disabled type="email" value="{{$email}}"
<input id="email" disabled type="email"
class="input {{ $errors->has('email') ? ' bg-red-dark' : '' }}" name="email"
value="{{ old('email') }}" required autofocus>
......@@ -75,7 +75,7 @@
<div class="pr-4 pl-4 text-center">
<button type="submit"
class="inline-block align-middle text-center select-none border font-normal whitespace-no-wrap py-2 px-4 rounded text-base leading-normal no-underline text-blue-lightest bg-blue hover:bg-blue-light">
class="inline-block align-middle text-center select-none border font-normal whitespace-nowrap py-2 px-4 rounded text-base leading-normal no-underline text-blue-lightest bg-blue hover:bg-blue-light">
{{ __('Set password') }}
</button>
</div>
......
......@@ -60,7 +60,7 @@
<div class="pr-4 pl-4 text-center">
<button type="submit"
class="inline-block align-middle text-center select-none border font-normal whitespace-no-wrap py-2 px-4 rounded text-base leading-normal no-underline text-blue-lightest bg-blue hover:bg-blue-light">
class="inline-block align-middle text-center select-none border font-normal whitespace-nowrap py-2 px-4 rounded text-base leading-normal no-underline text-blue-lightest bg-blue hover:bg-blue-light">
{{ __('Set password') }}
</button>
</div>
......
......@@ -5,10 +5,10 @@
@if($newsletter)
<div class="w-full h-auto text-center text-gray-900 bg-green-400 p-4 newsletter transition-all duration-500 ease-in-out opacity-100">
{{__('Would you be interested in receiving e-mails about future features and updates from MeSoftware?')}}
<button @click="iWantNewsletter('true')" class="sm:m-2 md:mx-1 shadow sm:block sm:w-full md:w-auto md:inline bg-purple-500 hover:bg-purple-400 focus:shadow-outline focus:outline-none text-white font-bold py-2 px-4 rounded" type="button">
<button @click="iWantNewsletter('true')" class="sm:m-2 md:mx-1 shadow sm:block sm:w-full md:w-auto md:inline bg-purple-500 hover:bg-purple-400 focus:ring focus:outline-none text-white font-bold py-2 px-4 rounded" type="button">
{!! __('<strong>I want</strong> to receive emails from MeSoftware') !!}
</button>
<button @click="iWantNewsletter('false')" class="sm:m-2 md:mx-1 shadow sm:block sm:w-full md:w-auto md:inline bg-purple-500 hover:bg-purple-400 focus:shadow-outline focus:outline-none text-white font-bold py-2 px-4 rounded" type="button">
<button @click="iWantNewsletter('false')" class="sm:m-2 md:mx-1 shadow sm:block sm:w-full md:w-auto md:inline bg-purple-500 hover:bg-purple-400 focus:ring focus:outline-none text-white font-bold py-2 px-4 rounded" type="button">
{!! __(' <strong>I don\'t want</strong> to receive emails from MeSoftware')!!}
</button>
<p class="block text-blue-500"><a href="https://mesoftware.org/index.php/datenschutzerklaerung-mesort/" title="Mesort Privacy Policy" target="_blank">{{__('Privacy Policy')}}</a></p>
......@@ -45,9 +45,9 @@
<p class="font-bold">{{__('If the url is not used within 2 weeks, it will be deleted.')}}</p>
<p class="font-bold text-center">{{__('Interviewee Name')}}</p>
<input class="bg-white focus:outline-none focus:shadow-outline border border-gray-300 rounded-lg py-2 px-4 block w-full appearance-none leading-normal" type="text" v-model="interview.name" id="intervieweename">
<input class="bg-white focus:outline-none focus:ring border border-gray-300 rounded-lg py-2 px-4 block w-full appearance-none leading-normal" type="text" v-model="interview.name" id="intervieweename">
<input class="bg-white focus:outline-none focus:shadow-outline border border-gray-300 rounded-lg py-2 px-4 block w-full appearance-none leading-normal" type="url" v-model="interview.url" id="publicUrl">
<input class="bg-white focus:outline-none focus:ring border border-gray-300 rounded-lg py-2 px-4 block w-full appearance-none leading-normal" type="url" v-model="interview.url" id="publicUrl">
<!--Footer-->
......
......@@ -6,17 +6,13 @@
// in case of equal names, insert something at the beginning
// then strip it before printing it.
$arrayWithValues = array(
"worse" => ["", "bbb", "bbb", "bbb", "bbb"],
"&noprint" => ["", "bbb", "bbb", "bbb", "bbb", "bbb"],
"&&noprint" => ["", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb"],
"&&&noprint" => ["", "bbb", "ccc", "bbb", "bbb", "bbb", "bbb", "bbb"],
"&&&&noprint" => ["", "bbb", "ccc", "ddd", "eee", "bbb", "bbb", "bbb", "bbb"],
"&&&&&noprint" => ["", "bbb", "ccc", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb"],
"&&&&&&noprint" => ["", "bbb", "ccc", "bbb", "bbb", "bbb", "bbb", "bbb", "bbb"],
"&&&&&&&noprint" => ["", "bbb", "ccc", "bbb", "bbb", "bbb", "bbb", "bbb"],
"&&&&&&&&noprint" => ["", "bbb", "ccc", "bbb", "bbb", "bbb", "bbb"],
"&&&&&&&&&noprint" => ["", "bbb", "ccc", "bbb", "bbb", "bbb"],
"better" => ["aaa", "bbb", "ccc", "bbb", "bbb"]
["", "", "", "", "","worse",1],
["", "", "", "", "", "","&noprint",2],
["", "", "", "", "", "", "","&&noprint",3],
["", "", "", "", "", "", "", "","&&&noprint",4],
["", "", "", "", "", "", "", "","&&&&&noprint",5],
["", "", "", "", "", "", "","&&&&&&&&noprint",6],
["", "", "", "", "","better",7]
);
/*
......@@ -36,7 +32,7 @@
$containerWidth = 24 * count($arrayWithValues) * 2 * 2;
$eachContainerHeight = 24 * $maxNumberOfItems * 2;
// fill each array to fill until it's as big as the biggest
// fill each array to fill until it's as big as the biggest <-- to fill the screen.
foreach ($arrayWithValues as $key => $array)
{
while (count($array) < $maxNumberOfItems)
......@@ -59,19 +55,21 @@
@foreach($arrayWithValues as $key => $array)
<div class="grid grid-cols-1 gap-0 align-middle" style="height: {{$eachContainerHeight}}px">
<div class="qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 grid grid-rows-{{$maxNumberOfItems+1}} grid-flow-col gap-0 ">
@foreach($array as $value)
@if($value == "---blank---")
@for ($i = 0; $i < count($array)-2; $i++)
@if($array[$i] == "---blank---")
<div class="bg-pink-400 opacity-0 qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12"></div>
@else
<div class="bg-gray-900 text-white border border-solid border-white qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12 select-none inline-block align-middle justify-center">{{$value}}</div>
<div class="bg-gray-900 text-white border border-solid border-white qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12 select-none inline-block align-middle justify-center">{{$array[$i]}}</div>
@endif
@endfor
@endforeach
<div class="bg-white text-black qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12 select-none inline-block align-middle justify-center">
@if(strpos($key, '&noprint') === false)
{{$key}}
<div class="bg-white text-black qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-12 qsortmd:h-8 qsortsm:h-8 select-none inline-block align-middle justify-center">
{{$array[count($array)-1]}}
</div>
<div class="bg-white text-black qsortlg:w-24 qsortmd:w-16 qsortsm:w-12 qsortlg:h-24 qsortmd:h-16 qsortsm:h-12 select-none inline-block align-top justify-center">
@if(strpos($array[count($array)-2], '&noprint') === false)
{{$array[count($array)-2]}}
@endif
</div>
</div>
......
......@@ -73,6 +73,14 @@
<a class="text-center bg-green-500 hover:text-gray-300 hover:bg-green-800 p-2 ml-2" @click="togglePersonModal()" v-if="sortingType == 2">
<strong>{{ __('Add Person') }}</strong>
</a>
<a
@click="toggleCardsWindow"
class="text-center bg-green-500 hover:text-gray-300 hover:bg-green-800 p-2 ml-2" v-if="sortingType == 3">
<strong>{{ __('Add Card') }}</strong>
</a>
</div>
</span>
</nav>
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment