Javascript classes that make filtering, pagination and sorting easy and quick.
Also available as npm package here.
npm i quickclasses
Download QuickClasses 5.6kB gzipped
new QuickFilter({options})
The QuickFilter class makes it easy to filter items based on their HTML data attributes.
QuickFilter uses data attributes to filter elements. Define options to filter the content you want. The QuickFilter class filters in both an AND & OR relationship, checkboxes, radio buttons or multiple select options will be filtered using an OR relationship. Whereas a text input combined with a (e.g.) checkbox will filter items based on an AND relationship. Use the demo below to check it out.
Every filterable item must have a data-index
attribute defined with a unique
value. Furthermore, every filterable key shoud have a data-attribute on the main
item as well. For example, if you want to filter a collection of posts by author and title, your
items should have a structure similar to this.
<div
class="post-item"
data-index="1"
data-author="John Doe"
data-title="Hello World Post"
>
...content...
</div>
If a post has multiple authors, or multiple filterable values, use commas to seperate the values.
Every select and input element that you want to use for filtering must contain a
data-filter
attribute where the filterable key is defined. For
example, if we want to filter the post items by title (text input), and by author (checkbox
input) the filters should be similar to the following.
<input
type="text"
data-filter="title"
placeholder="Search by title../"
/>
<input
type="checkbox"
data-filter="author"
value="John Doe"
/>
<input
type="checkbox"
data-filter="author"
value="Lisa Johnson"
/>
QuickFilter supports the following types of filterable elements:
select
select[multiple]
input[type="text"]
input[type="checkbox"]
input[type="radio"]
input[type="range"]
input[type="range"][multiple]
See multirange polyfill to implement this.
To initialize the QuickFilter class, create a class instance and pass in the options object. The options object provides options to select the filterable items, the filterable inputs and select elements, and other options to customize the functionality of the filter. An example of a easy initialization of the QuickFilter class to filter posts by author and search by title.
new QuickFilter({
filterCheckboxInputs: ['author'],
filterTextInputs: ['title'],
itemsSelector: '[data-index]'
});
The default options object for the QuickFilter class is:
{
itemsSelector: '[data-index]',
/* deprecated */ elementSelector: '[data-index]',
filterCheckboxInputs: undefined,
filterSelectInputs: undefined,
filterTextInputs: undefined,
filterRangeInputs: undefined,
filterRadioInputs: undefined,
filterStartTextInputs: undefined,
resultNumberSelector: undefined,
noResultMessage: undefined,
showDisplayProperty: 'block',
hideDisplayProperty: 'none',
callBackFunction: undefined,
modifySelectedFunction,
itemsScope: document,
keyupDebounce: 200,
}
For individual explanation of each option, please read the documentation carefully.
itemsSelector
string
String that will be used in a querySelectorAll to select the filterable
items, defaults to '[data-index]', every element that contains a data-index
attribute.
elementSelector
* deprecated, please use itemsSelector
string
String that will be used in a querySelectorAll to select the filterable
items, defaults to '[data-index]', every element that contains a data-index
attribute.
filterCheckboxInputs
array
Array of input[type="checkbox"]
elements's data-filter
attribute you want to use as a filter, array must contain string values of the
data-filter
attribute. Defaults to empty array. Filter will refresh on every
change of a checkbox.
filterSelectInputs
array
Array of select
elements's data-filter attribute you want to
use as a filter, array must contain string values of the data-filter
attribute
of the select
element. Defaults to empty array. Filter will refresh every on
every change of the select element.
filterTextInputs
array
Array of input[type="text"]
elements's data-filter attribute
you want to use as a filter, array must contain string values of the
data-filter
attribute of the input[type="text"]
element. Defaults
to empty array. Filter will refresh on every keyup event of the input.
filterRangeInputs
array
Array of input[type="range"]
or
input[type="range"][multiple]
elements's data-filter attribute you want to use
as a filter, array must contain string values of the data-filter
attribute of
the input[type="range"]
or input[type="range"][multiple]
element.
Defaults to empty array. Filter will refresh on every change of the range input. Multiple
range is supported, use: multirange polyfill for this.
filterRadioInputs
array
Array of input[type="radio"]
(where the name is discernable)
elements's data-filter attribute you want to use as a filter, array must contain string
values of the data-filter
attribute of the input[type="radio"]
element. Defaults to empty array. Filter will refresh on every change of the input(s).
filterStartTextInputs
Similar to filterTextInputs, the difference is that the search string will be compared to the
first characters of the items' value. (Useful for locations) See:
filterTextInputs
resultNumberSelector
string
String for querySelector of which the innerHTML will be set as the number
of results after the items have been filtered. Defaults to undefined.
noResultMessage
string
String for querySelector, element will be displayed when no results have
been found after the filter has been applied. Make sure that this element is not visible by
default. Defaults to undefined
showDisplayProperty
string
Display property which each items should be given when it meets the
filter criteria (for example: grid, block, flex). Defaults to 'block'.
hideDisplayProperty
string
Display property which each items should be given when it does not meet
the filter criteria (for example: none, table, flex). Defaults to 'none'.
callBackFunction
function
Callback function that will be fired once all filters have been
applied, when using QuickFilter combined with QuickPagination, you can pass in a arrow
function to call QuickPagination.init(), example:
const paginateClass = new QuickPagination({...})
const filterClass = new QuickFilter({
callBackFunction: (filter) => {
paginateClass.init();
},
...
});
Defautls to undefined.
modifySelectedFunction
function
Function that can be used to modify selected filters, passes argument
of object of selected filters which has to be returned. Tip: use
this function to create a list of all selected filters. Defaults to null.
function myModifyFunction(filters) {
... do something ...
return filters;
}
const filterClass = new QuickFilter({
modifySelectedFunction: (allFilters) => {
return myModifyFunction(allFilters);
},
...
});
itemsScope
string
String of querySelector of in which all filterable items are located.
Please use this option when you have problems with selecting the filterable elements or
getting it to work with other QuickClasses, that way the QuickFilter class only
filters items within scopes, and not the clones in the pages from QuickPagination. Defaults
to 'document' or the parent of the itemsSelector.
keyupDebounce
number
Amount of ms to debounce when entering a text or search input, so that
not every element has to be filtered when changing the value of the input. (useful for large
data setsP
new QuickSorting({options})
The QuickSorting class makes it easy to sort list of items by numerical or alphabetical order.
QuickSorting class makes it easy to sort your filtered or paginated items. It can sort items by numbers, letters or randomize. Use the demo below to check it out.
The select
element that triggers sorting must have some attributes to define
how to sort the items. Use data-attributes
to define how to sort, the
order, the key to compare and the type. Use the data-key
attribute to define the
key to sort on (e.g. title) the value of this attribute must be the same as the data attribute
on the items to sort (e.g. data-title="Lorem"). Use the data-type
to define how to
sort the items, this can either be "NUM" or "CHAR". Use the data-order
attribute to
define whether the sorting should be ascending or descending by setting it to "ASC" or "DESC".
Here is a example of a select
element that can sort items by title, amount of
comments and has a random option (shuffles all items in a random order).
<select
name="sort"
id="sort-select"
class="form-select">
<option
selected
value="count-asc"
data-key="count"
data-type="NUM"
data-order="ASC"
>
Number of comments (low to high)
</option>
<option
value="count-desc"
data-key="count"
data-type="NUM"
data-order="DESC"
>
Number of comments (high to low)
</option>
<option
value="title-desc"
data-key="title"
data-type="CHAR"
data-order="DESC"
>
Title (z to a)
</option>
<option
value="title-asc"
data-key="title"
data-type="CHAR"
data-order="ASC"
>
Title (a to z)
</option>
<option
value="random"
data-key="random"
>
Randomize!
</option>
</select>
To initialize the QuickSorting class, create a class instance and pass in the options object. See the next accordion what the options and defaults are.
new QuickSorting({
elementsSelector: '#org-posts [data-index]',
sortSelectSelector = 'select[name="sort"]'
});
The QuickSorting class uses a options object to define the behaviour of the
sorting. The options object provides options to select which items to sort, what
select
element to use as trigger and a callback functionality.
The default options object for the QuickPagination class is:
{
itemsSelector: '[data-index]',
/* deprecated */ elementsSelector: '[data-index]',
sortSelectSelector: 'select[name="sort"]',
parentElement: null,
callBackFunction: undefined,
}
For individual explanation of each option, please read the documentation carefully.
itemsSelector
string
String that will be used in a querySelector to define what items to sort.
(when combined with QuickPagination and QuickFilter, select the original items (not the
duplicates in the pagination) Defaults to '[data-index]'.
sortSelectSelector
string
String that will be used in a querySelector to select the
select
element of which the option
defines how to sort the items.
QuickSorting will add a eventlistener that will fire when the select element has changed.
Defaults to 'select[name="sort"]'.
parentElement
string
String that will be used in a querySelector to select the parent element
of the items, QuickSorting will empty this element when sorting is applied and will append
the items in the desired order. Defaults to parentElement of the itemsSelector
callBackFunction
function
Callback function that will be fired once all filters have been
applied, when using QuickSorting combined with QuickFilter, you can pass in a arrow function
to call QuickFilter.inputCallback(), example:
const filterClass = new QuickFilter({...})
const sortingClass = new QuickSorting({
callBackFunction: () => {
filterClass.inputCallback();
},
...
});
Defautls to null.
new QuickPagination({options})
The QuickPagination class makes it easy to create pages of very long lists of items.
QuickPagination class clones the HTML of items and stores them in pages elements, it's strength lies in the customizability of the pagination, select the amount of items to show per page, how many pagination links you want to display, show previous and next buttons, etc. Use the demo below to check it out.
To initialize the QuickPagination class, create a class instance and pass in the options object. See the next accordion what the options and defaults are.
new QuickPagination({
itemsSelector: '[data-index]',
});
The QuickPagination class provides options to customize the behaviour of your pagination. The options object provides options to select where the pages should be displayed, and which items to use. Furthermore you can also customize the max amount of pagination links to be shown, the items per page, whether to show previous and next buttons and many more. To create a simple instance of the QuickPagination class use the following in your script after loading QuickPagination.js.
new QuickPagination({
itemsPerPage: 5,
itemsSelector: '#org-posts [data-index]'
});
The default options object for the QuickPagination class is:
{
pagesTarget: null,
itemsPerPage: 5,
itemsSelector: '[data-index]',
paginationSelector: '#pagination',
pageDisplayProperty: 'block',
nextPrevButtons: false,
contentPrevButton: 'Previous',
contentNextButton: 'Next',
pageClasses: ['page', 'row'],
amountOfPrevNextItems: 1,
}
For individual explanation of each option, please read the documentation carefully.
pagesTarget
string
String that will be used in a querySelector to define where the items and
pagination will be displayed. Will be created before the parent of the itemsSelector if the
pagesTarget can't be found.
itemsPerPage
number
Number of items to show per page. Defaults to 5.
itemsSelector
string
String that will be used in a querySelector that defines which items to
use in the pagination lists. It is recommended to place your paginatable items in a defined
element. Items will be duplicated to create pages therefore the original items will be
hidden. Defaults to ['data-index'].
paginationSelector
string
String that will be used in a querySelector, in this element the
pagination links will be created. This element has to be outside the
pagesTarget
. Defaults to '#pagination', but will be created when the given
string fo the querySelector can't be found.
nextPrevButtons
boolean
Whether to show the next and previous buttons, or not. Defaults to
false.
contentPrevButton
string
String that will be used as the innerHTML of the previous button (if
nextPrevButtons
is set to true). Defaults to 'Previous'.
contentNextButton
string
String that will be used as the innerHTML of the next button (if
nextPrevButtons
is set to true). Defaults to 'Next'.
pageClasses
array
Array of strings, CSS classes that will be added to the pages. For styling
and layout purposes mainly. Defaults to ['page', 'row'].
amountOfPrevNextItems
number
Number of pagination links to show besides the first, last and active
page. For example, when set to 1 and the active page is 5, pagination link 4 and 6 will be
shown. Page link 2 and 3 will be replaced by a empty link (...). Defaults to 1
hooking up QuickFilter, QuickPagination and QuickSorting
The QuickClasses all work together and it is quite easy to hook them up together, here's a how to.
Simply call the init method on the pagination class instance in the QuickFilter callBackFunction option.
<script>
const pagination = new QuickPagination({...});
new QuickFilter({
...
callBackFunction: (filterClass) => {
pagination.init();
}
});
</script>
Simply call the init method on the pagination class instance in the QuickFilter and QuickSorting callBackFunction option.
<script>
const pagination = new QuickPagination({...});
new QuickFilter({
...
callBackFunction: (filterClass) => {
pagination.init();
}
});
new QuickSorting({
...
callBackFunction: (filterClass) => {
pagination.init();
}
});
</script>
QuickClasses Demo - Filtering, Sorting and Pagination
Number of results: -
sunt aut facere repellat provident occaecati excepturi optio reprehenderit
Author: Leanne Grahamquia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto
qui est esse
Author: Leanne Grahamest rerum tempore vitae sequi sint nihil reprehenderit dolor beatae ea dolores neque fugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis qui aperiam non debitis possimus qui neque nisi nulla
ea molestias quasi exercitationem repellat qui ipsa sit aut
Author: Leanne Grahamet iusto sed quo iure voluptatem occaecati omnis eligendi aut ad voluptatem doloribus vel accusantium quis pariatur molestiae porro eius odio et labore et velit aut
eum et est occaecati
Author: Leanne Grahamullam et saepe reiciendis voluptatem adipisci sit amet autem assumenda provident rerum culpa quis hic commodi nesciunt rem tenetur doloremque ipsam iure quis sunt voluptatem rerum illo velit
nesciunt quas odio
Author: Leanne Grahamrepudiandae veniam quaerat sunt sed alias aut fugiat sit autem sed est voluptatem omnis possimus esse voluptatibus quis est aut tenetur dolor neque
dolorem eum magni eos aperiam quia
Author: Leanne Grahamut aspernatur corporis harum nihil quis provident sequi mollitia nobis aliquid molestiae perspiciatis et ea nemo ab reprehenderit accusantium quas voluptate dolores velit et doloremque molestiae
magnam facilis autem
Author: Leanne Grahamdolore placeat quibusdam ea quo vitae magni quis enim qui quis quo nemo aut saepe quidem repellat excepturi ut quia sunt ut sequi eos ea sed quas
dolorem dolore est ipsam
Author: Leanne Grahamdignissimos aperiam dolorem qui eum facilis quibusdam animi sint suscipit qui sint possimus cum quaerat magni maiores excepturi ipsam ut commodi dolor voluptatum modi aut vitae
nesciunt iure omnis dolorem tempora et accusantium
Author: Leanne Grahamconsectetur animi nesciunt iure dolore enim quia ad veniam autem ut quam aut nobis et est aut quod aut provident voluptas autem voluptas
optio molestias id quia eum
Author: Leanne Grahamquo et expedita modi cum officia vel magni doloribus qui repudiandae vero nisi sit quos veniam quod sed accusamus veritatis error
et ea vero quia laudantium autem
Author: Ervin Howelldelectus reiciendis molestiae occaecati non minima eveniet qui voluptatibus accusamus in eum beatae sit vel qui neque voluptates ut commodi qui incidunt ut animi commodi
in quibusdam tempore odit est dolorem
Author: Ervin Howellitaque id aut magnam praesentium quia et ea odit et ea voluptas et sapiente quia nihil amet occaecati quia id voluptatem incidunt ea est distinctio odio
dolorum ut in voluptas mollitia et saepe quo animi
Author: Ervin Howellaut dicta possimus sint mollitia voluptas commodi quo doloremque iste corrupti reiciendis voluptatem eius rerum sit cumque quod eligendi laborum minima perferendis recusandae assumenda consectetur porro architecto ipsum ipsam
voluptatem eligendi optio
Author: Ervin Howellfuga et accusamus dolorum perferendis illo voluptas non doloremque neque facere ad qui dolorum molestiae beatae sed aut voluptas totam sit illum
eveniet quod temporibus
Author: Ervin Howellreprehenderit quos placeat velit minima officia dolores impedit repudiandae molestiae nam voluptas recusandae quis delectus officiis harum fugiat vitae
sint suscipit perspiciatis velit dolorum rerum ipsa laboriosam odio
Author: Ervin Howellsuscipit nam nisi quo aperiam aut asperiores eos fugit maiores voluptatibus quia voluptatem quis ullam qui in alias quia est consequatur magni mollitia accusamus ea nisi voluptate dicta
fugit voluptas sed molestias voluptatem provident
Author: Ervin Howelleos voluptas et aut odit natus earum aspernatur fuga molestiae ullam deserunt ratione qui eos qui nihil ratione nemo velit ut aut id quo
voluptate et itaque vero tempora molestiae
Author: Ervin Howelleveniet quo quis laborum totam consequatur non dolor ut et est repudiandae est voluptatem vel debitis et magnam
adipisci placeat illum aut reiciendis qui
Author: Ervin Howellillum quis cupiditate provident sit magnam ea sed aut omnis veniam maiores ullam consequatur atque adipisci quo iste expedita sit quos voluptas
doloribus ad provident suscipit at
Author: Ervin Howellqui consequuntur ducimus possimus quisquam amet similique suscipit porro ipsam amet eos veritatis officiis exercitationem vel fugit aut necessitatibus totam omnis rerum consequatur expedita quidem cumque explicabo
asperiores ea ipsam voluptatibus modi minima quia sint
Author: Clementine Bauchrepellat aliquid praesentium dolorem quo sed totam minus non itaque nihil labore molestiae sunt dolor eveniet hic recusandae veniam tempora et tenetur expedita sunt
dolor sint quo a velit explicabo quia nam
Author: Clementine Baucheos qui et ipsum ipsam suscipit aut sed omnis non odio expedita earum mollitia molestiae aut atque rem suscipit nam impedit esse
maxime id vitae nihil numquam
Author: Clementine Bauchveritatis unde neque eligendi quae quod architecto quo neque vitae est illo sit tempora doloremque fugit quod et et vel beatae sequi ullam sed tenetur perspiciatis
autem hic labore sunt dolores incidunt
Author: Clementine Bauchenim et ex nulla omnis voluptas quia qui voluptatem consequatur numquam aliquam sunt totam recusandae id dignissimos aut sed asperiores deserunt
rem alias distinctio quo quis
Author: Clementine Bauchullam consequatur ut omnis quis sit vel consequuntur ipsa eligendi ipsum molestiae et omnis error nostrum molestiae illo tempore quia et distinctio
est et quae odit qui non
Author: Clementine Bauchsimilique esse doloribus nihil accusamus omnis dolorem fuga consequuntur reprehenderit fugit recusandae temporibus perspiciatis cum ut laudantium omnis aut molestiae vel vero
quasi id et eos tenetur aut quo autem
Author: Clementine Baucheum sed dolores ipsam sint possimus debitis occaecati debitis qui qui et ut placeat enim earum aut odit facilis consequatur suscipit necessitatibus rerum sed inventore temporibus consequatur
delectus ullam et corporis nulla voluptas sequi
Author: Clementine Bauchnon et quaerat ex quae ad maiores maiores recusandae totam aut blanditiis mollitia quas illo ut voluptatibus voluptatem similique nostrum eum
iusto eius quod necessitatibus culpa ea
Author: Clementine Bauchodit magnam ut saepe sed non qui tempora atque nihil accusamus illum doloribus illo dolor eligendi repudiandae odit magni similique sed cum maiores
a quo magni similique perferendis
Author: Clementine Bauchalias dolor cumque impedit blanditiis non eveniet odio maxime blanditiis amet eius quis tempora quia autem rem a provident perspiciatis quia
ullam ut quidem id aut vel consequuntur
Author: Patricia Lebsackdebitis eius sed quibusdam non quis consectetur vitae impedit ut qui consequatur sed aut in quidem sit nostrum et maiores adipisci atque quaerat voluptatem adipisci repudiandae
doloremque illum aliquid sunt
Author: Patricia Lebsackdeserunt eos nobis asperiores et hic est debitis repellat molestiae optio nihil ratione ut eos beatae quibusdam distinctio maiores earum voluptates et aut adipisci ea maiores voluptas maxime
qui explicabo molestiae dolorem
Author: Patricia Lebsackrerum ut et numquam laborum odit est sit id qui sint in quasi tenetur tempore aperiam et quaerat qui in rerum officiis sequi cumque quod
magnam ut rerum iure
Author: Patricia Lebsackea velit perferendis earum ut voluptatem voluptate itaque iusto totam pariatur in nemo voluptatem voluptatem autem magni tempora minima in est distinctio qui assumenda accusamus dignissimos officia nesciunt nobis
id nihil consequatur molestias animi provident
Author: Patricia Lebsacknisi error delectus possimus ut eligendi vitae placeat eos harum cupiditate facilis reprehenderit voluptatem beatae modi ducimus quo illum voluptas eligendi et nobis quia fugit
fuga nam accusamus voluptas reiciendis itaque
Author: Patricia Lebsackad mollitia et omnis minus architecto odit voluptas doloremque maxime aut non ipsa qui alias veniam blanditiis culpa aut quia nihil cumque facere et occaecati qui aspernatur quia eaque ut aperiam inventore
provident vel ut sit ratione est
Author: Patricia Lebsackdebitis et eaque non officia sed nesciunt pariatur vel voluptatem iste vero et ea numquam aut expedita ipsum nulla in voluptates omnis consequatur aut enim officiis in quam qui
explicabo et eos deleniti nostrum ab id repellendus
Author: Patricia Lebsackanimi esse sit aut sit nesciunt assumenda eum voluptas quia voluptatibus provident quia necessitatibus ea rerum repudiandae quia voluptatem delectus fugit aut id quia ratione optio eos iusto veniam iure
eos dolorem iste accusantium est eaque quam
Author: Patricia Lebsackcorporis rerum ducimus vel eum accusantium maxime aspernatur a porro possimus iste omnis est in deleniti asperiores fuga aut voluptas sapiente vel dolore minus voluptatem incidunt ex
enim quo cumque
Author: Patricia Lebsackut voluptatum aliquid illo tenetur nemo sequi quo facilis ipsum rem optio mollitia quas voluptatem eum voluptas qui unde omnis voluptatem iure quasi maxime voluptas nam
non est facere
Author: Chelsey Dietrichmolestias id nostrum excepturi molestiae dolore omnis repellendus quaerat saepe consectetur iste quaerat tenetur asperiores accusamus ex ut nam quidem est ducimus sunt debitis saepe
commodi ullam sint et excepturi error explicabo praesentium voluptas
Author: Chelsey Dietrichodio fugit voluptatum ducimus earum autem est incidunt voluptatem odit reiciendis aliquam sunt sequi nulla dolorem non facere repellendus voluptates quia ratione harum vitae ut
eligendi iste nostrum consequuntur adipisci praesentium sit beatae perferendis
Author: Chelsey Dietrichsimilique fugit est illum et dolorum harum et voluptate eaque quidem exercitationem quos nam commodi possimus cum odio nihil nulla dolorum exercitationem magnam ex et a et distinctio debitis
optio dolor molestias sit
Author: Chelsey Dietrichtemporibus est consectetur dolore et libero debitis vel velit laboriosam quia ipsum quibusdam qui itaque fuga rem aut ea et iure quam sed maxime ut distinctio quae
ut numquam possimus omnis eius suscipit laudantium iure
Author: Chelsey Dietrichest natus reiciendis nihil possimus aut provident ex et dolor repellat pariatur est nobis rerum repellendus dolorem autem
aut quo modi neque nostrum ducimus
Author: Chelsey Dietrichvoluptatem quisquam iste voluptatibus natus officiis facilis dolorem quis quas ipsam vel et voluptatum in aliquid
quibusdam cumque rem aut deserunt
Author: Chelsey Dietrichvoluptatem assumenda ut qui ut cupiditate aut impedit veniam occaecati nemo illum voluptatem laudantium molestiae beatae rerum ea iure soluta nostrum eligendi et voluptate
ut voluptatem illum ea doloribus itaque eos
Author: Chelsey Dietrichvoluptates quo voluptatem facilis iure occaecati vel assumenda rerum officia et illum perspiciatis ab deleniti laudantium repellat ad ut et autem reprehenderit
laborum non sunt aut ut assumenda perspiciatis voluptas
Author: Chelsey Dietrichinventore ab sint natus fugit id nulla sequi architecto nihil quaerat eos tenetur in in eum veritatis non quibusdam officiis aspernatur cumque aut commodi aut
repellendus qui recusandae incidunt voluptates tenetur qui omnis exercitationem
Author: Chelsey Dietricherror suscipit maxime adipisci consequuntur recusandae voluptas eligendi et est et voluptates quia distinctio ab amet quaerat molestiae et vitae adipisci impedit sequi nesciunt quis consectetur
soluta aliquam aperiam consequatur illo quis voluptas
Author: Mrs. Dennis Schulistsunt dolores aut doloribus dolore doloribus voluptates tempora et doloremque et quo cum asperiores sit consectetur dolorem
qui enim et consequuntur quia animi quis voluptate quibusdam
Author: Mrs. Dennis Schulistiusto est quibusdam fuga quas quaerat molestias a enim ut sit accusamus enim temporibus iusto accusantium provident architecto soluta esse reprehenderit qui laborum
ut quo aut ducimus alias
Author: Mrs. Dennis Schulistminima harum praesentium eum rerum illo dolore quasi exercitationem rerum nam porro quis neque quo consequatur minus dolor quidem veritatis sunt non explicabo similique
sit asperiores ipsam eveniet odio non quia
Author: Mrs. Dennis Schulisttotam corporis dignissimos vitae dolorem ut occaecati accusamus ex velit deserunt et exercitationem vero incidunt corrupti mollitia
sit vel voluptatem et non libero
Author: Mrs. Dennis Schulistdebitis excepturi ea perferendis harum libero optio eos accusamus cum fuga ut sapiente repudiandae et ut incidunt omnis molestiae nihil ut eum odit
qui et at rerum necessitatibus
Author: Mrs. Dennis Schulistaut est omnis dolores neque rerum quod ea rerum velit pariatur beatae excepturi et provident voluptas corrupti corporis harum reprehenderit dolores eligendi
sed ab est est
Author: Mrs. Dennis Schulistat pariatur consequuntur earum quidem quo est laudantium soluta voluptatem qui ullam et est et cum voluptas voluptatum repellat est
voluptatum itaque dolores nisi et quasi
Author: Mrs. Dennis Schulistveniam voluptatum quae adipisci id et id quia eos ad et dolorem aliquam quo nisi sunt eos impedit error ad similique veniam
qui commodi dolor at maiores et quis id accusantium
Author: Mrs. Dennis Schulistperspiciatis et quam ea autem temporibus non voluptatibus qui beatae a earum officia nesciunt dolores suscipit voluptas et animi doloribus cum rerum quas et magni et hic ut ut commodi expedita sunt
consequatur placeat omnis quisquam quia reprehenderit fugit veritatis facere
Author: Mrs. Dennis Schulistasperiores sunt ab assumenda cumque modi velit qui esse omnis voluptate et fuga perferendis voluptas illo ratione amet aut et omnis
voluptatem doloribus consectetur est ut ducimus
Author: Kurtis Weissnatab nemo optio odio delectus tenetur corporis similique nobis repellendus rerum omnis facilis vero blanditiis debitis in nesciunt doloribus dicta dolores magnam minus velit
beatae enim quia vel
Author: Kurtis Weissnatenim aspernatur illo distinctio quae praesentium beatae alias amet delectus qui voluptate distinctio odit sint accusantium autem omnis quo molestiae omnis ea eveniet optio
voluptas blanditiis repellendus animi ducimus error sapiente et suscipit
Author: Kurtis Weissnatenim adipisci aspernatur nemo numquam omnis facere dolorem dolor ex quis temporibus incidunt ab delectus culpa quo reprehenderit blanditiis asperiores accusantium ut quam in voluptatibus voluptas ipsam dicta
et fugit quas eum in in aperiam quod
Author: Kurtis Weissnatid velit blanditiis eum ea voluptatem molestiae sint occaecati est eos perspiciatis incidunt a error provident eaque aut aut qui
consequatur id enim sunt et et
Author: Kurtis Weissnatvoluptatibus ex esse sint explicabo est aliquid cumque adipisci fuga repellat labore molestiae corrupti ex saepe at asperiores et perferendis natus id esse incidunt pariatur
repudiandae ea animi iusto
Author: Kurtis Weissnatofficia veritatis tenetur vero qui itaque sint non ratione sed et ut asperiores iusto eos molestiae nostrum veritatis quibusdam et nemo iusto saepe
aliquid eos sed fuga est maxime repellendus
Author: Kurtis Weissnatreprehenderit id nostrum voluptas doloremque pariatur sint et accusantium quia quod aspernatur et fugiat amet non sapiente et consequatur necessitatibus molestiae
odio quis facere architecto reiciendis optio
Author: Kurtis Weissnatmagnam molestiae perferendis quisquam qui cum reiciendis quaerat animi amet hic inventore ea quia deleniti quidem saepe porro velit
fugiat quod pariatur odit minima
Author: Kurtis Weissnatofficiis error culpa consequatur modi asperiores et dolorum assumenda voluptas et vel qui aut vel rerum voluptatum quisquam perspiciatis quia rerum consequatur totam quas sequi commodi repudiandae asperiores et saepe a
voluptatem laborum magni
Author: Kurtis Weissnatsunt repellendus quae est asperiores aut deleniti esse accusamus repellendus quia aut quia dolorem unde eum tempora esse dolore
et iusto veniam et illum aut fuga
Author: Nicholas Runolfsdottir Voccaecati a doloribus iste saepe consectetur placeat eum voluptate dolorem et qui quo quia voluptas rerum ut id enim velit est perferendis
sint hic doloribus consequatur eos non id
Author: Nicholas Runolfsdottir Vquam occaecati qui deleniti consectetur consequatur aut facere quas exercitationem aliquam hic voluptas neque id sunt ut aut accusamus sunt consectetur expedita inventore velit
consequuntur deleniti eos quia temporibus ab aliquid at
Author: Nicholas Runolfsdottir Vvoluptatem cumque tenetur consequatur expedita ipsum nemo quia explicabo aut eum minima consequatur tempore cumque quae est et et in consequuntur voluptatem voluptates aut
enim unde ratione doloribus quas enim ut sit sapiente
Author: Nicholas Runolfsdottir Vodit qui et et necessitatibus sint veniam mollitia amet doloremque molestiae commodi similique magnam et quam blanditiis est itaque quo et tenetur ratione occaecati molestiae tempora
dignissimos eum dolor ut enim et delectus in
Author: Nicholas Runolfsdottir Vcommodi non non omnis et voluptas sit autem aut nobis magnam et sapiente voluptatem et laborum repellat qui delectus facilis temporibus rerum amet et nemo voluptate expedita adipisci error dolorem
doloremque officiis ad et non perferendis
Author: Nicholas Runolfsdottir Vut animi facere totam iusto tempore molestiae eum aut et dolorem aperiam quaerat recusandae totam odio
necessitatibus quasi exercitationem odio
Author: Nicholas Runolfsdottir Vmodi ut in nulla repudiandae dolorum nostrum eos aut consequatur omnis ut incidunt est omnis iste et quam voluptates sapiente aliquam asperiores nobis amet corrupti repudiandae provident
quam voluptatibus rerum veritatis
Author: Nicholas Runolfsdottir Vnobis facilis odit tempore cupiditate quia assumenda doloribus rerum qui ea illum et qui totam aut veniam repellendus
pariatur consequatur quia magnam autem omnis non amet
Author: Nicholas Runolfsdottir Vlibero accusantium et et facere incidunt sit dolorem non excepturi qui quia sed laudantium quisquam molestiae ducimus est officiis esse molestiae iste et quos
labore in ex et explicabo corporis aut quas
Author: Nicholas Runolfsdottir Vex quod dolorem ea eum iure qui provident amet quia qui facere excepturi et repudiandae asperiores molestias provident minus incidunt vero fugit rerum sint sunt excepturi provident
tempora rem veritatis voluptas quo dolores vero
Author: Glenna Reichertfacere qui nesciunt est voluptatum voluptatem nisi sequi eligendi necessitatibus ea at rerum itaque harum non ratione velit laboriosam quis consequuntur ex officiis minima doloremque voluptas ut aut
laudantium voluptate suscipit sunt enim enim
Author: Glenna Reichertut libero sit aut totam inventore sunt porro sint qui sunt molestiae consequatur cupiditate qui iste ducimus adipisci dolor enim assumenda soluta laboriosam amet iste delectus hic
odit et voluptates doloribus alias odio et
Author: Glenna Reichertest molestiae facilis quis tempora numquam nihil qui voluptate sapiente consequatur est qui necessitatibus autem aut ipsa aperiam modi dolore numquam reprehenderit eius rem quibusdam
optio ipsam molestias necessitatibus occaecati facilis veritatis dolores aut
Author: Glenna Reichertsint molestiae magni a et quos eaque et quasi ut rerum debitis similique veniam recusandae dignissimos dolor incidunt consequatur odio
dolore veritatis porro provident adipisci blanditiis et sunt
Author: Glenna Reichertsimilique sed nisi voluptas iusto omnis mollitia et quo assumenda suscipit officia magnam sint sed tempora enim provident pariatur praesentium atque animi amet ratione
placeat quia et porro iste
Author: Glenna Reichertquasi excepturi consequatur iste autem temporibus sed molestiae beatae et quaerat et esse ut voluptatem occaecati et vel explicabo autem asperiores pariatur deserunt optio
nostrum quis quasi placeat
Author: Glenna Reicherteos et molestiae nesciunt ut a dolores perspiciatis repellendus repellat aliquid magnam sint rem ipsum est
sapiente omnis fugit eos
Author: Glenna Reichertconsequatur omnis est praesentium ducimus non iste neque hic deserunt voluptatibus veniam cum et rerum sed
sint soluta et vel magnam aut ut sed qui
Author: Glenna Reichertrepellat aut aperiam totam temporibus autem et architecto magnam ut consequatur qui cupiditate rerum quia soluta dignissimos nihil iure tempore quas est
ad iusto omnis odit dolor voluptatibus
Author: Glenna Reichertminus omnis soluta quia qui sed adipisci voluptates illum ipsam voluptatem eligendi officia ut in eos soluta similique molestias praesentium blanditiis
aut amet sed
Author: Clementina DuBuquelibero voluptate eveniet aperiam sed sunt placeat suscipit molestias similique fugit nam natus expedita consequatur consequatur dolores quia eos et placeat
ratione ex tenetur perferendis
Author: Clementina DuBuqueaut et excepturi dicta laudantium sint rerum nihil laudantium et at a neque minima officia et similique libero et commodi voluptate qui
beatae soluta recusandae
Author: Clementina DuBuquedolorem quibusdam ducimus consequuntur dicta aut quo laboriosam voluptatem quis enim recusandae ut sed sunt nostrum est odit totam sit error sed sunt eveniet provident qui nulla
qui qui voluptates illo iste minima
Author: Clementina DuBuqueaspernatur expedita soluta quo ab ut similique expedita dolores amet sed temporibus distinctio magnam saepe deleniti omnis facilis nam ipsum natus sint similique omnis
id minus libero illum nam ad officiis
Author: Clementina DuBuqueearum voluptatem facere provident blanditiis velit laboriosam pariatur accusamus odio saepe cumque dolor qui a dicta ab doloribus consequatur omnis corporis cupiditate eaque assumenda ad nesciunt
quaerat velit veniam amet cupiditate aut numquam ut sequi
Author: Clementina DuBuquein non odio excepturi sint eum labore voluptates vitae quia qui et inventore itaque rerum veniam non exercitationem delectus aut
quas fugiat ut perspiciatis vero provident
Author: Clementina DuBuqueeum non blanditiis soluta porro quibusdam voluptas vel voluptatem qui placeat dolores qui velit aut vel inventore aut cumque culpa explicabo aliquid at perspiciatis est et voluptatem dignissimos dolor itaque sit nam
laboriosam dolor voluptates
Author: Clementina DuBuquedoloremque ex facilis sit sint culpa soluta assumenda eligendi non ut eius sequi ducimus vel quasi veritatis est dolores
temporibus sit alias delectus eligendi possimus magni
Author: Clementina DuBuquequo deleniti praesentium dicta non quod aut est molestias molestias et officia quis nihil itaque dolorem quia
at nam consequatur ea labore ea harum
Author: Clementina DuBuquecupiditate quo est a modi nesciunt soluta ipsa voluptas error itaque dicta in autem qui minus magnam et distinctio eum accusamus ratione error aut