library(testit)
# Factors and strings are searched differently.
# Older versions of R don't have this set.
op = options(stringsAsFactors = FALSE)
# Helpers to create client queries that run without errors
clientQuery = function(data, columns = lapply(names(data), columnQuery)) {
columns = rep_len(columns, ncol(data))
names(columns) = seq_len(ncol(data)) - 1
list(
draw = '0',
start = '0',
length = '10',
escape = 'true',
search = list(
value = '',
regex = 'false',
caseInsensitive = 'true',
smart = 'true'
),
columns = columns,
order = list()
)
}
columnQuery = function(name = '', orderable = TRUE) {
list(
name = name,
orderable = tolower(orderable),
searchable = 'true',
search = list(value = '', regex = 'false')
)
}
orderQuery = function(column, dir = 'asc') {
list(
column = column,
dir = dir
)
}
assert('server-side sort handler works', {
tbl = data.frame(
foo = c('foo', 'bar', 'baz'),
bar = c('bar', 'baz', 'foo')
)
query = clientQuery(tbl)
out = dataTablesFilter(tbl, query)
(out$data %==% unname(tbl))
query = clientQuery(tbl)
query$order[[1]] = orderQuery('0', 'asc')
tbl_sort = tbl[order(tbl$foo), ]
out = dataTablesFilter(tbl, query)
(out$data %==% unname(tbl_sort))
query = clientQuery(tbl)
query$order[[1]] = orderQuery('1', 'desc')
tbl_sort = tbl[order(tbl$bar, decreasing = TRUE), ]
out = dataTablesFilter(tbl, query)
(out$data %==% unname(tbl_sort))
})
assert('server-side sort handler works with re-ordered columns', {
tbl = data.frame(
foo = c('foo', 'bar', 'baz'),
bar = c('bar', 'baz', 'foo')
)
query = clientQuery(tbl, lapply(c("bar", "foo"), columnQuery))
# order is indexed against re-ordered columns
query$order[[1]] = orderQuery('0', 'asc')
tbl_sort = tbl[order(tbl$bar), ]
out = dataTablesFilter(tbl, query)
(out$data %==% unname(tbl_sort))
})
options(op)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.